]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Add DNS-over-HTTPS support
authorRalph Dolmans <ralph@nlnetlabs.nl>
Thu, 7 May 2020 14:36:26 +0000 (16:36 +0200)
committerRalph Dolmans <ralph@nlnetlabs.nl>
Thu, 7 May 2020 14:36:26 +0000 (16:36 +0200)
26 files changed:
Makefile.in
config.h.in
configure
configure.ac
daemon/remote.c
daemon/worker.c
doc/example.conf.in
doc/unbound.conf.5.in
services/listen_dnsport.c
services/listen_dnsport.h
services/mesh.c
services/mesh.h
sldns/parseutil.c
sldns/parseutil.h
testcode/fake_event.c
util/config_file.c
util/config_file.h
util/configlexer.c
util/configlexer.lex
util/configparser.c
util/configparser.h
util/configparser.y
util/iana_ports.inc
util/net_help.c
util/netevent.c
util/netevent.h

index 51a13836b85792d5c9157c985d42a9bf146606f4..3a63c97becac6bf8f526628f1e4c2ab8e8a889b0 100644 (file)
@@ -663,7 +663,7 @@ dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_de
  $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
  $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/services/cache/dns.h \
  $(srcdir)/util/data/msgreply.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
- $(srcdir)/util/data/dname.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/dname.h $(srcdir)/util/module.h \
  $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h
 infra.lo infra.o: $(srcdir)/services/cache/infra.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h \
  $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/services/cache/infra.h \
@@ -704,10 +704,11 @@ msgreply.lo msgreply.o: $(srcdir)/util/data/msgreply.c config.h $(srcdir)/util/d
  $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \
  $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \
  $(srcdir)/respip/respip.h
-packed_rrset.lo packed_rrset.o: $(srcdir)/util/data/packed_rrset.c config.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/regional.h \
- $(srcdir)/util/net_help.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h
+packed_rrset.lo packed_rrset.o: $(srcdir)/util/data/packed_rrset.c config.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/dname.h \
+ $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \
+ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h
 iterator.lo iterator.o: $(srcdir)/iterator/iterator.c config.h $(srcdir)/iterator/iterator.h \
  $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \
  $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \
@@ -776,7 +777,7 @@ listen_dnsport.lo listen_dnsport.o: $(srcdir)/services/listen_dnsport.c config.h
  $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
   $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \
   $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \
- $(srcdir)/sldns/sbuffer.h $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \
  $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
  $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
  $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \
@@ -799,10 +800,10 @@ mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(s
  $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \
  $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \
  $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \
- $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/dns.h $(srcdir)/util/net_help.h \
- $(srcdir)/util/regional.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \
- $(srcdir)/util/alloc.h $(srcdir)/util/edns.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/data/dname.h \
- $(srcdir)/services/listen_dnsport.h
+ $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \
+ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \
+ $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/alloc.h \
+ $(srcdir)/util/edns.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/data/dname.h $(srcdir)/services/listen_dnsport.h
 modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/services/modstack.h \
  $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
  $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
@@ -903,7 +904,7 @@ fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/
  $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \
  $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \
  $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \
- $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h \
  $(srcdir)/services/outside_network.h  $(srcdir)/services/cache/infra.h \
  $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h \
  $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \
@@ -914,15 +915,7 @@ fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/
  $(srcdir)/libunbound/worker.h
 locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h
 log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h
-mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \
- $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
-  $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/util/log.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \
- $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \
- $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \
- $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \
- $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h
+mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h
 module.lo module.o: $(srcdir)/util/module.c config.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \
  $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
  $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h
@@ -994,7 +987,7 @@ tube.lo tube.o: $(srcdir)/util/tube.c config.h $(srcdir)/util/tube.h $(srcdir)/u
  $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/ub_event.h
 ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \
  $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h  \
- $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
+ $(srcdir)/util/tube.h
 ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \
  $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
   $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \
@@ -1004,7 +997,7 @@ ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c
  $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \
  $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \
  $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \
- $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
+ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h
 winsock_event.lo winsock_event.o: $(srcdir)/util/winsock_event.c config.h
 autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/validator/autotrust.h \
  $(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
@@ -1273,7 +1266,8 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr
  $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h \
  $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h \
  $(srcdir)/validator/val_anchor.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
+ $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h \
+ $(srcdir)/dnstap/dtstream.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)/util/rbtree.h $(srcdir)/testcode/fake_event.h \
@@ -1307,7 +1301,8 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr
  $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h \
  $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h \
  $(srcdir)/validator/val_anchor.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
+ $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h \
+ $(srcdir)/dnstap/dtstream.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)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \
@@ -1470,6 +1465,12 @@ unbound-control.lo unbound-control.o: $(srcdir)/smallapp/unbound-control.c confi
 unbound-anchor.lo unbound-anchor.o: $(srcdir)/smallapp/unbound-anchor.c config.h $(srcdir)/libunbound/unbound.h \
  $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h
 petal.lo petal.o: $(srcdir)/testcode/petal.c config.h
+unbound-dnstap-socket.lo unbound-dnstap-socket.o: $(srcdir)/dnstap/unbound-dnstap-socket.c config.h \
+ $(srcdir)/dnstap/dtstream.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/dnstap/dnstap_fstrm.h \
+ $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h $(srcdir)/services/listen_dnsport.h \
+ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h  \
+ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/config_file.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h
 pythonmod_utils.lo pythonmod_utils.o: $(srcdir)/pythonmod/pythonmod_utils.c config.h $(srcdir)/util/module.h \
  $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \
  $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
index 3c46e3f3e59483ad2a73fcdf882e32068a03ea00..258352f3eb70867aadf65deae9291c7e92cc07e1 100644 (file)
@@ -28,6 +28,9 @@
 /* Whether daemon is deprecated */
 #undef DEPRECATED_DAEMON
 
+/* Define this to enable kernel based UDP source port randomization. */
+#undef DISABLE_EXPLICIT_PORT_RANDOMISATION
+
 /* default dnstap socket path */
 #undef DNSTAP_SOCKET_PATH
 
    don't. */
 #undef HAVE_DECL_INET_PTON
 
+/* Define to 1 if you have the declaration of `nghttp2_session_server_new',
+   and to 0 if you don't. */
+#undef HAVE_DECL_NGHTTP2_SESSION_SERVER_NEW
+
 /* Define to 1 if you have the declaration of `NID_ED25519', and to 0 if you
    don't. */
 #undef HAVE_DECL_NID_ED25519
 /* Define to 1 if you have the <nettle/eddsa.h> header file. */
 #undef HAVE_NETTLE_EDDSA_H
 
+/* Define this to use nghttp2 client. */
+#undef HAVE_NGHTTP2
+
+/* Define to 1 if you have the <nghttp2/nghttp2.h> header file. */
+#undef HAVE_NGHTTP2_NGHTTP2_H
+
 /* Use libnss for crypto */
 #undef HAVE_NSS
 
 /* Define if you have the SSL libraries installed. */
 #undef HAVE_SSL
 
+/* Define to 1 if you have the `SSL_CTX_set_alpn_select_cb' function. */
+#undef HAVE_SSL_CTX_SET_ALPN_SELECT_CB
+
 /* Define to 1 if you have the `SSL_CTX_set_ciphersuites' function. */
 #undef HAVE_SSL_CTX_SET_CIPHERSUITES
 
 /* Define to 1 to use ipset support */
 #undef USE_IPSET
 
-/* Define to 1 to disable explict UDP source port randomisation and rely on the
-   kernel to provide random source ports */
-#undef DISABLE_EXPLICIT_PORT_RANDOMISATION
+/* Define if you enable libevent */
+#undef USE_LIBEVENT
 
 /* Define if you want to use internal select based events */
 #undef USE_MINI_EVENT
@@ -1349,6 +1364,8 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
 #define UNBOUND_DNS_PORT 53
 /** default port for DNS over TLS traffic. */
 #define UNBOUND_DNS_OVER_TLS_PORT 853
+/** default port for DNS over HTTPS traffic. */
+#define UNBOUND_DNS_OVER_HTTPS_PORT 443
 /** default port for unbound control traffic, registered port with IANA,
     ub-dns-control  8953/tcp    unbound dns nameserver control */
 #define UNBOUND_CONTROL_PORT 8953
index d9355009c821f1b83ae8b92d7a935d3e65d6cfa6..107eedc11855c393f11bdba6128e8f6f4059b5c9 100755 (executable)
--- a/configure
+++ b/configure
@@ -804,6 +804,7 @@ infodir
 docdir
 oldincludedir
 includedir
+runstatedir
 localstatedir
 sharedstatedir
 sysconfdir
@@ -877,6 +878,7 @@ enable_tfo_server
 with_libevent
 with_libexpat
 with_libhiredis
+with_libnghttp2
 enable_static_exe
 enable_fully_static
 enable_lock_checks
@@ -951,6 +953,7 @@ datadir='${datarootdir}'
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1203,6 +1206,15 @@ do
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
 
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1340,7 +1352,7 @@ fi
 for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
                datadir sysconfdir sharedstatedir localstatedir includedir \
                oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-               libdir localedir mandir
+               libdir localedir mandir runstatedir
 do
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
@@ -1493,6 +1505,7 @@ Fine tuning of the installation directories:
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
@@ -1635,6 +1648,7 @@ Optional Packages:
                           outgoing port ranges.
   --with-libexpat=path    specify explicit path for libexpat.
   --with-libhiredis=path  specify explicit path for libhiredis.
+  --with-libnghttp2=path  specify explicit path for libnghttp2.
   --with-dnstap-socket-path=pathname
                           set default dnstap socket path
   --with-protobuf-c=path  Path where protobuf-c is installed, for dnstap
@@ -15666,7 +15680,7 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
@@ -15712,7 +15726,7 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
@@ -15736,7 +15750,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
@@ -15781,7 +15795,7 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
@@ -15805,7 +15819,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
@@ -18306,7 +18320,7 @@ done
 # these check_funcs need -lssl
 BAKLIBS="$LIBS"
 LIBS="-lssl $LIBS"
-for ac_func in OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites
+for ac_func in OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_alpn_select_cb
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -19124,31 +19138,34 @@ esac
 if test "${with_libevent+set}" = set; then :
   withval=$with_libevent;
 else
-   withval="no"
+   with_libevent="no"
 fi
 
-if test x_$withval = x_yes -o x_$withval != x_no; then
+if test "x_$with_libevent" != x_no; then
+
+$as_echo "#define USE_LIBEVENT 1" >>confdefs.h
+
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libevent" >&5
 $as_echo_n "checking for libevent... " >&6; }
-        if test x_$withval = x_ -o x_$withval = x_yes; then
-            withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
+        if test "x_$with_libevent" = x_ -o "x_$with_libevent" = x_yes; then
+            with_libevent="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
         fi
-        for dir in $withval; do
+        for dir in $with_libevent; do
             thedir="$dir"
             if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then
                 found_libevent="yes"
-                               if test "$thedir" != "/usr"; then
-                    CPPFLAGS="$CPPFLAGS -I$thedir/include"
-               fi
-                break;
-            fi
+                                                               if test "$thedir" != "/usr"; then
+                                   CPPFLAGS="$CPPFLAGS -I$thedir/include"
+                               fi
+                               break;
+                   fi
         done
         if test x_$found_libevent != x_yes; then
                if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then
                        # libevent source directory
-                       { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $thedir" >&5
+                       { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $thedir" >&5
 $as_echo "found in $thedir" >&6; }
-                       CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include"
+                       CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include"
                        BAK_LDFLAGS_SET="1"
                        BAK_LDFLAGS="$LDFLAGS"
                        # remove evdns from linking
@@ -19161,10 +19178,10 @@ $as_echo "found in $thedir" >&6; }
                        cp $ev_files_o build/libevent
                        cp $ev_files_lo build/libevent
                        cp $ev_files_libso build/libevent/.libs
-                       LATE_LDFLAGS="build/libevent/*.lo -lm"
+                       LATE_LDFLAGS="build/libevent/*.lo -lm"
                        LDFLAGS="build/libevent/*.o $LDFLAGS -lm"
                else
-                       as_fn_error $? "Cannot find the libevent library in $withval
+            as_fn_error $? "Cannot find the libevent library in $with_libevent
 You can restart ./configure --with-libevent=no to use a builtin alternative.
 Please note that this alternative is not as capable as libevent when using
 large outgoing port ranges.  " "$LINENO" 5
@@ -19615,6 +19632,70 @@ _ACEOF
 
 fi
 
+# nghttp2
+
+# Check whether --with-libnghttp2 was given.
+if test "${with_libnghttp2+set}" = set; then :
+  withval=$with_libnghttp2;
+else
+   withval="no"
+fi
+
+found_libnghttp2="no"
+if test x_$withval = x_yes -o x_$withval != x_no; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libnghttp2" >&5
+$as_echo_n "checking for libnghttp2... " >&6; }
+   if test x_$withval = x_ -o x_$withval = x_yes; then
+            withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
+   fi
+   for dir in $withval ; do
+            if test -f "$dir/include/nghttp2/nghttp2.h"; then
+               found_libnghttp2="yes"
+                               if test "$dir" != "/usr"; then
+                    CPPFLAGS="$CPPFLAGS -I$dir/include"
+                   LDFLAGS="$LDFLAGS -L$dir/lib"
+               fi
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $dir" >&5
+$as_echo "found in $dir" >&6; }
+
+$as_echo "#define HAVE_NGHTTP2 1" >>confdefs.h
+
+               LIBS="$LIBS -lnghttp2"
+                break;
+            fi
+    done
+    if test x_$found_libnghttp2 != x_yes; then
+       as_fn_error $? "Could not find libnghttp2, nghttp2.h" "$LINENO" 5
+    fi
+    for ac_header in nghttp2/nghttp2.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "nghttp2/nghttp2.h" "ac_cv_header_nghttp2_nghttp2_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_nghttp2_nghttp2_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_NGHTTP2_NGHTTP2_H 1
+_ACEOF
+
+fi
+
+done
+
+    ac_fn_c_check_decl "$LINENO" "nghttp2_session_server_new" "ac_cv_have_decl_nghttp2_session_server_new" "$ac_includes_default
+    #include <nghttp2/nghttp2.h>
+
+"
+if test "x$ac_cv_have_decl_nghttp2_session_server_new" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NGHTTP2_SESSION_SERVER_NEW $ac_have_decl
+_ACEOF
+
+fi
+
 # set static linking for uninstalled libraries if requested
 
 staticexe=""
index e71bc58881ecb776748af90a687b8095b7dda41e..6b761974ac10cff69d1eb12a03399631c6cb362d 100644 (file)
@@ -830,7 +830,7 @@ AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_C
 # these check_funcs need -lssl
 BAKLIBS="$LIBS"
 LIBS="-lssl $LIBS"
-AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites])
+AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_alpn_select_cb])
 LIBS="$BAKLIBS"
 
 AC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [
@@ -1369,6 +1369,39 @@ if test x_$withval = x_yes -o x_$withval != x_no; then
     ])
 fi
 
+# nghttp2
+AC_ARG_WITH(libnghttp2, AC_HELP_STRING([--with-libnghttp2=path],
+    [specify explicit path for libnghttp2.]),
+    [ ],[ withval="no" ])
+found_libnghttp2="no"
+if test x_$withval = x_yes -o x_$withval != x_no; then
+   AC_MSG_CHECKING(for libnghttp2)
+   if test x_$withval = x_ -o x_$withval = x_yes; then
+            withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
+   fi
+   for dir in $withval ; do
+            if test -f "$dir/include/nghttp2/nghttp2.h"; then
+               found_libnghttp2="yes"
+               dnl assume /usr is in default path.
+               if test "$dir" != "/usr"; then
+                    CPPFLAGS="$CPPFLAGS -I$dir/include"
+                   LDFLAGS="$LDFLAGS -L$dir/lib"
+               fi
+               AC_MSG_RESULT(found in $dir)
+               AC_DEFINE([HAVE_NGHTTP2], [1], [Define this to use nghttp2 client.])
+               LIBS="$LIBS -lnghttp2"
+                break;
+            fi
+    done
+    if test x_$found_libnghttp2 != x_yes; then
+       AC_ERROR([Could not find libnghttp2, nghttp2.h])
+    fi
+    AC_CHECK_HEADERS([nghttp2/nghttp2.h],,, [AC_INCLUDES_DEFAULT])
+    AC_CHECK_DECLS([nghttp2_session_server_new], [], [], [AC_INCLUDES_DEFAULT
+    #include <nghttp2/nghttp2.h>
+    ])
+fi
+
 # set static linking for uninstalled libraries if requested
 AC_SUBST(staticexe)
 staticexe=""
@@ -2105,6 +2138,8 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
 #define UNBOUND_DNS_PORT 53
 /** default port for DNS over TLS traffic. */
 #define UNBOUND_DNS_OVER_TLS_PORT 853
+/** default port for DNS over HTTPS traffic. */
+#define UNBOUND_DNS_OVER_HTTPS_PORT 443
 /** default port for unbound control traffic, registered port with IANA,
     ub-dns-control  8953/tcp    unbound dns nameserver control */
 #define UNBOUND_CONTROL_PORT 8953
index f4b7298cb3d9eccd8af5da8a7aa854127f863fdb..5eb829859158d954037afed5a1a6836c96e90b99 100644 (file)
@@ -329,7 +329,7 @@ add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err,
 
                /* open fd */
                fd = create_tcp_accept_sock(res, 1, &noproto, 0,
-                       cfg->ip_transparent, 0, cfg->ip_freebind, cfg->use_systemd);
+                       cfg->ip_transparent, 0, 0, cfg->ip_freebind, cfg->use_systemd);
                freeaddrinfo(res);
        }
 
index cec6bcd667caf689aca90b47df372d15b09cabdb..24fb3f30e0da8fc810763410b208342310748ba0 100644 (file)
@@ -1109,7 +1109,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
        struct respip_client_info* cinfo = NULL, cinfo_tmp;
        memset(&qinfo, 0, sizeof(qinfo));
 
-       if(error != NETEVENT_NOERROR || !repinfo) {
+       if((error != NETEVENT_NOERROR && error != NETEVENT_DONE)|| !repinfo) {
                /* some bad tcp query DNS formats give these error calls */
                verbose(VERB_ALGO, "handle request called with err=%d", error);
                return 0;
@@ -1797,7 +1797,8 @@ worker_init(struct worker* worker, struct config_file *cfg,
                cfg->do_tcp_keepalive
                        ? cfg->tcp_keepalive_timeout
                        : cfg->tcp_idle_timeout,
-                       worker->daemon->tcl,
+               cfg->harden_large_queries,
+               worker->daemon->tcl,
                worker->daemon->listen_sslctx,
                dtenv, worker_handle_request, worker);
        if(!worker->front) {
index dbc30a48c8d3ba7af386e1d09cb1f4c3b581d9b3..dbcb97cecf61ac023c34d1a816e496f46e040842 100644 (file)
@@ -729,12 +729,14 @@ server:
        # add a netblock specific override to a localzone, with zone type
        # local-zone-override: "example.com" 192.0.2.0/24 refuse
 
-       # service clients over TLS (on the TCP sockets), with plain DNS inside
-       # the TLS stream.  Give the certificate to use and private key.
+       # service clients over TLS (on the TCP sockets) with plain DNS inside
+       # the TLS stream, and over HTTPS using HTTP/2 as specified in RFC8484.
+       # Give the certificate to use and private key.
        # default is "" (disabled).  requires restart to take effect.
        # tls-service-key: "path/to/privatekeyfile.key"
        # tls-service-pem: "path/to/publiccertfile.pem"
        # tls-port: 853
+       # https-port: 443
 
        # cipher setting for TLSv1.2
        # tls-ciphers: "DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256"
index 43159666d8eeaf39b4ced88ad0e7e43155128042..3f14061c943385a7106a96e6e48d9a49e8564459 100644 (file)
@@ -469,15 +469,16 @@ Alternate syntax for \fBtls\-upstream\fR.  If both are present in the config
 file the last is used.
 .TP
 .B tls\-service\-key: \fI<file>
-If enabled, the server provides TLS service on the TCP ports marked
-implicitly or explicitly for TLS service with tls\-port.  The file must
-contain the private key for the TLS session, the public certificate is in
-the tls\-service\-pem file and it must also be specified if tls\-service\-key
-is specified.  The default is "", turned off.  Enabling or disabling
-this service requires a restart (a reload is not enough), because the
-key is read while root permissions are held and before chroot (if any).
-The ports enabled implicitly or explicitly via \fBtls\-port:\fR do not provide
-normal DNS TCP service.
+If enabled, the server provides DNS-over-TLS or DNS-over-HTTPS service on the
+TCP ports marked implicitly or explicitly for these services with tls\-port or
+https\-port. The file must contain the private key for the TLS session, the
+public certificate is in the tls\-service\-pem file and it must also be
+specified if tls\-service\-key is specified.  The default is "", turned off.
+Enabling or disabling this service requires a restart (a reload is not enough),
+because the key is read while root permissions are held and before chroot (if any).
+The ports enabled implicitly or explicitly via \fBtls\-port:\fR and
+\fBhttps\-port:\fR do not provide normal DNS TCP service. Unbound needs to be
+compiled with libnghttp2 in order to provide DNS-over-HTTPS.
 .TP
 .B ssl\-service\-key: \fI<file>
 Alternate syntax for \fBtls\-service\-key\fR.
@@ -493,6 +494,10 @@ Alternate syntax for \fBtls\-service\-pem\fR.
 The port number on which to provide TCP TLS service, default 853, only
 interfaces configured with that port number as @number get the TLS service.
 .TP
+.B https\-port: \fI<number>
+The port number on which to provide DNS-over-HTTPS service, default 443, only
+interfaces configured with that port number as @number get the HTTPS service.
+.TP
 .B ssl\-port: \fI<number>
 Alternate syntax for \fBtls\-port\fR.
 .TP
index 7e2afd843be8d8f5a6242754b31de93407ea64d6..fdfed0a40eaea0372f039d0bbfa00dc522121c4f 100644 (file)
@@ -53,6 +53,7 @@
 #include "util/config_file.h"
 #include "util/net_help.h"
 #include "sldns/sbuffer.h"
+#include "sldns/parseutil.h"
 #include "services/mesh.h"
 #include "util/fptr_wlist.h"
 #include "util/locks.h"
@@ -638,7 +639,8 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
 
 int
 create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
-       int* reuseport, int transparent, int mss, int freebind, int use_systemd)
+       int* reuseport, int transparent, int mss, int nodelay, int freebind,
+       int use_systemd)
 {
        int s;
 #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_V6ONLY) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND) || defined(SO_BINDANY)
@@ -685,6 +687,36 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
 #endif
                return -1;
        }
+       if(nodelay) {
+#if defined(IPPROTO_TCP) && defined(TCP_NODELAY)
+               if(setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (void*)&on,
+                       (socklen_t)sizeof(on)) < 0) {
+                       #ifndef USE_WINSOCK
+                       log_err(" setsockopt(.. TCP_NODELAY ..) failed: %s",
+                               strerror(errno));
+                       #else
+                       log_err(" setsockopt(.. TCP_NODELAY ..) failed: %s",
+                               wsa_strerror(WSAGetLastError()));
+                       #endif
+               }
+#else
+               log_warn(" setsockopt(TCP_NODELAY) unsupported");
+#endif /* defined(IPPROTO_TCP) && defined(TCP_NODELAY) */
+#if defined(IPPROTO_TCP) && defined(TCP_QUICKACK)
+               if(setsockopt(s, IPPROTO_TCP, TCP_QUICKACK, (void*)&on,
+                       (socklen_t)sizeof(on)) < 0) {
+                       #ifndef USE_WINSOCK
+                       log_err(" setsockopt(.. TCP_QUICKACK ..) failed: %s",
+                               strerror(errno));
+                       #else
+                       log_err(" setsockopt(.. TCP_QUICKACK ..) failed: %s",
+                               wsa_strerror(WSAGetLastError()));
+                       #endif
+               }
+#else
+               log_warn(" setsockopt(TCP_QUICKACK) unsupported");
+#endif /* defined(IPPROTO_TCP) && defined(TCP_QUICKACK) */
+       }
        if (mss > 0) {
 #if defined(IPPROTO_TCP) && defined(TCP_MAXSEG)
                if(setsockopt(s, IPPROTO_TCP, TCP_MAXSEG, (void*)&mss,
@@ -952,7 +984,8 @@ err:
 static int
 make_sock(int stype, const char* ifname, const char* port, 
        struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd,
-       int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd)
+       int* reuseport, int transparent, int tcp_mss, int nodelay, int freebind,
+       int use_systemd)
 {
        struct addrinfo *res = NULL;
        int r, s, inuse, noproto;
@@ -988,7 +1021,7 @@ make_sock(int stype, const char* ifname, const char* port,
                }
        } else  {
                s = create_tcp_accept_sock(res, v6only, &noproto, reuseport,
-                       transparent, tcp_mss, freebind, use_systemd);
+                       transparent, tcp_mss, nodelay, freebind, use_systemd);
                if(s == -1 && noproto && hints->ai_family == AF_INET6){
                        *noip6 = 1;
                }
@@ -1001,7 +1034,8 @@ make_sock(int stype, const char* ifname, const char* port,
 static int
 make_sock_port(int stype, const char* ifname, const char* port, 
        struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd,
-       int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd)
+       int* reuseport, int transparent, int tcp_mss, int nodelay, int freebind,
+       int use_systemd)
 {
        char* s = strchr(ifname, '@');
        if(s) {
@@ -1023,10 +1057,11 @@ make_sock_port(int stype, const char* ifname, const char* port,
                (void)strlcpy(p, s+1, sizeof(p));
                p[strlen(s+1)]=0;
                return make_sock(stype, newif, p, hints, v6only, noip6,
-                       rcv, snd, reuseport, transparent, tcp_mss, freebind, use_systemd);
+                       rcv, snd, reuseport, transparent, tcp_mss, nodelay,
+                       freebind, use_systemd);
        }
        return make_sock(stype, ifname, port, hints, v6only, noip6, rcv, snd,
-               reuseport, transparent, tcp_mss, freebind, use_systemd);
+               reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd);
 }
 
 /**
@@ -1125,6 +1160,18 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port,
        return 0;
 }
 
+/** see if interface is https, its port number == the https port number */
+static int
+if_is_https(const char* ifname, const char* port, int https_port)
+{
+       char* p = strchr(ifname, '@');
+       if(!p && atoi(port) == https_port)
+               return 1;
+       if(p && atoi(p+1) == https_port)
+               return 1;
+       return 0;
+}
+
 /**
  * Helper for ports_open. Creates one interface (or NULL for default).
  * @param ifname: The interface ip address.
@@ -1139,6 +1186,7 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port,
  * @param snd: send buffer size for UDP
  * @param ssl_port: ssl service port number
  * @param tls_additional_port: list of additional ssl service port numbers.
+ * @param https_port: DoH service port number
  * @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.
@@ -1152,11 +1200,13 @@ 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_port, int* reuseport,
-       int transparent, int tcp_mss, int freebind, int use_systemd,
-       int dnscrypt_port)
+       struct config_strlist* tls_additional_port, int https_port,
+       int* reuseport, int transparent, int tcp_mss, int freebind,
+       int use_systemd, int dnscrypt_port)
 {
        int s, noip6=0;
+       int is_https = if_is_https(ifname, port, https_port);
+       int nodelay = is_https; /* TODO make config option */
 #ifdef USE_DNSCRYPT
        int is_dnscrypt = ((strchr(ifname, '@') && 
                        atoi(strchr(ifname, '@')+1) == dnscrypt_port) ||
@@ -1171,7 +1221,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
        if(do_auto) {
                if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, 
                        &noip6, rcv, snd, reuseport, transparent,
-                       tcp_mss, freebind, use_systemd)) == -1) {
+                       tcp_mss, nodelay, freebind, use_systemd)) == -1) {
                        if(noip6) {
                                log_warn("IPv6 protocol not available");
                                return 1;
@@ -1200,7 +1250,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
                /* regular udp socket */
                if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, 
                        &noip6, rcv, snd, reuseport, transparent,
-                       tcp_mss, freebind, use_systemd)) == -1) {
+                       tcp_mss, nodelay, freebind, use_systemd)) == -1) {
                        if(noip6) {
                                log_warn("IPv6 protocol not available");
                                return 1;
@@ -1220,8 +1270,17 @@ 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_port);
+               enum listen_type port_type;
+               if(is_ssl)
+                       port_type = listen_type_ssl;
+               else if(is_https)
+                       port_type = listen_type_http;
+               else if(is_dnscrypt)
+                       port_type = listen_type_tcp_dnscrypt;
+               else
+                       port_type = listen_type_tcp;
                if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1, 
-                       &noip6, 0, 0, reuseport, transparent, tcp_mss,
+                       &noip6, 0, 0, reuseport, transparent, tcp_mss, nodelay,
                        freebind, use_systemd)) == -1) {
                        if(noip6) {
                                /*log_warn("IPv6 protocol not available");*/
@@ -1231,8 +1290,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
                }
                if(is_ssl)
                        verbose(VERB_ALGO, "setup TCP for SSL service");
-               if(!port_insert(list, s, is_ssl?listen_type_ssl:
-                       (is_dnscrypt?listen_type_tcp_dnscrypt:listen_type_tcp))) {
+               if(!port_insert(list, s, port_type)) {
 #ifndef USE_WINSOCK
                        close(s);
 #else
@@ -1266,7 +1324,7 @@ listen_cp_insert(struct comm_point* c, struct listen_dnsport* front)
 struct listen_dnsport* 
 listen_create(struct comm_base* base, struct listen_port* ports,
        size_t bufsize, int tcp_accept_count, int tcp_idle_timeout,
-       struct tcl_list* tcp_conn_limit, void* sslctx,
+       int harden_large_queries, struct tcl_list* tcp_conn_limit, void* sslctx,
        struct dt_env* dtenv, comm_point_callback_type* cb, void *cb_arg)
 {
        struct listen_dnsport* front = (struct listen_dnsport*)
@@ -1298,14 +1356,35 @@ listen_create(struct comm_base* base, struct listen_port* ports,
                                ports->ftype == listen_type_tcp_dnscrypt)
                        cp = comm_point_create_tcp(base, ports->fd, 
                                tcp_accept_count, tcp_idle_timeout,
+                               harden_large_queries,
                                tcp_conn_limit, bufsize, front->udp_buff,
-                               cb, cb_arg);
-               else if(ports->ftype == listen_type_ssl) {
+                               ports->ftype, cb, cb_arg);
+               else if(ports->ftype == listen_type_ssl ||
+                       ports->ftype == listen_type_http) {
                        cp = comm_point_create_tcp(base, ports->fd, 
                                tcp_accept_count, tcp_idle_timeout,
+                               harden_large_queries,
                                tcp_conn_limit, bufsize, front->udp_buff,
-                               cb, cb_arg);
+                               ports->ftype, cb, cb_arg);
                        cp->ssl = sslctx;
+                       if(ports->ftype == listen_type_http) {
+                               if(!sslctx) {
+                               log_warn("HTTPS port configured, but no TLS "
+                                       "tls-service-key or tls-service-pem "
+                                       "set");
+                               }
+#ifndef HAVE_SSL_CTX_SET_ALPN_SELECT_CB
+                               log_warn("Unbound is not compiled with an "
+                                       "OpenSSL version supporting ALPN "
+                                       " (OpenSSL >= 1.0.2). This is required "
+                                       "to use DNS-over-HTTPS");
+#endif
+#ifndef HAVE_NGHTTP2_NGHTTP2_H
+                               log_warn("Unbound is not compiled with "
+                                       "nghttp2. This is required to use "
+                                       "DNS-over-HTTPS.");
+#endif
+                       }
                } else if(ports->ftype == listen_type_udpancil ||
                                  ports->ftype == listen_type_udpancil_dnscrypt)
                        cp = comm_point_create_udp_ancil(base, ports->fd, 
@@ -1419,6 +1498,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport)
                                &hints, portbuf, &list,
                                cfg->so_rcvbuf, cfg->so_sndbuf,
                                cfg->ssl_port, cfg->tls_additional_port,
+                               cfg->https_port,
                                reuseport, cfg->ip_transparent,
                                cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd,
                                cfg->dnscrypt_port)) {
@@ -1433,6 +1513,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport)
                                &hints, portbuf, &list,
                                cfg->so_rcvbuf, cfg->so_sndbuf,
                                cfg->ssl_port, cfg->tls_additional_port,
+                               cfg->https_port,
                                reuseport, cfg->ip_transparent,
                                cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd,
                                cfg->dnscrypt_port)) {
@@ -1449,6 +1530,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport)
                                do_tcp, &hints, portbuf, &list, 
                                cfg->so_rcvbuf, cfg->so_sndbuf,
                                cfg->ssl_port, cfg->tls_additional_port,
+                               cfg->https_port,
                                reuseport, cfg->ip_transparent,
                                cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd,
                                cfg->dnscrypt_port)) {
@@ -1463,6 +1545,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport)
                                do_tcp, &hints, portbuf, &list, 
                                cfg->so_rcvbuf, cfg->so_sndbuf,
                                cfg->ssl_port, cfg->tls_additional_port,
+                               cfg->https_port,
                                reuseport, cfg->ip_transparent,
                                cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd,
                                cfg->dnscrypt_port)) {
@@ -1906,3 +1989,624 @@ size_t tcp_req_info_get_stream_buffer_size(void)
        lock_basic_unlock(&stream_wait_count_lock);
        return s;
 }
+
+#ifdef HAVE_NGHTTP2
+/** nghttp2 callback. Used to copy response from rbuffer to nghttp2 session */
+static ssize_t http2_submit_response_read_callback(
+       nghttp2_session* ATTR_UNUSED(session),
+       int32_t stream_id, uint8_t* buf, size_t length, uint32_t* data_flags,
+       nghttp2_data_source* source, void* ATTR_UNUSED(cb_arg))
+{
+       struct http2_stream* h2_stream;
+       struct http2_session* h2_session = source->ptr;
+       size_t copylen = length;
+       if(!(h2_stream = nghttp2_session_get_stream_user_data(
+               h2_session->session, stream_id))) {
+               verbose(VERB_QUERY, "http2: cannot get stream data, closing "
+                       "stream");
+               return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
+       }
+       if(!h2_stream->rbuffer ||
+               sldns_buffer_remaining(h2_stream->rbuffer) == 0) {
+               verbose(VERB_QUERY, "http2: cannot submit buffer. No data "
+                       "available in rbuffer");
+               sldns_buffer_free(h2_stream->rbuffer);
+               h2_stream->rbuffer = NULL;
+               return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
+       }
+
+       if(copylen > sldns_buffer_remaining(h2_stream->rbuffer))
+               copylen = sldns_buffer_remaining(h2_stream->rbuffer);
+       if(copylen > SSIZE_MAX)
+               copylen = SSIZE_MAX; /* will probably never happen */
+
+       memcpy(buf, sldns_buffer_current(h2_stream->rbuffer), copylen);
+       sldns_buffer_skip(h2_stream->rbuffer, copylen);
+
+       if(sldns_buffer_remaining(h2_stream->rbuffer) == 0) {
+               *data_flags |= NGHTTP2_DATA_FLAG_EOF;
+               sldns_buffer_free(h2_stream->rbuffer);
+               h2_stream->rbuffer = NULL;
+       }
+
+       return copylen;
+}
+
+/**
+ * DNS response ready to be submitted to nghttp2, to be prepared for sending
+ * out. Response is stored in c->buffer. Copy to rbuffer because the c->buffer
+ * might be used before this will bne send out.
+ * @param h2_session: http2 session, containing c->buffer which contains answer
+ * @return 0 on error, 1 otherwise
+ */
+int http2_submit_dns_response(struct http2_session* h2_session)
+{
+       int ret;
+       nghttp2_data_provider data_prd;
+       char status[4];
+       nghttp2_nv headers[2];
+       struct http2_stream* h2_stream = h2_session->c->h2_stream;
+
+       if(h2_stream->rbuffer) {
+               log_err("http2 submit response error: rbuffer already "
+                       "exists");
+               return 0;
+       }
+       if(sldns_buffer_remaining(h2_session->c->buffer) == 0) {
+               log_err("http2 submit response error: c->buffer not complete");
+               return 0;
+       }
+
+       if(!(h2_stream->rbuffer = sldns_buffer_new(
+               sldns_buffer_remaining(h2_session->c->buffer)))) {
+               log_err("http2 submit response error: malloc failure");
+               return 0;
+       }
+
+       if(snprintf(status, 4, "%d", h2_stream->status) != 3) {
+               verbose(VERB_QUERY, "http2: submit response error: "
+                       "invalid status");
+               return 0;
+       }
+       headers[0].name = (uint8_t*)":status";
+       headers[0].namelen = 7;
+       headers[0].value = (uint8_t*)status;
+       headers[0].valuelen = 3;
+       headers[0].flags = NGHTTP2_NV_FLAG_NONE;
+
+       headers[1].name = (uint8_t*)"content-type";
+       headers[1].namelen = 12;
+       headers[1].value = (uint8_t*)"application/dns-message";
+       headers[1].valuelen = 23;
+       headers[1].flags = NGHTTP2_NV_FLAG_NONE;
+
+       /*TODO be nice and add the content-length header
+       headers[2].name = (uint8_t*)"content-length";
+       headers[2].namelen = 14;
+       headers[2].value = 
+       headers[2].valuelen = 
+       headers[2].flags = NGHTTP2_NV_FLAG_NONE;
+       */
+
+       sldns_buffer_write(h2_stream->rbuffer,
+               sldns_buffer_current(h2_session->c->buffer),
+               sldns_buffer_remaining(h2_stream->rbuffer));
+       sldns_buffer_flip(h2_stream->rbuffer);
+
+       data_prd.source.ptr = h2_session;
+       data_prd.read_callback = http2_submit_response_read_callback;
+       ret = nghttp2_submit_response(h2_session->session, h2_stream->stream_id,
+               headers, 2, &data_prd);
+       if(ret) {
+               verbose(VERB_QUERY, "http2: set_stream_user_data failed, "
+                       "error: %s", nghttp2_strerror(ret));
+               return 0;
+       }
+       return 1;
+}
+#else
+int http2_submit_dns_response(void* ATTR_UNUSED(v))
+{
+       return 0;
+}
+#endif
+
+#ifdef HAVE_NGHTTP2
+/** HTTP status to descriptive string */
+static char* http_status_to_str(enum http_status s)
+{
+       switch(s) {
+               case HTTP_STATUS_OK:
+                       return "OK";
+               case HTTP_STATUS_BAD_REQUEST:
+                       return "Bad Request";
+               case HTTP_STATUS_NOT_FOUND:
+                       return "Not Found";
+               case HTTP_STATUS_PAYLOAD_TOO_LARGE:
+                       return "Payload Too Large";
+               case HTTP_STATUS_URI_TOO_LONG:
+                       return "URI Too Long";
+               case HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE:
+                       return "Unsupported Media Type";
+               case HTTP_STATUS_NOT_IMPLEMENTED:
+                       return "Not Implemented";
+       }
+       return "Status Unknown";
+}
+
+/** nghttp2 callback. Used to copy error message to nghttp2 session */
+static ssize_t http2_submit_error_read_callback(
+       nghttp2_session* ATTR_UNUSED(session),
+       int32_t stream_id, uint8_t* buf, size_t length, uint32_t* data_flags,
+       nghttp2_data_source* source, void* ATTR_UNUSED(cb_arg))
+{
+       struct http2_stream* h2_stream;
+       struct http2_session* h2_session = source->ptr;
+       char* msg;
+       if(!(h2_stream = nghttp2_session_get_stream_user_data(
+               h2_session->session, stream_id))) {
+               verbose(VERB_QUERY, "http2: cannot get stream data, closing "
+                       "stream");
+               return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
+       }
+       *data_flags |= NGHTTP2_DATA_FLAG_EOF;
+       msg = http_status_to_str(h2_stream->status);
+       if(length < strlen(msg))
+               return 0; /* not worth trying over multiple frames */
+       memcpy(buf, msg, strlen(msg));
+       return strlen(msg);
+
+}
+
+/**
+ * HTTP error response ready to be submitted to nghttp2, to be prepared for
+ * sending out. Message body will contain descriptive string for HTTP status.
+ * @param h2_session: http2 session to submit to
+ * @param h2_stream: http2 stream containing HTTP status to use for error
+ * @return 0 on error, 1 otherwise
+ */
+static int http2_submit_error(struct http2_session* h2_session,
+       struct http2_stream* h2_stream)
+{
+       int ret;
+       char status[4];
+       nghttp2_data_provider data_prd;
+       nghttp2_nv headers[1]; /* will be copied by nghttp */
+       if(snprintf(status, 4, "%d", h2_stream->status) != 3) {
+               verbose(VERB_QUERY, "http2: submit error failed, "
+                       "invalid status");
+               return 0;
+       }
+       headers[0].name = (uint8_t*)":status";
+       headers[0].namelen = 7;
+       headers[0].value = (uint8_t*)status;
+       headers[0].valuelen = 3;
+       headers[0].flags = NGHTTP2_NV_FLAG_NONE;
+
+       data_prd.source.ptr = h2_session;
+       data_prd.read_callback = http2_submit_error_read_callback;
+
+       ret = nghttp2_submit_response(h2_session->session, h2_stream->stream_id,
+               headers, 1, &data_prd);
+       if(ret) {
+               verbose(VERB_QUERY, "http2: submit error failed, "
+                       "error: %s", nghttp2_strerror(ret));
+               return 0;
+       }
+       return 1;
+}
+
+/**
+ * Start query handling. Query is stored in the stream, and will be free'd here.
+ * @param h2_session: http2 session, containing comm point
+ * @param h2_stream: stream containing buffered query
+ * @return: -1 on error, 1 if answer is stored in c->buffer, 0 if there is no
+ * reply available (yet).
+ */
+static int http2_query_read_done(struct http2_session* h2_session,
+       struct http2_stream* h2_stream)
+{
+       log_assert(h2_stream->qbuffer);
+
+       if(h2_session->c->h2_stream) {
+               verbose(VERB_ALGO, "http2_query_read_done failure: shared "
+                       "buffer already assigned to stream");
+               return -1;
+       }
+       if(sldns_buffer_remaining(h2_session->c->buffer) <
+               sldns_buffer_remaining(h2_stream->qbuffer)) {
+               sldns_buffer_free(h2_stream->qbuffer);
+               h2_stream->qbuffer = NULL;
+               sldns_buffer_clear(h2_session->c->buffer);
+               verbose(VERB_ALGO, "http2_query_read_done failure: can't fit "
+                       "qbuffer in c->buffer");
+               return -1;
+       }
+
+       sldns_buffer_write(h2_session->c->buffer,
+               sldns_buffer_current(h2_stream->qbuffer),
+               sldns_buffer_remaining(h2_stream->qbuffer));
+
+       sldns_buffer_free(h2_stream->qbuffer);
+       h2_stream->qbuffer = NULL;
+
+       sldns_buffer_flip(h2_session->c->buffer);
+       h2_session->c->h2_stream = h2_stream;
+       fptr_ok(fptr_whitelist_comm_point(h2_session->c->callback));
+       if((*h2_session->c->callback)(h2_session->c, h2_session->c->cb_arg,
+               NETEVENT_NOERROR, &h2_session->c->repinfo)) {
+               return 1; /* answer in c->buffer */
+       }
+       sldns_buffer_clear(h2_session->c->buffer);
+       h2_session->c->h2_stream = NULL;
+       return 0; /* mesh state added, or dropped */
+}
+
+/** nghttp2 callback. Used to check if the received frame indicates the end of a
+ * stream. Gather collected request data and start query handling. */
+static int http2_req_frame_recv_cb(nghttp2_session* session,
+       const nghttp2_frame* frame, void* cb_arg)
+{
+       struct http2_session* h2_session = (struct http2_session*)cb_arg;
+       struct http2_stream* h2_stream;
+       int query_read_done;
+
+       if((frame->hd.type != NGHTTP2_DATA &&
+               frame->hd.type != NGHTTP2_HEADERS) ||
+               !(frame->hd.flags & NGHTTP2_FLAG_END_STREAM)) {
+                       return 0;
+       }
+
+       if(!(h2_stream = nghttp2_session_get_stream_user_data(
+               session, frame->hd.stream_id)))
+               return 0;
+
+       if(h2_stream->invalid_endpoint) {
+               h2_stream->status = HTTP_STATUS_NOT_FOUND;
+               goto submit_http_error;
+       }
+
+       if(h2_stream->invalid_content_type) {
+               h2_stream->status = HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE;
+               goto submit_http_error;
+       }
+
+       if(h2_stream->http_method != HTTP_METHOD_GET &&
+               h2_stream->http_method != HTTP_METHOD_POST) {
+               h2_stream->status = HTTP_STATUS_NOT_IMPLEMENTED;
+               goto submit_http_error;
+       }
+
+       if(h2_stream->query_too_large) {
+               if(h2_stream->http_method == HTTP_METHOD_POST)
+                       h2_stream->status = HTTP_STATUS_PAYLOAD_TOO_LARGE;
+               else
+                       h2_stream->status = HTTP_STATUS_URI_TOO_LONG;
+               goto submit_http_error;
+       }
+
+       if(!h2_stream->qbuffer) {
+               h2_stream->status = HTTP_STATUS_BAD_REQUEST;
+               goto submit_http_error;
+       }
+
+       if(h2_stream->status) {
+submit_http_error:
+               verbose(VERB_QUERY, "http2 request invalid, returning :status="
+                       "%d", h2_stream->status);
+               if(!http2_submit_error(h2_session, h2_stream)) {
+                       return NGHTTP2_ERR_CALLBACK_FAILURE;
+               }
+               return 0;
+       }
+       h2_stream->status = HTTP_STATUS_OK;
+
+       sldns_buffer_flip(h2_stream->qbuffer);
+       h2_session->postpone_drop = 1;
+       query_read_done = http2_query_read_done(h2_session, h2_stream);
+       if(query_read_done < 0)
+               return NGHTTP2_ERR_CALLBACK_FAILURE;
+       else if(!query_read_done) {
+               if(h2_session->is_drop) {
+                       /* connection needs to be closed. Return failure to make
+                        * sure no other action are taken anymore on comm point.
+                        * failure will result in reclaiming (and closing)
+                        * of comm point. */
+                       verbose(VERB_QUERY, "http2 query dropped in worker cb");
+                       h2_session->postpone_drop = 0;
+                       return NGHTTP2_ERR_CALLBACK_FAILURE;
+               }
+               /* nothing to submit right now, query added to mesh. */
+               h2_session->postpone_drop = 0;
+               return 0;
+       }
+       if(!http2_submit_dns_response(h2_session)) {
+               sldns_buffer_clear(h2_session->c->buffer);
+               h2_session->c->h2_stream = NULL;
+               return NGHTTP2_ERR_CALLBACK_FAILURE;
+       }
+       verbose(VERB_QUERY, "http2 query submitted to session");
+       sldns_buffer_clear(h2_session->c->buffer);
+       h2_session->c->h2_stream = NULL;
+       return 0;
+}
+
+/** nghttp2 callback. Used to detect start of new streams. */
+static int http2_req_begin_headers_cb(nghttp2_session* session,
+       const nghttp2_frame* frame, void* cb_arg)
+{
+       struct http2_session* h2_session = (struct http2_session*)cb_arg;
+       struct http2_stream* h2_stream;
+       int ret;
+       if(frame->hd.type != NGHTTP2_HEADERS ||
+               frame->headers.cat != NGHTTP2_HCAT_REQUEST) {
+               /* only interrested in request headers */
+               return 0;
+       }
+       if(!(h2_stream = http2_stream_create(frame->hd.stream_id))) {
+               log_err("malloc failure while creating http2 stream");
+               return NGHTTP2_ERR_CALLBACK_FAILURE;
+       }
+       http2_session_add_stream(h2_session, h2_stream);
+       ret = nghttp2_session_set_stream_user_data(session,
+               frame->hd.stream_id, h2_stream);
+       if(ret) {
+               /* stream does not exist */
+               verbose(VERB_QUERY, "http2: set_stream_user_data failed, "
+                       "error: %s", nghttp2_strerror(ret));
+               return NGHTTP2_ERR_CALLBACK_FAILURE;
+       }
+
+       return 0;
+}
+
+/**
+ * base64url decode, store in qbuffer
+ * @param h2_session: http2 session
+ * @param h2_stream: http2 stream
+ * @param start: start of the base64 string
+ * @param length: length of the base64 string
+ * @return: 0 on error, 1 otherwise. query will be stored in h2_stram->qbuffer,
+ * buffer will be NULL is unparseble.
+ */
+static int http2_buffer_uri_query(struct http2_session* h2_session,
+       struct http2_stream* h2_stream, const uint8_t* start, size_t length)
+{
+       size_t expectb64len;
+       int b64len;
+       if(h2_stream->http_method == HTTP_METHOD_POST)
+               return 1;
+       if(length == 0)
+               return 1;
+       if(h2_stream->qbuffer) {
+               verbose(VERB_ALGO, "http2_req_header fail, "
+                       "qbuffer already set");
+               return 0;
+       }
+
+       /* calculate size, might be a bit bigger than the real
+        * decoded buffer size */
+       expectb64len = sldns_b64_pton_calculate_size(length);
+       log_assert(expectb64len > 0);
+       if(expectb64len >
+               h2_session->c->http2_max_qbuffer_size) {
+               h2_stream->query_too_large = 1;
+               return 1;
+       }
+
+       if(!(h2_stream->qbuffer = sldns_buffer_new(expectb64len))) {
+               log_err("http2_req_header fail, qbuffer "
+                       "malloc failure");
+               return 0;
+       }
+
+       if(!(b64len = sldns_b64url_pton(
+               (char const *)start, length,
+               sldns_buffer_current(h2_stream->qbuffer),
+               expectb64len)) || b64len < 0) {
+               sldns_buffer_free(h2_stream->qbuffer);
+               h2_stream->qbuffer = NULL;
+               /* return without error, method can be an
+                * unknown POST */
+               return 1;
+       }
+       sldns_buffer_skip(h2_stream->qbuffer, (size_t)b64len);
+       return 1;
+}
+
+/** nghttp2 callback. Used to parse headers from HEADER frames. */
+static int http2_req_header_cb(nghttp2_session* session,
+       const nghttp2_frame* frame, const uint8_t* name, size_t namelen,
+       const uint8_t* value, size_t valuelen, uint8_t ATTR_UNUSED(flags),
+       void* cb_arg)
+{
+       struct http2_stream* h2_stream = NULL;
+       struct http2_session* h2_session = (struct http2_session*)cb_arg;
+       /* nghttp2 deals with CONTINUATION frames and provides them as part of
+        * the HEADER */
+       if(frame->hd.type != NGHTTP2_HEADERS ||
+               frame->headers.cat != NGHTTP2_HCAT_REQUEST) {
+               /* only interrested in request headers */
+               return 0;
+       }
+       if(!(h2_stream = nghttp2_session_get_stream_user_data(session,
+               frame->hd.stream_id)))
+               return 0;
+
+       /* earlier checks already indicate we can stop handling this query */
+       if(h2_stream->http_method == HTTP_METHOD_UNSUPPORTED ||
+               h2_stream->invalid_content_type ||
+               h2_stream->invalid_endpoint)
+               return 0;
+
+
+       /* nghttp2 performs some sanity checks in the headers, including:
+        * name and value are guaranteed to be null terminated
+        * name is guaranteed to be lowercase
+        * content-length value is guaranteed to contain digits
+        */
+
+       if(!h2_stream->http_method && namelen  == 7 &&
+               memcmp(":method", name, namelen) == 0) {
+               /* Case insensitive check on :method value to be on the safe
+                * side. I failed to find text about case sentitivity in specs.
+                */
+               if(valuelen == 3 && strcasecmp("GET", (const char*)value) == 0)
+                       h2_stream->http_method = HTTP_METHOD_GET;
+               else if(valuelen == 4 &&
+                       strcasecmp("POST", (const char*)value) == 0) {
+                       h2_stream->http_method = HTTP_METHOD_POST;
+                       if(h2_stream->qbuffer) {
+                               /* POST method uses query from DATA frames */
+                               sldns_buffer_free(h2_stream->qbuffer);
+                               h2_stream->qbuffer = NULL;
+                       }
+               } else
+                       h2_stream->http_method = HTTP_METHOD_UNSUPPORTED;
+               return 0;
+       }
+       if(namelen == 5 && memcmp(":path", name, namelen) == 0) {
+               /* Hard coded /dns-query endpoint, might be nice to make
+                * configurable.
+                * :path may contain DNS query, depending on method. Method might
+                * not be known yet here, so check after finishing receiving
+                * stream. */
+#define HTTP_ENDPOINT "/dns-query"
+#define        HTTP_QUERY_PARAM "?dns="
+               size_t el = sizeof(HTTP_ENDPOINT) - 1;
+               size_t qpl = sizeof(HTTP_QUERY_PARAM) - 1;
+
+               if(valuelen < el || memcmp(HTTP_ENDPOINT, value, el) != 0) {
+                       h2_stream->invalid_endpoint = 1;
+                       return 0;
+               }
+               /* larger than endpoint only allowed if it is for the query
+                * parameter */
+               if(valuelen <= el+qpl ||
+                       memcmp(HTTP_QUERY_PARAM, value+el, qpl) != 0) {
+                       if(valuelen != el)
+                               h2_stream->invalid_endpoint = 1;
+                       return 0;
+               }
+
+               if(!http2_buffer_uri_query(h2_session, h2_stream,
+                       value+(el+qpl), valuelen-(el+qpl))) {
+                       return NGHTTP2_ERR_CALLBACK_FAILURE;
+               }
+               return 0;
+       }
+       /* Content type is a SHOULD (rfc7231#section-3.1.1.5) when using POST,
+        * and not needed when using GET. Don't enfore.
+        * If set only allow lowercase "application/dns-message".
+        *
+        * Clients SHOULD (rfc8484#section-4.1) set an accept header, but MUST
+        * be able to handle "application/dns-message". Since that is the only
+        * content-type supported we can ignore the accept header.
+        */
+       if((namelen == 12 && memcmp("content-type", name, namelen) == 0)) {
+               if(valuelen != 23 || memcmp("application/dns-message", value,
+                       valuelen) != 0) {
+                       h2_stream->invalid_content_type = 1;
+               }
+       }
+
+       /* Only interested in content-lentg for POST (on not yet known) method.
+        */
+       if((!h2_stream->http_method ||
+               h2_stream->http_method == HTTP_METHOD_POST) &&
+               !h2_stream->content_length && namelen  == 14 &&
+               memcmp("content-length", name, namelen) == 0) {
+               if(valuelen > 5) {
+                       h2_stream->query_too_large = 1;
+                       return 0;
+               }
+               /* guaranteed to only contian digits and be null terminated */
+               h2_stream->content_length = atoi((const char*)value);
+               if(h2_stream->content_length >
+                       h2_session->c->http2_max_qbuffer_size) {
+                       h2_stream->query_too_large = 1;
+                       return 0;
+               }
+       }
+       return 0;
+}
+
+/** nghttp2 callback. Used to get data from DATA frames, which can contain
+ * queries in POST requests. */
+static int http2_req_data_chunk_recv_cb(nghttp2_session* ATTR_UNUSED(session),
+       uint8_t ATTR_UNUSED(flags), int32_t stream_id, const uint8_t* data,
+       size_t len, void* cb_arg)
+{
+       struct http2_session* h2_session = (struct http2_session*)cb_arg;
+       struct http2_stream* h2_stream;
+
+       if(!(h2_stream = nghttp2_session_get_stream_user_data(
+               h2_session->session, stream_id))) {
+               return 0;
+       }
+
+       if(h2_stream->query_too_large)
+               return 0;
+
+       if(!h2_stream->qbuffer) {
+               if(h2_stream->content_length) {
+                       if(h2_stream->content_length < len)
+                               /* getting more data in DATA frame than
+                                * advertised in content-length header. */
+                               return NGHTTP2_ERR_CALLBACK_FAILURE;
+                       h2_stream->qbuffer = sldns_buffer_new(
+                               h2_stream->content_length);
+               } else if(len <= h2_session->c->http2_max_qbuffer_size) {
+                       /* setting this to msg-buffer-size can result in a lot
+                        * of memory consuption. Most queries should fit in a
+                        * single DATA frame, and most POST queries will
+                        * containt content-length which does not impose this
+                        * limit. */
+                       h2_stream->qbuffer = sldns_buffer_new(len);
+               }
+       }
+
+       if(!h2_stream->qbuffer ||
+               sldns_buffer_remaining(h2_stream->qbuffer) < len) {
+               verbose(VERB_ALGO, "http2 data_chunck_recv failed. Not enough "
+                       "buffer space for POST query. Can happen on multi "
+                       "frame requests without content-length header");
+               h2_stream->query_too_large = 1;
+               return 0;
+       }
+
+       sldns_buffer_write(h2_stream->qbuffer, data, len);
+
+       return 0;
+}
+
+nghttp2_session_callbacks* http2_req_callbacks_create()
+{
+       nghttp2_session_callbacks *callbacks;
+       if(nghttp2_session_callbacks_new(&callbacks) == NGHTTP2_ERR_NOMEM) {
+               log_err("failed to initialize nghttp2 callback");
+               return NULL;
+       }
+       /* reception of header block started, used to create h2_stream */
+       nghttp2_session_callbacks_set_on_begin_headers_callback(callbacks,
+               http2_req_begin_headers_cb);
+       /* complete frame received, used to get data from stream if frame
+        * has end stream flag, and start processing query */
+       nghttp2_session_callbacks_set_on_frame_recv_callback(callbacks,
+               http2_req_frame_recv_cb);
+       /* get request info from headers */
+       nghttp2_session_callbacks_set_on_header_callback(callbacks,
+               http2_req_header_cb);
+       /* get data from DATA frames, containing POST query */
+       nghttp2_session_callbacks_set_on_data_chunk_recv_callback(callbacks,
+               http2_req_data_chunk_recv_cb);
+
+       /* generic HTTP2 callbacks */
+       nghttp2_session_callbacks_set_recv_callback(callbacks, http2_recv_cb);
+       nghttp2_session_callbacks_set_send_callback(callbacks, http2_send_cb);
+       nghttp2_session_callbacks_set_on_stream_close_callback(callbacks,
+               http2_stream_close_cb);
+
+       return callbacks;
+}
+#endif /* HAVE_NGHTTP2 */
index ad84d832264381c59856385a04ba8919e82b7b9f..6b5a8582284f03fc6ef742a94e802b4089451a7d 100644 (file)
@@ -43,6 +43,9 @@
 #define LISTEN_DNSPORT_H
 
 #include "util/netevent.h"
+#ifdef HAVE_NGHTTP2_NGHTTP2_H
+#include <nghttp2/nghttp2.h>
+#endif
 struct listen_list;
 struct config_file;
 struct addrinfo;
@@ -94,8 +97,9 @@ enum listen_type {
        /** tcp type + dnscrypt */
        listen_type_tcp_dnscrypt,
        /** udp ipv6 (v4mapped) for use with ancillary data + dnscrypt*/
-       listen_type_udpancil_dnscrypt
-
+       listen_type_udpancil_dnscrypt,
+       /** HTTP(2) over TLS over TCP */
+       listen_type_http
 };
 
 /**
@@ -139,6 +143,7 @@ void listening_ports_free(struct listen_port* list);
  * @param tcp_accept_count: max number of simultaneous TCP connections 
  *     from clients.
  * @param tcp_idle_timeout: idle timeout for TCP connections in msec.
+ * @param harden_large_queries: whether query size should be limited.
  * @param tcp_conn_limit: TCP connection limit info.
  * @param sslctx: nonNULL if ssl context.
  * @param dtenv: nonNULL if dnstap enabled.
@@ -149,7 +154,7 @@ void listening_ports_free(struct listen_port* list);
  */
 struct listen_dnsport* listen_create(struct comm_base* base,
        struct listen_port* ports, size_t bufsize,
-       int tcp_accept_count, int tcp_idle_timeout,
+       int tcp_accept_count, int tcp_idle_timeout, int harden_large_queries,
        struct tcl_list* tcp_conn_limit, void* sslctx,
        struct dt_env *dtenv, comm_point_callback_type* cb, void* cb_arg);
 
@@ -220,12 +225,14 @@ int create_udp_sock(int family, int socktype, struct sockaddr* addr,
  *     listening UDP port.  Set to false on return if it failed to do so.
  * @param transparent: set IP_TRANSPARENT socket option.
  * @param mss: maximum segment size of the socket. if zero, leaves the default. 
+ * @param nodelay: if true set TCP_NODELAY and TCP_QUICKACK socket options.
  * @param freebind: set IP_FREEBIND socket option.
  * @param use_systemd: if true, fetch sockets from systemd.
  * @return: the socket. -1 on error.
  */
 int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
-       int* reuseport, int transparent, int mss, int freebind, int use_systemd);
+       int* reuseport, int transparent, int mss, int nodelay, int freebind,
+       int use_systemd);
 
 /**
  * Create and bind local listening socket
@@ -367,4 +374,24 @@ int tcp_req_info_handle_read_close(struct tcp_req_info* req);
 /** get the size of currently used tcp stream wait buffers (in bytes) */
 size_t tcp_req_info_get_stream_buffer_size(void);
 
+#ifdef HAVE_NGHTTP2
+/** 
+ * Create nghttp2 callbacks to handle HTTP2 requests.
+ * @return malloc'ed struct, NULL on failure
+ */
+nghttp2_session_callbacks* http2_req_callbacks_create();
+
+/**
+ * DNS response ready to be submitted to nghttp2, to be prepared for sending
+ * out. Response is stored in c->buffer. Copy to rbuffer because the c->buffer
+ * might be used before this will be send out.
+ * @param h2_session: http2 session, containing c->buffer which contains answer
+ * @param h2_stream: http2 stream, containing buffer to store answer in
+ * @return 0 on error, 1 otherwise
+ */
+int http2_submit_dns_response(struct http2_session* h2_session);
+#else
+int http2_submit_dns_response(void* v);
+#endif /* HAVE_NGHTTP2 */
+
 #endif /* LISTEN_DNSPORT_H */
index 09c51a2be5cf7828420ef225388c9cdcac045763..4234fd8af0800b3f32af68b93f7959597eb2a440 100644 (file)
@@ -551,6 +551,9 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
                        goto servfail_mem;
                }
        }
+       if(rep->c->alpn_h2) {
+               http2_stream_add_meshstate(rep->c->h2_stream, mesh, s);
+       }
        /* add serve expired timer if required and not already there */
        if(timeout && !mesh_serve_expired_init(s, timeout)) {
                log_err("mesh_new_client: out of memory initializing serve expired");
@@ -1207,6 +1210,9 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
        else    secure = 0;
        if(!rep && rcode == LDNS_RCODE_NOERROR)
                rcode = LDNS_RCODE_SERVFAIL;
+       if(r->query_reply.c->alpn_h2) {
+               r->query_reply.c->h2_stream = r->h2_stream;
+       }
        /* send the reply */
        /* We don't reuse the encoded answer if either the previous or current
         * response has a local alias.  We could compare the alias records
@@ -1488,6 +1494,8 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
                s->s.qinfo.qname_len);
        if(!r->qname)
                return 0;
+       if(rep->c->alpn_h2)
+               r->h2_stream = rep->c->h2_stream;
 
        /* Data related to local alias stored in 'qinfo' (if any) is ephemeral
         * and can be different for different original queries (even if the
index df2972ac33063cd6a541b479b525fe1c296cac51..d0a4b5fb3d0da6d124707cf6671a9956562a8b71 100644 (file)
@@ -230,6 +230,8 @@ struct mesh_reply {
        uint8_t* qname;
        /** same as that in query_info. */
        struct local_rrset* local_alias;
+       /** send query to this http2 stream, if set */
+       struct http2_stream* h2_stream;
 };
 
 /** 
index 82dbc0fe113eaea1c491089f9f9d0cfa14ddb332..b51a0709d60d21fa6e2c794e3ef7081fa1981aed 100644 (file)
@@ -674,14 +674,17 @@ size_t sldns_b64_pton_calculate_size(size_t srcsize)
        return (((((srcsize + 3) / 4) * 3)) + 1);
 }
 
-int sldns_b64_pton(char const *src, uint8_t *target, size_t targsize)
+/* padding not required if srcsize is set */
+static int sldns_b64_pton_base(char const *src, size_t srcsize, uint8_t *target,
+       size_t targsize, int base64url)
 {
        const uint8_t pad64 = 64; /* is 64th in the b64 array */
        const char* s = src;
        uint8_t in[4];
        size_t o = 0, incount = 0;
+       int check_padding = (srcsize) ? 0 : 1;
 
-       while(*s) {
+       while(*s && (check_padding || srcsize)) {
                /* skip any character that is not base64 */
                /* conceptually we do:
                const char* b64 =      pad'=' is appended to array
@@ -690,30 +693,40 @@ int sldns_b64_pton(char const *src, uint8_t *target, size_t targsize)
                and use d-b64;
                */
                char d = *s++;
+               srcsize--;
                if(d <= 'Z' && d >= 'A')
                        d -= 'A';
                else if(d <= 'z' && d >= 'a')
                        d = d - 'a' + 26;
                else if(d <= '9' && d >= '0')
                        d = d - '0' + 52;
-               else if(d == '+')
+               else if(!base64url && d == '+')
+                       d = 62;
+               else if(base64url && d == '-')
                        d = 62;
-               else if(d == '/')
+               else if(!base64url && d == '/')
+                       d = 63;
+               else if(base64url && d == '_')
                        d = 63;
-               else if(d == '=')
+               else if(!base64url && d == '=')
                        d = 64;
                else    continue;
                in[incount++] = (uint8_t)d;
-               if(incount != 4)
+               /* work on block of 4, unless padding is not used and there are
+                * less than 4 chars left */
+               if(incount != 4 && (check_padding || srcsize))
                        continue;
+               assert(!check_padding || incount==4);
                /* process whole block of 4 characters into 3 output bytes */
-               if(in[3] == pad64 && in[2] == pad64) { /* A B = = */
+               if((incount == 2 ||
+                       (incount == 4 && in[3] == pad64 && in[2] == pad64))) { /* A B = = */
                        if(o+1 > targsize)
                                return -1;
                        target[o] = (in[0]<<2) | ((in[1]&0x30)>>4);
                        o += 1;
                        break; /* we are done */
-               } else if(in[3] == pad64) { /* A B C = */
+               } else if(incount == 3 ||
+                       (incount == 4 && in[3] == pad64)) { /* A B C = */
                        if(o+2 > targsize)
                                return -1;
                        target[o] = (in[0]<<2) | ((in[1]&0x30)>>4);
@@ -721,7 +734,7 @@ int sldns_b64_pton(char const *src, uint8_t *target, size_t targsize)
                        o += 2;
                        break; /* we are done */
                } else {
-                       if(o+3 > targsize)
+                       if(incount != 4 || o+3 > targsize)
                                return -1;
                        /* write xxxxxxyy yyyyzzzz zzwwwwww */
                        target[o] = (in[0]<<2) | ((in[1]&0x30)>>4);
@@ -733,3 +746,17 @@ int sldns_b64_pton(char const *src, uint8_t *target, size_t targsize)
        }
        return (int)o;
 }
+
+int sldns_b64_pton(char const *src, uint8_t *target, size_t targsize)
+{
+       return sldns_b64_pton_base(src, 0, target, targsize, 0);
+}
+
+int sldns_b64url_pton(char const *src, size_t srcsize, uint8_t *target,
+       size_t targsize)
+{
+       if(!srcsize) {
+               return 0;
+       }
+       return sldns_b64_pton_base(src, srcsize, target, targsize, 1);
+}
index 10a2630a9733e420a033e1019727892ee475d4fd..852ad3fb54748eb23a1c614be7fb29f778fe42b1 100644 (file)
@@ -97,8 +97,9 @@ int sldns_b64_ntop(uint8_t const *src, size_t srclength,
  * calculates the size needed to store the result of sldns_b64_pton
  */
 size_t sldns_b64_pton_calculate_size(size_t srcsize);
-
 int sldns_b64_pton(char const *src, uint8_t *target, size_t targsize);
+int sldns_b64url_pton(char const *src, size_t srcsize, uint8_t *target,
+       size_t targsize);
 
 /**
  * calculates the size needed to store the result of b32_ntop
index d6e904a4d3cb9f6733fa279f5635991caad8501c..6222003bc3c3ab509d33ba6eb4c8e3e6e3caa015 100644 (file)
@@ -868,6 +868,7 @@ struct listen_dnsport*
 listen_create(struct comm_base* base, struct listen_port* ATTR_UNUSED(ports),
        size_t bufsize, int ATTR_UNUSED(tcp_accept_count),
        int ATTR_UNUSED(tcp_idle_timeout),
+       int ATTR_UNUSED(harden_large_queries),
        struct tcl_list* ATTR_UNUSED(tcp_conn_limit),
        void* ATTR_UNUSED(sslctx), struct dt_env* ATTR_UNUSED(dtenv),
        comm_point_callback_type* cb, void* cb_arg)
@@ -1823,4 +1824,9 @@ tcp_req_info_get_stream_buffer_size(void)
        return 0;
 }
 
+void http2_stream_add_meshstate(struct http2_stream* ATTR_UNUSED(h2_stream),
+       struct mesh_area* ATTR_UNUSED(mesh), struct mesh_state* ATTR_UNUSED(m))
+{
+}
+
 /*********** End of Dummy routines ***********/
index 814d9f436117c9634e29937a3966f7e95d67fd5f..050db317590be63513a63b10f38b3d779e7219b5 100644 (file)
@@ -116,6 +116,7 @@ config_create(void)
        cfg->ssl_upstream = 0;
        cfg->tls_cert_bundle = NULL;
        cfg->tls_win_cert = 0;
+       cfg->https_port = UNBOUND_DNS_OVER_HTTPS_PORT;
        cfg->use_syslog = 1;
        cfg->log_identity = NULL; /* changed later with argv[0] */
        cfg->log_time_ascii = 0;
@@ -505,6 +506,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
        else S_STRLIST_APPEND("tls-session-ticket-keys:", tls_session_ticket_keys)
        else S_STR("tls-ciphers:", tls_ciphers)
        else S_STR("tls-ciphersuites:", tls_ciphersuites)
+       else S_NUMBER_NONZERO("https-port:", https_port)
        else S_YNO("interface-automatic:", if_automatic)
        else S_YNO("use-systemd:", use_systemd)
        else S_YNO("do-daemonize:", do_daemonize)
@@ -957,6 +959,7 @@ config_get_option(struct config_file* cfg, const char* opt,
        else O_LST(opt, "tls-session-ticket-keys", tls_session_ticket_keys.first)
        else O_STR(opt, "tls-ciphers", tls_ciphers)
        else O_STR(opt, "tls-ciphersuites", tls_ciphersuites)
+       else O_DEC(opt, "https-port", https_port)
        else O_YNO(opt, "use-systemd", use_systemd)
        else O_YNO(opt, "do-daemonize", do_daemonize)
        else O_STR(opt, "chroot", chrootdir)
index bd6e884ebb3b8dfc27d73fe5322302ae0b048de2..30e5528036db4ed0ccd9965ce647f09e466e0f0b 100644 (file)
@@ -128,6 +128,8 @@ struct config_file {
        char* tls_ciphers;
        /** TLS chiphersuites (TLSv1.3) */
        char* tls_ciphersuites;
+       /** port on which to provide DNS over HTTPS service */
+       int https_port;
 
        /** outgoing port range number of ports (per thread) */
        int outgoing_num_ports;
index 601cd78bf55de793c7fd613baf9ae43fd659856c..abbc7198cf97ca0cd2bb13691a82911efe2d1f64 100644 (file)
@@ -1,7 +1,7 @@
 #include "config.h"
 #include "util/configyyrename.h"
 
-#line 2 "<stdout>"
+#line 3 "<stdout>"
 
 #define  YY_INT_ALIGNED short int
 
@@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
        (yy_hold_char) = *yy_cp; \
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 309
-#define YY_END_OF_BUFFER 310
+#define YY_NUM_RULES 310
+#define YY_END_OF_BUFFER 311
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -363,343 +363,344 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[3044] =
+static const flex_int16_t yy_accept[3054] =
     {   0,
-        1,    1,  291,  291,  295,  295,  299,  299,  303,  303,
-        1,    1,  310,  307,    1,  289,  289,  308,    2,  308,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  291,  292,  292,  293,  308,  295,  296,  296,
-      297,  308,  302,  299,  300,  300,  301,  308,  303,  304,
-      304,  305,  308,  306,  290,    2,  294,  308,  306,  307,
-        0,    1,    2,    2,    2,    2,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      291,    0,  295,    0,  302,    0,  299,  303,    0,  306,
-        0,    2,    2,  306,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  306,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  113,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  121,  307,  307,  307,  307,
-      307,  307,  307,  306,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,   97,  307,
-      307,  307,  307,  307,  307,    8,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  114,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  126,  307,  306,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  284,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  306,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,   55,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  223,  307,   14,   15,  307,   19,   18,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  120,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  207,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-        3,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  306,  307,  307,  307,  307,  307,  307,
-      307,  279,  307,  307,  278,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      298,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,   58,  307,  253,  307,  307,  307,
-      307,  307,  307,  307,  307,  285,  286,  307,  307,  307,
-      307,  307,   59,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  117,  307,
-      307,  307,  307,  307,  307,  307,  307,  196,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,   21,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  145,  307,  307,  298,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-       95,  307,  307,  307,  307,  307,  307,  307,  261,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  168,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  144,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,   94,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,   32,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,   33,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,   56,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  119,  307,
-      307,  307,  307,  307,  112,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,   57,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  226,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  169,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,   46,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  244,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-       50,  307,   51,  307,  307,  307,  307,  307,   98,  307,
-       99,  307,  307,  307,  307,   96,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,    7,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  216,  307,  307,  307,  307,  147,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  227,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,   47,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  188,  307,  187,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,   16,   17,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,   60,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  195,  307,
-      307,  307,  307,  307,  307,  101,  307,  100,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  179,  307,
-      307,  307,  307,  307,  307,  307,  307,  127,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,   79,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,   83,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,   54,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  182,  183,  307,  307,  307,  255,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,    6,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      259,  307,  307,  307,  307,  307,  307,  280,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,   42,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,   44,  307,  307,  307,  307,  307,  307,  307,  307,
-      175,  307,  307,  307,  122,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  200,  307,  176,  307,  307,
-      307,  213,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,   45,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  124,  106,  307,  107,  307,  307,  307,  105,  307,
-      307,  307,  307,  307,  307,  307,  307,  142,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  243,
-      307,  307,  307,  307,  307,  307,  307,  307,  177,  307,
-      307,  307,  307,  307,  180,  307,  186,  307,  307,  307,
-      307,  307,  212,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,   93,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  118,  307,  307,  307,  307,
-      307,  307,   52,  307,  307,  307,   26,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,   20,  307,  307,  307,
-      307,  307,  307,   27,   36,  307,  152,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,   68,   70,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  263,  307,  307,  307,  224,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  108,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  141,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  274,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  146,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  206,  307,  307,  307,
-      307,  307,  307,  307,  307,  283,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  163,  307,  307,
-      307,  307,  307,  307,  307,  307,  102,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  158,  307,  170,  307,
-      307,  307,  307,  307,  130,  307,  307,  307,  307,  307,
-       89,  307,  307,  307,  307,  198,  307,  307,  307,  307,
-      307,  307,  214,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  235,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  123,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  162,
-      307,  307,  307,  307,  307,   71,   72,  307,  307,  307,
-      307,  307,   53,  307,  307,  307,  307,  307,   78,  171,
-      307,  189,  307,  217,  307,  307,  181,  256,  307,  307,
-      307,  307,  307,   64,  307,  173,  307,  307,  307,  307,
-      307,    9,  307,  307,  307,   92,  307,  307,  307,  307,
-      248,  307,  307,  307,  197,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  161,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  148,  307,  262,  307,  307,
-      307,  307,  234,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  208,  307,  307,  307,  307,  254,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  277,  307,  172,  307,  307,  307,
-
-      307,  307,  307,  307,   63,   65,  307,  307,  307,  307,
-      307,  307,  307,   91,  307,  307,  307,  307,  246,  307,
-      307,  307,  258,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  202,   34,   28,   30,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,   35,  307,   29,
-       31,  307,  307,  307,  307,  307,  307,  307,  307,   88,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  204,  201,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,   62,  307,  307,  125,
-
-      307,  109,  307,  307,  307,  307,  307,  307,  307,  307,
-      143,   13,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  272,  307,  275,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,   12,  307,  307,   22,  307,  307,
-      307,  252,  307,  307,  307,  260,  307,  307,  307,   66,
-      307,  210,  307,  307,  307,  307,  203,  307,  307,   61,
-      307,  307,  307,  307,   23,  307,   43,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  157,
-      156,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      205,  199,  307,  215,  307,  307,  264,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,   73,  307,  307,  307,  247,  307,
-      307,  307,  307,  185,  307,  307,  307,  307,  209,  307,
-      307,  307,  307,  307,  307,  307,  307,  281,  282,  154,
-      307,  307,   67,  307,  307,  307,  307,  164,  307,  307,
-      103,  104,  307,  307,  307,  307,  149,  307,  151,  307,
-      190,  307,  307,  307,  307,  155,  307,  307,  218,  307,
-      307,  307,  307,  307,  307,  307,  132,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  225,  307,
-
-      307,  307,  307,  307,  307,  307,   24,  307,  257,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      191,  307,  307,  245,  307,  276,  307,  184,  307,  307,
-      307,  307,   48,  307,  307,  307,  307,    4,  307,  307,
-      307,  116,  131,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  221,   37,   38,  307,  307,  307,  307,  307,  307,
-      307,  265,  307,  307,  307,  307,  307,  307,  233,  307,
-      307,  307,  307,  307,  307,  307,  194,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,   76,  307,   49,  251,
-
-      307,  222,  307,  307,  307,  307,   11,  307,  307,  307,
-      307,  307,  115,  307,  307,  307,  307,  192,   80,  307,
-       40,  307,  307,  307,  307,  307,  307,  307,  307,  160,
-      307,  307,  307,  307,  307,  134,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  232,  307,  307,  307,  307,
-      128,  307,  307,  110,  111,  307,  307,  307,   82,   86,
-       81,  307,   74,  307,  307,  307,  307,  307,   10,  307,
-      307,  307,  249,  307,  307,  307,  307,  288,   39,  307,
-      307,  307,  307,  307,  159,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,   87,   85,  307,
-       75,  273,  307,  307,  307,  307,  307,  307,  307,  178,
-      307,  307,  307,  307,  307,  193,  307,  307,  307,  307,
-      307,  307,  307,  307,  150,   69,  307,  307,  307,  307,
-      307,  266,  307,  307,  307,  307,  307,  307,  307,  229,
-      307,  307,  228,  129,  307,   84,  135,  136,  139,  140,
-      137,  138,   77,  307,  250,  307,  307,  307,  307,  153,
-      307,  307,  307,  307,  307,  220,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  166,  165,   41,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-       90,  307,  219,  307,  242,  270,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,    5,  307,
-      307,  211,  307,  307,  271,  307,  307,  307,  307,  307,
-      307,  307,  307,  307,  230,   25,  307,  307,  307,  307,
-      307,  307,  307,  307,  307,  307,  307,  307,  231,  307,
-      307,  307,  133,  307,  307,  307,  307,  307,  307,  307,
-      307,  167,  307,  174,  307,  307,  307,  307,  307,  307,
-      307,  307,  307,  267,  307,  307,  307,  307,  307,  307,
-
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
-      307,  287,  307,  307,  238,  307,  307,  307,  307,  307,
-      268,  307,  307,  307,  307,  307,  307,  269,  307,  307,
-      307,  236,  307,  239,  240,  307,  307,  307,  307,  307,
-      237,  241,    0
+        1,    1,  292,  292,  296,  296,  300,  300,  304,  304,
+        1,    1,  311,  308,    1,  290,  290,  309,    2,  309,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  292,  293,  293,  294,  309,  296,  297,  297,
+      298,  309,  303,  300,  301,  301,  302,  309,  304,  305,
+      305,  306,  309,  307,  291,    2,  295,  309,  307,  308,
+        0,    1,    2,    2,    2,    2,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  292,    0,  296,    0,  303,    0,  300,  304,    0,
+      307,    0,    2,    2,  307,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  307,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  114,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  122,  308,
+      308,  308,  308,  308,  308,  308,  307,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,   98,  308,  308,  308,  308,  308,  308,    8,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  115,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  127,  308,
+
+      307,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  285,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  307,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,   56,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  224,  308,   14,   15,
+      308,   19,   18,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  121,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  208,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,    3,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  307,
+      308,  308,  308,  308,  308,  308,  308,  280,  308,  308,
+      279,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  299,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,   59,  308,  254,  308,  308,  308,  308,  308,  308,
+      308,  308,  286,  287,  308,  308,  308,  308,  308,   60,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  118,  308,  308,  308,  308,
+      308,  308,  308,  308,  197,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,   21,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  146,  308,  308,  299,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,   96,  308,  308,
+      308,  308,  308,  308,  308,  262,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      169,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  145,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,   95,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,   32,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,   33,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,   57,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  120,  308,  308,  308,
+      308,  308,  113,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,   58,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  227,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  170,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,   47,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  245,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,   51,
+      308,   52,  308,  308,  308,  308,  308,   99,  308,  100,
+      308,  308,  308,  308,   97,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,    7,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  217,  308,  308,  308,  308,  148,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  228,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,   44,  308,  308,  308,  308,  308,  308,  308,   48,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  189,  308,  188,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,   16,   17,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,   61,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  196,  308,
+      308,  308,  308,  308,  308,  102,  308,  101,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  180,  308,
+      308,  308,  308,  308,  308,  308,  308,  128,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,   80,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,   84,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,   55,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  183,  184,  308,  308,  308,  256,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,    6,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      260,  308,  308,  308,  308,  308,  308,  281,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,   42,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,   45,  308,  308,  308,  308,  308,  308,  308,  308,
+      176,  308,  308,  308,  123,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  201,  308,  177,  308,  308,
+      308,  214,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,   46,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  125,  107,  308,  108,  308,  308,  308,  106,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  143,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  244,
+      308,  308,  308,  308,  308,  308,  308,  308,  178,  308,
+      308,  308,  308,  308,  181,  308,  187,  308,  308,  308,
+      308,  308,  213,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,   94,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  119,  308,  308,  308,  308,
+      308,  308,   53,  308,  308,  308,   26,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,   20,  308,  308,  308,
+
+      308,  308,  308,   27,   36,  308,  153,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,   69,   71,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  264,  308,  308,  308,  225,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  109,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  142,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  275,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  147,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  207,  308,  308,  308,
+      308,  308,  308,  308,  308,  284,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  164,  308,  308,
+      308,  308,  308,  308,  308,  308,  103,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  159,  308,  171,  308,
+      308,  308,  308,  308,  131,  308,  308,  308,  308,  308,
+       90,  308,  308,  308,  308,  199,  308,  308,  308,  308,
+
+      308,  308,  215,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  236,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  124,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  163,
+      308,  308,  308,  308,  308,   72,   73,  308,  308,  308,
+      308,  308,   54,  308,  308,  308,  308,  308,   79,  172,
+      308,  190,  308,  218,  308,  308,  182,  257,  308,  308,
+      308,  308,  308,   65,  308,  174,  308,  308,  308,  308,
+      308,    9,  308,  308,  308,   93,  308,  308,  308,  308,
+      249,  308,  308,  308,  198,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  162,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  149,  308,  263,  308,  308,
+      308,  308,  235,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  209,  308,  308,  308,  308,  255,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  278,  308,  173,  308,  308,  308,
+      308,  308,  308,  308,   64,   66,  308,  308,  308,  308,
+      308,  308,  308,   92,  308,  308,  308,  308,  247,  308,
+      308,  308,  259,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  203,   34,   28,   30,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,   35,  308,   29,
+       31,  308,  308,  308,  308,  308,  308,  308,  308,   89,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  205,  202,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,   63,  308,  308,  126,
+      308,  110,  308,  308,  308,  308,  308,  308,  308,  308,
+      144,   13,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  273,  308,  276,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,   12,  308,  308,   22,  308,  308,
+      308,  253,  308,  308,  308,  261,  308,  308,  308,   67,
+      308,  211,  308,  308,  308,  308,  204,  308,  308,   62,
+      308,  308,  308,  308,   23,  308,   43,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  158,
+      157,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      206,  200,  308,  216,  308,  308,  265,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,   74,  308,  308,  308,  248,  308,
+      308,  308,  308,  186,  308,  308,  308,  308,  210,  308,
+      308,  308,  308,  308,  308,  308,  308,  282,  283,  155,
+      308,  308,   68,  308,  308,  308,  308,  165,  308,  308,
+      104,  105,  308,  308,  308,  308,  150,  308,  152,  308,
+      191,  308,  308,  308,  308,  156,  308,  308,  219,  308,
+      308,  308,  308,  308,  308,  308,  133,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  226,  308,
+      308,  308,  308,  308,  308,  308,   24,  308,  258,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      192,  308,  308,  246,  308,  277,  308,  185,  308,  308,
+      308,  308,   49,  308,  308,  308,  308,    4,  308,  308,
+      308,  117,  132,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  222,   37,   38,  308,  308,  308,  308,  308,  308,
+      308,  266,  308,  308,  308,  308,  308,  308,  234,  308,
+      308,  308,  308,  308,  308,  308,  195,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,   77,  308,   50,  252,
+      308,  223,  308,  308,  308,  308,   11,  308,  308,  308,
+      308,  308,  116,  308,  308,  308,  308,  193,   81,  308,
+       40,  308,  308,  308,  308,  308,  308,  308,  308,  161,
+      308,  308,  308,  308,  308,  135,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  233,  308,  308,  308,  308,
+      129,  308,  308,  111,  112,  308,  308,  308,   83,   87,
+       82,  308,   75,  308,  308,  308,  308,  308,   10,  308,
+      308,  308,  250,  308,  308,  308,  308,  289,   39,  308,
+      308,  308,  308,  308,  160,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,   88,   86,  308,
+       76,  274,  308,  308,  308,  308,  308,  308,  308,  179,
+      308,  308,  308,  308,  308,  194,  308,  308,  308,  308,
+      308,  308,  308,  308,  151,   70,  308,  308,  308,  308,
+      308,  267,  308,  308,  308,  308,  308,  308,  308,  230,
+      308,  308,  229,  130,  308,   85,  136,  137,  140,  141,
+      138,  139,   78,  308,  251,  308,  308,  308,  308,  154,
+      308,  308,  308,  308,  308,  221,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  167,  166,   41,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+       91,  308,  220,  308,  243,  271,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,    5,  308,
+      308,  212,  308,  308,  272,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  231,   25,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  232,  308,
+      308,  308,  134,  308,  308,  308,  308,  308,  308,  308,
+      308,  168,  308,  175,  308,  308,  308,  308,  308,  308,
+
+      308,  308,  308,  268,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  288,  308,  308,  239,  308,  308,  308,  308,  308,
+      269,  308,  308,  308,  308,  308,  308,  270,  308,  308,
+      308,  237,  308,  240,  241,  308,  308,  308,  308,  308,
+      238,  242,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -742,687 +743,689 @@ static const YY_CHAR yy_meta[41] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static const flex_int16_t yy_base[3058] =
+static const flex_int16_t yy_base[3068] =
     {   0,
         0,    0,   38,   41,   44,   46,   59,   65,   71,   77,
-       90,  112, 3212, 2720,   81, 5927, 5927, 5927,   96,   52,
+       90,  112, 2338, 2174,   81, 5953, 5953, 5953,   96,   52,
       106,   63,  107,  111,   70,  128,  130,  133,   57,   88,
-       76,  135,  141,  117,  148,  145,  160,  164,  185,  177,
-      189,  152, 2544, 5927, 5927, 5927,  107, 2459, 5927, 5927,
-     5927,  165, 2157, 2047, 5927, 5927, 5927,  211, 1913, 5927,
-     5927, 5927,  180, 1568, 5927,  217, 5927,  221,  168, 1529,
-      225,  231,    0,  237,    0,    0,  226,  231,   85,  180,
-      114,  238,  239,  156,  234,  206,  240,  232,  200,  132,
-      253,  244,  245,  248,  256,  257,  264,  271,  249,  277,
-
-      279,  262,  282,  285,  270,  272,  291,  293,  290,  299,
-      301,  284,  302,  305,  310,  312,  311,  315,  313,  319,
-      322,  318,  324,  327,  326,  193,  221,  334,  329,  340,
-      342,  325,  348,  349,  350,  353,  354,  357,  363,  359,
-     1432,  379, 1075,  381,  915,  388,  450,  365,  392,  278,
-      396,  400,    0,  377,  392,  401,  367,  394,  396,  402,
-      261,  398,  399,  403,  405,  406,  418,  407,  416,  422,
-      426,  430,  427,  434,  424,  437,  439,  440,  429,  451,
-      453,  454,  446,  455,  456,  458,  461,  462,  463,  472,
-      465,  473,  484,  479,  488,  492,  475,  493,  496,  491,
-
-      503,  499,  506,  507,  502,  498,  508,  510,  513,  515,
-      516,  518,  517,  520,  521,  523,  525,  533,  535,  526,
-      534,  528,  547,  542,  549,  546,  548,  552,  551,  555,
-      563,  564,  556,  565,  567,  568,  571,  574,  583,  584,
-      585,  569,  576,  586,  580,  588,  589,  590,  591,  600,
-      603,  602,  605,  612,  593,  611,  613,  615,  616,  617,
-      626,  618,  628,  622,  635,  619,  633,  638,  627,  636,
-      641,  645,  646,  653,  640,  656,  657,  658,  660,  661,
-      663,  671,  666,  667,  648,  670,  672,  674,  675,  676,
-      678,  687,  679,  689,  682,  690,  695,  691,  710,  699,
-
-      700,  701,  702,  711,  704,  712,  713,  726,  731,  721,
-      732,  733,  735,  737,  740,  748,  739,  746,  743,  750,
-      752,  753,  762,  758, 5927,  757,  760,  773,  766,  774,
-      775,  776,  781,  782,  763,  789,  787,  788,  792,  814,
-      796,  798,  794,  803,  806, 5927,  804,  808,  838,  810,
-      812,  832,  828,  824,  827,  829,  839,  836,  849,  842,
-      847,  851,  862,  858,  859,  860,  861,  864,  863,  877,
-      872,  870,  799,  874,  889,  875,  882,  886,  887,  892,
-      893,  894,  897,  899,  902,  903,  895,  904,  905,  908,
-      913,  914,  916,  917,  927,  929,  921,  940,  918,  935,
-
-      942,  943,  937,  944,  947,  950,  951,  952,  953,  961,
-      958,  959,  963,  964,  966,  967,  970,  972,  973,  975,
-      977,  979,  978,  985,  988,  981,  994,  989, 5927,  996,
-      998,  999, 1000, 1001, 1003, 5927, 1004, 1005, 1006, 1014,
-     1017, 1016, 1013, 1023, 1027, 1028, 1029, 1030, 1039, 1012,
-     1041, 1040, 1036, 1042, 1046, 1048, 1049, 1051, 1052, 1054,
-     1055, 1057, 1060, 1077, 5927, 1061, 1064, 1062, 1063, 1070,
-     1080, 1089, 1072, 1090, 1088, 1065, 1105, 1092, 1106, 1100,
-     1101, 1111, 1102, 1113, 1107, 1116, 1115, 1117, 1118, 1119,
-     1120, 1125, 1126, 1131, 5927, 1133, 1134, 1145, 1135, 1143,
-
-     1132, 1146, 1148, 1149, 1150, 1152, 1153, 1156, 1162, 1172,
-     1157, 1174, 1159, 1170, 1175, 1176, 1177, 1178, 1179, 1180,
-     1193, 1184, 1186, 1200, 1207, 1203, 1205, 1212, 1190, 1210,
-     1209, 1208, 1215, 1216, 1217, 1218, 1220, 1221, 1230, 1228,
-     1226, 1229, 1231, 1242, 1233, 1235, 1240, 1237, 1245, 1247,
-     1253, 1254, 1250, 1256, 5927, 1263, 1260, 1267, 1262, 1268,
-     1272, 1274, 1261, 1276, 1278, 1280, 1281, 1282, 1284, 1287,
-     1289, 1290, 1291, 1292, 1301, 1297, 1307, 1314, 1313, 1315,
-     1299, 1305, 1324, 1321, 1328, 1327, 1329, 1337, 1325, 1332,
-     1323, 1339, 1335, 1340, 1341, 1344, 1347, 1350, 1352, 1359,
-
-     1351, 1356, 1366, 1367, 1358, 1369, 1362, 1372, 1373, 1375,
-     1376, 1377, 1378, 1385, 1380, 1386, 1382, 1387, 1388, 1389,
-     1392, 1390, 1407, 1399, 1400, 1403, 1409, 1410, 1411, 1415,
-     1416, 1417, 1418, 1419, 1420, 1423, 1424, 1183, 1425, 1440,
-     1426, 1430, 1438, 1441, 1447, 1446, 1450, 1454, 1444, 1456,
-     1457, 1458, 1460, 1461, 1465, 1464, 1471, 1468, 1474, 1476,
-     1478, 1477, 1480, 1484, 1487, 1481, 5927, 1488, 1495, 1494,
-     1496, 1497, 1499, 1501, 1508, 1503, 1505, 1504, 1506, 1510,
-     1532, 5927, 1513, 5927, 5927, 1516, 5927, 5927, 1517, 1515,
-     1518, 1523, 1535, 1538, 1298, 1525, 1542, 1520, 1553, 1557,
-
-     1545, 1546, 1548, 1549, 1560, 1571, 1555, 1572, 1565, 1577,
-     1579, 1582, 1581, 1587, 1583, 1588, 1590, 1591, 1593, 1592,
-     1596, 1598, 1601, 1602, 1599, 1604, 1605, 1614, 1618, 1610,
-     1625, 5927, 1621, 1628, 1635, 1631, 1638, 1630, 1634, 1637,
-     1642, 1644, 1639, 1646, 1648, 1649, 1650, 1652, 1654, 1657,
-     1661, 1658, 5927, 1659, 1662, 1667, 1666, 1670, 1674, 1606,
-     1660, 1678, 1676, 1692, 1680, 1682, 1683, 1684, 1688, 1695,
-     5927, 1694, 1700, 1690, 1703, 1701, 1704, 1705, 1707, 1710,
-     1709, 1713, 1715, 1714, 1716, 1723, 1728, 1721, 1720, 1726,
-     1738, 1727, 1742, 1746, 1731, 1734, 1748, 1749, 1750, 1752,
-
-     1753, 1755, 1760, 1759, 1762, 1758, 1767, 1769, 1776, 1764,
-     1765, 1766, 1779, 1781, 1790, 1786, 1787, 1788, 1797, 1792,
-     1794, 1795, 1798, 1807, 1796, 1804, 1809, 1799, 1802, 1814,
-     1815, 5927, 1816, 1817, 5927, 1818, 1820, 1842, 1823, 1825,
-     1828, 1827, 1830, 1832, 1833, 1835, 1839, 1846, 1862, 1850,
-     1865, 1837, 1867, 1854, 1868, 1857, 1859, 1870, 1877, 1885,
-     1892, 1875, 1893, 1895, 1876, 1878, 1887, 1906, 1890, 1891,
-     1894, 1899, 1900, 1904, 1910, 1903, 1915, 1916, 1922, 1919,
-     5927, 1930, 1928, 1927, 1929, 1939, 1936, 1937, 1938, 1940,
-     1943, 1950, 1945, 1948, 1952, 1951, 1955, 1953, 1958, 1963,
-
-     1965, 1960, 1961, 1968, 5927, 1964, 5927, 1975, 1976, 1979,
-     1977, 1981, 1982, 1983, 1985, 5927, 5927, 1987, 1984, 1994,
-     2006, 2001, 5927, 1986, 2009, 2011, 2004, 2005, 2010, 2013,
-     2016, 2017, 2024, 2020, 2027, 2022, 2023, 2025, 5927, 2033,
-     2026, 2038, 2041, 2034, 2044, 2048, 2042, 5927, 2045, 2052,
-     2055, 2062, 2058, 2060, 2059, 2063, 2064, 2067, 2070, 2071,
-     2072, 2073, 2080, 2082, 2078, 2079, 2087, 2094, 5927, 2081,
-     2090, 2101, 2093, 2097, 2100, 2102, 2103, 2104, 2105, 2106,
-     2112, 2113, 2114, 2122, 2124, 2119, 2115, 2127, 2123, 2129,
-     2128, 2135, 2132, 2136, 2137, 2138, 5927, 2139, 2147,  124,
-
-     2141, 2144, 2148, 2149, 2152, 2165, 2151, 2168, 2172, 2169,
-     2173, 2176, 2153, 2170, 2177, 2178, 2179, 2180, 2185, 2183,
-     5927, 2189, 2190, 2191, 2186, 2197, 2192, 2194, 5927, 2195,
-     2206, 2215, 2216, 2205, 2217, 2207, 2218, 2221, 2222, 2224,
-     2228, 2229, 2225, 5927, 2232, 2234, 2237, 2235, 2241, 2245,
-     2238, 2248, 2250, 2251, 2252, 2253, 2254, 2257, 2256, 2258,
-     2259, 2260, 2267, 2271, 2272, 2274, 5927, 2284, 2262, 2273,
-     2280, 2285, 2286, 2294, 2287, 2289, 2295, 2296, 2309, 2299,
-     2301, 2311, 2315, 2302, 2304, 2325, 2321, 2324, 2330, 2320,
-     2333, 2335, 2323, 2327, 2337, 2336, 2339, 2347, 2342, 2354,
-
-     2355, 2352, 2358, 2350, 2371, 2376, 2367, 5927, 2365, 2375,
-     2363, 2377, 2385, 2380, 2382, 2383, 2389, 2388, 2391, 2392,
-     2399, 2394, 2396, 2400, 2403, 2401, 2409, 2405, 2411, 2412,
-     2420, 2413, 2422, 2351, 5927, 2424, 2425, 2416, 2429, 2432,
-     2426, 2434, 2439, 2437, 2441, 2443, 2445, 2447, 2448, 2449,
-     2450, 2452, 2454, 2453, 5927, 2457, 2458, 2463, 2465, 2466,
-     2472, 2475, 2478, 2476, 2482, 2483, 2484, 2485, 5927, 2492,
-     2493, 2490, 2494, 2496, 2497, 2499, 2502, 2503, 5927, 2504,
-     2506, 2513, 2514, 2509, 5927, 2517, 2512, 2518, 2519, 2520,
-     2521, 2527, 2522, 2525, 2530, 2535, 2537, 2533, 2541, 5927,
-
-     2543, 2553, 2545, 2549, 2551, 2554, 2555, 2557, 2561, 2565,
-     2560, 5927, 2577, 2576, 2573, 2587, 2564, 2578, 2579, 2585,
-     2582, 2588, 2589, 5927, 2591, 2592, 2594, 2595, 2598, 2599,
-     2601, 2613, 2603, 2606, 2608, 2611, 2614, 2616, 2618, 2621,
-     2619, 2627, 2630, 2631, 2633, 2634, 2636, 2637, 2644, 2647,
-     2649, 2651, 5927, 2654, 2655, 2656, 2643, 2646, 2658, 2662,
-     2663, 2666, 2667, 2671, 2668, 2670, 2678, 2680, 2681, 2683,
-     2685, 2687, 2688, 2690, 2691, 2692, 2693, 2700, 2698, 2696,
-     2705, 2702, 2707, 2714, 2709, 2715, 2716, 2717, 2718, 2719,
-     2723, 2724, 2726, 2727, 2731, 2742, 2743, 2733, 2744, 2745,
-
-     2746, 2747, 5927, 2750, 2752, 2751, 2756, 2761, 2758, 2768,
-     2764, 2765, 2769, 2773, 2776, 2770, 2775, 2781, 2788, 2784,
-     5927, 2785, 5927, 2786, 2787, 2794, 2797, 2789, 5927, 2799,
-     5927, 2802, 2811, 2796, 2800, 5927, 2814, 2804, 2806, 2818,
-     2808, 2813, 2820, 2821, 2822, 2827, 2825, 2829, 2830, 2831,
-     2833, 2835, 2837, 2841, 2846, 2848, 2838, 2849, 2840, 2854,
-     2857, 2851, 2859, 5927, 2867, 2860, 2863, 2868, 2869, 2871,
-     2872, 2874, 2875, 2880, 2876, 2881, 2882, 2889, 2892, 2890,
-     2893, 2904, 5927, 2894, 2906, 2899, 2901, 5927, 2909, 2903,
-     2910, 2915, 2912, 2917, 2919, 2920, 2921, 2924, 2925, 2937,
-
-     2938, 2928, 2939, 5927, 2941, 2944, 2929, 2948, 2952, 2956,
-     2930, 2959, 2953, 2957, 2963, 2964, 2965, 2966, 2967, 2974,
-     2975, 2972, 2979, 2971, 2978, 2981, 2985, 2987, 2988, 2989,
-     2992, 2993, 2991, 2997, 3001, 2996, 2998, 2999, 3000, 5927,
-     3012, 3002, 3014, 3023, 3015, 3017, 3004, 3020, 3025, 3026,
-     3029, 3033, 3027, 5927, 3032, 5927, 3035, 3037, 3049, 3051,
-     3044, 3039, 3055, 3054, 3046, 3061, 3062, 3063, 3064, 3065,
-     3066, 3069, 3070, 3076, 3077, 3073, 3074, 3078, 3084, 3086,
-     3087, 3089, 5927, 5927, 3090, 3092, 3095, 3093, 3097, 3099,
-     3107, 3105, 3098, 3111, 3112, 3119, 5927, 3120, 3121, 3123,
-
-     3124, 3131, 3126, 3128, 3139, 3135, 3143, 3141, 5927, 3138,
-     3142, 3152, 3148, 3150, 3155, 5927, 3154, 5927, 3151, 3157,
-     3160, 3163, 3164, 3165, 3166, 3167, 3174, 3175, 3185, 3171,
-     3182, 3183, 3186, 3187, 3194, 3189, 3190, 3191, 5927, 3193,
-     3196, 3199, 3207, 3208, 3210, 3214, 3197, 5927, 3204, 3218,
-     3221, 3222, 3224, 3226, 3227, 3228, 3230, 3232, 3229, 3231,
-     3239, 3237, 3236, 3246, 3256, 3247, 3258, 5927, 3259, 3253,
-     3266, 3268, 3261, 3263, 3269, 3270, 3271, 3274, 3276, 3275,
-     3277, 3279, 3281, 3278, 3288, 3282, 3295, 3284, 3298, 3304,
-     3305, 3285, 3301, 3308, 3309, 3312, 3311, 3315, 3318, 3322,
-
-     3319, 3331, 3332, 3323, 3326, 3335, 3336, 3343, 3338, 5927,
-     3348, 3328, 3351, 3349, 3350, 3355, 3356, 3358, 3359, 3360,
-     3361, 3368, 3363, 5927, 3370, 3365, 3375, 3376, 3367, 3390,
-     3385, 3366, 3388, 3392, 3389, 3395, 3393, 3397, 3398, 3401,
-     3402, 5927, 5927, 3404, 3405, 3407, 5927, 3408, 3406, 3418,
-     3411, 3414, 3421, 3238, 3420, 3423, 3424, 3426, 3428, 5927,
-     3432, 3439, 3431, 3434, 3446, 3448, 3454, 3438, 3447, 3445,
-     3450, 3455, 3457, 3458, 3459, 3461, 3470, 3463, 3466, 3468,
-     5927, 3471, 3473, 3474, 3478, 3475, 3482, 5927, 3480, 3486,
-     3487, 3489, 3501, 3492, 3502, 3504, 3484, 3506, 3507, 3509,
-
-     3508, 3510, 3517, 3512, 3516, 3523, 3524, 3515, 5927, 3529,
-     3531, 3532, 3534, 3536, 3545, 3543, 3546, 3541, 3548, 3549,
-     3556, 5927, 3551, 3554, 3557, 3555, 3565, 3560, 3568, 3564,
-     5927, 3566, 3570, 3572, 5927, 3571, 3583, 3586, 3588, 3573,
-     3581, 3590, 3592, 3594, 3595, 5927, 3598, 5927, 3599, 3579,
-     3605, 5927, 3601, 3607, 3609, 3611, 3608, 3615, 3616, 3623,
-     3612, 3618, 3624, 3625, 3626, 3628, 3635, 3631, 3634, 3636,
-     3637, 5927, 3638, 3640, 3646, 3647, 3652, 3641, 3645, 3657,
-     3656, 5927, 5927, 3660, 5927, 3664, 3663, 3665, 5927, 3668,
-     3670, 3677, 3672, 3673, 3676, 3686, 3680, 5927, 3675, 3687,
-
-     3690, 3692, 3693, 3694, 3696, 3697, 3695, 3698, 3699, 5927,
-     3700, 3703, 3711, 3704, 3712, 3716, 3723, 3717, 5927, 3724,
-     3725, 3726, 3730, 3731, 5927, 3733, 5927, 3734, 3736, 3739,
-     3741, 3740, 5927, 3746, 3747, 3750, 3753, 3755, 3754, 3757,
-     3758, 3764, 3765, 3772, 3768, 3767, 3769, 5927, 3770, 3774,
-     3776, 3783, 3771, 3778, 3787, 3790, 3791, 3792, 3797, 3794,
-     3801, 3803, 3805, 3807, 3799, 5927, 3809, 3811, 3810, 3825,
-     3820, 3815, 5927, 3816, 3830, 3832, 5927, 3823, 3822, 3834,
-     3839, 3826, 3833, 3840, 3841, 3845, 5927, 3846, 3847, 3848,
-     3849, 3852, 3853, 5927, 5927, 3861, 5927, 3863, 3850, 3864,
-
-     3865, 3866, 3872, 3871, 3875, 3877, 3874, 3878, 3885, 3886,
-     3895, 3898, 3902, 3897, 3901, 3887, 5927, 5927, 3904, 3905,
-     3908, 3911, 3912, 3914, 3915, 3922, 3918, 3924, 3928, 3929,
-     3936, 5927, 3935, 3921, 3938, 5927, 3919, 3932, 3940, 3943,
-     3945, 3946, 3949, 3947, 3948, 3951, 3955, 3952, 3957, 3961,
-     3959, 3962, 3960, 3970, 3968, 3969, 3977, 5927, 3978, 3971,
-     3980, 3982, 3983, 3984, 3988, 3989, 3991, 5927, 3993, 3995,
-     3997, 3998, 3992, 4002, 4013, 4017, 4019, 4010, 4020, 4021,
-     4023, 4027, 4024, 5927, 4031, 4028, 4030, 4034, 4038, 4040,
-     4041, 4043, 4044, 4052, 4049, 4053, 4055, 4057, 4045, 4061,
-
-     4063, 4047, 5927, 4067, 4069, 4065, 4074, 4071, 4075, 4076,
-     4082, 4086, 4078, 4080, 4087, 4091, 5927, 4088, 4092, 4094,
-     4096, 4102, 4093, 4099, 4103, 5927, 4105, 4107, 4110, 4111,
-     4113, 4116, 4119, 4120, 4123, 4122, 4126, 5927, 4128, 4130,
-     4133, 4136, 4137, 4139, 4142, 4141, 5927, 4143, 4149, 4151,
-     4158, 4153, 4162, 4159, 4163, 4155, 4157, 4169, 4173, 4175,
-     4176, 4177, 4165, 4187, 4189, 4188, 5927, 4171, 5927, 4190,
-     4193, 4201, 4196, 4178, 5927, 4202, 4203, 4207, 4208, 4204,
-     5927, 4209, 4210, 4212, 4216, 5927, 4211, 4215, 4217, 4222,
-     4225, 4229, 5927, 4232, 4233, 4235, 4244, 4245, 4242, 4243,
-
-     4246, 4248, 4249, 4250, 4251, 4259, 4254, 4256, 5927, 4258,
-     4264, 4266, 4270, 4271, 4272, 4273, 4279, 4274, 5927, 4276,
-     4282, 4283, 4284, 4285, 4286, 4288, 4296, 4291, 4294, 5927,
-     4295, 4299, 4307, 3996, 4308, 5927, 5927, 4300, 4315, 4317,
-     4305, 4318, 5927, 4309, 4327, 4322, 4324, 4326, 5927, 5927,
-     4329, 5927, 4325, 5927, 4330, 4332, 5927, 5927, 4333, 4336,
-     4337, 4340, 4347, 5927, 4350, 5927, 4357, 4352, 4339, 4341,
-     4354, 5927, 4356, 4358, 4361, 5927, 4364, 4371, 4366, 4367,
-     5927, 4369, 4372, 4374, 5927, 4376, 4379, 4380, 4381, 4386,
-     4383, 4387, 4390, 4393, 4394, 4396, 4397, 4398, 4409, 4411,
-
-     4413, 4415, 4416, 4400, 4419, 4420, 4422, 4425, 4426, 4427,
-     4429, 4431, 4432, 4434, 4436, 4439, 4440, 4441, 4442, 4443,
-     4444, 4446, 4453, 4456, 4458, 4457, 4459, 4461, 4460, 4462,
-     4464, 4468, 4470, 4471, 5927, 4469, 4472, 4475, 4402, 4478,
-     4488, 4490, 4481, 4497, 4499, 5927, 4501, 5927, 4503, 4489,
-     4505, 4491, 5927, 4506, 4509, 4508, 4511, 4512, 4513, 4515,
-     4514, 4518, 4519, 4522, 5927, 4525, 4520, 4529, 4540, 5927,
-     4532, 4544, 4528, 4535, 4545, 4547, 4548, 4549, 4554, 4550,
-     4556, 4558, 4565, 4560, 4561, 4563, 4568, 4551, 4564, 4572,
-     4579, 4575, 4583, 4587, 5927, 4580, 5927, 4588, 4589, 4590,
-
-     4591, 4593, 4592, 4594, 5927, 5927, 4595, 4600, 4605, 4601,
-     4596, 4607, 4617, 5927, 4609, 4618, 4620, 4610, 5927, 4625,
-     4626, 4628, 5927, 4629, 4630, 4631, 4633, 4634, 4637, 4638,
-     4640, 4642, 4644, 4648, 5927, 5927, 5927, 5927, 4650, 4652,
-     4655, 4657, 4659, 4660, 4662, 4664, 4661, 5927, 4666, 5927,
-     5927, 4668, 4675, 4667, 4677, 4678, 4679, 4683, 4685, 5927,
-     4684, 4689, 4690, 4687, 4697, 4701, 4703, 4704, 4688, 4705,
-     4713, 4711, 4714, 4712, 4717, 4719, 4721, 5927, 5927, 4724,
-     4726, 4728, 4735, 4733, 4736, 4745, 4740, 4742, 4743, 4746,
-     4748, 4730, 4755, 4759, 4757, 4754, 5927, 4758, 4764, 5927,
-
-     4760, 5927, 4765, 4768, 4732, 4769, 4771, 4774, 4775, 4777,
-     5927, 5927, 4778, 4779, 4781, 4785, 4787, 4789, 4788, 4791,
-     4792, 5927, 4793, 5927, 4794, 4801, 4796, 4802, 4810, 4813,
-     4815, 4817, 4812, 4818, 5927, 4819, 4821, 5927, 4822, 4824,
-     4825, 5927, 4829, 4832, 4836, 5927, 4842, 4833, 4839, 5927,
-     4846, 5927, 4843, 4847, 4848, 4855, 5927, 4850, 4856, 5927,
-     4859, 4862, 4864, 4853, 5927, 4851, 5927, 4865, 4872, 4873,
-     4876, 4868, 4878, 4879, 4880, 4881, 4888, 4887, 4889, 5927,
-     5927, 4897, 4884, 4890, 4894, 4899, 4906, 4901, 4904, 4903,
-     5927, 5927, 4911, 5927, 4909, 4912, 5927, 4913, 4918, 4919,
-
-     4920, 4922, 4923, 4927, 4929, 4930, 4931, 4932, 4933, 4939,
-     4951, 4935, 4949, 4955, 4957, 4959, 4961, 4953, 4963, 4964,
-     4965, 4966, 4967, 4970, 5927, 4972, 4973, 4974, 5927, 4978,
-     4979, 4981, 4983, 5927, 4994, 4989, 4995, 4996, 5927, 4982,
-     5002, 4999, 4997, 5007, 5014, 5010, 5009, 5927, 5927, 5927,
-     5011, 5020, 5927, 5025, 5012, 5015, 5017, 5927, 5021, 5027,
-     5927, 5927, 5028, 5029, 5031, 5042, 5927, 5032, 5927, 5033,
-     5927, 5041, 5043, 5049, 5047, 5927, 5052, 5058, 5927, 5061,
-     5064, 5066, 5067, 5055, 5068, 5069, 5927, 5077, 5073, 5079,
-     5081, 5070, 5072, 5085, 5082, 5089, 5086, 5092, 5927, 5094,
-
-     5096, 5097, 5103, 5095, 5105, 5099, 5927, 5107, 5927, 5108,
-     5109, 5112, 5115, 5110, 5113, 5037, 5118, 5117, 5128, 5125,
-     5927, 5130, 5134, 5927, 5131, 5927, 5136, 5927, 5137, 5138,
-     5139, 5140, 5927, 5142, 5146, 5147, 5148, 5927, 5149, 5151,
-     5157, 5927, 5927, 5158, 5168, 5159, 5160, 5172, 5174, 5161,
-     5176, 5169, 5177, 5163, 5185, 5184, 5187, 5188, 5190, 5191,
-     5192, 5927, 5927, 5927, 5197, 5196, 5204, 5201, 5202, 5212,
-     5207, 5927, 5210, 5213, 5211, 5220, 5217, 5222, 5927, 5219,
-     5223, 5224, 5226, 5228, 5229, 5233, 5927, 5237, 5244, 5240,
-     5232, 5247, 5251, 5254, 5256, 5257, 5927, 5259, 5927, 5927,
-
-     5260, 5927, 5261, 5263, 5264, 5265, 5927, 5268, 5270, 5269,
-     5271, 5273, 5927, 5281, 5274, 5276, 5277, 5927, 5927, 5288,
-     5927, 5291, 5292, 5293, 5302, 5298, 5300, 5304, 5301, 5927,
-     5299, 5305, 5309, 5311, 5312, 5927, 5313, 5315, 5316, 5317,
-     5320, 5324, 5326, 5327, 5328, 5927, 5330, 5322, 5345, 5341,
-     5927, 5329, 5347, 5927, 5927, 5332, 5351, 5352, 5927, 5927,
-     5927, 5354, 5927, 5358, 5364, 5368, 5372, 5355, 5927, 5374,
-     5363, 5371, 5927, 5367, 5375, 5377, 5379, 5927, 5927, 5376,
-     5383, 5380, 5388, 5389, 5927, 5391, 5393, 5398, 5406, 5408,
-     5396, 5410, 5412, 5419, 5392, 5400, 5414, 5416, 5417, 5423,
-
-     5420, 5427, 5436, 5432, 5434, 5441, 5442, 5927, 5927, 5444,
-     5927, 5927, 5446, 5449, 5451, 5453, 5455, 5457, 5459, 5927,
-     5394, 5461, 5462, 5463, 5464, 5927, 5466, 5468, 5465, 5469,
-     5474, 5472, 5476, 5478, 5927, 5927, 5470, 5487, 5479, 5492,
-     5481, 5927, 5494, 5489, 5495, 5496, 5498, 5500, 5503, 5927,
-     5502, 5504, 5927, 5927, 5506, 5927, 5927, 5927, 5927, 5927,
-     5927, 5927, 5927, 5507, 5927, 5511, 5515, 5523, 5526, 5927,
-     5512, 5520, 5431, 5516, 5527, 5927, 5528, 5531, 5532, 5538,
-     5530, 5533, 5539, 5543, 5546, 5544, 5547, 5548, 5549, 5553,
-     5550, 5554, 5556, 5927, 5927, 5927, 5555, 5557, 5567, 5559,
-
-     5576, 5578, 5581, 5583, 5570, 5573, 5584, 5585, 5586, 5588,
-     5592, 5600, 5595, 5596, 5597, 5598, 5604, 5599, 5601, 5606,
-     5927, 5610, 5927, 5611, 5927, 5927, 5616, 5621, 5619, 5612,
-     5623, 5630, 5626, 5628, 5632, 5633, 5635, 5637, 5927, 5639,
-     5642, 5927, 5643, 5644, 5927, 5645, 5647, 5649, 5646, 5650,
-     5653, 5656, 5664, 5655, 5927, 5927, 5658, 5666, 5667, 5671,
-     5674, 5681, 5676, 5680, 5682, 5683, 5673, 5695, 5927, 5691,
-     5693, 5697, 5927, 5699, 5694, 5700, 5701, 5702, 5710, 5705,
-     5706, 5927, 5708, 5927, 5712, 5714, 5717, 5715, 5716, 5718,
-     5727, 5725, 5729, 5927, 5732, 5736, 5733, 5738, 5740, 5743,
-
-     5744, 5745, 5747, 5749, 5753, 5757, 5759, 5760, 5750, 5763,
-     5761, 5927, 5771, 5762, 5927, 5772, 5773, 5765, 5774, 5775,
-     5927, 5783, 5779, 5785, 5786, 5789, 5790, 5927, 5792, 5795,
-     5796, 5927, 5800, 5927, 5927, 5801, 5799, 5802, 5808, 5810,
-     5927, 5927, 5927, 5835, 5842, 5849, 5856, 5863,   88, 5870,
-     5877, 5884, 5891, 5898, 5905, 5912, 5919
+       76,  144,  141,  114,  151,  124,  167,  173,  186,  161,
+      190,  117, 1854, 5953, 5953, 5953,  107, 1734, 5953, 5953,
+     5953,  162, 1567, 1365, 5953, 5953, 5953,  212, 1315, 5953,
+     5953, 5953,  167, 1197, 5953,  218, 5953,  222,  134, 1088,
+      226,  182,    0,  233,    0,    0,  194,  227,   85,  184,
+      220,  234,  235,  136,  230,  222,  241,  242,  207,  243,
+      250,  245,  228,  246,  249,  252,  264,  254,  266,  269,
+
+      272,  279,  276,  277,  281,  286,  280,  285,  164,  287,
+      290,  293,  296,  299,  303,  301,  309,  308,  311,  313,
+      321,  315,  320,  322,  324,  323,  332,  331,  344,  348,
+      335,  337,  329,  347,  357,  349,  353,  352,  354,  369,
+      367,  947,  380,  811,  383,  784,  394,  734,  687,  387,
+      339,  398,  402,    0,  394,  396,  404,  399,  360,  400,
+      403,  410,  405,  406,  407,  409,  411,  422,  419,  425,
+      426,  434,  433,  437,  438,  435,  440,  442,  443,  432,
+      456,  379,  459,  449,  448,  460,  461,  463,  466,  467,
+      468,  477,  470,  478,  489,  484,  493,  497,  480,  498,
+
+      501,  496,  508,  504,  511,  512,  507,  503,  513,  515,
+      518,  520,  521,  523,  522,  525,  526,  528,  530,  538,
+      540,  531,  539,  533,  552,  547,  554,  551,  553,  557,
+      556,  560,  568,  569,  561,  570,  572,  573,  576,  579,
+      588,  589,  590,  574,  581,  591,  585,  593,  594,  595,
+      596,  605,  608,  607,  610,  617,  598,  616,  618,  620,
+      621,  622,  631,  623,  633,  627,  640,  624,  638,  643,
+      632,  641,  646,  650,  651,  658,  645,  661,  662,  663,
+      665,  666,  668,  676,  653,  671,  674,  675,  677,  678,
+      680,  681,  684,  682,  693,  685,  695,  689,  708,  704,
+
+      697,  716,  705,  706,  712,  718,  710,  719,  726,  727,
+      743,  741,  731,  740,  711,  745,  747,  752,  749,  753,
+      756,  758,  759,  760,  762,  769,  764, 5953,  766,  774,
+      781,  782,  783,  790,  771,  789,  791,  772,  802,  798,
+      799,  803,  825,  801,  809,  807,  814,  813, 5953,  815,
+      817,  849,  820,  823,  839,  836,  819,  837,  843,  845,
+      847,  859,  850,  855,  857,  873,  860,  862,  869,  870,
+      874,  872,  884,  880,  886,  888,  890,  897,  892,  893,
+      894,  898,  901,  902,  903,  908,  905,  910,  911,  912,
+      916,  923,  920,  924,  926,  928,  933,  932,  929,  939,
+
+      944,  951,  931,  949,  954,  956,  946,  959,  957,  963,
+      964,  965,  967,  977,  972,  973,  974,  975,  979,  981,
+      985,  983,  986,  987,  989,  994,  993, 1000,  991, 1002,
+     1006, 1008, 5953, 1009, 1011, 1012, 1013, 1014, 1015, 5953,
+     1017, 1016, 1019, 1024, 1029, 1031, 1021, 1028, 1039, 1040,
+     1041, 1044, 1051, 1046, 1049, 1054, 1053, 1056, 1057, 1060,
+     1058, 1063, 1065, 1064, 1070, 1071, 1074, 1091, 5953, 1073,
+     1083, 1078, 1075, 1084, 1085, 1103, 1101, 1104, 1102, 1106,
+     1119, 1114, 1120, 1121, 1076, 1125, 1122, 1127, 1131, 1129,
+     1133, 1132, 1134, 1135, 1136, 1138, 1137, 1143, 5953, 1150,
+
+     1154, 1161, 1153, 1160, 1162, 1163, 1164, 1077, 1166, 1167,
+     1169, 1168, 1173, 1184, 1174, 1188, 1183, 1139, 1185, 1187,
+     1189, 1190, 1191, 1192, 1204, 1196, 1206, 1212, 1219, 1215,
+     1217, 1224, 1201, 1220, 1221, 1225, 1227, 1228, 1229, 1230,
+     1232, 1233, 1242, 1239, 1238, 1240, 1241, 1246, 1254, 1247,
+     1249, 1259, 1250, 1260, 1255, 1264, 1265, 1258, 1274, 5953,
+     1281, 1276, 1277, 1278, 1279, 1283, 1287, 1290, 1291, 1288,
+     1294, 1293, 1296, 1300, 1301, 1302, 1297, 1303, 1305, 1314,
+     1318, 1319, 1328, 1320, 1327, 1311, 1330, 1337, 1333, 1340,
+     1336, 1341, 1348, 1343, 1345, 1335, 1357, 1349, 1350, 1360,
+
+     1352, 1361, 1363, 1364, 1375, 1366, 1371, 1380, 1383, 1373,
+     1385, 1377, 1386, 1381, 1389, 1390, 1391, 1392, 1400, 1393,
+     1395, 1401, 1402, 1403, 1405, 1406, 1411, 1415, 1413, 1419,
+     1414, 1420, 1425, 1422, 1428, 1423, 1430, 1432, 1436, 1434,
+     1438, 1437, 1443, 1445, 1447, 1446, 1453, 1455, 1457, 1458,
+     1460, 1461, 1465, 1469, 1471, 1473, 1474, 1475, 1477, 1476,
+     1480, 1486, 1479, 1485, 1491, 1495, 1492, 1497, 1498, 1501,
+     1502, 5953, 1503, 1510, 1505, 1508, 1514, 1515, 1516, 1523,
+     1519, 1521, 1518, 1520, 1524, 1546, 5953, 1532, 5953, 5953,
+     1531, 5953, 5953, 1529, 1533, 1537, 1550, 1541, 1556, 1549,
+
+     1543, 1559, 1552, 1569, 1574, 1530, 1562, 1564, 1570, 1571,
+     1577, 1588, 1584, 1589, 1579, 1597, 1595, 1599, 1601, 1603,
+     1604, 1607, 1608, 1609, 1611, 1610, 1613, 1617, 1619, 1620,
+     1622, 1615, 1623, 1631, 1634, 1636, 1643, 5953, 1641, 1644,
+     1653, 1649, 1656, 1648, 1652, 1655, 1660, 1662, 1657, 1664,
+     1666, 1667, 1668, 1670, 1672, 1675, 1679, 1676, 5953, 1677,
+     1680, 1685, 1684, 1688, 1692, 1694, 1678, 1696, 1698, 1707,
+     1699, 1702, 1704, 1709,  177, 1710, 5953, 1712, 1716, 1719,
+     1720, 1722, 1724, 1726, 1727, 1728, 1729, 1730, 1624, 1732,
+     1733, 1737, 1736, 1735, 1739, 1741, 1751, 1742, 1754, 1761,
+
+     1762, 1763, 1764, 1765, 1766, 1767, 1768, 1770, 1775, 1771,
+     1780, 1776, 1783, 1794, 1791, 1778, 1781, 1798, 1779, 1804,
+     1808, 1806, 1792, 1799, 1813, 1811, 1815, 1816, 1817, 1819,
+     1820, 1821, 1823, 1826, 1827, 1828, 1830, 5953, 1829, 1832,
+     5953, 1836, 1837, 1859, 1838, 1840, 1842, 1851, 1841, 1861,
+     1845, 1855, 1867, 1863, 1879, 1871, 1882, 1874, 1876, 1883,
+     1887, 1888, 1884, 1890, 1893, 1900, 1903, 1907, 1901, 1914,
+     1909, 1910, 1912, 1932, 1911, 1913, 1920, 1915, 1916, 1919,
+     1928, 1921, 1922, 1925, 1937, 1943, 1945, 5953, 1953, 1954,
+     1948, 1926, 1956, 1959, 1960, 1843, 1961, 1962, 1969, 1965,
+
+     1966, 1968, 1971, 1972, 1975, 1976, 1980, 1981, 1977, 1982,
+     1993, 5953, 1984, 5953, 1992, 1994, 1996, 1997, 1998, 2002,
+     2003, 2004, 5953, 5953, 2005, 2012, 2018, 2007, 2013, 5953,
+     2020, 2028, 2029, 2031, 2023, 2024, 2025, 2032, 2035, 2046,
+     2038, 2047, 2039, 2048, 2042, 5953, 2049, 2051, 2055, 2057,
+     2059, 2061, 2063, 2064, 5953, 2065, 2067, 2073, 2080, 2070,
+     2077, 2078, 2081, 2087, 2082, 2085, 2089, 2090, 2092, 2097,
+     2101, 2094, 2098, 2102, 2112, 5953, 2108, 2110, 2117, 2113,
+     2115, 2116, 2119, 2120, 2121, 2129, 2122, 2123, 2127, 2131,
+     2140, 2142, 2137, 2143, 2145, 2135, 2146, 2147, 2153, 2151,
+
+     2155, 2156, 2157, 5953, 2158, 2162,  256, 2165, 2163, 2168,
+     2166, 2167, 2173, 2170, 2187, 2189, 2186, 2192, 2188, 2184,
+     2185, 2195, 2196, 2197, 2201, 2202, 2203, 5953, 2205, 2206,
+     2207, 2209, 2212, 2210, 2221, 5953, 2213, 2223, 2232, 2227,
+     2215, 2233, 2219, 2239, 2241, 2242, 2243, 2244, 2245, 2246,
+     5953, 2252, 2248, 2254, 2255, 2258, 2260, 2261, 2266, 2267,
+     2268, 2271, 2269, 2272, 2273, 2274, 2276, 2277, 2280, 2288,
+     2278, 2289, 2290, 2291, 5953, 2300, 2292, 2296, 2301, 2302,
+     2305, 2314, 2310, 2312, 2315, 2318, 2330, 2320, 2316, 2337,
+     2322, 2327, 2336, 2340, 2341, 2342, 2350, 2344, 2354, 2356,
+
+     2348, 2352, 2357, 2358, 2362, 2360, 2363, 2375, 2377, 2379,
+     2372, 2373, 2385, 2397, 2388, 5953, 2392, 2383, 2390, 2400,
+     2407, 2380, 2405, 2403, 2404, 2411, 2412, 2414, 2421, 2418,
+     2416, 2420, 2422, 2423, 2426, 2425, 2429, 2433, 2440, 2432,
+     2442, 2444, 5953, 2445, 2450, 2449, 2451, 2453, 2436, 2458,
+     2461, 2459, 2463, 2465, 2467, 2469, 2470, 2471, 2472, 2474,
+     2476, 2475, 5953, 2479, 2480, 2485, 2487, 2488, 2494, 2497,
+     2500, 2498, 2504, 2505, 2506, 2507, 5953, 2514, 2515, 2512,
+     2516, 2518, 2519, 2521, 2524, 2525, 5953, 2526, 2528, 2535,
+     2536, 2531, 5953, 2539, 2534, 2540, 2541, 2542, 2543, 2549,
+
+     2544, 2547, 2552, 2557, 2559, 2555, 2563, 5953, 2565, 2575,
+     2567, 2571, 2573, 2576, 2577, 2579, 2583, 2587, 2582, 5953,
+     2599, 2598, 2595, 2609, 2586, 2600, 2601, 2607, 2604, 2610,
+     2611, 5953, 2613, 2614, 2616, 2617, 2620, 2621, 2623, 2635,
+     2625, 2628, 2630, 2633, 2636, 2638, 2640, 2643, 2641, 2649,
+     2652, 2653, 2655, 2659, 2656, 2660, 2663, 2671, 2672, 2673,
+     2675, 5953, 2678, 2679, 2680, 2664, 2684, 2685, 2686, 2687,
+     2690, 2691, 2692, 2694, 2695, 2702, 2712, 2703, 2704, 2707,
+     2709, 2713, 2715, 2716, 2717, 2718, 2725, 2724, 2721, 2733,
+     2730, 2732, 2740, 2731, 2739, 2741, 2742, 2743, 2744, 2748,
+
+     2745, 2751, 2752, 2756, 2767, 2768, 2770, 2759, 2753, 2769,
+     2775, 5953, 2771, 2778, 2779, 2780, 2784, 2785, 2792, 2787,
+     2788, 2795, 2803, 2804, 2789, 2797, 2791, 2812, 2814, 5953,
+     2798, 5953, 2805, 2817, 2818, 2827, 2810, 5953, 2824, 5953,
+     2825, 2832, 2820, 2829, 5953, 2834, 2833, 2835, 2838, 2840,
+     2841, 2842, 2843, 2846, 2849, 2847, 2851, 2852, 2856, 2854,
+     2858, 2859, 2863, 2870, 2867, 2872, 2873, 2875, 2879, 2880,
+     2881, 2882, 5953, 2886, 2883, 2888, 2889, 2891, 2893, 2894,
+     2898, 2896, 2899, 2904, 2906, 2907, 2910, 2915, 2923, 2914,
+     2928, 5953, 2921, 2925, 2926, 2930, 5953, 2932, 2929, 2938,
+
+     2940, 2933, 2931, 2942, 2943, 2950, 2944, 2948, 2952, 2960,
+     2959, 2962, 5953, 2963, 2961, 2967, 2971, 2975, 2973, 2976,
+     2979, 2988, 2984, 2983, 2985, 2986, 2987, 2990, 2997, 3000,
+     2999, 3001, 2998, 3006, 3009, 3010, 3002, 3012, 3013, 3014,
+     3016, 5953, 3017, 3018, 3025, 3022, 3023, 3024, 3026, 5953,
+     3035, 3036, 3039, 3040, 3037, 3045, 3027, 3046, 3048, 3050,
+     3053, 3049, 3054, 5953, 3062, 5953, 3055, 3063, 3068, 3072,
+     3069, 3073, 3075, 3084, 3074, 3076, 3085, 3088, 3079, 3086,
+     3092, 3089, 3094, 3096, 3110, 3100, 3097, 3107, 3109, 3111,
+     3112, 3114, 5953, 5953, 3113, 3115, 3118, 3116, 3121, 3124,
+
+     3122, 3131, 3134, 3135, 3136, 3145, 5953, 3141, 3142, 3146,
+     3148, 3164, 3147, 3150, 3166, 3162, 3169, 3170, 5953, 3151,
+     3159, 3178, 3161, 3177, 3181, 5953, 3179, 5953, 3182, 3183,
+     3184, 3185, 3190, 3191, 3193, 3195, 3189, 3205, 3206, 3198,
+     3196, 3197, 3208, 3212, 3219, 3214, 3217, 3220, 5953, 3222,
+     3223, 3224, 3226, 3229, 3230, 3232, 3237, 5953, 3239, 3245,
+     3240, 3246, 3242, 3248, 3249, 3250, 3252, 3253, 3251, 3255,
+     3262, 3266, 3267, 3268, 3272, 3273, 3280, 5953, 3277, 3281,
+     3289, 3287, 3284, 3291, 3292, 3288, 3294, 3297, 3299, 3298,
+     3300, 3301, 3304, 3302, 3305, 3306, 3318, 3320, 3321, 3311,
+
+     3328, 3312, 3324, 3329, 3331, 3332, 3338, 3339, 3342, 3347,
+     3335, 3349, 3356, 3337, 3344, 3360, 3362, 3367, 3350, 5953,
+     3369, 3364, 3374, 3370, 3372, 3377, 3378, 3386, 3371, 3373,
+     3381, 3394, 3387, 5953, 3397, 3389, 3398, 3399, 3402, 3411,
+     3404, 3392, 3406, 3409, 3414, 3415, 3418, 3419, 3420, 3423,
+     3424, 5953, 5953, 3426, 3428, 3430, 5953, 3433, 3429, 3437,
+     3435, 3436, 3432, 3445, 3446, 3443, 3448, 3451, 3454, 5953,
+     3456, 3464, 3459, 3460, 3468, 3471, 3473, 3475, 3474, 3466,
+     3463, 3476, 3478, 3484, 3485, 3489, 3493, 3492, 3491, 3494,
+     5953, 3495, 3496, 3499, 3501, 3497, 3505, 5953, 3503, 3509,
+
+     3517, 3510, 3508, 3521, 3524, 3527, 3528, 3529, 3531, 3532,
+     3533, 3534, 3536, 3541, 3539, 3546, 3547, 3538, 5953, 3551,
+     3552, 3555, 3558, 3562, 3565, 3572, 3573, 3569, 3571, 3570,
+     3580, 5953, 3577, 3579, 3578, 3581, 3591, 3586, 3593, 3584,
+     5953, 3588, 3592, 3594, 5953, 3598, 3602, 3605, 3610, 3597,
+     3613, 3612, 3614, 3615, 3616, 5953, 3622, 5953, 3620, 3624,
+     3628, 5953, 3626, 3630, 3632, 3634, 3631, 3639, 3641, 3648,
+     3635, 3643, 3645, 3649, 3650, 3651, 3659, 3657, 3658, 3660,
+     3662, 5953, 3665, 3661, 3664, 3669, 3671, 3672, 3674, 3681,
+     3683, 5953, 5953, 3688, 5953, 3682, 3689, 3690, 5953, 3692,
+
+     3694, 3697, 3693, 3698, 3700, 3704, 3701, 5953, 3711, 3712,
+     3713, 3715, 3716, 3717, 3719, 3721, 3720, 3723, 3722, 5953,
+     3725, 3727, 3735, 3726, 3730, 3740, 3742, 3736, 5953, 3748,
+     3749, 3752, 3754, 3755, 5953, 3757, 5953, 3758, 3760, 3761,
+     3763, 3764, 5953, 3772, 3767, 3778, 3768, 3775, 3782, 3785,
+     3786, 3771, 3779, 3793, 3792, 3788, 3795, 5953, 3796, 3798,
+     3805, 3806, 3802, 3800, 3814, 3811, 3819, 3810, 3823, 3813,
+     3827, 3829, 3824, 3831, 3832, 5953, 3834, 3835, 3838, 3845,
+     3840, 3841, 5953, 3842, 3847, 3851, 5953, 3848, 3855, 3857,
+     3863, 3858, 3860, 3864, 3865, 3867, 5953, 3869, 3871, 3868,
+
+     3872, 3884, 3885, 5953, 5953, 3886, 5953, 3887, 3873, 3891,
+     3890, 3870, 3898, 3900, 3901, 3903, 3897, 3909, 3912, 3911,
+     3920, 3921, 3928, 3923, 3925, 3918, 5953, 5953, 3930, 3931,
+     3927, 3935, 3939, 3937, 3941, 3948, 3945, 3943, 3952, 3953,
+     3960, 5953, 3961, 3947, 3962, 5953, 3955, 3963, 3956, 3969,
+     3970, 3964, 3971, 3972, 3973, 3974, 3977, 3981, 3983, 3986,
+     3988, 3989, 3990, 3994, 3993, 3995, 4003, 5953, 3997, 4000,
+     4004, 4007, 4008, 4010, 4012, 4015, 4016, 5953, 4011, 4018,
+     4021, 4022, 4020, 4025, 4039, 4042, 4044, 4031, 4036, 4047,
+     4045, 4051, 4053, 5953, 4055, 4052, 4056, 4059, 4062, 4064,
+
+     4065, 4067, 4068, 4070, 4073, 4074, 4078, 4081, 4075, 4082,
+     4083, 4085, 5953, 4087, 4094, 4090, 4096, 4098, 4099, 4100,
+     4101, 4107, 4108, 4110, 4111, 4113, 5953, 4114, 4115, 4118,
+     4119, 4121, 4122, 4124, 4128, 5953, 4132, 4126, 4129, 4135,
+     4137, 4140, 4142, 4144, 4147, 4148, 4151, 5953, 4152, 4157,
+     4160, 4153, 4159, 4161, 4170, 4163, 5953, 4174, 4176, 4173,
+     4183, 4166, 4186, 4185, 4191, 4167, 4184, 4195, 4193, 4194,
+     4199, 4200, 4201, 4210, 4211, 4212, 5953, 4206, 5953, 4213,
+     4217, 4220, 4223, 4207, 5953, 4219, 4221, 4231, 4225, 4233,
+     5953, 4234, 4228, 4236, 4238, 5953, 4245, 4247, 4239, 4241,
+
+     4255, 4256, 5953, 4261, 4262, 4258, 4249, 4270, 4267, 4268,
+     4271, 4269, 4273, 4274, 4275, 4283, 4278, 4279, 5953, 4285,
+     4288, 4295, 4296, 4290, 4280, 4298, 4304, 4297, 5953, 4306,
+     4305, 4307, 4308, 4309, 4312, 4314, 4321, 4317, 4316, 5953,
+     4320, 4324, 4337, 4318, 4328, 5953, 5953, 4333, 4338, 4340,
+     4335, 4341, 5953, 4344, 4351, 4346, 4350, 4353, 5953, 5953,
+     4355, 5953, 4352, 5953, 4357, 4356, 5953, 5953, 4359, 4360,
+     4363, 4369, 4366, 5953, 4376, 5953, 4373, 4377, 4379, 4380,
+     4382, 5953, 4381, 4384, 4389, 5953, 4383, 4391, 4390, 4394,
+     5953, 4398, 4393, 4399, 5953, 4403, 4406, 4410, 4401, 4407,
+
+     4413, 4420, 4411, 4414, 4421, 4424, 4423, 4426, 4435, 4437,
+     4439, 4441, 4430, 4427, 4444, 4446, 4450, 4448, 4452, 4453,
+     4454, 4456, 4457, 4459, 4462, 4463, 4465, 4468, 4466, 4467,
+     4479, 4469, 4471, 4481, 4483, 4472, 4482, 4486, 4485, 4490,
+     4493, 4488, 4495, 4496, 5953, 4500, 4501, 4503, 4505, 4506,
+     4507, 4514, 4516, 4522, 4524, 5953, 4527, 5953, 4529, 4513,
+     4532, 4517, 5953, 4533, 4534, 4535, 4538, 4537, 4539, 4540,
+     4541, 4544, 4545, 4547, 5953, 4550, 4551, 4555, 4566, 5953,
+     4560, 4568, 4554, 4556, 4570, 4571, 4575, 4576, 4579, 4578,
+     4581, 4583, 4590, 4585, 4587, 4588, 4591, 4589, 4592, 4599,
+
+     4598, 4606, 4608, 4614, 5953, 4601, 5953, 4615, 4611, 4616,
+     4617, 4618, 4619, 4621, 5953, 5953, 4622, 4626, 4632, 4633,
+     4625, 4635, 4641, 5953, 4636, 4646, 4653, 4644, 5953, 4627,
+     4638, 4655, 5953, 4649, 4656, 4659, 4667, 4660, 4669, 4670,
+     4662, 4664, 4672, 4674, 5953, 5953, 5953, 5953, 4676, 4678,
+     4682, 4683, 4685, 4686, 4688, 4690, 4687, 5953, 4692, 5953,
+     5953, 4694, 4701, 4693, 4703, 4704, 4705, 4709, 4711, 5953,
+     4710, 4715, 4716, 4713, 4723, 4727, 4729, 4730, 4714, 4731,
+     4739, 4737, 4740, 4738, 4743, 4745, 4747, 5953, 5953, 4750,
+     4752, 4754, 4761, 4759, 4762, 4771, 4766, 4768, 4769, 4772,
+
+     4774, 4756, 4781, 4785, 4783, 4780, 5953, 4784, 4790, 5953,
+     4786, 5953, 4791, 4794, 4758, 4795, 4797, 4800, 4801, 4803,
+     5953, 5953, 4804, 4805, 4807, 4811, 4813, 4815, 4814, 4817,
+     4818, 5953, 4819, 5953, 4820, 4827, 4822, 4828, 4836, 4839,
+     4841, 4843, 4838, 4844, 5953, 4845, 4847, 5953, 4848, 4850,
+     4851, 5953, 4855, 4858, 4862, 5953, 4868, 4859, 4865, 5953,
+     4872, 5953, 4869, 4873, 4874, 4881, 5953, 4876, 4882, 5953,
+     4885, 4888, 4890, 4879, 5953, 4877, 5953, 4891, 4898, 4899,
+     4902, 4894, 4904, 4905, 4906, 4907, 4914, 4913, 4915, 5953,
+     5953, 4923, 4910, 4916, 4920, 4925, 4932, 4927, 4930, 4929,
+
+     5953, 5953, 4937, 5953, 4935, 4938, 5953, 4939, 4944, 4945,
+     4946, 4948, 4949, 4953, 4955, 4956, 4957, 4958, 4959, 4965,
+     4977, 4961, 4975, 4981, 4983, 4985, 4987, 4979, 4989, 4990,
+     4991, 4992, 4993, 4996, 5953, 4998, 4999, 5000, 5953, 5004,
+     5005, 5007, 5009, 5953, 5020, 5015, 5021, 5022, 5953, 5008,
+     5028, 5025, 5023, 5033, 5040, 5036, 5035, 5953, 5953, 5953,
+     5037, 5046, 5953, 5051, 5038, 5041, 5043, 5953, 5047, 5053,
+     5953, 5953, 5054, 5055, 5057, 5068, 5953, 5058, 5953, 5059,
+     5953, 5067, 5069, 5075, 5073, 5953, 5078, 5084, 5953, 5087,
+     5090, 5092, 5093, 5081, 5094, 5095, 5953, 5103, 5099, 5105,
+
+     5107, 5096, 5098, 5111, 5108, 5115, 5112, 5118, 5953, 5120,
+     5122, 5123, 5129, 5121, 5131, 5125, 5953, 5133, 5953, 5134,
+     5135, 5138, 5141, 5136, 5139, 5063, 5144, 5143, 5154, 5151,
+     5953, 5156, 5160, 5953, 5157, 5953, 5162, 5953, 5163, 5164,
+     5165, 5166, 5953, 5168, 5172, 5173, 5174, 5953, 5175, 5177,
+     5183, 5953, 5953, 5184, 5194, 5185, 5186, 5198, 5200, 5187,
+     5202, 5195, 5203, 5189, 5211, 5210, 5213, 5214, 5216, 5217,
+     5218, 5953, 5953, 5953, 5223, 5222, 5230, 5227, 5228, 5238,
+     5233, 5953, 5236, 5239, 5237, 5246, 5243, 5248, 5953, 5245,
+     5249, 5250, 5252, 5254, 5255, 5259, 5953, 5263, 5270, 5266,
+
+     5258, 5273, 5277, 5280, 5282, 5283, 5953, 5285, 5953, 5953,
+     5286, 5953, 5287, 5289, 5290, 5291, 5953, 5294, 5296, 5295,
+     5297, 5299, 5953, 5307, 5300, 5302, 5303, 5953, 5953, 5314,
+     5953, 5317, 5318, 5319, 5328, 5324, 5326, 5330, 5327, 5953,
+     5325, 5331, 5335, 5337, 5338, 5953, 5339, 5341, 5342, 5343,
+     5346, 5350, 5352, 5353, 5354, 5953, 5356, 5348, 5371, 5367,
+     5953, 5355, 5373, 5953, 5953, 5358, 5377, 5378, 5953, 5953,
+     5953, 5380, 5953, 5384, 5390, 5394, 5398, 5381, 5953, 5400,
+     5389, 5397, 5953, 5393, 5401, 5403, 5405, 5953, 5953, 5402,
+     5409, 5406, 5414, 5415, 5953, 5417, 5419, 5424, 5432, 5434,
+
+     5422, 5436, 5438, 5445, 5418, 5426, 5440, 5442, 5443, 5449,
+     5446, 5453, 5462, 5458, 5460, 5467, 5468, 5953, 5953, 5470,
+     5953, 5953, 5472, 5475, 5477, 5479, 5481, 5483, 5485, 5953,
+     5420, 5487, 5488, 5489, 5490, 5953, 5492, 5494, 5491, 5495,
+     5500, 5498, 5502, 5504, 5953, 5953, 5496, 5513, 5505, 5518,
+     5507, 5953, 5520, 5515, 5521, 5522, 5524, 5526, 5529, 5953,
+     5528, 5530, 5953, 5953, 5532, 5953, 5953, 5953, 5953, 5953,
+     5953, 5953, 5953, 5533, 5953, 5537, 5541, 5549, 5552, 5953,
+     5538, 5546, 5457, 5542, 5553, 5953, 5554, 5557, 5558, 5564,
+     5556, 5559, 5565, 5569, 5572, 5570, 5573, 5574, 5575, 5579,
+
+     5576, 5580, 5582, 5953, 5953, 5953, 5581, 5583, 5593, 5585,
+     5602, 5604, 5607, 5609, 5596, 5599, 5610, 5611, 5612, 5614,
+     5618, 5626, 5621, 5622, 5623, 5624, 5630, 5625, 5627, 5632,
+     5953, 5636, 5953, 5637, 5953, 5953, 5642, 5647, 5645, 5638,
+     5649, 5656, 5652, 5654, 5658, 5659, 5661, 5663, 5953, 5665,
+     5668, 5953, 5669, 5670, 5953, 5671, 5673, 5675, 5672, 5676,
+     5679, 5682, 5690, 5681, 5953, 5953, 5684, 5692, 5693, 5697,
+     5700, 5707, 5702, 5706, 5708, 5709, 5699, 5721, 5953, 5717,
+     5719, 5723, 5953, 5725, 5720, 5726, 5727, 5728, 5736, 5731,
+     5732, 5953, 5734, 5953, 5738, 5740, 5743, 5741, 5742, 5744,
+
+     5753, 5751, 5755, 5953, 5758, 5762, 5759, 5764, 5766, 5769,
+     5770, 5771, 5773, 5775, 5779, 5783, 5785, 5786, 5776, 5789,
+     5787, 5953, 5797, 5788, 5953, 5798, 5799, 5791, 5800, 5801,
+     5953, 5809, 5805, 5811, 5812, 5815, 5816, 5953, 5818, 5821,
+     5822, 5953, 5826, 5953, 5953, 5827, 5825, 5828, 5834, 5836,
+     5953, 5953, 5953, 5861, 5868, 5875, 5882, 5889,   88, 5896,
+     5903, 5910, 5917, 5924, 5931, 5938, 5945
     } ;
 
-static const flex_int16_t yy_def[3058] =
+static const flex_int16_t yy_def[3068] =
     {   0,
-     3043,    1, 3044, 3044, 3045, 3045, 3046, 3046, 3047, 3047,
-     3048, 3048, 3043, 3049, 3043, 3043, 3043, 3043, 3050, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3051, 3043, 3043, 3043, 3051, 3052, 3043, 3043,
-     3043, 3052, 3053, 3043, 3043, 3043, 3043, 3053, 3054, 3043,
-     3043, 3043, 3054, 3055, 3043, 3056, 3043, 3055, 3055, 3049,
-     3049, 3043, 3057, 3050, 3057, 3050, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3051, 3051, 3052, 3052, 3053, 3053, 3043, 3054, 3054, 3055,
-     3055, 3056, 3056, 3055, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3055, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3055, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3055, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3055, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3049, 3043, 3043, 3049, 3043, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3055, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3055,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3043, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3043, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049,
-     3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3043, 3049, 3043, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049,
-     3049, 3049, 3049, 3043, 3043, 3049, 3043, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043,
-     3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3043, 3043,
-     3049, 3043, 3049, 3043, 3049, 3049, 3043, 3043, 3049, 3049,
-     3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, 3049,
-     3049, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049,
-     3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3043, 3043, 3043, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043,
-     3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3043,
-
-     3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3049, 3043, 3049, 3049,
-     3049, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3043,
-     3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3043,
-     3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043,
-     3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3043, 3043, 3049, 3043, 3049, 3049, 3043, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3043,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-     3043, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049,
-     3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3043, 3049, 3049, 3043, 3049, 3043, 3049, 3043, 3049, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-     3049, 3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3043,
-
-     3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3043, 3049,
-     3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043,
-     3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049,
-     3043, 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3043, 3043,
-     3043, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3043, 3049,
-     3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049,
-     3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043,
-     3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3049,
-     3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043,
-     3049, 3049, 3043, 3043, 3049, 3043, 3043, 3043, 3043, 3043,
-     3043, 3043, 3043, 3049, 3043, 3049, 3049, 3049, 3049, 3043,
-     3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3043, 3043, 3043, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3043, 3049, 3043, 3049, 3043, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3043, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049,
-     3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049,
-
-     3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
-     3049, 3043, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049,
-     3043, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049,
-     3049, 3043, 3049, 3043, 3043, 3049, 3049, 3049, 3049, 3049,
-     3043, 3043,    0, 3043, 3043, 3043, 3043, 3043, 3043, 3043,
-     3043, 3043, 3043, 3043, 3043, 3043, 3043
+     3053,    1, 3054, 3054, 3055, 3055, 3056, 3056, 3057, 3057,
+     3058, 3058, 3053, 3059, 3053, 3053, 3053, 3053, 3060, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3061, 3053, 3053, 3053, 3061, 3062, 3053, 3053,
+     3053, 3062, 3063, 3053, 3053, 3053, 3053, 3063, 3064, 3053,
+     3053, 3053, 3064, 3065, 3053, 3066, 3053, 3065, 3065, 3059,
+     3059, 3053, 3067, 3060, 3067, 3060, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3061, 3061, 3062, 3062, 3063, 3063, 3053, 3064, 3064,
+     3065, 3065, 3066, 3066, 3065, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3065, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3065, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+
+     3065, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3065,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3053,
+     3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3065,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3053, 3059, 3059, 3065, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3053, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053,
+     3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3053, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3053, 3059, 3053, 3059, 3059, 3059, 3053, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3053, 3053, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059,
+     3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3053, 3053,
+     3059, 3053, 3059, 3053, 3059, 3059, 3053, 3053, 3059, 3059,
+     3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059,
+     3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3053, 3053, 3053, 3053, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053,
+     3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3053,
+     3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3053, 3059, 3059, 3053, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3053,
+     3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3053, 3053, 3059, 3053, 3059, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3053,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3053, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059,
+     3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3053, 3059, 3059, 3053, 3059, 3053, 3059, 3053, 3059, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3053,
+     3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3053, 3059,
+     3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059,
+     3053, 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3053, 3053,
+     3053, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3053, 3059,
+     3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3059,
+     3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3053, 3053, 3059, 3053, 3053, 3053, 3053, 3053,
+     3053, 3053, 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3053,
+     3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3053, 3053, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3053, 3059, 3053, 3059, 3053, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3053, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059,
+     3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059,
+
+     3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059,
+     3059, 3053, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059,
+     3053, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059,
+     3059, 3053, 3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059,
+     3053, 3053,    0, 3053, 3053, 3053, 3053, 3053, 3053, 3053,
+     3053, 3053, 3053, 3053, 3053, 3053, 3053
     } ;
 
-static const flex_int16_t yy_nxt[5968] =
+static const flex_int16_t yy_nxt[5994] =
     {   0,
        14,   15,   16,   17,   18,   19,   18,   14,   14,   14,
        14,   14,   18,   20,   21,   22,   23,   24,   25,   26,
@@ -1432,657 +1435,661 @@ static const flex_int16_t yy_nxt[5968] =
        51,   47,   51,   70,   47,   70,   70,   52,   70,   52,
        54,   55,   56,   57,   70,   18,   54,   55,   56,   57,
        71,   18,   58,   60,   61,   62,   71,   82,   58,   60,
-       61,   62,   72,   71,   63,  102,   73,   92,   70,   71,
+       61,   62,   72,   71,   63,  103,   73,   92,   70,   71,
        63,   15,   16,   17,   65,   66,   67,   75,   71,   75,
 
-       75,   71,   75,   68,  104,  157,  103,   93,   75,   76,
-      141,  141,   69,   15,   16,   17,   65,   66,   67,   71,
+       75,   71,   75,   68,  105,  158,  104,   93,   75,   76,
+      142,  142,   69,   15,   16,   17,   65,   66,   67,   71,
        71,   83,   77,   78,   71,   68,   79,   71,   84,   87,
-       71,   80,   85,   88,   69,   86,   89,  151,   90,   91,
-       81,   71,   94,   71,   96,   71,   71,  159,   71,  105,
-       98,  112,   97,   99,   71,  109,   95,  106,   71,  110,
-      100,   71,  101,  107,  172,   71,  113,  108,  143,   71,
-      114,  143,  118,   71,  119,  111,  115,   71,  120,  116,
-      140,  151,  124,  148,  148,  125,  117,  163,  121,  122,
-       71,  123,  126,   71,  133,  154,  127,  128,   71,  129,
-
-      224,  130,   71,  137,  134,  158,   71,  138,  135,  136,
-      131,  139,  145,   71,  145,  145,  132,  145,   75,   71,
-       75,   75,  150,   75,  150,  150,   70,  150,   70,   70,
-      153,   70,   72,  165,   71,  171,   73,   70,   75,   71,
-       75,   75,  155,   75,   71,   71,  225,   71,  156,   75,
-       76,   71,   71,   71,  160,  161,  164,   71,   71,  166,
-      173,   71,   71,  169,  170,  167,   71,  168,  162,   71,
-       71,  175,  177,  178,   71,   71,  184,   71,  176,  174,
-      179,  182,  253,   71,   71,   71,  189,  180,  181,  183,
-       71,  151,   71,  185,  191,   71,  186,   71,   71,  199,
-
-      192,  194,  197,   71,   71,  195,   71,  198,  200,  187,
-      188,  190,   71,  201,   71,   71,  202,  205,   71,  203,
-      193,  196,  207,   71,   71,   71,   71,  204,   71,  212,
-      209,   71,   71,  206,  210,   71,  214,   71,   71,   71,
-       71,  208,   71,  220,  211,  215,  213,   71,  226,  229,
-      217,  216,  223,   71,  221,   71,  219,  218,  222,  233,
-      230,   71,   71,   71,  235,  227,   71,   71,  228,  231,
-       71,  239,   71,  236,  232,  238,   71,  234,  149,  240,
-       71,  242,  141,  141,  143,  237,  243,  143,  241,  145,
-      151,  145,  145,  244,  145,  148,  148,  150,  248,  150,
-
-      150,   75,  150,   75,   75,   71,   75,   71,  246,   71,
-      245,   71,   71,  153,   71,   71,   71,  250,   71,   71,
-       71,  256,  249,  247,  251,  259,  252,  255,  258,   71,
-      254,   71,  260,  264,  262,   71,  263,   71,  257,   71,
-       71,  265,   71,   71,  268,  261,  266,   71,  273,  269,
-       71,  147,   71,   71,  270,  275,  274,  276,  279,   71,
-      271,  272,  278,  267,   71,  277,   71,   71,   71,   71,
-      281,   71,  282,  283,   71,   71,   71,  290,   71,  288,
-      289,  285,  291,  284,  286,   71,   71,  280,   71,  287,
-      294,  297,   71,  298,  292,  299,  293,   71,  295,  301,
-
-      303,   71,  296,  304,   71,   71,   71,  300,  302,   71,
-      307,   71,   71,  309,  310,   71,   71,  308,  305,   71,
-       71,   71,  311,   71,  312,  306,   71,  313,   71,   71,
-       71,   71,  315,   71,   71,  319,   71,  317,   71,   71,
-      324,   71,  320,  314,  318,  325,   71,   71,   71,  321,
-      316,  328,  322,  326,  330,   71,  333,  327,  323,   71,
-       71,   71,   71,  329,   71,   71,  335,  336,   71,   71,
-      339,  340,  342,  331,  332,  338,   71,   71,   71,  334,
-       71,   71,   71,  337,   71,  345,  346,   71,  341,   71,
-      347,  349,  343,   71,  353,  344,   71,   71,   71,  151,
-
-      350,   71,   71,   71,   71,  352,   71,  360,  358,  356,
-      361,  354,  355,   71,  348,   71,   71,  351,   71,  364,
-      362,  365,  357,  363,   71,   71,   71,  359,   71,   71,
-       71,   71,   71,  371,  372,   71,  374,  369,  366,   71,
-       71,   71,  368,  373,  367,  375,   71,  377,   71,   71,
-      376,   71,  378,   71,   71,  370,  379,  381,   71,   71,
-      384,   71,  382,  386,  380,  388,   71,  385,  383,   71,
-       71,   71,  387,   71,   71,  391,   71,  389,  393,   71,
-       71,  392,  396,   71,   71,   71,  398,   71,   71,   71,
-      399,   71,   71,  401,  390,   71,  397,  408,  395,  394,
-
-       71,  403,   71,   71,   71,  405,  400,  407,   71,  402,
-      404,  409,   71,   71,   71,   71,  410,   71,  420,  419,
-      421,  417,  406,   71,   71,   71,   71,  423,  426,  427,
-      424,  418,  411,  428,   71,  412,  422,  425,  429,   71,
-      413,  414,  415,  416,   71,   71,   71,  430,   71,  436,
-       71,  431,   71,   71,  432,  434,   71,  435,  437,   71,
-      433,   71,  438,   71,  440,   71,   71,  439,  441,  445,
-       71,   71,  446,   71,  447,   71,   71,  463,  450,   71,
-      451,  444,  442,  448,  452,  443,   71,   71,   71,   71,
-      449,  455,  453,  456,   71,   71,  464,  458,  454,  465,
-
-       71,   71,   71,  457,  462,   71,  466,   71,  467,   71,
-      459,   71,   71,  460,  468,  461,   71,   71,  469,   71,
-      482,   71,  479,   71,  517,   71,  470,   71,  471,  477,
-      472,  480,  478,  481,  493,  484,  483,  151,  492,  494,
-       71,   71,   71,  473,  495,   71,  474,  496,  475,   71,
-      476,   71,   71,  485,  486,   71,  502,  499,  497,  498,
-       71,  500,   71,  487,   71,  488,  489,  490,  501,  506,
-      491,   71,   71,   71,   71,   71,   71,   71,  505,  507,
-      504,  503,  512,   71,  514,   71,  515,   71,   71,  511,
-       71,  513,  509,  510,  508,   71,  519,  523,  524,   71,
-
-       71,  518,   71,  516,  522,   71,   71,   71,   71,  534,
-       71,  521,   71,  520,  529,   71,   71,   71,   71,  531,
-      532,   71,  526,  527,  528,  525,   71,   71,  146,   71,
-       71,   71,  530,  536,   71,  533,  535,  537,  540,  543,
-       71,  539,   71,  546,  538,  544,  545,  547,   71,  541,
-       71,  542,  548,   71,  549,   71,   71,   71,  553,  550,
-       71,  551,  555,   71,   71,   71,   71,  558,  559,  556,
-      552,   71,   71,  554,   71,  560,   71,   71,  557,   71,
-       71,  565,  563,   71,  564,   71,   71,  561,   71,  566,
-       71,   71,   71,  571,   71,  567,  572,  562,   71,  574,
-
-      570,   71,   71,  573,  569,  568,  575,   71,  577,   71,
-      579,   71,   71,   71,   71,  576,   71,   71,   71,   71,
-      581,  589,  582,  591,  578,   71,   71,   71,  584,   71,
-       71,  592,  580,  588,  583,  585,   71,  586,  587,  590,
-       71,   71,   71,   71,  596,  600,  599,  602,  594,   71,
-      593,  595,   71,   71,   71,   71,  597,  601,  598,   71,
-      605,   71,   71,  604,   71,   71,  608,   71,   71,  609,
-       71,  603,  611,   71,   71,   71,   71,   71,   71,  625,
-      610,  606,  607,   71,  612,   71,  614,  634,  144,  613,
-       71,  615,  624,   71,  623,  626,  616,  628,  617,  627,
-
-      631,   71,   71,   71,  618,   71,  619,  629,  632,  620,
-      621,  630,  635,   71,   71,   71,  622,  633,   71,   71,
-       71,  637,  638,  636,   71,  641,   71,  643,   71,   71,
-       71,   71,   71,   71,  640,  644,  639,  649,   71,   71,
-      642,  645,  650,  646,   71,   71,   71,  151,   71,  647,
-      653,  655,  656,  648,  652,  654,   71,  651,   71,   71,
-      657,   71,   71,   71,  659,   71,   71,  663,  665,   71,
-       71,  658,   71,  660,  667,   71,  661,  666,  664,  668,
-      662,  670,  669,   71,  671,   71,  672,   71,   71,   71,
-       71,   71,   71,   71,  676,  675,   71,   71,  684,   71,
-
-      681,  677,  673,   71,  674,  682,   71,  807,  678,  680,
-      683,  679,  685,   71,  686,  687,   71,  688,   71,  689,
-       71,   71,   71,   71,  690,   71,  691,  692,   71,   71,
-       71,   71,  695,   71,   71,  696,  694,  700,  699,   71,
-      693,   71,   71,   71,   71,  701,   71,  703,   71,  705,
-       71,  706,  698,   71,  697,   71,  708,  702,   71,  712,
-       71,  709,  707,   71,  704,  710,   71,   71,  711,   71,
-      718,  714,  715,   71,   71,   71,   71,  716,  713,  721,
-       71,   71,  719,  720,  717,   71,  723,   71,  724,   71,
-      726,   71,  725,   71,   71,   71,  732,   71,  728,  730,
-
-       71,  722,   71,   71,   71,   71,  729,  727,  738,  733,
-       71,   71,   71,  736,   71,  731,  739,  737,   71,  735,
-       71,  734,  864,  740,  741,  742,   71,   71,   71,  743,
-      745,  747,  746,  744,   71,  749,   71,   71,   71,  748,
-       71,   71,   71,  750,  752,   71,  758,  751,   71,  753,
-       71,  754,   71,   71,   71,  756,  757,   71,  755,  761,
-       71,  763,  760,   71,   71,   71,  767,  759,  765,   71,
-      764,   71,   71,  770,  769,   71,  768,  762,  771,   71,
-       71,  772,   71,  766,  774,   71,   71,  776,   71,   71,
-       71,   71,  782,   71,  775,   71,  773,  783,   71,   71,
-
-       71,   71,   71,   71,  777,   71,  778,  779,  784,  780,
-      785,  781,   71,   71,  791,  786,   71,  789,  790,  787,
-       71,  788,   71,   71,   71,  793,  792,  796,   71,   71,
-       71,   71,   71,   71,  804,  794,   71,   71,   71,   71,
-      805,  795,  797,   71,  798,  142,  803,  799,  800,  801,
-      802,   71,  808,   71,   71,  810,  806,   71,  809,   71,
-       71,  813,  811,   71,  812,  814,  815,   71,  816,   71,
-       71,   71,  817,   71,   71,  818,  819,   71,  151,  820,
-      825,   71,  822,  824,   71,  821,  823,   71,  826,   71,
-       71,   71,  832,   71,   71,  827,  828,   71,  833,  835,
-
-       71,   71,  838,  836,  829,  830,  834,   71,   71,   71,
-       71,  831,   71,  840,   71,  844,   71,   71,   71,   71,
-      837,   71,  841,   71,  845,  846,   71,  839,   71,   71,
-       71,   71,  843,   71,  859,  847,   71,  842,   71,  858,
-      861,  856,   71,  849,  848,   71,  857,  860,   71,  862,
-      850,   71,  863,  867,  851,   71,  865,  852,   71,   71,
-      868,   71,   71,  876,  853,  854,   71,  855,   71,  866,
-       71,  869,  870,   71,  871,  882,  880,  872,   71,  878,
-      877,  151,  873,  881,   71,   71,  883,  879,  874,  875,
-       71,  885,   71,  884,   71,   71,   71,  886,  887,  888,
-
-       71,   71,  889,   71,   71,   71,   71,  892,  890,   71,
-      896,   71,   71,  895,   71,   71,  899,   71,   71,   71,
-      891,  903,  905,   71,  893,  894,  897,   71,  898,  901,
-      900,   71,  906,  934,   71,  909,  904,  907,   71,  908,
-      902,   71,  910,   71,   71,  912,  913,   71,   71,  911,
-       71,   71,   71,  914,  916,   71,  917,   71,  915,   71,
-      918,   71,   71,   71,  923,   71,  920,   71,  926,  921,
-       71,   71,   71,   71,   71,   71,  924,  919,  925,   71,
-       71,  928,  922,   71,  929,  930,  932,   71,  931,   71,
-      927,   71,  933,   71,  940,   71,   71,   71,  935,  938,
-
-      936,   71,  937,   71,  939,   71,  943,   71,   71,  947,
-      941,  945,  948,   71,   71,  942,   71,   71,   71,  946,
-       71,  950,   71,   71,  949,  944,   71,   71,   71,   71,
-      961,  956,  958,   71,   71,  951,   71,  952,  953,   71,
-       71,   71,  954,  955,   71,  959,  963,   71,  960,  957,
-      962,   71,  964,  965,  967,   71,  971,  966,  969,   71,
-      968,   71,   71,   71,  970,   71,   71,  978,   71,  980,
-      973,   71,   71,   71,  982,   71,  983,   71,   71,   71,
-       71,  972,   71,  974,  988,  976,  979,  975,  977,   71,
-      986,  981,   71,  984,   71,  990,  985,  991,  987,   71,
-
-       71,   71,  992,   71,  995,   71,  997,   71,   71,   71,
-       71,   71,   71,  989,  994,   71,  999,   71,  993, 1000,
-      151, 1002,   71, 1003, 1001,  996,  998,   71,   71,   71,
-       71,   71, 1006,   71, 1004, 1005,   71, 1018,   71, 1021,
-       71,   71, 1019,   71, 1009,   71,   71, 1007,   71, 1023,
-       71, 1010,   71, 1008, 1011,   71, 1020, 1026, 1012,   71,
-     1013, 1024, 1025,   71, 1014, 1033, 1015,   71, 1022, 1028,
-       71, 1016,   71, 1027, 1029,   71, 1017, 1030,   71, 1036,
-       71,   71, 1031,   71, 1038, 1034, 1037, 1044,   71,   71,
-       71,   71, 1042, 1039, 1032, 1035, 1041, 1040,   71, 1043,
-
-       71, 1045, 1046,   71,   71,   71,   71,   71,   71, 1058,
-     1048, 1047,   71,   71, 1061, 1057,   71,   71, 1049,   71,
-     1050, 1059, 1062,   71, 1060, 1051,  149, 1052,   71,   71,
-     1064, 1063,   71, 1053, 1067,   71, 1068, 1069, 1054, 1055,
-       71,   71,   71,   71, 1070, 1056, 1073, 1065, 1066,   71,
-       71,   71,   71,   71, 1074, 1072,   71, 1079,   71, 1071,
-     1076,   71, 1077,   71,   71,   71,   71, 1080,   71, 1075,
-     1082,   71, 1078,   71,   71, 1091,   71,   71,   71, 1089,
-     1081,   71, 1084, 1086, 1083, 1087, 1085, 1088,   71,   71,
-       71, 1090,   71, 1092,   71,   71,   71,   71,   71,   71,
-
-       71, 1099, 1093, 1100, 1096, 1101, 1102,   71, 1103, 1094,
-     1098, 1095, 1097, 1104,   71, 1106, 1107,   71,   71,   71,
-     1111, 1108,   71,   71,   71, 1109,   71, 1105, 1110,   71,
-       71, 1117, 1112,   71, 1119,   71,   71,   71,   71,   71,
-       71, 1121, 1115, 1113, 1114, 1116,   71,   71,  147, 1123,
-     1120,   71, 1122, 1118,   71,   71, 1125,   71,   71, 1126,
-     1124,   71, 1128, 1127, 1131,   71, 1129, 1130,   71, 1134,
-     1135,   71,   71,   71, 1133,   71,   71,   71, 1139, 1138,
-       71, 1132, 1136,   71,   71,   71,   71, 1145, 1143, 1146,
-     1137,   71,   71,   71,   71,   71, 1147, 1148, 1140, 1144,
-
-       71, 1150, 1141,   71, 1142, 1149,   71,   71, 1153, 1155,
-       71, 1154, 1151,   71,   71,   71,   71,   71,   71,   71,
-     1159, 1160, 1156, 1152, 1157,   71,   71,   71,   71, 1165,
-     1161, 1166,   71, 1168, 1158,   71,   71,   71, 1163, 1169,
-       71,   71,   71, 1162, 1173,   71, 1164, 1167,   71,   71,
-       71,   71,   71, 1172,   71, 1170, 1171,   71, 1175, 1179,
-       71,   71,   71, 1174,   71,   71,   71, 1183, 1180, 1176,
-      146, 1178, 1181, 1182, 1184, 1187, 1177, 1185,   71, 1188,
-     1192,   71,   71,   71, 1186,   71,   71, 1189, 1190,   71,
-       71,   71,   71,   71, 1191, 1194,   71, 1193,   71,   71,
-
-     1197, 1200,   71,   71,   71,   71, 1195,   71,   71, 1210,
-       71, 1196, 1206, 1198, 1203, 1199, 1204, 1201,   71,   71,
-       71, 1207, 1202, 1208, 1211, 1205, 1209, 1212,   71,   71,
-       71,   71, 1214, 1215,   71,   71, 1213,   71,   71, 1216,
-     1219,   71,   71, 1218, 1224,   71, 1221,   71,   71, 1217,
-       71,   71, 1225, 1222,   71, 1226, 1220, 1223,   71, 1228,
-     1230,   71, 1229,   71,   71,   71,   71,   71, 1227,   71,
-       71,   71,   71,   71, 1236,   71, 1231, 1234, 1232, 1241,
-       71, 1235, 1237, 1233,   71,   71,   71,   71, 1238, 1247,
-     1240, 1246, 1239,   71, 1248, 1242, 1245,   71,   71,   71,
-
-       71, 1252,   71, 1250, 1243, 1244, 1253,   71,   71,   71,
-     1257, 1251,   71, 1249,   71,   71, 1255,   71, 1266, 1254,
-     1268, 1256,   71, 1265,   71, 1264, 1269, 1258,   71, 1267,
-     1259, 1260, 1270,   71,   71, 1261,   71,   71,   71, 1271,
-       71, 1262, 1272,   71, 1273, 1263,   71, 1275,   71,   71,
-       71, 1276,   71, 1277, 1274,   71, 1278, 1282, 1279, 1280,
-       71, 1285, 1286,   71,   71,   71, 1324,   71,   71, 1281,
-     1287,   71, 1289, 1284, 1283, 1288,   71, 1290,   71, 1291,
-       71, 1292, 1298, 1293,   71, 1294, 1295, 1296,   71,   71,
-       71, 1297, 1302,   71, 1300,   71,   71, 1303,   71, 1301,
-
-     1305,   71,   71, 1299,   71,   71, 1311,   71, 1312,   71,
-     1306, 1307,   71,   71,   71, 1304,   71, 1313,   71, 1310,
-     1308, 1315,   71, 1309,   71,   71,   71, 1314, 1316,   71,
-     1320, 1317, 1321,   71, 1323,   71, 1318,   71,   71,   71,
-     1325, 1322,   71, 1326, 1329,   71, 1331,   71, 1327, 1319,
-       71, 1328,   71, 1332,   71, 1333,   71, 1336,   71, 1330,
-       71,   71,   71,   71, 1338,   71,   71,   71, 1340, 1342,
-       71,   71,  144, 1344, 1341, 1334,   71, 1335,   71,   71,
-     1337, 1346, 1339, 1347, 1343,   71, 1345, 1348,   71,   71,
-     1349,   71, 1351, 1350, 1352,   71,   71,   71,   71, 1357,
-
-     1358, 1360, 1354,   71, 1355,   71,   71,   71, 1359,   71,
-       71, 1356,   71, 1353, 1364,   71,   71,   71, 1361,   71,
-     1368, 1369,   71, 1363, 1371,   71,   71,   71, 1370, 1362,
-       71,   71,   71,   71,   71,   71, 1365, 1366,   71, 1372,
-       71, 1378, 1367,   71, 1375, 1373,   71, 1376,   71, 1383,
-       71, 1374, 1377, 1382,   71, 1379,   71,  142,   71, 1385,
-     1387, 1381,   71, 1380,   71, 1388,   71,   71,   71, 1384,
-       71, 1390, 1391,   71,   71, 1386, 1389,   71,   71, 1396,
-     1398, 1392, 1397, 1393, 1400, 1394,   71, 1399, 1395,   71,
-       71,   71,   71, 1401, 1403,   71, 1405, 1402,   71, 1404,
-
-       71,   71,   71, 1408,   71,   71, 1410,   71,   71, 1415,
-     1407,   71,   71, 1409,   71, 1416,   71, 1406, 1412,   71,
-     1419,   71, 1411, 1413,   71, 1414,   71,   71, 1420,   71,
-     1417,   71,   71, 1418,   71, 1422, 1426, 1428, 1421, 1423,
-       71, 1427, 1424,   71,   71, 1431,   71,   71, 1425,   71,
-       71, 1436, 1430, 1433, 1437, 1435,   71,   71, 1429,   71,
-       71, 1432,   71, 1438,   71, 1439, 1440,   71,   71,   71,
-     1434,   71, 1441, 1444, 1443,   71,   71, 1447, 1442,   71,
-       71,   71, 1446,   71,   71, 1453, 1445, 1455, 1449, 1450,
-     1454,   71, 1456,   71,   71, 1451,   71, 1458,   71, 1448,
-
-       71,   71, 1452,   71,   71,   71,   71, 1466, 1462,   71,
-     1461,   71, 1469,   71, 1457,   71, 1467, 1459,   71, 1460,
-       71, 1472,   71, 1463, 1465, 1464, 1471,   71,   71,   71,
-       71,   71,   71,   71, 1470, 1468,   71,   71, 1480,   71,
-       71, 1473, 1481, 1483,   71, 1477,   71, 1474, 1475, 1476,
-     1486, 1479, 1482, 1478, 1484,   71,   71,   71,   71,   71,
-       71, 1485, 1490,   71,   71,   71, 1491, 1488, 1493,   71,
-     1487,   71, 1489, 1497,   71, 1499, 1498,   71,   71, 1492,
-     1494,   71,   71,   71, 1495, 1496,   71, 1502,   71,   71,
-     1503, 1501, 1500, 1504,   71, 1508, 1509,   71,   71,   71,
-
-       71,   71,   71, 1505, 1514, 1512, 1506,   71, 1513,   71,
-       71, 1516,   71,   71, 1507,   71, 1510,   71, 1517,   71,
-     1511,   71, 1515, 1518,   71, 1519,   71,   71, 1523, 1520,
-     1521,   71, 1524,   71,   71,   71, 1525, 1522,   71, 1528,
-       71, 1530,   71,   71,   71, 1534,   71, 1526,   71, 1529,
-       71,   71, 1527,   71,   71, 1537, 1531, 1532, 1539,   71,
-     1535,   71,   71, 1542,   71, 1540, 1536,   71, 1533, 1538,
-       71, 1541,   71,   71, 1545, 1543,   71, 1547, 1544, 1548,
-       71,   71,   71, 1546,   71,   71, 1555,   71,   71,   71,
-     1550, 1549, 1556,   71,   71,   71, 1553, 1564, 1559, 1560,
-
-     1551, 1552,   71,   71, 1562,   71,   71,   71, 1557, 1554,
-     1563, 1566,   71, 1558,   71, 1561,   71,   71, 1568,   71,
-     1570, 1567,   71,   71, 1573,   71, 1565, 1571,   71, 1574,
-       71, 1569,   71,   71,   71, 1579, 1578,   71,   71, 1575,
-     1572,   71,   71,   71, 1595, 1585, 1586, 1577, 1576, 1580,
-       71,   71,   71, 1582,   71, 1587, 1583,   71, 1581, 1593,
-     1597,   71, 1590, 1589, 1592,   71,   71, 1591, 1584,   71,
-       71, 1588,   71, 1596, 1594, 1598,   71,   71,   71,   71,
-       71, 1604, 1605, 1603,   71,   71, 1607,   71,   71, 1599,
-     1606,   71,   71, 1610,   71, 1600, 1609, 1601,   71, 1602,
-
-       71,   71,   71, 1611,   71,   71,   71, 1608, 1619,   71,
-       71,   71,   71,   71,   71,   71, 1617,   71, 1612, 1615,
-     1616, 1613, 1614, 1618, 1624,   71, 1622,   71,   71, 1620,
-       71, 1621, 1626,   71, 1623, 1625,   71, 1627,   71,   71,
-       71, 1630,   71, 1628, 1629,   71,   71, 1632,   71, 1634,
-       71, 1631,   71, 1641, 1633, 1635, 1637,   71, 1636,   71,
-     1638, 1642,   71, 1643,   71, 1639, 1647,   71,   71, 1644,
-     1645, 1646, 1648, 1640,   71,   71,   71,   71,   71,   71,
-     1650, 1651,   71,   71, 1659, 1660,   71,   71, 1654,   71,
-       71,   71, 1656, 1649, 1653, 1657, 1652,   71, 1658,   71,
-
-       71, 1655,   71,   71, 1662,   71,   71, 1661,   71, 1669,
-       71,   71,   71, 1664, 1666, 1663, 1665, 1672,   71, 1671,
-       71, 1673, 1670, 1668,   71,   71, 1680, 1675, 1667, 1677,
-     1676, 1681,   71,   71,   71, 1674,   71,   71, 1686,   71,
-     1688,   71, 1685, 1679,   71, 1678, 1689, 1682,   71, 1683,
-     1691,   71,   71, 1690,   71,   71,   71, 1687, 1684, 1695,
-     1692,   71, 1699,   71,   71,   71, 1697,   71,   71, 1694,
-       71, 1693, 1698,   71, 1696, 1700,   71,   71,   71,   71,
-       71, 1703, 1711, 1701,   71, 1704, 1709,   71,   71, 1702,
-     1705, 1706, 1712, 1707, 1708,   71,   71, 1713,   71,   71,
-
-       71, 1718,   71,   71,   71, 1722,   71,   71, 1710,   71,
-       71, 3043,   71, 1717, 1715, 1714, 1724,   71, 1716, 1720,
-       71,   71, 1721,   71, 1719, 1725, 1726,   71, 1727, 1723,
-     1731,   71, 1730, 1729,   71,   71, 1728,   71, 1735,   71,
-       71,   71,   71,   71,   71,   71, 1742, 1733, 1737,   71,
-       71,   71,   71, 1732, 1736, 1738, 1734, 1739, 1836,   71,
-       71, 1740, 1743, 1747, 1741, 1745,   71, 1744, 1746,   71,
-     1748,   71,   71, 1751,   71, 1750,   71, 1749, 1754,   71,
-     1752,   71,   71,   71,   71, 1755, 1753,   71,   71,   71,
-       71,   71,   71, 1760,   71,   71, 1764,   71,   71, 1761,
-
-     3043,   71, 1770, 1756, 1762, 1758, 1757, 1759,   71, 1763,
-     1765,   71, 1773, 1768,   71, 1767, 1772,   71,   71, 1774,
-     1769,   71,   71, 1766,   71,   71, 1771, 1778,   71, 1781,
-     1782,   71,   71, 1775, 1783,   71,   71, 1776, 1779,   71,
-     1780,   71, 1777, 1785,   71,   71, 1786, 1789,   71,   71,
-     1791,   71, 1784, 1790, 1792, 1793,   71, 1787, 1795, 1794,
-     1788,   71,   71,   71,   71, 1800, 1797, 1798,   71,   71,
-     1799,   71,   71,   71,   71, 1807,   71, 1809,   71,   71,
-       71,   71, 1810,   71, 1801, 1802, 1803, 1796,   71,   71,
-     1812, 1804, 1811, 1805, 1806, 1814, 1808, 1815,   71, 1817,
-
-     1813,   71,   71,   71, 1819,   71,   71, 1816,   71, 1821,
-       71,   71, 1824, 1825,   71,   71, 1827,   71,   71,   71,
-       71,   71, 1818, 1833,   71, 1832, 1822,   71, 1820, 1829,
-     1830,   71, 1823,   71,   71, 1826,   71,   71, 1839,   71,
-     1831,   71, 1837, 1828,   71,   71, 1843,   71, 1834, 1835,
-     1842,   71,   71, 1846, 1845, 1847, 1849, 1841,   71,   71,
-       71,   71, 1838,   71, 1844, 1840, 1848,   71,   71, 1850,
-       71,   71,   71, 1854,   71, 1857,   71, 1858, 1851,   71,
-     1853,   71, 1852,   71,   71, 1861,   71,   71,   71, 1855,
-     1866,   71, 1865,   71, 1860,   71, 1859,   71, 1856,   71,
-
-       71, 1862,   71, 1870, 1863,   71, 1871, 1867, 1864, 1874,
-     1868, 1872, 1869, 1873,   71,   71, 1877,   71, 1878,   71,
-       71,   71,   71,   71, 1884,   71, 1875, 1881,   71,   71,
-       71, 1876, 1889, 1879, 1886, 1887,   71,   71, 1888, 1880,
-     1885, 1882,   71, 1883,   71,   71, 1894,   71, 1895,   71,
-     1898, 1890, 1896, 1899,   71, 1891,   71, 1897,   71,   71,
-     1892,   71,   71, 1903,   71, 1893, 1901,   71,   71,   71,
-       71, 1905, 1908,   71, 1902, 1910, 1904,   71,   71,   71,
-     1900,   71, 1906,   71,   71,   71,   71, 1915, 1920, 1911,
-     1914, 1912,   71, 1907,   71, 1909,   71, 1916, 1917,   71,
-
-     1918,   71, 1913,   71, 1927,   71, 1919,   71,   71, 1921,
-     1922,   71,   71, 1923,   71, 1926, 1925, 1924,   71, 1928,
-       71,   71,   71, 1932,   71,   71, 1929, 1931,   71,   71,
-     1933,   71, 1930, 1934, 1935, 1936,   71,   71,   71,   71,
-     1938,   71, 1943, 1941,   71, 1937, 1942,   71,   71,   71,
-       71,   71, 1948,   71,   71, 1939, 1945, 1940,   71,   71,
-       71, 1952, 1944, 1949, 1947,   71, 1954, 1946, 1951,   71,
-       71, 1950, 1958,   71, 1953, 1956,   71,   71,   71, 1955,
-     1959,   71, 1957,   71, 1964,   71,   71, 1966,   71,   71,
-       71, 1967, 1960,   71, 1961, 1970, 1962, 1963, 1968,   71,
-
-       71, 1969, 1965,   71, 1972,   71,   71,   71,   71,   71,
-       71,   71,   71,   71, 1973, 3043,   71,   71, 1980, 1975,
-     1971, 1976, 1977, 1984,   71,   71, 1979, 1974, 1983,   71,
-       71, 1981, 1987, 1982, 1978, 1985,   71,   71,   71,   71,
-     1991, 1988, 1990,   71,   71, 1986,   71,   71, 1993,   71,
-     1989, 1994,   71,   71,   71, 1995, 1999, 1992, 1997,   71,
-       71, 2001, 2003,   71, 1998, 1996,   71,   71,   71, 2006,
-       71,   71, 2000, 2005, 2002, 2007, 2008,   71,   71, 2011,
-       71,   71,   71,   71,   71,   71, 2012,   71, 2017,   71,
-     2014,   71, 2004, 2013, 2021, 2009,   71, 2018, 2010, 2019,
-
-       71, 2016, 2015,   71,   71,   71, 2023,   71, 2022, 2026,
-       71, 2020,   71, 2024,   71, 2028,   71, 2029,   71, 2027,
-       71, 2025,   71,   71,   71, 2031, 2035, 2030,   71,   71,
-     2032, 2033, 2037,   71, 2034,   71,   71, 2038,   71,   71,
-     2040, 2041, 2039,   71, 2036,   71,   71,   71, 2042, 2044,
-     2043, 2047,   71,   71,   71, 2045, 2046, 2048,   71,   71,
-       71,   71,   71,   71, 2049,   71,   71, 2056, 2051, 2050,
-     2057, 2053, 2054, 2052,   71, 2058,   71,   71,   71,   71,
-     2059, 2055, 2061, 2067,   71,   71, 2062,   71,   71, 2069,
-       71,   71, 2063, 2060, 2066, 2071, 2064, 2068,   71,   71,
-
-       71, 3043, 2074, 2072, 2065, 2076, 2070, 2075,   71, 2077,
-       71,   71, 2073, 2078,   71,   71, 2081,   71,   71, 2082,
-     2080,   71, 2079, 2086,   71,   71, 2087,   71,   71, 2090,
-     2085,   71,   71, 2083,   71,   71, 2091,   71, 2092, 2088,
-     2093,   71,   71, 2095, 2084,   71, 2089, 2094,   71,   71,
-     2100,   71, 2096,   71, 2097, 2098,   71, 2099,   71,   71,
-       71,   71,   71, 2103,   71,   71, 2107, 2109,   71, 2110,
-       71, 2102,   71,   71,   71,   71, 2101, 2104, 2105, 2112,
-     2106,   71,   71,   71,   71, 2111, 2108, 2114, 2116, 2119,
-       71,   71, 2115,   71, 2117,   71,   71,   71, 2113, 2120,
-
-     2118,   71,   71, 2121,   71,   71,   71, 2130,   71,   71,
-       71,   71, 2122, 2131, 2127,   71, 2125, 2285, 2123, 2133,
-     2124, 2129, 2126,   71, 2132, 2128,   71, 2135, 2134, 2136,
-       71, 2137,   71,   71,   71, 2140,   71,   71, 2138, 2143,
-       71,   71, 2144,   71,   71, 2141, 2139,   71, 2142, 2145,
-     2149,   71, 2150,   71,   71, 2152,   71,   71,   71, 2148,
-       71, 2146,   71, 2147, 2154,   71,   71, 2157,   71, 2158,
-       71, 2156, 2159, 2151,   71, 2153,   71, 2155,   71, 2162,
-       71, 2164,   71, 2160,   71, 2163, 2166,   71,   71,   71,
-     2161,   71, 2169,   71, 2168,   71, 2170, 2165, 2172,   71,
-
-       71,   71, 2167, 2176,   71,   71,   71,   71, 2174,   71,
-     2173, 2171,   71, 2180, 2181,   71,   71, 2185,   71, 2175,
-       71, 2177, 2179,   71,   71, 2182,   71, 2183, 2178,   71,
-     2187, 2184,   71,   71, 2192,   71,   71, 2194, 2188,   71,
-     2186,   71, 2195,   71, 2189, 2193,   71, 2190, 2199,   71,
-       71, 2200,   71, 2198,   71,   71,   71, 2196, 2191, 2197,
-     2204, 2206,   71, 2202,   71, 2209,   71, 2207,   71, 2211,
-       71,   71,   71, 2203, 2201,   71,   71, 2212,   71, 2208,
-     2205, 2213,   71, 2215,   71, 2216,   71, 2210,   71,   71,
-       71,   71, 2221, 2214, 2222, 2217, 2223, 2218, 2219, 2220,
-
-       71,   71,   71,   71, 2225, 2224,   71, 2227, 2228,   71,
-     2229, 2231, 2226, 2232,   71,   71,   71,   71, 2230, 2235,
-       71,   71,   71,   71,   71,   71, 2237, 2242,   71,   71,
-       71, 2233, 2234, 2243, 2238,   71, 2236, 2246,   71, 2239,
-     2240, 2241,   71, 2247, 2248,   71,   71, 2245,   71, 2249,
-     2244, 2251, 2252, 2250, 2253,   71,   71,   71,   71,   71,
-     2255,   71,   71,   71,   71, 2259, 2260,   71, 3043,   71,
-     2254,   71,   71, 2256, 2262, 2263, 2257,   71, 2265,   71,
-     2264, 2261, 2258,   71,   71,   71,   71,   71, 2266,   71,
-     2269, 2270,   71, 2267, 2272,   71,   71,   71,   71,   71,
-
-     2271,   71, 2276, 2279,   71, 2268, 2278,   71,   71,   71,
-     2280, 2275,   71,   71, 2284, 2273, 2274, 2283,   71, 2277,
-       71,   71,   71, 2286, 2282, 2281, 2292, 2287,   71, 2288,
-       71,   71, 2291, 2289, 2293,   71, 2295,   71,   71,   71,
-       71, 2297,   71,   71, 2290,   71,   71, 2294, 2296,   71,
-       71, 2301,   71,   71,   71, 2303, 2298, 2299, 2304, 2305,
-       71, 2300, 2306,   71, 2307,   71, 2308,   71, 2309,   71,
-       71,   71, 2311, 2314,   71, 2302, 2310,   71, 2316,   71,
-       71, 2319,   71, 2313,   71,   71, 2315,   71, 2312,   71,
-     2322, 2323,   71,   71,   71, 2318,   71, 2317, 2324,   71,
-
-       71, 2327, 2328,   71, 2320, 2321,   71,   71, 2326,   71,
-       71,   71, 2325,   71, 2332,   71, 2334, 2329, 2374, 2331,
-     2330, 2335,   71, 2336,   71, 2337,   71, 2338,   71,   71,
-     2333, 2340,   71,   71, 2342,   71, 2343, 2341,   71,   71,
-       71, 2339,   71, 2348,   71,   71, 2350,   71, 2351,   71,
-     2344, 2345,   71,   71,   71,   71,   71,   71, 2347,   71,
-     2346, 2354, 2357, 2352, 2349, 2353,   71, 2355, 2360,   71,
-       71,   71,   71,   71,   71,   71, 2356,   71, 2367, 2358,
-     2361,   71,   71,   71,   71,   71, 2359, 2364,   71, 2366,
-     2368,   71, 2363, 2378,   71, 3043, 2362, 2365, 2369, 2370,
-
-     2371,   71,   71,   71,   71, 2375, 2376, 2372, 2377, 2379,
-       71, 2373,   71, 2380,   71, 2381,   71, 2382,   71,   71,
-     2383,   71,   71, 2385,   71,   71,   71,   71,   71, 2384,
-     2392,   71,   71,   71, 2390,   71, 2396, 2397,   71, 2386,
-     2387,   71,   71, 2388, 2389,   71, 2391, 2393,   71, 2394,
-     2395, 2399, 2400,   71, 2401, 2398, 2402,   71,   71, 2403,
-       71,   71,   71,   71,   71, 2405, 2404,   71, 2411,   71,
-     2412,   71, 2413,   71,   71, 2406,   71,   71,   71, 2407,
-     2408,   71, 2410, 2409, 2418,   71, 2417, 2422,   71, 2415,
-     2420, 2414,   71,   71, 2421, 2416,   71, 2419, 2423, 2424,
-
-       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-     2426, 2430, 2425,   71,   71, 2428, 2434, 2435,   71, 2438,
-       71, 2427,   71,   71, 2429, 2431, 2432, 2437, 2433, 2436,
-       71,   71, 2442,   71, 2439, 2441, 2443, 2440,   71,   71,
-     2446,   71,   71,   71,   71, 2450,   71,   71, 2449, 2452,
-       71,   71, 2448,   71, 2447,   71, 2453,   71, 2444, 2445,
-     2457,   71, 2454,   71, 2458,   71, 2451, 2460,   71, 2456,
-       71, 2455,   71,   71,   71,   71, 2465,   71, 2467,   71,
-       71,   71, 2463, 2461, 2464, 2462, 2468, 2459,   71, 2466,
-       71,   71,   71, 2469, 2470, 2471,   71,   71,   71, 2472,
-
-       71,   71,   71,   71, 3043, 2474, 2475, 2477, 2478, 2480,
-       71, 2473, 2476, 2481,   71, 2479,   71,   71,   71, 2484,
-     2486, 3043, 2483, 2482,   71,   71,   71,   71, 2488, 2487,
-       71, 2491,   71, 2492,   71, 2490, 2485,   71, 2494,   71,
-     2489,   71, 2496,   71, 2495,   71,   71, 2497,   71,   71,
-     2493, 2498, 2500,   71, 2499,   71,   71, 2501,   71,   71,
-     2502,   71, 2507, 2516, 2506, 2503, 2508,   71,   71, 2505,
-       71,   71,   71,   71, 2504, 2509, 2511,   71,   71, 2510,
-     2512,   71,   71, 2514,   71, 2513, 2515,   71,   71, 2520,
-       71,   71,   71, 2518,   71, 2517, 2519, 2525,   71, 2521,
-
-       71,   71,   71, 2529,   71,   71,   71,   71, 2534,   71,
-     2522, 2527, 2523, 2524,   71,   71, 2528, 2536, 2533, 2526,
-     2537, 2531, 2538,   71, 2530,   71,   71, 2532,   71, 2539,
-       71,   71,   71, 2540,   71,   71, 2541,   71,   71, 2544,
-     2535, 2542,   71, 2547, 2548,   71,   71, 2543, 2549,   71,
-     2551, 2545,   71, 2546, 2550,   71,   71, 2552, 2553,   71,
-       71,   71, 2557,   71,   71, 2555,   71, 2558,   71,   71,
-     2560, 2561,   71, 2556, 2562,   71, 2554,   71,   71, 2564,
-     2563,   71, 2565, 2559, 2567,   71,   71, 2568, 2569,   71,
-     2571,   71,   71,   71,   71, 2575, 2570,   71, 2566, 2576,
-
-       71,   71,   71,   71, 2578, 2572, 2577,   71, 2574, 2579,
-       71, 2573,   71, 2584,   71, 2587,   71,   71, 2583,   71,
-     2580, 2586,   71, 2581,   71,   71,   71, 2582, 2590, 2588,
-     2589,   71,   71,   71, 2592,   71,   71, 3043, 2595, 2585,
-       71, 2599,   71,   71,   71,   71,   71, 2601,   71, 2593,
-     2594, 2591,   71, 2596, 2598, 2602, 2597, 2600, 2606, 2603,
-     2605, 2609,   71, 2607,   71, 2604,   71, 2608,   71, 2610,
-       71, 2611,   71, 2612,   71, 2613,   71,   71,   71,   71,
-       71, 2615, 2614,   71, 2621,   71,   71,   71, 2618, 2622,
-     2624,   71,   71, 2626,   71,   71,   71, 2616, 3043, 2625,
-
-     2619, 2627,   71, 2620, 2617, 2623, 2628,   71,   71,   71,
-       71, 2629,   71, 2632, 2633,   71, 2634, 2630, 2631, 2635,
-       71, 2637,   71,   71,   71,   71, 2638,   71,   71, 2641,
-       71, 2640, 2642,   71,   71, 2636, 2639, 2643,   71, 2644,
-       71,   71,   71, 2647,   71,   71,   71, 3043, 2646, 2652,
-       71, 2650, 2648, 2645,   71,   71,   71, 2653, 2694, 2655,
-       71, 2656,   71, 2657, 2651,   71, 2649, 2654,   71, 2658,
-     2659,   71, 2660, 2662,   71, 2661, 2663,   71, 2664,   71,
-       71,   71,   71,   71, 2669,   71,   71, 2668, 2666, 2665,
-       71, 2670,   71, 2672,   71,   71, 2677, 2671,   71,   71,
-
-     2667, 2673,   71, 2675, 2679,   71, 2674,   71,   71,   71,
-       71, 2680,   71, 2676, 2681, 2682,   71, 2683,   71, 2687,
-       71,   71,   71,   71, 2678,   71,   71, 2684,   71, 2690,
-       71,   71, 2686, 2685, 2688, 2689, 2695, 2691,   71, 2692,
-     2697,   71, 2699,   71,   71, 2693, 2700,   71, 2702,   71,
-       71,   71,   71,   71, 2707,   71, 2696, 2698, 2706,   71,
-       71,   71,   71, 2711,   71, 2701, 2703, 2704, 2705, 2713,
-       71,   71,   71,   71,   71, 2715,   71, 2716, 2712, 2708,
-     2710,   71,   71, 2709, 2718,   71, 2719,   71, 2721,   71,
-       71, 2714, 2726, 2723, 2720, 2717, 2725,   71,   71, 2724,
-
-       71,   71, 2730,   71,   71,   71, 2732, 2731, 2722,   71,
-       71, 2735, 2728, 2736,   71,   71, 2727,   71, 2737, 2738,
-       71, 2729, 2733,   71,   71,   71,   71, 2743, 2740, 2734,
-       71, 2741,   71,   71, 2746,   71,   71,   71, 2739,   71,
-     2751,   71,   71, 2742, 2747,   71,   71, 2744, 2745, 2754,
-       71, 3043, 2750,   71, 2748, 2753, 2755,   71, 2756, 2757,
-       71, 2752, 2749, 2759,   71, 2758, 2760,   71, 2761,   71,
-       71, 2763,   71,   71,   71, 2762,   71,   71,   71, 2768,
-     2769,   71,   71,   71,   71, 2773,   71,   71, 2774,   71,
-       71, 3043, 2764, 2772,   71, 2777, 2765, 2770, 2766, 2767,
-
-     2778,   71, 2771, 2779,   71,   71,   71, 2775, 2776, 2782,
-     2780,   71,   71,   71,   71,   71, 2785,   71,   71, 2786,
-     2781, 2784,   71, 2783,   71,   71,   71, 2789,   71,   71,
-       71, 2791, 2787,   71, 2792,   71, 2790,   71, 2788,   71,
-       71,   71,   71,   71, 2808,   71, 2801, 2793, 2802, 2794,
-     2795, 2796, 2804, 2797,   71, 2803, 2798, 2799,   71, 2805,
-       71, 2800, 2806, 2809,   71,   71, 2811,   71,   71, 2810,
-     2812,   71, 2819, 2807, 2813, 2814,   71,   71, 2815, 2816,
-       71,   71, 2817, 2818,   71,   71, 2820,   71,   71,   71,
-       71, 2826,   71,   71, 2821, 2825,   71, 2829, 2822, 2843,
-
-     2823,   71,   71, 2828,   71,   71,   71,   71, 2824,   71,
-     2830,   71, 2834,   71, 2827, 2833, 2864, 2831, 2835,   71,
-     2836,   71, 2832,   71, 2837,   71, 2841,   71, 2838,   71,
-       71, 2842,   71,   71, 2839, 2847,   71, 2840, 2844, 2850,
-       71, 2848, 2845, 2851,   71,   71, 2853,   71, 2899,   71,
-     2846, 2852, 2849, 2854,   71,   71, 2856,   71, 2857,   71,
-     2855, 2858,   71, 2859,   71, 2860,   71, 2861,   71, 2862,
-       71, 2863,   71, 2865,   71,   71,   71,   71,   71,   71,
-     2870,   71,   71,   71, 2866,   71, 2874,   71, 2867,   71,
-     2876,   71,   71, 2871,   71, 2872, 2883, 2868, 2869, 2873,
-
-       71, 2877,   71, 2878, 2875,   71, 2880,   71,   71,   71,
-     2882,   71, 2881,   71, 2885,   71,   71,   71, 2879,   71,
-       71, 2889, 2884, 2892,   71,   71, 2890, 2894,   71,   71,
-     2886, 2887, 2888,   71, 2891, 2895,   71, 2893, 2896,   71,
-       71,   71, 2898,   71,   71,   71,   71, 2907, 2897, 2900,
-     2904,   71,   71, 2905, 2901, 2903,   71,   71, 2906,   71,
-       71,   71,   71,   71, 2902, 2908,   71,   71,   71,   71,
-       71, 2914,   71, 2911, 2918, 2909, 2913, 2910, 2915, 2921,
-       71, 2922, 2919,   71, 2916, 2912,   71, 2917, 2923,   71,
-     2920,   71, 2924, 2925,   71, 2926,   71,   71,   71,   71,
-
-     2929,   71, 2927, 2930, 2931,   71, 2928, 2934,   71,   71,
-       71,   71,   71,   71,   71, 2937, 2939,   71, 2942,   71,
-     2933, 2936, 2935,   71,   71,   71, 2932, 2940, 2945,   71,
-     2949, 2938,   71, 2941,   71, 2946,   71, 2950, 2943,   71,
-     2947,   71, 2944,   71, 2948,   71,   71, 2955,   71, 2956,
-       71, 2954,   71, 2951, 2952,   71,   71,   71,   71,   71,
-       71, 2960,   71,   71, 2953, 2962,   71, 2969,   71,   71,
-     2959,   71, 2964, 2957, 2967, 2958, 2965,   71, 2961,   71,
-       71, 2963, 2968, 2973,   71, 2966,   71,   71, 2975,   71,
-     2976, 2970, 2974,   71,   71,   71,   71, 2971, 2977, 2972,
-
-     2978, 2979, 2981, 2982,   71, 2980,   71,   71,   71, 2984,
-       71, 2983,   71,   71,   71,   71, 2985, 2990,   71,   71,
-     2987,   71, 2993,   71, 2994,   71, 2986,   71,   71,   71,
-       71,   71, 2992, 2988, 2989, 2997, 2995, 2991,   71, 2996,
-       71, 3001,   71, 3002, 3000,   71,   71, 2998, 2999,   71,
-     3005,   71, 3007,   71, 3008, 3003,   71,   71,   71, 3012,
-       71, 3009,   71,   71, 3010, 3006,   71, 3013, 3014, 3015,
-       71, 3004,   71,   71,   71,   71,   71, 3011,   71, 3016,
-     3017, 3019, 3018, 3021,   71,   71,   71,   71,   71, 3027,
-     3023, 3024,   71, 3020, 3022, 3028,   71, 3025,   71,   71,
-
-     3031, 3032,   71,   71, 3034,   71, 3026, 3035,   71,   71,
-     3033, 3029,   71,   71,   71,   71, 3036, 3030, 3037, 3038,
-     3041,   71, 3042,   71, 3043, 3043, 3043, 3043, 3043, 3043,
-     3043, 3039, 3043, 3043, 3040,   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, 3043,   74,   74,   74,   74,  141,  141, 3043,
-     3043, 3043,  141,  141,  143,  143, 3043, 3043,  143, 3043,
-      143,  145, 3043, 3043, 3043, 3043, 3043,  145,  148,  148,
-
-     3043, 3043, 3043,  148,  148,  150, 3043, 3043, 3043, 3043,
-     3043,  150,  152,  152, 3043,  152,  152,  152,  152,   75,
-       75, 3043,   75,   75,   75,   75,   13, 3043, 3043, 3043,
-     3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043,
-     3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043,
-     3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043,
-     3043, 3043, 3043, 3043, 3043, 3043, 3043
+       71,   80,   85,   88,   69,   86,   89,   71,   90,   91,
+       81,   71,   94,   71,   96,  141,   71,  152,  113,   71,
+       99,  119,   97,  100,   71,  110,   95,   71,  106,  111,
+      101,  155,  102,   98,   71,  144,  107,  164,  144,  114,
+      149,  149,  108,  115,   71,  112,  109,   71,  134,  116,
+       71,  120,  117,   72,  203,  121,   71,   73,  135,  118,
+       71,  125,  136,  137,  126,  122,  123,   71,  124,   71,
+
+      130,  127,  131,   71,  138,  128,  129,   71,  139,  159,
+      156,  132,  140,  146,  951,  146,  146,  133,  146,   75,
+       71,   75,   75,  151,   75,  151,  151,   70,  151,   70,
+       70,  154,   70,   71,   75,   71,   75,   75,   70,   75,
+       71,   71,  172,   71,  157,   75,   76,   71,   71,  166,
+      161,  162,  165,  160,   71,   71,   71,  174,   71,   71,
+      167,  177,   71,   71,  163,   71,  168,   71,  169,  152,
+      178,  179,  176,  170,  171,  173,  175,   71,  180,   71,
+      181,  183,   71,  182,  185,   71,  191,  184,  187,   71,
+       71,  188,   71,   71,   71,  194,  186,  196,   71,   71,
+
+       71,  197,  202,   71,  189,  190,   71,  201,  193,   71,
+      205,  192,   71,  204,   71,  195,   71,  198,  199,  206,
+      209,   71,   71,  200,   71,  214,   71,  211,   71,  207,
+      208,  212,  210,   71,   71,   71,   71,   71,  216,  226,
+      222,  213,   71,  219,   71,   71,  215,  217,   71,  225,
+       71,  223,  152,  218,  221,  224,  227,   71,  228,  220,
+       71,   71,   71,  235,  233,   71,   71,   71,  231,  234,
+       71,  241,  237,   71,  240,  229,  236,  242,  230,  232,
+       71,  238,   71,  142,  142,  243,  144,  244,  251,  144,
+      149,  149,   71,  239,  245,  146,  283,  146,  146,  151,
+
+      146,  151,  151,   75,  151,   75,   75,  152,   75,   71,
+      246,  248,   71,   71,  247,  154,   71,   71,   71,   71,
+       71,  252,   71,   71,   71,  258,  249,  254,  253,  261,
+      250,  255,   71,  260,  257,   71,  262,  256,   71,   71,
+      265,  266,  259,  264,  267,   71,   71,   71,   71,  268,
+       71,   71,  275,   71,  270,   71,   71,  263,  277,  271,
+      278,   71,   71,  281,  272,  280,  269,  276,  279,   71,
+      273,  274,   71,   71,   71,  286,   71,  284,  285,   71,
+       71,   71,  293,   71,  291,  292,  288,  294,  287,  289,
+       71,   71,  282,   71,  290,  297,  300,   71,  301,  295,
+
+      302,  296,   71,  298,  304,  306,   71,  299,  307,   71,
+       71,   71,  303,  305,   71,  310,   71,   71,  312,  313,
+       71,   71,  311,  308,   71,   71,   71,  314,   71,  315,
+      309,   71,  316,   71,   71,   71,   71,  318,   71,   71,
+      322,   71,  320,   71,   71,  327,   71,  323,  317,  321,
+      328,   71,   71,   71,  324,  319,  331,  325,  329,  333,
+       71,  336,  330,  326,   71,   71,   71,   71,  332,   71,
+       71,  338,  339,   71,   71,  342,  343,  345,  334,  335,
+      341,   71,   71,   71,  337,   71,   71,   71,  340,   71,
+      348,  349,   71,  344,   71,  350,  352,  346,   71,  356,
+
+      347,   71,   71,   71,  152,  353,   71,   71,   71,   71,
+      355,   71,  363,  361,  359,  364,  357,  358,   71,  351,
+       71,   71,  354,   71,  367,  365,  368,  360,  366,   71,
+       71,   71,  362,   71,   71,   71,   71,   71,  374,  375,
+       71,  377,  372,  369,   71,   71,   71,  371,  376,  370,
+      378,   71,  380,   71,   71,  379,   71,  381,   71,   71,
+      373,  382,  384,   71,   71,  387,   71,  385,  389,  383,
+      391,   71,  388,  386,   71,   71,   71,  390,   71,   71,
+      394,   71,  392,  396,   71,  397,  395,   71,   71,   71,
+       71,   71,  402,   71,   71,   71,  403,   71,   71,  393,
+
+      150,  405,   71,  401,  398,  399,   71,  407,   71,  400,
+       71,  409,  404,  406,  411,  412,  408,   71,   71,   71,
+      413,   71,  414,   71,   71,   71,  427,  421,  410,   71,
+      423,   71,   71,  438,  424,  148,  425,  422,  415,   71,
+       71,  416,  430,  431,   71,  428,  417,  418,  419,  420,
+      432,  429,  426,   71,   71,  433,   71,  434,   71,  440,
+       71,  435,   71,  442,  436,   71,   71,  439,  437,   71,
+      441,   71,   71,   71,  444,   71,  449,   71,  450,   71,
+      451,  443,   71,  445,   71,   71,  467,   71,  455,  452,
+      448,  446,  454,  447,   71,   71,   71,  147,  461,  453,
+
+      456,  457,   71,   71,   71,  462,  459,  458,  460,  468,
+      469,   71,   71,  466,   71,   71,   71,  470,  463,  471,
+       71,  464,   71,  465,  145,  472,   71,   71,   71,  473,
+       71,  486,  152,   71,  481,  483,   71,  474,   71,  475,
+      485,  476,  484,  482,  488,  497,  498,  487,  496,   71,
+       71,  499,   71,  501,  477,  500,   71,  478,   71,  479,
+       71,  480,   71,   71,  489,  490,  506,  504,   71,  502,
+       71,  503,   71,   71,  491,   71,  492,  493,  494,  505,
+      510,  495,   71,   71,  509,   71,   71,   71,  508,  507,
+      511,  518,  516,   71,  519,  513,  512,   71,  515,   71,
+
+      517,   71,  514,   71,  523,   71,   71,   71,  527,  528,
+       71,   71,  526,  521,   71,   71,   71,  522,   71,  520,
+      533,   71,  525,   71,   71,   71,  538,  535,  536,   71,
+      524,  530,  531,   71,  529,  532,   71,   71,  534,   71,
+      547,   71,   71,  537,   71,   71,   71,  549,  539,  541,
+      544,  540,   71,  543,  548,  542,  550,   71,  552,   71,
+      143,  545,   71,  546,   71,  553,  551,   71,  554,   71,
+       71,  555,   71,  558,  556,  560,   71,   71,   71,  557,
+       71,  563,  561,  559,  564,   71,   71,   71,   71,  565,
+       71,  562,   71,  568,   71,  570,   71,  569,   71,   71,
+
+       71,  566,   71,  571,   71,  576,   71,   71,  567,  580,
+      572,  577,  575,   71,  579,   71,  573,  574,  578,   71,
+      582,   71,   71,  584,   71,   71,   71,   71,   71,   71,
+       71,  594,   71,  586,   71,  587,  581,   71,  596,  597,
+      589,   71,   71,  583,   71,  585,  593,  588,  590,  592,
+      591,  595,   71,   71,   71,  598,  601,   71,  604,   71,
+      599,  607,   71,  600,   71,  606,   71,   71,  602,   71,
+       71,   71,  603,   71,  610,  613,   71,   71,   71,  605,
+      609,  614,  616,   71,   71,  608,   71,   71,   71,   71,
+       71,   71,  611,  615,  612,  630,   71,   71,   71,  617,
+
+      619,   71,  633,  618,   71,  620,  628,  631,  667,  645,
+      621,  629,  622,  632,   71,   71,   71,   71,  623,   71,
+      624,  634,  637,  625,  626,  635,  640,   71,  639,  636,
+      627,  638,   71,   71,   71,   71,  643,  641,   71,  646,
+       71,  648,   71,  642,   71,   71,   71,   71,   71,   71,
+       71,   71,   71,  654,  650,  677,   71,  644,  655,  649,
+      647,  651,  658,   71,  652,  657,   71,  152,  661,  653,
+      656,  660,  659,   71,   71,   71,   71,   71,  662,   71,
+       71,   71,   71,  668,  670,  672,   71,   71,  663,  671,
+      665,  673,  666,  669,  664,  675,   71,   71,   71,  674,
+
+       71,   71,   71,   71,   71,   71,  681,  680,  676,   71,
+      152,  686,  678,  682,   71,  679,  687,   71,  689,   71,
+      683,  685,  688,  684,  690,   71,  691,  692,   71,  693,
+       71,  694,   71,   71,   71,  695,  696,   71,   71,  697,
+       71,   71,   71,   71,  700,   71,   71,  701,  699,  705,
+      704,   71,   71,   71,   71,   71,  706,  698,  708,   71,
+       71,  711,   71,   71,  703,  712,  702,   71,   71,  707,
+      709,   71,   71,   71,  718,  714,  713,   71,   71,  710,
+      715,  717,  720,  721,  716,  722,  719,   71,  724,   71,
+       71,   71,   71,  726,   71,  727,   71,  729,  725,  730,
+
+       71,   71,  723,   71,   71,  731,   71,   71,  734,   71,
+       71,  736,  738,   71,   71,   71,   71,  728,   71,  732,
+      735,  744,  733,  739,   71,  742,  741,   71,  150,  737,
+      743,   71,   71,   71,  740,  746,  749,  745,  747,  748,
+       71,   71,  751,   71,  753,  750,   71,  755,   71,   71,
+       71,  754,  756,   71,   71,  758,   71,  752,   71,  757,
+      759,   71,   71,   71,  764,   71,  148,  762,  763,  760,
+       71,  761,  766,   71,   71,  769,   71,   71,  767,   71,
+      771,  765,  773,  770,   71,  768,   71,  776,   71,  775,
+       71,  774,  777,   71,   71,  772,   71,  778,   71,   71,
+
+      780,  782,   71,   71,   71,   71,   71,  788,   71,  781,
+      789,  779,  783,   71,   71,   71,   71,  790,   71,   71,
+      784,  785,  797,  786,   71,  787,   71,   71,   71,  791,
+      792,  795,   71,   71,  793,   71,   71,  794,   71,  796,
+      798,   71,  802,   71,  799,   71,  800,   71,  810,   71,
+       71,   71,  801,  803,  805,  811,   71,  804,   71,   71,
+       71,  806,  807,  809,  808,  815,   71,  813,   71,  812,
+       71,   71,  814,   71,   71,  816,  820,  819,   71,  822,
+      821,  818,   71,  823,   71,  817,   71,   71,   71,  152,
+       71,  825,   71,   71,  830,  826,  831,  828,   71,   71,
+
+      824,  827,  829,  832,   71,   71,  833,  834,   71,  838,
+       71,   71,  839,  841,   71,   71,   71,  844,   71,  835,
+      840,   71,  836,   71,  842,  846,  837,   71,   71,   71,
+      850,   71,   71,   71,   71,  843,   71,   71,  845,  847,
+      851,  852,   71,   71,   71,   71,   71,  849,  882,  853,
+       71,  864,  865,  848,   71,  868,   71,  855,  854,   71,
+      862,  863,   71,   71,  856,   71,  866,  867,  857,   71,
+      869,  858,   71,  870,  871,   71,  874,   71,  859,  860,
+      147,  861,   71,   71,   71,  873,  872,   71,  875,  876,
+       71,  877,   71,  887,  878,  884,  883,   71,  885,  879,
+
+      888,   71,   71,  890,  889,  880,  881,  891,   71,  886,
+       71,  892,   71,  893,   71,  894,   71,   71,  896,  895,
+       71,   71,   71,   71,   71,  899,   71,  903,   71,  897,
+       71,  902,   71,   71,  906,   71,   71,   71,  910,  898,
+      908,  965,  900,  901,   71,  904,  905,   71,  912,   71,
+      913,  916,  911,  907,   71,  914,   71,   71,  909,  915,
+      917,   71,   71,  919,  920,   71,   71,  918,   71,   71,
+       71,  921,  923,   71,  924,   71,  922,   71,  925,   71,
+       71,   71,  930,   71,  927,   71,  933,  928,   71,   71,
+       71,   71,   71,   71,  931,  926,  932,   71,   71,  935,
+
+      929,   71,  936,  937,  939,   71,  938,   71,  934,   71,
+      940,   71,   71,  947,  945,   71,  942,   71,  943,  946,
+       71,  941,   71,   71,  944,   71,  952,  954,  955,   71,
+      948,  950,   71,   71,  953,   71,  949,   71,  957,   71,
+       71,   71,   71,   71,  968,   71,   71,  145,   71,   71,
+       71,  963,   71,  956,   71,   71,  958,  959,  969,  960,
+      970,  962,  961,  966,   71,  967,  964,   71,  972,  974,
+      973,  971,  975,  976,   71,   71,   71,   71,   71,   71,
+       71,   71,  985,   71,   71,  978,  980,  987,   71,   71,
+      989,   71,   71,   71,   71,  977,   71,  979,  986,  981,
+
+      983,  990,  982,  984,   71,   71,  993,   71,  991,  988,
+      992,   71,   71,  996,  994,  998,  995,   71,  997,   71,
+     1002,   71,  999, 1000,   71, 1001,   71, 1004,   71,   71,
+       71, 1007,  152,   71,   71, 1006,   71, 1010, 1009,   71,
+       71,   71,   71,   71, 1003,   71, 1013, 1005, 1008,   71,
+       71,   71, 1025,   71,   71,   71,   71, 1026,   71, 1016,
+     1012, 1011, 1014, 1028,   71, 1084, 1015,  143,   71, 1017,
+     1027, 1018,   71, 1031,   71, 1019,   71, 1020, 1030, 1029,
+       71, 1021, 1032, 1022,   71, 1033, 1035,   71, 1023,   71,
+     1034, 1036,   71, 1024, 1041,   71,   71,   71, 1037, 1038,
+
+       71,   71, 1040,   71, 1042, 1044,   71, 1049, 1043, 1052,
+     1050, 1039, 1048,   71,   71, 1045,   71, 1047, 1046, 1051,
+       71, 1053,   71,   71,   71,   71,   71,   71,   71,   71,
+     1068, 1065,   71,   71,   71,   71, 1064, 1069,   71,   71,
+     1067,   71, 1055, 1056, 1054,   71, 1057, 1066, 1071, 1070,
+       71, 1058, 1080, 1059, 1072, 1075,   71, 1073,   71, 1060,
+     1077,   71, 1076, 1081, 1061, 1062,   71,   71, 1074,   71,
+     1078, 1063,   71,   71,   71,   71, 1087, 1082,   71,   71,
+     1079,   71,   71, 1085,   71,   71, 1090, 1088,   71,   71,
+       71, 1086, 1083,   71,   71,   71, 1097,   71, 1089, 1092,
+
+     1099, 1094, 1095, 1096, 1091,   71,   71,   71, 1093,   71,
+       71,   71, 1098, 1100, 1112,   71,   71,   71,   71, 1101,
+       71, 1107, 1108, 1109, 1104,   71,   71, 1102, 1103, 1105,
+     1106,   71, 1111,   71, 1110, 1115,   71,   71,   71, 1113,
+     1116,   71,   71, 1117,   71,   71, 1118, 1119,   71, 1114,
+     1120,   71,   71, 1125, 1127,   71, 1122, 1121, 1123,   71,
+       71,   71,   71, 1124,   71, 1131, 1129, 1128,   71, 1130,
+       71, 1126,   71, 1133,   71, 1134,   71,   71,   71, 1136,
+       71, 1137, 1143,   71, 1139, 1132,   71, 1142, 1135, 1138,
+       71,   71, 1141,   71,   71,   71, 1140, 1146,   71, 1144,
+
+       71, 1147,   71,   71, 1153,   71, 1151,   71, 1154, 1145,
+       71,   71, 1155, 1148,   71,   71, 1156, 1149, 1152, 1158,
+     1157,   71, 1150,   71, 1161,   71,   71, 1163,   71,   71,
+       71, 1162,   71,   71,   71,   71,   71, 1167, 1164, 1159,
+       71, 1165,   71, 1160,   71, 1168, 1169, 1173,   71, 1174,
+       71, 1166, 1171,   71, 1170,   71,   71, 1177,   71,   71,
+       71, 1176, 1181, 1172,   71, 1175,   71, 1178,   71,   71,
+       71,   71, 1180, 1179, 1187,   71,   71, 1183,   71,   71,
+       71,   71, 1182,   71, 1191, 1193,   71,   71, 1184, 1192,
+     1186, 1189, 1188, 1190, 1195, 1185, 1196,   71,   71,   71,
+
+       71,   71,   71, 1194, 1197,   71, 1199, 1198,   71,   71,
+       71, 1200, 1201, 1202,   71,   71,   71, 1208,   71,   71,
+       71, 1205,   71,   71, 1203,   71,   71, 1218,   71, 1204,
+     1206, 1212,   71, 1209,   71, 1207,   71, 1211, 1210, 1214,
+       71, 1219, 1222, 1213, 1220,   71,   71, 1221, 1215, 1223,
+     1216, 1224,   71, 1217,   71,   71,   71,   71,   71,   71,
+     1227,   71, 1229, 1226, 1232,   71, 1233,   71,   71, 1230,
+     1225,   71, 1234,   71,   71, 1228, 1236, 1237, 1231,   71,
+       71,   71,   71, 1238,   71,   71,   71,   71, 1235,   71,
+       71,   71, 1244,   71, 1239, 1240, 1242, 1243, 1245, 1249,
+
+     1241,   71,   71,   71,   71,   71, 1246, 1255, 1248,   71,
+     1247, 1251, 1253,   71,   71,   71, 1250, 1257,   71, 1256,
+     1259, 1261, 1252,   71, 1254,   71, 1262,   71,   71,   71,
+     1260,   71, 1266,   71, 1258,   71, 1276, 3053, 1274, 1264,
+       71, 1265, 1263,   71, 1275, 1277, 1273, 1279, 1267,   71,
+       71, 1268, 1269,   71,   71,   71, 1270,   71, 1278, 1280,
+     1281,   71, 1271,   71, 1282,   71, 1272,   71, 1284,   71,
+       71,   71, 1285,   71, 1286,   71,   71, 3053, 1283, 1289,
+     1291, 1287, 1294, 1288, 1295,   71,   71, 1292,   71, 1297,
+       71, 1290,   71,   71, 1293, 1298,   71, 1296,   71, 1303,
+
+     1299,   71, 1300,   71, 1301,   71, 1302, 1304, 1305, 1307,
+       71, 1308, 1306,   71, 1311, 1313,   71,   71,   71, 1312,
+       71, 1309, 1310, 1314,   71,   71, 1316,   71, 1320,   71,
+     1315,   71, 1321,   71,   71,   71,   71, 1322,   71,   71,
+     1324, 1319,   71, 1317, 1318,   71,   71, 1323, 1326,   71,
+     1325, 1329, 1330,   71, 1332,   71, 1327,   71,   71, 1333,
+     1331, 1334,   71,   71,   71, 1338,   71, 1328, 1335, 1339,
+     1340,   71,   71, 1337,   71, 1341,   71, 1342,   71, 1345,
+       71, 1336,   71,   71,   71,   71, 1347,   71,   71,   71,
+     1349, 1351,   71,   71, 3053, 1353, 1350, 1343,   71, 1344,
+
+       71,   71, 1346, 1355, 1348, 1356, 1352,   71, 1354, 1357,
+       71,   71, 1358,   71, 1360, 1359, 1361,   71,   71,   71,
+       71, 1366, 1367, 1369, 1363,   71, 1364,   71,   71,   71,
+     1368,   71,   71, 1365,   71, 1362, 1373,   71,   71,   71,
+     1370,   71, 1377, 1378,   71, 1372, 1380,   71,   71,   71,
+     1379, 1371,   71,   71,   71,   71,   71,   71, 1374, 1375,
+       71, 1381,   71, 1387, 1376,   71, 1384, 1382,   71, 1385,
+       71, 1392,   71, 1383, 1386, 1391,   71, 1388,   71, 3053,
+       71, 1394, 1396, 1390,   71, 1389,   71, 1397,   71,   71,
+       71, 1393,   71, 1399, 1400,   71,   71, 1395, 1398,   71,
+
+       71, 1405, 1407, 1401, 1406, 1402, 1409, 1403,   71, 1408,
+     1404,   71,   71,   71,   71, 1410, 1412,   71, 1414, 1411,
+       71, 1413,   71,   71,   71, 1417,   71,   71, 1419,   71,
+       71, 1424, 1416,   71,   71, 1418,   71, 1425,   71, 1415,
+     1421,   71, 1428,   71, 1420, 1422,   71, 1423,   71,   71,
+     1429,   71, 1426,   71,   71, 1427,   71, 1431, 1435, 1437,
+     1430, 1432,   71, 1436, 1433,   71,   71, 1440,   71,   71,
+     1434, 1442,   71,   71, 1439, 1443,   71,   71, 1446, 1447,
+     1438, 1445, 3053, 1441,   71,   71,   71, 1448,   71, 1449,
+     1450,   71,   71,   71, 1444, 1453, 1451,   71,   71,   71,
+
+       71, 1457, 1452,   71,   71,   71, 1456,   71,   71, 1463,
+     1460, 1454, 1459, 1455, 1464,   71,   71,   71, 1468, 1465,
+       71, 1461,   71, 1458, 1466,   71,   71, 1462,   71,   71,
+       71,   71, 1476, 1472,   71, 1471, 1467,   71,   71, 1469,
+     1479, 1470, 1477,   71,   71,   71,   71, 1482, 1473, 1475,
+     1474, 1481,   71,   71,   71,   71,   71,   71,   71, 1490,
+     1478,   71, 1480, 1483,   71,   71,   71, 1491, 1493,   71,
+     1487, 1484,   71, 1485, 1486, 1498, 1489, 1492, 1488, 1494,
+       71,   71,   71,   71,   71, 1497, 1495, 1496,   71, 1503,
+     1500,   71,   71,   71, 1501, 1499, 1507,   71,   71, 1509,
+
+       71,   71,   71, 1508,   71,   71, 1504, 1502,   71, 1506,
+       71,   71, 1505, 1512, 1511, 1510,   71,   71,   71, 1518,
+     1513, 1514, 1515,   71, 1517,   71, 1519,   71, 1516, 1520,
+       71,   71, 1523,   71, 1524, 1522, 1526,   71,   71, 1521,
+       71, 1527,   71, 1525, 1528,   71,   71,   71,   71, 1529,
+     1531,   71, 1534,   71,   71,   71,   71, 1533, 1530,   71,
+       71, 1538,   71, 1540,   71,   71, 1532,   71, 1535,   71,
+     1544,   71,   71, 1539, 1537, 1536,   71, 1547, 1541, 1542,
+       71, 1545, 1549,   71, 1550,   71,   71, 1552,   71, 1546,
+     1543, 1548,   71,   71,   71,   71,   71, 1555, 1558,   71,
+
+     1557,   71,   71, 1554,   71, 1551,   71,   71, 1565,   71,
+     1553,   71,   71, 1556, 1559, 1560, 1566,   71, 1563,   71,
+       71, 1561, 1562,   71, 1570, 1572, 1569,   71,   71, 1567,
+     1574, 1564, 1568, 1573,   71, 1576,   71, 1578,   71,   71,
+     1571,   71,   71,   71,   71,   71,   71, 1575, 1577, 1580,
+     1581,   71, 1583,   71, 1584,   71,   71,   71, 1579, 1588,
+     1585,   71, 1586,   71, 1589,   71, 1582, 1595, 1592, 1590,
+     1587, 1593,   71,   71,   71,   71,   71, 1596, 1597, 1600,
+       71, 1591, 1603, 1594,   71, 1599,   71, 1602,   71,   71,
+     1605, 1604,   71, 1606, 1598, 1607,   71,   71,   71,   71,
+
+       71,   71, 1608,   71, 1614, 1601, 1613, 1615, 1617, 1609,
+       71,   71,   71,   71,   71,   71, 1610, 1616, 1611,   71,
+     1612, 1620,   71,   71, 1619,   71,   71,   71, 1621,   71,
+       71,   71, 1629, 1622, 1618,   71,   71,   71,   71,   71,
+       71, 1625, 1627, 1626, 1628, 1623, 1624, 1634,   71,   71,
+       71, 1632,   71,   71, 1637, 1630, 1631, 1636,   71,   71,
+     1633,   71,   71,   71, 1640, 1638,   71,   71,   71, 1635,
+     1642, 1645, 1639, 1644, 1646,   71,   71, 1641, 1643, 1651,
+     1652,   71,   71, 1647, 1653,   71,   71,   71,   71,   71,
+     1648, 1656,   71, 1650, 1654, 1649, 1657,   71,   71,   71,
+
+     1658,   71,   71, 1660, 1655,   71, 1661,   71, 1659,   71,
+       71, 1662, 1670,   71, 1664, 1663, 1666, 1669, 1668, 1667,
+       71, 1665,   71,   71,   71,   71,   71,   71,   71,   71,
+     1671,   71, 1679, 1672,   71,   71, 1683,   71, 1674, 1676,
+     1673, 1675, 1682, 1681,   71, 1680, 1678,   71,   71,   71,
+     1684, 1677, 1690, 1685,   71,   71, 1686, 1691,   71,   71,
+       71,   71, 1698,   71,   71, 1687, 1695, 1689, 1692, 1688,
+     1693, 1696,   71, 1699,   71,   71, 1701,   71, 1697,   71,
+     1700, 1694,   71,   71, 1703, 1705, 1704, 1706, 1709, 1702,
+       71,   71,   71, 1707,   71,   71,   71,   71,   71, 1708,
+
+     1710, 1719,   71,   71,   71, 1713,   71, 1714,   71,   71,
+       71,   71, 1721, 1722, 1711, 1712, 1715, 1716,   71,   71,
+     1717,   71, 1718, 1720, 1723,   71, 1728,   71, 1725, 1724,
+       71, 3053,   71,   71, 1732,   71,   71,   71, 1727,   71,
+     1726, 1734,   71,   71, 1735,   71, 1730, 1736, 1737, 1729,
+       71, 1731,   71,   71, 1738,   71, 1733, 1741,   71,   71,
+     1745,   71,   71,   71,   71,   71,   71, 1740,   71, 1752,
+     1747, 1743, 1742, 1739, 1744,   71, 1746, 1748, 1749,   71,
+       71,   71, 3053, 1750, 1756,   71,   71, 1755, 1751, 1757,
+       71, 1753, 1758,   71,   71, 1759, 1761,   71, 1754, 1762,
+
+       71,   71,   71, 1760,   71,   71, 1764,   71, 1765, 1763,
+       71,   71,   71,   71,   71,   71, 1770,   71,   71,   71,
+     1774, 1766, 1771, 1782,   71,   71, 1772, 1775, 1768, 1767,
+     1769,   71, 1773,   71,   71, 1783, 1778,   71, 1780, 1777,
+     1776,   71,   71, 1779,   71,   71, 1784, 1788,   71, 1781,
+       71,   71,   71, 1791, 1792,   71, 1785,   71, 1786, 1793,
+       71, 1795,   71,   71, 1787, 1789, 1802, 1790, 1794,   71,
+     1796, 1797, 1799,   71, 1801,   71, 1803,   71, 1798, 1800,
+       71, 1805,   71,   71,   71,   71,   71,   71, 1807, 1808,
+       71,   71, 1809, 1810,   71, 1804, 1811, 1812, 1813,   71,
+
+       71, 1817,   71, 1814, 1819,   71, 1815,   71, 1806, 1820,
+       71,   71,   71, 1822, 1816,   71, 1821,   71, 1825,   71,
+     1818, 1829,   71, 1823,   71, 1827, 1826,   71,   71, 1831,
+     1824,   71,   71,   71, 1834, 1835,   71,   71, 1837,   71,
+     1828,   71,   71,   71, 1842,   71,   71, 1843,   71,   71,
+       71, 1832, 1839, 1830, 1833, 1840,   71, 1836,   71,   71,
+     1845,   71, 1849, 1841,   71, 1846, 1838,   71, 1847,   71,
+     1844, 1853,   71,   71, 1852, 1856,   71,   71, 1857,   71,
+     1855,   71, 1848, 1851,   71, 1858,   71,   71,   71,   71,
+     1850,   71, 1854, 1859, 1864, 1862, 1860,   71,   71, 1861,
+
+     1868, 1863,   71, 1867,   71,   71,   71,   71,   71,   71,
+       71, 1871,   71, 1876,   71, 1865,   71, 1875,   71, 1870,
+     1883,   71,   71,   71, 1866, 1869, 1880, 1872, 1873, 1877,
+       71, 1874, 1882, 1878,   71, 1879, 1881,   71, 1884, 1887,
+       71,   71,   71, 1894,   71,   71,   71,   71, 1885,   71,
+     1891,   71,   71, 1886,   71, 1899, 1889, 1896, 1897,   71,
+       71, 1898, 1888, 1890,   71,   71, 1892, 1893,   71, 1895,
+     1904,   71, 1906, 1900, 1905,   71, 1901, 1907,   71, 1908,
+     1909, 1902,   71,   71,   71,   71,   71, 1913, 1903, 1911,
+       71,   71,   71,   71,   71, 1912, 1915,   71, 1918,   71,
+
+     1920,   71, 1914, 1916,   71,   71,   71,   71, 1910, 1921,
+       71,   71, 1924, 1922, 1925,   71, 1926, 1927,   71, 1917,
+     1930, 1919, 1928,   71, 1923,   71,   71,   71,   71,   71,
+     1929, 1931, 1932,   71, 1933,   71, 1936,   71, 1934,   71,
+     1935,   71, 1938,   71,   71,   71, 1942,   71,   71, 1937,
+     1941, 1939,   71, 1943,   71, 1940,   71, 1944,   71, 1945,
+     1946,   71,   71,   71,   71, 1948, 1953, 1951, 1947, 1952,
+       71,   71,   71,   71,   71,   71, 1949,   71,   71, 1958,
+     1955, 1950,   71, 1962,   71,   71, 1961,   71, 1954, 1957,
+     1959, 1956, 1960, 1963,   71,   71,   71, 1964, 1969, 1966,
+
+     1968,   71,   71,   71, 1974,   71,   71,   71, 1965, 1967,
+       71,   71, 1976,   71,   71, 1977, 1978,   71, 1970, 1971,
+     1972, 1973, 1979, 1975,   71,   71,   71, 1982,   71,   71,
+       71, 1980,   71,   71,   71,   71,   71, 1983,   71,   71,
+       71, 1990, 1985,   71, 1986, 1981, 1987, 1994,   71,   71,
+     1984, 1989, 1993,   71, 1991,   71, 1997, 1995, 1992, 1988,
+     1998,   71,   71, 1996, 2001,   71, 2000,   71,   71, 1999,
+       71,   71, 2003,   71,   71, 2004,   71,   71, 2009, 2005,
+       71,   71, 2007, 2002,   71,   71, 2008, 2011,   71, 2006,
+     2013,   71,   71, 2015, 2012,   71, 2010, 2016,   71,   71,
+
+     2021,   71, 2019, 2017, 2018,   71,   71, 2014,   71,   71,
+     2022,   71, 2020,   71, 2023,   71, 2024, 2027,   71,   71,
+     2028, 2031, 3053,   71,   71, 2026,   71,   71, 2025, 2032,
+     2029, 2034,   71, 2030, 2033, 2036,   71,   71, 2037, 2035,
+       71, 2038,   71, 2039,   71,   71, 2040,   71,   71, 2041,
+     2045,   71, 2047,   71,   71,   71, 2043, 2048,   71, 2044,
+       71,   71, 2049, 2042,   71, 2052, 2050, 2051,   71, 2053,
+       71,   71, 2046,   71, 2054, 2057,   71,   71,   71, 2056,
+       71,   71,   71,   71,   71,   71,   71, 3053, 2055, 2058,
+     2066, 2059, 2061, 2060, 2063, 2062, 2064,   71,   71,   71,
+
+       71, 2065, 2067,   71,   71, 2069, 2071, 2068, 2075, 2072,
+       71,   71, 2077,   71,   71, 2079,   71, 3053, 2070, 2073,
+     2076, 2074,   71, 2078,   71,   71, 2081, 2084, 2086, 2080,
+     2082,   71, 2085,   71,   71, 2087,   71, 2083,   71, 2088,
+       71,   71, 2091,   71,   71, 2092, 2089, 2096,   71, 2095,
+       71, 2090,   71, 2097,   71, 2100,   71, 2102,   71, 2093,
+       71,   71, 2098, 2101, 2103,   71,   71, 2105,   71,   71,
+     2094, 2104, 2099,   71,   71,   71,   71,   71, 2106, 2108,
+     2107, 2110,   71,   71,   71,   71,   71,   71, 2113, 2119,
+       71, 2117, 2111, 2109,   71, 2114,   71, 2112, 2120,   71,
+
+     2115,   71,   71,   71, 2122, 2116,   71,   71,   71, 2118,
+       71, 2121, 2126,   71, 2124, 2129,   71,   71, 2130, 2127,
+       71,   71, 2125,   71,   71,   71, 2128, 2123,   71,   71,
+     2140,   71, 2131,   71,   71,   71, 2132, 2141,   71, 2139,
+     2137, 3053, 2135, 2133,   71, 2134, 2136, 2143, 2142,   71,
+     2138, 2144,   71, 2145, 2146,   71, 2147,   71,   71, 2148,
+       71, 2150, 2149, 2153,   71,   71,   71, 2151,   71,   71,
+     2152, 2154,   71, 2155, 2159,   71, 2160,   71,   71, 2162,
+       71,   71, 2164,   71, 2158, 2156,   71,   71,   71, 2157,
+     2167,   71, 2166, 2168,   71,   71,   71, 2161,   71, 2163,
+
+       71, 2165, 2169,   71, 2170, 2173, 2174,   71, 2176,   71,
+     2171,   71,   71,   71,   71, 2180, 2179, 2172, 2178, 2182,
+       71,   71, 2175,   71,   71, 2186,   71,   71,   71, 2177,
+     2181,   71,   71, 2191,   71,   71, 2190,   71, 2184,   71,
+     2183,   71,   71, 2185, 2195,   71, 2189, 2187,   71, 2197,
+       71, 2188, 2193,   71, 2192,   71, 2194,   71, 2202, 2196,
+       71,   71, 2198, 2204,   71,   71,   71, 2205, 2199, 2203,
+       71, 2200,   71,   71,   71, 2209,   71, 2208, 2210,   71,
+       71, 2201, 2206,   71, 2207, 2212,   71,   71, 2214,   71,
+     2219, 2211, 2216, 2221, 2217, 2213,   71,   71,   71,   71,
+
+     2220, 2218, 2215, 2222,   71, 2224,   71,   71,   71, 2223,
+     2225, 2226,   71,   71,   71, 2227, 2228, 2232, 2233,   71,
+       71, 2229, 2230,   71,   71,   71,   71, 2238, 2231, 2234,
+       71, 2237,   71,   71,   71, 2236,   71, 2239,   71, 2235,
+     2241,   71, 2242, 2245,   71, 2240,   71,   71, 2243,   71,
+     2244,   71,   71, 2246,   71, 2247, 2261, 2249,   71, 2248,
+       71, 2252,   71, 2251, 2250, 2253, 2255, 2256,   71,   71,
+     2257,   71, 2254, 2258,   71,   71, 2260, 2262, 2259, 2263,
+       71,   71,   71,   71,   71, 2265,   71,   71,   71, 2269,
+     2270,   71,   71,   71, 2266, 2264,   71, 2272,   71, 3053,
+
+     2267,   71, 2273,   71, 2274, 2271, 2268, 2275,   71,   71,
+       71,   71, 2277, 2278, 2276, 2279, 2280,   71,   71,   71,
+       71,   71,   71, 2281, 2282,   71, 2286,   71, 2289,   71,
+       71,   71, 2288,   71,   71, 2285, 2290,   71, 2283, 2295,
+     2284,   71, 2293, 2296, 2294, 2287,   71, 2291,   71, 2292,
+       71,   71, 2298,   71,   71, 2301, 2299,   71, 2303,   71,
+     2297, 2302, 2305,   71,   71,   71,   71, 2307,   71,   71,
+       71, 2304,   71,   71, 2300, 2306,   71, 2311, 2315,   71,
+     2317, 2313,   71, 2308, 2309, 2310,   71, 2314, 2316,   71,
+       71, 2318,   71,   71,   71,   71,   71,   71, 2326, 2312,
+
+     2321, 2324,   71,   71,   71, 2325,   71,   71, 2319, 2323,
+     2329,   71,   71, 2322,   71, 2320,   71, 2332, 2333,   71,
+       71, 2327, 2328,   71,   71, 2330,   71,   71, 2334, 2336,
+     2331, 2337, 2335,   71,   71, 2338,   71,   71, 2339,   71,
+       71, 2340, 2342,   71, 2344, 3053, 2341, 2345,   71, 2346,
+       71, 2347,   71, 2348,   71, 2349, 2343,   71, 2350,   71,
+     2352,   71, 2351,   71, 2353,   71,   71,   71, 2358,   71,
+       71, 2360,   71, 2354, 2361,   71,   71, 2355,   71,   71,
+       71,   71,   71, 2357,   71,   71, 2356, 2362, 2364, 2359,
+     2363, 2365,   71, 2370,   71,   71,   71, 2367,   71,   71,
+
+     2366,   71, 2368,   71, 2369, 2371,   71, 2377,   71,   71,
+     2378, 2372, 2374,   71,   71, 2373,   71, 2376,   71,   71,
+       71, 2384, 2375, 2379, 2380, 2386,   71,   71, 2388,   71,
+       71, 2381, 2387, 2385, 2389,   71, 2382,   71, 2390, 2383,
+       71, 2391,   71, 2392, 2393,   71,   71,   71,   71, 2395,
+       71,   71,   71,   71,   71, 2402, 2394,   71,   71, 2400,
+       71, 2406, 2407,   71,   71, 2397, 2396,   71,   71,   71,
+     2398, 2399, 2401,   71, 2403, 2404, 2405, 2409, 2410,   71,
+     2412,   71, 2411,   71,   71, 2413, 2408, 2414,   71,   71,
+     2415,   71,   71, 2421,   71, 2422,   71, 2423,   71, 2416,
+
+       71,   71,   71,   71,   71,   71, 2417, 2418, 2419, 2427,
+     2420,   71,   71, 2431,   71, 2425, 2424, 2430, 2432,   71,
+     2426,   71, 2428, 2433,   71, 2429, 2434,   71,   71,   71,
+       71,   71,   71, 2435,   71,   71, 2440, 2436,   71,   71,
+       71, 2438, 2444, 2437, 2445,   71,   71, 2448,   71,   71,
+     2439,   71, 2441, 2442,   71, 2443, 2447,   71, 2449,   71,
+     2454, 2446,   71, 2451, 2450, 2452,   71, 2456,   71,   71,
+     2453, 2455,   71,   71, 2457,   71, 2459,   71, 2458, 2460,
+       71, 2462,   71,   71, 2464,   71, 2467,   71, 2463,   71,
+     2468,   71, 2461, 2465, 2470,   71,   71, 2466,   71,   71,
+
+       71,   71, 2475,   71, 2477,   71,   71,   71, 2473, 2471,
+     2474, 2472, 2478, 2469,   71, 2476,   71,   71,   71, 2479,
+     2480, 2481,   71,   71,   71, 2482,   71,   71,   71,   71,
+     3053, 2484, 2485, 2487, 2488, 2490,   71, 2483, 2486, 2491,
+       71, 2489,   71,   71,   71, 2494, 2496, 3053, 2493, 2492,
+       71,   71,   71,   71, 2498, 2497,   71, 2501,   71, 2502,
+       71, 2500, 2495,   71, 2504,   71, 2499,   71, 2506,   71,
+     2505,   71,   71, 2507,   71,   71, 2503, 2508, 2510,   71,
+     2509,   71,   71, 2511,   71,   71, 2512,   71, 2517, 2526,
+     2516, 2513, 2518,   71,   71, 2515,   71,   71,   71,   71,
+
+     2514, 2519, 2521,   71,   71, 2520, 2522,   71,   71, 2524,
+       71, 2523, 2525,   71,   71, 2530,   71,   71,   71, 2528,
+       71, 2527, 2529, 2535,   71, 2531,   71,   71,   71, 2539,
+       71,   71,   71,   71, 2544,   71, 2532, 2537, 2533, 2534,
+       71,   71, 2538, 2546, 2543, 2536, 2547, 2541, 2548,   71,
+     2540,   71,   71, 2542,   71, 2549,   71,   71,   71, 2550,
+       71,   71, 2551,   71,   71, 2554, 2545, 2552,   71, 2557,
+     2558,   71,   71, 2553, 2559,   71, 2561, 2555,   71, 2556,
+     2560,   71,   71, 2562, 2563,   71,   71,   71, 2567,   71,
+       71, 2565,   71, 2568,   71,   71, 2570, 2571,   71, 2566,
+
+     2572,   71, 2564,   71,   71, 2574, 2573,   71, 2575, 2569,
+     2577,   71,   71, 2578, 2579,   71, 2581,   71,   71,   71,
+       71, 2585, 2580,   71, 2576, 2586,   71,   71,   71,   71,
+     2588, 2582, 2587,   71, 2584, 2589,   71, 2583,   71, 2594,
+       71, 2597,   71,   71, 2593,   71, 2590, 2596,   71, 2591,
+       71,   71,   71, 2592, 2600, 2598, 2599,   71,   71,   71,
+     2602,   71,   71, 3053, 2605, 2595,   71, 2609,   71,   71,
+       71,   71,   71, 2611,   71, 2603, 2604, 2601,   71, 2606,
+     2608, 2612, 2607, 2610, 2616, 2613, 2615, 2619,   71, 2617,
+       71, 2614,   71, 2618,   71, 2620,   71, 2621,   71, 2622,
+
+       71, 2623,   71,   71,   71,   71,   71, 2625, 2624,   71,
+     2631,   71,   71,   71, 2628, 2632, 2634,   71,   71, 2636,
+       71,   71,   71, 2626, 3053, 2635, 2629, 2637,   71, 2630,
+     2627, 2633, 2638,   71,   71,   71,   71, 2639,   71, 2642,
+     2643,   71, 2644, 2640, 2641, 2645,   71, 2647,   71,   71,
+       71,   71, 2648,   71,   71, 2651,   71, 2650, 2652,   71,
+       71, 2646, 2649, 2653,   71, 2654,   71,   71,   71, 2657,
+       71,   71,   71, 3053, 2656, 2662,   71, 2660, 2658, 2655,
+       71,   71,   71, 2663, 2704, 2665,   71, 2666,   71, 2667,
+     2661,   71, 2659, 2664,   71, 2668, 2669,   71, 2670, 2672,
+
+       71, 2671, 2673,   71, 2674,   71,   71,   71,   71,   71,
+     2679,   71,   71, 2678, 2676, 2675,   71, 2680,   71, 2682,
+       71,   71, 2687, 2681,   71,   71, 2677, 2683,   71, 2685,
+     2689,   71, 2684,   71,   71,   71,   71, 2690,   71, 2686,
+     2691, 2692,   71, 2693,   71, 2697,   71,   71,   71,   71,
+     2688,   71,   71, 2694,   71, 2700,   71,   71, 2696, 2695,
+     2698, 2699, 2705, 2701,   71, 2702, 2707,   71, 2709,   71,
+       71, 2703, 2710,   71, 2712,   71,   71,   71,   71,   71,
+     2717,   71, 2706, 2708, 2716,   71,   71,   71,   71, 2721,
+       71, 2711, 2713, 2714, 2715, 2723,   71,   71,   71,   71,
+
+       71, 2725,   71, 2726, 2722, 2718, 2720,   71,   71, 2719,
+     2728,   71, 2729,   71, 2731,   71,   71, 2724, 2736, 2733,
+     2730, 2727, 2735,   71,   71, 2734,   71,   71, 2740,   71,
+       71,   71, 2742, 2741, 2732,   71,   71, 2745, 2738, 2746,
+       71,   71, 2737,   71, 2747, 2748,   71, 2739, 2743,   71,
+       71,   71,   71, 2753, 2750, 2744,   71, 2751,   71,   71,
+     2756,   71,   71,   71, 2749,   71, 2761,   71,   71, 2752,
+     2757,   71,   71, 2754, 2755, 2764,   71, 3053, 2760,   71,
+     2758, 2763, 2765,   71, 2766, 2767,   71, 2762, 2759, 2769,
+       71, 2768, 2770,   71, 2771,   71,   71, 2773,   71,   71,
+
+       71, 2772,   71,   71,   71, 2778, 2779,   71,   71,   71,
+       71, 2783,   71,   71, 2784,   71,   71, 3053, 2774, 2782,
+       71, 2787, 2775, 2780, 2776, 2777, 2788,   71, 2781, 2789,
+       71,   71,   71, 2785, 2786, 2792, 2790,   71,   71,   71,
+       71,   71, 2795,   71,   71, 2796, 2791, 2794,   71, 2793,
+       71,   71,   71, 2799,   71,   71,   71, 2801, 2797,   71,
+     2802,   71, 2800,   71, 2798,   71,   71,   71,   71,   71,
+     2818,   71, 2811, 2803, 2812, 2804, 2805, 2806, 2814, 2807,
+       71, 2813, 2808, 2809,   71, 2815,   71, 2810, 2816, 2819,
+       71,   71, 2821,   71,   71, 2820, 2822,   71, 2829, 2817,
+
+     2823, 2824,   71,   71, 2825, 2826,   71,   71, 2827, 2828,
+       71,   71, 2830,   71,   71,   71,   71, 2836,   71,   71,
+     2831, 2835,   71, 2839, 2832, 2853, 2833,   71,   71, 2838,
+       71,   71,   71,   71, 2834,   71, 2840,   71, 2844,   71,
+     2837, 2843, 2874, 2841, 2845,   71, 2846,   71, 2842,   71,
+     2847,   71, 2851,   71, 2848,   71,   71, 2852,   71,   71,
+     2849, 2857,   71, 2850, 2854, 2860,   71, 2858, 2855, 2861,
+       71,   71, 2863,   71, 2909,   71, 2856, 2862, 2859, 2864,
+       71,   71, 2866,   71, 2867,   71, 2865, 2868,   71, 2869,
+       71, 2870,   71, 2871,   71, 2872,   71, 2873,   71, 2875,
+
+       71,   71,   71,   71,   71,   71, 2880,   71,   71,   71,
+     2876,   71, 2884,   71, 2877,   71, 2886,   71,   71, 2881,
+       71, 2882, 2893, 2878, 2879, 2883,   71, 2887,   71, 2888,
+     2885,   71, 2890,   71,   71,   71, 2892,   71, 2891,   71,
+     2895,   71,   71,   71, 2889,   71,   71, 2899, 2894, 2902,
+       71,   71, 2900, 2904,   71,   71, 2896, 2897, 2898,   71,
+     2901, 2905,   71, 2903, 2906,   71,   71,   71, 2908,   71,
+       71,   71,   71, 2917, 2907, 2910, 2914,   71,   71, 2915,
+     2911, 2913,   71,   71, 2916,   71,   71,   71,   71,   71,
+     2912, 2918,   71,   71,   71,   71,   71, 2924,   71, 2921,
+
+     2928, 2919, 2923, 2920, 2925, 2931,   71, 2932, 2929,   71,
+     2926, 2922,   71, 2927, 2933,   71, 2930,   71, 2934, 2935,
+       71, 2936,   71,   71,   71,   71, 2939,   71, 2937, 2940,
+     2941,   71, 2938, 2944,   71,   71,   71,   71,   71,   71,
+       71, 2947, 2949,   71, 2952,   71, 2943, 2946, 2945,   71,
+       71,   71, 2942, 2950, 2955,   71, 2959, 2948,   71, 2951,
+       71, 2956,   71, 2960, 2953,   71, 2957,   71, 2954,   71,
+     2958,   71,   71, 2965,   71, 2966,   71, 2964,   71, 2961,
+     2962,   71,   71,   71,   71,   71,   71, 2970,   71,   71,
+     2963, 2972,   71, 2979,   71,   71, 2969,   71, 2974, 2967,
+
+     2977, 2968, 2975,   71, 2971,   71,   71, 2973, 2978, 2983,
+       71, 2976,   71,   71, 2985,   71, 2986, 2980, 2984,   71,
+       71,   71,   71, 2981, 2987, 2982, 2988, 2989, 2991, 2992,
+       71, 2990,   71,   71,   71, 2994,   71, 2993,   71,   71,
+       71,   71, 2995, 3000,   71,   71, 2997,   71, 3003,   71,
+     3004,   71, 2996,   71,   71,   71,   71,   71, 3002, 2998,
+     2999, 3007, 3005, 3001,   71, 3006,   71, 3011,   71, 3012,
+     3010,   71,   71, 3008, 3009,   71, 3015,   71, 3017,   71,
+     3018, 3013,   71,   71,   71, 3022,   71, 3019,   71,   71,
+     3020, 3016,   71, 3023, 3024, 3025,   71, 3014,   71,   71,
+
+       71,   71,   71, 3021,   71, 3026, 3027, 3029, 3028, 3031,
+       71,   71,   71,   71,   71, 3037, 3033, 3034,   71, 3030,
+     3032, 3038,   71, 3035,   71,   71, 3041, 3042,   71,   71,
+     3044,   71, 3036, 3045,   71,   71, 3043, 3039,   71,   71,
+       71,   71, 3046, 3040, 3047, 3048, 3051,   71, 3052,   71,
+     3053, 3053, 3053, 3053, 3053, 3053, 3053, 3049, 3053, 3053,
+     3050,   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, 3053,   74,
+
+       74,   74,   74,  142,  142, 3053, 3053, 3053,  142,  142,
+      144,  144, 3053, 3053,  144, 3053,  144,  146, 3053, 3053,
+     3053, 3053, 3053,  146,  149,  149, 3053, 3053, 3053,  149,
+      149,  151, 3053, 3053, 3053, 3053, 3053,  151,  153,  153,
+     3053,  153,  153,  153,  153,   75,   75, 3053,   75,   75,
+       75,   75,   13, 3053, 3053, 3053, 3053, 3053, 3053, 3053,
+     3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053,
+     3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053,
+     3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053,
+     3053, 3053, 3053
+
     } ;
 
-static const flex_int16_t yy_chk[5968] =
+static const flex_int16_t yy_chk[5994] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -2092,654 +2099,658 @@ static const flex_int16_t yy_chk[5968] =
         5,    3,    6,   20,    4,   20,   20,    5,   20,    6,
         7,    7,    7,    7,   20,    7,    8,    8,    8,    8,
        29,    8,    7,    9,    9,    9,   22,   22,    8,   10,
-       10,   10,   15,   25,    9,   29,   15,   25, 3049,   31,
+       10,   10,   15,   25,    9,   29,   15,   25, 3059,   31,
        10,   11,   11,   11,   11,   11,   11,   19,   79,   19,
 
        19,   30,   19,   11,   31,   79,   30,   25,   19,   19,
        47,   47,   11,   12,   12,   12,   12,   12,   12,   21,
-       23,   23,   21,   21,   24,   12,   21,   81,   23,   24,
-       34,   21,   23,   24,   12,   23,   24, 1000,   24,   24,
-       21,   26,   26,   27,   27,   90,   28,   81,   32,   32,
-       28,   34,   27,   28,   33,   33,   26,   32,   36,   33,
-       28,   35,   28,   32,   90,   42,   35,   32,   52,   84,
-       35,   52,   36,   37,   37,   33,   35,   38,   37,   35,
-       42,   69,   38,   63,   63,   38,   35,   84,   37,   37,
-       40,   37,   38,   80,   40,   69,   38,   38,   39,   39,
-
-      126,   39,   41,   41,   40,   80,  126,   41,   40,   40,
-       39,   41,   58,   89,   58,   58,   39,   58,   66,   86,
-       66,   66,   68,   66,   68,   68,   71,   68,   71,   71,
-       66,   71,   72,   86,  127,   89,   72,   71,   74,   77,
-       74,   74,   77,   74,   78,   88,  127,   85,   78,   74,
-       74,   82,   83,   87,   82,   83,   85,   92,   93,   87,
-       91,   94,   99,   88,   88,   87,   91,   87,   83,   95,
-       96,   92,   94,   94,  161,  102,   99,   97,   93,   91,
-       94,   97,  161,  105,   98,  106,  101,   95,   96,   98,
-      100,  150,  101,  100,  102,  103,  100,  112,  104,  106,
-
-      103,  104,  105,  109,  107,  104,  108,  105,  107,  100,
-      100,  101,  110,  108,  111,  113,  109,  112,  114,  110,
-      103,  104,  114,  115,  117,  116,  119,  111,  118,  118,
-      116,  122,  120,  113,  116,  121,  120,  123,  132,  125,
-      124,  115,  129,  124,  117,  120,  119,  128,  128,  129,
-      121,  120,  125,  130,  124,  131,  123,  122,  124,  132,
-      129,  133,  134,  135,  134,  128,  136,  137,  128,  130,
-      138,  136,  140,  134,  131,  135,  139,  133,  148,  137,
-      157,  139,  142,  142,  144,  134,  140,  144,  138,  146,
-      154,  146,  146,  154,  146,  149,  149,  151,  157,  151,
-
-      151,  152,  151,  152,  152,  155,  152,  158,  156,  159,
-      155,  162,  163,  152,  156,  160,  164,  159,  165,  166,
-      168,  164,  158,  156,  159,  167,  160,  163,  166,  169,
-      162,  167,  167,  171,  169,  170,  170,  175,  165,  171,
-      173,  172,  179,  172,  173,  168,  172,  174,  174,  173,
-      176,  147,  177,  178,  173,  176,  175,  177,  180,  183,
-      173,  173,  179,  172,  180,  178,  181,  182,  184,  185,
-      181,  186,  182,  183,  187,  188,  189,  189,  191,  187,
-      188,  185,  189,  184,  185,  190,  192,  180,  197,  186,
-      190,  193,  194,  194,  189,  195,  189,  193,  191,  196,
-
-      198,  195,  192,  199,  200,  196,  198,  195,  197,  199,
-      201,  206,  202,  203,  204,  205,  201,  202,  199,  203,
-      204,  207,  205,  208,  206,  200,  209,  207,  210,  211,
-      213,  212,  209,  214,  215,  213,  216,  211,  217,  220,
-      218,  222,  214,  208,  212,  218,  218,  221,  219,  215,
-      210,  221,  216,  219,  223,  224,  225,  220,  217,  226,
-      223,  227,  225,  222,  229,  228,  227,  228,  230,  233,
-      231,  232,  234,  224,  224,  230,  231,  232,  234,  226,
-      235,  236,  242,  229,  237,  237,  238,  238,  233,  243,
-      239,  240,  235,  245,  243,  236,  239,  240,  241,  244,
-
-      241,  246,  247,  248,  249,  242,  255,  250,  248,  246,
-      251,  244,  245,  250,  239,  252,  251,  241,  253,  254,
-      252,  255,  247,  253,  256,  254,  257,  249,  258,  259,
-      260,  262,  266,  261,  262,  264,  264,  259,  256,  261,
-      269,  263,  258,  263,  257,  265,  267,  267,  265,  270,
-      266,  268,  268,  275,  271,  260,  269,  271,  272,  273,
-      274,  285,  272,  276,  270,  278,  274,  275,  273,  276,
-      277,  278,  277,  279,  280,  280,  281,  279,  282,  283,
-      284,  281,  285,  286,  282,  287,  287,  288,  289,  290,
-      288,  291,  293,  290,  279,  295,  286,  296,  284,  283,
-
-      292,  292,  294,  296,  298,  294,  289,  295,  297,  291,
-      293,  297,  300,  301,  302,  303,  298,  305,  303,  302,
-      303,  300,  294,  299,  304,  306,  307,  304,  307,  307,
-      305,  301,  299,  308,  310,  299,  303,  306,  308,  308,
-      299,  299,  299,  299,  309,  311,  312,  309,  313,  314,
-      314,  310,  317,  315,  310,  312,  319,  313,  315,  318,
-      311,  316,  316,  320,  318,  321,  322,  317,  319,  323,
-      326,  324,  324,  327,  324,  323,  335,  335,  327,  329,
-      328,  322,  320,  324,  329,  321,  328,  330,  331,  332,
-      326,  331,  330,  331,  333,  334,  336,  333,  330,  337,
-
-      337,  338,  336,  332,  334,  339,  338,  343,  339,  341,
-      333,  342,  373,  333,  339,  333,  344,  347,  339,  345,
-      347,  348,  343,  350,  373,  351,  339,  340,  340,  341,
-      340,  344,  342,  345,  351,  348,  347,  354,  350,  352,
-      355,  353,  356,  340,  352,  352,  340,  353,  340,  358,
-      340,  349,  357,  349,  349,  360,  359,  356,  354,  355,
-      361,  357,  359,  349,  362,  349,  349,  349,  358,  363,
-      349,  364,  365,  366,  367,  363,  369,  368,  362,  363,
-      361,  360,  368,  372,  370,  371,  371,  374,  376,  367,
-      370,  369,  365,  366,  364,  377,  375,  379,  379,  378,
-
-      379,  374,  375,  372,  378,  380,  381,  382,  387,  387,
-      383,  377,  384,  376,  384,  385,  386,  388,  389,  385,
-      386,  390,  381,  382,  383,  380,  391,  392,  145,  393,
-      394,  399,  384,  389,  397,  386,  388,  390,  393,  394,
-      395,  392,  396,  397,  391,  395,  396,  398,  400,  393,
-      403,  393,  399,  398,  400,  401,  402,  404,  404,  401,
-      405,  402,  406,  406,  407,  408,  409,  409,  410,  407,
-      403,  411,  412,  405,  410,  411,  413,  414,  408,  415,
-      416,  416,  414,  417,  415,  418,  419,  412,  420,  416,
-      421,  423,  422,  421,  426,  417,  422,  413,  424,  424,
-
-      420,  425,  428,  423,  419,  418,  425,  427,  427,  430,
-      430,  431,  432,  433,  434,  426,  435,  437,  438,  439,
-      432,  440,  433,  442,  428,  450,  443,  440,  435,  442,
-      441,  443,  431,  439,  434,  437,  444,  437,  438,  441,
-      445,  446,  447,  448,  446,  450,  449,  452,  445,  453,
-      444,  445,  449,  452,  451,  454,  447,  451,  448,  455,
-      454,  456,  457,  453,  458,  459,  457,  460,  461,  458,
-      462,  452,  460,  463,  466,  468,  469,  467,  476,  468,
-      459,  455,  456,  470,  461,  473,  463,  476,  143,  462,
-      464,  464,  467,  471,  466,  469,  464,  471,  464,  470,
-
-      473,  475,  472,  474,  464,  478,  464,  472,  474,  464,
-      464,  472,  477,  480,  481,  483,  464,  475,  477,  479,
-      485,  478,  479,  477,  482,  482,  484,  484,  487,  486,
-      488,  489,  490,  491,  481,  485,  480,  490,  492,  493,
-      483,  486,  491,  487,  494,  501,  496,  497,  499,  488,
-      494,  497,  498,  489,  493,  496,  500,  492,  498,  502,
-      499,  503,  504,  505,  501,  506,  507,  505,  507,  508,
-      511,  500,  513,  502,  509,  509,  503,  508,  506,  510,
-      504,  512,  511,  514,  513,  510,  514,  512,  515,  516,
-      517,  518,  519,  520,  518,  517,  638,  522,  523,  523,
-
-      521,  519,  515,  529,  516,  521,  521,  638,  519,  520,
-      522,  519,  524,  524,  525,  526,  526,  527,  527,  528,
-      525,  532,  531,  530,  529,  528,  530,  531,  533,  534,
-      535,  536,  534,  537,  538,  535,  533,  539,  538,  541,
-      532,  540,  542,  539,  543,  540,  545,  542,  546,  544,
-      548,  545,  537,  547,  536,  544,  547,  541,  549,  549,
-      550,  547,  546,  553,  543,  547,  551,  552,  548,  554,
-      556,  551,  552,  557,  563,  559,  556,  553,  550,  559,
-      558,  560,  557,  558,  554,  561,  560,  562,  561,  564,
-      563,  565,  562,  566,  567,  568,  569,  569,  565,  567,
-
-      570,  559,  571,  572,  573,  574,  566,  564,  575,  570,
-      576,  695,  581,  573,  575,  568,  576,  574,  582,  572,
-      577,  571,  695,  577,  578,  578,  579,  578,  580,  579,
-      581,  583,  582,  580,  584,  585,  591,  583,  589,  584,
-      586,  585,  587,  586,  588,  590,  592,  587,  593,  588,
-      588,  589,  592,  594,  595,  591,  591,  596,  590,  595,
-      597,  597,  594,  598,  601,  599,  600,  593,  599,  602,
-      598,  605,  600,  603,  602,  607,  601,  596,  603,  603,
-      604,  604,  606,  599,  606,  608,  609,  608,  610,  611,
-      612,  613,  614,  615,  607,  617,  605,  615,  614,  616,
-
-      618,  619,  620,  622,  609,  621,  610,  611,  616,  612,
-      617,  613,  624,  625,  623,  618,  626,  621,  622,  619,
-      623,  620,  627,  628,  629,  625,  624,  628,  630,  631,
-      632,  633,  634,  635,  635,  626,  636,  637,  639,  641,
-      636,  627,  629,  642,  630,  141,  634,  631,  632,  632,
-      633,  643,  639,  640,  644,  641,  637,  649,  640,  646,
-      645,  644,  642,  647,  643,  645,  646,  648,  647,  650,
-      651,  652,  648,  653,  654,  649,  650,  656,  655,  651,
-      656,  658,  653,  655,  657,  652,  654,  659,  657,  660,
-      662,  661,  663,  663,  666,  658,  659,  664,  664,  665,
-
-      665,  668,  669,  666,  660,  661,  664,  670,  669,  671,
-      672,  662,  673,  671,  674,  675,  676,  678,  677,  679,
-      668,  675,  672,  680,  676,  677,  683,  670,  690,  686,
-      689,  691,  674,  698,  690,  678,  692,  673,  696,  689,
-      692,  683,   70,  680,  679,  681,  686,  691,  693,  693,
-      681,  694,  694,  698,  681,  697,  696,  681,  701,  702,
-      699,  703,  704,  701,  681,  681,  699,  681,  707,  697,
-      700,  700,  700,  705,  700,  707,  705,  700,  709,  703,
-      702,   64,  700,  706,  706,  708,  708,  704,  700,  700,
-      710,  710,  711,  709,  713,  712,  715,  711,  712,  713,
-
-      714,  716,  714,  717,  718,  720,  719,  717,  715,  721,
-      721,  722,  725,  720,  723,  724,  724,  726,  727,  760,
-      716,  728,  730,  730,  718,  719,  722,  728,  723,  726,
-      725,  729,  731,  760,  733,  734,  729,  731,  731,  733,
-      727,  734,  735,  738,  736,  737,  738,  739,  735,  736,
-      740,  737,  743,  739,  741,  741,  742,  742,  740,  744,
-      743,  745,  746,  747,  748,  748,  745,  749,  751,  746,
-      750,  752,  754,  761,  751,  755,  749,  744,  750,  757,
-      756,  754,  747,  758,  755,  756,  758,  759,  757,  763,
-      752,  762,  759,  765,  765,  766,  767,  768,  761,  764,
-
-      762,  769,  763,  774,  764,  764,  768,  772,  770,  772,
-      766,  770,  773,  773,  776,  767,  775,  777,  778,  770,
-      779,  775,  781,  780,  774,  769,  782,  784,  783,  785,
-      786,  781,  783,  789,  788,  776,  786,  777,  778,  790,
-      792,  787,  779,  780,  795,  784,  788,  796,  785,  782,
-      787,  791,  789,  790,  792,  793,  796,  791,  794,  794,
-      793,  797,  798,  799,  795,  800,  801,  803,  802,  805,
-      798,  806,  804,  803,  807,  805,  808,  810,  811,  812,
-      807,  797,  808,  799,  812,  801,  804,  800,  802,  809,
-      811,  806,  813,  809,  814,  814,  810,  815,  811,  816,
-
-      817,  818,  816,  815,  819,  820,  821,  821,  822,  825,
-      819,  823,  828,  813,  818,  829,  823,  826,  817,  824,
-      824,  826,  827,  827,  825,  820,  822,  830,  831,  833,
-      834,  836,  830,  837,  828,  829,  839,  839,  840,  842,
-      842,  841,  840,  843,  834,  844,  845,  831,  846,  844,
-      852,  836,  847,  833,  837,  838,  841,  847,  838,  848,
-      838,  845,  846,  850,  838,  852,  838,  854,  843,  849,
-      856,  838,  857,  848,  849,  849,  838,  850,  851,  854,
-      853,  855,  851,  858,  856,  853,  855,  862,  862,  865,
-      859,  866,  860,  857,  851,  853,  859,  858,  860,  861,
-
-      867,  863,  864,  869,  870,  861,  863,  871,  864,  870,
-      866,  865,  872,  873,  873,  869,  876,  874,  867,  868,
-      868,  871,  874,  875,  872,  868,   59,  868,  877,  878,
-      876,  875,  880,  868,  879,  879,  880,  882,  868,  868,
-      884,  883,  885,  882,  883,  868,  886,  877,  878,  887,
-      888,  889,  886,  890,  887,  885,  891,  892,  893,  884,
-      889,  894,  890,  892,  896,  895,  898,  893,  897,  888,
-      895,  899,  891,  902,  903,  904,  900,  906,  901,  902,
-      894,  904,  897,  899,  896,  900,  898,  901,  908,  909,
-      911,  903,  910,  906,  912,  913,  914,  919,  915,  924,
-
-      918,  914,  908,  915,  911,  918,  919,  920,  920,  909,
-      913,  910,  912,  921,  922,  924,  925,  927,  928,  921,
-      927,  925,  925,  929,  926,  926,  930,  922,  926,  931,
-      932,  933,  928,  934,  935,  936,  937,  933,  938,  941,
-      935,  937,  931,  929,  930,  932,  940,  944,   54,  940,
-      936,  942,  938,  934,  943,  947,  942,  945,  949,  943,
-      941,  946,  945,  944,  949,  950,  946,  947,  951,  952,
-      953,  953,  955,  954,  951,  952,  956,  957,  957,  956,
-      958,  950,  954,  959,  960,  961,  962,  963,  961,  964,
-      955,  965,  966,  963,  970,  964,  965,  966,  958,  962,
-
-      967,  968,  959,  971,  960,  967,  973,  968,  972,  974,
-      974,  973,  970,  975,  972,  976,  977,  978,  979,  980,
-      978,  979,  975,  971,  976,  981,  982,  983,  987,  984,
-      980,  985,  986,  987,  977,  984,  989,  985,  982,  988,
-      988,  991,  990,  981,  992,  993,  983,  986,  992,  994,
-      995,  996,  998,  991, 1001,  989,  990, 1002,  994,  999,
-      999, 1003, 1004,  993, 1007, 1005, 1013, 1004, 1001,  995,
-       53,  998, 1002, 1003, 1005, 1008,  996, 1006, 1006, 1009,
-     1013, 1008, 1010, 1014, 1007, 1009, 1011, 1010, 1011, 1012,
-     1015, 1016, 1017, 1018, 1012, 1015, 1020, 1014, 1019, 1025,
-
-     1018, 1022, 1022, 1023, 1024, 1027, 1016, 1028, 1030, 1030,
-     1026, 1017, 1028, 1019, 1025, 1020, 1026, 1023, 1034, 1031,
-     1036, 1028, 1024, 1028, 1031, 1027, 1028, 1032, 1032, 1033,
-     1035, 1037, 1034, 1035, 1038, 1039, 1033, 1040, 1043, 1036,
-     1039, 1041, 1042, 1038, 1045, 1045, 1041, 1046, 1048, 1037,
-     1047, 1051, 1046, 1042, 1049, 1047, 1040, 1043, 1050, 1049,
-     1051, 1052, 1050, 1053, 1054, 1055, 1056, 1057, 1048, 1059,
-     1058, 1060, 1061, 1062, 1057, 1069, 1052, 1055, 1053, 1062,
-     1063, 1056, 1058, 1054, 1064, 1065, 1070, 1066, 1059, 1069,
-     1061, 1068, 1060, 1071, 1070, 1063, 1066, 1068, 1072, 1073,
-
-     1075, 1074, 1076, 1072, 1064, 1065, 1074, 1074, 1077, 1078,
-     1078, 1073, 1080, 1071, 1081, 1084, 1076, 1085, 1082, 1075,
-     1084, 1077, 1079, 1081, 1082, 1080, 1085, 1079, 1083, 1083,
-     1079, 1079, 1086, 1090, 1087, 1079, 1093, 1088, 1086, 1087,
-     1094, 1079, 1088, 1089, 1089, 1079, 1091, 1091, 1092, 1096,
-     1095, 1092, 1097, 1092, 1090, 1099, 1093, 1097, 1094, 1095,
-     1098, 1100, 1101, 1104, 1134, 1102, 1134, 1100, 1101, 1096,
-     1102, 1103, 1104, 1099, 1098, 1103, 1111, 1104, 1109, 1104,
-     1107, 1104, 1109, 1104, 1105, 1105, 1106, 1106, 1110, 1106,
-     1112, 1107, 1113, 1114, 1111, 1115, 1116, 1113, 1113, 1112,
-
-     1115, 1118, 1117, 1110, 1119, 1120, 1121, 1122, 1122, 1123,
-     1116, 1117, 1121, 1124, 1126, 1114, 1125, 1123, 1128, 1120,
-     1118, 1125, 1127, 1119, 1129, 1130, 1132, 1124, 1126, 1138,
-     1130, 1127, 1131, 1131, 1133, 1133, 1128, 1136, 1137, 1141,
-     1136, 1132, 1139, 1137, 1140, 1140, 1142, 1142, 1138, 1129,
-     1144, 1139, 1143, 1143, 1145, 1144, 1146, 1147, 1147, 1141,
-     1148, 1149, 1150, 1151, 1149, 1152, 1154, 1153, 1151, 1153,
-     1156, 1157,   48, 1156, 1152, 1145, 1158, 1146, 1159, 1160,
-     1148, 1158, 1150, 1159, 1154, 1161, 1157, 1160, 1162, 1164,
-     1161, 1163, 1163, 1162, 1164, 1165, 1166, 1167, 1168, 1170,
-
-     1171, 1173, 1166, 1172, 1167, 1170, 1171, 1173, 1172, 1174,
-     1175, 1168, 1176, 1165, 1177, 1177, 1178, 1180, 1174, 1181,
-     1182, 1183, 1184, 1176, 1186, 1187, 1182, 1183, 1184, 1175,
-     1186, 1188, 1189, 1190, 1191, 1193, 1178, 1180, 1194, 1187,
-     1192, 1192, 1181, 1195, 1189, 1187, 1198, 1190, 1196, 1197,
-     1197, 1188, 1191, 1196, 1199, 1193, 1201,   43, 1203, 1199,
-     1202, 1195, 1204, 1194, 1205, 1202, 1202, 1206, 1207, 1198,
-     1208, 1204, 1205, 1211, 1209, 1201, 1203, 1217, 1210, 1209,
-     1210, 1206, 1209, 1207, 1213, 1208, 1215, 1211, 1208, 1214,
-     1213, 1218, 1219, 1214, 1216, 1221, 1217, 1215, 1220, 1216,
-
-     1216, 1222, 1223, 1220, 1225, 1226, 1222, 1227, 1228, 1228,
-     1219, 1229, 1230, 1221, 1231, 1229, 1233, 1218, 1225, 1234,
-     1232, 1235, 1223, 1226, 1236, 1227, 1232, 1237, 1233, 1238,
-     1230, 1239, 1241, 1231, 1240, 1235, 1239, 1241, 1234, 1236,
-     1242, 1240, 1237, 1243, 1244, 1244, 1245, 1246, 1238, 1247,
-     1248, 1249, 1243, 1246, 1250, 1248, 1257, 1249, 1242, 1258,
-     1250, 1245, 1251, 1251, 1252, 1252, 1254, 1254, 1255, 1256,
-     1247, 1259, 1255, 1258, 1257, 1260, 1261, 1261, 1256, 1262,
-     1263, 1265, 1260, 1266, 1264, 1267, 1259, 1268, 1263, 1264,
-     1267, 1267, 1268, 1268, 1269, 1265, 1270, 1270, 1271, 1262,
-
-     1272, 1273, 1266, 1274, 1275, 1276, 1277, 1278, 1274, 1280,
-     1273, 1279, 1281, 1278, 1269, 1282, 1279, 1271, 1281, 1272,
-     1283, 1284, 1285, 1275, 1277, 1276, 1283, 1284, 1286, 1287,
-     1288, 1289, 1290,   14, 1282, 1280, 1291, 1292, 1292, 1293,
-     1294, 1285, 1293, 1295, 1295, 1289, 1298, 1286, 1287, 1288,
-     1298, 1291, 1294, 1290, 1296, 1296, 1297, 1299, 1300, 1301,
-     1302, 1297, 1302, 1304, 1306, 1305, 1302, 1300, 1304, 1307,
-     1299, 1309, 1301, 1308, 1308, 1310, 1309, 1311, 1312, 1302,
-     1305, 1310, 1313, 1316, 1306, 1307, 1314, 1313, 1317, 1315,
-     1314, 1312, 1311, 1315, 1318, 1319, 1320, 1320, 1322, 1324,
-
-     1325, 1319, 1328, 1316, 1327, 1325, 1317, 1326, 1326, 1334,
-     1327, 1330, 1330, 1335, 1318, 1332, 1322, 1338, 1332, 1339,
-     1324, 1341, 1328, 1333, 1333, 1334, 1342, 1337, 1339, 1335,
-     1337, 1340, 1340, 1343, 1344, 1345, 1341, 1338, 1347, 1344,
-     1346, 1346, 1348, 1349, 1350, 1350, 1351, 1342, 1352, 1345,
-     1353, 1357, 1343, 1359, 1354, 1353, 1347, 1348, 1355, 1355,
-     1351, 1356, 1358, 1358, 1362, 1356, 1352, 1360, 1349, 1354,
-     1361, 1357, 1363, 1366, 1361, 1359, 1367, 1363, 1360, 1365,
-     1365, 1368, 1369, 1362, 1370, 1371, 1371, 1372, 1373, 1375,
-     1367, 1366, 1372, 1374, 1376, 1377, 1369, 1380, 1375, 1376,
-
-     1368, 1368, 1378, 1380, 1378, 1379, 1381, 1384, 1373, 1370,
-     1379, 1382, 1386, 1374, 1387, 1377, 1390, 1382, 1385, 1385,
-     1387, 1384, 1389, 1391, 1391, 1393, 1381, 1389, 1392, 1392,
-     1394, 1386, 1395, 1396, 1397, 1397, 1396, 1398, 1399, 1393,
-     1390, 1402, 1407, 1411, 1411, 1401, 1402, 1395, 1394, 1398,
-     1400, 1401, 1403, 1400, 1405, 1403, 1400, 1406, 1399, 1409,
-     1413, 1408, 1406, 1405, 1408, 1409, 1413, 1407, 1400, 1410,
-     1414, 1403, 1412, 1412, 1410, 1414, 1415, 1416, 1417, 1418,
-     1419, 1420, 1421, 1419, 1424, 1422, 1423, 1420, 1421, 1415,
-     1422, 1425, 1423, 1426, 1426, 1416, 1425, 1417, 1427, 1418,
-
-     1428, 1429, 1430, 1427, 1433, 1431, 1432, 1424, 1435, 1436,
-     1434, 1437, 1438, 1439, 1435, 1442, 1433, 1447, 1428, 1431,
-     1432, 1429, 1430, 1434, 1441, 1441, 1438, 1443, 1445, 1436,
-     1446, 1437, 1443, 1448, 1439, 1442, 1444, 1444, 1449, 1450,
-     1453, 1447, 1451, 1445, 1446, 1455, 1452, 1449, 1457, 1451,
-     1458, 1448, 1462, 1458, 1450, 1452, 1453, 1461, 1452, 1465,
-     1455, 1459, 1459, 1460, 1460, 1455, 1464, 1464, 1463, 1461,
-     1462, 1463, 1465, 1457, 1466, 1467, 1468, 1469, 1470, 1471,
-     1467, 1468, 1472, 1473, 1475, 1476, 1476, 1477, 1471, 1474,
-     1475, 1478, 1473, 1466, 1470, 1473, 1469, 1479, 1474, 1480,
-
-     1481, 1472, 1482, 1485, 1478, 1486, 1488, 1477, 1487, 1487,
-     1489, 1493, 1490, 1480, 1482, 1479, 1481, 1490, 1492, 1489,
-     1491, 1491, 1488, 1486, 1494, 1495, 1496, 1492, 1485, 1493,
-     1492, 1496, 1496, 1498, 1499, 1491, 1500, 1501, 1502, 1503,
-     1504, 1504, 1501, 1495, 1502, 1494, 1505, 1498, 1506, 1499,
-     1507, 1510, 1505, 1506, 1508, 1511, 1507, 1503, 1500, 1512,
-     1508, 1513, 1515, 1514, 1519, 1512, 1514, 1517, 1515, 1511,
-     1520, 1510, 1514, 1521, 1513, 1517, 1522, 1523, 1524, 1525,
-     1526, 1521, 1528, 1519, 1530, 1522, 1527, 1527, 1528, 1520,
-     1523, 1524, 1529, 1525, 1526, 1531, 1532, 1530, 1529, 1533,
-
-     1534, 1535, 1536, 1537, 1538, 1540, 1540, 1535, 1527, 1541,
-     1547,   13, 1542, 1534, 1532, 1531, 1542, 1549, 1533, 1537,
-     1543, 1544, 1538, 1545, 1536, 1543, 1544, 1546, 1545, 1541,
-     1550, 1550, 1549, 1547, 1551, 1552, 1546, 1553, 1554, 1554,
-     1555, 1556, 1559, 1557, 1560, 1558, 1561, 1552, 1556, 1563,
-     1562, 1654, 1561, 1551, 1555, 1557, 1553, 1558, 1654, 1564,
-     1566, 1559, 1562, 1566, 1560, 1564, 1570, 1563, 1565, 1565,
-     1567, 1567, 1569, 1571, 1573, 1570, 1574, 1569, 1574, 1571,
-     1572, 1572, 1575, 1576, 1577, 1575, 1573, 1578, 1580, 1579,
-     1581, 1584, 1582, 1580, 1583, 1586, 1584, 1588, 1592, 1581,
-
-        0, 1585, 1588, 1576, 1582, 1578, 1577, 1579, 1587, 1583,
-     1585, 1589, 1591, 1587, 1593, 1586, 1590, 1590, 1591, 1592,
-     1587, 1594, 1595, 1585, 1597, 1596, 1589, 1596, 1598, 1598,
-     1599, 1599, 1601, 1593, 1600, 1600, 1604, 1594, 1597, 1605,
-     1597, 1612, 1595, 1602, 1602, 1603, 1603, 1606, 1606, 1607,
-     1608, 1609, 1601, 1607, 1609, 1611, 1608, 1604, 1613, 1612,
-     1605, 1611, 1614, 1615, 1613, 1618, 1615, 1616, 1616, 1617,
-     1617, 1618, 1619, 1620, 1621, 1622, 1623, 1625, 1626, 1632,
-     1629, 1622, 1625, 1625, 1619, 1619, 1619, 1614, 1627, 1628,
-     1627, 1619, 1626, 1620, 1621, 1629, 1623, 1630, 1631, 1632,
-
-     1628, 1633, 1635, 1630, 1634, 1634, 1637, 1631, 1636, 1636,
-     1638, 1639, 1639, 1640, 1640, 1641, 1644, 1644, 1645, 1649,
-     1646, 1648, 1633, 1651, 1651, 1650, 1637, 1652, 1635, 1646,
-     1648, 1650, 1638, 1655, 1653, 1641, 1656, 1657, 1657, 1658,
-     1649, 1659, 1655, 1645, 1663, 1661, 1662, 1664, 1652, 1653,
-     1661, 1668, 1662, 1665, 1664, 1666, 1668, 1659, 1670, 1665,
-     1669, 1666, 1656, 1671, 1663, 1658, 1667, 1667, 1672, 1669,
-     1673, 1674, 1675, 1673, 1676, 1676, 1678, 1677, 1670, 1679,
-     1672, 1680, 1671, 1677, 1682, 1680, 1683, 1684, 1686, 1674,
-     1685, 1685, 1684, 1689, 1679, 1687, 1678, 1697, 1675, 1690,
-
-     1691, 1680, 1692, 1690, 1682, 1694, 1691, 1686, 1683, 1694,
-     1687, 1692, 1689, 1693, 1693, 1695, 1696, 1696, 1697, 1698,
-     1699, 1701, 1700, 1702, 1703, 1704, 1695, 1700, 1708, 1705,
-     1703, 1695, 1708, 1698, 1705, 1706, 1706, 1707, 1707, 1699,
-     1704, 1701, 1710, 1702, 1711, 1712, 1713, 1713, 1714, 1714,
-     1716, 1710, 1715, 1717, 1718, 1711, 1716, 1715, 1715, 1717,
-     1711, 1719, 1720, 1721, 1723, 1712, 1719, 1724, 1726, 1721,
-     1725, 1724, 1727, 1728, 1720, 1729, 1723, 1730, 1727, 1732,
-     1718, 1729, 1725, 1733, 1736, 1734, 1740, 1736, 1741, 1730,
-     1734, 1732, 1750, 1726, 1741, 1728, 1737, 1737, 1738, 1738,
-
-     1739, 1739, 1733, 1742, 1750, 1743, 1740, 1744, 1745, 1742,
-     1743, 1747, 1749, 1744, 1753, 1749, 1747, 1745, 1751, 1751,
-     1754, 1757, 1755, 1756, 1756, 1761, 1753, 1755, 1758, 1759,
-     1757, 1762, 1754, 1758, 1759, 1760, 1760, 1763, 1764, 1765,
-     1762, 1766, 1767, 1765, 1768, 1761, 1766, 1769, 1767, 1770,
-     1771, 1773, 1773, 1774, 1778, 1763, 1769, 1764, 1779, 1775,
-     1776, 1776, 1768, 1773, 1771, 1777, 1778, 1770, 1775, 1781,
-     1780, 1774, 1784, 1784, 1777, 1780, 1787, 1786, 1788, 1779,
-     1786, 1790, 1781, 1791, 1792, 1793, 1794, 1794, 1799, 1795,
-     1792, 1795, 1787, 1797, 1788, 1799, 1790, 1791, 1796, 1796,
-
-     1800, 1797, 1793, 1801, 1801, 1802, 1803, 1804, 1807, 1805,
-     1806, 1808, 1809, 1811, 1802,    0, 1812, 1814, 1809, 1804,
-     1800, 1805, 1806, 1813, 1813, 1815, 1808, 1803, 1812, 1816,
-     1818, 1809, 1816, 1811, 1807, 1814, 1817, 1820, 1821, 1822,
-     1821, 1817, 1820, 1823, 1824, 1815, 1826, 1828, 1823, 1829,
-     1818, 1824, 1830, 1832, 1831, 1826, 1831, 1822, 1829, 1834,
-     1835, 1834, 1836, 1836, 1830, 1828, 1837, 1839, 1838, 1839,
-     1840, 1841, 1832, 1838, 1835, 1840, 1841, 1842, 1843, 1844,
-     1846, 1845, 1847, 1849, 1853, 1844, 1845, 1850, 1851, 1851,
-     1847, 1854, 1837, 1846, 1855, 1842, 1852, 1852, 1843, 1853,
-
-     1855, 1850, 1849, 1856, 1857, 1858, 1857, 1860, 1856, 1859,
-     1859, 1854, 1865, 1858, 1861, 1861, 1862, 1862, 1863, 1860,
-     1864, 1858, 1867, 1869, 1868, 1864, 1868, 1863, 1872, 1874,
-     1865, 1867, 1870, 1871, 1867, 1879, 1878, 1870, 1870, 1882,
-     1872, 1874, 1871, 1875, 1869, 1876, 1883, 1880, 1875, 1878,
-     1876, 1881, 1881, 1884, 1885, 1879, 1880, 1882, 1886, 1888,
-     1889, 1890, 1891, 1899, 1883, 1892, 1893, 1891, 1885, 1884,
-     1892, 1888, 1889, 1886, 1896, 1893, 1898, 1900, 1901, 1902,
-     1896, 1890, 1898, 1904, 1904, 1903, 1899, 1907, 1905, 1906,
-     1906, 1908, 1900, 1896, 1903, 1908, 1901, 1905, 1909, 1910,
-
-     1916,    0, 1911, 1909, 1902, 1912, 1907, 1911, 1911, 1913,
-     1914, 1912, 1910, 1914, 1915, 1913, 1919, 1919, 1920, 1920,
-     1916, 1921, 1915, 1922, 1922, 1923, 1923, 1924, 1925, 1926,
-     1921, 1927, 1937, 1920, 1934, 1926, 1927, 1928, 1928, 1924,
-     1929, 1929, 1930, 1931, 1920, 1938, 1925, 1930, 1933, 1931,
-     1938, 1935, 1933, 1939, 1934, 1935, 1940, 1937, 1941, 1942,
-     1944, 1945, 1943, 1941, 1946, 1948, 1945, 1947, 1947, 1948,
-     1949, 1940, 1951, 1953, 1950, 1952, 1939, 1942, 1943, 1950,
-     1944, 1955, 1956, 1954, 1960, 1949, 1946, 1952, 1954, 1957,
-     1957, 1959, 1953, 1961, 1955, 1962, 1963, 1964, 1951, 1959,
-
-     1956, 1965, 1966, 1960, 1967, 1973, 1969, 1970, 1970, 2134,
-     1971, 1972, 1961, 1971, 1966, 1974, 1964, 2134, 1962, 1973,
-     1963, 1969, 1965, 1978, 1972, 1967, 1975, 1975, 1974, 1976,
-     1976, 1977, 1977, 1979, 1980, 1980, 1981, 1983, 1978, 1982,
-     1982, 1986, 1983, 1987, 1985, 1981, 1979, 1988, 1981, 1985,
-     1989, 1989, 1990, 1990, 1991, 1992, 1992, 1993, 1999, 1988,
-     2002, 1986, 1995, 1987, 1994, 1994, 1996, 1997, 1997, 1998,
-     1998, 1996, 1999, 1991, 2000, 1993, 2001, 1995, 2006, 2002,
-     2004, 2005, 2005, 2000, 2008, 2004, 2007, 2007, 2009, 2010,
-     2001, 2013, 2010, 2014, 2009, 2011, 2011, 2006, 2012, 2012,
-
-     2015, 2018, 2008, 2016, 2016, 2019, 2023, 2020, 2014, 2021,
-     2013, 2011, 2024, 2021, 2022, 2022, 2025, 2027, 2027, 2015,
-     2028, 2018, 2020, 2029, 2030, 2023, 2031, 2024, 2019, 2032,
-     2029, 2025, 2033, 2034, 2034, 2036, 2035, 2036, 2030, 2037,
-     2028, 2039, 2037, 2040, 2031, 2035, 2041, 2032, 2040, 2042,
-     2043, 2041, 2044, 2039, 2046, 2045, 2048, 2037, 2033, 2037,
-     2045, 2048, 2049, 2043, 2050, 2051, 2052, 2049, 2056, 2053,
-     2057, 2051, 2054, 2044, 2042, 2053, 2055, 2054, 2063, 2050,
-     2046, 2055, 2058, 2057, 2068, 2058, 2059, 2052, 2060, 2061,
-     2062, 2074, 2063, 2056, 2064, 2059, 2065, 2060, 2061, 2062,
-
-     2064, 2066, 2065, 2070, 2068, 2066, 2071, 2071, 2072, 2073,
-     2073, 2074, 2070, 2074, 2072, 2076, 2077, 2080, 2073, 2078,
-     2078, 2079, 2082, 2083, 2087, 2084, 2080, 2087, 2088, 2085,
-     2089, 2076, 2077, 2088, 2082, 2090, 2079, 2091, 2091, 2083,
-     2084, 2085, 2092, 2092, 2094, 2094, 2095, 2090, 2096, 2095,
-     2089, 2097, 2098, 2096, 2099, 2099, 2100, 2097, 2098, 2101,
-     2101, 2102, 2103, 2104, 2105, 2105, 2106, 2107,    0, 2108,
-     2100, 2110, 2106, 2102, 2108, 2110, 2103, 2111, 2112, 2112,
-     2111, 2107, 2104, 2113, 2114, 2115, 2116, 2118, 2113, 2120,
-     2116, 2117, 2117, 2114, 2120, 2121, 2122, 2123, 2124, 2125,
-
-     2118, 2126, 2124, 2127, 2128, 2115, 2126, 2129, 2131, 2127,
-     2128, 2123, 2132, 2138, 2133, 2121, 2122, 2132, 2141, 2125,
-     2133, 2135, 2144, 2135, 2131, 2129, 2144, 2138, 2139, 2139,
-     2140, 2142, 2142, 2140, 2145, 2146, 2147, 2147, 2153, 2148,
-     2145, 2151, 2151, 2155, 2141, 2156, 2159, 2146, 2148, 2160,
-     2161, 2159, 2169, 2162, 2170, 2161, 2153, 2155, 2162, 2163,
-     2163, 2156, 2165, 2165, 2167, 2168, 2168, 2171, 2169, 2173,
-     2167, 2174, 2171, 2175, 2175, 2160, 2170, 2177, 2178, 2179,
-     2180, 2182, 2182, 2174, 2178, 2183, 2177, 2184, 2173, 2186,
-     2186, 2187, 2187, 2188, 2189, 2180, 2191, 2179, 2188, 2190,
-
-     2192, 2191, 2192, 2193, 2183, 2184, 2194, 2195, 2190, 2196,
-     2197, 2198, 2189, 2204, 2196, 2239, 2198, 2193, 2239, 2195,
-     2194, 2199, 2199, 2200, 2200, 2201, 2201, 2202, 2202, 2203,
-     2197, 2204, 2205, 2206, 2206, 2207, 2207, 2205, 2208, 2209,
-     2210, 2203, 2211, 2212, 2212, 2213, 2214, 2214, 2215, 2215,
-     2208, 2209, 2216, 2217, 2218, 2219, 2220, 2221, 2211, 2222,
-     2210, 2218, 2221, 2216, 2213, 2217, 2223, 2219, 2224, 2224,
-     2226, 2225, 2227, 2229, 2228, 2230, 2220, 2231, 2231, 2222,
-     2225, 2232, 2236, 2233, 2234, 2237, 2223, 2228, 2238, 2230,
-     2232, 2240, 2227, 2243, 2243,    0, 2226, 2229, 2233, 2234,
-
-     2236, 2241, 2250, 2242, 2252, 2240, 2241, 2237, 2242, 2244,
-     2244, 2238, 2245, 2245, 2247, 2247, 2249, 2249, 2251, 2254,
-     2250, 2256, 2255, 2252, 2257, 2258, 2259, 2261, 2260, 2251,
-     2260, 2262, 2263, 2267, 2258, 2264, 2264, 2266, 2266, 2254,
-     2255, 2273, 2268, 2256, 2257, 2271, 2259, 2261, 2274, 2262,
-     2263, 2268, 2269, 2269, 2271, 2267, 2272, 2272, 2275, 2273,
-     2276, 2277, 2278, 2280, 2288, 2275, 2274, 2279, 2281, 2281,
-     2282, 2282, 2283, 2284, 2285, 2276, 2286, 2289, 2283, 2277,
-     2278, 2287, 2280, 2279, 2288, 2290, 2287, 2292, 2292, 2285,
-     2290, 2284, 2291, 2296, 2291, 2286, 2293, 2289, 2293, 2294,
-
-     2294, 2298, 2299, 2300, 2301, 2303, 2302, 2304, 2307, 2311,
-     2298, 2302, 2296, 2308, 2310, 2300, 2308, 2309, 2309, 2312,
-     2312, 2299, 2315, 2318, 2301, 2303, 2304, 2311, 2307, 2310,
-     2313, 2316, 2317, 2317, 2313, 2316, 2318, 2315, 2320, 2321,
-     2322, 2322, 2324, 2325, 2326, 2327, 2327, 2328, 2326, 2329,
-     2329, 2330, 2325, 2331, 2324, 2332, 2330, 2333, 2320, 2321,
-     2334, 2334, 2331, 2339, 2339, 2340, 2328, 2341, 2341, 2333,
-     2342, 2332, 2343, 2344, 2347, 2345, 2346, 2346, 2349, 2349,
-     2354, 2352, 2344, 2342, 2345, 2343, 2352, 2340, 2353, 2347,
-     2355, 2356, 2357, 2353, 2354, 2355, 2358, 2361, 2359, 2356,
-
-     2364, 2369, 2362, 2363,    0, 2358, 2359, 2362, 2363, 2365,
-     2365, 2357, 2361, 2366, 2366, 2364, 2367, 2368, 2370, 2369,
-     2371,    0, 2368, 2367, 2372, 2374, 2371, 2373, 2373, 2372,
-     2375, 2376, 2376, 2377, 2377, 2375, 2370, 2380, 2381, 2381,
-     2374, 2382, 2383, 2392, 2382, 2405, 2384, 2383, 2383, 2385,
-     2380, 2384, 2386, 2387, 2385, 2388, 2389, 2387, 2386, 2390,
-     2388, 2391, 2393, 2405, 2392, 2389, 2394, 2396, 2393, 2391,
-     2395, 2398, 2394, 2401, 2390, 2395, 2398, 2399, 2403, 2396,
-     2399, 2404, 2406, 2403, 2407, 2401, 2404, 2408, 2409, 2409,
-     2410, 2413, 2414, 2407, 2415, 2406, 2408, 2416, 2416, 2410,
-
-     2417, 2419, 2418, 2420, 2420, 2421, 2423, 2425, 2427, 2427,
-     2413, 2418, 2414, 2415, 2426, 2428, 2419, 2429, 2426, 2417,
-     2430, 2423, 2431, 2429, 2421, 2433, 2430, 2425, 2431, 2432,
-     2432, 2434, 2436, 2433, 2437, 2439, 2434, 2440, 2441, 2439,
-     2428, 2436, 2443, 2443, 2444, 2444, 2448, 2437, 2445, 2445,
-     2448, 2440, 2449, 2441, 2447, 2447, 2453, 2449, 2451, 2451,
-     2454, 2455, 2456, 2458, 2466, 2454, 2464, 2456, 2456, 2459,
-     2459, 2461, 2461, 2455, 2462, 2462, 2453, 2463, 2468, 2464,
-     2463, 2472, 2466, 2458, 2469, 2469, 2470, 2470, 2471, 2471,
-     2473, 2473, 2474, 2475, 2476, 2477, 2472, 2483, 2468, 2478,
-
-     2478, 2477, 2479, 2484, 2482, 2474, 2479, 2485, 2476, 2482,
-     2482, 2475, 2486, 2487, 2488, 2490, 2490, 2489, 2486, 2487,
-     2483, 2489, 2495, 2484, 2493, 2496, 2498, 2485, 2496, 2493,
-     2495, 2499, 2500, 2501, 2499, 2502, 2503,    0, 2501, 2488,
-     2504, 2505, 2505, 2506, 2507, 2508, 2509, 2507, 2512, 2500,
-     2500, 2498, 2510, 2502, 2504, 2507, 2503, 2506, 2511, 2508,
-     2510, 2513, 2513, 2511, 2511, 2509, 2518, 2512, 2514, 2514,
-     2515, 2515, 2516, 2516, 2517, 2517, 2519, 2520, 2521, 2522,
-     2523, 2519, 2518, 2524, 2526, 2526, 2527, 2528, 2522, 2527,
-     2530, 2530, 2531, 2532, 2532, 2540, 2533, 2520,    0, 2531,
-
-     2523, 2533, 2536, 2524, 2521, 2528, 2535, 2535, 2537, 2538,
-     2543, 2536, 2542, 2540, 2541, 2541, 2542, 2537, 2538, 2543,
-     2544, 2545, 2547, 2546, 2551, 2555, 2545, 2545, 2556, 2551,
-     2557, 2547, 2552, 2552, 2559, 2544, 2546, 2554, 2554, 2555,
-     2560, 2563, 2564, 2559, 2565, 2568, 2570,    0, 2557, 2566,
-     2616, 2564, 2560, 2556, 2572, 2566, 2573, 2568, 2616, 2572,
-     2575, 2573, 2574, 2574, 2565, 2577, 2563, 2570, 2584, 2575,
-     2577, 2578, 2578, 2580, 2580, 2578, 2581, 2581, 2582, 2582,
-     2583, 2585, 2586, 2592, 2588, 2593, 2589, 2586, 2584, 2583,
-     2588, 2589, 2590, 2591, 2591, 2595, 2596, 2590, 2594, 2597,
-
-     2585, 2592, 2596, 2594, 2598, 2598, 2593, 2600, 2604, 2601,
-     2602, 2600, 2606, 2595, 2601, 2602, 2603, 2603, 2605, 2608,
-     2608, 2610, 2611, 2614, 2597, 2612, 2615, 2604, 2613, 2612,
-     2618, 2617, 2606, 2605, 2610, 2611, 2617, 2613, 2620, 2614,
-     2619, 2619, 2622, 2622, 2625, 2615, 2623, 2623, 2627, 2627,
-     2629, 2630, 2631, 2632, 2634, 2634, 2618, 2620, 2632, 2635,
-     2636, 2637, 2639, 2639, 2640, 2625, 2629, 2630, 2631, 2641,
-     2641, 2644, 2646, 2647, 2650, 2645, 2654, 2646, 2640, 2635,
-     2637, 2645, 2652, 2636, 2648, 2648, 2649, 2649, 2651, 2651,
-     2653, 2644, 2655, 2652, 2650, 2647, 2654, 2656, 2655, 2653,
-
-     2657, 2658, 2659, 2659, 2660, 2661, 2661, 2660, 2651, 2666,
-     2665, 2667, 2657, 2668, 2668, 2669, 2656, 2667, 2669, 2670,
-     2671, 2658, 2665, 2673, 2675, 2670, 2674, 2676, 2673, 2666,
-     2677, 2674, 2680, 2676, 2678, 2678, 2681, 2682, 2671, 2683,
-     2684, 2684, 2685, 2675, 2680, 2691, 2686, 2677, 2677, 2688,
-     2688,    0, 2683, 2690, 2681, 2686, 2689, 2689, 2690, 2691,
-     2692, 2685, 2682, 2693, 2693, 2692, 2694, 2694, 2695, 2695,
-     2696, 2698, 2698, 2701, 2703, 2696, 2704, 2705, 2706, 2706,
-     2708, 2708, 2710, 2709, 2711, 2712, 2712, 2715, 2714, 2716,
-     2717,    0, 2701, 2711, 2714, 2717, 2703, 2709, 2704, 2705,
-
-     2720, 2720, 2710, 2722, 2722, 2723, 2724, 2715, 2716, 2725,
-     2723, 2726, 2731, 2727, 2729, 2725, 2728, 2728, 2732, 2729,
-     2724, 2727, 2733, 2726, 2734, 2735, 2737, 2733, 2738, 2739,
-     2740, 2735, 2731, 2741, 2737, 2748, 2734, 2742, 2732, 2743,
-     2744, 2745, 2752, 2747, 2756, 2756, 2745, 2738, 2747, 2739,
-     2740, 2741, 2749, 2742, 2750, 2748, 2743, 2743, 2749, 2750,
-     2753, 2744, 2752, 2757, 2757, 2758, 2762, 2762, 2768, 2758,
-     2764, 2764, 2768, 2753, 2765, 2765, 2771, 2765, 2766, 2766,
-     2774, 2766, 2767, 2767, 2772, 2767, 2770, 2770, 2775, 2780,
-     2776, 2777, 2777, 2782, 2771, 2776, 2781, 2782, 2772, 2795,
-
-     2774, 2783, 2784, 2781, 2786, 2795, 2787, 2821, 2775, 2791,
-     2783, 2788, 2788, 2796, 2780, 2787, 2821, 2784, 2789, 2789,
-     2790, 2790, 2786, 2792, 2791, 2793, 2794, 2797, 2792, 2798,
-     2799, 2794, 2794, 2801, 2793, 2799, 2800, 2793, 2796, 2802,
-     2802, 2800, 2797, 2803, 2873, 2804, 2805, 2805, 2873, 2803,
-     2798, 2804, 2801, 2806, 2806, 2807, 2810, 2810, 2813, 2813,
-     2807, 2814, 2814, 2815, 2815, 2816, 2816, 2817, 2817, 2818,
-     2818, 2819, 2819, 2822, 2822, 2823, 2824, 2825, 2829, 2827,
-     2828, 2828, 2830, 2837, 2823, 2832, 2832, 2831, 2824, 2833,
-     2834, 2834, 2839, 2829, 2841, 2830, 2844, 2825, 2827, 2831,
-
-     2838, 2837, 2844, 2838, 2833, 2840, 2840, 2843, 2845, 2846,
-     2843, 2847, 2841, 2848, 2846, 2851, 2849, 2852, 2839, 2855,
-     2864, 2851, 2845, 2864, 2866, 2871, 2852, 2867, 2867, 2874,
-     2847, 2848, 2849, 2872, 2855, 2868, 2868, 2866, 2869, 2869,
-     2875, 2877, 2872, 2881, 2878, 2879, 2882, 2882, 2871, 2874,
-     2879, 2880, 2883, 2880, 2875, 2878, 2884, 2886, 2881, 2885,
-     2887, 2888, 2889, 2891, 2877, 2883, 2890, 2892, 2897, 2893,
-     2898, 2889, 2900, 2886, 2893, 2884, 2888, 2885, 2890, 2899,
-     2899, 2900, 2897, 2905, 2891, 2887, 2906, 2892, 2901, 2901,
-     2898, 2902, 2902, 2903, 2903, 2904, 2904, 2907, 2908, 2909,
-
-     2907, 2910, 2905, 2908, 2909, 2911, 2906, 2912, 2913, 2914,
-     2915, 2916, 2918, 2912, 2919, 2915, 2917, 2917, 2920, 2920,
-     2911, 2914, 2913, 2922, 2924, 2930, 2910, 2918, 2927, 2927,
-     2931, 2916, 2929, 2919, 2928, 2928, 2931, 2932, 2922, 2933,
-     2929, 2934, 2924, 2932, 2930, 2935, 2936, 2937, 2937, 2938,
-     2938, 2936, 2940, 2933, 2934, 2941, 2943, 2944, 2946, 2949,
-     2947, 2944, 2948, 2950, 2935, 2947, 2951, 2954, 2954, 2952,
-     2943, 2957, 2949, 2940, 2952, 2941, 2950, 2953, 2946, 2958,
-     2959, 2948, 2953, 2960, 2960, 2951, 2967, 2961, 2962, 2963,
-     2963, 2957, 2961, 2964, 2962, 2965, 2966, 2958, 2964, 2959,
-
-     2965, 2966, 2968, 2970, 2970, 2967, 2971, 2975, 2968, 2972,
-     2972, 2971, 2974, 2976, 2977, 2978, 2974, 2979, 2980, 2981,
-     2976, 2983, 2983, 2979, 2985, 2985, 2975, 2986, 2988, 2989,
-     2987, 2990, 2981, 2977, 2978, 2987, 2986, 2980, 2992, 2986,
-     2991, 2991, 2993, 2992, 2990, 2995, 2997, 2988, 2989, 2996,
-     2996, 2998, 2998, 2999, 2999, 2993, 3000, 3001, 3002, 3003,
-     3003, 3000, 3004, 3009, 3001, 2997, 3005, 3004, 3005, 3006,
-     3006, 2995, 3007, 3008, 3011, 3014, 3010, 3002, 3018, 3007,
-     3008, 3010, 3009, 3013, 3013, 3016, 3017, 3019, 3020, 3020,
-     3016, 3017, 3023, 3011, 3014, 3022, 3022, 3018, 3024, 3025,
-
-     3025, 3026, 3026, 3027, 3029, 3029, 3019, 3030, 3030, 3031,
-     3027, 3023, 3037, 3033, 3036, 3038, 3031, 3024, 3033, 3036,
-     3039, 3039, 3040, 3040,    0,    0,    0,    0,    0,    0,
-        0, 3037,    0,    0, 3038, 3044, 3044, 3044, 3044, 3044,
-     3044, 3044, 3045, 3045, 3045, 3045, 3045, 3045, 3045, 3046,
-     3046, 3046, 3046, 3046, 3046, 3046, 3047, 3047, 3047, 3047,
-     3047, 3047, 3047, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
-     3050, 3050,    0, 3050, 3050, 3050, 3050, 3051, 3051,    0,
-        0,    0, 3051, 3051, 3052, 3052,    0,    0, 3052,    0,
-     3052, 3053,    0,    0,    0,    0,    0, 3053, 3054, 3054,
-
-        0,    0,    0, 3054, 3054, 3055,    0,    0,    0,    0,
-        0, 3055, 3056, 3056,    0, 3056, 3056, 3056, 3056, 3057,
-     3057,    0, 3057, 3057, 3057, 3057, 3043, 3043, 3043, 3043,
-     3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043,
-     3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043,
-     3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043,
-     3043, 3043, 3043, 3043, 3043, 3043, 3043
+       23,   23,   21,   21,   24,   12,   21,   34,   23,   24,
+       42,   21,   23,   24,   12,   23,   24,   36,   24,   24,
+       21,   26,   26,   27,   27,   42,   28,   69,   34,   84,
+       28,   36,   27,   28,   33,   33,   26,   32,   32,   33,
+       28,   69,   28,   27,   35,   52,   32,   84,   52,   35,
+       63,   63,   32,   35,   40,   33,   32,  109,   40,   35,
+       37,   37,   35,   72,  109,   37,   38,   72,   40,   35,
+      775,   38,   40,   40,   38,   37,   37,   80,   37,   39,
+
+       39,   38,   39,   41,   41,   38,   38,   77,   41,   80,
+       77,   39,   41,   58,  775,   58,   58,   39,   58,   66,
+       89,   66,   66,   68,   66,   68,   68,   71,   68,   71,
+       71,   66,   71,   81,   74,   86,   74,   74,   71,   74,
+       78,   93,   89,   85,   78,   74,   74,   82,   83,   86,
+       82,   83,   85,   81,   87,   88,   90,   91,   92,   94,
+       87,   93,   95,   91,   83,   96,   87,   98,   87, 1007,
+       94,   94,   92,   88,   88,   90,   91,   97,   94,   99,
+       95,   97,  100,   96,   99,  101,  102,   98,  101,  103,
+      104,  101,  102,  107,  105,  104,  100,  105,  108,  106,
+
+      110,  105,  108,  111,  101,  101,  112,  107,  103,  113,
+      111,  102,  114,  110,  116,  104,  115,  105,  106,  112,
+      115,  118,  117,  106,  119,  119,  120,  117,  122,  113,
+      114,  117,  116,  123,  121,  124,  126,  125,  121,  127,
+      125,  118,  133,  122,  128,  127,  120,  121,  131,  126,
+      132,  125,  151,  121,  124,  125,  128,  129,  129,  123,
+      134,  130,  136,  133,  131,  138,  137,  139,  130,  132,
+      135,  137,  135,  159,  136,  129,  134,  138,  129,  130,
+      141,  135,  140,  143,  143,  139,  145,  140,  159,  145,
+      150,  150,  182,  135,  141,  147,  182,  147,  147,  152,
+
+      147,  152,  152,  153,  152,  153,  153,  155,  153,  156,
+      155,  157,  158,  160,  156,  153,  161,  157,  163,  164,
+      165,  160,  166,  162,  167,  165,  157,  161,  160,  168,
+      158,  162,  169,  167,  164,  168,  168,  163,  170,  171,
+      171,  172,  166,  170,  173,  180,  173,  172,  176,  173,
+      174,  175,  175,  177,  174,  178,  179,  169,  177,  174,
+      178,  185,  184,  181,  174,  180,  173,  176,  179,  181,
+      174,  174,  183,  186,  187,  185,  188,  183,  184,  189,
+      190,  191,  191,  193,  189,  190,  187,  191,  186,  187,
+      192,  194,  181,  199,  188,  192,  195,  196,  196,  191,
+
+      197,  191,  195,  193,  198,  200,  197,  194,  201,  202,
+      198,  200,  197,  199,  201,  203,  208,  204,  205,  206,
+      207,  203,  204,  201,  205,  206,  209,  207,  210,  208,
+      202,  211,  209,  212,  213,  215,  214,  211,  216,  217,
+      215,  218,  213,  219,  222,  220,  224,  216,  210,  214,
+      220,  220,  223,  221,  217,  212,  223,  218,  221,  225,
+      226,  227,  222,  219,  228,  225,  229,  227,  224,  231,
+      230,  229,  230,  232,  235,  233,  234,  236,  226,  226,
+      232,  233,  234,  236,  228,  237,  238,  244,  231,  239,
+      239,  240,  240,  235,  245,  241,  242,  237,  247,  245,
+
+      238,  241,  242,  243,  246,  243,  248,  249,  250,  251,
+      244,  257,  252,  250,  248,  253,  246,  247,  252,  241,
+      254,  253,  243,  255,  256,  254,  257,  249,  255,  258,
+      256,  259,  251,  260,  261,  262,  264,  268,  263,  264,
+      266,  266,  261,  258,  263,  271,  265,  260,  265,  259,
+      267,  269,  269,  267,  272,  268,  270,  270,  277,  273,
+      262,  271,  273,  274,  275,  276,  285,  274,  278,  272,
+      280,  276,  277,  275,  278,  279,  280,  279,  281,  282,
+      282,  283,  281,  284,  286,  285,  283,  287,  288,  284,
+      289,  290,  290,  291,  292,  294,  291,  293,  296,  281,
+
+      149,  293,  298,  289,  286,  287,  295,  295,  297,  288,
+      301,  297,  292,  294,  298,  299,  296,  300,  303,  304,
+      300,  299,  301,  307,  315,  305,  307,  303,  297,  302,
+      305,  306,  308,  315,  306,  148,  306,  304,  302,  309,
+      310,  302,  310,  310,  313,  308,  302,  302,  302,  302,
+      311,  309,  306,  314,  312,  311,  311,  312,  316,  317,
+      317,  313,  319,  319,  313,  318,  320,  316,  314,  321,
+      318,  322,  323,  324,  321,  325,  326,  327,  327,  329,
+      327,  320,  326,  322,  335,  338,  338,  330,  331,  327,
+      325,  323,  330,  324,  331,  332,  333,  146,  335,  329,
+
+      332,  333,  336,  334,  337,  336,  334,  333,  334,  339,
+      340,  340,  341,  337,  344,  339,  342,  341,  336,  342,
+      346,  336,  345,  336,  144,  342,  348,  347,  350,  342,
+      351,  350,  357,  353,  344,  346,  354,  342,  343,  343,
+      348,  343,  347,  345,  351,  354,  355,  350,  353,  356,
+      358,  355,  355,  357,  343,  356,  359,  343,  360,  343,
+      361,  343,  352,  363,  352,  352,  362,  360,  364,  358,
+      365,  359,  362,  367,  352,  368,  352,  352,  352,  361,
+      366,  352,  369,  370,  365,  372,  366,  371,  364,  363,
+      366,  373,  371,  374,  374,  368,  367,  373,  370,  375,
+
+      372,  376,  369,  377,  378,  379,  380,  381,  382,  382,
+      378,  382,  381,  376,  383,  384,  385,  377,  387,  375,
+      387,  386,  380,  388,  389,  390,  390,  388,  389,  391,
+      379,  384,  385,  393,  383,  386,  392,  394,  387,  395,
+      397,  396,  399,  389,  403,  398,  397,  399,  391,  393,
+      396,  392,  400,  395,  398,  394,  400,  401,  402,  407,
+      142,  396,  404,  396,  402,  403,  401,  405,  404,  406,
+      409,  405,  408,  408,  406,  410,  410,  411,  412,  407,
+      413,  413,  411,  409,  414,  415,  416,  417,  418,  415,
+      414,  412,  419,  418,  420,  420,  422,  419,  421,  423,
+
+      424,  416,  425,  420,  429,  425,  427,  426,  417,  429,
+      421,  426,  424,  428,  428,  430,  422,  423,  427,  431,
+      431,  432,  434,  434,  435,  436,  437,  438,  439,  442,
+      441,  444,  443,  436,  447,  437,  430,  444,  446,  447,
+      439,  448,  445,  432,  446,  435,  443,  438,  441,  442,
+      441,  445,  449,  450,  451,  448,  450,  452,  453,  454,
+      449,  456,  455,  449,  453,  455,  457,  456,  451,  458,
+      459,  461,  452,  460,  458,  461,  462,  464,  463,  454,
+      457,  462,  464,  465,  466,  456,  470,  467,  473,  485,
+      508,  472,  459,  463,  460,  472,  471,  474,  475,  465,
+
+      467,   70,  475,  466,  468,  468,  470,  473,  508,  485,
+      468,  471,  468,  474,  477,  479,  476,  478,  468,  480,
+      468,  476,  478,  468,  468,  476,  481,  482,  480,  477,
+      468,  479,  481,  483,  484,  487,  483,  481,  486,  486,
+      488,  488,  490,  482,  489,  492,  491,  493,  494,  495,
+      497,  496,  518,  494,  490,  518,  498,  484,  495,  489,
+      487,  491,  498,  500,  492,  497,  503,  501,  502,  493,
+      496,  501,  500,  504,  502,  505,  506,  507,  503,  509,
+      510,  512,  511,  509,  511,  513,  513,  515,  504,  512,
+      506,  514,  507,  510,  505,  516,  517,  514,  519,  515,
+
+      520,  516,  521,  522,  523,  524,  522,  521,  517,  526,
+       64,  525,  519,  523,  533,  520,  525,  525,  527,  527,
+      523,  524,  526,  523,  528,  528,  529,  530,  530,  531,
+      531,  532,  529,  534,  535,  533,  534,  532,  536,  535,
+      537,  538,  539,  540,  538,  541,  542,  539,  537,  543,
+      542,  545,  544,  546,  547,  543,  544,  536,  546,  548,
+      550,  549,  551,  553,  541,  550,  540,  549,  555,  545,
+      547,  558,  552,  554,  554,  552,  551,  556,  557,  548,
+      552,  553,  556,  557,  552,  558,  555,  559,  561,  562,
+      563,  564,  565,  563,  561,  564,  566,  565,  562,  566,
+
+      567,  570,  559,  568,  569,  567,  572,  571,  570,  573,
+      577,  572,  574,  574,  575,  576,  578,  564,  579,  568,
+      571,  580,  569,  575,  586,  578,  577,  580,   59,  573,
+      579,  581,  582,  584,  576,  582,  584,  581,  583,  583,
+      585,  583,  586,  587,  588,  585,  589,  590,  596,  591,
+      588,  589,  591,  590,  592,  593,  594,  587,  595,  592,
+      593,  593,  598,  599,  597,  601,   54,  596,  596,  594,
+      597,  595,  599,  600,  602,  602,  603,  604,  600,  606,
+      604,  598,  605,  603,  607,  601,  610,  608,  605,  607,
+      612,  606,  608,  608,  614,  604,  609,  609,  611,  613,
+
+      611,  613,  615,  616,  617,  618,  620,  619,  621,  612,
+      620,  610,  614,  619,  622,  623,  624,  621,  625,  626,
+      615,  616,  628,  617,  627,  618,  629,  631,  628,  622,
+      623,  626,  630,  632,  624,  634,  636,  625,  633,  627,
+      629,  635,  633,  637,  630,  638,  631,  640,  640,  639,
+      642,  641,  632,  634,  636,  641,  643,  635,  644,  646,
+      645,  637,  637,  639,  638,  645,  647,  643,  648,  642,
+      649,  650,  644,  651,  652,  646,  650,  649,  653,  652,
+      651,  648,  654,  653,  655,  647,  656,  657,  658,  660,
+      659,  655,  663,  661,  660,  656,  661,  658,  664,  662,
+
+      654,  657,  659,  662,  665,  667,  663,  664,  666,  668,
+      668,  669,  669,  670,  670,  671,  673,  674,  675,  665,
+      669,  676,  666,  674,  671,  676,  667,  677,  678,  679,
+      680,  683,  681,  684,  682,  673,  680,  685,  675,  677,
+      681,  682,  694,  706,  691,  688,  695,  679,  706,  683,
+      696,  694,  695,  678,  698,  698,  701,  685,  684,  686,
+      688,  691,  700,  697,  686,  703,  696,  697,  686,  699,
+      699,  686,  702,  700,  701,  707,  704,  708,  686,  686,
+       53,  686,  704,  709,  710,  703,  702,  705,  705,  705,
+      711,  705,  715,  711,  705,  708,  707,  713,  709,  705,
+
+      712,  712,  714,  714,  713,  705,  705,  715,  717,  710,
+      716,  716,  718,  717,  719,  718,  720,  721,  720,  719,
+      722,  723,  724,  726,  725,  723,  727,  727,  732,  721,
+      728,  726,  729,  730,  730,  731,  733,  789,  734,  722,
+      732,  789,  724,  725,  734,  728,  729,  735,  736,  736,
+      737,  740,  735,  731,  739,  737,  737,  740,  733,  739,
+      741,  744,  742,  743,  744,  745,  741,  742,  746,  743,
+      749,  745,  747,  747,  748,  748,  746,  750,  749,  751,
+      752,  753,  754,  754,  751,  755,  757,  752,  756,  758,
+      760,  767,  757,  761,  755,  750,  756,  763,  762,  760,
+
+      753,  764,  761,  762,  764,  765,  763,  766,  758,  768,
+      765,  769,  771,  771,  770,  772,  767,  773,  768,  770,
+      770,  766,  774,  776,  769,  778,  776,  778,  779,  779,
+      772,  774,  780,  781,  776,  782,  773,  783,  781,  784,
+      785,  786,  787,  788,  792,  790,  791,   48,  794,  793,
+      792,  787,  795,  780,  796,  798,  782,  783,  793,  784,
+      794,  786,  785,  790,  797,  791,  788,  799,  796,  798,
+      797,  795,  799,  800,  800,  801,  802,  803,  804,  805,
+      806,  807,  809,  808,  810,  802,  804,  811,  809,  812,
+      813,  816,  819,  811,  817,  801,  813,  803,  810,  805,
+
+      807,  814,  806,  808,  815,  823,  817,  814,  815,  812,
+      816,  818,  824,  819,  817,  821,  818,  820,  820,  822,
+      825,  821,  822,  823,  826,  824,  825,  827,  827,  828,
+      829,  830,  830,  831,  832,  829,  833,  833,  832,  834,
+      835,  836,  839,  837,  826,  840,  836,  828,  831,  842,
+      843,  845,  845,  846,  849,  847,  896,  846,  851,  840,
+      835,  834,  837,  848,  848,  896,  839,   43,  852,  842,
+      847,  843,  844,  851,  850,  844,  854,  844,  850,  849,
+      853,  844,  852,  844,  856,  853,  855,  858,  844,  859,
+      854,  855,  855,  844,  859,  857,  860,  863,  856,  857,
+
+      861,  862,  858,  864,  859,  861,  865,  866,  860,  869,
+      867,  857,  865,  866,  869,  862,  867,  864,  863,  868,
+      868,  870,  871,  872,  875,  873,  876,  870,  878,  879,
+      879,  876,  880,  877,  882,  883,  875,  880,  884,  892,
+      878,  881,  872,  873,  871,  874,  874,  877,  882,  881,
+      885,  874,  892,  874,  883,  886,  886,  884,  887,  874,
+      889,  891,  887,  893,  874,  874,  889,  890,  885,  893,
+      890,  874,  894,  895,  897,  898,  899,  894,  900,  901,
+      891,  902,  899,  897,  903,  904,  902,  900,  905,  906,
+      909,  898,  895,  907,  908,  910,  909,  913,  901,  904,
+
+      911,  906,  907,  908,  903,  915,  911,  916,  905,  917,
+      918,  919,  910,  913,  928,  920,  921,  922,  925,  915,
+      928,  921,  922,  925,  918,  926,  929,  916,  917,  919,
+      920,  927,  927,  931,  926,  932,  935,  936,  937,  929,
+      932,  932,  933,  933,  934,  938,  933,  934,  939,  931,
+      935,  941,  943,  940,  942,  945,  937,  936,  938,  940,
+      942,  944,  947,  939,  948,  947,  944,  943,  949,  945,
+      950,  941,  951,  949,  952,  950,  953,  954,  956,  952,
+      957,  953,  960,  960,  956,  948,  958,  959,  951,  954,
+      961,  962,  958,  959,  963,  965,  957,  963,  966,  961,
+
+      964,  964,  967,  968,  970,  969,  968,  972,  971,  962,
+      970,  973,  972,  965,  971,  974,  973,  966,  969,  975,
+      974,  977,  967,  978,  979,  975,  980,  981,  981,  982,
+      979,  980,  983,  984,  985,  987,  988,  985,  982,  977,
+      989,  983,  986,  978,  990,  986,  987,  991,  996,  992,
+      993,  984,  989,  991,  988,  992,  994,  995,  995,  997,
+      998,  994,  999,  990, 1000,  993,  999,  996, 1001, 1002,
+     1003, 1005,  998,  997, 1006, 1006, 1009, 1001, 1008, 1011,
+     1012, 1010, 1000, 1014, 1011, 1013, 1013,   14, 1002, 1012,
+     1005, 1009, 1008, 1010, 1015, 1003, 1016, 1020, 1021, 1017,
+
+     1015, 1019, 1016, 1014, 1017, 1018, 1019, 1018, 1022, 1023,
+     1024, 1020, 1021, 1022, 1025, 1026, 1027, 1029, 1029, 1030,
+     1031, 1025, 1032, 1034, 1023, 1033, 1037, 1037, 1041, 1024,
+     1026, 1033, 1043, 1030, 1035, 1027, 1038, 1032, 1031, 1035,
+     1040, 1038, 1041, 1034, 1039, 1039, 1042, 1040, 1035, 1042,
+     1035, 1043, 1044, 1035, 1045, 1046, 1047, 1048, 1049, 1050,
+     1046, 1053, 1048, 1045, 1052, 1052, 1053, 1054, 1055, 1049,
+     1044, 1056, 1054, 1057, 1058, 1047, 1056, 1057, 1050, 1059,
+     1060, 1061, 1063, 1058, 1062, 1064, 1065, 1066, 1055, 1067,
+     1068, 1071, 1064, 1069, 1059, 1060, 1062, 1063, 1065, 1069,
+
+     1061, 1070, 1072, 1073, 1074, 1077, 1066, 1076, 1068, 1078,
+     1067, 1071, 1073, 1076, 1079, 1080, 1070, 1078, 1081, 1077,
+     1080, 1082, 1072, 1083, 1074, 1084, 1082, 1082, 1085, 1089,
+     1081, 1086, 1086, 1088, 1079, 1091, 1091,   13, 1089, 1084,
+     1092, 1085, 1083, 1087, 1090, 1092, 1088, 1094, 1087, 1093,
+     1090, 1087, 1087, 1094, 1095, 1096, 1087, 1098, 1093, 1095,
+     1096, 1101, 1087, 1097, 1097, 1102, 1087, 1099, 1099, 1100,
+     1103, 1104, 1100, 1106, 1100, 1105, 1107,    0, 1098, 1103,
+     1105, 1101, 1108, 1102, 1109, 1111, 1112, 1106, 1108, 1111,
+     1109, 1104, 1110, 1122, 1107, 1112, 1118, 1110, 1113, 1113,
+
+     1112, 1115, 1112, 1119, 1112, 1117, 1112, 1114, 1114, 1117,
+     1114, 1118, 1115, 1120, 1121, 1122, 1124, 1125, 1123, 1121,
+     1121, 1119, 1120, 1123, 1126, 1127, 1125, 1128, 1129, 1131,
+     1124, 1130, 1130, 1132, 1129, 1133, 1134, 1131, 1136, 1135,
+     1133, 1128, 1137, 1126, 1127, 1140, 1138, 1132, 1135, 1149,
+     1134, 1138, 1139, 1139, 1141, 1141, 1136, 1142, 1144, 1142,
+     1140, 1144, 1146, 1145, 1147, 1148, 1148, 1137, 1145, 1149,
+     1150, 1150, 1152, 1147, 1151, 1151, 1153, 1152, 1154, 1155,
+     1155, 1146, 1156, 1157, 1158, 1159, 1157, 1160, 1162, 1161,
+     1159, 1161, 1164, 1165,    0, 1164, 1160, 1153, 1166, 1154,
+
+     1167, 1168, 1156, 1166, 1158, 1167, 1162, 1169, 1165, 1168,
+     1170, 1172, 1169, 1171, 1171, 1170, 1172, 1173, 1174, 1175,
+     1176, 1178, 1179, 1181, 1174, 1180, 1175, 1178, 1179, 1181,
+     1180, 1182, 1183, 1176, 1184, 1173, 1185, 1185, 1186, 1188,
+     1182, 1189, 1190, 1191, 1192, 1184, 1194, 1195, 1190, 1191,
+     1192, 1183, 1194, 1196, 1197, 1198, 1199, 1201, 1186, 1188,
+     1202, 1195, 1200, 1200, 1189, 1203, 1197, 1195, 1206, 1198,
+     1204, 1205, 1205, 1196, 1199, 1204, 1207, 1201, 1209,    0,
+     1211, 1207, 1210, 1203, 1212, 1202, 1213, 1210, 1210, 1214,
+     1215, 1206, 1216, 1212, 1213, 1219, 1217, 1209, 1211, 1225,
+
+     1218, 1217, 1218, 1214, 1217, 1215, 1221, 1216, 1223, 1219,
+     1216, 1222, 1221, 1226, 1227, 1222, 1224, 1229, 1225, 1223,
+     1228, 1224, 1224, 1230, 1231, 1228, 1233, 1234, 1230, 1235,
+     1236, 1236, 1227, 1237, 1238, 1229, 1239, 1237, 1241, 1226,
+     1233, 1242, 1240, 1243, 1231, 1234, 1244, 1235, 1240, 1245,
+     1241, 1246, 1238, 1247, 1249, 1239, 1248, 1243, 1247, 1249,
+     1242, 1244, 1250, 1248, 1245, 1251, 1252, 1252, 1253, 1255,
+     1246, 1254, 1254, 1256, 1251, 1255, 1257, 1266, 1258, 1259,
+     1250, 1257,    0, 1253, 1258, 1259, 1260, 1260, 1261, 1261,
+     1263, 1263, 1264, 1265, 1256, 1266, 1264, 1267, 1268, 1269,
+
+     1270, 1270, 1265, 1271, 1272, 1273, 1269, 1274, 1275, 1276,
+     1273, 1267, 1272, 1268, 1276, 1276, 1278, 1279, 1279, 1277,
+     1280, 1274, 1281, 1271, 1277, 1277, 1282, 1275, 1283, 1284,
+     1285, 1286, 1287, 1283, 1289, 1282, 1278, 1288, 1287, 1280,
+     1290, 1281, 1288, 1291, 1294, 1292, 1290, 1293, 1284, 1286,
+     1285, 1292, 1295, 1293, 1296, 1297, 1298, 1299, 1301, 1301,
+     1289, 1300, 1291, 1294, 1302, 1303, 1309, 1302, 1304, 1304,
+     1298, 1295, 1308, 1296, 1297, 1309, 1300, 1303, 1299, 1305,
+     1305, 1306, 1310, 1307, 1313, 1308, 1306, 1307, 1311, 1313,
+     1311, 1314, 1315, 1316, 1311, 1310, 1317, 1317, 1318, 1319,
+
+     1320, 1321, 1325, 1318, 1327, 1319, 1314, 1311, 1322, 1316,
+     1326, 1331, 1315, 1322, 1321, 1320, 1323, 1324, 1333, 1328,
+     1323, 1324, 1325, 1337, 1327, 1328, 1329, 1329, 1326, 1331,
+     1334, 1335, 1335, 1343, 1336, 1334, 1339, 1339, 1341, 1333,
+     1336, 1341, 1344, 1337, 1342, 1342, 1347, 1346, 1348, 1343,
+     1346, 1349, 1349, 1350, 1351, 1352, 1353, 1348, 1344, 1354,
+     1356, 1353, 1355, 1355, 1357, 1358, 1347, 1360, 1350, 1359,
+     1359, 1361, 1362, 1354, 1352, 1351, 1363, 1362, 1356, 1357,
+     1365, 1360, 1364, 1364, 1365, 1366, 1367, 1367, 1368, 1361,
+     1358, 1363, 1369, 1370, 1371, 1372, 1375, 1370, 1374, 1374,
+
+     1372, 1376, 1377, 1369, 1378, 1366, 1379, 1380, 1380, 1382,
+     1368, 1381, 1383, 1371, 1375, 1376, 1381, 1384, 1378, 1385,
+     1386, 1377, 1377, 1387, 1385, 1387, 1384, 1390, 1388, 1382,
+     1389, 1379, 1383, 1388, 1393, 1391, 1389, 1394, 1394, 1395,
+     1386, 1391, 1399, 1396, 1403, 1398, 1402, 1390, 1393, 1396,
+     1398, 1400, 1400, 1401, 1401, 1404, 1405, 1407, 1395, 1405,
+     1402, 1408, 1403, 1406, 1406, 1409, 1399, 1410, 1409, 1407,
+     1404, 1409, 1411, 1410, 1415, 1412, 1414, 1411, 1412, 1415,
+     1416, 1408, 1418, 1409, 1417, 1414, 1419, 1417, 1418, 1420,
+     1420, 1419, 1421, 1421, 1412, 1422, 1424, 1423, 1425, 1426,
+
+     1427, 1422, 1423, 1428, 1429, 1416, 1428, 1430, 1432, 1424,
+     1429, 1433, 1431, 1430, 1432, 1437, 1425, 1431, 1426, 1434,
+     1427, 1435, 1435, 1436, 1434, 1438, 1439, 1440, 1436, 1441,
+     1443, 1444, 1445, 1437, 1433, 1446, 1447, 1448, 1445, 1449,
+     1457, 1440, 1443, 1441, 1444, 1438, 1439, 1451, 1451, 1452,
+     1455, 1448, 1453, 1454, 1454, 1446, 1447, 1453, 1456, 1458,
+     1449, 1459, 1462, 1460, 1457, 1455, 1461, 1463, 1467, 1452,
+     1459, 1462, 1456, 1461, 1462, 1465, 1468, 1458, 1460, 1468,
+     1469, 1469, 1471, 1463, 1470, 1470, 1472, 1475, 1473, 1476,
+     1465, 1473, 1479, 1467, 1471, 1465, 1474, 1474, 1477, 1480,
+
+     1475, 1478, 1482, 1477, 1472, 1481, 1478, 1483, 1476, 1484,
+     1487, 1479, 1486, 1486, 1481, 1480, 1483, 1485, 1484, 1483,
+     1488, 1482, 1489, 1485, 1490, 1491, 1495, 1492, 1496, 1498,
+     1487, 1497, 1497, 1488, 1499, 1501, 1501, 1500, 1490, 1492,
+     1489, 1491, 1500, 1499, 1502, 1498, 1496, 1503, 1504, 1505,
+     1501, 1495, 1506, 1502, 1508, 1509, 1502, 1506, 1506, 1510,
+     1513, 1511, 1514, 1514, 1520, 1503, 1511, 1505, 1508, 1504,
+     1509, 1512, 1521, 1515, 1523, 1516, 1517, 1512, 1513, 1515,
+     1516, 1510, 1517, 1518, 1520, 1522, 1521, 1523, 1525, 1518,
+     1524, 1522, 1527, 1524, 1525, 1529, 1530, 1531, 1532, 1524,
+
+     1527, 1537, 1537, 1533, 1534, 1531, 1535, 1532, 1536, 1541,
+     1542, 1540, 1538, 1539, 1529, 1530, 1533, 1534, 1538, 1539,
+     1535, 1543, 1536, 1537, 1540, 1544, 1545, 1546, 1542, 1541,
+     1547,    0, 1545, 1548, 1550, 1550, 1551, 1552, 1544, 1553,
+     1543, 1552, 1554, 1555, 1553, 1556, 1547, 1554, 1555, 1546,
+     1557, 1548, 1559, 1561, 1556, 1563, 1551, 1560, 1560, 1562,
+     1564, 1564, 1565, 1566, 1569, 1567, 1568, 1559, 1570, 1571,
+     1566, 1562, 1561, 1557, 1563, 1571, 1565, 1567, 1568, 1572,
+     1573, 1574,    0, 1569, 1575, 1575, 1576, 1574, 1570, 1576,
+     1579, 1572, 1577, 1577, 1580, 1579, 1581, 1583, 1573, 1582,
+
+     1582, 1586, 1581, 1580, 1584, 1585, 1584, 1587, 1585, 1583,
+     1588, 1590, 1589, 1591, 1592, 1594, 1590, 1593, 1595, 1596,
+     1594, 1586, 1591, 1600, 1600, 1602, 1592, 1595, 1588, 1587,
+     1589, 1597, 1593, 1598, 1599, 1601, 1597, 1603, 1598, 1596,
+     1595, 1601, 1604, 1597, 1605, 1606, 1602, 1606, 1611, 1599,
+     1614, 1607, 1608, 1608, 1609, 1609, 1603, 1615, 1604, 1610,
+     1610, 1612, 1612, 1619, 1605, 1607, 1619, 1607, 1611, 1613,
+     1613, 1614, 1616, 1616, 1618, 1617, 1621, 1622, 1615, 1617,
+     1618, 1623, 1621, 1624, 1629, 1625, 1630, 1623, 1625, 1626,
+     1626, 1627, 1627, 1628, 1631, 1622, 1629, 1629, 1629, 1628,
+
+     1633, 1632, 1636, 1629, 1635, 1642, 1630, 1632, 1624, 1635,
+     1635, 1637, 1638, 1637, 1631, 1639, 1636, 1641, 1640, 1643,
+     1633, 1644, 1644, 1638, 1640, 1642, 1641, 1645, 1646, 1646,
+     1639, 1647, 1648, 1649, 1649, 1650, 1650, 1651, 1654, 1654,
+     1643, 1655, 1659, 1656, 1660, 1663, 1658, 1661, 1661, 1662,
+     1660, 1647, 1656, 1645, 1648, 1658, 1666, 1651, 1664, 1665,
+     1663, 1667, 1667, 1659, 1668, 1664, 1655, 1669, 1665, 1671,
+     1662, 1672, 1673, 1674, 1671, 1675, 1681, 1672, 1676, 1680,
+     1674, 1675, 1666, 1669, 1676, 1677, 1677, 1679, 1678, 1682,
+     1668, 1683, 1673, 1678, 1683, 1681, 1679, 1684, 1685, 1680,
+
+     1687, 1682, 1686, 1686, 1689, 1688, 1687, 1690, 1692, 1693,
+     1696, 1690, 1694, 1695, 1695, 1684, 1699, 1694, 1697, 1689,
+     1703, 1703, 1700, 1702, 1685, 1688, 1700, 1690, 1692, 1696,
+     1701, 1693, 1702, 1697, 1704, 1699, 1701, 1705, 1704, 1706,
+     1706, 1707, 1708, 1713, 1709, 1710, 1711, 1712, 1705, 1713,
+     1710, 1718, 1715, 1705, 1714, 1718, 1708, 1715, 1716, 1716,
+     1717, 1717, 1707, 1709, 1720, 1721, 1711, 1712, 1722, 1714,
+     1723, 1723, 1725, 1720, 1724, 1724, 1721, 1725, 1725, 1726,
+     1727, 1721, 1728, 1730, 1729, 1726, 1727, 1731, 1722, 1729,
+     1733, 1735, 1734, 1731, 1736, 1730, 1734, 1740, 1737, 1738,
+
+     1739, 1742, 1733, 1735, 1737, 1743, 1739, 1744, 1728, 1740,
+     1750, 1746, 1744, 1742, 1746, 1747, 1747, 1748, 1748, 1736,
+     1751, 1738, 1749, 1749, 1743, 1752, 1751, 1753, 1754, 1755,
+     1750, 1752, 1753, 1759, 1754, 1757, 1759, 1760, 1755, 1763,
+     1757, 1761, 1761, 1764, 1767, 1765, 1766, 1766, 1771, 1760,
+     1765, 1763, 1768, 1767, 1769, 1764, 1772, 1768, 1773, 1769,
+     1770, 1770, 1774, 1775, 1776, 1772, 1777, 1775, 1771, 1776,
+     1778, 1779, 1777, 1780, 1784, 1781, 1773, 1785, 1783, 1783,
+     1779, 1774, 1786, 1786, 1787, 1788, 1785, 1789, 1778, 1781,
+     1783, 1780, 1784, 1787, 1790, 1796, 1791, 1788, 1796, 1790,
+
+     1794, 1794, 1797, 1798, 1802, 1800, 1803, 1801, 1789, 1791,
+     1802, 1804, 1804, 1805, 1807, 1805, 1806, 1806, 1797, 1798,
+     1800, 1801, 1807, 1803, 1809, 1810, 1811, 1811, 1812, 1813,
+     1814, 1809, 1815, 1817, 1816, 1819, 1818, 1812, 1821, 1824,
+     1822, 1819, 1814, 1825, 1815, 1810, 1816, 1823, 1823, 1828,
+     1813, 1818, 1822, 1826, 1819, 1827, 1826, 1824, 1821, 1817,
+     1827, 1830, 1831, 1825, 1831, 1832, 1830, 1833, 1834, 1828,
+     1836, 1838, 1833, 1839, 1840, 1834, 1841, 1842, 1841, 1836,
+     1845, 1847, 1839, 1832, 1852, 1844, 1840, 1844, 1848, 1838,
+     1846, 1846, 1853, 1848, 1845, 1849, 1842, 1849, 1850, 1851,
+
+     1854, 1856, 1852, 1850, 1851, 1855, 1854, 1847, 1857, 1859,
+     1855, 1860, 1853, 1864, 1856, 1863, 1857, 1861, 1861, 1862,
+     1862, 1865,    0, 1868, 1866, 1860, 1870, 1865, 1859, 1866,
+     1863, 1868, 1867, 1864, 1867, 1869, 1869, 1873, 1870, 1868,
+     1871, 1871, 1872, 1872, 1874, 1875, 1873, 1877, 1878, 1874,
+     1878, 1879, 1880, 1881, 1882, 1884, 1877, 1880, 1880, 1877,
+     1885, 1888, 1881, 1875, 1886, 1885, 1882, 1884, 1889, 1886,
+     1890, 1892, 1879, 1893, 1888, 1891, 1891, 1894, 1895, 1890,
+     1896, 1900, 1898, 1912, 1899, 1901, 1909,    0, 1889, 1892,
+     1901, 1893, 1895, 1894, 1898, 1896, 1899, 1902, 1903, 1906,
+
+     1908, 1900, 1902, 1911, 1910, 1906, 1908, 1903, 1912, 1909,
+     1917, 1913, 1914, 1914, 1915, 1916, 1916,    0, 1906, 1910,
+     1913, 1911, 1918, 1915, 1920, 1919, 1918, 1921, 1922, 1917,
+     1919, 1926, 1921, 1921, 1922, 1923, 1924, 1920, 1925, 1924,
+     1931, 1923, 1929, 1929, 1930, 1930, 1925, 1932, 1932, 1931,
+     1934, 1926, 1933, 1933, 1935, 1936, 1938, 1938, 1937, 1930,
+     1944, 1936, 1934, 1937, 1939, 1939, 1940, 1941, 1947, 1949,
+     1930, 1940, 1935, 1941, 1943, 1945, 1948, 1952, 1943, 1945,
+     1944, 1948, 1950, 1951, 1953, 1954, 1955, 1956, 1951, 1957,
+     1957, 1955, 1949, 1947, 1958, 1952, 1959, 1950, 1958, 1960,
+
+     1953, 1961, 1962, 1963, 1960, 1954, 1965, 1964, 1966, 1956,
+     1969, 1959, 1964, 1970, 1962, 1967, 1967, 1971, 1969, 1965,
+     1972, 1973, 1963, 1974, 1979, 1975, 1966, 1961, 1976, 1977,
+     1980, 1980, 1970, 1983, 1981, 1982, 1971, 1981, 1984, 1979,
+     1976,    0, 1974, 1972, 1988, 1973, 1975, 1983, 1982, 1989,
+     1977, 1984, 1985, 1985, 1986, 1986, 1987, 1987, 1991, 1988,
+     1990, 1990, 1989, 1992, 1992, 1996, 1993, 1991, 1995, 1997,
+     1991, 1993, 1998, 1995, 1999, 1999, 2000, 2000, 2001, 2002,
+     2002, 2003, 2004, 2004, 1998, 1996, 2005, 2006, 2009, 1997,
+     2007, 2007, 2006, 2008, 2008, 2010, 2011, 2001, 2012, 2003,
+
+     2014, 2005, 2009, 2016, 2010, 2014, 2015, 2015, 2017, 2017,
+     2011, 2018, 2019, 2020, 2021, 2021, 2020, 2012, 2019, 2022,
+     2022, 2023, 2016, 2024, 2025, 2026, 2026, 2028, 2029, 2018,
+     2021, 2030, 2031, 2032, 2032, 2033, 2031, 2034, 2024, 2038,
+     2023, 2035, 2039, 2025, 2037, 2037, 2030, 2028, 2040, 2039,
+     2041, 2029, 2034, 2042, 2033, 2043, 2035, 2044, 2044, 2038,
+     2045, 2046, 2040, 2046, 2047, 2049, 2052, 2047, 2041, 2045,
+     2050, 2042, 2053, 2051, 2054, 2050, 2056, 2049, 2051, 2062,
+     2066, 2043, 2047, 2055, 2047, 2053, 2060, 2058, 2055, 2059,
+     2061, 2052, 2058, 2063, 2059, 2054, 2061, 2067, 2064, 2063,
+
+     2062, 2060, 2056, 2064, 2065, 2066, 2069, 2070, 2068, 2065,
+     2067, 2068, 2071, 2072, 2073, 2069, 2070, 2074, 2075, 2078,
+     2084, 2071, 2072, 2074, 2075, 2076, 2080, 2082, 2073, 2076,
+     2081, 2081, 2086, 2082, 2087, 2080, 2083, 2083, 2089, 2078,
+     2084, 2093, 2084, 2088, 2088, 2083, 2090, 2092, 2086, 2094,
+     2087, 2095, 2099, 2089, 2100, 2090, 2107, 2093, 2097, 2092,
+     2098, 2097, 2107, 2095, 2094, 2098, 2100, 2101, 2101, 2102,
+     2102, 2106, 2099, 2104, 2104, 2105, 2106, 2108, 2105, 2109,
+     2109, 2110, 2112, 2108, 2111, 2111, 2113, 2114, 2115, 2115,
+     2116, 2117, 2118, 2125, 2112, 2110, 2116, 2118, 2120,    0,
+
+     2113, 2121, 2120, 2124, 2121, 2117, 2114, 2122, 2122, 2123,
+     2128, 2126, 2124, 2125, 2123, 2126, 2127, 2127, 2131, 2130,
+     2132, 2133, 2134, 2128, 2130, 2135, 2134, 2136, 2137, 2139,
+     2138, 2144, 2136, 2141, 2137, 2133, 2138, 2142, 2131, 2144,
+     2132, 2145, 2142, 2145, 2143, 2135, 2148, 2139, 2151, 2141,
+     2143, 2149, 2149, 2150, 2152, 2152, 2150, 2154, 2155, 2156,
+     2148, 2154, 2157, 2157, 2155, 2163, 2158, 2161, 2161, 2166,
+     2165, 2156, 2169, 2170, 2151, 2158, 2171, 2169, 2173, 2173,
+     2177, 2171, 2172, 2163, 2165, 2166, 2177, 2172, 2175, 2175,
+     2178, 2178, 2179, 2180, 2183, 2181, 2187, 2184, 2188, 2170,
+
+     2181, 2185, 2185, 2189, 2188, 2187, 2193, 2190, 2179, 2184,
+     2192, 2192, 2194, 2183, 2199, 2180, 2196, 2196, 2197, 2197,
+     2200, 2189, 2190, 2198, 2203, 2193, 2201, 2204, 2198, 2200,
+     2194, 2201, 2199, 2202, 2205, 2202, 2207, 2206, 2203, 2208,
+     2214, 2204, 2206, 2213, 2208,    0, 2205, 2209, 2209, 2210,
+     2210, 2211, 2211, 2212, 2212, 2213, 2207, 2215, 2214, 2216,
+     2216, 2218, 2215, 2217, 2217, 2219, 2220, 2221, 2222, 2222,
+     2223, 2224, 2224, 2218, 2225, 2225, 2226, 2219, 2227, 2229,
+     2230, 2228, 2232, 2221, 2233, 2236, 2220, 2226, 2228, 2223,
+     2227, 2229, 2231, 2234, 2234, 2237, 2235, 2231, 2239, 2238,
+
+     2230, 2242, 2232, 2240, 2233, 2235, 2241, 2241, 2243, 2244,
+     2242, 2236, 2238, 2246, 2247, 2237, 2248, 2240, 2249, 2250,
+     2251, 2249, 2239, 2243, 2244, 2251, 2260, 2252, 2253, 2253,
+     2262, 2246, 2252, 2250, 2254, 2254, 2247, 2255, 2255, 2248,
+     2257, 2257, 2259, 2259, 2260, 2261, 2264, 2265, 2266, 2262,
+     2268, 2267, 2269, 2270, 2271, 2270, 2261, 2272, 2273, 2268,
+     2274, 2274, 2276, 2276, 2277, 2265, 2264, 2283, 2278, 2284,
+     2266, 2267, 2269, 2281, 2271, 2272, 2273, 2278, 2279, 2279,
+     2282, 2282, 2281, 2285, 2286, 2283, 2277, 2284, 2287, 2288,
+     2285, 2290, 2289, 2291, 2291, 2292, 2292, 2293, 2294, 2286,
+
+     2295, 2296, 2298, 2293, 2297, 2299, 2287, 2288, 2289, 2297,
+     2290, 2301, 2300, 2301, 2306, 2295, 2294, 2300, 2302, 2302,
+     2296, 2303, 2298, 2303, 2309, 2299, 2304, 2304, 2308, 2310,
+     2311, 2312, 2313, 2306, 2314, 2317, 2312, 2308, 2321, 2318,
+     2330, 2310, 2318, 2309, 2319, 2319, 2320, 2322, 2322, 2325,
+     2311, 2331, 2313, 2314, 2323, 2317, 2321, 2328, 2323, 2326,
+     2330, 2320, 2334, 2326, 2325, 2327, 2327, 2332, 2332, 2335,
+     2328, 2331, 2336, 2338, 2334, 2341, 2336, 2342, 2335, 2337,
+     2337, 2339, 2339, 2340, 2341, 2343, 2344, 2344, 2340, 2349,
+     2349, 2350, 2338, 2342, 2351, 2351, 2352, 2343, 2353, 2354,
+
+     2357, 2355, 2356, 2356, 2359, 2359, 2364, 2362, 2354, 2352,
+     2355, 2353, 2362, 2350, 2363, 2357, 2365, 2366, 2367, 2363,
+     2364, 2365, 2368, 2371, 2369, 2366, 2374, 2379, 2372, 2373,
+        0, 2368, 2369, 2372, 2373, 2375, 2375, 2367, 2371, 2376,
+     2376, 2374, 2377, 2378, 2380, 2379, 2381,    0, 2378, 2377,
+     2382, 2384, 2381, 2383, 2383, 2382, 2385, 2386, 2386, 2387,
+     2387, 2385, 2380, 2390, 2391, 2391, 2384, 2392, 2393, 2402,
+     2392, 2415, 2394, 2393, 2393, 2395, 2390, 2394, 2396, 2397,
+     2395, 2398, 2399, 2397, 2396, 2400, 2398, 2401, 2403, 2415,
+     2402, 2399, 2404, 2406, 2403, 2401, 2405, 2408, 2404, 2411,
+
+     2400, 2405, 2408, 2409, 2413, 2406, 2409, 2414, 2416, 2413,
+     2417, 2411, 2414, 2418, 2419, 2419, 2420, 2423, 2424, 2417,
+     2425, 2416, 2418, 2426, 2426, 2420, 2427, 2429, 2428, 2430,
+     2430, 2431, 2433, 2435, 2437, 2437, 2423, 2428, 2424, 2425,
+     2436, 2438, 2429, 2439, 2436, 2427, 2440, 2433, 2441, 2439,
+     2431, 2443, 2440, 2435, 2441, 2442, 2442, 2444, 2446, 2443,
+     2447, 2449, 2444, 2450, 2451, 2449, 2438, 2446, 2453, 2453,
+     2454, 2454, 2458, 2447, 2455, 2455, 2458, 2450, 2459, 2451,
+     2457, 2457, 2463, 2459, 2461, 2461, 2464, 2465, 2466, 2468,
+     2476, 2464, 2474, 2466, 2466, 2469, 2469, 2471, 2471, 2465,
+
+     2472, 2472, 2463, 2473, 2478, 2474, 2473, 2482, 2476, 2468,
+     2479, 2479, 2480, 2480, 2481, 2481, 2483, 2483, 2484, 2485,
+     2486, 2487, 2482, 2493, 2478, 2488, 2488, 2487, 2489, 2494,
+     2492, 2484, 2489, 2495, 2486, 2492, 2492, 2485, 2496, 2497,
+     2498, 2500, 2500, 2499, 2496, 2497, 2493, 2499, 2505, 2494,
+     2503, 2506, 2508, 2495, 2506, 2503, 2505, 2509, 2510, 2511,
+     2509, 2512, 2513,    0, 2511, 2498, 2514, 2515, 2515, 2516,
+     2517, 2518, 2519, 2517, 2522, 2510, 2510, 2508, 2520, 2512,
+     2514, 2517, 2513, 2516, 2521, 2518, 2520, 2523, 2523, 2521,
+     2521, 2519, 2528, 2522, 2524, 2524, 2525, 2525, 2526, 2526,
+
+     2527, 2527, 2529, 2530, 2531, 2532, 2533, 2529, 2528, 2534,
+     2536, 2536, 2537, 2538, 2532, 2537, 2540, 2540, 2541, 2542,
+     2542, 2550, 2543, 2530,    0, 2541, 2533, 2543, 2546, 2534,
+     2531, 2538, 2545, 2545, 2547, 2548, 2553, 2546, 2552, 2550,
+     2551, 2551, 2552, 2547, 2548, 2553, 2554, 2555, 2557, 2556,
+     2561, 2565, 2555, 2555, 2566, 2561, 2567, 2557, 2562, 2562,
+     2569, 2554, 2556, 2564, 2564, 2565, 2570, 2573, 2574, 2569,
+     2575, 2578, 2580,    0, 2567, 2576, 2626, 2574, 2570, 2566,
+     2582, 2576, 2583, 2578, 2626, 2582, 2585, 2583, 2584, 2584,
+     2575, 2587, 2573, 2580, 2594, 2585, 2587, 2588, 2588, 2590,
+
+     2590, 2588, 2591, 2591, 2592, 2592, 2593, 2595, 2596, 2602,
+     2598, 2603, 2599, 2596, 2594, 2593, 2598, 2599, 2600, 2601,
+     2601, 2605, 2606, 2600, 2604, 2607, 2595, 2602, 2606, 2604,
+     2608, 2608, 2603, 2610, 2614, 2611, 2612, 2610, 2616, 2605,
+     2611, 2612, 2613, 2613, 2615, 2618, 2618, 2620, 2621, 2624,
+     2607, 2622, 2625, 2614, 2623, 2622, 2628, 2627, 2616, 2615,
+     2620, 2621, 2627, 2623, 2630, 2624, 2629, 2629, 2632, 2632,
+     2635, 2625, 2633, 2633, 2637, 2637, 2639, 2640, 2641, 2642,
+     2644, 2644, 2628, 2630, 2642, 2645, 2646, 2647, 2649, 2649,
+     2650, 2635, 2639, 2640, 2641, 2651, 2651, 2654, 2656, 2657,
+
+     2660, 2655, 2664, 2656, 2650, 2645, 2647, 2655, 2662, 2646,
+     2658, 2658, 2659, 2659, 2661, 2661, 2663, 2654, 2665, 2662,
+     2660, 2657, 2664, 2666, 2665, 2663, 2667, 2668, 2669, 2669,
+     2670, 2671, 2671, 2670, 2661, 2676, 2675, 2677, 2667, 2678,
+     2678, 2679, 2666, 2677, 2679, 2680, 2681, 2668, 2675, 2683,
+     2685, 2680, 2684, 2686, 2683, 2676, 2687, 2684, 2690, 2686,
+     2688, 2688, 2691, 2692, 2681, 2693, 2694, 2694, 2695, 2685,
+     2690, 2701, 2696, 2687, 2687, 2698, 2698,    0, 2693, 2700,
+     2691, 2696, 2699, 2699, 2700, 2701, 2702, 2695, 2692, 2703,
+     2703, 2702, 2704, 2704, 2705, 2705, 2706, 2708, 2708, 2711,
+
+     2713, 2706, 2714, 2715, 2716, 2716, 2718, 2718, 2720, 2719,
+     2721, 2722, 2722, 2725, 2724, 2726, 2727,    0, 2711, 2721,
+     2724, 2727, 2713, 2719, 2714, 2715, 2730, 2730, 2720, 2732,
+     2732, 2733, 2734, 2725, 2726, 2735, 2733, 2736, 2741, 2737,
+     2739, 2735, 2738, 2738, 2742, 2739, 2734, 2737, 2743, 2736,
+     2744, 2745, 2747, 2743, 2748, 2749, 2750, 2745, 2741, 2751,
+     2747, 2758, 2744, 2752, 2742, 2753, 2754, 2755, 2762, 2757,
+     2766, 2766, 2755, 2748, 2757, 2749, 2750, 2751, 2759, 2752,
+     2760, 2758, 2753, 2753, 2759, 2760, 2763, 2754, 2762, 2767,
+     2767, 2768, 2772, 2772, 2778, 2768, 2774, 2774, 2778, 2763,
+
+     2775, 2775, 2781, 2775, 2776, 2776, 2784, 2776, 2777, 2777,
+     2782, 2777, 2780, 2780, 2785, 2790, 2786, 2787, 2787, 2792,
+     2781, 2786, 2791, 2792, 2782, 2805, 2784, 2793, 2794, 2791,
+     2796, 2805, 2797, 2831, 2785, 2801, 2793, 2798, 2798, 2806,
+     2790, 2797, 2831, 2794, 2799, 2799, 2800, 2800, 2796, 2802,
+     2801, 2803, 2804, 2807, 2802, 2808, 2809, 2804, 2804, 2811,
+     2803, 2809, 2810, 2803, 2806, 2812, 2812, 2810, 2807, 2813,
+     2883, 2814, 2815, 2815, 2883, 2813, 2808, 2814, 2811, 2816,
+     2816, 2817, 2820, 2820, 2823, 2823, 2817, 2824, 2824, 2825,
+     2825, 2826, 2826, 2827, 2827, 2828, 2828, 2829, 2829, 2832,
+
+     2832, 2833, 2834, 2835, 2839, 2837, 2838, 2838, 2840, 2847,
+     2833, 2842, 2842, 2841, 2834, 2843, 2844, 2844, 2849, 2839,
+     2851, 2840, 2854, 2835, 2837, 2841, 2848, 2847, 2854, 2848,
+     2843, 2850, 2850, 2853, 2855, 2856, 2853, 2857, 2851, 2858,
+     2856, 2861, 2859, 2862, 2849, 2865, 2874, 2861, 2855, 2874,
+     2876, 2881, 2862, 2877, 2877, 2884, 2857, 2858, 2859, 2882,
+     2865, 2878, 2878, 2876, 2879, 2879, 2885, 2887, 2882, 2891,
+     2888, 2889, 2892, 2892, 2881, 2884, 2889, 2890, 2893, 2890,
+     2885, 2888, 2894, 2896, 2891, 2895, 2897, 2898, 2899, 2901,
+     2887, 2893, 2900, 2902, 2907, 2903, 2908, 2899, 2910, 2896,
+
+     2903, 2894, 2898, 2895, 2900, 2909, 2909, 2910, 2907, 2915,
+     2901, 2897, 2916, 2902, 2911, 2911, 2908, 2912, 2912, 2913,
+     2913, 2914, 2914, 2917, 2918, 2919, 2917, 2920, 2915, 2918,
+     2919, 2921, 2916, 2922, 2923, 2924, 2925, 2926, 2928, 2922,
+     2929, 2925, 2927, 2927, 2930, 2930, 2921, 2924, 2923, 2932,
+     2934, 2940, 2920, 2928, 2937, 2937, 2941, 2926, 2939, 2929,
+     2938, 2938, 2941, 2942, 2932, 2943, 2939, 2944, 2934, 2942,
+     2940, 2945, 2946, 2947, 2947, 2948, 2948, 2946, 2950, 2943,
+     2944, 2951, 2953, 2954, 2956, 2959, 2957, 2954, 2958, 2960,
+     2945, 2957, 2961, 2964, 2964, 2962, 2953, 2967, 2959, 2950,
+
+     2962, 2951, 2960, 2963, 2956, 2968, 2969, 2958, 2963, 2970,
+     2970, 2961, 2977, 2971, 2972, 2973, 2973, 2967, 2971, 2974,
+     2972, 2975, 2976, 2968, 2974, 2969, 2975, 2976, 2978, 2980,
+     2980, 2977, 2981, 2985, 2978, 2982, 2982, 2981, 2984, 2986,
+     2987, 2988, 2984, 2989, 2990, 2991, 2986, 2993, 2993, 2989,
+     2995, 2995, 2985, 2996, 2998, 2999, 2997, 3000, 2991, 2987,
+     2988, 2997, 2996, 2990, 3002, 2996, 3001, 3001, 3003, 3002,
+     3000, 3005, 3007, 2998, 2999, 3006, 3006, 3008, 3008, 3009,
+     3009, 3003, 3010, 3011, 3012, 3013, 3013, 3010, 3014, 3019,
+     3011, 3007, 3015, 3014, 3015, 3016, 3016, 3005, 3017, 3018,
+
+     3021, 3024, 3020, 3012, 3028, 3017, 3018, 3020, 3019, 3023,
+     3023, 3026, 3027, 3029, 3030, 3030, 3026, 3027, 3033, 3021,
+     3024, 3032, 3032, 3028, 3034, 3035, 3035, 3036, 3036, 3037,
+     3039, 3039, 3029, 3040, 3040, 3041, 3037, 3033, 3047, 3043,
+     3046, 3048, 3041, 3034, 3043, 3046, 3049, 3049, 3050, 3050,
+        0,    0,    0,    0,    0,    0,    0, 3047,    0,    0,
+     3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3055, 3055,
+     3055, 3055, 3055, 3055, 3055, 3056, 3056, 3056, 3056, 3056,
+     3056, 3056, 3057, 3057, 3057, 3057, 3057, 3057, 3057, 3058,
+     3058, 3058, 3058, 3058, 3058, 3058, 3060, 3060,    0, 3060,
+
+     3060, 3060, 3060, 3061, 3061,    0,    0,    0, 3061, 3061,
+     3062, 3062,    0,    0, 3062,    0, 3062, 3063,    0,    0,
+        0,    0,    0, 3063, 3064, 3064,    0,    0,    0, 3064,
+     3064, 3065,    0,    0,    0,    0,    0, 3065, 3066, 3066,
+        0, 3066, 3066, 3066, 3066, 3067, 3067,    0, 3067, 3067,
+     3067, 3067, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053,
+     3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053,
+     3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053,
+     3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053,
+     3053, 3053, 3053
+
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -2938,7 +2949,7 @@ static void config_end_include(void)
         }
 #endif
 
-#line 2939 "<stdout>"
+#line 2951 "<stdout>"
 #define YY_NO_INPUT 1
 #line 184 "./util/configlexer.lex"
 #ifndef YY_NO_UNPUT
@@ -2947,9 +2958,9 @@ static void config_end_include(void)
 #ifndef YY_NO_INPUT
 #define YY_NO_INPUT 1
 #endif
-#line 2948 "<stdout>"
+#line 2960 "<stdout>"
 
-#line 2950 "<stdout>"
+#line 2962 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -3171,7 +3182,7 @@ YY_DECL
        {
 #line 204 "./util/configlexer.lex"
 
-#line 3172 "<stdout>"
+#line 3184 "<stdout>"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -3204,13 +3215,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 3044 )
+                               if ( yy_current_state >= 3054 )
                                        yy_c = yy_meta[yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 5927 );
+               while ( yy_base[yy_current_state] != 5953 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -3455,17 +3466,17 @@ YY_RULE_SETUP
 case 44:
 YY_RULE_SETUP
 #line 251 "./util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSTEMD) }
+{ YDVAR(1, VAR_HTTPS_PORT) }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 252 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DO_DAEMONIZE) }
+{ YDVAR(1, VAR_USE_SYSTEMD) }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 253 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INTERFACE) }
+{ YDVAR(1, VAR_DO_DAEMONIZE) }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
@@ -3475,282 +3486,282 @@ YY_RULE_SETUP
 case 48:
 YY_RULE_SETUP
 #line 255 "./util/configlexer.lex"
-{ YDVAR(1, VAR_OUTGOING_INTERFACE) }
+{ YDVAR(1, VAR_INTERFACE) }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
 #line 256 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
+{ YDVAR(1, VAR_OUTGOING_INTERFACE) }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 257 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SO_RCVBUF) }
+{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 258 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SO_SNDBUF) }
+{ YDVAR(1, VAR_SO_RCVBUF) }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 259 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SO_REUSEPORT) }
+{ YDVAR(1, VAR_SO_SNDBUF) }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 260 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IP_TRANSPARENT) }
+{ YDVAR(1, VAR_SO_REUSEPORT) }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 261 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IP_FREEBIND) }
+{ YDVAR(1, VAR_IP_TRANSPARENT) }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 262 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CHROOT) }
+{ YDVAR(1, VAR_IP_FREEBIND) }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 263 "./util/configlexer.lex"
-{ YDVAR(1, VAR_USERNAME) }
+{ YDVAR(1, VAR_CHROOT) }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 264 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DIRECTORY) }
+{ YDVAR(1, VAR_USERNAME) }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 265 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOGFILE) }
+{ YDVAR(1, VAR_DIRECTORY) }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 266 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PIDFILE) }
+{ YDVAR(1, VAR_LOGFILE) }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 267 "./util/configlexer.lex"
-{ YDVAR(1, VAR_ROOT_HINTS) }
+{ YDVAR(1, VAR_PIDFILE) }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 268 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STREAM_WAIT_SIZE) }
+{ YDVAR(1, VAR_ROOT_HINTS) }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 269 "./util/configlexer.lex"
-{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
+{ YDVAR(1, VAR_STREAM_WAIT_SIZE) }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 270 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
+{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 271 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
+{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 272 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
+{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 273 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
+{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 274 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
+{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 275 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MAX_TTL) }
+{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 276 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
+{ YDVAR(1, VAR_CACHE_MAX_TTL) }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 277 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MIN_TTL) }
+{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
 #line 278 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_HOST_TTL) }
+{ YDVAR(1, VAR_CACHE_MIN_TTL) }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
 #line 279 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_LAME_TTL) }
+{ YDVAR(1, VAR_INFRA_HOST_TTL) }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 280 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
+{ YDVAR(1, VAR_INFRA_LAME_TTL) }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
 #line 281 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
+{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
 #line 282 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
+{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
 #line 283 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
+{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
 #line 284 "./util/configlexer.lex"
-{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
+{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
 #line 285 "./util/configlexer.lex"
-{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
+{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
 #line 286 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DELAY_CLOSE) }
+{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
 #line 287 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
+{ YDVAR(1, VAR_DELAY_CLOSE) }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 288 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
+{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
 #line 289 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
+{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
 #line 290 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_GLUE) }
+{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
 #line 291 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
+{ YDVAR(1, VAR_HARDEN_GLUE) }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
 #line 292 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
+{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
 #line 293 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
+{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 294 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
+{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
 #line 295 "./util/configlexer.lex"
-{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
+{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 296 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CAPS_WHITELIST) }
+{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 297 "./util/configlexer.lex"
-{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
+{ YDVAR(1, VAR_CAPS_WHITELIST) }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 298 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
+{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 299 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
+{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
 #line 300 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH_KEY) }
+{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 301 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH) }
+{ YDVAR(1, VAR_PREFETCH_KEY) }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 302 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DENY_ANY) }
+{ YDVAR(1, VAR_PREFETCH) }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 303 "./util/configlexer.lex"
-{ YDVAR(0, VAR_STUB_ZONE) }
+{ YDVAR(1, VAR_DENY_ANY) }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 304 "./util/configlexer.lex"
-{ YDVAR(1, VAR_NAME) }
+{ YDVAR(0, VAR_STUB_ZONE) }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
 #line 305 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_ADDR) }
+{ YDVAR(1, VAR_NAME) }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
 #line 306 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_HOST) }
+{ YDVAR(1, VAR_STUB_ADDR) }
        YY_BREAK
 case 100:
 YY_RULE_SETUP
 #line 307 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_PRIME) }
+{ YDVAR(1, VAR_STUB_HOST) }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
 #line 308 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_FIRST) }
+{ YDVAR(1, VAR_STUB_PRIME) }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 309 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_NO_CACHE) }
+{ YDVAR(1, VAR_STUB_FIRST) }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
 #line 310 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
+{ YDVAR(1, VAR_STUB_NO_CACHE) }
        YY_BREAK
 case 104:
 YY_RULE_SETUP
@@ -3760,32 +3771,32 @@ YY_RULE_SETUP
 case 105:
 YY_RULE_SETUP
 #line 312 "./util/configlexer.lex"
-{ YDVAR(0, VAR_FORWARD_ZONE) }
+{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
 #line 313 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_ADDR) }
+{ YDVAR(0, VAR_FORWARD_ZONE) }
        YY_BREAK
 case 107:
 YY_RULE_SETUP
 #line 314 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_HOST) }
+{ YDVAR(1, VAR_FORWARD_ADDR) }
        YY_BREAK
 case 108:
 YY_RULE_SETUP
 #line 315 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_FIRST) }
+{ YDVAR(1, VAR_FORWARD_HOST) }
        YY_BREAK
 case 109:
 YY_RULE_SETUP
 #line 316 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_NO_CACHE) }
+{ YDVAR(1, VAR_FORWARD_FIRST) }
        YY_BREAK
 case 110:
 YY_RULE_SETUP
 #line 317 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
+{ YDVAR(1, VAR_FORWARD_NO_CACHE) }
        YY_BREAK
 case 111:
 YY_RULE_SETUP
@@ -3795,731 +3806,731 @@ YY_RULE_SETUP
 case 112:
 YY_RULE_SETUP
 #line 319 "./util/configlexer.lex"
-{ YDVAR(0, VAR_AUTH_ZONE) }
+{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
        YY_BREAK
 case 113:
 YY_RULE_SETUP
 #line 320 "./util/configlexer.lex"
-{ YDVAR(0, VAR_RPZ) }
+{ YDVAR(0, VAR_AUTH_ZONE) }
        YY_BREAK
 case 114:
 YY_RULE_SETUP
 #line 321 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TAGS) }
+{ YDVAR(0, VAR_RPZ) }
        YY_BREAK
 case 115:
 YY_RULE_SETUP
 #line 322 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) }
+{ YDVAR(1, VAR_TAGS) }
        YY_BREAK
 case 116:
 YY_RULE_SETUP
 #line 323 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) }
+{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) }
        YY_BREAK
 case 117:
 YY_RULE_SETUP
 #line 324 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RPZ_LOG) }
+{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) }
        YY_BREAK
 case 118:
 YY_RULE_SETUP
 #line 325 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RPZ_LOG_NAME) }
+{ YDVAR(1, VAR_RPZ_LOG) }
        YY_BREAK
 case 119:
 YY_RULE_SETUP
 #line 326 "./util/configlexer.lex"
-{ YDVAR(1, VAR_ZONEFILE) }
+{ YDVAR(1, VAR_RPZ_LOG_NAME) }
        YY_BREAK
 case 120:
 YY_RULE_SETUP
 #line 327 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MASTER) }
+{ YDVAR(1, VAR_ZONEFILE) }
        YY_BREAK
 case 121:
 YY_RULE_SETUP
 #line 328 "./util/configlexer.lex"
-{ YDVAR(1, VAR_URL) }
+{ YDVAR(1, VAR_MASTER) }
        YY_BREAK
 case 122:
 YY_RULE_SETUP
 #line 329 "./util/configlexer.lex"
-{ YDVAR(1, VAR_ALLOW_NOTIFY) }
+{ YDVAR(1, VAR_URL) }
        YY_BREAK
 case 123:
 YY_RULE_SETUP
 #line 330 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FOR_DOWNSTREAM) }
+{ YDVAR(1, VAR_ALLOW_NOTIFY) }
        YY_BREAK
 case 124:
 YY_RULE_SETUP
 #line 331 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FOR_UPSTREAM) }
+{ YDVAR(1, VAR_FOR_DOWNSTREAM) }
        YY_BREAK
 case 125:
 YY_RULE_SETUP
 #line 332 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FALLBACK_ENABLED) }
+{ YDVAR(1, VAR_FOR_UPSTREAM) }
        YY_BREAK
 case 126:
 YY_RULE_SETUP
 #line 333 "./util/configlexer.lex"
-{ YDVAR(0, VAR_VIEW) }
+{ YDVAR(1, VAR_FALLBACK_ENABLED) }
        YY_BREAK
 case 127:
 YY_RULE_SETUP
 #line 334 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VIEW_FIRST) }
+{ YDVAR(0, VAR_VIEW) }
        YY_BREAK
 case 128:
 YY_RULE_SETUP
 #line 335 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
+{ YDVAR(1, VAR_VIEW_FIRST) }
        YY_BREAK
 case 129:
 YY_RULE_SETUP
 #line 336 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
        YY_BREAK
 case 130:
 YY_RULE_SETUP
 #line 337 "./util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
        YY_BREAK
 case 131:
 YY_RULE_SETUP
 #line 338 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) }
+{ YDVAR(2, VAR_ACCESS_CONTROL) }
        YY_BREAK
 case 132:
 YY_RULE_SETUP
 #line 339 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) }
+{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) }
        YY_BREAK
 case 133:
 YY_RULE_SETUP
 #line 340 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) }
+{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) }
        YY_BREAK
 case 134:
 YY_RULE_SETUP
 #line 341 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
+{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) }
        YY_BREAK
 case 135:
 YY_RULE_SETUP
 #line 342 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
+{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
        YY_BREAK
 case 136:
 YY_RULE_SETUP
 #line 343 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
+{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
        YY_BREAK
 case 137:
 YY_RULE_SETUP
 #line 344 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) }
+{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
        YY_BREAK
 case 138:
 YY_RULE_SETUP
 #line 345 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) }
+{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) }
        YY_BREAK
 case 139:
 YY_RULE_SETUP
 #line 346 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) }
+{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) }
        YY_BREAK
 case 140:
 YY_RULE_SETUP
 #line 347 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) }
+{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) }
        YY_BREAK
 case 141:
 YY_RULE_SETUP
 #line 348 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_IDENTITY) }
+{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) }
        YY_BREAK
 case 142:
 YY_RULE_SETUP
 #line 349 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_VERSION) }
+{ YDVAR(1, VAR_HIDE_IDENTITY) }
        YY_BREAK
 case 143:
 YY_RULE_SETUP
 #line 350 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
+{ YDVAR(1, VAR_HIDE_VERSION) }
        YY_BREAK
 case 144:
 YY_RULE_SETUP
 #line 351 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IDENTITY) }
+{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
        YY_BREAK
 case 145:
 YY_RULE_SETUP
 #line 352 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VERSION) }
+{ YDVAR(1, VAR_IDENTITY) }
        YY_BREAK
 case 146:
 YY_RULE_SETUP
 #line 353 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MODULE_CONF) }
+{ YDVAR(1, VAR_VERSION) }
        YY_BREAK
 case 147:
 YY_RULE_SETUP
 #line 354 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR) }
+{ YDVAR(1, VAR_MODULE_CONF) }
        YY_BREAK
 case 148:
 YY_RULE_SETUP
 #line 355 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR) }
        YY_BREAK
 case 149:
 YY_RULE_SETUP
 #line 356 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
        YY_BREAK
 case 150:
 YY_RULE_SETUP
 #line 357 "./util/configlexer.lex"
-{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 151:
 YY_RULE_SETUP
 #line 358 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
+{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 152:
 YY_RULE_SETUP
 #line 359 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR) }
+{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
        YY_BREAK
 case 153:
 YY_RULE_SETUP
 #line 360 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) }
+{ YDVAR(1, VAR_TRUST_ANCHOR) }
        YY_BREAK
 case 154:
 YY_RULE_SETUP
 #line 361 "./util/configlexer.lex"
-{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) }
+{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) }
        YY_BREAK
 case 155:
 YY_RULE_SETUP
 #line 362 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) }
        YY_BREAK
 case 156:
 YY_RULE_SETUP
 #line 363 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
+{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
        YY_BREAK
 case 157:
 YY_RULE_SETUP
 #line 364 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
        YY_BREAK
 case 158:
 YY_RULE_SETUP
 #line 365 "./util/configlexer.lex"
-{ YDVAR(1, VAR_BOGUS_TTL) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
        YY_BREAK
 case 159:
 YY_RULE_SETUP
 #line 366 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+{ YDVAR(1, VAR_BOGUS_TTL) }
        YY_BREAK
 case 160:
 YY_RULE_SETUP
 #line 367 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
        YY_BREAK
 case 161:
 YY_RULE_SETUP
 #line 368 "./util/configlexer.lex"
-{ YDVAR(1, VAR_AGGRESSIVE_NSEC) }
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
        YY_BREAK
 case 162:
 YY_RULE_SETUP
 #line 369 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
+{ YDVAR(1, VAR_AGGRESSIVE_NSEC) }
        YY_BREAK
 case 163:
 YY_RULE_SETUP
 #line 370 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED) }
+{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
        YY_BREAK
 case 164:
 YY_RULE_SETUP
 #line 371 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) }
+{ YDVAR(1, VAR_SERVE_EXPIRED) }
        YY_BREAK
 case 165:
 YY_RULE_SETUP
 #line 372 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) }
+{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) }
        YY_BREAK
 case 166:
 YY_RULE_SETUP
 #line 373 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) }
+{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) }
        YY_BREAK
 case 167:
 YY_RULE_SETUP
 #line 374 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) }
+{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) }
        YY_BREAK
 case 168:
 YY_RULE_SETUP
 #line 375 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FAKE_DSA) }
+{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) }
        YY_BREAK
 case 169:
 YY_RULE_SETUP
 #line 376 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FAKE_SHA1) }
+{ YDVAR(1, VAR_FAKE_DSA) }
        YY_BREAK
 case 170:
 YY_RULE_SETUP
 #line 377 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
+{ YDVAR(1, VAR_FAKE_SHA1) }
        YY_BREAK
 case 171:
 YY_RULE_SETUP
 #line 378 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
        YY_BREAK
 case 172:
 YY_RULE_SETUP
 #line 379 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
        YY_BREAK
 case 173:
 YY_RULE_SETUP
 #line 380 "./util/configlexer.lex"
-{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
        YY_BREAK
 case 174:
 YY_RULE_SETUP
 #line 381 "./util/configlexer.lex"
-{ 
-                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
        YY_BREAK
 case 175:
 YY_RULE_SETUP
-#line 383 "./util/configlexer.lex"
-{ YDVAR(1, VAR_ADD_HOLDDOWN) }
+#line 382 "./util/configlexer.lex"
+{ 
+                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
        YY_BREAK
 case 176:
 YY_RULE_SETUP
 #line 384 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DEL_HOLDDOWN) }
+{ YDVAR(1, VAR_ADD_HOLDDOWN) }
        YY_BREAK
 case 177:
 YY_RULE_SETUP
 #line 385 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEEP_MISSING) }
+{ YDVAR(1, VAR_DEL_HOLDDOWN) }
        YY_BREAK
 case 178:
 YY_RULE_SETUP
 #line 386 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
+{ YDVAR(1, VAR_KEEP_MISSING) }
        YY_BREAK
 case 179:
 YY_RULE_SETUP
 #line 387 "./util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSLOG) }
+{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
        YY_BREAK
 case 180:
 YY_RULE_SETUP
 #line 388 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_IDENTITY) }
+{ YDVAR(1, VAR_USE_SYSLOG) }
        YY_BREAK
 case 181:
 YY_RULE_SETUP
 #line 389 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TIME_ASCII) }
+{ YDVAR(1, VAR_LOG_IDENTITY) }
        YY_BREAK
 case 182:
 YY_RULE_SETUP
 #line 390 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_QUERIES) }
+{ YDVAR(1, VAR_LOG_TIME_ASCII) }
        YY_BREAK
 case 183:
 YY_RULE_SETUP
 #line 391 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_REPLIES) }
+{ YDVAR(1, VAR_LOG_QUERIES) }
        YY_BREAK
 case 184:
 YY_RULE_SETUP
 #line 392 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) }
+{ YDVAR(1, VAR_LOG_REPLIES) }
        YY_BREAK
 case 185:
 YY_RULE_SETUP
 #line 393 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) }
+{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) }
        YY_BREAK
 case 186:
 YY_RULE_SETUP
 #line 394 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_SERVFAIL) }
+{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) }
        YY_BREAK
 case 187:
 YY_RULE_SETUP
 #line 395 "./util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE) }
+{ YDVAR(1, VAR_LOG_SERVFAIL) }
        YY_BREAK
 case 188:
 YY_RULE_SETUP
 #line 396 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA) }
+{ YDVAR(2, VAR_LOCAL_ZONE) }
        YY_BREAK
 case 189:
 YY_RULE_SETUP
 #line 397 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
+{ YDVAR(1, VAR_LOCAL_DATA) }
        YY_BREAK
 case 190:
 YY_RULE_SETUP
 #line 398 "./util/configlexer.lex"
-{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
+{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
        YY_BREAK
 case 191:
 YY_RULE_SETUP
 #line 399 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
+{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
        YY_BREAK
 case 192:
 YY_RULE_SETUP
 #line 400 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
+{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
        YY_BREAK
 case 193:
 YY_RULE_SETUP
 #line 401 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
        YY_BREAK
 case 194:
 YY_RULE_SETUP
 #line 402 "./util/configlexer.lex"
-{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
        YY_BREAK
 case 195:
 YY_RULE_SETUP
 #line 403 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SHM_ENABLE) }
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
        YY_BREAK
 case 196:
 YY_RULE_SETUP
 #line 404 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SHM_KEY) }
+{ YDVAR(1, VAR_SHM_ENABLE) }
        YY_BREAK
 case 197:
 YY_RULE_SETUP
 #line 405 "./util/configlexer.lex"
-{ YDVAR(0, VAR_REMOTE_CONTROL) }
+{ YDVAR(1, VAR_SHM_KEY) }
        YY_BREAK
 case 198:
 YY_RULE_SETUP
 #line 406 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_ENABLE) }
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
        YY_BREAK
 case 199:
 YY_RULE_SETUP
 #line 407 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_INTERFACE) }
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
        YY_BREAK
 case 200:
 YY_RULE_SETUP
 #line 408 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_PORT) }
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
        YY_BREAK
 case 201:
 YY_RULE_SETUP
 #line 409 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_USE_CERT) }
+{ YDVAR(1, VAR_CONTROL_PORT) }
        YY_BREAK
 case 202:
 YY_RULE_SETUP
 #line 410 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_KEY_FILE) }
+{ YDVAR(1, VAR_CONTROL_USE_CERT) }
        YY_BREAK
 case 203:
 YY_RULE_SETUP
 #line 411 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_CERT_FILE) }
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
        YY_BREAK
 case 204:
 YY_RULE_SETUP
 #line 412 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
        YY_BREAK
 case 205:
 YY_RULE_SETUP
 #line 413 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
        YY_BREAK
 case 206:
 YY_RULE_SETUP
 #line 414 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PYTHON_SCRIPT) }
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
        YY_BREAK
 case 207:
 YY_RULE_SETUP
 #line 415 "./util/configlexer.lex"
-{ YDVAR(0, VAR_PYTHON) }
+{ YDVAR(1, VAR_PYTHON_SCRIPT) }
        YY_BREAK
 case 208:
 YY_RULE_SETUP
 #line 416 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+{ YDVAR(0, VAR_PYTHON) }
        YY_BREAK
 case 209:
 YY_RULE_SETUP
 #line 417 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
+{ YDVAR(1, VAR_DOMAIN_INSECURE) }
        YY_BREAK
 case 210:
 YY_RULE_SETUP
 #line 418 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
+{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
        YY_BREAK
 case 211:
 YY_RULE_SETUP
 #line 419 "./util/configlexer.lex"
-{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) }
+{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
        YY_BREAK
 case 212:
 YY_RULE_SETUP
 #line 420 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_UDP_SIZE) }
+{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) }
        YY_BREAK
 case 213:
 YY_RULE_SETUP
 #line 421 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_PREFIX) }
+{ YDVAR(1, VAR_MAX_UDP_SIZE) }
        YY_BREAK
 case 214:
 YY_RULE_SETUP
 #line 422 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_SYNTHALL) }
+{ YDVAR(1, VAR_DNS64_PREFIX) }
        YY_BREAK
 case 215:
 YY_RULE_SETUP
 #line 423 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) }
+{ YDVAR(1, VAR_DNS64_SYNTHALL) }
        YY_BREAK
 case 216:
 YY_RULE_SETUP
 #line 424 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DEFINE_TAG) }
+{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) }
        YY_BREAK
 case 217:
 YY_RULE_SETUP
 #line 425 "./util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
+{ YDVAR(1, VAR_DEFINE_TAG) }
        YY_BREAK
 case 218:
 YY_RULE_SETUP
 #line 426 "./util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
+{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
        YY_BREAK
 case 219:
 YY_RULE_SETUP
 #line 427 "./util/configlexer.lex"
-{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
+{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
        YY_BREAK
 case 220:
 YY_RULE_SETUP
 #line 428 "./util/configlexer.lex"
-{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
        YY_BREAK
 case 221:
 YY_RULE_SETUP
 #line 429 "./util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
        YY_BREAK
 case 222:
 YY_RULE_SETUP
 #line 430 "./util/configlexer.lex"
-{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
+{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
        YY_BREAK
 case 223:
 YY_RULE_SETUP
 #line 431 "./util/configlexer.lex"
-{ YDVAR(0, VAR_DNSTAP) }
+{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
        YY_BREAK
 case 224:
 YY_RULE_SETUP
 #line 432 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_ENABLE) }
+{ YDVAR(0, VAR_DNSTAP) }
        YY_BREAK
 case 225:
 YY_RULE_SETUP
 #line 433 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
+{ YDVAR(1, VAR_DNSTAP_ENABLE) }
        YY_BREAK
 case 226:
 YY_RULE_SETUP
 #line 434 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IP) }
+{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
        YY_BREAK
 case 227:
 YY_RULE_SETUP
 #line 435 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_TLS) }
+{ YDVAR(1, VAR_DNSTAP_IP) }
        YY_BREAK
 case 228:
 YY_RULE_SETUP
 #line 436 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) }
+{ YDVAR(1, VAR_DNSTAP_TLS) }
        YY_BREAK
 case 229:
 YY_RULE_SETUP
 #line 437 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) }
+{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) }
        YY_BREAK
 case 230:
 YY_RULE_SETUP
 #line 438 "./util/configlexer.lex"
-{
-               YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) }
+{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) }
        YY_BREAK
 case 231:
 YY_RULE_SETUP
-#line 440 "./util/configlexer.lex"
+#line 439 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) }
+               YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) }
        YY_BREAK
 case 232:
 YY_RULE_SETUP
-#line 442 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
+#line 441 "./util/configlexer.lex"
+{
+               YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) }
        YY_BREAK
 case 233:
 YY_RULE_SETUP
 #line 443 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
        YY_BREAK
 case 234:
 YY_RULE_SETUP
 #line 444 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
        YY_BREAK
 case 235:
 YY_RULE_SETUP
 #line 445 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
        YY_BREAK
 case 236:
 YY_RULE_SETUP
 #line 446 "./util/configlexer.lex"
-{
-               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
+{ YDVAR(1, VAR_DNSTAP_VERSION) }
        YY_BREAK
 case 237:
 YY_RULE_SETUP
-#line 448 "./util/configlexer.lex"
+#line 447 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
        YY_BREAK
 case 238:
 YY_RULE_SETUP
-#line 450 "./util/configlexer.lex"
+#line 449 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
        YY_BREAK
 case 239:
 YY_RULE_SETUP
-#line 452 "./util/configlexer.lex"
+#line 451 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
        YY_BREAK
 case 240:
 YY_RULE_SETUP
-#line 454 "./util/configlexer.lex"
+#line 453 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
        YY_BREAK
 case 241:
 YY_RULE_SETUP
-#line 456 "./util/configlexer.lex"
+#line 455 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
        YY_BREAK
 case 242:
 YY_RULE_SETUP
-#line 458 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
+#line 457 "./util/configlexer.lex"
+{
+               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
        YY_BREAK
 case 243:
 YY_RULE_SETUP
 #line 459 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT) }
+{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
        YY_BREAK
 case 244:
 YY_RULE_SETUP
 #line 460 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT) }
+{ YDVAR(1, VAR_IP_RATELIMIT) }
        YY_BREAK
 case 245:
 YY_RULE_SETUP
 #line 461 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_RATELIMIT) }
        YY_BREAK
 case 246:
 YY_RULE_SETUP
 #line 462 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
        YY_BREAK
 case 247:
 YY_RULE_SETUP
 #line 463 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_RATELIMIT_SLABS) }
        YY_BREAK
 case 248:
 YY_RULE_SETUP
 #line 464 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
        YY_BREAK
 case 249:
 YY_RULE_SETUP
 #line 465 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+{ YDVAR(1, VAR_RATELIMIT_SIZE) }
        YY_BREAK
 case 250:
 YY_RULE_SETUP
 #line 466 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
        YY_BREAK
 case 251:
 YY_RULE_SETUP
 #line 467 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
+{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
        YY_BREAK
 case 252:
 YY_RULE_SETUP
 #line 468 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
        YY_BREAK
 case 253:
 YY_RULE_SETUP
 #line 469 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOW_RTT) }
+{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
        YY_BREAK
 case 254:
 YY_RULE_SETUP
 #line 470 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FAST_SERVER_NUM) }
+{ YDVAR(1, VAR_LOW_RTT) }
        YY_BREAK
 case 255:
 YY_RULE_SETUP
 #line 471 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+{ YDVAR(1, VAR_FAST_SERVER_NUM) }
        YY_BREAK
 case 256:
 YY_RULE_SETUP
@@ -4534,195 +4545,200 @@ YY_RULE_SETUP
 case 258:
 YY_RULE_SETUP
 #line 474 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP_TAG) }
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
        YY_BREAK
 case 259:
 YY_RULE_SETUP
 #line 475 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP) }
+{ YDVAR(2, VAR_RESPONSE_IP_TAG) }
        YY_BREAK
 case 260:
 YY_RULE_SETUP
 #line 476 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP_DATA) }
+{ YDVAR(2, VAR_RESPONSE_IP) }
        YY_BREAK
 case 261:
 YY_RULE_SETUP
 #line 477 "./util/configlexer.lex"
-{ YDVAR(0, VAR_DNSCRYPT) }
+{ YDVAR(2, VAR_RESPONSE_IP_DATA) }
        YY_BREAK
 case 262:
 YY_RULE_SETUP
 #line 478 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_ENABLE) }
+{ YDVAR(0, VAR_DNSCRYPT) }
        YY_BREAK
 case 263:
 YY_RULE_SETUP
 #line 479 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PORT) }
+{ YDVAR(1, VAR_DNSCRYPT_ENABLE) }
        YY_BREAK
 case 264:
 YY_RULE_SETUP
 #line 480 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
+{ YDVAR(1, VAR_DNSCRYPT_PORT) }
        YY_BREAK
 case 265:
 YY_RULE_SETUP
 #line 481 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
        YY_BREAK
 case 266:
 YY_RULE_SETUP
 #line 482 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
+{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
        YY_BREAK
 case 267:
 YY_RULE_SETUP
 #line 483 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
        YY_BREAK
 case 268:
 YY_RULE_SETUP
 #line 484 "./util/configlexer.lex"
-{
-               YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
        YY_BREAK
 case 269:
 YY_RULE_SETUP
-#line 486 "./util/configlexer.lex"
+#line 485 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
+               YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
        YY_BREAK
 case 270:
 YY_RULE_SETUP
-#line 488 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
+#line 487 "./util/configlexer.lex"
+{
+               YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
        YY_BREAK
 case 271:
 YY_RULE_SETUP
 #line 489 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
+{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
        YY_BREAK
 case 272:
 YY_RULE_SETUP
 #line 490 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_ENABLED) }
+{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
        YY_BREAK
 case 273:
 YY_RULE_SETUP
 #line 491 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
+{ YDVAR(1, VAR_IPSECMOD_ENABLED) }
        YY_BREAK
 case 274:
 YY_RULE_SETUP
 #line 492 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_HOOK) }
+{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
        YY_BREAK
 case 275:
 YY_RULE_SETUP
 #line 493 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
+{ YDVAR(1, VAR_IPSECMOD_HOOK) }
        YY_BREAK
 case 276:
 YY_RULE_SETUP
 #line 494 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
+{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
        YY_BREAK
 case 277:
 YY_RULE_SETUP
 #line 495 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_STRICT) }
+{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
        YY_BREAK
 case 278:
 YY_RULE_SETUP
 #line 496 "./util/configlexer.lex"
-{ YDVAR(0, VAR_CACHEDB) }
+{ YDVAR(1, VAR_IPSECMOD_STRICT) }
        YY_BREAK
 case 279:
 YY_RULE_SETUP
 #line 497 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_BACKEND) }
+{ YDVAR(0, VAR_CACHEDB) }
        YY_BREAK
 case 280:
 YY_RULE_SETUP
 #line 498 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_SECRETSEED) }
+{ YDVAR(1, VAR_CACHEDB_BACKEND) }
        YY_BREAK
 case 281:
 YY_RULE_SETUP
 #line 499 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISHOST) }
+{ YDVAR(1, VAR_CACHEDB_SECRETSEED) }
        YY_BREAK
 case 282:
 YY_RULE_SETUP
 #line 500 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISPORT) }
+{ YDVAR(1, VAR_CACHEDB_REDISHOST) }
        YY_BREAK
 case 283:
 YY_RULE_SETUP
 #line 501 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
+{ YDVAR(1, VAR_CACHEDB_REDISPORT) }
        YY_BREAK
 case 284:
 YY_RULE_SETUP
 #line 502 "./util/configlexer.lex"
-{ YDVAR(0, VAR_IPSET) }
+{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
        YY_BREAK
 case 285:
 YY_RULE_SETUP
 #line 503 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSET_NAME_V4) }
+{ YDVAR(0, VAR_IPSET) }
        YY_BREAK
 case 286:
 YY_RULE_SETUP
 #line 504 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSET_NAME_V6) }
+{ YDVAR(1, VAR_IPSET_NAME_V4) }
        YY_BREAK
 case 287:
 YY_RULE_SETUP
 #line 505 "./util/configlexer.lex"
-{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
+{ YDVAR(1, VAR_IPSET_NAME_V6) }
        YY_BREAK
 case 288:
 YY_RULE_SETUP
 #line 506 "./util/configlexer.lex"
-{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
+{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
        YY_BREAK
 case 289:
-/* rule 289 can match eol */
 YY_RULE_SETUP
 #line 507 "./util/configlexer.lex"
+{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
+       YY_BREAK
+case 290:
+/* rule 290 can match eol */
+YY_RULE_SETUP
+#line 508 "./util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++; }
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
-case 290:
+case 291:
 YY_RULE_SETUP
-#line 510 "./util/configlexer.lex"
+#line 511 "./util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 511 "./util/configlexer.lex"
+#line 512 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 291:
+case 292:
 YY_RULE_SETUP
-#line 516 "./util/configlexer.lex"
+#line 517 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 292:
-/* rule 292 can match eol */
+case 293:
+/* rule 293 can match eol */
 YY_RULE_SETUP
-#line 517 "./util/configlexer.lex"
+#line 518 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end \""); 
                          cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 293:
+case 294:
 YY_RULE_SETUP
-#line 519 "./util/configlexer.lex"
+#line 520 "./util/configlexer.lex"
 {
         LEXOUT(("QE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -4735,34 +4751,34 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Single Quoted strings. Strip leading and ending quotes */
-case 294:
+case 295:
 YY_RULE_SETUP
-#line 531 "./util/configlexer.lex"
+#line 532 "./util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 532 "./util/configlexer.lex"
+#line 533 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 295:
+case 296:
 YY_RULE_SETUP
-#line 537 "./util/configlexer.lex"
+#line 538 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 296:
-/* rule 296 can match eol */
+case 297:
+/* rule 297 can match eol */
 YY_RULE_SETUP
-#line 538 "./util/configlexer.lex"
+#line 539 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end '"); 
                             cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 297:
+case 298:
 YY_RULE_SETUP
-#line 540 "./util/configlexer.lex"
+#line 541 "./util/configlexer.lex"
 {
         LEXOUT(("SQE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -4775,38 +4791,38 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* include: directive */
-case 298:
+case 299:
 YY_RULE_SETUP
-#line 552 "./util/configlexer.lex"
+#line 553 "./util/configlexer.lex"
 { 
        LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 554 "./util/configlexer.lex"
+#line 555 "./util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 299:
-YY_RULE_SETUP
-#line 558 "./util/configlexer.lex"
-{ LEXOUT(("ISP ")); /* ignore */ }
-       YY_BREAK
 case 300:
-/* rule 300 can match eol */
 YY_RULE_SETUP
 #line 559 "./util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++;}
+{ LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
 case 301:
+/* rule 301 can match eol */
 YY_RULE_SETUP
 #line 560 "./util/configlexer.lex"
-{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+{ LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
 case 302:
 YY_RULE_SETUP
 #line 561 "./util/configlexer.lex"
+{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+       YY_BREAK
+case 303:
+YY_RULE_SETUP
+#line 562 "./util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include_glob(yytext);
@@ -4814,27 +4830,27 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 566 "./util/configlexer.lex"
+#line 567 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 303:
+case 304:
 YY_RULE_SETUP
-#line 570 "./util/configlexer.lex"
+#line 571 "./util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 304:
-/* rule 304 can match eol */
+case 305:
+/* rule 305 can match eol */
 YY_RULE_SETUP
-#line 571 "./util/configlexer.lex"
+#line 572 "./util/configlexer.lex"
 { yyerror("newline before \" in include name"); 
                                  cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
-case 305:
+case 306:
 YY_RULE_SETUP
-#line 573 "./util/configlexer.lex"
+#line 574 "./util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -4844,7 +4860,7 @@ YY_RULE_SETUP
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(val):
-#line 579 "./util/configlexer.lex"
+#line 580 "./util/configlexer.lex"
 {
        LEXOUT(("LEXEOF "));
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
@@ -4856,33 +4872,33 @@ case YY_STATE_EOF(val):
        }
 }
        YY_BREAK
-case 306:
+case 307:
 YY_RULE_SETUP
-#line 590 "./util/configlexer.lex"
+#line 591 "./util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
                        if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING_ARG; }
        YY_BREAK
-case 307:
+case 308:
 YY_RULE_SETUP
-#line 594 "./util/configlexer.lex"
+#line 595 "./util/configlexer.lex"
 {
        ub_c_error_msg("unknown keyword '%s'", yytext);
        }
        YY_BREAK
-case 308:
+case 309:
 YY_RULE_SETUP
-#line 598 "./util/configlexer.lex"
+#line 599 "./util/configlexer.lex"
 {
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
-case 309:
+case 310:
 YY_RULE_SETUP
-#line 602 "./util/configlexer.lex"
+#line 603 "./util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 4883 "<stdout>"
+#line 4900 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -5177,7 +5193,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 >= 3044 )
+                       if ( yy_current_state >= 3054 )
                                yy_c = yy_meta[yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -5205,11 +5221,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 >= 3044 )
+               if ( yy_current_state >= 3054 )
                        yy_c = yy_meta[yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 3043);
+       yy_is_jam = (yy_current_state == 3053);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -5848,6 +5864,6 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 602 "./util/configlexer.lex"
+#line 603 "./util/configlexer.lex"
 
 
index 1d7a38681046cfd8caff1f3ebff53f9bda0cdf80..c445c433b53e5ec64cbc7a39c853d1456bf228b7 100644 (file)
@@ -248,6 +248,7 @@ tls-additional-port{COLON}  { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
 tls-session-ticket-keys{COLON} { YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) }
 tls-ciphers{COLON}             { YDVAR(1, VAR_TLS_CIPHERS) }
 tls-ciphersuites{COLON}                { YDVAR(1, VAR_TLS_CIPHERSUITES) }
+https-port{COLON}              { YDVAR(1, VAR_HTTPS_PORT) }
 use-systemd{COLON}             { YDVAR(1, VAR_USE_SYSTEMD) }
 do-daemonize{COLON}            { YDVAR(1, VAR_DO_DAEMONIZE) }
 interface{COLON}               { YDVAR(1, VAR_INTERFACE) }
index 6d792c698883f864974ff625c89719ab2ad32471..830b799150ab8d23e16ea18f62d7945d7811cf53 100644 (file)
@@ -1,9 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.4.1.  */
+/* A Bison parser, made by GNU Bison 3.0.4.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
-   Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    define necessary library symbols; they are noted "INFRINGES ON
    USER NAME SPACE" below.  */
 
-/* Undocumented macros, especially those whose name start with YY_,
-   are private implementation details.  Do not rely on them.  */
-
 /* Identify Bison output.  */
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.4.1"
+#define YYBISON_VERSION "3.0.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -65,8 +61,8 @@
 
 
 
-/* First part of user prologue.  */
-#line 38 "./util/configparser.y"
+/* Copy the first part of user declarations.  */
+#line 38 "./util/configparser.y" /* yacc.c:339  */
 
 #include "config.h"
 
@@ -95,17 +91,13 @@ extern struct config_parser_state* cfg_parser;
 #endif
 
 
-#line 99 "util/configparser.c"
+#line 95 "util/configparser.c" /* yacc.c:339  */
 
 # ifndef YY_NULLPTR
-#  if defined __cplusplus
-#   if 201103L <= __cplusplus
-#    define YY_NULLPTR nullptr
-#   else
-#    define YY_NULLPTR 0
-#   endif
+#  if defined __cplusplus && 201103L <= __cplusplus
+#   define YY_NULLPTR nullptr
 #  else
-#   define YY_NULLPTR ((void*)0)
+#   define YY_NULLPTR 0
 #  endif
 # endif
 
@@ -117,8 +109,8 @@ extern struct config_parser_state* cfg_parser;
 # define YYERROR_VERBOSE 0
 #endif
 
-/* Use api.header.include to #include this header
-   instead of duplicating it here.  */
+/* In a future release of Bison, this section will be replaced
+   by #include "configparser.h".  */
 #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
 # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
 /* Debug traces.  */
@@ -272,150 +264,151 @@ extern int yydebug;
     VAR_STUB_SSL_UPSTREAM = 393,
     VAR_FORWARD_SSL_UPSTREAM = 394,
     VAR_TLS_CERT_BUNDLE = 395,
-    VAR_STUB_FIRST = 396,
-    VAR_MINIMAL_RESPONSES = 397,
-    VAR_RRSET_ROUNDROBIN = 398,
-    VAR_MAX_UDP_SIZE = 399,
-    VAR_DELAY_CLOSE = 400,
-    VAR_UNBLOCK_LAN_ZONES = 401,
-    VAR_INSECURE_LAN_ZONES = 402,
-    VAR_INFRA_CACHE_MIN_RTT = 403,
-    VAR_DNS64_PREFIX = 404,
-    VAR_DNS64_SYNTHALL = 405,
-    VAR_DNS64_IGNORE_AAAA = 406,
-    VAR_DNSTAP = 407,
-    VAR_DNSTAP_ENABLE = 408,
-    VAR_DNSTAP_SOCKET_PATH = 409,
-    VAR_DNSTAP_IP = 410,
-    VAR_DNSTAP_TLS = 411,
-    VAR_DNSTAP_TLS_SERVER_NAME = 412,
-    VAR_DNSTAP_TLS_CERT_BUNDLE = 413,
-    VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414,
-    VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415,
-    VAR_DNSTAP_SEND_IDENTITY = 416,
-    VAR_DNSTAP_SEND_VERSION = 417,
-    VAR_DNSTAP_IDENTITY = 418,
-    VAR_DNSTAP_VERSION = 419,
-    VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420,
-    VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421,
-    VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422,
-    VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423,
-    VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424,
-    VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425,
-    VAR_RESPONSE_IP_TAG = 426,
-    VAR_RESPONSE_IP = 427,
-    VAR_RESPONSE_IP_DATA = 428,
-    VAR_HARDEN_ALGO_DOWNGRADE = 429,
-    VAR_IP_TRANSPARENT = 430,
-    VAR_DISABLE_DNSSEC_LAME_CHECK = 431,
-    VAR_IP_RATELIMIT = 432,
-    VAR_IP_RATELIMIT_SLABS = 433,
-    VAR_IP_RATELIMIT_SIZE = 434,
-    VAR_RATELIMIT = 435,
-    VAR_RATELIMIT_SLABS = 436,
-    VAR_RATELIMIT_SIZE = 437,
-    VAR_RATELIMIT_FOR_DOMAIN = 438,
-    VAR_RATELIMIT_BELOW_DOMAIN = 439,
-    VAR_IP_RATELIMIT_FACTOR = 440,
-    VAR_RATELIMIT_FACTOR = 441,
-    VAR_SEND_CLIENT_SUBNET = 442,
-    VAR_CLIENT_SUBNET_ZONE = 443,
-    VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 444,
-    VAR_CLIENT_SUBNET_OPCODE = 445,
-    VAR_MAX_CLIENT_SUBNET_IPV4 = 446,
-    VAR_MAX_CLIENT_SUBNET_IPV6 = 447,
-    VAR_MIN_CLIENT_SUBNET_IPV4 = 448,
-    VAR_MIN_CLIENT_SUBNET_IPV6 = 449,
-    VAR_MAX_ECS_TREE_SIZE_IPV4 = 450,
-    VAR_MAX_ECS_TREE_SIZE_IPV6 = 451,
-    VAR_CAPS_WHITELIST = 452,
-    VAR_CACHE_MAX_NEGATIVE_TTL = 453,
-    VAR_PERMIT_SMALL_HOLDDOWN = 454,
-    VAR_QNAME_MINIMISATION = 455,
-    VAR_QNAME_MINIMISATION_STRICT = 456,
-    VAR_IP_FREEBIND = 457,
-    VAR_DEFINE_TAG = 458,
-    VAR_LOCAL_ZONE_TAG = 459,
-    VAR_ACCESS_CONTROL_TAG = 460,
-    VAR_LOCAL_ZONE_OVERRIDE = 461,
-    VAR_ACCESS_CONTROL_TAG_ACTION = 462,
-    VAR_ACCESS_CONTROL_TAG_DATA = 463,
-    VAR_VIEW = 464,
-    VAR_ACCESS_CONTROL_VIEW = 465,
-    VAR_VIEW_FIRST = 466,
-    VAR_SERVE_EXPIRED = 467,
-    VAR_SERVE_EXPIRED_TTL = 468,
-    VAR_SERVE_EXPIRED_TTL_RESET = 469,
-    VAR_SERVE_EXPIRED_REPLY_TTL = 470,
-    VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 471,
-    VAR_FAKE_DSA = 472,
-    VAR_FAKE_SHA1 = 473,
-    VAR_LOG_IDENTITY = 474,
-    VAR_HIDE_TRUSTANCHOR = 475,
-    VAR_TRUST_ANCHOR_SIGNALING = 476,
-    VAR_AGGRESSIVE_NSEC = 477,
-    VAR_USE_SYSTEMD = 478,
-    VAR_SHM_ENABLE = 479,
-    VAR_SHM_KEY = 480,
-    VAR_ROOT_KEY_SENTINEL = 481,
-    VAR_DNSCRYPT = 482,
-    VAR_DNSCRYPT_ENABLE = 483,
-    VAR_DNSCRYPT_PORT = 484,
-    VAR_DNSCRYPT_PROVIDER = 485,
-    VAR_DNSCRYPT_SECRET_KEY = 486,
-    VAR_DNSCRYPT_PROVIDER_CERT = 487,
-    VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 488,
-    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 489,
-    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 490,
-    VAR_DNSCRYPT_NONCE_CACHE_SIZE = 491,
-    VAR_DNSCRYPT_NONCE_CACHE_SLABS = 492,
-    VAR_IPSECMOD_ENABLED = 493,
-    VAR_IPSECMOD_HOOK = 494,
-    VAR_IPSECMOD_IGNORE_BOGUS = 495,
-    VAR_IPSECMOD_MAX_TTL = 496,
-    VAR_IPSECMOD_WHITELIST = 497,
-    VAR_IPSECMOD_STRICT = 498,
-    VAR_CACHEDB = 499,
-    VAR_CACHEDB_BACKEND = 500,
-    VAR_CACHEDB_SECRETSEED = 501,
-    VAR_CACHEDB_REDISHOST = 502,
-    VAR_CACHEDB_REDISPORT = 503,
-    VAR_CACHEDB_REDISTIMEOUT = 504,
-    VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 505,
-    VAR_FOR_UPSTREAM = 506,
-    VAR_AUTH_ZONE = 507,
-    VAR_ZONEFILE = 508,
-    VAR_MASTER = 509,
-    VAR_URL = 510,
-    VAR_FOR_DOWNSTREAM = 511,
-    VAR_FALLBACK_ENABLED = 512,
-    VAR_TLS_ADDITIONAL_PORT = 513,
-    VAR_LOW_RTT = 514,
-    VAR_LOW_RTT_PERMIL = 515,
-    VAR_FAST_SERVER_PERMIL = 516,
-    VAR_FAST_SERVER_NUM = 517,
-    VAR_ALLOW_NOTIFY = 518,
-    VAR_TLS_WIN_CERT = 519,
-    VAR_TCP_CONNECTION_LIMIT = 520,
-    VAR_FORWARD_NO_CACHE = 521,
-    VAR_STUB_NO_CACHE = 522,
-    VAR_LOG_SERVFAIL = 523,
-    VAR_DENY_ANY = 524,
-    VAR_UNKNOWN_SERVER_TIME_LIMIT = 525,
-    VAR_LOG_TAG_QUERYREPLY = 526,
-    VAR_STREAM_WAIT_SIZE = 527,
-    VAR_TLS_CIPHERS = 528,
-    VAR_TLS_CIPHERSUITES = 529,
-    VAR_IPSET = 530,
-    VAR_IPSET_NAME_V4 = 531,
-    VAR_IPSET_NAME_V6 = 532,
-    VAR_TLS_SESSION_TICKET_KEYS = 533,
-    VAR_RPZ = 534,
-    VAR_TAGS = 535,
-    VAR_RPZ_ACTION_OVERRIDE = 536,
-    VAR_RPZ_CNAME_OVERRIDE = 537,
-    VAR_RPZ_LOG = 538,
-    VAR_RPZ_LOG_NAME = 539
+    VAR_HTTPS_PORT = 396,
+    VAR_STUB_FIRST = 397,
+    VAR_MINIMAL_RESPONSES = 398,
+    VAR_RRSET_ROUNDROBIN = 399,
+    VAR_MAX_UDP_SIZE = 400,
+    VAR_DELAY_CLOSE = 401,
+    VAR_UNBLOCK_LAN_ZONES = 402,
+    VAR_INSECURE_LAN_ZONES = 403,
+    VAR_INFRA_CACHE_MIN_RTT = 404,
+    VAR_DNS64_PREFIX = 405,
+    VAR_DNS64_SYNTHALL = 406,
+    VAR_DNS64_IGNORE_AAAA = 407,
+    VAR_DNSTAP = 408,
+    VAR_DNSTAP_ENABLE = 409,
+    VAR_DNSTAP_SOCKET_PATH = 410,
+    VAR_DNSTAP_IP = 411,
+    VAR_DNSTAP_TLS = 412,
+    VAR_DNSTAP_TLS_SERVER_NAME = 413,
+    VAR_DNSTAP_TLS_CERT_BUNDLE = 414,
+    VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 415,
+    VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 416,
+    VAR_DNSTAP_SEND_IDENTITY = 417,
+    VAR_DNSTAP_SEND_VERSION = 418,
+    VAR_DNSTAP_IDENTITY = 419,
+    VAR_DNSTAP_VERSION = 420,
+    VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 421,
+    VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 422,
+    VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 423,
+    VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 424,
+    VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 425,
+    VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 426,
+    VAR_RESPONSE_IP_TAG = 427,
+    VAR_RESPONSE_IP = 428,
+    VAR_RESPONSE_IP_DATA = 429,
+    VAR_HARDEN_ALGO_DOWNGRADE = 430,
+    VAR_IP_TRANSPARENT = 431,
+    VAR_DISABLE_DNSSEC_LAME_CHECK = 432,
+    VAR_IP_RATELIMIT = 433,
+    VAR_IP_RATELIMIT_SLABS = 434,
+    VAR_IP_RATELIMIT_SIZE = 435,
+    VAR_RATELIMIT = 436,
+    VAR_RATELIMIT_SLABS = 437,
+    VAR_RATELIMIT_SIZE = 438,
+    VAR_RATELIMIT_FOR_DOMAIN = 439,
+    VAR_RATELIMIT_BELOW_DOMAIN = 440,
+    VAR_IP_RATELIMIT_FACTOR = 441,
+    VAR_RATELIMIT_FACTOR = 442,
+    VAR_SEND_CLIENT_SUBNET = 443,
+    VAR_CLIENT_SUBNET_ZONE = 444,
+    VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445,
+    VAR_CLIENT_SUBNET_OPCODE = 446,
+    VAR_MAX_CLIENT_SUBNET_IPV4 = 447,
+    VAR_MAX_CLIENT_SUBNET_IPV6 = 448,
+    VAR_MIN_CLIENT_SUBNET_IPV4 = 449,
+    VAR_MIN_CLIENT_SUBNET_IPV6 = 450,
+    VAR_MAX_ECS_TREE_SIZE_IPV4 = 451,
+    VAR_MAX_ECS_TREE_SIZE_IPV6 = 452,
+    VAR_CAPS_WHITELIST = 453,
+    VAR_CACHE_MAX_NEGATIVE_TTL = 454,
+    VAR_PERMIT_SMALL_HOLDDOWN = 455,
+    VAR_QNAME_MINIMISATION = 456,
+    VAR_QNAME_MINIMISATION_STRICT = 457,
+    VAR_IP_FREEBIND = 458,
+    VAR_DEFINE_TAG = 459,
+    VAR_LOCAL_ZONE_TAG = 460,
+    VAR_ACCESS_CONTROL_TAG = 461,
+    VAR_LOCAL_ZONE_OVERRIDE = 462,
+    VAR_ACCESS_CONTROL_TAG_ACTION = 463,
+    VAR_ACCESS_CONTROL_TAG_DATA = 464,
+    VAR_VIEW = 465,
+    VAR_ACCESS_CONTROL_VIEW = 466,
+    VAR_VIEW_FIRST = 467,
+    VAR_SERVE_EXPIRED = 468,
+    VAR_SERVE_EXPIRED_TTL = 469,
+    VAR_SERVE_EXPIRED_TTL_RESET = 470,
+    VAR_SERVE_EXPIRED_REPLY_TTL = 471,
+    VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472,
+    VAR_FAKE_DSA = 473,
+    VAR_FAKE_SHA1 = 474,
+    VAR_LOG_IDENTITY = 475,
+    VAR_HIDE_TRUSTANCHOR = 476,
+    VAR_TRUST_ANCHOR_SIGNALING = 477,
+    VAR_AGGRESSIVE_NSEC = 478,
+    VAR_USE_SYSTEMD = 479,
+    VAR_SHM_ENABLE = 480,
+    VAR_SHM_KEY = 481,
+    VAR_ROOT_KEY_SENTINEL = 482,
+    VAR_DNSCRYPT = 483,
+    VAR_DNSCRYPT_ENABLE = 484,
+    VAR_DNSCRYPT_PORT = 485,
+    VAR_DNSCRYPT_PROVIDER = 486,
+    VAR_DNSCRYPT_SECRET_KEY = 487,
+    VAR_DNSCRYPT_PROVIDER_CERT = 488,
+    VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489,
+    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490,
+    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491,
+    VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492,
+    VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493,
+    VAR_IPSECMOD_ENABLED = 494,
+    VAR_IPSECMOD_HOOK = 495,
+    VAR_IPSECMOD_IGNORE_BOGUS = 496,
+    VAR_IPSECMOD_MAX_TTL = 497,
+    VAR_IPSECMOD_WHITELIST = 498,
+    VAR_IPSECMOD_STRICT = 499,
+    VAR_CACHEDB = 500,
+    VAR_CACHEDB_BACKEND = 501,
+    VAR_CACHEDB_SECRETSEED = 502,
+    VAR_CACHEDB_REDISHOST = 503,
+    VAR_CACHEDB_REDISPORT = 504,
+    VAR_CACHEDB_REDISTIMEOUT = 505,
+    VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506,
+    VAR_FOR_UPSTREAM = 507,
+    VAR_AUTH_ZONE = 508,
+    VAR_ZONEFILE = 509,
+    VAR_MASTER = 510,
+    VAR_URL = 511,
+    VAR_FOR_DOWNSTREAM = 512,
+    VAR_FALLBACK_ENABLED = 513,
+    VAR_TLS_ADDITIONAL_PORT = 514,
+    VAR_LOW_RTT = 515,
+    VAR_LOW_RTT_PERMIL = 516,
+    VAR_FAST_SERVER_PERMIL = 517,
+    VAR_FAST_SERVER_NUM = 518,
+    VAR_ALLOW_NOTIFY = 519,
+    VAR_TLS_WIN_CERT = 520,
+    VAR_TCP_CONNECTION_LIMIT = 521,
+    VAR_FORWARD_NO_CACHE = 522,
+    VAR_STUB_NO_CACHE = 523,
+    VAR_LOG_SERVFAIL = 524,
+    VAR_DENY_ANY = 525,
+    VAR_UNKNOWN_SERVER_TIME_LIMIT = 526,
+    VAR_LOG_TAG_QUERYREPLY = 527,
+    VAR_STREAM_WAIT_SIZE = 528,
+    VAR_TLS_CIPHERS = 529,
+    VAR_TLS_CIPHERSUITES = 530,
+    VAR_IPSET = 531,
+    VAR_IPSET_NAME_V4 = 532,
+    VAR_IPSET_NAME_V6 = 533,
+    VAR_TLS_SESSION_TICKET_KEYS = 534,
+    VAR_RPZ = 535,
+    VAR_TAGS = 536,
+    VAR_RPZ_ACTION_OVERRIDE = 537,
+    VAR_RPZ_CNAME_OVERRIDE = 538,
+    VAR_RPZ_LOG = 539,
+    VAR_RPZ_LOG_NAME = 540
   };
 #endif
 /* Tokens.  */
@@ -557,162 +550,164 @@ extern int yydebug;
 #define VAR_STUB_SSL_UPSTREAM 393
 #define VAR_FORWARD_SSL_UPSTREAM 394
 #define VAR_TLS_CERT_BUNDLE 395
-#define VAR_STUB_FIRST 396
-#define VAR_MINIMAL_RESPONSES 397
-#define VAR_RRSET_ROUNDROBIN 398
-#define VAR_MAX_UDP_SIZE 399
-#define VAR_DELAY_CLOSE 400
-#define VAR_UNBLOCK_LAN_ZONES 401
-#define VAR_INSECURE_LAN_ZONES 402
-#define VAR_INFRA_CACHE_MIN_RTT 403
-#define VAR_DNS64_PREFIX 404
-#define VAR_DNS64_SYNTHALL 405
-#define VAR_DNS64_IGNORE_AAAA 406
-#define VAR_DNSTAP 407
-#define VAR_DNSTAP_ENABLE 408
-#define VAR_DNSTAP_SOCKET_PATH 409
-#define VAR_DNSTAP_IP 410
-#define VAR_DNSTAP_TLS 411
-#define VAR_DNSTAP_TLS_SERVER_NAME 412
-#define VAR_DNSTAP_TLS_CERT_BUNDLE 413
-#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 414
-#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 415
-#define VAR_DNSTAP_SEND_IDENTITY 416
-#define VAR_DNSTAP_SEND_VERSION 417
-#define VAR_DNSTAP_IDENTITY 418
-#define VAR_DNSTAP_VERSION 419
-#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 420
-#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 421
-#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 422
-#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 423
-#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 424
-#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 425
-#define VAR_RESPONSE_IP_TAG 426
-#define VAR_RESPONSE_IP 427
-#define VAR_RESPONSE_IP_DATA 428
-#define VAR_HARDEN_ALGO_DOWNGRADE 429
-#define VAR_IP_TRANSPARENT 430
-#define VAR_DISABLE_DNSSEC_LAME_CHECK 431
-#define VAR_IP_RATELIMIT 432
-#define VAR_IP_RATELIMIT_SLABS 433
-#define VAR_IP_RATELIMIT_SIZE 434
-#define VAR_RATELIMIT 435
-#define VAR_RATELIMIT_SLABS 436
-#define VAR_RATELIMIT_SIZE 437
-#define VAR_RATELIMIT_FOR_DOMAIN 438
-#define VAR_RATELIMIT_BELOW_DOMAIN 439
-#define VAR_IP_RATELIMIT_FACTOR 440
-#define VAR_RATELIMIT_FACTOR 441
-#define VAR_SEND_CLIENT_SUBNET 442
-#define VAR_CLIENT_SUBNET_ZONE 443
-#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 444
-#define VAR_CLIENT_SUBNET_OPCODE 445
-#define VAR_MAX_CLIENT_SUBNET_IPV4 446
-#define VAR_MAX_CLIENT_SUBNET_IPV6 447
-#define VAR_MIN_CLIENT_SUBNET_IPV4 448
-#define VAR_MIN_CLIENT_SUBNET_IPV6 449
-#define VAR_MAX_ECS_TREE_SIZE_IPV4 450
-#define VAR_MAX_ECS_TREE_SIZE_IPV6 451
-#define VAR_CAPS_WHITELIST 452
-#define VAR_CACHE_MAX_NEGATIVE_TTL 453
-#define VAR_PERMIT_SMALL_HOLDDOWN 454
-#define VAR_QNAME_MINIMISATION 455
-#define VAR_QNAME_MINIMISATION_STRICT 456
-#define VAR_IP_FREEBIND 457
-#define VAR_DEFINE_TAG 458
-#define VAR_LOCAL_ZONE_TAG 459
-#define VAR_ACCESS_CONTROL_TAG 460
-#define VAR_LOCAL_ZONE_OVERRIDE 461
-#define VAR_ACCESS_CONTROL_TAG_ACTION 462
-#define VAR_ACCESS_CONTROL_TAG_DATA 463
-#define VAR_VIEW 464
-#define VAR_ACCESS_CONTROL_VIEW 465
-#define VAR_VIEW_FIRST 466
-#define VAR_SERVE_EXPIRED 467
-#define VAR_SERVE_EXPIRED_TTL 468
-#define VAR_SERVE_EXPIRED_TTL_RESET 469
-#define VAR_SERVE_EXPIRED_REPLY_TTL 470
-#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 471
-#define VAR_FAKE_DSA 472
-#define VAR_FAKE_SHA1 473
-#define VAR_LOG_IDENTITY 474
-#define VAR_HIDE_TRUSTANCHOR 475
-#define VAR_TRUST_ANCHOR_SIGNALING 476
-#define VAR_AGGRESSIVE_NSEC 477
-#define VAR_USE_SYSTEMD 478
-#define VAR_SHM_ENABLE 479
-#define VAR_SHM_KEY 480
-#define VAR_ROOT_KEY_SENTINEL 481
-#define VAR_DNSCRYPT 482
-#define VAR_DNSCRYPT_ENABLE 483
-#define VAR_DNSCRYPT_PORT 484
-#define VAR_DNSCRYPT_PROVIDER 485
-#define VAR_DNSCRYPT_SECRET_KEY 486
-#define VAR_DNSCRYPT_PROVIDER_CERT 487
-#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 488
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 489
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 490
-#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 491
-#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 492
-#define VAR_IPSECMOD_ENABLED 493
-#define VAR_IPSECMOD_HOOK 494
-#define VAR_IPSECMOD_IGNORE_BOGUS 495
-#define VAR_IPSECMOD_MAX_TTL 496
-#define VAR_IPSECMOD_WHITELIST 497
-#define VAR_IPSECMOD_STRICT 498
-#define VAR_CACHEDB 499
-#define VAR_CACHEDB_BACKEND 500
-#define VAR_CACHEDB_SECRETSEED 501
-#define VAR_CACHEDB_REDISHOST 502
-#define VAR_CACHEDB_REDISPORT 503
-#define VAR_CACHEDB_REDISTIMEOUT 504
-#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 505
-#define VAR_FOR_UPSTREAM 506
-#define VAR_AUTH_ZONE 507
-#define VAR_ZONEFILE 508
-#define VAR_MASTER 509
-#define VAR_URL 510
-#define VAR_FOR_DOWNSTREAM 511
-#define VAR_FALLBACK_ENABLED 512
-#define VAR_TLS_ADDITIONAL_PORT 513
-#define VAR_LOW_RTT 514
-#define VAR_LOW_RTT_PERMIL 515
-#define VAR_FAST_SERVER_PERMIL 516
-#define VAR_FAST_SERVER_NUM 517
-#define VAR_ALLOW_NOTIFY 518
-#define VAR_TLS_WIN_CERT 519
-#define VAR_TCP_CONNECTION_LIMIT 520
-#define VAR_FORWARD_NO_CACHE 521
-#define VAR_STUB_NO_CACHE 522
-#define VAR_LOG_SERVFAIL 523
-#define VAR_DENY_ANY 524
-#define VAR_UNKNOWN_SERVER_TIME_LIMIT 525
-#define VAR_LOG_TAG_QUERYREPLY 526
-#define VAR_STREAM_WAIT_SIZE 527
-#define VAR_TLS_CIPHERS 528
-#define VAR_TLS_CIPHERSUITES 529
-#define VAR_IPSET 530
-#define VAR_IPSET_NAME_V4 531
-#define VAR_IPSET_NAME_V6 532
-#define VAR_TLS_SESSION_TICKET_KEYS 533
-#define VAR_RPZ 534
-#define VAR_TAGS 535
-#define VAR_RPZ_ACTION_OVERRIDE 536
-#define VAR_RPZ_CNAME_OVERRIDE 537
-#define VAR_RPZ_LOG 538
-#define VAR_RPZ_LOG_NAME 539
+#define VAR_HTTPS_PORT 396
+#define VAR_STUB_FIRST 397
+#define VAR_MINIMAL_RESPONSES 398
+#define VAR_RRSET_ROUNDROBIN 399
+#define VAR_MAX_UDP_SIZE 400
+#define VAR_DELAY_CLOSE 401
+#define VAR_UNBLOCK_LAN_ZONES 402
+#define VAR_INSECURE_LAN_ZONES 403
+#define VAR_INFRA_CACHE_MIN_RTT 404
+#define VAR_DNS64_PREFIX 405
+#define VAR_DNS64_SYNTHALL 406
+#define VAR_DNS64_IGNORE_AAAA 407
+#define VAR_DNSTAP 408
+#define VAR_DNSTAP_ENABLE 409
+#define VAR_DNSTAP_SOCKET_PATH 410
+#define VAR_DNSTAP_IP 411
+#define VAR_DNSTAP_TLS 412
+#define VAR_DNSTAP_TLS_SERVER_NAME 413
+#define VAR_DNSTAP_TLS_CERT_BUNDLE 414
+#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 415
+#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 416
+#define VAR_DNSTAP_SEND_IDENTITY 417
+#define VAR_DNSTAP_SEND_VERSION 418
+#define VAR_DNSTAP_IDENTITY 419
+#define VAR_DNSTAP_VERSION 420
+#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 421
+#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 422
+#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 423
+#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 424
+#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 425
+#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 426
+#define VAR_RESPONSE_IP_TAG 427
+#define VAR_RESPONSE_IP 428
+#define VAR_RESPONSE_IP_DATA 429
+#define VAR_HARDEN_ALGO_DOWNGRADE 430
+#define VAR_IP_TRANSPARENT 431
+#define VAR_DISABLE_DNSSEC_LAME_CHECK 432
+#define VAR_IP_RATELIMIT 433
+#define VAR_IP_RATELIMIT_SLABS 434
+#define VAR_IP_RATELIMIT_SIZE 435
+#define VAR_RATELIMIT 436
+#define VAR_RATELIMIT_SLABS 437
+#define VAR_RATELIMIT_SIZE 438
+#define VAR_RATELIMIT_FOR_DOMAIN 439
+#define VAR_RATELIMIT_BELOW_DOMAIN 440
+#define VAR_IP_RATELIMIT_FACTOR 441
+#define VAR_RATELIMIT_FACTOR 442
+#define VAR_SEND_CLIENT_SUBNET 443
+#define VAR_CLIENT_SUBNET_ZONE 444
+#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 445
+#define VAR_CLIENT_SUBNET_OPCODE 446
+#define VAR_MAX_CLIENT_SUBNET_IPV4 447
+#define VAR_MAX_CLIENT_SUBNET_IPV6 448
+#define VAR_MIN_CLIENT_SUBNET_IPV4 449
+#define VAR_MIN_CLIENT_SUBNET_IPV6 450
+#define VAR_MAX_ECS_TREE_SIZE_IPV4 451
+#define VAR_MAX_ECS_TREE_SIZE_IPV6 452
+#define VAR_CAPS_WHITELIST 453
+#define VAR_CACHE_MAX_NEGATIVE_TTL 454
+#define VAR_PERMIT_SMALL_HOLDDOWN 455
+#define VAR_QNAME_MINIMISATION 456
+#define VAR_QNAME_MINIMISATION_STRICT 457
+#define VAR_IP_FREEBIND 458
+#define VAR_DEFINE_TAG 459
+#define VAR_LOCAL_ZONE_TAG 460
+#define VAR_ACCESS_CONTROL_TAG 461
+#define VAR_LOCAL_ZONE_OVERRIDE 462
+#define VAR_ACCESS_CONTROL_TAG_ACTION 463
+#define VAR_ACCESS_CONTROL_TAG_DATA 464
+#define VAR_VIEW 465
+#define VAR_ACCESS_CONTROL_VIEW 466
+#define VAR_VIEW_FIRST 467
+#define VAR_SERVE_EXPIRED 468
+#define VAR_SERVE_EXPIRED_TTL 469
+#define VAR_SERVE_EXPIRED_TTL_RESET 470
+#define VAR_SERVE_EXPIRED_REPLY_TTL 471
+#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 472
+#define VAR_FAKE_DSA 473
+#define VAR_FAKE_SHA1 474
+#define VAR_LOG_IDENTITY 475
+#define VAR_HIDE_TRUSTANCHOR 476
+#define VAR_TRUST_ANCHOR_SIGNALING 477
+#define VAR_AGGRESSIVE_NSEC 478
+#define VAR_USE_SYSTEMD 479
+#define VAR_SHM_ENABLE 480
+#define VAR_SHM_KEY 481
+#define VAR_ROOT_KEY_SENTINEL 482
+#define VAR_DNSCRYPT 483
+#define VAR_DNSCRYPT_ENABLE 484
+#define VAR_DNSCRYPT_PORT 485
+#define VAR_DNSCRYPT_PROVIDER 486
+#define VAR_DNSCRYPT_SECRET_KEY 487
+#define VAR_DNSCRYPT_PROVIDER_CERT 488
+#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 489
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 490
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 491
+#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 492
+#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 493
+#define VAR_IPSECMOD_ENABLED 494
+#define VAR_IPSECMOD_HOOK 495
+#define VAR_IPSECMOD_IGNORE_BOGUS 496
+#define VAR_IPSECMOD_MAX_TTL 497
+#define VAR_IPSECMOD_WHITELIST 498
+#define VAR_IPSECMOD_STRICT 499
+#define VAR_CACHEDB 500
+#define VAR_CACHEDB_BACKEND 501
+#define VAR_CACHEDB_SECRETSEED 502
+#define VAR_CACHEDB_REDISHOST 503
+#define VAR_CACHEDB_REDISPORT 504
+#define VAR_CACHEDB_REDISTIMEOUT 505
+#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 506
+#define VAR_FOR_UPSTREAM 507
+#define VAR_AUTH_ZONE 508
+#define VAR_ZONEFILE 509
+#define VAR_MASTER 510
+#define VAR_URL 511
+#define VAR_FOR_DOWNSTREAM 512
+#define VAR_FALLBACK_ENABLED 513
+#define VAR_TLS_ADDITIONAL_PORT 514
+#define VAR_LOW_RTT 515
+#define VAR_LOW_RTT_PERMIL 516
+#define VAR_FAST_SERVER_PERMIL 517
+#define VAR_FAST_SERVER_NUM 518
+#define VAR_ALLOW_NOTIFY 519
+#define VAR_TLS_WIN_CERT 520
+#define VAR_TCP_CONNECTION_LIMIT 521
+#define VAR_FORWARD_NO_CACHE 522
+#define VAR_STUB_NO_CACHE 523
+#define VAR_LOG_SERVFAIL 524
+#define VAR_DENY_ANY 525
+#define VAR_UNKNOWN_SERVER_TIME_LIMIT 526
+#define VAR_LOG_TAG_QUERYREPLY 527
+#define VAR_STREAM_WAIT_SIZE 528
+#define VAR_TLS_CIPHERS 529
+#define VAR_TLS_CIPHERSUITES 530
+#define VAR_IPSET 531
+#define VAR_IPSET_NAME_V4 532
+#define VAR_IPSET_NAME_V6 533
+#define VAR_TLS_SESSION_TICKET_KEYS 534
+#define VAR_RPZ 535
+#define VAR_TAGS 536
+#define VAR_RPZ_ACTION_OVERRIDE 537
+#define VAR_RPZ_CNAME_OVERRIDE 538
+#define VAR_RPZ_LOG 539
+#define VAR_RPZ_LOG_NAME 540
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+
 union YYSTYPE
 {
-#line 66 "./util/configparser.y"
+#line 66 "./util/configparser.y" /* yacc.c:355  */
 
        char*   str;
 
-#line 714 "util/configparser.c"
-
+#line 709 "util/configparser.c" /* yacc.c:355  */
 };
+
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -725,7 +720,9 @@ int yyparse (void);
 
 #endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED  */
 
+/* Copy the second part of user declarations.  */
 
+#line 726 "util/configparser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -746,13 +743,13 @@ typedef signed char yytype_int8;
 #ifdef YYTYPE_UINT16
 typedef YYTYPE_UINT16 yytype_uint16;
 #else
-typedef unsigned short yytype_uint16;
+typedef unsigned short int yytype_uint16;
 #endif
 
 #ifdef YYTYPE_INT16
 typedef YYTYPE_INT16 yytype_int16;
 #else
-typedef short yytype_int16;
+typedef short int yytype_int16;
 #endif
 
 #ifndef YYSIZE_T
@@ -764,7 +761,7 @@ typedef short yytype_int16;
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned
+#  define YYSIZE_T unsigned int
 # endif
 #endif
 
@@ -800,6 +797,15 @@ typedef short yytype_int16;
 # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
 #endif
 
+#if !defined _Noreturn \
+     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
+# if defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+# endif
+#endif
+
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
 # define YYUSE(E) ((void) (E))
@@ -807,7 +813,7 @@ typedef short yytype_int16;
 # define YYUSE(E) /* empty */
 #endif
 
-#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
     _Pragma ("GCC diagnostic push") \
@@ -827,8 +833,6 @@ typedef short yytype_int16;
 #endif
 
 
-#define YY_ASSERT(E) ((void) (0 && (E)))
-
 #if ! defined yyoverflow || YYERROR_VERBOSE
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
@@ -960,27 +964,27 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   604
+#define YYLAST   606
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  285
+#define YYNTOKENS  286
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  308
+#define YYNNTS  309
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  594
+#define YYNRULES  596
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  884
+#define YYNSTATES  887
 
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+   by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   539
+#define YYMAXUTOK   540
 
-/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, with out-of-bounds checking.  */
 #define YYTRANSLATE(YYX)                                                \
-  ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex.  */
+   as returned by yylex, without out-of-bounds checking.  */
 static const yytype_uint16 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1036,73 +1040,74 @@ static const yytype_uint16 yytranslate[] =
      245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
      255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   177,   177,   177,   178,   178,   179,   179,   180,   180,
-     180,   181,   181,   182,   182,   183,   187,   192,   193,   194,
-     194,   194,   195,   195,   196,   196,   196,   197,   197,   198,
-     198,   198,   199,   199,   200,   200,   200,   201,   201,   201,
-     202,   202,   203,   203,   204,   204,   205,   205,   206,   206,
-     207,   207,   208,   208,   209,   209,   210,   210,   210,   211,
-     211,   211,   212,   212,   212,   213,   213,   214,   214,   215,
-     215,   216,   216,   217,   217,   217,   218,   218,   219,   219,
-     220,   220,   220,   221,   221,   222,   222,   223,   223,   224,
-     224,   224,   225,   225,   226,   226,   227,   227,   228,   228,
-     229,   229,   230,   230,   230,   231,   231,   232,   232,   232,
-     233,   233,   233,   234,   234,   234,   235,   235,   235,   235,
-     236,   237,   237,   237,   238,   238,   238,   239,   239,   240,
-     240,   241,   241,   241,   242,   242,   243,   243,   243,   244,
-     244,   245,   245,   246,   247,   247,   248,   248,   249,   249,
-     250,   251,   251,   252,   252,   253,   253,   254,   254,   255,
-     255,   256,   256,   256,   257,   257,   258,   258,   259,   259,
-     260,   260,   261,   261,   262,   262,   263,   263,   263,   264,
-     264,   264,   265,   265,   265,   266,   266,   267,   268,   268,
-     269,   269,   270,   270,   271,   271,   272,   272,   272,   273,
-     273,   273,   274,   274,   274,   275,   275,   276,   276,   277,
-     277,   279,   291,   292,   293,   293,   293,   293,   293,   294,
-     294,   296,   308,   309,   310,   310,   310,   310,   311,   311,
-     313,   327,   328,   329,   329,   329,   329,   330,   330,   330,
-     332,   349,   350,   351,   351,   351,   351,   352,   352,   352,
-     353,   356,   375,   392,   400,   410,   418,   435,   436,   437,
-     437,   437,   437,   437,   438,   438,   438,   439,   439,   441,
-     450,   459,   470,   479,   488,   497,   508,   517,   529,   543,
-     558,   569,   586,   603,   620,   637,   652,   667,   680,   695,
-     704,   713,   722,   731,   740,   749,   758,   767,   776,   785,
-     794,   803,   812,   821,   834,   843,   856,   865,   874,   883,
-     890,   897,   906,   913,   922,   930,   937,   944,   952,   961,
-     970,   984,   993,  1002,  1011,  1020,  1029,  1038,  1045,  1052,
-    1078,  1086,  1093,  1100,  1107,  1114,  1122,  1130,  1138,  1145,
-    1156,  1167,  1174,  1183,  1192,  1201,  1208,  1215,  1223,  1231,
-    1241,  1251,  1261,  1269,  1282,  1293,  1301,  1314,  1323,  1332,
-    1341,  1351,  1361,  1369,  1382,  1391,  1399,  1408,  1416,  1429,
-    1438,  1445,  1455,  1465,  1475,  1485,  1495,  1505,  1515,  1525,
-    1532,  1539,  1546,  1555,  1564,  1573,  1582,  1589,  1599,  1619,
-    1626,  1644,  1657,  1670,  1679,  1688,  1697,  1706,  1716,  1726,
-    1737,  1746,  1755,  1764,  1773,  1782,  1791,  1804,  1817,  1826,
-    1833,  1842,  1851,  1860,  1869,  1877,  1890,  1898,  1939,  1946,
-    1961,  1971,  1981,  1988,  1995,  2002,  2011,  2019,  2033,  2054,
-    2075,  2087,  2099,  2111,  2120,  2141,  2151,  2160,  2168,  2176,
-    2189,  2202,  2217,  2232,  2241,  2250,  2256,  2265,  2274,  2284,
-    2294,  2307,  2320,  2332,  2346,  2358,  2372,  2382,  2389,  2396,
-    2405,  2414,  2424,  2434,  2444,  2451,  2458,  2467,  2476,  2486,
-    2496,  2503,  2510,  2517,  2525,  2535,  2545,  2555,  2565,  2604,
-    2614,  2622,  2630,  2645,  2654,  2659,  2660,  2661,  2661,  2661,
-    2662,  2662,  2662,  2663,  2663,  2665,  2675,  2684,  2691,  2698,
-    2705,  2712,  2719,  2726,  2731,  2732,  2733,  2733,  2734,  2734,
-    2734,  2735,  2736,  2736,  2737,  2737,  2738,  2738,  2739,  2740,
-    2741,  2742,  2743,  2744,  2746,  2755,  2762,  2769,  2778,  2785,
-    2792,  2799,  2806,  2815,  2824,  2831,  2838,  2848,  2858,  2868,
-    2878,  2888,  2898,  2903,  2904,  2905,  2907,  2913,  2923,  2930,
-    2939,  2947,  2952,  2953,  2955,  2955,  2955,  2956,  2956,  2957,
-    2958,  2959,  2960,  2961,  2963,  2973,  2982,  2989,  2998,  3005,
-    3014,  3022,  3035,  3043,  3056,  3061,  3062,  3063,  3063,  3064,
-    3064,  3064,  3066,  3078,  3090,  3102,  3117,  3130,  3141,  3146,
-    3147,  3148,  3148,  3150,  3165
+       0,   178,   178,   178,   179,   179,   180,   180,   181,   181,
+     181,   182,   182,   183,   183,   184,   188,   193,   194,   195,
+     195,   195,   196,   196,   197,   197,   197,   198,   198,   199,
+     199,   199,   200,   200,   201,   201,   201,   202,   202,   202,
+     203,   203,   204,   204,   205,   205,   206,   206,   207,   207,
+     208,   208,   209,   209,   210,   210,   211,   211,   211,   212,
+     212,   212,   213,   213,   213,   214,   214,   215,   215,   216,
+     216,   217,   217,   218,   218,   218,   219,   219,   220,   220,
+     221,   221,   221,   222,   222,   223,   223,   224,   224,   225,
+     225,   225,   226,   226,   227,   227,   228,   228,   229,   229,
+     230,   230,   231,   231,   231,   232,   232,   233,   233,   233,
+     234,   234,   234,   235,   235,   235,   236,   236,   236,   236,
+     237,   238,   238,   238,   239,   240,   240,   240,   241,   241,
+     242,   242,   243,   243,   243,   244,   244,   245,   245,   245,
+     246,   246,   247,   247,   248,   249,   249,   250,   250,   251,
+     251,   252,   253,   253,   254,   254,   255,   255,   256,   256,
+     257,   257,   258,   258,   258,   259,   259,   260,   260,   261,
+     261,   262,   262,   263,   263,   264,   264,   265,   265,   265,
+     266,   266,   266,   267,   267,   267,   268,   268,   269,   270,
+     270,   271,   271,   272,   272,   273,   273,   274,   274,   274,
+     275,   275,   275,   276,   276,   276,   277,   277,   278,   278,
+     279,   279,   281,   293,   294,   295,   295,   295,   295,   295,
+     296,   296,   298,   310,   311,   312,   312,   312,   312,   313,
+     313,   315,   329,   330,   331,   331,   331,   331,   332,   332,
+     332,   334,   351,   352,   353,   353,   353,   353,   354,   354,
+     354,   355,   358,   377,   394,   402,   412,   420,   437,   438,
+     439,   439,   439,   439,   439,   440,   440,   440,   441,   441,
+     443,   452,   461,   472,   481,   490,   499,   510,   519,   531,
+     545,   560,   571,   588,   605,   622,   639,   654,   669,   682,
+     697,   706,   715,   724,   733,   742,   751,   760,   769,   778,
+     787,   796,   805,   814,   823,   836,   845,   858,   867,   876,
+     885,   892,   899,   908,   915,   924,   932,   939,   946,   954,
+     963,   972,   981,   995,  1004,  1013,  1022,  1031,  1040,  1049,
+    1056,  1063,  1089,  1097,  1104,  1111,  1118,  1125,  1133,  1141,
+    1149,  1156,  1167,  1178,  1185,  1194,  1203,  1212,  1219,  1226,
+    1234,  1242,  1252,  1262,  1272,  1280,  1293,  1304,  1312,  1325,
+    1334,  1343,  1352,  1362,  1372,  1380,  1393,  1402,  1410,  1419,
+    1427,  1440,  1449,  1456,  1466,  1476,  1486,  1496,  1506,  1516,
+    1526,  1536,  1543,  1550,  1557,  1566,  1575,  1584,  1593,  1600,
+    1610,  1630,  1637,  1655,  1668,  1681,  1690,  1699,  1708,  1717,
+    1727,  1737,  1748,  1757,  1766,  1775,  1784,  1793,  1802,  1815,
+    1828,  1837,  1844,  1853,  1862,  1871,  1880,  1888,  1901,  1909,
+    1950,  1957,  1972,  1982,  1992,  1999,  2006,  2013,  2022,  2030,
+    2044,  2065,  2086,  2098,  2110,  2122,  2131,  2152,  2162,  2171,
+    2179,  2187,  2200,  2213,  2228,  2243,  2252,  2261,  2267,  2276,
+    2285,  2295,  2305,  2318,  2331,  2343,  2357,  2369,  2383,  2393,
+    2400,  2407,  2416,  2425,  2435,  2445,  2455,  2462,  2469,  2478,
+    2487,  2497,  2507,  2514,  2521,  2528,  2536,  2546,  2556,  2566,
+    2576,  2615,  2625,  2633,  2641,  2656,  2665,  2670,  2671,  2672,
+    2672,  2672,  2673,  2673,  2673,  2674,  2674,  2676,  2686,  2695,
+    2702,  2709,  2716,  2723,  2730,  2737,  2742,  2743,  2744,  2744,
+    2745,  2745,  2745,  2746,  2747,  2747,  2748,  2748,  2749,  2749,
+    2750,  2751,  2752,  2753,  2754,  2755,  2757,  2766,  2773,  2780,
+    2789,  2796,  2803,  2810,  2817,  2826,  2835,  2842,  2849,  2859,
+    2869,  2879,  2889,  2899,  2909,  2914,  2915,  2916,  2918,  2924,
+    2934,  2941,  2950,  2958,  2963,  2964,  2966,  2966,  2966,  2967,
+    2967,  2968,  2969,  2970,  2971,  2972,  2974,  2984,  2993,  3000,
+    3009,  3016,  3025,  3033,  3046,  3054,  3067,  3072,  3073,  3074,
+    3074,  3075,  3075,  3075,  3077,  3089,  3101,  3113,  3128,  3141,
+    3152,  3157,  3158,  3159,  3159,  3161,  3176
 };
 #endif
 
@@ -1155,16 +1160,16 @@ static const char *const yytname[] =
   "VAR_LOG_REPLIES", "VAR_LOG_LOCAL_ACTIONS", "VAR_TCP_UPSTREAM",
   "VAR_SSL_UPSTREAM", "VAR_SSL_SERVICE_KEY", "VAR_SSL_SERVICE_PEM",
   "VAR_SSL_PORT", "VAR_FORWARD_FIRST", "VAR_STUB_SSL_UPSTREAM",
-  "VAR_FORWARD_SSL_UPSTREAM", "VAR_TLS_CERT_BUNDLE", "VAR_STUB_FIRST",
-  "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE",
-  "VAR_DELAY_CLOSE", "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES",
-  "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL",
-  "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE",
-  "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP", "VAR_DNSTAP_TLS",
-  "VAR_DNSTAP_TLS_SERVER_NAME", "VAR_DNSTAP_TLS_CERT_BUNDLE",
-  "VAR_DNSTAP_TLS_CLIENT_KEY_FILE", "VAR_DNSTAP_TLS_CLIENT_CERT_FILE",
-  "VAR_DNSTAP_SEND_IDENTITY", "VAR_DNSTAP_SEND_VERSION",
-  "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
+  "VAR_FORWARD_SSL_UPSTREAM", "VAR_TLS_CERT_BUNDLE", "VAR_HTTPS_PORT",
+  "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN",
+  "VAR_MAX_UDP_SIZE", "VAR_DELAY_CLOSE", "VAR_UNBLOCK_LAN_ZONES",
+  "VAR_INSECURE_LAN_ZONES", "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX",
+  "VAR_DNS64_SYNTHALL", "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP",
+  "VAR_DNSTAP_ENABLE", "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP",
+  "VAR_DNSTAP_TLS", "VAR_DNSTAP_TLS_SERVER_NAME",
+  "VAR_DNSTAP_TLS_CERT_BUNDLE", "VAR_DNSTAP_TLS_CLIENT_KEY_FILE",
+  "VAR_DNSTAP_TLS_CLIENT_CERT_FILE", "VAR_DNSTAP_SEND_IDENTITY",
+  "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
   "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES",
   "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES",
   "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES",
@@ -1244,9 +1249,9 @@ static const char *const yytname[] =
   "server_tls_cert_bundle", "server_tls_win_cert",
   "server_tls_additional_port", "server_tls_ciphers",
   "server_tls_ciphersuites", "server_tls_session_ticket_keys",
-  "server_use_systemd", "server_do_daemonize", "server_use_syslog",
-  "server_log_time_ascii", "server_log_queries", "server_log_replies",
-  "server_log_tag_queryreply", "server_log_servfail",
+  "server_https_port", "server_use_systemd", "server_do_daemonize",
+  "server_use_syslog", "server_log_time_ascii", "server_log_queries",
+  "server_log_replies", "server_log_tag_queryreply", "server_log_servfail",
   "server_log_local_actions", "server_chroot", "server_username",
   "server_directory", "server_logfile", "server_pidfile",
   "server_root_hints", "server_dlv_anchor_file", "server_dlv_anchor",
@@ -1377,14 +1382,14 @@ static const yytype_uint16 yytoknum[] =
      505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
      515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
      525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
-     535,   536,   537,   538,   539
+     535,   536,   537,   538,   539,   540
 };
 # endif
 
-#define YYPACT_NINF -269
+#define YYPACT_NINF -271
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-269)))
+  (!!((Yystate) == (-271)))
 
 #define YYTABLE_NINF -1
 
@@ -1395,95 +1400,95 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -269,     0,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,   268,   -42,
-     -37,   -41,   -21,   -43,   -44,   -87,  -106,  -204,  -228,  -268,
-       2,     3,     4,    12,    24,    25,    26,    27,    28,    31,
+    -271,     0,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,   269,   -42,
+     -38,   -41,   -21,   -43,   -44,   -88,  -103,  -205,  -230,  -270,
+       2,     3,    11,    12,    24,    25,    26,    27,    28,    31,
       32,    33,    34,    36,    37,    38,    39,    40,    50,    51,
       52,    53,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    87,    88,    91,    93,    94,    95,    96,
+      82,    83,    84,    87,    88,    92,    93,    94,    95,    96,
       97,    98,    99,   100,   102,   103,   104,   105,   106,   107,
      108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   123,   124,   125,   126,   127,   128,   129,
+     118,   119,   120,   121,   124,   125,   126,   127,   128,   129,
      130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   161,
+     140,   141,   142,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
      172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
      182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   203,   204,   205,
-     206,   207,   208,   209,   211,   212,   213,   214,   216,   218,
-     221,   233,   235,   236,   237,   238,   239,   240,   241,   243,
+     192,   193,   194,   195,   196,   197,   198,   199,   204,   205,
+     206,   207,   208,   209,   210,   212,   213,   214,   215,   217,
+     220,   222,   234,   236,   237,   238,   239,   240,   241,   242,
      244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
      254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   266,   267,   302,   303,   304,   305,   309,   310,   311,
-     353,   354,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,   355,   356,   357,   358,   359,
-     360,   361,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-     365,   369,   370,   395,   396,   397,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,   399,   410,   411,   412,   413,   414,   415,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,   416,   417,
-     418,   419,   420,   421,   422,   423,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,   424,   425,   426,   427,   428,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,   467,   469,   485,   486,   487,   488,   489,   490,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,   491,   492,
-     493,   494,   495,   502,   503,   504,   505,   506,   507,   509,
-     510,   511,   512,   513,   514,   515,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,   518,  -269,  -269,   521,   524,
-     525,   533,   534,   535,   537,   538,   539,   540,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,   541,
-     542,   543,   544,   545,  -269,  -269,  -269,  -269,  -269,  -269,
-     546,   547,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,   548,   549,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,   550,   551,   552,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,   553,   554,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,   555,   556,   557,   558,   559,
-     560,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,   561,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,   562,  -269,  -269,   563,   564,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,   565,   566,   567,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269
+     264,   265,   267,   268,   303,   304,   305,   306,   310,   311,
+     312,   354,   355,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,   356,   357,   358,
+     359,   360,   361,   362,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,   366,   370,   371,   396,   397,   398,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,   401,   412,   413,   414,   415,
+     416,   417,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+     418,   419,   420,   421,   422,   423,   424,   425,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,   426,   427,   428,
+     429,   430,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,   469,   471,   487,   488,   489,   490,   491,
+     492,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+     493,   494,   495,   496,   497,   504,   505,   506,   507,   508,
+     509,   511,   512,   513,   514,   515,   516,   517,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,   520,  -271,  -271,
+     523,   526,   527,   535,   536,   537,   539,   540,   541,   542,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,   543,   544,   545,   546,   547,  -271,  -271,  -271,  -271,
+    -271,  -271,   548,   549,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,   550,   551,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,   552,   553,   554,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,   555,   556,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,   557,   558,
+     559,   560,   561,   562,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,   563,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,   564,  -271,  -271,   565,   566,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,   567,   568,   569,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1491,9 +1496,9 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       2,     0,     1,    16,   211,   221,   484,   542,   503,   230,
-     551,   574,   240,   588,   256,     3,    18,   213,   223,   232,
-     242,   258,   486,   505,   544,   553,   576,   590,     4,     5,
+       2,     0,     1,    16,   212,   222,   486,   544,   505,   231,
+     553,   576,   241,   590,   257,     3,    18,   214,   224,   233,
+     243,   259,   488,   507,   546,   555,   578,   592,     4,     5,
        6,    10,    14,    15,     8,     9,     7,    11,    12,    13,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -1514,144 +1519,144 @@ static const yytype_uint16 yydefact[] =
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    17,    19,    20,    83,    86,    95,   182,   183,
-      21,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,    34,    74,    22,    87,    88,    45,    67,    82,    23,
-      24,    27,    28,    25,    26,    29,    30,    31,    32,    33,
-     118,   194,   119,   121,   122,   123,   196,   201,   197,   208,
-     209,   210,   178,    84,    73,    99,   116,   117,   206,   203,
-     120,    35,    36,    37,    38,    39,    75,    89,    90,   105,
-      61,    71,    62,   186,   187,   100,    55,    56,   185,    57,
-      58,   109,   113,   127,   136,   161,   207,   110,    68,    40,
-      41,    42,    97,   128,   129,   130,    43,    44,    46,    47,
-      49,    50,    48,   134,    51,    52,    53,    59,    78,   114,
-      92,   135,    85,   157,    93,    94,   111,   112,   204,    98,
-      54,    76,    79,    60,    63,   101,   102,    77,   158,   103,
-      64,    65,    66,   195,   115,   171,   172,   173,   174,   175,
-     176,   184,   104,    72,   106,   107,   108,   159,    69,    70,
-      91,    80,    81,    96,   124,   125,   205,   126,   131,   132,
-     133,   162,   163,   165,   167,   168,   166,   169,   179,   137,
-     138,   141,   142,   139,   140,   143,   144,   146,   145,   198,
-     200,   199,   160,   170,   188,   190,   189,   191,   192,   193,
-     164,   177,   180,   181,   202,     0,     0,     0,     0,     0,
-       0,     0,   212,   214,   215,   216,   218,   219,   220,   217,
-       0,     0,     0,     0,     0,     0,   222,   224,   225,   226,
-     227,   228,   229,     0,     0,     0,     0,     0,     0,     0,
-     231,   233,   234,   237,   238,   235,   239,   236,     0,     0,
-       0,     0,     0,     0,     0,     0,   241,   243,   244,   245,
-     246,   250,   247,   248,   249,     0,     0,     0,     0,     0,
-     261,   265,   266,   267,   268,   257,   259,   260,   262,   263,
-     264,     0,     0,     0,     0,     0,     0,     0,     0,   485,
-     487,   489,   488,   494,   490,   491,   492,   493,     0,     0,
+       0,     0,     0,    17,    19,    20,    83,    86,    95,   183,
+     184,    21,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,    34,    74,    22,    87,    88,    45,    67,    82,
+      23,    24,    27,    28,    25,    26,    29,    30,    31,    32,
+      33,   118,   195,   119,   121,   122,   123,   197,   202,   198,
+     209,   210,   211,   124,   179,    84,    73,    99,   116,   117,
+     207,   204,   120,    35,    36,    37,    38,    39,    75,    89,
+      90,   105,    61,    71,    62,   187,   188,   100,    55,    56,
+     186,    57,    58,   109,   113,   128,   137,   162,   208,   110,
+      68,    40,    41,    42,    97,   129,   130,   131,    43,    44,
+      46,    47,    49,    50,    48,   135,    51,    52,    53,    59,
+      78,   114,    92,   136,    85,   158,    93,    94,   111,   112,
+     205,    98,    54,    76,    79,    60,    63,   101,   102,    77,
+     159,   103,    64,    65,    66,   196,   115,   172,   173,   174,
+     175,   176,   177,   185,   104,    72,   106,   107,   108,   160,
+      69,    70,    91,    80,    81,    96,   125,   126,   206,   127,
+     132,   133,   134,   163,   164,   166,   168,   169,   167,   170,
+     180,   138,   139,   142,   143,   140,   141,   144,   145,   147,
+     146,   199,   201,   200,   161,   171,   189,   191,   190,   192,
+     193,   194,   165,   178,   181,   182,   203,     0,     0,     0,
+       0,     0,     0,     0,   213,   215,   216,   217,   219,   220,
+     221,   218,     0,     0,     0,     0,     0,     0,   223,   225,
+     226,   227,   228,   229,   230,     0,     0,     0,     0,     0,
+       0,     0,   232,   234,   235,   238,   239,   236,   240,   237,
+       0,     0,     0,     0,     0,     0,     0,     0,   242,   244,
+     245,   246,   247,   251,   248,   249,   250,     0,     0,     0,
+       0,     0,   262,   266,   267,   268,   269,   258,   260,   261,
+     263,   264,   265,     0,     0,     0,     0,     0,     0,     0,
+       0,   487,   489,   491,   490,   496,   492,   493,   494,   495,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   504,   506,   507,   508,
+       0,     0,     0,     0,     0,     0,     0,     0,   506,   508,
      509,   510,   511,   512,   513,   514,   515,   516,   517,   518,
-     519,   520,   521,   522,   523,     0,   543,   545,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   552,   554,
-     555,   556,   558,   559,   557,   560,   561,   562,   563,     0,
-       0,     0,     0,     0,   575,   577,   578,   579,   580,   581,
-       0,     0,   589,   591,   592,   270,   269,   276,   289,   287,
-     299,   295,   296,   300,   297,   298,   301,   302,   303,   304,
-     305,   327,   328,   329,   330,   331,   355,   356,   357,   362,
-     363,   292,   364,   365,   368,   366,   367,   370,   371,   372,
-     386,   342,   343,   345,   346,   373,   389,   336,   338,   390,
-     396,   397,   398,   293,   354,   414,   415,   337,   409,   320,
-     288,   332,   387,   393,   374,     0,     0,   418,   294,   271,
-     319,   378,   272,   290,   291,   333,   334,   416,   376,   380,
-     381,   273,   419,   358,   385,   321,   341,   391,   392,   395,
-     408,   335,   412,   410,   411,   347,   353,   382,   383,   348,
-     349,   375,   400,   322,   323,   326,   306,   308,   309,   310,
-     311,   312,   420,   421,   423,   359,   360,   361,   369,   424,
-     425,   426,     0,     0,     0,   377,   350,   547,   435,   439,
-     437,   436,   440,   438,     0,     0,   443,   444,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   379,   394,
-     413,   448,   449,   351,   427,     0,     0,     0,     0,     0,
-       0,   401,   402,   403,   404,   405,   406,   407,   548,   344,
-     339,   399,   318,   274,   275,   340,   450,   452,   451,   453,
-     454,   455,   307,   314,   445,   447,   446,   313,     0,   325,
-     384,   422,   324,   352,   315,   316,   317,   456,   457,   458,
-     462,   461,   459,   460,   463,   464,   465,   466,   468,   467,
-     477,     0,   481,   482,     0,     0,   483,   469,   475,   470,
-     471,   472,   474,   476,   473,   251,   252,   253,   254,   255,
-     495,   497,   496,   499,   500,   501,   502,   498,   524,   525,
-     526,   527,   528,   529,   530,   531,   532,   533,   534,   535,
-     536,   537,   538,   539,   540,   541,   546,   564,   565,   566,
-     569,   567,   568,   570,   571,   572,   573,   582,   583,   584,
-     585,   586,   593,   594,   388,   417,   434,   549,   550,   441,
-     442,   428,   429,     0,     0,     0,   433,   587,   478,   479,
-     480,   432,   430,   431
+     519,   520,   521,   522,   523,   524,   525,     0,   545,   547,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     554,   556,   557,   558,   560,   561,   559,   562,   563,   564,
+     565,     0,     0,     0,     0,     0,   577,   579,   580,   581,
+     582,   583,     0,     0,   591,   593,   594,   271,   270,   277,
+     290,   288,   300,   296,   297,   301,   298,   299,   302,   303,
+     304,   305,   306,   329,   330,   331,   332,   333,   357,   358,
+     359,   364,   365,   293,   366,   367,   370,   368,   369,   372,
+     373,   374,   388,   344,   345,   347,   348,   375,   391,   338,
+     340,   392,   398,   399,   400,   294,   356,   416,   417,   339,
+     411,   322,   289,   334,   389,   395,   376,     0,     0,   420,
+     295,   272,   321,   380,   273,   291,   292,   335,   336,   418,
+     378,   382,   383,   274,   421,   360,   387,   323,   343,   393,
+     394,   397,   410,   337,   414,   412,   413,   349,   355,   384,
+     385,   350,   351,   377,   402,   324,   325,   328,   307,   309,
+     310,   311,   312,   313,   319,   422,   423,   425,   361,   362,
+     363,   371,   426,   427,   428,     0,     0,     0,   379,   352,
+     549,   437,   441,   439,   438,   442,   440,     0,     0,   445,
+     446,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   381,   396,   415,   450,   451,   353,   429,     0,     0,
+       0,     0,     0,     0,   403,   404,   405,   406,   407,   408,
+     409,   550,   346,   341,   401,   320,   275,   276,   342,   452,
+     454,   453,   455,   456,   457,   308,   315,   447,   449,   448,
+     314,     0,   327,   386,   424,   326,   354,   316,   317,   318,
+     458,   459,   460,   464,   463,   461,   462,   465,   466,   467,
+     468,   470,   469,   479,     0,   483,   484,     0,     0,   485,
+     471,   477,   472,   473,   474,   476,   478,   475,   252,   253,
+     254,   255,   256,   497,   499,   498,   501,   502,   503,   504,
+     500,   526,   527,   528,   529,   530,   531,   532,   533,   534,
+     535,   536,   537,   538,   539,   540,   541,   542,   543,   548,
+     566,   567,   568,   571,   569,   570,   572,   573,   574,   575,
+     584,   585,   586,   587,   588,   595,   596,   390,   419,   436,
+     551,   552,   443,   444,   430,   431,     0,     0,     0,   435,
+     589,   480,   481,   482,   434,   432,   433
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,   -23,   568,   569,   570,
-     571,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,   -23,   570,   571,
+     572,   573,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,    15,    16,    28,   232,    17,    29,   432,    18,
-      30,   446,    19,    31,   460,    20,    32,   476,   490,   491,
-     492,   493,   494,    21,    33,   495,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
-     337,   338,   339,   340,   341,   342,   343,   344,   345,   346,
-     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
-     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
-     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
-     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
-     387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
-     397,   398,   399,   400,   401,   402,   403,   404,   405,   406,
-     407,   408,   409,   410,   411,   412,   413,   414,   415,   416,
-     417,   418,   419,   433,   434,   435,   436,   437,   438,   439,
-     447,   448,   449,   450,   451,   452,   477,   478,   479,   480,
-     481,   482,   483,   484,   461,   462,   463,   464,   465,   466,
-     467,    22,    34,   509,   510,   511,   512,   513,   514,   515,
-     516,   517,    23,    35,   536,   537,   538,   539,   540,   541,
-     542,   543,   544,   545,   546,   547,   548,   549,   550,   551,
-     552,   553,   554,    24,    36,   556,   557,   420,   421,   422,
-     423,    25,    37,   568,   569,   570,   571,   572,   573,   574,
-     575,   576,   577,   578,    26,    38,   584,   585,   586,   587,
-     588,   589,   424,    27,    39,   592,   593,   594
+      -1,     1,    15,    16,    28,   233,    17,    29,   434,    18,
+      30,   448,    19,    31,   462,    20,    32,   478,   492,   493,
+     494,   495,   496,    21,    33,   497,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,   333,   334,   335,   336,   337,
+     338,   339,   340,   341,   342,   343,   344,   345,   346,   347,
+     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
+     358,   359,   360,   361,   362,   363,   364,   365,   366,   367,
+     368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
+     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
+     388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   403,   404,   405,   406,   407,
+     408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
+     418,   419,   420,   421,   435,   436,   437,   438,   439,   440,
+     441,   449,   450,   451,   452,   453,   454,   479,   480,   481,
+     482,   483,   484,   485,   486,   463,   464,   465,   466,   467,
+     468,   469,    22,    34,   511,   512,   513,   514,   515,   516,
+     517,   518,   519,    23,    35,   538,   539,   540,   541,   542,
+     543,   544,   545,   546,   547,   548,   549,   550,   551,   552,
+     553,   554,   555,   556,    24,    36,   558,   559,   422,   423,
+     424,   425,    25,    37,   570,   571,   572,   573,   574,   575,
+     576,   577,   578,   579,   580,    26,    38,   586,   587,   588,
+     589,   590,   591,   426,    27,    39,   594,   595,   596
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1659,142 +1664,142 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint16 yytable[] =
 {
-       2,   468,   425,   453,   426,   427,   555,   440,   590,   591,
-     496,     3,   595,   596,   597,   441,   442,   579,   580,   581,
-     582,   583,   598,   468,   558,   559,   560,   561,   562,   563,
-     564,   565,   566,   567,   599,   600,   601,   602,   603,   454,
-     455,   604,   605,   606,   607,     4,   608,   609,   610,   611,
-     612,     5,   501,   502,   503,   504,   505,   506,   507,   508,
-     613,   614,   615,   616,   456,   428,   518,   519,   520,   521,
-     522,   523,   524,   525,   526,   527,   528,   529,   530,   531,
-     532,   533,   534,   535,   617,   618,   619,   620,   621,   622,
-     623,   624,   625,   626,   627,     6,   429,   628,   629,   430,
-     443,   630,   444,   631,   632,   633,   634,   635,   636,   637,
-     638,     7,   639,   640,   641,   642,   643,   644,   645,   646,
-     647,   648,   649,   650,   651,   652,   653,   654,   655,   656,
-     657,   457,   458,   658,   659,   660,   661,   662,   663,   664,
-     665,   666,   667,   668,   669,   670,   671,   672,   673,   674,
-     675,   676,     8,   677,   678,   679,   680,   681,   682,   683,
-     684,   685,   686,   687,   688,   689,   690,   691,   692,   693,
-     459,   694,   695,   696,   697,   698,   699,   700,   701,   702,
-     703,   704,   705,   706,   707,   708,   709,   710,   711,   712,
-     713,   714,   715,   716,   717,   718,   719,   720,   721,   722,
-     723,   724,   725,   726,   727,   728,   729,   730,   731,     9,
-     470,   471,   472,   732,   733,   734,   735,   736,   737,   738,
-     475,   739,   740,   741,   742,   431,   743,    10,   744,   445,
-     469,   745,   470,   471,   472,   473,   474,   485,   486,   487,
-     488,   489,   475,   746,    11,   747,   748,   749,   750,   751,
-     752,   753,    12,   754,   755,   756,   757,   758,   759,   760,
-     761,   762,   763,   764,   765,   766,   767,   768,   769,   770,
-     771,   772,   773,   774,   775,    13,   776,   777,     0,    14,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,   778,   779,   780,   781,    72,    73,    74,   782,
-     783,   784,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   785,   786,   787,   788,   789,   790,   791,
-     792,   793,   116,   117,   118,   794,   119,   120,   121,   795,
-     796,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   797,   798,   799,   146,   800,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     801,   802,   803,   804,   805,   806,   807,   808,   809,   810,
-     811,   812,   813,   814,   815,   816,   817,   818,   819,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   820,   195,   821,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   822,   823,   824,   825,   826,
-     827,   828,   829,   830,   831,   832,   211,   212,   213,   214,
-     215,   216,   833,   834,   835,   836,   837,   838,   217,   839,
-     840,   841,   842,   843,   844,   845,   218,   219,   846,   220,
-     221,   847,   222,   223,   848,   849,   224,   225,   226,   227,
-     228,   229,   230,   850,   851,   852,   231,   853,   854,   855,
-     856,   857,   858,   859,   860,   861,   862,   863,   864,   865,
-     866,   867,   868,   869,   870,   871,   872,   873,   874,   875,
-     876,   877,   878,   879,   880,   881,   882,   883,     0,     0,
+       2,   470,   427,   455,   428,   429,   442,   592,   593,   557,
+     498,     3,   597,   598,   443,   444,   581,   582,   583,   584,
+     585,   599,   600,   470,   560,   561,   562,   563,   564,   565,
+     566,   567,   568,   569,   601,   602,   603,   604,   605,   456,
+     457,   606,   607,   608,   609,     4,   610,   611,   612,   613,
+     614,     5,   503,   504,   505,   506,   507,   508,   509,   510,
+     615,   616,   617,   618,   458,   430,   520,   521,   522,   523,
+     524,   525,   526,   527,   528,   529,   530,   531,   532,   533,
+     534,   535,   536,   537,   619,   620,   621,   622,   623,   624,
+     625,   626,   627,   628,   629,     6,   431,   630,   631,   445,
+     432,   446,   632,   633,   634,   635,   636,   637,   638,   639,
+     640,     7,   641,   642,   643,   644,   645,   646,   647,   648,
+     649,   650,   651,   652,   653,   654,   655,   656,   657,   658,
+     659,   660,   459,   460,   661,   662,   663,   664,   665,   666,
+     667,   668,   669,   670,   671,   672,   673,   674,   675,   676,
+     677,   678,   679,     8,   680,   681,   682,   683,   684,   685,
+     686,   687,   688,   689,   690,   691,   692,   693,   694,   695,
+     696,   461,   697,   698,   699,   700,   701,   702,   703,   704,
+     705,   706,   707,   708,   709,   710,   711,   712,   713,   714,
+     715,   716,   717,   718,   719,   720,   721,   722,   723,   724,
+     725,   726,   727,   728,   729,   730,   731,   732,   733,   734,
+       9,   472,   473,   474,   735,   736,   737,   738,   739,   740,
+     741,   477,   742,   743,   744,   745,   433,   746,    10,   447,
+     747,   471,   748,   472,   473,   474,   475,   476,   487,   488,
+     489,   490,   491,   477,   749,    11,   750,   751,   752,   753,
+     754,   755,   756,    12,   757,   758,   759,   760,   761,   762,
+     763,   764,   765,   766,   767,   768,   769,   770,   771,   772,
+     773,   774,   775,   776,   777,   778,    13,   779,   780,     0,
+      14,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,   781,   782,   783,   784,    72,    73,    74,
+     785,   786,   787,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   788,   789,   790,   791,   792,   793,
+     794,   795,   796,   116,   117,   118,   797,   119,   120,   121,
+     798,   799,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   800,   801,   802,   146,
+     147,   803,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   804,   805,   806,   807,   808,   809,   810,   811,
+     812,   813,   814,   815,   816,   817,   818,   819,   820,   821,
+     822,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   823,
+     196,   824,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   825,   826,   827,
+     828,   829,   830,   831,   832,   833,   834,   835,   212,   213,
+     214,   215,   216,   217,   836,   837,   838,   839,   840,   841,
+     218,   842,   843,   844,   845,   846,   847,   848,   219,   220,
+     849,   221,   222,   850,   223,   224,   851,   852,   225,   226,
+     227,   228,   229,   230,   231,   853,   854,   855,   232,   856,
+     857,   858,   859,   860,   861,   862,   863,   864,   865,   866,
+     867,   868,   869,   870,   871,   872,   873,   874,   875,   876,
+     877,   878,   879,   880,   881,   882,   883,   884,   885,   886,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   497,   498,   499,   500
+       0,     0,     0,   499,   500,   501,   502
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    44,    44,    44,    46,    47,   112,    44,   276,   277,
-      33,    11,    10,    10,    10,    52,    53,   245,   246,   247,
-     248,   249,    10,    44,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,    10,    10,    10,    10,    10,    80,
+       0,    44,    44,    44,    46,    47,    44,   277,   278,   112,
+      33,    11,    10,    10,    52,    53,   246,   247,   248,   249,
+     250,    10,    10,    44,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,    10,    10,    10,    10,    10,    80,
       81,    10,    10,    10,    10,    45,    10,    10,    10,    10,
       10,    51,    96,    97,    98,    99,   100,   101,   102,   103,
-      10,    10,    10,    10,   105,   107,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    95,   138,    10,    10,   141,
-     137,    10,   139,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,   105,   107,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,    95,   138,    10,    10,   137,
+     142,   139,    10,    10,    10,    10,    10,    10,    10,    10,
       10,   111,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,   172,   173,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,   173,   174,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,   152,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,   153,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-     211,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,   212,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,   209,
-     253,   254,   255,    10,    10,    10,    10,    10,    10,    10,
-     263,    10,    10,    10,    10,   267,    10,   227,    10,   266,
-     251,    10,   253,   254,   255,   256,   257,   280,   281,   282,
-     283,   284,   263,    10,   244,    10,    10,    10,    10,    10,
-      10,    10,   252,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,   275,    10,    10,    -1,   279,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    10,    10,    10,    10,    48,    49,    50,    10,
-      10,    10,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,   104,   105,   106,    10,   108,   109,   110,    10,
-      10,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,    10,    10,    10,   140,    10,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     210,   254,   255,   256,    10,    10,    10,    10,    10,    10,
+      10,   264,    10,    10,    10,    10,   268,    10,   228,   267,
+      10,   252,    10,   254,   255,   256,   257,   258,   281,   282,
+     283,   284,   285,   264,    10,   245,    10,    10,    10,    10,
+      10,    10,    10,   253,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,    10,   276,    10,    10,    -1,
+     280,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    10,    10,    10,    10,    48,    49,    50,
+      10,    10,    10,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,   104,   105,   106,    10,   108,   109,   110,
+      10,    10,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,    10,    10,    10,   140,
+     141,    10,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,    10,
+     211,    10,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,    10,    10,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,   239,   240,
+     241,   242,   243,   244,    10,    10,    10,    10,    10,    10,
+     251,    10,    10,    10,    10,    10,    10,    10,   259,   260,
+      10,   262,   263,    10,   265,   266,    10,    10,   269,   270,
+     271,   272,   273,   274,   275,    10,    10,    10,   279,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,    10,   210,    10,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,   238,   239,   240,   241,
-     242,   243,    10,    10,    10,    10,    10,    10,   250,    10,
-      10,    10,    10,    10,    10,    10,   258,   259,    10,   261,
-     262,    10,   264,   265,    10,    10,   268,   269,   270,   271,
-     272,   273,   274,    10,    10,    10,   278,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    33,    33,    33,    33
+      -1,    -1,    -1,    33,    33,    33,    33
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   286,     0,    11,    45,    51,    95,   111,   152,   209,
-     227,   244,   252,   275,   279,   287,   288,   291,   294,   297,
-     300,   308,   526,   537,   558,   566,   579,   588,   289,   292,
-     295,   298,   301,   309,   527,   538,   559,   567,   580,   589,
+       0,   287,     0,    11,    45,    51,    95,   111,   153,   210,
+     228,   245,   253,   276,   280,   288,   289,   292,   295,   298,
+     301,   309,   528,   539,   560,   568,   581,   590,   290,   293,
+     296,   299,   302,   310,   529,   540,   561,   569,   582,   591,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
@@ -1805,16 +1810,16 @@ static const yytype_uint16 yystos[] =
       89,    90,    91,    92,    93,    94,   104,   105,   106,   108,
      109,   110,   113,   114,   115,   116,   117,   118,   119,   120,
      121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   140,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   171,   172,   173,
+     131,   132,   133,   134,   135,   136,   140,   141,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   172,   173,
      174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
      184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
      194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   210,   212,   213,   214,   215,
+     204,   205,   206,   207,   208,   209,   211,   213,   214,   215,
      216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   238,   239,   240,   241,   242,   243,   250,   258,   259,
-     261,   262,   264,   265,   268,   269,   270,   271,   272,   273,
-     274,   278,   290,   311,   312,   313,   314,   315,   316,   317,
+     226,   227,   239,   240,   241,   242,   243,   244,   251,   259,
+     260,   262,   263,   265,   266,   269,   270,   271,   272,   273,
+     274,   275,   279,   291,   312,   313,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
      328,   329,   330,   331,   332,   333,   334,   335,   336,   337,
      338,   339,   340,   341,   342,   343,   344,   345,   346,   347,
@@ -1833,24 +1838,24 @@ static const yytype_uint16 yystos[] =
      468,   469,   470,   471,   472,   473,   474,   475,   476,   477,
      478,   479,   480,   481,   482,   483,   484,   485,   486,   487,
      488,   489,   490,   491,   492,   493,   494,   495,   496,   497,
-     562,   563,   564,   565,   587,    44,    46,    47,   107,   138,
-     141,   267,   293,   498,   499,   500,   501,   502,   503,   504,
-      44,    52,    53,   137,   139,   266,   296,   505,   506,   507,
-     508,   509,   510,    44,    80,    81,   105,   172,   173,   211,
-     299,   519,   520,   521,   522,   523,   524,   525,    44,   251,
-     253,   254,   255,   256,   257,   263,   302,   511,   512,   513,
-     514,   515,   516,   517,   518,   280,   281,   282,   283,   284,
-     303,   304,   305,   306,   307,   310,   511,   512,   513,   514,
-     515,    96,    97,    98,    99,   100,   101,   102,   103,   528,
-     529,   530,   531,   532,   533,   534,   535,   536,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   539,   540,   541,   542,
+     498,   499,   564,   565,   566,   567,   589,    44,    46,    47,
+     107,   138,   142,   268,   294,   500,   501,   502,   503,   504,
+     505,   506,    44,    52,    53,   137,   139,   267,   297,   507,
+     508,   509,   510,   511,   512,    44,    80,    81,   105,   173,
+     174,   212,   300,   521,   522,   523,   524,   525,   526,   527,
+      44,   252,   254,   255,   256,   257,   258,   264,   303,   513,
+     514,   515,   516,   517,   518,   519,   520,   281,   282,   283,
+     284,   285,   304,   305,   306,   307,   308,   311,   513,   514,
+     515,   516,   517,    96,    97,    98,    99,   100,   101,   102,
+     103,   530,   531,   532,   533,   534,   535,   536,   537,   538,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   541,   542,
      543,   544,   545,   546,   547,   548,   549,   550,   551,   552,
-     553,   554,   555,   556,   557,   112,   560,   561,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   568,   569,
-     570,   571,   572,   573,   574,   575,   576,   577,   578,   245,
-     246,   247,   248,   249,   581,   582,   583,   584,   585,   586,
-     276,   277,   590,   591,   592,    10,    10,    10,    10,    10,
+     553,   554,   555,   556,   557,   558,   559,   112,   562,   563,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     570,   571,   572,   573,   574,   575,   576,   577,   578,   579,
+     580,   246,   247,   248,   249,   250,   583,   584,   585,   586,
+     587,   588,   277,   278,   592,   593,   594,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
@@ -1879,39 +1884,39 @@ static const yytype_uint16 yystos[] =
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10
+      10,    10,    10,    10,    10,    10,    10
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   285,   286,   286,   287,   287,   287,   287,   287,   287,
-     287,   287,   287,   287,   287,   287,   288,   289,   289,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
-     290,   291,   292,   292,   293,   293,   293,   293,   293,   293,
-     293,   294,   295,   295,   296,   296,   296,   296,   296,   296,
-     297,   298,   298,   299,   299,   299,   299,   299,   299,   299,
-     300,   301,   301,   302,   302,   302,   302,   302,   302,   302,
-     302,   303,   304,   305,   306,   307,   308,   309,   309,   310,
-     310,   310,   310,   310,   310,   310,   310,   310,   310,   311,
+       0,   286,   287,   287,   288,   288,   288,   288,   288,   288,
+     288,   288,   288,   288,   288,   288,   289,   290,   290,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   292,   293,   293,   294,   294,   294,   294,   294,
+     294,   294,   295,   296,   296,   297,   297,   297,   297,   297,
+     297,   298,   299,   299,   300,   300,   300,   300,   300,   300,
+     300,   301,   302,   302,   303,   303,   303,   303,   303,   303,
+     303,   303,   304,   305,   306,   307,   308,   309,   310,   310,
+     311,   311,   311,   311,   311,   311,   311,   311,   311,   311,
      312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
      332,   333,   334,   335,   336,   337,   338,   339,   340,   341,
@@ -1933,18 +1938,18 @@ static const yytype_uint16 yyr1[] =
      492,   493,   494,   495,   496,   497,   498,   499,   500,   501,
      502,   503,   504,   505,   506,   507,   508,   509,   510,   511,
      512,   513,   514,   515,   516,   517,   518,   519,   520,   521,
-     522,   523,   524,   525,   526,   527,   527,   528,   528,   528,
-     528,   528,   528,   528,   528,   529,   530,   531,   532,   533,
-     534,   535,   536,   537,   538,   538,   539,   539,   539,   539,
-     539,   539,   539,   539,   539,   539,   539,   539,   539,   539,
-     539,   539,   539,   539,   540,   541,   542,   543,   544,   545,
+     522,   523,   524,   525,   526,   527,   528,   529,   529,   530,
+     530,   530,   530,   530,   530,   530,   530,   531,   532,   533,
+     534,   535,   536,   537,   538,   539,   540,   540,   541,   541,
+     541,   541,   541,   541,   541,   541,   541,   541,   541,   541,
+     541,   541,   541,   541,   541,   541,   542,   543,   544,   545,
      546,   547,   548,   549,   550,   551,   552,   553,   554,   555,
-     556,   557,   558,   559,   559,   560,   561,   562,   563,   564,
-     565,   566,   567,   567,   568,   568,   568,   568,   568,   568,
-     568,   568,   568,   568,   569,   570,   571,   572,   573,   574,
-     575,   576,   577,   578,   579,   580,   580,   581,   581,   581,
-     581,   581,   582,   583,   584,   585,   586,   587,   588,   589,
-     589,   590,   590,   591,   592
+     556,   557,   558,   559,   560,   561,   561,   562,   563,   564,
+     565,   566,   567,   568,   569,   569,   570,   570,   570,   570,
+     570,   570,   570,   570,   570,   570,   571,   572,   573,   574,
+     575,   576,   577,   578,   579,   580,   581,   582,   582,   583,
+     583,   583,   583,   583,   584,   585,   586,   587,   588,   589,
+     590,   591,   591,   592,   592,   593,   594
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1971,12 +1976,12 @@ static const yytype_uint8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     2,     0,     1,     1,     1,     1,     1,
+       1,     1,     1,     2,     0,     1,     1,     1,     1,     1,
        1,     1,     2,     0,     1,     1,     1,     1,     1,     1,
        1,     1,     2,     0,     1,     1,     1,     1,     1,     1,
-       1,     2,     0,     1,     1,     1,     1,     1,     1,     1,
-       1,     2,     0,     1,     1,     1,     1,     1,     1,     1,
-       1,     2,     2,     2,     2,     2,     1,     2,     0,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
+       1,     1,     2,     2,     2,     2,     2,     1,     2,     0,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1988,28 +1993,28 @@ static const yytype_uint8 yyr2[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     3,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       3,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     3,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     3,     3,
-       4,     4,     4,     3,     3,     2,     2,     2,     2,     2,
-       2,     3,     3,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     3,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       3,     3,     4,     4,     4,     3,     3,     2,     2,     2,
+       2,     2,     2,     3,     3,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     3,     3,
-       3,     2,     2,     2,     1,     2,     0,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     2,     2,     2,     2,
-       2,     2,     2,     1,     2,     0,     1,     1,     1,     1,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       3,     3,     3,     2,     2,     2,     1,     2,     0,     1,
+       1,     1,     1,     1,     1,     1,     1,     2,     2,     2,
+       2,     2,     2,     2,     2,     1,     2,     0,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     2,     2,     2,     2,     2,
+       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     1,     2,     0,     1,     2,     2,     2,     3,
-       3,     1,     2,     0,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     1,     2,     0,     1,     1,     1,
-       1,     1,     2,     2,     2,     2,     2,     3,     1,     2,
-       0,     1,     1,     2,     2
+       2,     2,     2,     2,     1,     2,     0,     1,     2,     2,
+       2,     3,     3,     1,     2,     0,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     0,     1,
+       1,     1,     1,     1,     2,     2,     2,     2,     2,     3,
+       1,     2,     0,     1,     1,     2,     2
 };
 
 
@@ -2025,22 +2030,22 @@ static const yytype_uint8 yyr2[] =
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)                                    \
-  do                                                              \
-    if (yychar == YYEMPTY)                                        \
-      {                                                           \
-        yychar = (Token);                                         \
-        yylval = (Value);                                         \
-        YYPOPSTACK (yylen);                                       \
-        yystate = *yyssp;                                         \
-        goto yybackup;                                            \
-      }                                                           \
-    else                                                          \
-      {                                                           \
-        yyerror (YY_("syntax error: cannot back up")); \
-        YYERROR;                                                  \
-      }                                                           \
-  while (0)
+#define YYBACKUP(Token, Value)                                  \
+do                                                              \
+  if (yychar == YYEMPTY)                                        \
+    {                                                           \
+      yychar = (Token);                                         \
+      yylval = (Value);                                         \
+      YYPOPSTACK (yylen);                                       \
+      yystate = *yyssp;                                         \
+      goto yybackup;                                            \
+    }                                                           \
+  else                                                          \
+    {                                                           \
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;                                                  \
+    }                                                           \
+while (0)
 
 /* Error token number */
 #define YYTERROR        1
@@ -2080,37 +2085,37 @@ do {                                                                      \
 } while (0)
 
 
-/*-----------------------------------.
-| Print this symbol's value on YYO.  |
-`-----------------------------------*/
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT.  |
+`----------------------------------------*/
 
 static void
-yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
 {
-  FILE *yyoutput = yyo;
-  YYUSE (yyoutput);
+  FILE *yyo = yyoutput;
+  YYUSE (yyo);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
-    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
 # endif
   YYUSE (yytype);
 }
 
 
-/*---------------------------.
-| Print this symbol on YYO.  |
-`---------------------------*/
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
 
 static void
-yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
 {
-  YYFPRINTF (yyo, "%s %s (",
+  YYFPRINTF (yyoutput, "%s %s (",
              yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
-  yy_symbol_value_print (yyo, yytype, yyvaluep);
-  YYFPRINTF (yyo, ")");
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -2144,7 +2149,7 @@ do {                                                            \
 static void
 yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
 {
-  unsigned long yylno = yyrline[yyrule];
+  unsigned long int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
@@ -2155,7 +2160,7 @@ yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr,
                        yystos[yyssp[yyi + 1 - yynrhs]],
-                       &yyvsp[(yyi + 1) - (yynrhs)]
+                       &(yyvsp[(yyi + 1) - (yynrhs)])
                                               );
       YYFPRINTF (stderr, "\n");
     }
@@ -2259,10 +2264,7 @@ yytnamerr (char *yyres, const char *yystr)
           case '\\':
             if (*++yyp != '\\')
               goto do_not_strip_quotes;
-            else
-              goto append;
-
-          append:
+            /* Fall through.  */
           default:
             if (yyres)
               yyres[yyn] = *yyp;
@@ -2280,7 +2282,7 @@ yytnamerr (char *yyres, const char *yystr)
   if (! yyres)
     return yystrlen (yystr);
 
-  return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres);
+  return yystpcpy (yyres, yystr) - yyres;
 }
 # endif
 
@@ -2358,10 +2360,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                 yyarg[yycount++] = yytname[yyx];
                 {
                   YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-                  if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
-                    yysize = yysize1;
-                  else
+                  if (! (yysize <= yysize1
+                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                     return 2;
+                  yysize = yysize1;
                 }
               }
         }
@@ -2373,7 +2375,6 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
       case N:                               \
         yyformat = S;                       \
       break
-    default: /* Avoid compiler warnings. */
       YYCASE_(0, YY_("syntax error"));
       YYCASE_(1, YY_("syntax error, unexpected %s"));
       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
@@ -2385,10 +2386,9 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
 
   {
     YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
-    if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
-      yysize = yysize1;
-    else
+    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
       return 2;
+    yysize = yysize1;
   }
 
   if (*yymsg_alloc < yysize)
@@ -2514,33 +2514,23 @@ yyparse (void)
   yychar = YYEMPTY; /* Cause a token to be read.  */
   goto yysetstate;
 
-
 /*------------------------------------------------------------.
-| yynewstate -- push a new state, which is found in yystate.  |
+| yynewstate -- Push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
-yynewstate:
+ yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed.  So pushing a state here evens the stacks.  */
   yyssp++;
 
-
-/*--------------------------------------------------------------------.
-| yynewstate -- set current state (the top of the stack) to yystate.  |
-`--------------------------------------------------------------------*/
-yysetstate:
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
-  *yyssp = (yytype_int16) yystate;
+ yysetstate:
+  *yyssp = yystate;
 
   if (yyss + yystacksize - 1 <= yyssp)
-#if !defined yyoverflow && !defined YYSTACK_RELOCATE
-    goto yyexhaustedlab;
-#else
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1);
+      YYSIZE_T yysize = yyssp - yyss + 1;
 
-# if defined yyoverflow
+#ifdef yyoverflow
       {
         /* Give user a chance to reallocate the stack.  Use copies of
            these so that the &'s don't force the real ones into
@@ -2556,10 +2546,14 @@ yysetstate:
                     &yyss1, yysize * sizeof (*yyssp),
                     &yyvs1, yysize * sizeof (*yyvsp),
                     &yystacksize);
+
         yyss = yyss1;
         yyvs = yyvs1;
       }
-# else /* defined YYSTACK_RELOCATE */
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
         goto yyexhaustedlab;
@@ -2575,33 +2569,35 @@ yysetstate:
           goto yyexhaustedlab;
         YYSTACK_RELOCATE (yyss_alloc, yyss);
         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-# undef YYSTACK_RELOCATE
+#  undef YYSTACK_RELOCATE
         if (yyss1 != yyssa)
           YYSTACK_FREE (yyss1);
       }
 # endif
+#endif /* no yyoverflow */
 
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long) yystacksize));
+                  (unsigned long int) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
         YYABORT;
     }
-#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
 
   if (yystate == YYFINAL)
     YYACCEPT;
 
   goto yybackup;
 
-
 /*-----------.
 | yybackup.  |
 `-----------*/
 yybackup:
+
   /* Do appropriate processing given the current state.  Read a
      lookahead token if we need one and don't already have one.  */
 
@@ -2659,6 +2655,7 @@ yybackup:
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
   YY_IGNORE_MAYBE_UNINITIALIZED_END
+
   goto yynewstate;
 
 
@@ -2673,7 +2670,7 @@ yydefault:
 
 
 /*-----------------------------.
-| yyreduce -- do a reduction.  |
+| yyreduce -- Do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
@@ -2693,16 +2690,16 @@ yyreduce:
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-  case 16:
-#line 188 "./util/configparser.y"
+        case 16:
+#line 189 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(server:)\n")); 
        }
-#line 2702 "util/configparser.c"
+#line 2699 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 211:
-#line 280 "./util/configparser.y"
+  case 212:
+#line 282 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
@@ -2713,11 +2710,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2717 "util/configparser.c"
+#line 2714 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 221:
-#line 297 "./util/configparser.y"
+  case 222:
+#line 299 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
@@ -2728,11 +2725,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2732 "util/configparser.c"
+#line 2729 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 230:
-#line 314 "./util/configparser.y"
+  case 231:
+#line 316 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_view* s;
                OUTYY(("\nP(view:)\n")); 
@@ -2745,11 +2742,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2749 "util/configparser.c"
+#line 2746 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 240:
-#line 333 "./util/configparser.y"
+  case 241:
+#line 335 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_auth* s;
                OUTYY(("\nP(auth_zone:)\n")); 
@@ -2765,11 +2762,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2769 "util/configparser.c"
+#line 2766 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 251:
-#line 357 "./util/configparser.y"
+  case 252:
+#line 359 "./util/configparser.y" /* yacc.c:1646  */
     {
                uint8_t* bitlist;
                size_t len = 0;
@@ -2786,11 +2783,11 @@ yyreduce:
 
                }
        }
-#line 2790 "util/configparser.c"
+#line 2787 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 252:
-#line 376 "./util/configparser.y"
+  case 253:
+#line 378 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 &&
@@ -2805,21 +2802,21 @@ yyreduce:
                        cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
                }
        }
-#line 2809 "util/configparser.c"
+#line 2806 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 253:
-#line 393 "./util/configparser.y"
+  case 254:
+#line 395 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->auths->rpz_cname);
                cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str);
        }
-#line 2819 "util/configparser.c"
+#line 2816 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 254:
-#line 401 "./util/configparser.y"
+  case 255:
+#line 403 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2827,21 +2824,21 @@ yyreduce:
                else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2831 "util/configparser.c"
+#line 2828 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 255:
-#line 411 "./util/configparser.y"
+  case 256:
+#line 413 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->auths->rpz_log_name);
                cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str);
        }
-#line 2841 "util/configparser.c"
+#line 2838 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 256:
-#line 419 "./util/configparser.y"
+  case 257:
+#line 421 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_auth* s;
                OUTYY(("\nP(rpz:)\n")); 
@@ -2857,11 +2854,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2861 "util/configparser.c"
+#line 2858 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 269:
-#line 442 "./util/configparser.y"
+  case 270:
+#line 444 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2869,11 +2866,11 @@ yyreduce:
                else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2873 "util/configparser.c"
+#line 2870 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 270:
-#line 451 "./util/configparser.y"
+  case 271:
+#line 453 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2881,11 +2878,11 @@ yyreduce:
                else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2885 "util/configparser.c"
+#line 2882 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 271:
-#line 460 "./util/configparser.y"
+  case 272:
+#line 462 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); 
                if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
@@ -2895,11 +2892,11 @@ yyreduce:
                else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2899 "util/configparser.c"
+#line 2896 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 272:
-#line 471 "./util/configparser.y"
+  case 273:
+#line 473 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2907,11 +2904,11 @@ yyreduce:
                else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2911 "util/configparser.c"
+#line 2908 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 273:
-#line 480 "./util/configparser.y"
+  case 274:
+#line 482 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2919,11 +2916,11 @@ yyreduce:
                else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2923 "util/configparser.c"
+#line 2920 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 274:
-#line 489 "./util/configparser.y"
+  case 275:
+#line 491 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2931,11 +2928,11 @@ yyreduce:
                else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2935 "util/configparser.c"
+#line 2932 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 498 "./util/configparser.y"
+  case 276:
+#line 500 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); 
                if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
@@ -2945,11 +2942,11 @@ yyreduce:
                else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2949 "util/configparser.c"
+#line 2946 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 276:
-#line 509 "./util/configparser.y"
+  case 277:
+#line 511 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2957,11 +2954,11 @@ yyreduce:
                else cfg_parser->cfg->port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2961 "util/configparser.c"
+#line 2958 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 277:
-#line 518 "./util/configparser.y"
+  case 278:
+#line 520 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
@@ -2972,11 +2969,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 2976 "util/configparser.c"
+#line 2973 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 278:
-#line 530 "./util/configparser.y"
+  case 279:
+#line 532 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
@@ -2988,11 +2985,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 2992 "util/configparser.c"
+#line 2989 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 279:
-#line 544 "./util/configparser.y"
+  case 280:
+#line 546 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
@@ -3006,11 +3003,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3010 "util/configparser.c"
+#line 3007 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 280:
-#line 559 "./util/configparser.y"
+  case 281:
+#line 561 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
@@ -3020,11 +3017,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3024 "util/configparser.c"
+#line 3021 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 281:
-#line 570 "./util/configparser.y"
+  case 282:
+#line 572 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3040,11 +3037,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3044 "util/configparser.c"
+#line 3041 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 282:
-#line 587 "./util/configparser.y"
+  case 283:
+#line 589 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3060,11 +3057,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3064 "util/configparser.c"
+#line 3061 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 283:
-#line 604 "./util/configparser.y"
+  case 284:
+#line 606 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3080,11 +3077,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3084 "util/configparser.c"
+#line 3081 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 284:
-#line 621 "./util/configparser.y"
+  case 285:
+#line 623 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3100,11 +3097,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3104 "util/configparser.c"
+#line 3101 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 285:
-#line 638 "./util/configparser.y"
+  case 286:
+#line 640 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3118,11 +3115,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3122 "util/configparser.c"
+#line 3119 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 286:
-#line 653 "./util/configparser.y"
+  case 287:
+#line 655 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3136,11 +3133,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3140 "util/configparser.c"
+#line 3137 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 287:
-#line 668 "./util/configparser.y"
+  case 288:
+#line 670 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_ifs == 0)
@@ -3152,11 +3149,11 @@ yyreduce:
                else
                        cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
        }
-#line 3156 "util/configparser.c"
+#line 3153 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 288:
-#line 681 "./util/configparser.y"
+  case 289:
+#line 683 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_out_ifs == 0)
@@ -3170,11 +3167,11 @@ yyreduce:
                        cfg_parser->cfg->out_ifs[
                                cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
        }
-#line 3174 "util/configparser.c"
+#line 3171 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 289:
-#line 696 "./util/configparser.y"
+  case 290:
+#line 698 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3182,11 +3179,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3186 "util/configparser.c"
+#line 3183 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 290:
-#line 705 "./util/configparser.y"
+  case 291:
+#line 707 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
                if(!cfg_mark_ports((yyvsp[0].str), 1, 
@@ -3194,11 +3191,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 3198 "util/configparser.c"
+#line 3195 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 291:
-#line 714 "./util/configparser.y"
+  case 292:
+#line 716 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
                if(!cfg_mark_ports((yyvsp[0].str), 0, 
@@ -3206,11 +3203,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 3210 "util/configparser.c"
+#line 3207 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 292:
-#line 723 "./util/configparser.y"
+  case 293:
+#line 725 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3218,11 +3215,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3222 "util/configparser.c"
+#line 3219 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 293:
-#line 732 "./util/configparser.y"
+  case 294:
+#line 734 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3230,11 +3227,11 @@ yyreduce:
                else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3234 "util/configparser.c"
+#line 3231 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 294:
-#line 741 "./util/configparser.y"
+  case 295:
+#line 743 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3242,11 +3239,11 @@ yyreduce:
                else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3246 "util/configparser.c"
+#line 3243 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 295:
-#line 750 "./util/configparser.y"
+  case 296:
+#line 752 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3254,11 +3251,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3258 "util/configparser.c"
+#line 3255 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 296:
-#line 759 "./util/configparser.y"
+  case 297:
+#line 761 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3266,11 +3263,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3270 "util/configparser.c"
+#line 3267 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 297:
-#line 768 "./util/configparser.y"
+  case 298:
+#line 770 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3278,11 +3275,11 @@ yyreduce:
                else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3282 "util/configparser.c"
+#line 3279 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 298:
-#line 777 "./util/configparser.y"
+  case 299:
+#line 779 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3290,11 +3287,11 @@ yyreduce:
                else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3294 "util/configparser.c"
+#line 3291 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 299:
-#line 786 "./util/configparser.y"
+  case 300:
+#line 788 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3302,11 +3299,11 @@ yyreduce:
                else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3306 "util/configparser.c"
+#line 3303 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 300:
-#line 795 "./util/configparser.y"
+  case 301:
+#line 797 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3314,11 +3311,11 @@ yyreduce:
                else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3318 "util/configparser.c"
+#line 3315 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 301:
-#line 804 "./util/configparser.y"
+  case 302:
+#line 806 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3326,11 +3323,11 @@ yyreduce:
                 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
                 free((yyvsp[0].str));
        }
-#line 3330 "util/configparser.c"
+#line 3327 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 302:
-#line 813 "./util/configparser.y"
+  case 303:
+#line 815 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3338,11 +3335,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3342 "util/configparser.c"
+#line 3339 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 303:
-#line 822 "./util/configparser.y"
+  case 304:
+#line 824 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3354,11 +3351,11 @@ yyreduce:
                else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3358 "util/configparser.c"
+#line 3355 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 304:
-#line 835 "./util/configparser.y"
+  case 305:
+#line 837 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3366,11 +3363,11 @@ yyreduce:
                else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3370 "util/configparser.c"
+#line 3367 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 305:
-#line 844 "./util/configparser.y"
+  case 306:
+#line 846 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3382,11 +3379,11 @@ yyreduce:
                else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3386 "util/configparser.c"
+#line 3383 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 306:
-#line 857 "./util/configparser.y"
+  case 307:
+#line 859 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3394,11 +3391,11 @@ yyreduce:
                else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3398 "util/configparser.c"
+#line 3395 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 307:
-#line 866 "./util/configparser.y"
+  case 308:
+#line 868 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3406,11 +3403,11 @@ yyreduce:
                else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3410 "util/configparser.c"
+#line 3407 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 308:
-#line 875 "./util/configparser.y"
+  case 309:
+#line 877 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3418,31 +3415,31 @@ yyreduce:
                else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3422 "util/configparser.c"
+#line 3419 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 884 "./util/configparser.y"
+  case 310:
+#line 886 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->ssl_service_key);
                cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
        }
-#line 3432 "util/configparser.c"
+#line 3429 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 891 "./util/configparser.y"
+  case 311:
+#line 893 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->ssl_service_pem);
                cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
        }
-#line 3442 "util/configparser.c"
+#line 3439 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 898 "./util/configparser.y"
+  case 312:
+#line 900 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3450,21 +3447,21 @@ yyreduce:
                else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3454 "util/configparser.c"
+#line 3451 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 907 "./util/configparser.y"
+  case 313:
+#line 909 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->tls_cert_bundle);
                cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str);
        }
-#line 3464 "util/configparser.c"
+#line 3461 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 914 "./util/configparser.y"
+  case 314:
+#line 916 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3472,53 +3469,65 @@ yyreduce:
                else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3476 "util/configparser.c"
+#line 3473 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 923 "./util/configparser.y"
+  case 315:
+#line 925 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port,
                        (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3487 "util/configparser.c"
+#line 3484 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 931 "./util/configparser.y"
+  case 316:
+#line 933 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->tls_ciphers);
                cfg_parser->cfg->tls_ciphers = (yyvsp[0].str);
        }
-#line 3497 "util/configparser.c"
+#line 3494 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 938 "./util/configparser.y"
+  case 317:
+#line 940 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->tls_ciphersuites);
                cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str);
        }
-#line 3507 "util/configparser.c"
+#line 3504 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 945 "./util/configparser.y"
+  case 318:
+#line 947 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
                        (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3518 "util/configparser.c"
+#line 3515 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 953 "./util/configparser.y"
+  case 319:
+#line 955 "./util/configparser.y" /* yacc.c:1646  */
+    {
+               OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
+                       yyerror("port number expected");
+               else cfg_parser->cfg->https_port = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
+       }
+#line 3527 "util/configparser.c" /* yacc.c:1646  */
+    break;
+
+  case 320:
+#line 964 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3526,11 +3535,11 @@ yyreduce:
                else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3530 "util/configparser.c"
+#line 3539 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 962 "./util/configparser.y"
+  case 321:
+#line 973 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3538,11 +3547,11 @@ yyreduce:
                else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3542 "util/configparser.c"
+#line 3551 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 971 "./util/configparser.y"
+  case 322:
+#line 982 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3555,11 +3564,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 3559 "util/configparser.c"
+#line 3568 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 985 "./util/configparser.y"
+  case 323:
+#line 996 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3567,11 +3576,11 @@ yyreduce:
                else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3571 "util/configparser.c"
+#line 3580 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 994 "./util/configparser.y"
+  case 324:
+#line 1005 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3579,11 +3588,11 @@ yyreduce:
                else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3583 "util/configparser.c"
+#line 3592 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 1003 "./util/configparser.y"
+  case 325:
+#line 1014 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
        if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3591,11 +3600,11 @@ yyreduce:
        else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
        free((yyvsp[0].str));
   }
-#line 3595 "util/configparser.c"
+#line 3604 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 1012 "./util/configparser.y"
+  case 326:
+#line 1023 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str)));
        if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3603,11 +3612,11 @@ yyreduce:
        else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
        free((yyvsp[0].str));
   }
-#line 3607 "util/configparser.c"
+#line 3616 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 1021 "./util/configparser.y"
+  case 327:
+#line 1032 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3615,11 +3624,11 @@ yyreduce:
                else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3619 "util/configparser.c"
+#line 3628 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 326:
-#line 1030 "./util/configparser.y"
+  case 328:
+#line 1041 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
        if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3627,31 +3636,31 @@ yyreduce:
        else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
        free((yyvsp[0].str));
   }
-#line 3631 "util/configparser.c"
+#line 3640 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 1039 "./util/configparser.y"
+  case 329:
+#line 1050 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->chrootdir);
                cfg_parser->cfg->chrootdir = (yyvsp[0].str);
        }
-#line 3641 "util/configparser.c"
+#line 3650 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 1046 "./util/configparser.y"
+  case 330:
+#line 1057 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->username);
                cfg_parser->cfg->username = (yyvsp[0].str);
        }
-#line 3651 "util/configparser.c"
+#line 3660 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 329:
-#line 1053 "./util/configparser.y"
+  case 331:
+#line 1064 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->directory);
@@ -3676,105 +3685,105 @@ yyreduce:
                        }
                }
        }
-#line 3680 "util/configparser.c"
+#line 3689 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 1079 "./util/configparser.y"
+  case 332:
+#line 1090 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->logfile);
                cfg_parser->cfg->logfile = (yyvsp[0].str);
                cfg_parser->cfg->use_syslog = 0;
        }
-#line 3691 "util/configparser.c"
+#line 3700 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 331:
-#line 1087 "./util/configparser.y"
+  case 333:
+#line 1098 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->pidfile);
                cfg_parser->cfg->pidfile = (yyvsp[0].str);
        }
-#line 3701 "util/configparser.c"
+#line 3710 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 1094 "./util/configparser.y"
+  case 334:
+#line 1105 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3711 "util/configparser.c"
+#line 3720 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 333:
-#line 1101 "./util/configparser.y"
+  case 335:
+#line 1112 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dlv_anchor_file);
                cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str);
        }
-#line 3721 "util/configparser.c"
+#line 3730 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 1108 "./util/configparser.y"
+  case 336:
+#line 1119 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3731 "util/configparser.c"
+#line 3740 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 335:
-#line 1115 "./util/configparser.y"
+  case 337:
+#line 1126 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
                        auto_trust_anchor_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3742 "util/configparser.c"
+#line 3751 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 336:
-#line 1123 "./util/configparser.y"
+  case 338:
+#line 1134 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
                        trust_anchor_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3753 "util/configparser.c"
+#line 3762 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 337:
-#line 1131 "./util/configparser.y"
+  case 339:
+#line 1142 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
                        trusted_keys_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3764 "util/configparser.c"
+#line 3773 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 1139 "./util/configparser.y"
+  case 340:
+#line 1150 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3774 "util/configparser.c"
+#line 3783 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 339:
-#line 1146 "./util/configparser.y"
+  case 341:
+#line 1157 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3784,11 +3793,11 @@ yyreduce:
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3788 "util/configparser.c"
+#line 3797 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 340:
-#line 1157 "./util/configparser.y"
+  case 342:
+#line 1168 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3798,21 +3807,21 @@ yyreduce:
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3802 "util/configparser.c"
+#line 3811 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 341:
-#line 1168 "./util/configparser.y"
+  case 343:
+#line 1179 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3812 "util/configparser.c"
+#line 3821 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 342:
-#line 1175 "./util/configparser.y"
+  case 344:
+#line 1186 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3820,11 +3829,11 @@ yyreduce:
                else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3824 "util/configparser.c"
+#line 3833 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 343:
-#line 1184 "./util/configparser.y"
+  case 345:
+#line 1195 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3832,11 +3841,11 @@ yyreduce:
                else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3836 "util/configparser.c"
+#line 3845 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 344:
-#line 1193 "./util/configparser.y"
+  case 346:
+#line 1204 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3844,53 +3853,53 @@ yyreduce:
                else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3848 "util/configparser.c"
+#line 3857 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 345:
-#line 1202 "./util/configparser.y"
+  case 347:
+#line 1213 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->identity);
                cfg_parser->cfg->identity = (yyvsp[0].str);
        }
-#line 3858 "util/configparser.c"
+#line 3867 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 346:
-#line 1209 "./util/configparser.y"
+  case 348:
+#line 1220 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->version);
                cfg_parser->cfg->version = (yyvsp[0].str);
        }
-#line 3868 "util/configparser.c"
+#line 3877 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 347:
-#line 1216 "./util/configparser.y"
+  case 349:
+#line 1227 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
                        yyerror("buffer size expected");
                free((yyvsp[0].str));
        }
-#line 3879 "util/configparser.c"
+#line 3888 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 348:
-#line 1224 "./util/configparser.y"
+  case 350:
+#line 1235 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
                        yyerror("buffer size expected");
                free((yyvsp[0].str));
        }
-#line 3890 "util/configparser.c"
+#line 3899 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 349:
-#line 1232 "./util/configparser.y"
+  case 351:
+#line 1243 "./util/configparser.y" /* yacc.c:1646  */
     {
         OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3899,11 +3908,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 3903 "util/configparser.c"
+#line 3912 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 350:
-#line 1242 "./util/configparser.y"
+  case 352:
+#line 1253 "./util/configparser.y" /* yacc.c:1646  */
     {
         OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3912,11 +3921,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 3916 "util/configparser.c"
+#line 3925 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 351:
-#line 1252 "./util/configparser.y"
+  case 353:
+#line 1263 "./util/configparser.y" /* yacc.c:1646  */
     {
         OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3925,22 +3934,22 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 3929 "util/configparser.c"
+#line 3938 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 352:
-#line 1262 "./util/configparser.y"
+  case 354:
+#line 1273 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 3940 "util/configparser.c"
+#line 3949 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 353:
-#line 1270 "./util/configparser.y"
+  case 355:
+#line 1281 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3952,11 +3961,11 @@ yyreduce:
                else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3956 "util/configparser.c"
+#line 3965 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 354:
-#line 1283 "./util/configparser.y"
+  case 356:
+#line 1294 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3966,22 +3975,22 @@ yyreduce:
                else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3970 "util/configparser.c"
+#line 3979 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 355:
-#line 1294 "./util/configparser.y"
+  case 357:
+#line 1305 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 3981 "util/configparser.c"
+#line 3990 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 356:
-#line 1302 "./util/configparser.y"
+  case 358:
+#line 1313 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3993,11 +4002,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3997 "util/configparser.c"
+#line 4006 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 357:
-#line 1315 "./util/configparser.y"
+  case 359:
+#line 1326 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -4005,11 +4014,11 @@ yyreduce:
                else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4009 "util/configparser.c"
+#line 4018 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 358:
-#line 1324 "./util/configparser.y"
+  case 360:
+#line 1335 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4017,11 +4026,11 @@ yyreduce:
                else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4021 "util/configparser.c"
+#line 4030 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 359:
-#line 1333 "./util/configparser.y"
+  case 361:
+#line 1344 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4029,11 +4038,11 @@ yyreduce:
                else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4033 "util/configparser.c"
+#line 4042 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 360:
-#line 1342 "./util/configparser.y"
+  case 362:
+#line 1353 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4042,11 +4051,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4046 "util/configparser.c"
+#line 4055 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 361:
-#line 1352 "./util/configparser.y"
+  case 363:
+#line 1363 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4055,22 +4064,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4059 "util/configparser.c"
+#line 4068 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 362:
-#line 1362 "./util/configparser.y"
+  case 364:
+#line 1373 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 4070 "util/configparser.c"
+#line 4079 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 363:
-#line 1370 "./util/configparser.y"
+  case 365:
+#line 1381 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -4082,11 +4091,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4086 "util/configparser.c"
+#line 4095 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 364:
-#line 1383 "./util/configparser.y"
+  case 366:
+#line 1394 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4094,22 +4103,22 @@ yyreduce:
                else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4098 "util/configparser.c"
+#line 4107 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 365:
-#line 1392 "./util/configparser.y"
+  case 367:
+#line 1403 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
                verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
                        "removed, use infra-host-ttl)", (yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4109 "util/configparser.c"
+#line 4118 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 366:
-#line 1400 "./util/configparser.y"
+  case 368:
+#line 1411 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -4117,22 +4126,22 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4121 "util/configparser.c"
+#line 4130 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 367:
-#line 1409 "./util/configparser.y"
+  case 369:
+#line 1420 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
                verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
                        "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4132 "util/configparser.c"
+#line 4141 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 368:
-#line 1417 "./util/configparser.y"
+  case 370:
+#line 1428 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -4144,11 +4153,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4148 "util/configparser.c"
+#line 4157 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 369:
-#line 1430 "./util/configparser.y"
+  case 371:
+#line 1441 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4156,21 +4165,21 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4160 "util/configparser.c"
+#line 4169 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 370:
-#line 1439 "./util/configparser.y"
+  case 372:
+#line 1450 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->target_fetch_policy);
                cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
        }
-#line 4170 "util/configparser.c"
+#line 4179 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 371:
-#line 1446 "./util/configparser.y"
+  case 373:
+#line 1457 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4179,11 +4188,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4183 "util/configparser.c"
+#line 4192 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 372:
-#line 1456 "./util/configparser.y"
+  case 374:
+#line 1467 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4192,11 +4201,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4196 "util/configparser.c"
+#line 4205 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 373:
-#line 1466 "./util/configparser.y"
+  case 375:
+#line 1477 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4205,11 +4214,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4209 "util/configparser.c"
+#line 4218 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 374:
-#line 1476 "./util/configparser.y"
+  case 376:
+#line 1487 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4218,11 +4227,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4222 "util/configparser.c"
+#line 4231 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 375:
-#line 1486 "./util/configparser.y"
+  case 377:
+#line 1497 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4231,11 +4240,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4235 "util/configparser.c"
+#line 4244 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 376:
-#line 1496 "./util/configparser.y"
+  case 378:
+#line 1507 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4244,11 +4253,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4248 "util/configparser.c"
+#line 4257 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 377:
-#line 1506 "./util/configparser.y"
+  case 379:
+#line 1517 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4257,11 +4266,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4261 "util/configparser.c"
+#line 4270 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 378:
-#line 1516 "./util/configparser.y"
+  case 380:
+#line 1527 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4270,41 +4279,41 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4274 "util/configparser.c"
+#line 4283 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 379:
-#line 1526 "./util/configparser.y"
+  case 381:
+#line 1537 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 4284 "util/configparser.c"
+#line 4293 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 380:
-#line 1533 "./util/configparser.y"
+  case 382:
+#line 1544 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 4294 "util/configparser.c"
+#line 4303 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 381:
-#line 1540 "./util/configparser.y"
+  case 383:
+#line 1551 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 4304 "util/configparser.c"
+#line 4313 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 382:
-#line 1547 "./util/configparser.y"
+  case 384:
+#line 1558 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4312,11 +4321,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4316 "util/configparser.c"
+#line 4325 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 383:
-#line 1556 "./util/configparser.y"
+  case 385:
+#line 1567 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4324,11 +4333,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4328 "util/configparser.c"
+#line 4337 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 384:
-#line 1565 "./util/configparser.y"
+  case 386:
+#line 1576 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4336,11 +4345,11 @@ yyreduce:
                else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4340 "util/configparser.c"
+#line 4349 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 385:
-#line 1574 "./util/configparser.y"
+  case 387:
+#line 1585 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4348,21 +4357,21 @@ yyreduce:
                else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4352 "util/configparser.c"
+#line 4361 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 386:
-#line 1583 "./util/configparser.y"
+  case 388:
+#line 1594 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 4362 "util/configparser.c"
+#line 4371 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 387:
-#line 1590 "./util/configparser.y"
+  case 389:
+#line 1601 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4371,11 +4380,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4375 "util/configparser.c"
+#line 4384 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 388:
-#line 1600 "./util/configparser.y"
+  case 390:
+#line 1611 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
@@ -4394,21 +4403,21 @@ yyreduce:
                                fatal_exit("out of memory adding acl");
                }
        }
-#line 4398 "util/configparser.c"
+#line 4407 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 389:
-#line 1620 "./util/configparser.y"
+  case 391:
+#line 1631 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->module_conf);
                cfg_parser->cfg->module_conf = (yyvsp[0].str);
        }
-#line 4408 "util/configparser.c"
+#line 4417 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 390:
-#line 1627 "./util/configparser.y"
+  case 392:
+#line 1638 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -4425,11 +4434,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4429 "util/configparser.c"
+#line 4438 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 391:
-#line 1645 "./util/configparser.y"
+  case 393:
+#line 1656 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -4441,11 +4450,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4445 "util/configparser.c"
+#line 4454 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 392:
-#line 1658 "./util/configparser.y"
+  case 394:
+#line 1669 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -4457,11 +4466,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4461 "util/configparser.c"
+#line 4470 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 393:
-#line 1671 "./util/configparser.y"
+  case 395:
+#line 1682 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4469,11 +4478,11 @@ yyreduce:
                else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4473 "util/configparser.c"
+#line 4482 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 394:
-#line 1680 "./util/configparser.y"
+  case 396:
+#line 1691 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4481,11 +4490,11 @@ yyreduce:
                else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4485 "util/configparser.c"
+#line 4494 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 395:
-#line 1689 "./util/configparser.y"
+  case 397:
+#line 1700 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4493,11 +4502,11 @@ yyreduce:
                else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4497 "util/configparser.c"
+#line 4506 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 396:
-#line 1698 "./util/configparser.y"
+  case 398:
+#line 1709 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4505,11 +4514,11 @@ yyreduce:
                else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4509 "util/configparser.c"
+#line 4518 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 397:
-#line 1707 "./util/configparser.y"
+  case 399:
+#line 1718 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4518,11 +4527,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4522 "util/configparser.c"
+#line 4531 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 398:
-#line 1717 "./util/configparser.y"
+  case 400:
+#line 1728 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4531,11 +4540,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4535 "util/configparser.c"
+#line 4544 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 399:
-#line 1727 "./util/configparser.y"
+  case 401:
+#line 1738 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4545,11 +4554,11 @@ yyreduce:
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4549 "util/configparser.c"
+#line 4558 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 400:
-#line 1738 "./util/configparser.y"
+  case 402:
+#line 1749 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4557,11 +4566,11 @@ yyreduce:
                else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4561 "util/configparser.c"
+#line 4570 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 401:
-#line 1747 "./util/configparser.y"
+  case 403:
+#line 1758 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4569,11 +4578,11 @@ yyreduce:
                else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4573 "util/configparser.c"
+#line 4582 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 402:
-#line 1756 "./util/configparser.y"
+  case 404:
+#line 1767 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4581,11 +4590,11 @@ yyreduce:
                else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4585 "util/configparser.c"
+#line 4594 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 403:
-#line 1765 "./util/configparser.y"
+  case 405:
+#line 1776 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4593,11 +4602,11 @@ yyreduce:
                else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4597 "util/configparser.c"
+#line 4606 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 404:
-#line 1774 "./util/configparser.y"
+  case 406:
+#line 1785 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4605,11 +4614,11 @@ yyreduce:
                else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4609 "util/configparser.c"
+#line 4618 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 405:
-#line 1783 "./util/configparser.y"
+  case 407:
+#line 1794 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4617,11 +4626,11 @@ yyreduce:
                else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4621 "util/configparser.c"
+#line 4630 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 406:
-#line 1792 "./util/configparser.y"
+  case 408:
+#line 1803 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4633,11 +4642,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 4637 "util/configparser.c"
+#line 4646 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 407:
-#line 1805 "./util/configparser.y"
+  case 409:
+#line 1816 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4649,11 +4658,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 4653 "util/configparser.c"
+#line 4662 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 408:
-#line 1818 "./util/configparser.y"
+  case 410:
+#line 1829 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4661,21 +4670,21 @@ yyreduce:
                else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4665 "util/configparser.c"
+#line 4674 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 409:
-#line 1827 "./util/configparser.y"
+  case 411:
+#line 1838 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->val_nsec3_key_iterations);
                cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
        }
-#line 4675 "util/configparser.c"
+#line 4684 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 410:
-#line 1834 "./util/configparser.y"
+  case 412:
+#line 1845 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4683,11 +4692,11 @@ yyreduce:
                else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4687 "util/configparser.c"
+#line 4696 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 411:
-#line 1843 "./util/configparser.y"
+  case 413:
+#line 1854 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4695,11 +4704,11 @@ yyreduce:
                else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4699 "util/configparser.c"
+#line 4708 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 412:
-#line 1852 "./util/configparser.y"
+  case 414:
+#line 1863 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4707,11 +4716,11 @@ yyreduce:
                else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4711 "util/configparser.c"
+#line 4720 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 413:
-#line 1861 "./util/configparser.y"
+  case 415:
+#line 1872 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4720,22 +4729,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4724 "util/configparser.c"
+#line 4733 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 414:
-#line 1870 "./util/configparser.y"
+  case 416:
+#line 1881 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 4735 "util/configparser.c"
+#line 4744 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 415:
-#line 1878 "./util/configparser.y"
+  case 417:
+#line 1889 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -4747,22 +4756,22 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4751 "util/configparser.c"
+#line 4760 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 416:
-#line 1891 "./util/configparser.y"
+  case 418:
+#line 1902 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 4762 "util/configparser.c"
+#line 4771 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 417:
-#line 1899 "./util/configparser.y"
+  case 419:
+#line 1910 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -4802,21 +4811,21 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 4806 "util/configparser.c"
+#line 4815 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 418:
-#line 1940 "./util/configparser.y"
+  case 420:
+#line 1951 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
                        fatal_exit("out of memory adding local-data");
        }
-#line 4816 "util/configparser.c"
+#line 4825 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 419:
-#line 1947 "./util/configparser.y"
+  case 421:
+#line 1958 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -4830,11 +4839,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 4834 "util/configparser.c"
+#line 4843 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 420:
-#line 1962 "./util/configparser.y"
+  case 422:
+#line 1973 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4843,11 +4852,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4847 "util/configparser.c"
+#line 4856 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 421:
-#line 1972 "./util/configparser.y"
+  case 423:
+#line 1983 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4856,41 +4865,41 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4860 "util/configparser.c"
+#line 4869 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 422:
-#line 1982 "./util/configparser.y"
+  case 424:
+#line 1993 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str)));
                cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4870 "util/configparser.c"
+#line 4879 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 423:
-#line 1989 "./util/configparser.y"
+  case 425:
+#line 2000 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
                cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4880 "util/configparser.c"
+#line 4889 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 424:
-#line 1996 "./util/configparser.y"
+  case 426:
+#line 2007 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dns64_prefix);
                cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
        }
-#line 4890 "util/configparser.c"
+#line 4899 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 425:
-#line 2003 "./util/configparser.y"
+  case 427:
+#line 2014 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4898,22 +4907,22 @@ yyreduce:
                else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4902 "util/configparser.c"
+#line 4911 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 426:
-#line 2012 "./util/configparser.y"
+  case 428:
+#line 2023 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa,
                        (yyvsp[0].str)))
                        fatal_exit("out of memory adding dns64-ignore-aaaa");
        }
-#line 4913 "util/configparser.c"
+#line 4922 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 427:
-#line 2020 "./util/configparser.y"
+  case 429:
+#line 2031 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* p, *s = (yyvsp[0].str);
                OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -4926,11 +4935,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4930 "util/configparser.c"
+#line 4939 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 428:
-#line 2034 "./util/configparser.y"
+  case 430:
+#line 2045 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -4950,11 +4959,11 @@ yyreduce:
                        }
                }
        }
-#line 4954 "util/configparser.c"
+#line 4963 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 429:
-#line 2055 "./util/configparser.y"
+  case 431:
+#line 2066 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -4974,11 +4983,11 @@ yyreduce:
                        }
                }
        }
-#line 4978 "util/configparser.c"
+#line 4987 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 430:
-#line 2076 "./util/configparser.y"
+  case 432:
+#line 2087 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
@@ -4989,11 +4998,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4993 "util/configparser.c"
+#line 5002 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 431:
-#line 2088 "./util/configparser.y"
+  case 433:
+#line 2099 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
@@ -5004,11 +5013,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 5008 "util/configparser.c"
+#line 5017 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 432:
-#line 2100 "./util/configparser.y"
+  case 434:
+#line 2111 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
@@ -5019,11 +5028,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 5023 "util/configparser.c"
+#line 5032 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 433:
-#line 2112 "./util/configparser.y"
+  case 435:
+#line 2123 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
@@ -5031,11 +5040,11 @@ yyreduce:
                        yyerror("out of memory");
                }
        }
-#line 5035 "util/configparser.c"
+#line 5044 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 434:
-#line 2121 "./util/configparser.y"
+  case 436:
+#line 2132 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -5055,11 +5064,11 @@ yyreduce:
                        }
                }
        }
-#line 5059 "util/configparser.c"
+#line 5068 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 435:
-#line 2142 "./util/configparser.y"
+  case 437:
+#line 2153 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5067,11 +5076,11 @@ yyreduce:
                else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5071 "util/configparser.c"
+#line 5080 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 436:
-#line 2152 "./util/configparser.y"
+  case 438:
+#line 2163 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5079,33 +5088,33 @@ yyreduce:
                else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5083 "util/configparser.c"
+#line 5092 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 437:
-#line 2161 "./util/configparser.y"
+  case 439:
+#line 2172 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
        if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
                yyerror("memory size expected");
        free((yyvsp[0].str));
   }
-#line 5094 "util/configparser.c"
+#line 5103 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 438:
-#line 2169 "./util/configparser.y"
+  case 440:
+#line 2180 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 5105 "util/configparser.c"
+#line 5114 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 439:
-#line 2177 "./util/configparser.y"
+  case 441:
+#line 2188 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
@@ -5117,11 +5126,11 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 5121 "util/configparser.c"
+#line 5130 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 440:
-#line 2190 "./util/configparser.y"
+  case 442:
+#line 2201 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -5133,11 +5142,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5137 "util/configparser.c"
+#line 5146 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 441:
-#line 2203 "./util/configparser.y"
+  case 443:
+#line 2214 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -5151,11 +5160,11 @@ yyreduce:
                                        "ratelimit-for-domain");
                }
        }
-#line 5155 "util/configparser.c"
+#line 5164 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 442:
-#line 2218 "./util/configparser.y"
+  case 444:
+#line 2229 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -5169,11 +5178,11 @@ yyreduce:
                                        "ratelimit-below-domain");
                }
        }
-#line 5173 "util/configparser.c"
+#line 5182 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 443:
-#line 2233 "./util/configparser.y"
+  case 445:
+#line 2244 "./util/configparser.y" /* yacc.c:1646  */
     { 
        OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); 
        if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5181,11 +5190,11 @@ yyreduce:
        else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
        free((yyvsp[0].str));
        }
-#line 5185 "util/configparser.c"
+#line 5194 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 444:
-#line 2242 "./util/configparser.y"
+  case 446:
+#line 2253 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5193,20 +5202,20 @@ yyreduce:
                else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5197 "util/configparser.c"
+#line 5206 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 445:
-#line 2251 "./util/configparser.y"
+  case 447:
+#line 2262 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
                free((yyvsp[0].str));
        }
-#line 5206 "util/configparser.c"
+#line 5215 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 446:
-#line 2257 "./util/configparser.y"
+  case 448:
+#line 2268 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) <= 0)
@@ -5214,11 +5223,11 @@ yyreduce:
                else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5218 "util/configparser.c"
+#line 5227 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 447:
-#line 2266 "./util/configparser.y"
+  case 449:
+#line 2277 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5226,11 +5235,11 @@ yyreduce:
                else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5230 "util/configparser.c"
+#line 5239 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 448:
-#line 2275 "./util/configparser.y"
+  case 450:
+#line 2286 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5239,11 +5248,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5243 "util/configparser.c"
+#line 5252 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 449:
-#line 2285 "./util/configparser.y"
+  case 451:
+#line 2296 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5252,11 +5261,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5256 "util/configparser.c"
+#line 5265 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 450:
-#line 2295 "./util/configparser.y"
+  case 452:
+#line 2306 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
@@ -5268,11 +5277,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 5272 "util/configparser.c"
+#line 5281 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 451:
-#line 2308 "./util/configparser.y"
+  case 453:
+#line 2319 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
@@ -5284,11 +5293,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 5288 "util/configparser.c"
+#line 5297 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 452:
-#line 2321 "./util/configparser.y"
+  case 454:
+#line 2332 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
@@ -5299,11 +5308,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5303 "util/configparser.c"
+#line 5312 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 453:
-#line 2333 "./util/configparser.y"
+  case 455:
+#line 2344 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
@@ -5316,11 +5325,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5320 "util/configparser.c"
+#line 5329 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 454:
-#line 2347 "./util/configparser.y"
+  case 456:
+#line 2358 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
@@ -5331,11 +5340,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5335 "util/configparser.c"
+#line 5344 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 455:
-#line 2359 "./util/configparser.y"
+  case 457:
+#line 2370 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
@@ -5348,11 +5357,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5352 "util/configparser.c"
+#line 5361 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 456:
-#line 2373 "./util/configparser.y"
+  case 458:
+#line 2384 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->stubs->name)
@@ -5361,31 +5370,31 @@ yyreduce:
                free(cfg_parser->cfg->stubs->name);
                cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
-#line 5365 "util/configparser.c"
+#line 5374 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 457:
-#line 2383 "./util/configparser.y"
+  case 459:
+#line 2394 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 5375 "util/configparser.c"
+#line 5384 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 458:
-#line 2390 "./util/configparser.y"
+  case 460:
+#line 2401 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 5385 "util/configparser.c"
+#line 5394 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 459:
-#line 2397 "./util/configparser.y"
+  case 461:
+#line 2408 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5393,11 +5402,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5397 "util/configparser.c"
+#line 5406 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 460:
-#line 2406 "./util/configparser.y"
+  case 462:
+#line 2417 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5405,11 +5414,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5409 "util/configparser.c"
+#line 5418 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 461:
-#line 2415 "./util/configparser.y"
+  case 463:
+#line 2426 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5418,11 +5427,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5422 "util/configparser.c"
+#line 5431 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 462:
-#line 2425 "./util/configparser.y"
+  case 464:
+#line 2436 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5431,11 +5440,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5435 "util/configparser.c"
+#line 5444 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 463:
-#line 2435 "./util/configparser.y"
+  case 465:
+#line 2446 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->forwards->name)
@@ -5444,31 +5453,31 @@ yyreduce:
                free(cfg_parser->cfg->forwards->name);
                cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
-#line 5448 "util/configparser.c"
+#line 5457 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 464:
-#line 2445 "./util/configparser.y"
+  case 466:
+#line 2456 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 5458 "util/configparser.c"
+#line 5467 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 465:
-#line 2452 "./util/configparser.y"
+  case 467:
+#line 2463 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 5468 "util/configparser.c"
+#line 5477 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 466:
-#line 2459 "./util/configparser.y"
+  case 468:
+#line 2470 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5476,11 +5485,11 @@ yyreduce:
                else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5480 "util/configparser.c"
+#line 5489 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 467:
-#line 2468 "./util/configparser.y"
+  case 469:
+#line 2479 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5488,11 +5497,11 @@ yyreduce:
                else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5492 "util/configparser.c"
+#line 5501 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 468:
-#line 2477 "./util/configparser.y"
+  case 470:
+#line 2488 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5501,11 +5510,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5505 "util/configparser.c"
+#line 5514 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 469:
-#line 2487 "./util/configparser.y"
+  case 471:
+#line 2498 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->auths->name)
@@ -5514,52 +5523,52 @@ yyreduce:
                free(cfg_parser->cfg->auths->name);
                cfg_parser->cfg->auths->name = (yyvsp[0].str);
        }
-#line 5518 "util/configparser.c"
+#line 5527 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 470:
-#line 2497 "./util/configparser.y"
+  case 472:
+#line 2508 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->auths->zonefile);
                cfg_parser->cfg->auths->zonefile = (yyvsp[0].str);
        }
-#line 5528 "util/configparser.c"
+#line 5537 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 471:
-#line 2504 "./util/configparser.y"
+  case 473:
+#line 2515 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(master:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 5538 "util/configparser.c"
+#line 5547 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 472:
-#line 2511 "./util/configparser.y"
+  case 474:
+#line 2522 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(url:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 5548 "util/configparser.c"
+#line 5557 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 473:
-#line 2518 "./util/configparser.y"
+  case 475:
+#line 2529 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify,
                        (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 5559 "util/configparser.c"
+#line 5568 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 474:
-#line 2526 "./util/configparser.y"
+  case 476:
+#line 2537 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5568,11 +5577,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5572 "util/configparser.c"
+#line 5581 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 475:
-#line 2536 "./util/configparser.y"
+  case 477:
+#line 2547 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5581,11 +5590,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5585 "util/configparser.c"
+#line 5594 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 476:
-#line 2546 "./util/configparser.y"
+  case 478:
+#line 2557 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5594,11 +5603,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5598 "util/configparser.c"
+#line 5607 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 477:
-#line 2556 "./util/configparser.y"
+  case 479:
+#line 2567 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->views->name)
@@ -5607,11 +5616,11 @@ yyreduce:
                free(cfg_parser->cfg->views->name);
                cfg_parser->cfg->views->name = (yyvsp[0].str);
        }
-#line 5611 "util/configparser.c"
+#line 5620 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 478:
-#line 2566 "./util/configparser.y"
+  case 480:
+#line 2577 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -5649,11 +5658,11 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 5653 "util/configparser.c"
+#line 5662 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 479:
-#line 2605 "./util/configparser.y"
+  case 481:
+#line 2616 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                validate_respip_action((yyvsp[0].str));
@@ -5662,33 +5671,33 @@ yyreduce:
                        fatal_exit("out of memory adding per-view "
                                "response-ip action");
        }
-#line 5666 "util/configparser.c"
+#line 5675 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 480:
-#line 2615 "./util/configparser.y"
+  case 482:
+#line 2626 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str)));
                if(!cfg_str2list_insert(
                        &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str)))
                        fatal_exit("out of memory adding response-ip-data");
        }
-#line 5677 "util/configparser.c"
+#line 5686 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 481:
-#line 2623 "./util/configparser.y"
+  case 483:
+#line 2634 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
                        fatal_exit("out of memory adding local-data");
                }
        }
-#line 5688 "util/configparser.c"
+#line 5697 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 482:
-#line 2631 "./util/configparser.y"
+  case 484:
+#line 2642 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
                OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -5702,11 +5711,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 5706 "util/configparser.c"
+#line 5715 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 483:
-#line 2646 "./util/configparser.y"
+  case 485:
+#line 2657 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5714,19 +5723,19 @@ yyreduce:
                else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5718 "util/configparser.c"
+#line 5727 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 484:
-#line 2655 "./util/configparser.y"
+  case 486:
+#line 2666 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
-#line 5726 "util/configparser.c"
+#line 5735 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 495:
-#line 2666 "./util/configparser.y"
+  case 497:
+#line 2677 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5735,11 +5744,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5739 "util/configparser.c"
+#line 5748 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 496:
-#line 2676 "./util/configparser.y"
+  case 498:
+#line 2687 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -5747,79 +5756,79 @@ yyreduce:
                else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5751 "util/configparser.c"
+#line 5760 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 497:
-#line 2685 "./util/configparser.y"
+  case 499:
+#line 2696 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 5761 "util/configparser.c"
+#line 5770 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 498:
-#line 2692 "./util/configparser.y"
+  case 500:
+#line 2703 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
                cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5771 "util/configparser.c"
+#line 5780 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 499:
-#line 2699 "./util/configparser.y"
+  case 501:
+#line 2710 "./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 5781 "util/configparser.c"
+#line 5790 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 500:
-#line 2706 "./util/configparser.y"
+  case 502:
+#line 2717 "./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 5791 "util/configparser.c"
+#line 5800 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 501:
-#line 2713 "./util/configparser.y"
+  case 503:
+#line 2724 "./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 5801 "util/configparser.c"
+#line 5810 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 502:
-#line 2720 "./util/configparser.y"
+  case 504:
+#line 2731 "./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 5811 "util/configparser.c"
+#line 5820 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 503:
-#line 2727 "./util/configparser.y"
+  case 505:
+#line 2738 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnstap:)\n"));
        }
-#line 5819 "util/configparser.c"
+#line 5828 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 524:
-#line 2747 "./util/configparser.y"
+  case 526:
+#line 2758 "./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)
@@ -5827,31 +5836,31 @@ yyreduce:
                else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5831 "util/configparser.c"
+#line 5840 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 525:
-#line 2756 "./util/configparser.y"
+  case 527:
+#line 2767 "./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 5841 "util/configparser.c"
+#line 5850 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 526:
-#line 2763 "./util/configparser.y"
+  case 528:
+#line 2774 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_ip);
                cfg_parser->cfg->dnstap_ip = (yyvsp[0].str);
        }
-#line 5851 "util/configparser.c"
+#line 5860 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 527:
-#line 2770 "./util/configparser.y"
+  case 529:
+#line 2781 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5859,51 +5868,51 @@ yyreduce:
                else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5863 "util/configparser.c"
+#line 5872 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 528:
-#line 2779 "./util/configparser.y"
+  case 530:
+#line 2790 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_tls_server_name);
                cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str);
        }
-#line 5873 "util/configparser.c"
+#line 5882 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 529:
-#line 2786 "./util/configparser.y"
+  case 531:
+#line 2797 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_tls_cert_bundle);
                cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str);
        }
-#line 5883 "util/configparser.c"
+#line 5892 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 530:
-#line 2793 "./util/configparser.y"
+  case 532:
+#line 2804 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_tls_client_key_file);
                cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str);
        }
-#line 5893 "util/configparser.c"
+#line 5902 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 531:
-#line 2800 "./util/configparser.y"
+  case 533:
+#line 2811 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_tls_client_cert_file);
                cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str);
        }
-#line 5903 "util/configparser.c"
+#line 5912 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 532:
-#line 2807 "./util/configparser.y"
+  case 534:
+#line 2818 "./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)
@@ -5911,11 +5920,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5915 "util/configparser.c"
+#line 5924 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 533:
-#line 2816 "./util/configparser.y"
+  case 535:
+#line 2827 "./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)
@@ -5923,31 +5932,31 @@ yyreduce:
                else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5927 "util/configparser.c"
+#line 5936 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 534:
-#line 2825 "./util/configparser.y"
+  case 536:
+#line 2836 "./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 5937 "util/configparser.c"
+#line 5946 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 535:
-#line 2832 "./util/configparser.y"
+  case 537:
+#line 2843 "./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 5947 "util/configparser.c"
+#line 5956 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 536:
-#line 2839 "./util/configparser.y"
+  case 538:
+#line 2850 "./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)
@@ -5956,11 +5965,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5960 "util/configparser.c"
+#line 5969 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 537:
-#line 2849 "./util/configparser.y"
+  case 539:
+#line 2860 "./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)
@@ -5969,11 +5978,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5973 "util/configparser.c"
+#line 5982 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 538:
-#line 2859 "./util/configparser.y"
+  case 540:
+#line 2870 "./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)
@@ -5982,11 +5991,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5986 "util/configparser.c"
+#line 5995 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 539:
-#line 2869 "./util/configparser.y"
+  case 541:
+#line 2880 "./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)
@@ -5995,11 +6004,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5999 "util/configparser.c"
+#line 6008 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 540:
-#line 2879 "./util/configparser.y"
+  case 542:
+#line 2890 "./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)
@@ -6008,11 +6017,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6012 "util/configparser.c"
+#line 6021 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 541:
-#line 2889 "./util/configparser.y"
+  case 543:
+#line 2900 "./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)
@@ -6021,29 +6030,29 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6025 "util/configparser.c"
+#line 6034 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 542:
-#line 2899 "./util/configparser.y"
+  case 544:
+#line 2910 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(python:)\n")); 
        }
-#line 6033 "util/configparser.c"
+#line 6042 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 546:
-#line 2908 "./util/configparser.y"
+  case 548:
+#line 2919 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 6043 "util/configparser.c"
+#line 6052 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 547:
-#line 2914 "./util/configparser.y"
+  case 549:
+#line 2925 "./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)
@@ -6052,21 +6061,21 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6056 "util/configparser.c"
+#line 6065 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 548:
-#line 2924 "./util/configparser.y"
+  case 550:
+#line 2935 "./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 6066 "util/configparser.c"
+#line 6075 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 549:
-#line 2931 "./util/configparser.y"
+  case 551:
+#line 2942 "./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));
@@ -6074,30 +6083,30 @@ yyreduce:
                        (yyvsp[-1].str), (yyvsp[0].str)))
                        fatal_exit("out of memory adding response-ip");
        }
-#line 6078 "util/configparser.c"
+#line 6087 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 550:
-#line 2940 "./util/configparser.y"
+  case 552:
+#line 2951 "./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 6089 "util/configparser.c"
+#line 6098 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 551:
-#line 2948 "./util/configparser.y"
+  case 553:
+#line 2959 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnscrypt:)\n"));
        }
-#line 6097 "util/configparser.c"
+#line 6106 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 564:
-#line 2964 "./util/configparser.y"
+  case 566:
+#line 2975 "./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)
@@ -6105,11 +6114,11 @@ yyreduce:
                else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6109 "util/configparser.c"
+#line 6118 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 565:
-#line 2974 "./util/configparser.y"
+  case 567:
+#line 2985 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -6117,21 +6126,21 @@ yyreduce:
                else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6121 "util/configparser.c"
+#line 6130 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 566:
-#line 2983 "./util/configparser.y"
+  case 568:
+#line 2994 "./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 6131 "util/configparser.c"
+#line 6140 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 567:
-#line 2990 "./util/configparser.y"
+  case 569:
+#line 3001 "./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)))
@@ -6139,21 +6148,21 @@ yyreduce:
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
                        fatal_exit("out of memory adding dnscrypt-provider-cert");
        }
-#line 6143 "util/configparser.c"
+#line 6152 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 568:
-#line 2999 "./util/configparser.y"
+  case 570:
+#line 3010 "./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 6153 "util/configparser.c"
+#line 6162 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 569:
-#line 3006 "./util/configparser.y"
+  case 571:
+#line 3017 "./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)))
@@ -6161,22 +6170,22 @@ yyreduce:
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
                        fatal_exit("out of memory adding dnscrypt-secret-key");
        }
-#line 6165 "util/configparser.c"
+#line 6174 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 570:
-#line 3015 "./util/configparser.y"
+  case 572:
+#line 3026 "./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 6176 "util/configparser.c"
+#line 6185 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 571:
-#line 3023 "./util/configparser.y"
+  case 573:
+#line 3034 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
@@ -6188,22 +6197,22 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 6192 "util/configparser.c"
+#line 6201 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 572:
-#line 3036 "./util/configparser.y"
+  case 574:
+#line 3047 "./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 6203 "util/configparser.c"
+#line 6212 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 573:
-#line 3044 "./util/configparser.y"
+  case 575:
+#line 3055 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
@@ -6215,19 +6224,19 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 6219 "util/configparser.c"
+#line 6228 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 574:
-#line 3057 "./util/configparser.y"
+  case 576:
+#line 3068 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(cachedb:)\n"));
        }
-#line 6227 "util/configparser.c"
+#line 6236 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 582:
-#line 3067 "./util/configparser.y"
+  case 584:
+#line 3078 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_CACHEDB
                OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
@@ -6238,11 +6247,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 6242 "util/configparser.c"
+#line 6251 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 583:
-#line 3079 "./util/configparser.y"
+  case 585:
+#line 3090 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_CACHEDB
                OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
@@ -6253,11 +6262,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 6257 "util/configparser.c"
+#line 6266 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 584:
-#line 3091 "./util/configparser.y"
+  case 586:
+#line 3102 "./util/configparser.y" /* yacc.c:1646  */
     {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
@@ -6268,11 +6277,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 6272 "util/configparser.c"
+#line 6281 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 585:
-#line 3103 "./util/configparser.y"
+  case 587:
+#line 3114 "./util/configparser.y" /* yacc.c:1646  */
     {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                int port;
@@ -6286,11 +6295,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 6290 "util/configparser.c"
+#line 6299 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 586:
-#line 3118 "./util/configparser.y"
+  case 588:
+#line 3129 "./util/configparser.y" /* yacc.c:1646  */
     {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
@@ -6302,11 +6311,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 6306 "util/configparser.c"
+#line 6315 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 587:
-#line 3131 "./util/configparser.y"
+  case 589:
+#line 3142 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if (atoi((yyvsp[0].str)) < 0)
@@ -6316,19 +6325,19 @@ yyreduce:
                                fatal_exit("out of memory adding tcp connection limit");
                }
        }
-#line 6320 "util/configparser.c"
+#line 6329 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 588:
-#line 3142 "./util/configparser.y"
+  case 590:
+#line 3153 "./util/configparser.y" /* yacc.c:1646  */
     {
                        OUTYY(("\nP(ipset:)\n"));
                }
-#line 6328 "util/configparser.c"
+#line 6337 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 593:
-#line 3151 "./util/configparser.y"
+  case 595:
+#line 3162 "./util/configparser.y" /* yacc.c:1646  */
     {
                #ifdef USE_IPSET
                        OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
@@ -6342,11 +6351,11 @@ yyreduce:
                        free((yyvsp[0].str));
                #endif
                }
-#line 6346 "util/configparser.c"
+#line 6355 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 594:
-#line 3166 "./util/configparser.y"
+  case 596:
+#line 3177 "./util/configparser.y" /* yacc.c:1646  */
     {
                #ifdef USE_IPSET
                        OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
@@ -6360,12 +6369,11 @@ yyreduce:
                        free((yyvsp[0].str));
                #endif
                }
-#line 6364 "util/configparser.c"
+#line 6373 "util/configparser.c" /* yacc.c:1646  */
     break;
 
 
-#line 6368 "util/configparser.c"
-
+#line 6377 "util/configparser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -6390,13 +6398,14 @@ yyreduce:
   /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
-  {
-    const int yylhs = yyr1[yyn] - YYNTOKENS;
-    const int yyi = yypgoto[yylhs] + *yyssp;
-    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
-               ? yytable[yyi]
-               : yydefgoto[yylhs]);
-  }
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
 
   goto yynewstate;
 
@@ -6479,10 +6488,12 @@ yyerrlab:
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
-  /* Pacify compilers when the user code never invokes YYERROR and the
-     label yyerrorlab therefore never appears in user code.  */
-  if (0)
-    YYERROR;
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
 
   /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
@@ -6544,7 +6555,6 @@ yyacceptlab:
   yyresult = 0;
   goto yyreturn;
 
-
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -6552,7 +6562,6 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-
 #if !defined yyoverflow || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
@@ -6563,10 +6572,6 @@ yyexhaustedlab:
   /* Fall through.  */
 #endif
 
-
-/*-----------------------------------------------------.
-| yyreturn -- parsing is finished, return the result.  |
-`-----------------------------------------------------*/
 yyreturn:
   if (yychar != YYEMPTY)
     {
@@ -6596,7 +6601,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 3180 "./util/configparser.y"
+#line 3191 "./util/configparser.y" /* yacc.c:1906  */
 
 
 /* parse helper routines could be here */
index aaf8222236ffa1b541257250dd6c6a9035e5aece..117b1e5fe8f9d40cf547af13ae0bb6b56c349615 100644 (file)
@@ -1,9 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.4.1.  */
+/* A Bison parser, made by GNU Bison 3.0.4.  */
 
 /* Bison interface for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
-   Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -31,9 +30,6 @@
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
-/* Undocumented macros, especially those whose name start with YY_,
-   are private implementation details.  Do not rely on them.  */
-
 #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
 # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
 /* Debug traces.  */
@@ -187,150 +183,151 @@ extern int yydebug;
     VAR_STUB_SSL_UPSTREAM = 393,
     VAR_FORWARD_SSL_UPSTREAM = 394,
     VAR_TLS_CERT_BUNDLE = 395,
-    VAR_STUB_FIRST = 396,
-    VAR_MINIMAL_RESPONSES = 397,
-    VAR_RRSET_ROUNDROBIN = 398,
-    VAR_MAX_UDP_SIZE = 399,
-    VAR_DELAY_CLOSE = 400,
-    VAR_UNBLOCK_LAN_ZONES = 401,
-    VAR_INSECURE_LAN_ZONES = 402,
-    VAR_INFRA_CACHE_MIN_RTT = 403,
-    VAR_DNS64_PREFIX = 404,
-    VAR_DNS64_SYNTHALL = 405,
-    VAR_DNS64_IGNORE_AAAA = 406,
-    VAR_DNSTAP = 407,
-    VAR_DNSTAP_ENABLE = 408,
-    VAR_DNSTAP_SOCKET_PATH = 409,
-    VAR_DNSTAP_IP = 410,
-    VAR_DNSTAP_TLS = 411,
-    VAR_DNSTAP_TLS_SERVER_NAME = 412,
-    VAR_DNSTAP_TLS_CERT_BUNDLE = 413,
-    VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414,
-    VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415,
-    VAR_DNSTAP_SEND_IDENTITY = 416,
-    VAR_DNSTAP_SEND_VERSION = 417,
-    VAR_DNSTAP_IDENTITY = 418,
-    VAR_DNSTAP_VERSION = 419,
-    VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420,
-    VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421,
-    VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422,
-    VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423,
-    VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424,
-    VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425,
-    VAR_RESPONSE_IP_TAG = 426,
-    VAR_RESPONSE_IP = 427,
-    VAR_RESPONSE_IP_DATA = 428,
-    VAR_HARDEN_ALGO_DOWNGRADE = 429,
-    VAR_IP_TRANSPARENT = 430,
-    VAR_DISABLE_DNSSEC_LAME_CHECK = 431,
-    VAR_IP_RATELIMIT = 432,
-    VAR_IP_RATELIMIT_SLABS = 433,
-    VAR_IP_RATELIMIT_SIZE = 434,
-    VAR_RATELIMIT = 435,
-    VAR_RATELIMIT_SLABS = 436,
-    VAR_RATELIMIT_SIZE = 437,
-    VAR_RATELIMIT_FOR_DOMAIN = 438,
-    VAR_RATELIMIT_BELOW_DOMAIN = 439,
-    VAR_IP_RATELIMIT_FACTOR = 440,
-    VAR_RATELIMIT_FACTOR = 441,
-    VAR_SEND_CLIENT_SUBNET = 442,
-    VAR_CLIENT_SUBNET_ZONE = 443,
-    VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 444,
-    VAR_CLIENT_SUBNET_OPCODE = 445,
-    VAR_MAX_CLIENT_SUBNET_IPV4 = 446,
-    VAR_MAX_CLIENT_SUBNET_IPV6 = 447,
-    VAR_MIN_CLIENT_SUBNET_IPV4 = 448,
-    VAR_MIN_CLIENT_SUBNET_IPV6 = 449,
-    VAR_MAX_ECS_TREE_SIZE_IPV4 = 450,
-    VAR_MAX_ECS_TREE_SIZE_IPV6 = 451,
-    VAR_CAPS_WHITELIST = 452,
-    VAR_CACHE_MAX_NEGATIVE_TTL = 453,
-    VAR_PERMIT_SMALL_HOLDDOWN = 454,
-    VAR_QNAME_MINIMISATION = 455,
-    VAR_QNAME_MINIMISATION_STRICT = 456,
-    VAR_IP_FREEBIND = 457,
-    VAR_DEFINE_TAG = 458,
-    VAR_LOCAL_ZONE_TAG = 459,
-    VAR_ACCESS_CONTROL_TAG = 460,
-    VAR_LOCAL_ZONE_OVERRIDE = 461,
-    VAR_ACCESS_CONTROL_TAG_ACTION = 462,
-    VAR_ACCESS_CONTROL_TAG_DATA = 463,
-    VAR_VIEW = 464,
-    VAR_ACCESS_CONTROL_VIEW = 465,
-    VAR_VIEW_FIRST = 466,
-    VAR_SERVE_EXPIRED = 467,
-    VAR_SERVE_EXPIRED_TTL = 468,
-    VAR_SERVE_EXPIRED_TTL_RESET = 469,
-    VAR_SERVE_EXPIRED_REPLY_TTL = 470,
-    VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 471,
-    VAR_FAKE_DSA = 472,
-    VAR_FAKE_SHA1 = 473,
-    VAR_LOG_IDENTITY = 474,
-    VAR_HIDE_TRUSTANCHOR = 475,
-    VAR_TRUST_ANCHOR_SIGNALING = 476,
-    VAR_AGGRESSIVE_NSEC = 477,
-    VAR_USE_SYSTEMD = 478,
-    VAR_SHM_ENABLE = 479,
-    VAR_SHM_KEY = 480,
-    VAR_ROOT_KEY_SENTINEL = 481,
-    VAR_DNSCRYPT = 482,
-    VAR_DNSCRYPT_ENABLE = 483,
-    VAR_DNSCRYPT_PORT = 484,
-    VAR_DNSCRYPT_PROVIDER = 485,
-    VAR_DNSCRYPT_SECRET_KEY = 486,
-    VAR_DNSCRYPT_PROVIDER_CERT = 487,
-    VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 488,
-    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 489,
-    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 490,
-    VAR_DNSCRYPT_NONCE_CACHE_SIZE = 491,
-    VAR_DNSCRYPT_NONCE_CACHE_SLABS = 492,
-    VAR_IPSECMOD_ENABLED = 493,
-    VAR_IPSECMOD_HOOK = 494,
-    VAR_IPSECMOD_IGNORE_BOGUS = 495,
-    VAR_IPSECMOD_MAX_TTL = 496,
-    VAR_IPSECMOD_WHITELIST = 497,
-    VAR_IPSECMOD_STRICT = 498,
-    VAR_CACHEDB = 499,
-    VAR_CACHEDB_BACKEND = 500,
-    VAR_CACHEDB_SECRETSEED = 501,
-    VAR_CACHEDB_REDISHOST = 502,
-    VAR_CACHEDB_REDISPORT = 503,
-    VAR_CACHEDB_REDISTIMEOUT = 504,
-    VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 505,
-    VAR_FOR_UPSTREAM = 506,
-    VAR_AUTH_ZONE = 507,
-    VAR_ZONEFILE = 508,
-    VAR_MASTER = 509,
-    VAR_URL = 510,
-    VAR_FOR_DOWNSTREAM = 511,
-    VAR_FALLBACK_ENABLED = 512,
-    VAR_TLS_ADDITIONAL_PORT = 513,
-    VAR_LOW_RTT = 514,
-    VAR_LOW_RTT_PERMIL = 515,
-    VAR_FAST_SERVER_PERMIL = 516,
-    VAR_FAST_SERVER_NUM = 517,
-    VAR_ALLOW_NOTIFY = 518,
-    VAR_TLS_WIN_CERT = 519,
-    VAR_TCP_CONNECTION_LIMIT = 520,
-    VAR_FORWARD_NO_CACHE = 521,
-    VAR_STUB_NO_CACHE = 522,
-    VAR_LOG_SERVFAIL = 523,
-    VAR_DENY_ANY = 524,
-    VAR_UNKNOWN_SERVER_TIME_LIMIT = 525,
-    VAR_LOG_TAG_QUERYREPLY = 526,
-    VAR_STREAM_WAIT_SIZE = 527,
-    VAR_TLS_CIPHERS = 528,
-    VAR_TLS_CIPHERSUITES = 529,
-    VAR_IPSET = 530,
-    VAR_IPSET_NAME_V4 = 531,
-    VAR_IPSET_NAME_V6 = 532,
-    VAR_TLS_SESSION_TICKET_KEYS = 533,
-    VAR_RPZ = 534,
-    VAR_TAGS = 535,
-    VAR_RPZ_ACTION_OVERRIDE = 536,
-    VAR_RPZ_CNAME_OVERRIDE = 537,
-    VAR_RPZ_LOG = 538,
-    VAR_RPZ_LOG_NAME = 539
+    VAR_HTTPS_PORT = 396,
+    VAR_STUB_FIRST = 397,
+    VAR_MINIMAL_RESPONSES = 398,
+    VAR_RRSET_ROUNDROBIN = 399,
+    VAR_MAX_UDP_SIZE = 400,
+    VAR_DELAY_CLOSE = 401,
+    VAR_UNBLOCK_LAN_ZONES = 402,
+    VAR_INSECURE_LAN_ZONES = 403,
+    VAR_INFRA_CACHE_MIN_RTT = 404,
+    VAR_DNS64_PREFIX = 405,
+    VAR_DNS64_SYNTHALL = 406,
+    VAR_DNS64_IGNORE_AAAA = 407,
+    VAR_DNSTAP = 408,
+    VAR_DNSTAP_ENABLE = 409,
+    VAR_DNSTAP_SOCKET_PATH = 410,
+    VAR_DNSTAP_IP = 411,
+    VAR_DNSTAP_TLS = 412,
+    VAR_DNSTAP_TLS_SERVER_NAME = 413,
+    VAR_DNSTAP_TLS_CERT_BUNDLE = 414,
+    VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 415,
+    VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 416,
+    VAR_DNSTAP_SEND_IDENTITY = 417,
+    VAR_DNSTAP_SEND_VERSION = 418,
+    VAR_DNSTAP_IDENTITY = 419,
+    VAR_DNSTAP_VERSION = 420,
+    VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 421,
+    VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 422,
+    VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 423,
+    VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 424,
+    VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 425,
+    VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 426,
+    VAR_RESPONSE_IP_TAG = 427,
+    VAR_RESPONSE_IP = 428,
+    VAR_RESPONSE_IP_DATA = 429,
+    VAR_HARDEN_ALGO_DOWNGRADE = 430,
+    VAR_IP_TRANSPARENT = 431,
+    VAR_DISABLE_DNSSEC_LAME_CHECK = 432,
+    VAR_IP_RATELIMIT = 433,
+    VAR_IP_RATELIMIT_SLABS = 434,
+    VAR_IP_RATELIMIT_SIZE = 435,
+    VAR_RATELIMIT = 436,
+    VAR_RATELIMIT_SLABS = 437,
+    VAR_RATELIMIT_SIZE = 438,
+    VAR_RATELIMIT_FOR_DOMAIN = 439,
+    VAR_RATELIMIT_BELOW_DOMAIN = 440,
+    VAR_IP_RATELIMIT_FACTOR = 441,
+    VAR_RATELIMIT_FACTOR = 442,
+    VAR_SEND_CLIENT_SUBNET = 443,
+    VAR_CLIENT_SUBNET_ZONE = 444,
+    VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445,
+    VAR_CLIENT_SUBNET_OPCODE = 446,
+    VAR_MAX_CLIENT_SUBNET_IPV4 = 447,
+    VAR_MAX_CLIENT_SUBNET_IPV6 = 448,
+    VAR_MIN_CLIENT_SUBNET_IPV4 = 449,
+    VAR_MIN_CLIENT_SUBNET_IPV6 = 450,
+    VAR_MAX_ECS_TREE_SIZE_IPV4 = 451,
+    VAR_MAX_ECS_TREE_SIZE_IPV6 = 452,
+    VAR_CAPS_WHITELIST = 453,
+    VAR_CACHE_MAX_NEGATIVE_TTL = 454,
+    VAR_PERMIT_SMALL_HOLDDOWN = 455,
+    VAR_QNAME_MINIMISATION = 456,
+    VAR_QNAME_MINIMISATION_STRICT = 457,
+    VAR_IP_FREEBIND = 458,
+    VAR_DEFINE_TAG = 459,
+    VAR_LOCAL_ZONE_TAG = 460,
+    VAR_ACCESS_CONTROL_TAG = 461,
+    VAR_LOCAL_ZONE_OVERRIDE = 462,
+    VAR_ACCESS_CONTROL_TAG_ACTION = 463,
+    VAR_ACCESS_CONTROL_TAG_DATA = 464,
+    VAR_VIEW = 465,
+    VAR_ACCESS_CONTROL_VIEW = 466,
+    VAR_VIEW_FIRST = 467,
+    VAR_SERVE_EXPIRED = 468,
+    VAR_SERVE_EXPIRED_TTL = 469,
+    VAR_SERVE_EXPIRED_TTL_RESET = 470,
+    VAR_SERVE_EXPIRED_REPLY_TTL = 471,
+    VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472,
+    VAR_FAKE_DSA = 473,
+    VAR_FAKE_SHA1 = 474,
+    VAR_LOG_IDENTITY = 475,
+    VAR_HIDE_TRUSTANCHOR = 476,
+    VAR_TRUST_ANCHOR_SIGNALING = 477,
+    VAR_AGGRESSIVE_NSEC = 478,
+    VAR_USE_SYSTEMD = 479,
+    VAR_SHM_ENABLE = 480,
+    VAR_SHM_KEY = 481,
+    VAR_ROOT_KEY_SENTINEL = 482,
+    VAR_DNSCRYPT = 483,
+    VAR_DNSCRYPT_ENABLE = 484,
+    VAR_DNSCRYPT_PORT = 485,
+    VAR_DNSCRYPT_PROVIDER = 486,
+    VAR_DNSCRYPT_SECRET_KEY = 487,
+    VAR_DNSCRYPT_PROVIDER_CERT = 488,
+    VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489,
+    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490,
+    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491,
+    VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492,
+    VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493,
+    VAR_IPSECMOD_ENABLED = 494,
+    VAR_IPSECMOD_HOOK = 495,
+    VAR_IPSECMOD_IGNORE_BOGUS = 496,
+    VAR_IPSECMOD_MAX_TTL = 497,
+    VAR_IPSECMOD_WHITELIST = 498,
+    VAR_IPSECMOD_STRICT = 499,
+    VAR_CACHEDB = 500,
+    VAR_CACHEDB_BACKEND = 501,
+    VAR_CACHEDB_SECRETSEED = 502,
+    VAR_CACHEDB_REDISHOST = 503,
+    VAR_CACHEDB_REDISPORT = 504,
+    VAR_CACHEDB_REDISTIMEOUT = 505,
+    VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506,
+    VAR_FOR_UPSTREAM = 507,
+    VAR_AUTH_ZONE = 508,
+    VAR_ZONEFILE = 509,
+    VAR_MASTER = 510,
+    VAR_URL = 511,
+    VAR_FOR_DOWNSTREAM = 512,
+    VAR_FALLBACK_ENABLED = 513,
+    VAR_TLS_ADDITIONAL_PORT = 514,
+    VAR_LOW_RTT = 515,
+    VAR_LOW_RTT_PERMIL = 516,
+    VAR_FAST_SERVER_PERMIL = 517,
+    VAR_FAST_SERVER_NUM = 518,
+    VAR_ALLOW_NOTIFY = 519,
+    VAR_TLS_WIN_CERT = 520,
+    VAR_TCP_CONNECTION_LIMIT = 521,
+    VAR_FORWARD_NO_CACHE = 522,
+    VAR_STUB_NO_CACHE = 523,
+    VAR_LOG_SERVFAIL = 524,
+    VAR_DENY_ANY = 525,
+    VAR_UNKNOWN_SERVER_TIME_LIMIT = 526,
+    VAR_LOG_TAG_QUERYREPLY = 527,
+    VAR_STREAM_WAIT_SIZE = 528,
+    VAR_TLS_CIPHERS = 529,
+    VAR_TLS_CIPHERSUITES = 530,
+    VAR_IPSET = 531,
+    VAR_IPSET_NAME_V4 = 532,
+    VAR_IPSET_NAME_V6 = 533,
+    VAR_TLS_SESSION_TICKET_KEYS = 534,
+    VAR_RPZ = 535,
+    VAR_TAGS = 536,
+    VAR_RPZ_ACTION_OVERRIDE = 537,
+    VAR_RPZ_CNAME_OVERRIDE = 538,
+    VAR_RPZ_LOG = 539,
+    VAR_RPZ_LOG_NAME = 540
   };
 #endif
 /* Tokens.  */
@@ -472,162 +469,164 @@ extern int yydebug;
 #define VAR_STUB_SSL_UPSTREAM 393
 #define VAR_FORWARD_SSL_UPSTREAM 394
 #define VAR_TLS_CERT_BUNDLE 395
-#define VAR_STUB_FIRST 396
-#define VAR_MINIMAL_RESPONSES 397
-#define VAR_RRSET_ROUNDROBIN 398
-#define VAR_MAX_UDP_SIZE 399
-#define VAR_DELAY_CLOSE 400
-#define VAR_UNBLOCK_LAN_ZONES 401
-#define VAR_INSECURE_LAN_ZONES 402
-#define VAR_INFRA_CACHE_MIN_RTT 403
-#define VAR_DNS64_PREFIX 404
-#define VAR_DNS64_SYNTHALL 405
-#define VAR_DNS64_IGNORE_AAAA 406
-#define VAR_DNSTAP 407
-#define VAR_DNSTAP_ENABLE 408
-#define VAR_DNSTAP_SOCKET_PATH 409
-#define VAR_DNSTAP_IP 410
-#define VAR_DNSTAP_TLS 411
-#define VAR_DNSTAP_TLS_SERVER_NAME 412
-#define VAR_DNSTAP_TLS_CERT_BUNDLE 413
-#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 414
-#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 415
-#define VAR_DNSTAP_SEND_IDENTITY 416
-#define VAR_DNSTAP_SEND_VERSION 417
-#define VAR_DNSTAP_IDENTITY 418
-#define VAR_DNSTAP_VERSION 419
-#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 420
-#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 421
-#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 422
-#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 423
-#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 424
-#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 425
-#define VAR_RESPONSE_IP_TAG 426
-#define VAR_RESPONSE_IP 427
-#define VAR_RESPONSE_IP_DATA 428
-#define VAR_HARDEN_ALGO_DOWNGRADE 429
-#define VAR_IP_TRANSPARENT 430
-#define VAR_DISABLE_DNSSEC_LAME_CHECK 431
-#define VAR_IP_RATELIMIT 432
-#define VAR_IP_RATELIMIT_SLABS 433
-#define VAR_IP_RATELIMIT_SIZE 434
-#define VAR_RATELIMIT 435
-#define VAR_RATELIMIT_SLABS 436
-#define VAR_RATELIMIT_SIZE 437
-#define VAR_RATELIMIT_FOR_DOMAIN 438
-#define VAR_RATELIMIT_BELOW_DOMAIN 439
-#define VAR_IP_RATELIMIT_FACTOR 440
-#define VAR_RATELIMIT_FACTOR 441
-#define VAR_SEND_CLIENT_SUBNET 442
-#define VAR_CLIENT_SUBNET_ZONE 443
-#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 444
-#define VAR_CLIENT_SUBNET_OPCODE 445
-#define VAR_MAX_CLIENT_SUBNET_IPV4 446
-#define VAR_MAX_CLIENT_SUBNET_IPV6 447
-#define VAR_MIN_CLIENT_SUBNET_IPV4 448
-#define VAR_MIN_CLIENT_SUBNET_IPV6 449
-#define VAR_MAX_ECS_TREE_SIZE_IPV4 450
-#define VAR_MAX_ECS_TREE_SIZE_IPV6 451
-#define VAR_CAPS_WHITELIST 452
-#define VAR_CACHE_MAX_NEGATIVE_TTL 453
-#define VAR_PERMIT_SMALL_HOLDDOWN 454
-#define VAR_QNAME_MINIMISATION 455
-#define VAR_QNAME_MINIMISATION_STRICT 456
-#define VAR_IP_FREEBIND 457
-#define VAR_DEFINE_TAG 458
-#define VAR_LOCAL_ZONE_TAG 459
-#define VAR_ACCESS_CONTROL_TAG 460
-#define VAR_LOCAL_ZONE_OVERRIDE 461
-#define VAR_ACCESS_CONTROL_TAG_ACTION 462
-#define VAR_ACCESS_CONTROL_TAG_DATA 463
-#define VAR_VIEW 464
-#define VAR_ACCESS_CONTROL_VIEW 465
-#define VAR_VIEW_FIRST 466
-#define VAR_SERVE_EXPIRED 467
-#define VAR_SERVE_EXPIRED_TTL 468
-#define VAR_SERVE_EXPIRED_TTL_RESET 469
-#define VAR_SERVE_EXPIRED_REPLY_TTL 470
-#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 471
-#define VAR_FAKE_DSA 472
-#define VAR_FAKE_SHA1 473
-#define VAR_LOG_IDENTITY 474
-#define VAR_HIDE_TRUSTANCHOR 475
-#define VAR_TRUST_ANCHOR_SIGNALING 476
-#define VAR_AGGRESSIVE_NSEC 477
-#define VAR_USE_SYSTEMD 478
-#define VAR_SHM_ENABLE 479
-#define VAR_SHM_KEY 480
-#define VAR_ROOT_KEY_SENTINEL 481
-#define VAR_DNSCRYPT 482
-#define VAR_DNSCRYPT_ENABLE 483
-#define VAR_DNSCRYPT_PORT 484
-#define VAR_DNSCRYPT_PROVIDER 485
-#define VAR_DNSCRYPT_SECRET_KEY 486
-#define VAR_DNSCRYPT_PROVIDER_CERT 487
-#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 488
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 489
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 490
-#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 491
-#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 492
-#define VAR_IPSECMOD_ENABLED 493
-#define VAR_IPSECMOD_HOOK 494
-#define VAR_IPSECMOD_IGNORE_BOGUS 495
-#define VAR_IPSECMOD_MAX_TTL 496
-#define VAR_IPSECMOD_WHITELIST 497
-#define VAR_IPSECMOD_STRICT 498
-#define VAR_CACHEDB 499
-#define VAR_CACHEDB_BACKEND 500
-#define VAR_CACHEDB_SECRETSEED 501
-#define VAR_CACHEDB_REDISHOST 502
-#define VAR_CACHEDB_REDISPORT 503
-#define VAR_CACHEDB_REDISTIMEOUT 504
-#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 505
-#define VAR_FOR_UPSTREAM 506
-#define VAR_AUTH_ZONE 507
-#define VAR_ZONEFILE 508
-#define VAR_MASTER 509
-#define VAR_URL 510
-#define VAR_FOR_DOWNSTREAM 511
-#define VAR_FALLBACK_ENABLED 512
-#define VAR_TLS_ADDITIONAL_PORT 513
-#define VAR_LOW_RTT 514
-#define VAR_LOW_RTT_PERMIL 515
-#define VAR_FAST_SERVER_PERMIL 516
-#define VAR_FAST_SERVER_NUM 517
-#define VAR_ALLOW_NOTIFY 518
-#define VAR_TLS_WIN_CERT 519
-#define VAR_TCP_CONNECTION_LIMIT 520
-#define VAR_FORWARD_NO_CACHE 521
-#define VAR_STUB_NO_CACHE 522
-#define VAR_LOG_SERVFAIL 523
-#define VAR_DENY_ANY 524
-#define VAR_UNKNOWN_SERVER_TIME_LIMIT 525
-#define VAR_LOG_TAG_QUERYREPLY 526
-#define VAR_STREAM_WAIT_SIZE 527
-#define VAR_TLS_CIPHERS 528
-#define VAR_TLS_CIPHERSUITES 529
-#define VAR_IPSET 530
-#define VAR_IPSET_NAME_V4 531
-#define VAR_IPSET_NAME_V6 532
-#define VAR_TLS_SESSION_TICKET_KEYS 533
-#define VAR_RPZ 534
-#define VAR_TAGS 535
-#define VAR_RPZ_ACTION_OVERRIDE 536
-#define VAR_RPZ_CNAME_OVERRIDE 537
-#define VAR_RPZ_LOG 538
-#define VAR_RPZ_LOG_NAME 539
+#define VAR_HTTPS_PORT 396
+#define VAR_STUB_FIRST 397
+#define VAR_MINIMAL_RESPONSES 398
+#define VAR_RRSET_ROUNDROBIN 399
+#define VAR_MAX_UDP_SIZE 400
+#define VAR_DELAY_CLOSE 401
+#define VAR_UNBLOCK_LAN_ZONES 402
+#define VAR_INSECURE_LAN_ZONES 403
+#define VAR_INFRA_CACHE_MIN_RTT 404
+#define VAR_DNS64_PREFIX 405
+#define VAR_DNS64_SYNTHALL 406
+#define VAR_DNS64_IGNORE_AAAA 407
+#define VAR_DNSTAP 408
+#define VAR_DNSTAP_ENABLE 409
+#define VAR_DNSTAP_SOCKET_PATH 410
+#define VAR_DNSTAP_IP 411
+#define VAR_DNSTAP_TLS 412
+#define VAR_DNSTAP_TLS_SERVER_NAME 413
+#define VAR_DNSTAP_TLS_CERT_BUNDLE 414
+#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 415
+#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 416
+#define VAR_DNSTAP_SEND_IDENTITY 417
+#define VAR_DNSTAP_SEND_VERSION 418
+#define VAR_DNSTAP_IDENTITY 419
+#define VAR_DNSTAP_VERSION 420
+#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 421
+#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 422
+#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 423
+#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 424
+#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 425
+#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 426
+#define VAR_RESPONSE_IP_TAG 427
+#define VAR_RESPONSE_IP 428
+#define VAR_RESPONSE_IP_DATA 429
+#define VAR_HARDEN_ALGO_DOWNGRADE 430
+#define VAR_IP_TRANSPARENT 431
+#define VAR_DISABLE_DNSSEC_LAME_CHECK 432
+#define VAR_IP_RATELIMIT 433
+#define VAR_IP_RATELIMIT_SLABS 434
+#define VAR_IP_RATELIMIT_SIZE 435
+#define VAR_RATELIMIT 436
+#define VAR_RATELIMIT_SLABS 437
+#define VAR_RATELIMIT_SIZE 438
+#define VAR_RATELIMIT_FOR_DOMAIN 439
+#define VAR_RATELIMIT_BELOW_DOMAIN 440
+#define VAR_IP_RATELIMIT_FACTOR 441
+#define VAR_RATELIMIT_FACTOR 442
+#define VAR_SEND_CLIENT_SUBNET 443
+#define VAR_CLIENT_SUBNET_ZONE 444
+#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 445
+#define VAR_CLIENT_SUBNET_OPCODE 446
+#define VAR_MAX_CLIENT_SUBNET_IPV4 447
+#define VAR_MAX_CLIENT_SUBNET_IPV6 448
+#define VAR_MIN_CLIENT_SUBNET_IPV4 449
+#define VAR_MIN_CLIENT_SUBNET_IPV6 450
+#define VAR_MAX_ECS_TREE_SIZE_IPV4 451
+#define VAR_MAX_ECS_TREE_SIZE_IPV6 452
+#define VAR_CAPS_WHITELIST 453
+#define VAR_CACHE_MAX_NEGATIVE_TTL 454
+#define VAR_PERMIT_SMALL_HOLDDOWN 455
+#define VAR_QNAME_MINIMISATION 456
+#define VAR_QNAME_MINIMISATION_STRICT 457
+#define VAR_IP_FREEBIND 458
+#define VAR_DEFINE_TAG 459
+#define VAR_LOCAL_ZONE_TAG 460
+#define VAR_ACCESS_CONTROL_TAG 461
+#define VAR_LOCAL_ZONE_OVERRIDE 462
+#define VAR_ACCESS_CONTROL_TAG_ACTION 463
+#define VAR_ACCESS_CONTROL_TAG_DATA 464
+#define VAR_VIEW 465
+#define VAR_ACCESS_CONTROL_VIEW 466
+#define VAR_VIEW_FIRST 467
+#define VAR_SERVE_EXPIRED 468
+#define VAR_SERVE_EXPIRED_TTL 469
+#define VAR_SERVE_EXPIRED_TTL_RESET 470
+#define VAR_SERVE_EXPIRED_REPLY_TTL 471
+#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 472
+#define VAR_FAKE_DSA 473
+#define VAR_FAKE_SHA1 474
+#define VAR_LOG_IDENTITY 475
+#define VAR_HIDE_TRUSTANCHOR 476
+#define VAR_TRUST_ANCHOR_SIGNALING 477
+#define VAR_AGGRESSIVE_NSEC 478
+#define VAR_USE_SYSTEMD 479
+#define VAR_SHM_ENABLE 480
+#define VAR_SHM_KEY 481
+#define VAR_ROOT_KEY_SENTINEL 482
+#define VAR_DNSCRYPT 483
+#define VAR_DNSCRYPT_ENABLE 484
+#define VAR_DNSCRYPT_PORT 485
+#define VAR_DNSCRYPT_PROVIDER 486
+#define VAR_DNSCRYPT_SECRET_KEY 487
+#define VAR_DNSCRYPT_PROVIDER_CERT 488
+#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 489
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 490
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 491
+#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 492
+#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 493
+#define VAR_IPSECMOD_ENABLED 494
+#define VAR_IPSECMOD_HOOK 495
+#define VAR_IPSECMOD_IGNORE_BOGUS 496
+#define VAR_IPSECMOD_MAX_TTL 497
+#define VAR_IPSECMOD_WHITELIST 498
+#define VAR_IPSECMOD_STRICT 499
+#define VAR_CACHEDB 500
+#define VAR_CACHEDB_BACKEND 501
+#define VAR_CACHEDB_SECRETSEED 502
+#define VAR_CACHEDB_REDISHOST 503
+#define VAR_CACHEDB_REDISPORT 504
+#define VAR_CACHEDB_REDISTIMEOUT 505
+#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 506
+#define VAR_FOR_UPSTREAM 507
+#define VAR_AUTH_ZONE 508
+#define VAR_ZONEFILE 509
+#define VAR_MASTER 510
+#define VAR_URL 511
+#define VAR_FOR_DOWNSTREAM 512
+#define VAR_FALLBACK_ENABLED 513
+#define VAR_TLS_ADDITIONAL_PORT 514
+#define VAR_LOW_RTT 515
+#define VAR_LOW_RTT_PERMIL 516
+#define VAR_FAST_SERVER_PERMIL 517
+#define VAR_FAST_SERVER_NUM 518
+#define VAR_ALLOW_NOTIFY 519
+#define VAR_TLS_WIN_CERT 520
+#define VAR_TCP_CONNECTION_LIMIT 521
+#define VAR_FORWARD_NO_CACHE 522
+#define VAR_STUB_NO_CACHE 523
+#define VAR_LOG_SERVFAIL 524
+#define VAR_DENY_ANY 525
+#define VAR_UNKNOWN_SERVER_TIME_LIMIT 526
+#define VAR_LOG_TAG_QUERYREPLY 527
+#define VAR_STREAM_WAIT_SIZE 528
+#define VAR_TLS_CIPHERS 529
+#define VAR_TLS_CIPHERSUITES 530
+#define VAR_IPSET 531
+#define VAR_IPSET_NAME_V4 532
+#define VAR_IPSET_NAME_V6 533
+#define VAR_TLS_SESSION_TICKET_KEYS 534
+#define VAR_RPZ 535
+#define VAR_TAGS 536
+#define VAR_RPZ_ACTION_OVERRIDE 537
+#define VAR_RPZ_CNAME_OVERRIDE 538
+#define VAR_RPZ_LOG 539
+#define VAR_RPZ_LOG_NAME 540
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+
 union YYSTYPE
 {
-#line 66 "./util/configparser.y"
+#line 66 "./util/configparser.y" /* yacc.c:1909  */
 
        char*   str;
 
-#line 629 "util/configparser.h"
-
+#line 628 "util/configparser.h" /* yacc.c:1909  */
 };
+
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
index 206f2f946421522811e9744552f134a00647dc22..7498ab4f93d37cb13b54fba645084559e2ab6dc0 100644 (file)
@@ -111,6 +111,7 @@ extern struct config_parser_state* cfg_parser;
 %token VAR_TCP_UPSTREAM VAR_SSL_UPSTREAM
 %token VAR_SSL_SERVICE_KEY VAR_SSL_SERVICE_PEM VAR_SSL_PORT VAR_FORWARD_FIRST
 %token VAR_STUB_SSL_UPSTREAM VAR_FORWARD_SSL_UPSTREAM VAR_TLS_CERT_BUNDLE
+%token VAR_HTTPS_PORT
 %token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN
 %token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE
 %token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES
@@ -235,6 +236,7 @@ content_server: server_num_threads | server_verbosity | server_port |
        server_log_queries | server_log_replies | server_tcp_upstream | server_ssl_upstream |
        server_log_local_actions |
        server_ssl_service_key | server_ssl_service_pem | server_ssl_port |
+       server_https_port |
        server_minimal_responses | server_rrset_roundrobin | server_max_udp_size |
        server_so_reuseport | server_delay_close |
        server_unblock_lan_zones | server_insecure_lan_zones |
@@ -949,6 +951,15 @@ server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG
                        yyerror("out of memory");
        }
        ;
+server_https_port: VAR_HTTPS_PORT STRING_ARG
+       {
+               OUTYY(("P(server_https_port:%s)\n", $2));
+               if(atoi($2) == 0)
+                       yyerror("port number expected");
+               else cfg_parser->cfg->https_port = atoi($2);
+               free($2);
+       }
+       ;
 server_use_systemd: VAR_USE_SYSTEMD STRING_ARG
        {
                OUTYY(("P(server_use_systemd:%s)\n", $2));
index b26677efb19c03d66f79c550d2fe290ef459942d..0e01394bfd2d5f82886647b381eb2f44d79ed45b 100644 (file)
 4188,
 4191,
 4192,
+4195,
 4197,
 4199,
 4300,
index 135d33427ee1752b0a917824a8f945233ba398f9..82d37f489aac9eabcbcdc9e7d92883b021e652cd 100644 (file)
@@ -58,6 +58,9 @@
 #ifdef USE_WINSOCK
 #include <wincrypt.h>
 #endif
+#ifdef HAVE_NGHTTP2_NGHTTP2_H
+#include <nghttp2/nghttp2.h>
+#endif
 
 /** max length of an IP address (the address portion) that we allow */
 #define MAX_ADDR_STRLEN 128 /* characters */
@@ -855,6 +858,21 @@ log_cert(unsigned level, const char* str, void* cert)
 }
 #endif /* HAVE_SSL */
 
+#if defined(HAVE_SSL) && defined(HAVE_NGHTTP2)
+static int alpn_select_cb(SSL* ATTR_UNUSED(ssl), const unsigned char** out,
+       unsigned char* outlen, const unsigned char* in, unsigned int inlen,
+       void* ATTR_UNUSED(arg))
+{
+       int rv = nghttp2_select_next_protocol((unsigned char **)out, outlen, in,
+               inlen);
+       if(rv == -1) {
+               return SSL_TLSEXT_ERR_NOACK;
+       }
+       /* either http/1.1 or h2 selected */
+       return SSL_TLSEXT_ERR_OK;
+}
+#endif
+
 int
 listen_sslctx_setup(void* ctxt)
 {
@@ -913,6 +931,9 @@ listen_sslctx_setup(void* ctxt)
 #ifdef HAVE_SSL_CTX_SET_SECURITY_LEVEL
        SSL_CTX_set_security_level(ctx, 0);
 #endif
+#if defined(HAVE_SSL_CTX_SET_ALPN_SELECT_CB) && defined(HAVE_NGHTTP2)
+       SSL_CTX_set_alpn_select_cb(ctx, alpn_select_cb, NULL);
+#endif
 #else
        (void)ctxt;
 #endif /* HAVE_SSL */
index 090238384912efd3a5a95f109abb8752c6ed8f2f..d3802e4f6b97028307a4219063f166fea7f40fc3 100644 (file)
@@ -733,7 +733,7 @@ static void
 setup_tcp_handler(struct comm_point* c, int fd, int cur, int max) 
 {
        int handler_usage;
-       log_assert(c->type == comm_tcp);
+       log_assert(c->type == comm_tcp || c->type == comm_http);
        log_assert(c->fd == -1);
        sldns_buffer_clear(c->buffer);
 #ifdef USE_DNSCRYPT
@@ -908,6 +908,41 @@ comm_point_tcp_win_bio_cb(struct comm_point* c, void* thessl)
 }
 #endif
 
+#ifdef HAVE_NGHTTP2
+/** Create http2 session server.  Per connection, after TCP accepted.*/
+static int http2_session_server_create(struct http2_session* h2_session)
+{
+       log_assert(h2_session->callbacks);
+       h2_session->is_drop = 0;
+       if(nghttp2_session_server_new(&h2_session->session,
+                       h2_session->callbacks,
+               h2_session) == NGHTTP2_ERR_NOMEM) {
+               log_err("failed to create nghttp2 session server");
+               return 0;
+       }
+
+       return 1;
+}
+
+/** Submit http2 setting to session. Once per session. */
+static int http2_submit_settings(struct http2_session* h2_session)
+{
+       int ret;
+       nghttp2_settings_entry settings[1] = {
+               {NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 100}};
+
+       ret = nghttp2_submit_settings(h2_session->session, NGHTTP2_FLAG_NONE,
+               settings, 1);
+       if(ret) {
+               verbose(VERB_QUERY, "http2: submit_settings failed, "
+                       "error: %s", nghttp2_strerror(ret));
+               return 0;
+       }
+       return 1;
+}
+#endif /* HAVE_NGHTTP2 */
+
+
 void 
 comm_point_tcp_accept_callback(int fd, short event, void* arg)
 {
@@ -929,7 +964,28 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
        /* clear leftover flags from previous use, and then set the
         * correct event base for the event structure for libevent */
        ub_event_free(c_hdl->ev->ev);
-       c_hdl->ev->ev = ub_event_new(c_hdl->ev->base->eb->base, -1, UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT, comm_point_tcp_handle_callback, c_hdl);
+
+#ifdef HAVE_NGHTTP2
+       if(c_hdl->type == comm_http && c_hdl->h2_session) {
+               if(!http2_session_server_create(c_hdl->h2_session)) {
+                       log_warn("failed to create nghttp2");
+                       return;
+               }
+               if(!http2_submit_settings(c_hdl->h2_session)) {
+                       log_warn("failed to submit http2 settings");
+                       return;
+               }
+               c_hdl->ev->ev = ub_event_new(c_hdl->ev->base->eb->base, -1,
+                       UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT,
+                       comm_point_http_handle_callback, c_hdl);
+       } else {
+#endif
+               c_hdl->ev->ev = ub_event_new(c_hdl->ev->base->eb->base, -1,
+                       UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT,
+                       comm_point_tcp_handle_callback, c_hdl);
+#ifdef HAVE_NGHTTP2
+       }
+#endif
        if(!c_hdl->ev->ev) {
                log_warn("could not ub_event_new, dropped tcp");
                return;
@@ -1163,6 +1219,18 @@ ssl_handshake(struct comm_point* c)
                        c->repinfo.addrlen);
        }
 
+       /* check if http2 use is negotiated */
+       if(c->type == comm_http && c->h2_session) {
+               const unsigned char *alpn;
+               unsigned int alpnlen = 0;
+               SSL_get0_alpn_selected(c->ssl, &alpn, &alpnlen);
+               if(alpnlen == 2 && memcmp("h2", alpn, 2) == 0) {
+                       /* connection upgraded to HTTP2 */
+                       c->tcp_do_toggle_rw = 0;
+                       c->alpn_h2 = 1;
+               }
+       }
+
        /* setup listen rw correctly */
        if(c->tcp_is_reading) {
                if(c->ssl_shake_state != comm_ssl_shake_read)
@@ -2180,11 +2248,210 @@ http_chunked_segment(struct comm_point* c)
        return 1;
 }
 
+#ifdef HAVE_NGHTTP2
+/** Create new http2 session. Called when creating handling comm point. */
+struct http2_session* http2_session_create(struct comm_point* c)
+{
+       struct http2_session* session = calloc(1, sizeof(*session));
+       if(!session) {
+               log_err("malloc failure while creating http2 session");
+               return NULL;
+       }
+       session->c = c;
+
+       return session;
+}
+#endif
+
+/** Delete http2 session. After closing connection or on error */
+void http2_session_delete(struct http2_session* h2_session)
+{
+#ifdef HAVE_NGHTTP2
+       if(h2_session->callbacks)
+               nghttp2_session_callbacks_del(h2_session->callbacks);
+       free(h2_session);
+#else
+       (void)h2_session;
+#endif
+}
+
+#ifdef HAVE_NGHTTP2
+struct http2_stream* http2_stream_create(int32_t stream_id)
+{
+       struct http2_stream* h2_stream = calloc(1, sizeof(*h2_stream));
+       if(!h2_stream) {
+               log_err("malloc failure while creating http2 stream");
+               return NULL;
+       }
+       h2_stream->stream_id = stream_id;
+       return h2_stream;
+}
+
+/** Delete http2 stream. After session delete or stream close callback */
+void http2_stream_delete(struct http2_session* h2_session,
+       struct http2_stream* h2_stream)
+{
+       if(h2_stream->mesh_state) {
+               mesh_state_remove_reply(h2_stream->mesh, h2_stream->mesh_state,
+                       h2_session->c);
+       }
+       if(h2_stream->qbuffer)
+               sldns_buffer_free(h2_stream->qbuffer);
+       if(h2_stream->rbuffer)
+               sldns_buffer_free(h2_stream->rbuffer);
+       free(h2_stream);
+}
+#endif
+
+void http2_stream_add_meshstate(struct http2_stream* h2_stream,
+       struct mesh_area* mesh, struct mesh_state* m)
+{
+       h2_stream->mesh = mesh;
+       h2_stream->mesh_state = m;
+}
+
+/** delete http2 session server. After closing connection. */
+static void http2_session_server_delete(struct http2_session* h2_session)
+{
+#ifdef HAVE_NGHTTP2
+       struct http2_stream* h2_stream, *next;
+       nghttp2_session_del(h2_session->session); /* NULL input is fine */
+       h2_session->session = NULL;
+       for(h2_stream = h2_session->first_stream; h2_stream;) {
+               next = h2_stream->next;
+               http2_stream_delete(h2_session, h2_stream);
+               h2_stream = next;
+       }
+       h2_session->first_stream = NULL;
+       h2_session->is_drop = 0;
+       h2_session->postpone_drop = 0;
+       h2_session->c->h2_stream = NULL;
+#endif
+       (void)h2_session;
+}
+
+#ifdef HAVE_NGHTTP2
+void http2_session_add_stream(struct http2_session* h2_session,
+       struct http2_stream* h2_stream)
+{
+       if(h2_session->first_stream)
+               h2_session->first_stream->prev = h2_stream;
+       h2_stream->next = h2_session->first_stream;
+       h2_session->first_stream = h2_stream;
+}
+
+/** remove stream from session linked list. After stream close callback or
+ * closing connection */
+void http2_session_remove_stream(struct http2_session* h2_session,
+       struct http2_stream* h2_stream)
+{
+       if(h2_stream->prev)
+               h2_stream->prev->next = h2_stream->next;
+       else
+               h2_session->first_stream = h2_stream->next;
+       if(h2_stream->next)
+               h2_stream->next->prev = h2_stream->prev;
+
+}
+
+int http2_stream_close_cb(nghttp2_session* ATTR_UNUSED(session),
+       int32_t stream_id, uint32_t ATTR_UNUSED(error_code), void* cb_arg)
+{
+       struct http2_stream* h2_stream;
+       struct http2_session* h2_session = (struct http2_session*)cb_arg;
+       if(!(h2_stream = nghttp2_session_get_stream_user_data(
+               h2_session->session, stream_id))) {
+               return 0;
+       }
+       http2_session_remove_stream(h2_session, h2_stream);
+       http2_stream_delete(h2_session, h2_stream);
+       return 0;
+}
+
+ssize_t http2_recv_cb(nghttp2_session* ATTR_UNUSED(session), uint8_t* buf,
+       size_t len, int ATTR_UNUSED(flags), void* cb_arg)
+{
+#ifdef HAVE_SSL
+       struct http2_session* h2_session = (struct http2_session*)cb_arg;
+       int r;
+
+       log_assert(h2_session->c->type == comm_http);
+       log_assert(h2_session->c->h2_session);
+
+       if(!h2_session->c->ssl)
+               return 0;
+
+       ERR_clear_error();
+       r = SSL_read(h2_session->c->ssl, buf, len);
+       if(r <= 0) {
+               int want = SSL_get_error(h2_session->c->ssl, r);
+               if(want == SSL_ERROR_ZERO_RETURN) {
+                       return NGHTTP2_ERR_EOF;
+               } else if(want == SSL_ERROR_WANT_READ) {
+                       return NGHTTP2_ERR_WOULDBLOCK;
+               } else if(want == SSL_ERROR_WANT_WRITE) {
+                       h2_session->c->ssl_shake_state = comm_ssl_shake_hs_write;
+                       comm_point_listen_for_rw(h2_session->c, 0, 1);
+                       return NGHTTP2_ERR_WOULDBLOCK;
+               } else if(want == SSL_ERROR_SYSCALL) {
+#ifdef ECONNRESET
+                       if(errno == ECONNRESET && verbosity < 2)
+                               return NGHTTP2_ERR_CALLBACK_FAILURE;
+#endif
+                       if(errno != 0)
+                               log_err("SSL_read syscall: %s",
+                                       strerror(errno));
+                       return NGHTTP2_ERR_CALLBACK_FAILURE;
+               }
+               log_crypto_err("could not SSL_read");
+               return NGHTTP2_ERR_CALLBACK_FAILURE;
+       }
+       return r;
+#else
+       (void)buf;
+       (void)len;
+       (void)cb_arg;
+       return -1;
+#endif
+}
+#endif /* HAVE_NGHTTP2 */
+
+/** Handle http2 read */
+static int
+comm_point_http2_handle_read(int ATTR_UNUSED(fd), struct comm_point* c)
+{
+#ifdef HAVE_NGHTTP2
+       int ret;
+       log_assert(c->h2_session);
+       log_assert(c->ssl);
+
+       /* reading until recv cb returns NGHTTP2_ERR_WOULDBLOCK */
+       ret = nghttp2_session_recv(c->h2_session->session);
+       if(ret) {
+               if(ret != NGHTTP2_ERR_EOF) {
+                       verbose(VERB_QUERY, "http2: session_recv failed, "
+                               "error: %s", nghttp2_strerror(ret));
+               }
+               return 0;
+       }
+       if(nghttp2_session_want_write(c->h2_session->session)) {
+               c->tcp_is_reading = 0;
+               comm_point_stop_listening(c);
+               comm_point_start_listening(c, -1, c->tcp_timeout_msec);
+       } else if(!nghttp2_session_want_read(c->h2_session->session))
+               return 0; /* connection can be closed */
+       return 1;
+#else
+       (void)c;
+       return 0;
+#endif
+}
+
 /**
- * Handle http reading callback. 
+ * Handle http reading callback.
  * @param fd: file descriptor of socket.
  * @param c: comm point to read from into buffer.
- * @return: 0 on error 
+ * @return: 0 on error
  */
 static int
 comm_point_http_handle_read(int fd, struct comm_point* c)
@@ -2204,6 +2471,18 @@ comm_point_http_handle_read(int fd, struct comm_point* c)
 
        if(!c->tcp_is_reading)
                return 1;
+
+       if(c->alpn_h2) {
+               return comm_point_http2_handle_read(fd, c);
+       }
+
+       /* http version is <= http/1.1 */
+
+       if(c->http_min_version >= http_version_2) {
+               /* HTTP/2 failed, not allowed to use lower version. */
+               return 0;
+       }
+
        /* read more data */
        if(c->ssl) {
                if(!ssl_http_read_more(c))
@@ -2214,7 +2493,9 @@ comm_point_http_handle_read(int fd, struct comm_point* c)
        }
 
        sldns_buffer_flip(c->buffer);
+
        while(sldns_buffer_remaining(c->buffer) > 0) {
+               /* Handle HTTP/1.x data */
                /* if we are reading headers, read more headers */
                if(c->http_in_headers || c->http_in_chunk_headers) {
                        /* if header is done, process the header */
@@ -2376,6 +2657,83 @@ http_write_more(int fd, struct comm_point* c)
        return 1;
 }
 
+#ifdef HAVE_NGHTTP2
+ssize_t http2_send_cb(nghttp2_session* ATTR_UNUSED(session), const uint8_t* buf,
+       size_t len, int ATTR_UNUSED(flags), void* cb_arg)
+{
+#ifdef HAVE_SSL
+       int r;
+       struct http2_session* h2_session = (struct http2_session*)cb_arg;
+       log_assert(h2_session->c->type == comm_http);
+       log_assert(h2_session->c->h2_session);
+
+       if(!h2_session->c->ssl)
+               return 0;
+
+       ERR_clear_error();
+       r = SSL_write(h2_session->c->ssl, buf, len);
+       if(r <= 0) {
+               int want = SSL_get_error(h2_session->c->ssl, r);
+               if(want == SSL_ERROR_ZERO_RETURN) {
+                       return NGHTTP2_ERR_CALLBACK_FAILURE;
+               } else if(want == SSL_ERROR_WANT_READ) {
+                       h2_session->c->ssl_shake_state = comm_ssl_shake_hs_read;
+                       comm_point_listen_for_rw(h2_session->c, 1, 0);
+                       return NGHTTP2_ERR_WOULDBLOCK;
+               } else if(want == SSL_ERROR_WANT_WRITE) {
+                       return NGHTTP2_ERR_WOULDBLOCK;
+               } else if(want == SSL_ERROR_SYSCALL) {
+#ifdef EPIPE
+                       if(errno == EPIPE && verbosity < 2)
+                               return NGHTTP2_ERR_CALLBACK_FAILURE;
+#endif
+                       if(errno != 0)
+                               log_err("SSL_write syscall: %s",
+                                       strerror(errno));
+                       return NGHTTP2_ERR_CALLBACK_FAILURE;
+               }
+               log_crypto_err("could not SSL_write");
+               return NGHTTP2_ERR_CALLBACK_FAILURE;
+       }
+       return r;
+#else
+       (void)buf;
+       (void)len;
+       (void)cb_arg;
+       return -1;
+#endif
+}
+#endif /* HAVE_NGHTTP2 */
+
+/** Handle http2 writing */
+static int
+comm_point_http2_handle_write(int ATTR_UNUSED(fd), struct comm_point* c)
+{
+#ifdef HAVE_NGHTTP2
+       int ret;
+       log_assert(c->h2_session);
+       log_assert(c->ssl);
+
+       ret = nghttp2_session_send(c->h2_session->session);
+       if(ret) {
+               verbose(VERB_QUERY, "http2: session_send failed, "
+                       "error: %s", nghttp2_strerror(ret));
+               return 0;
+       }
+
+       if(nghttp2_session_want_read(c->h2_session->session)) {
+               c->tcp_is_reading = 1;
+               comm_point_stop_listening(c);
+               comm_point_start_listening(c, -1, c->tcp_timeout_msec);
+       } else if(!nghttp2_session_want_write(c->h2_session->session))
+               return 0; /* connection can be closed */
+       return 1;
+#else
+       (void)c;
+       return 0;
+#endif
+}
+
 /** 
  * Handle http writing callback. 
  * @param fd: file descriptor of socket.
@@ -2407,6 +2765,18 @@ comm_point_http_handle_write(int fd, struct comm_point* c)
 #endif /* HAVE_SSL */
        if(c->tcp_is_reading)
                return 1;
+
+       if(c->alpn_h2) {
+               return comm_point_http2_handle_write(fd, c);
+       }
+
+       /* http version is <= http/1.1 */
+
+       if(c->http_min_version >= http_version_2) {
+               /* HTTP/2 failed, not allowed to use lower version. */
+               return 0;
+       }
+
        /* if we are writing, write more */
        if(c->ssl) {
                if(!ssl_http_write_more(c))
@@ -2718,11 +3088,116 @@ comm_point_create_tcp_handler(struct comm_base *base,
        return c;
 }
 
+static struct comm_point* 
+comm_point_create_http_handler(struct comm_base *base, 
+       struct comm_point* parent, size_t bufsize, int harden_large_queries,
+       comm_point_callback_type* callback, void* callback_arg)
+{
+       struct comm_point* c = (struct comm_point*)calloc(1,
+               sizeof(struct comm_point));
+       short evbits;
+       if(!c)
+               return NULL;
+       c->ev = (struct internal_event*)calloc(1,
+               sizeof(struct internal_event));
+       if(!c->ev) {
+               free(c);
+               return NULL;
+       }
+       c->ev->base = base;
+       c->fd = -1;
+       c->buffer = sldns_buffer_new(bufsize);
+       if(!c->buffer) {
+               free(c->ev);
+               free(c);
+               return NULL;
+       }
+       c->timeout = (struct timeval*)malloc(sizeof(struct timeval));
+       if(!c->timeout) {
+               sldns_buffer_free(c->buffer);
+               free(c->ev);
+               free(c);
+               return NULL;
+       }
+       c->tcp_is_reading = 0;
+       c->tcp_byte_count = 0;
+       c->tcp_parent = parent;
+       c->tcp_timeout_msec = parent->tcp_timeout_msec;
+       c->tcp_conn_limit = parent->tcp_conn_limit;
+       c->tcl_addr = NULL;
+       c->tcp_keepalive = 0;
+       c->max_tcp_count = 0;
+       c->cur_tcp_count = 0;
+       c->tcp_handlers = NULL;
+       c->tcp_free = NULL;
+       c->type = comm_http;
+       c->tcp_do_close = 1;
+       c->do_not_close = 0;
+       c->tcp_do_toggle_rw = 1; /* will be set to 0 after http2 upgrade */
+       c->tcp_check_nb_connect = 0;
+#ifdef USE_MSG_FASTOPEN
+       c->tcp_do_fastopen = 0;
+#endif
+#ifdef USE_DNSCRYPT
+       c->dnscrypt = 0;
+       c->dnscrypt_buffer = NULL;
+#endif
+       c->repinfo.c = c;
+       c->callback = callback;
+       c->cb_arg = callback_arg;
+
+       c->http_min_version = http_version_2;
+       c->http2_max_qbuffer_size = bufsize;
+       if(harden_large_queries && bufsize > 512)
+               c->http2_max_qbuffer_size = 512;
+       c->alpn_h2 = 0;
+#ifdef HAVE_NGHTTP2
+       if(!(c->h2_session = http2_session_create(c))) {
+               log_err("could not create http2 session");
+               sldns_buffer_free(c->buffer);
+               free(c->timeout);
+               free(c->ev);
+               free(c);
+               return NULL;
+       }
+       if(!(c->h2_session->callbacks = http2_req_callbacks_create())) {
+               log_err("could not create http2 callbacks");
+               http2_session_delete(c->h2_session);
+               sldns_buffer_free(c->buffer);
+               free(c->timeout);
+               free(c->ev);
+               free(c);
+               return NULL;
+       }
+#endif
+       
+       /* add to parent free list */
+       c->tcp_free = parent->tcp_free;
+       parent->tcp_free = c;
+       /* ub_event stuff */
+       evbits = UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT;
+       c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
+               comm_point_http_handle_callback, c);
+       if(c->ev->ev == NULL)
+       {
+               log_err("could not set http handler event");
+               parent->tcp_free = c->tcp_free;
+               http2_session_delete(c->h2_session);
+               sldns_buffer_free(c->buffer);
+               free(c->timeout);
+               free(c->ev);
+               free(c);
+               return NULL;
+       }
+       return c;
+}
+
 struct comm_point* 
 comm_point_create_tcp(struct comm_base *base, int fd, int num,
-       int idle_timeout, struct tcl_list* tcp_conn_limit, size_t bufsize,
-       struct sldns_buffer* spoolbuf, comm_point_callback_type* callback,
-       void* callback_arg)
+       int idle_timeout, int harden_large_queries,
+       struct tcl_list* tcp_conn_limit, size_t bufsize,
+       struct sldns_buffer* spoolbuf, enum listen_type port_type,
+       comm_point_callback_type* callback, void* callback_arg)
 {
        struct comm_point* c = (struct comm_point*)calloc(1,
                sizeof(struct comm_point));
@@ -2786,10 +3261,23 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num,
                comm_point_delete(c);
                return NULL;
        }
-       /* now prealloc the tcp handlers */
+       /* now prealloc the handlers */
        for(i=0; i<num; i++) {
-               c->tcp_handlers[i] = comm_point_create_tcp_handler(base,
-                       c, bufsize, spoolbuf, callback, callback_arg);
+               if(port_type == listen_type_tcp ||
+                       port_type == listen_type_ssl ||
+                       port_type == listen_type_tcp_dnscrypt) {
+                       c->tcp_handlers[i] = comm_point_create_tcp_handler(base,
+                               c, bufsize, spoolbuf, callback, callback_arg);
+               } else if(port_type == listen_type_http) {
+                       c->tcp_handlers[i] = comm_point_create_http_handler(
+                               base, c, bufsize, harden_large_queries,
+                               callback, callback_arg);
+               }
+               else {
+                       log_err("could not create tcp handler, unknown listen "
+                               "type");
+                       return NULL;
+               }
                if(!c->tcp_handlers[i]) {
                        comm_point_delete(c);
                        return NULL;
@@ -3073,6 +3561,9 @@ comm_point_close(struct comm_point* c)
        tcl_close_connection(c->tcl_addr);
        if(c->tcp_req_info)
                tcp_req_info_clear(c->tcp_req_info);
+       if(c->h2_session)
+               http2_session_server_delete(c->h2_session);
+
        /* close fd after removing from event lists, or epoll.. is messed up */
        if(c->fd != -1 && !c->do_not_close) {
                if(c->type == comm_tcp || c->type == comm_http) {
@@ -3119,6 +3610,9 @@ comm_point_delete(struct comm_point* c)
                if(c->tcp_req_info) {
                        tcp_req_info_delete(c->tcp_req_info);
                }
+               if(c->h2_session) {
+                       http2_session_delete(c->h2_session);
+               }
        }
        ub_event_free(c->ev->ev);
        free(c->ev);
@@ -3161,6 +3655,17 @@ comm_point_send_reply(struct comm_reply *repinfo)
 #endif
                if(repinfo->c->tcp_req_info) {
                        tcp_req_info_send_reply(repinfo->c->tcp_req_info);
+               } else if(repinfo->c->alpn_h2) {
+                       if(!http2_submit_dns_response(repinfo->c->h2_session)) {
+                               comm_point_drop_reply(repinfo);
+                               return;
+                       }
+                       repinfo->c->h2_stream = NULL;
+                       repinfo->c->tcp_is_reading = 0;
+                       comm_point_stop_listening(repinfo->c);
+                       comm_point_start_listening(repinfo->c, -1,
+                               repinfo->c->tcp_timeout_msec);
+                       return;
                } else {
                        comm_point_start_listening(repinfo->c, -1,
                                repinfo->c->tcp_timeout_msec);
@@ -3179,6 +3684,16 @@ comm_point_drop_reply(struct comm_reply* repinfo)
                return;
        if(repinfo->c->tcp_req_info)
                repinfo->c->tcp_req_info->is_drop = 1;
+       if(repinfo->c->type == comm_http) {
+               if(repinfo->c->h2_session) {
+                       repinfo->c->h2_session->is_drop = 1;
+                       if(!repinfo->c->h2_session->postpone_drop)
+                               reclaim_http_handler(repinfo->c);
+                       return;
+               }
+               reclaim_http_handler(repinfo->c);
+               return;
+       }
        reclaim_tcp_handler(repinfo->c);
 }
 
index bb2cd1e53732bed6aa75262cd01239f073f506fe..8664a61b6b8ca82d0a2c735ec1ac68278d8c1039 100644 (file)
@@ -61,6 +61,9 @@
 #define NET_EVENT_H
 
 #include "dnscrypt/dnscrypt.h"
+#ifdef HAVE_NGHTTP2_NGHTTP2_H
+#include <nghttp2/nghttp2.h>
+#endif
 
 struct sldns_buffer;
 struct comm_point;
@@ -68,11 +71,16 @@ struct comm_reply;
 struct tcl_list;
 struct ub_event_base;
 
+struct mesh_state;
+struct mesh_area;
+
 /* internal event notification data storage structure. */
 struct internal_event;
 struct internal_base;
 struct internal_timer; /* A sub struct of the comm_timer super struct */
 
+enum listen_type;
+
 /** callback from communication point function type */
 typedef int comm_point_callback_type(struct comm_point*, void*, int, 
        struct comm_reply*);
@@ -205,6 +213,13 @@ struct comm_point {
        } ssl_shake_state;
 
        /* -------- HTTP ------- */
+       /** Do not allow connection to use HTTP version lower than this. 0=no
+        * minimum. */
+       enum {
+               http_version_none = 0,
+               http_version_2 = 2
+       } http_min_version;
+       /* -------- HTTP/1.1 ------- */
        /** Currently reading in http headers */
        int http_in_headers;
        /** Currently reading in chunk headers, 0=not, 1=firstline, 2=unused
@@ -216,6 +231,15 @@ struct comm_point {
        struct sldns_buffer* http_temp;
        /** http stored content in buffer */
        size_t http_stored;
+       /* -------- HTTP/2 ------- */
+       /** http2 session */
+       struct http2_session* h2_session;
+       /** set to 1 if h2 is negatiated using alpn */
+       int alpn_h2;
+       /** maximum allowed query buffer size */
+       size_t http2_max_qbuffer_size;
+       /** stream currently being handled */
+       struct http2_stream* h2_stream;
 
        /* -------- dnstap ------- */
        /** the dnstap environment */
@@ -456,10 +480,13 @@ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base,
  * @param num: becomes max_tcp_count, the routine allocates that
  *     many tcp handler commpoints.
  * @param idle_timeout: TCP idle timeout in ms.
+ * @param harden_large_queries: whether query size should be limited.
  * @param tcp_conn_limit: TCP connection limit info.
  * @param bufsize: size of buffer to create for handlers.
  * @param spoolbuf: shared spool buffer for tcp_req_info structures.
  *     or NULL to not create those structures in the tcp handlers.
+ * @param port_type: the type of port we are creating a TCP listener for. Used
+ *     to select handler type to use.
  * @param callback: callback function pointer for TCP handlers.
  * @param callback_arg: will be passed to your callback function.
  * @return: returns the TCP listener commpoint. You can find the
@@ -468,8 +495,10 @@ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base,
  * Inits timeout to NULL. All handlers are on the free list.
  */
 struct comm_point* comm_point_create_tcp(struct comm_base* base,
-       int fd, int num, int idle_timeout, struct tcl_list* tcp_conn_limit,
+       int fd, int num, int idle_timeout, int harden_large_queries,
+       struct tcl_list* tcp_conn_limit,
        size_t bufsize, struct sldns_buffer* spoolbuf,
+       enum listen_type port_type,
        comm_point_callback_type* callback, void* callback_arg);
 
 /**
@@ -723,6 +752,110 @@ void comm_point_tcp_handle_callback(int fd, short event, void* arg);
  */
 void comm_point_http_handle_callback(int fd, short event, void* arg);
 
+/**
+ * HTTP2 session.  HTTP2 related info per comm point.
+ */
+struct http2_session {
+       /** first item in list of streams */
+       struct http2_stream* first_stream;
+#ifdef HAVE_NGHTTP2
+       /** nghttp2 session */
+       nghttp2_session *session;
+       /** store nghttp2 callbacks for easy reuse */
+       nghttp2_session_callbacks* callbacks;
+#endif
+       /** comm point containing buffer used to build answer in worker or
+        * module */
+       struct comm_point* c;
+       /** session is instructed to get dropped (comm port will be closed) */
+       int is_drop;
+       /** postpone dropping the session, can be used to prevent dropping
+        * while being in a callback */
+       int postpone_drop;
+};
+
+/** enum of HTTP status */
+enum http_status {
+       HTTP_STATUS_OK = 200,
+       HTTP_STATUS_BAD_REQUEST = 400,
+       HTTP_STATUS_NOT_FOUND = 404,
+       HTTP_STATUS_PAYLOAD_TOO_LARGE = 413,
+       HTTP_STATUS_URI_TOO_LONG = 414,
+       HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE = 415,
+       HTTP_STATUS_NOT_IMPLEMENTED = 501
+};
+
+/**
+ * HTTP stream. Part of list of HTTP2 streams per session.
+ */
+struct http2_stream {
+       /** next stream in list per session */
+       struct http2_stream* next;
+       /** previous stream in list per session */
+       struct http2_stream* prev;
+       /** HTTP2 stream ID is an unsigned 31-bit integer */
+       int32_t stream_id;
+       /** HTTP method used for this stream */
+       enum {
+               HTTP_METHOD_POST = 1,
+               HTTP_METHOD_GET,
+               HTTP_METHOD_UNSUPPORTED
+       } http_method;
+       /** message contains invalid content type */
+       int invalid_content_type;
+       /** message body content type */
+       size_t content_length;
+       /** HTTP response status */
+       enum http_status status;
+       /** request for non existing endpoint */
+       int invalid_endpoint;
+       /** query in request is too large */
+       int query_too_large;
+       /** buffer to store query into. Can't use session shared buffer as query
+        * can arrive in parts, intertwined with frames for other queries. */
+       struct sldns_buffer* qbuffer;
+       /** buffer to store response into. Can't use shared buffer as a next
+        * query read callback can overwrite it before it is send out. */
+       struct sldns_buffer* rbuffer;
+       /** mesh area containing mesh state */
+       struct mesh_area* mesh;
+       /** mesh state for query. Used to remove mesh reply before closing
+        * stream. */
+       struct mesh_state* mesh_state;
+};
+
+#ifdef HAVE_NGHTTP2
+/** nghttp2 receive cb. Read from SSL connection into nghttp2 buffer */
+ssize_t http2_recv_cb(nghttp2_session* session, uint8_t* buf,
+       size_t len, int flags, void* cb_arg);
+/** nghttp2 send callback. Send from nghttp2 buffer to ssl socket */
+ssize_t http2_send_cb(nghttp2_session* session, const uint8_t* buf,
+       size_t len, int flags, void* cb_arg);
+/** nghttp2 callback on closing stream */
+int http2_stream_close_cb(nghttp2_session* session, int32_t stream_id,
+       uint32_t error_code, void* cb_arg);
+#endif
+
+/**
+ * Create new http2 stream
+ * @param stream_id: ID for stream to create.
+ * @return malloc'ed stream, NULL on error
+ */
+struct http2_stream* http2_stream_create(int32_t stream_id);
+
+/**
+ * Add new stream to session linked list
+ * @param h2_session: http2 session to add stream to
+ * @param h2_stream: stream to add to session list
+ */
+void http2_session_add_stream(struct http2_session* h2_session,
+       struct http2_stream* h2_stream);
+
+/** Add mesh state to stream. To be able to remove mesh reply on stream closure
+ */
+void http2_stream_add_meshstate(struct http2_stream* h2_stream,
+       struct mesh_area* mesh, struct mesh_state* m);
+
 /**
  * This routine is published for checks and tests, and is only used internally.
  * handle libevent callback for timer comm.