]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
merging...
authorYuri Schaeffer <yuri@nlnetlabs.nl>
Thu, 11 Jul 2013 14:14:44 +0000 (14:14 +0000)
committerYuri Schaeffer <yuri@nlnetlabs.nl>
Thu, 11 Jul 2013 14:14:44 +0000 (14:14 +0000)
git-svn-id: file:///svn/unbound/branches/edns-subnet@2921 be551aaa-1e26-0410-a405-d3ace91eadb9

46 files changed:
acx_nlnetlabs.m4
acx_pthread.m4 [deleted file]
compat/snprintf.c
config.h.in
configure
daemon/remote.c
daemon/unbound.c
daemon/worker.c
doc/FEATURES
doc/example.conf.in
doc/libunbound.3.in
doc/unbound-control.8.in
doc/unbound.conf.5.in
iterator/iter_fwd.c
iterator/iter_fwd.h
iterator/iter_priv.c
iterator/iter_priv.h
iterator/iter_scrub.c
iterator/iterator.c
libunbound/context.c
libunbound/context.h
libunbound/libunbound.c
libunbound/unbound.h
makedist.sh
services/listen_dnsport.c
services/outside_network.c
smallapp/unbound-anchor.c
smallapp/unbound-control.c
testcode/petal.c
testdata/iter_fwdfirstequal.rpl [new file with mode: 0644]
testdata/iter_privaddr.rpl
testdata/iter_stublastresort.rpl [new file with mode: 0644]
util/config_file.c
util/config_file.h
util/configlexer.c
util/configlexer.lex
util/configparser.c
util/configparser.h
util/configparser.y
util/data/msgencode.c
util/netevent.c
util/storage/lookup3.c
validator/val_neg.c
validator/val_sigcrypt.c
validator/val_utils.c
winrc/setup.nsi

index e90c81ea02abd6e14a5d2faee30b3a7dbce3c9f3..719112645aa0685a0d1273818bc72aaad5557a7c 100644 (file)
@@ -2,7 +2,10 @@
 # Copyright 2009, Wouter Wijngaards, NLnet Labs.   
 # BSD licensed.
 #
-# Version 21
+# Version 24
+# 2013-06-25 FLTO has --disable-flto option.
+# 2013-05-03 Update W32_SLEEP for newer mingw that links but not defines it.
+# 2013-03-22 Fix ACX_RSRC_VERSION for long version numbers.
 # 2012-02-09 Fix AHX_MEMCMP_BROKEN with undef in compat/memcmp.h.
 # 2012-01-20 Fix COMPILER_FLAGS_UNBOUND for gcc 4.6.2 assigned-not-used-warns.
 # 2011-12-05 Fix getaddrinfowithincludes on windows with fedora16 mingw32-gcc.
@@ -101,7 +104,7 @@ dnl Calculate comma separated windows-resource numbers from package version.
 dnl Picks the first three(,0) or four numbers out of the name.
 dnl $1: variable for the result
 AC_DEFUN([ACX_RSRC_VERSION], 
-[$1=[`echo $PACKAGE_VERSION | sed -e 's/^[^0-9]*\([0-9]\)[^0-9]*\([0-9]\)[^0-9]*\([0-9]\)[^0-9]*\([0-9]\).*$/\1,\2,\3,\4/' -e 's/^[^0-9]*\([0-9]\)[^0-9]*\([0-9]\)[^0-9]*\([0-9]\)[^0-9]*$/\1,\2,\3,0/' `]
+[$1=[`echo $PACKAGE_VERSION | sed -e 's/^[^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\).*$/\1,\2,\3,\4/' -e 's/^[^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9]*$/\1,\2,\3,0/' `]
 ])
 
 dnl Routine to help check for compiler flags.
@@ -405,19 +408,22 @@ int test() {
 dnl Check if CC supports -flto.
 dnl in a way that supports clang and suncc (that flag does something else,
 dnl but fails to link).  It sets it in CFLAGS if it works.
-AC_DEFUN([ACX_CHECK_FLTO],
-[AC_MSG_CHECKING([if $CC supports -flto])
-BAKCFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -flto"
-AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [
-    if $CC $CFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then
-       CFLAGS="$BAKCFLAGS"
-       AC_MSG_RESULT(no)
-    else
-       AC_MSG_RESULT(yes)
-    fi
-    rm -f conftest conftest.c conftest.o
-], [CFLAGS="$BAKCFLAGS" ; AC_MSG_RESULT(no)])
+AC_DEFUN([ACX_CHECK_FLTO], [
+    AC_ARG_ENABLE([flto], AS_HELP_STRING([--disable-flto], [Disable link-time optimization]))
+    AS_IF([test "x$enable_flto" != "xno"], [
+        AC_MSG_CHECKING([if $CC supports -flto])
+        BAKCFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS -flto"
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [
+            if $CC $CFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then
+                CFLAGS="$BAKCFLAGS"
+                AC_MSG_RESULT(no)
+            else
+                AC_MSG_RESULT(yes)
+            fi
+            rm -f conftest conftest.c conftest.o
+        ], [CFLAGS="$BAKCFLAGS" ; AC_MSG_RESULT(no)])
+    ])
 ])
 
 dnl Check the printf-format attribute (if any)
@@ -1208,7 +1214,7 @@ struct tm *gmtime_r(const time_t *timep, struct tm *result);
 dnl provide w32 compat definition for sleep
 AC_DEFUN([AHX_CONFIG_W32_SLEEP],
 [
-#ifndef HAVE_SLEEP
+#if !defined(HAVE_SLEEP) || defined(HAVE_WINDOWS_H)
 #define sleep(x) Sleep((x)*1000) /* on win32 */
 #endif /* HAVE_SLEEP */
 ])
diff --git a/acx_pthread.m4 b/acx_pthread.m4
deleted file mode 100644 (file)
index 7ac8ffd..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-##### http://autoconf-archive.cryp.to/acx_pthread.html
-#
-# SYNOPSIS
-#
-#   ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
-#
-# DESCRIPTION
-#
-#   This macro figures out how to build C programs using POSIX threads.
-#   It sets the PTHREAD_LIBS output variable to the threads library and
-#   linker flags, and the PTHREAD_CFLAGS output variable to any special
-#   C compiler flags that are needed. (The user can also force certain
-#   compiler flags/libs to be tested by setting these environment
-#   variables.)
-#
-#   Also sets PTHREAD_CC to any special C compiler that is needed for
-#   multi-threaded programs (defaults to the value of CC otherwise).
-#   (This is necessary on AIX to use the special cc_r compiler alias.)
-#
-#   NOTE: You are assumed to not only compile your program with these
-#   flags, but also link it with them as well. e.g. you should link
-#   with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
-#   $LIBS
-#
-#   If you are only building threads programs, you may wish to use
-#   these variables in your default LIBS, CFLAGS, and CC:
-#
-#          LIBS="$PTHREAD_LIBS $LIBS"
-#          CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-#          CC="$PTHREAD_CC"
-#
-#   In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
-#   constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
-#   that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
-#
-#   ACTION-IF-FOUND is a list of shell commands to run if a threads
-#   library is found, and ACTION-IF-NOT-FOUND is a list of commands to
-#   run it if it is not found. If ACTION-IF-FOUND is not specified, the
-#   default action will define HAVE_PTHREAD.
-#
-#   Please let the authors know if this macro fails on any platform, or
-#   if you have any other suggestions or comments. This macro was based
-#   on work by SGJ on autoconf scripts for FFTW (http://www.fftw.org/)
-#   (with help from M. Frigo), as well as ac_pthread and hb_pthread
-#   macros posted by Alejandro Forero Cuervo to the autoconf macro
-#   repository. We are also grateful for the helpful feedback of
-#   numerous users.
-#
-# LAST MODIFICATION
-#
-#   2006-05-29
-#
-# COPYLEFT
-#
-#   Copyright (c) 2006 Steven G. Johnson <stevenj@alum.mit.edu>
-#
-#   This program is free software; you can redistribute it and/or
-#   modify it under the terms of the GNU General Public License as
-#   published by the Free Software Foundation; either version 2 of the
-#   License, or (at your option) any later version.
-#
-#   This program is distributed in the hope that it will be useful, but
-#   WITHOUT ANY WARRANTY; without even the implied warranty of
-#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-#   General Public License for more details.
-#
-#   You should have received a copy of the GNU General Public License
-#   along with this program; if not, write to the Free Software
-#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-#   02111-1307, USA.
-#
-#   As a special exception, the respective Autoconf Macro's copyright
-#   owner gives unlimited permission to copy, distribute and modify the
-#   configure scripts that are the output of Autoconf when processing
-#   the Macro. You need not follow the terms of the GNU General Public
-#   License when using or distributing such scripts, even though
-#   portions of the text of the Macro appear in them. The GNU General
-#   Public License (GPL) does govern all other use of the material that
-#   constitutes the Autoconf Macro.
-#
-#   This special exception to the GPL applies to versions of the
-#   Autoconf Macro released by the Autoconf Macro Archive. When you
-#   make and distribute a modified version of the Autoconf Macro, you
-#   may extend this special exception to the GPL to apply to your
-#   modified version as well.
-
-AC_DEFUN([ACX_PTHREAD], [
-AC_REQUIRE([AC_CANONICAL_HOST])
-AC_LANG_SAVE
-AC_LANG_C
-acx_pthread_ok=no
-
-# We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on True64 or Sequent).
-# It gets checked for in the link test anyway.
-
-# First of all, check if the user has set any of the PTHREAD_LIBS,
-# etcetera environment variables, and if threads linking works using
-# them:
-if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
-        save_CFLAGS="$CFLAGS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-        save_LIBS="$LIBS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
-        AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
-        AC_MSG_RESULT($acx_pthread_ok)
-        if test x"$acx_pthread_ok" = xno; then
-                PTHREAD_LIBS=""
-                PTHREAD_CFLAGS=""
-        fi
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
-fi
-
-# We must check for the threads library under a number of different
-# names; the ordering is very important because some systems
-# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
-# libraries is broken (non-POSIX).
-
-# Create a list of thread flags to try.  Items starting with a "-" are
-# C compiler flags, and other items are library names, except for "none"
-# which indicates that we try without any flags at all, and "pthread-config"
-# which is a program returning the flags for the Pth emulation library.
-
-acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
-
-# The ordering *is* (sometimes) important.  Some notes on the
-# individual items follow:
-
-# pthreads: AIX (must check this before -lpthread)
-# none: in case threads are in libc; should be tried before -Kthread and
-#       other compiler flags to prevent continual compiler warnings
-# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
-# -pthreads: Solaris/gcc
-# -mthreads: Mingw32/gcc, Lynx/gcc
-# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-#      doesn't hurt to check since this sometimes defines pthreads too;
-#      also defines -D_REENTRANT)
-#      ... -mt is also the pthreads flag for HP/aCC
-# pthread: Linux, etcetera
-# --thread-safe: KAI C++
-# pthread-config: use pthread-config program (for GNU Pth library)
-
-case "${host_cpu}-${host_os}" in
-        *solaris*)
-
-        # On Solaris (at least, for some versions), libc contains stubbed
-        # (non-functional) versions of the pthreads routines, so link-based
-        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
-        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
-        # a function called by this macro, so we could check for that, but
-        # who knows whether they'll stub that too in a future libc.)  So,
-        # we'll just look for -pthreads and -lpthread first:
-
-        acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
-        ;;
-esac
-
-if test x"$acx_pthread_ok" = xno; then
-for flag in $acx_pthread_flags; do
-
-        case $flag in
-                none)
-                AC_MSG_CHECKING([whether pthreads work without any flags])
-                ;;
-
-                -*)
-                AC_MSG_CHECKING([whether pthreads work with $flag])
-                PTHREAD_CFLAGS="$flag"
-                ;;
-
-               pthread-config)
-               AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
-               if test x"$acx_pthread_config" = xno; then continue; fi
-               PTHREAD_CFLAGS="`pthread-config --cflags`"
-               PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
-               ;;
-
-                *)
-                AC_MSG_CHECKING([for the pthreads library -l$flag])
-                PTHREAD_LIBS="-l$flag"
-                ;;
-        esac
-
-        save_LIBS="$LIBS"
-        save_CFLAGS="$CFLAGS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
-        # Check for various functions.  We must include pthread.h,
-        # since some functions may be macros.  (On the Sequent, we
-        # need a special flag -Kthread to make this header compile.)
-        # We check for pthread_join because it is in -lpthread on IRIX
-        # while pthread_create is in libc.  We check for pthread_attr_init
-        # due to DEC craziness with -lpthreads.  We check for
-        # pthread_cleanup_push because it is one of the few pthread
-        # functions on Solaris that doesn't have a non-functional libc stub.
-        # We try pthread_create on general principles.
-        AC_TRY_LINK([#include <pthread.h>],
-                    [pthread_t th; pthread_join(th, 0);
-                     pthread_attr_init(0); pthread_cleanup_push(0, 0);
-                     pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
-                    [acx_pthread_ok=yes])
-
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
-
-        AC_MSG_RESULT($acx_pthread_ok)
-        if test "x$acx_pthread_ok" = xyes; then
-                break;
-        fi
-
-        PTHREAD_LIBS=""
-        PTHREAD_CFLAGS=""
-done
-fi
-
-# Various other checks:
-if test "x$acx_pthread_ok" = xyes; then
-        save_LIBS="$LIBS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        save_CFLAGS="$CFLAGS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
-        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
-       AC_MSG_CHECKING([for joinable pthread attribute])
-       attr_name=unknown
-       for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
-           AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
-                        [attr_name=$attr; break])
-       done
-        AC_MSG_RESULT($attr_name)
-        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
-            AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
-                               [Define to necessary symbol if this constant
-                                uses a non-standard name on your system.])
-        fi
-
-        AC_MSG_CHECKING([if more special flags are required for pthreads])
-        flag=no
-        case "${host_cpu}-${host_os}" in
-            *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
-            *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
-        esac
-        AC_MSG_RESULT(${flag})
-        if test "x$flag" != xno; then
-            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
-        fi
-
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
-
-        # More AIX lossage: must compile with xlc_r or cc_r
-       if test x"$GCC" != xyes; then
-          AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
-        else
-          PTHREAD_CC=$CC
-       fi
-else
-        PTHREAD_CC="$CC"
-fi
-
-AC_SUBST(PTHREAD_LIBS)
-AC_SUBST(PTHREAD_CFLAGS)
-AC_SUBST(PTHREAD_CC)
-
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$acx_pthread_ok" = xyes; then
-        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
-        :
-else
-        acx_pthread_ok=no
-        $2
-fi
-AC_LANG_RESTORE
-])dnl ACX_PTHREAD
index b736175199eb909776ffab4b14bf0348ba1b12a5..65959309c9cc93ca4e0dfddf2d09e9e492fdf531 100644 (file)
-#include <config.h>
-
-#ifndef HAVE_SNPRINTF
+/* snprintf - compatibility implementation of snprintf, vsnprintf
+ *
+ * Copyright (c) 2013, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
 
+#include "config.h"
+#include <stdio.h>
 #include <ctype.h>
-#include <sys/types.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <errno.h>
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
 
-/* Define this as a fall through, HAVE_STDARG_H is probably already set */
+/* for test */
+/* #define SNPRINTF_TEST 1 */
+#ifdef SNPRINTF_TEST
+#define snprintf my_snprintf
+#define vsnprintf my_vsnprintf
+#endif /* SNPRINTF_TEST */
 
-#define HAVE_VARARGS_H
+int snprintf(char* str, size_t size, const char* format, ...);
+int vsnprintf(char* str, size_t size, const char* format, va_list arg);
 
-/**************************************************************
- * Original:
- * Patrick Powell Tue Apr 11 09:48:21 PDT 1995
- * A bombproof version of doprnt (dopr) included.
- * Sigh.  This sort of thing is always nasty do deal with.  Note that
- * the version here does not include floating point...
- *
- * snprintf() is used instead of sprintf() as it does limit checks
- * for string length.  This covers a nasty loophole.
+/**
+ * Very portable snprintf implementation, limited in functionality,
+ * esp. for %[capital] %[nonportable] and so on.  Reduced float functionality,
+ * mostly in formatting and range (e+-16), for %f and %g.
  *
- * The other functions are there to prevent NULL pointers from
- * causing nast effects.
- *
- * More Recently:
- *  Brandon Long (blong@fiction.net) 9/15/96 for mutt 0.43
- *  This was ugly.  It is still ugly.  I opted out of floating point
- *  numbers, but the formatter understands just about everything
- *  from the normal C string format, at least as far as I can tell from
- *  the Solaris 2.5 printf(3S) man page.
- *
- *  Brandon Long (blong@fiction.net) 10/22/97 for mutt 0.87.1
- *    Ok, added some minimal floating point support, which means this
- *    probably requires libm on most operating systems.  Don't yet
- *    support the exponent (e,E) and sigfig (g,G).  Also, fmtint()
- *    was pretty badly broken, it just wasn't being exercised in ways
- *    which showed it, so that's been fixed.  Also, formated the code
- *    to mutt conventions, and removed dead code left over from the
- *    original.  Also, there is now a builtin-test, just compile with:
- *           gcc -DTEST_SNPRINTF -o snprintf snprintf.c -lm
- *    and run snprintf for results.
- *
- *  Wouter Wijngaards(wouter@nlnetlabs.nl) 2/09/2010 for unbound.
- *    Limited support for %g.  Does not do the exponents for the before-dot.
- *
- **************************************************************/
+ * %s, %d, %u, %i, %x, %c, %n and %% are fully supported.
+ *   This includes width, precision, flags 0- +, and *(arg for wid,prec).
+ * %f, %g, %m, %p have reduced support, support for wid,prec,flags,*, but
+ *   less floating point range, no %e formatting for %g.
+ */
+int snprintf(char* str, size_t size, const char* format, ...)
+{
+       int r;
+       va_list args;
+       va_start(args, format);
+       r = vsnprintf(str, size, format, args);
+       va_end(args);
+       return r;
+}
 
+/** add padding to string */
+static void
+print_pad(char** at, size_t* left, int* ret, char p, int num)
+{
+       while(num--) {
+               if(*left > 1) {
+                       *(*at)++ = p;
+                       (*left)--;
+               }
+               (*ret)++;
+       }
+}
 
-/* varargs declarations: */
+/** get negative symbol, 0 if none */
+static char
+get_negsign(int negative, int plus, int space)
+{
+       if(negative)
+               return '-';
+       if(plus)
+               return '+';
+       if(space)
+               return ' ';
+       return 0;
+}
 
-#if defined(HAVE_STDARG_H)
-# include <stdarg.h>
-# define HAVE_STDARGS    /* let's hope that works everywhere (mj) */
-# define VA_LOCAL_DECL   va_list ap
-# define VA_START(f)     va_start(ap, f)
-# define VA_SHIFT(v,t)  ;   /* no-op for ANSI */
-# define VA_END          va_end(ap)
-#else
-# if defined(HAVE_VARARGS_H)
-#  include <varargs.h>
-#  undef HAVE_STDARGS
-#  define VA_LOCAL_DECL   va_list ap
-#  define VA_START(f)     va_start(ap)      /* f is ignored! */
-#  define VA_SHIFT(v,t) v = va_arg(ap,t)
-#  define VA_END        va_end(ap)
-# else
-/*XX ** NO VARARGS ** XX*/
-# endif
-#endif
+#define PRINT_DEC_BUFSZ 32 /* 20 is enough for 64 bit decimals */
+/** print decimal into buffer, returns length */
+static int
+print_dec(char* buf, int max, unsigned int value)
+{
+       int i = 0;
+       if(value == 0) {
+               if(max > 0) {
+                       buf[0] = '0';
+                       i = 1;
+               }
+       } else while(value && i < max) {
+               buf[i++] = '0' + value % 10;
+               value /= 10;
+       }
+       return i;
+}
 
-int snprintf (char *str, size_t count, const char *fmt, ...);
-int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
+/** print long decimal into buffer, returns length */
+static int
+print_dec_l(char* buf, int max, unsigned long value)
+{
+       int i = 0;
+       if(value == 0) {
+               if(max > 0) {
+                       buf[0] = '0';
+                       i = 1;
+               }
+       } else while(value && i < max) {
+               buf[i++] = '0' + value % 10;
+               value /= 10;
+       }
+       return i;
+}
 
-static void dopr (char *buffer, size_t maxlen, const char *format, 
-                  va_list args);
-static void fmtstr (char *buffer, size_t *currlen, size_t maxlen,
-                   char *value, int flags, int min, int max);
-static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
-                   long value, int base, int min, int max, int flags);
-static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
-                  long double fvalue, int min, int max, int flags, int conv);
-static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c );
+/** print long decimal into buffer, returns length */
+static int
+print_dec_ll(char* buf, int max, unsigned long long value)
+{
+       int i = 0;
+       if(value == 0) {
+               if(max > 0) {
+                       buf[0] = '0';
+                       i = 1;
+               }
+       } else while(value && i < max) {
+               buf[i++] = '0' + value % 10;
+               value /= 10;
+       }
+       return i;
+}
 
-int vsnprintf (char *str, size_t count, const char *fmt, va_list args)
+/** print hex into buffer, returns length */
+static int
+print_hex(char* buf, int max, unsigned int value)
 {
-  str[0] = 0;
-  dopr(str, count, fmt, args);
-  return(strlen(str));
+       const char* h = "0123456789abcdef";
+       int i = 0;
+       if(value == 0) {
+               if(max > 0) {
+                       buf[0] = '0';
+                       i = 1;
+               }
+       } else while(value && i < max) {
+               buf[i++] = h[value & 0x0f];
+               value >>= 4;
+       }
+       return i;
 }
 
-/* VARARGS3 */
-#ifdef HAVE_STDARGS
-int snprintf (char *str,size_t count,const char *fmt,...)
+/** print long hex into buffer, returns length */
+static int
+print_hex_l(char* buf, int max, unsigned long value)
+{
+       const char* h = "0123456789abcdef";
+       int i = 0;
+       if(value == 0) {
+               if(max > 0) {
+                       buf[0] = '0';
+                       i = 1;
+               }
+       } else while(value && i < max) {
+               buf[i++] = h[value & 0x0f];
+               value >>= 4;
+       }
+       return i;
+}
+
+/** print long long hex into buffer, returns length */
+static int
+print_hex_ll(char* buf, int max, unsigned long long value)
+{
+       const char* h = "0123456789abcdef";
+       int i = 0;
+       if(value == 0) {
+               if(max > 0) {
+                       buf[0] = '0';
+                       i = 1;
+               }
+       } else while(value && i < max) {
+               buf[i++] = h[value & 0x0f];
+               value >>= 4;
+       }
+       return i;
+}
+
+/** copy string into result, reversed */
+static void
+spool_str_rev(char** at, size_t* left, int* ret, const char* buf, int len)
+{
+       int i = len;
+       while(i) {
+               if(*left > 1) {
+                       *(*at)++ = buf[--i];
+                       (*left)--;
+               } else --i;
+               (*ret)++;
+       }
+}
+
+/** copy string into result */
+static void
+spool_str(char** at, size_t* left, int* ret, const char* buf, int len)
+{
+       int i;
+       for(i=0; i<len; i++) {
+               if(*left > 1) {
+                       *(*at)++ = buf[i];
+                       (*left)--;
+               }
+               (*ret)++;
+       }
+}
+
+/** print number formatted */
+static void
+print_num(char** at, size_t* left, int* ret, int minw, int precision,
+       int prgiven, int zeropad, int minus, int plus, int space,
+       int zero, int negative, char* buf, int len)
+{
+       int w = len; /* excludes minus sign */
+       char s = get_negsign(negative, plus, space);
+       if(minus) {
+               /* left adjust the number into the field, space padding */
+               /* calc numw = [sign][zeroes][number] */
+               int numw = w;
+               if(precision == 0 && zero) numw = 0;
+               if(numw < precision) numw = precision;
+               if(s) numw++;
+
+               /* sign */
+               if(s) print_pad(at, left, ret, s, 1);
+
+               /* number */
+               if(precision == 0 && zero) {
+                       /* "" for the number */
+               } else {
+                       if(w < precision)
+                               print_pad(at, left, ret, '0', precision - w);
+                       spool_str_rev(at, left, ret, buf, len);
+               }
+               /* spaces */
+               if(numw < minw)
+                       print_pad(at, left, ret, ' ', minw - numw);
+       } else {
+               /* pad on the left of the number */
+               /* calculate numw has width of [sign][zeroes][number] */
+               int numw = w;
+               if(precision == 0 && zero) numw = 0;
+               if(numw < precision) numw = precision;
+               if(!prgiven && zeropad && numw < minw) numw = minw;
+               else if(s) numw++;
+
+               /* pad with spaces */
+               if(numw < minw)
+                       print_pad(at, left, ret, ' ', minw - numw);
+               /* print sign (and one less zeropad if so) */
+               if(s) {
+                       print_pad(at, left, ret, s, 1);
+                       numw--;
+               }
+               /* pad with zeroes */
+               if(w < numw)
+                       print_pad(at, left, ret, '0', numw - w);
+               if(precision == 0 && zero)
+                       return;
+               /* print the characters for the value */
+               spool_str_rev(at, left, ret, buf, len);
+       }
+}
+
+/** print %d and %i */
+static void
+print_num_d(char** at, size_t* left, int* ret, int value,
+       int minw, int precision, int prgiven, int zeropad, int minus,
+       int plus, int space)
+{
+       char buf[PRINT_DEC_BUFSZ];
+       int negative = (value < 0);
+       int zero = (value == 0);
+       int len = print_dec(buf, (int)sizeof(buf),
+               (unsigned int)(negative?-value:value));
+       print_num(at, left, ret, minw, precision, prgiven, zeropad, minus,
+               plus, space, zero, negative, buf, len);
+}
+
+/** print %ld and %li */
+static void
+print_num_ld(char** at, size_t* left, int* ret, long value,
+       int minw, int precision, int prgiven, int zeropad, int minus,
+       int plus, int space)
+{
+       char buf[PRINT_DEC_BUFSZ];
+       int negative = (value < 0);
+       int zero = (value == 0);
+       int len = print_dec_l(buf, (int)sizeof(buf),
+               (unsigned long)(negative?-value:value));
+       print_num(at, left, ret, minw, precision, prgiven, zeropad, minus,
+               plus, space, zero, negative, buf, len);
+}
+
+/** print %lld and %lli */
+static void
+print_num_lld(char** at, size_t* left, int* ret, long long value,
+       int minw, int precision, int prgiven, int zeropad, int minus,
+       int plus, int space)
+{
+       char buf[PRINT_DEC_BUFSZ];
+       int negative = (value < 0);
+       int zero = (value == 0);
+       int len = print_dec_ll(buf, (int)sizeof(buf),
+               (unsigned long long)(negative?-value:value));
+       print_num(at, left, ret, minw, precision, prgiven, zeropad, minus,
+               plus, space, zero, negative, buf, len);
+}
+
+/** print %u */
+static void
+print_num_u(char** at, size_t* left, int* ret, unsigned int value,
+       int minw, int precision, int prgiven, int zeropad, int minus,
+       int plus, int space)
+{
+       char buf[PRINT_DEC_BUFSZ];
+       int negative = 0;
+       int zero = (value == 0);
+       int len = print_dec(buf, (int)sizeof(buf), value);
+       print_num(at, left, ret, minw, precision, prgiven, zeropad, minus,
+               plus, space, zero, negative, buf, len);
+}
+
+/** print %lu */
+static void
+print_num_lu(char** at, size_t* left, int* ret, unsigned long value,
+       int minw, int precision, int prgiven, int zeropad, int minus,
+       int plus, int space)
+{
+       char buf[PRINT_DEC_BUFSZ];
+       int negative = 0;
+       int zero = (value == 0);
+       int len = print_dec_l(buf, (int)sizeof(buf), value);
+       print_num(at, left, ret, minw, precision, prgiven, zeropad, minus,
+               plus, space, zero, negative, buf, len);
+}
+
+/** print %llu */
+static void
+print_num_llu(char** at, size_t* left, int* ret, unsigned long long value,
+       int minw, int precision, int prgiven, int zeropad, int minus,
+       int plus, int space)
+{
+       char buf[PRINT_DEC_BUFSZ];
+       int negative = 0;
+       int zero = (value == 0);
+       int len = print_dec_ll(buf, (int)sizeof(buf), value);
+       print_num(at, left, ret, minw, precision, prgiven, zeropad, minus,
+               plus, space, zero, negative, buf, len);
+}
+
+/** print %x */
+static void
+print_num_x(char** at, size_t* left, int* ret, unsigned int value,
+       int minw, int precision, int prgiven, int zeropad, int minus,
+       int plus, int space)
+{
+       char buf[PRINT_DEC_BUFSZ];
+       int negative = 0;
+       int zero = (value == 0);
+       int len = print_hex(buf, (int)sizeof(buf), value);
+       print_num(at, left, ret, minw, precision, prgiven, zeropad, minus,
+               plus, space, zero, negative, buf, len);
+}
+
+/** print %lx */
+static void
+print_num_lx(char** at, size_t* left, int* ret, unsigned long value,
+       int minw, int precision, int prgiven, int zeropad, int minus,
+       int plus, int space)
+{
+       char buf[PRINT_DEC_BUFSZ];
+       int negative = 0;
+       int zero = (value == 0);
+       int len = print_hex_l(buf, (int)sizeof(buf), value);
+       print_num(at, left, ret, minw, precision, prgiven, zeropad, minus,
+               plus, space, zero, negative, buf, len);
+}
+
+/** print %llx */
+static void
+print_num_llx(char** at, size_t* left, int* ret, unsigned long long value,
+       int minw, int precision, int prgiven, int zeropad, int minus,
+       int plus, int space)
+{
+       char buf[PRINT_DEC_BUFSZ];
+       int negative = 0;
+       int zero = (value == 0);
+       int len = print_hex_ll(buf, (int)sizeof(buf), value);
+       print_num(at, left, ret, minw, precision, prgiven, zeropad, minus,
+               plus, space, zero, negative, buf, len);
+}
+
+/** print %llp */
+static void
+print_num_llp(char** at, size_t* left, int* ret, void* value,
+       int minw, int precision, int prgiven, int zeropad, int minus,
+       int plus, int space)
+{
+       char buf[PRINT_DEC_BUFSZ];
+       int negative = 0;
+       int zero = (value == 0);
+#if defined(UINTPTR_MAX) && defined(UINT32_MAX) && (UINTPTR_MAX == UINT32_MAX)
+       /* avoid warning about upcast on 32bit systems */
+       unsigned long long llvalue = (unsigned long)value;
 #else
-int snprintf (va_alist) va_dcl
+       unsigned long long llvalue = (unsigned long long)value;
 #endif
+       int len = print_hex_ll(buf, (int)sizeof(buf), llvalue);
+       if(zero) {
+               buf[0]=')';
+               buf[1]='l';
+               buf[2]='i';
+               buf[3]='n';
+               buf[4]='(';
+               len = 5;
+       } else {
+               /* put '0x' in front of the (reversed) buffer result */
+               if(len < PRINT_DEC_BUFSZ)
+                       buf[len++] = 'x';
+               if(len < PRINT_DEC_BUFSZ)
+                       buf[len++] = '0';
+       }
+       print_num(at, left, ret, minw, precision, prgiven, zeropad, minus,
+               plus, space, zero, negative, buf, len);
+}
+
+#define PRINT_FLOAT_BUFSZ 64 /* xx.yy with 20.20 about the max */
+/** spool remainder after the decimal point to buffer, in reverse */
+static int
+print_remainder(char* buf, int max, double r, int prec)
 {
-#ifndef HAVE_STDARGS
-  char *str;
-  size_t count;
-  char *fmt;
-#endif
-  VA_LOCAL_DECL;
-    
-  VA_START (fmt);
-  VA_SHIFT (str, char *);
-  VA_SHIFT (count, size_t );
-  VA_SHIFT (fmt, char *);
-  (void) vsnprintf(str, count, fmt, ap);
-  VA_END;
-  return(strlen(str));
-}
-
-/*
- * dopr(): poor man's version of doprintf
- */
+       unsigned long long cap = 1;
+       unsigned long long value;
+       int len, i;
+       if(prec > 19) prec = 19; /* max we can do */
+       if(max < prec) return 0;
+       for(i=0; i<prec; i++) {
+               cap *= 10;
+       }
+       r *= (double)cap;
+       value = (unsigned long long)r;
+       /* see if we need to round up */
+       if(((unsigned long long)((r - (double)value)*10.0)) >= 5) {
+               value++;
+               /* that might carry to numbers before the comma, if so,
+                * just ignore that rounding. failure because 64bitprintout */
+               if(value >= cap)
+                       value = cap-1;
+       }
+       len = print_dec_ll(buf, max, value);
+       while(len < prec) { /* pad with zeroes, e.g. if 0.0012 */
+               buf[len++] = '0';
+       }
+       if(len < max)
+               buf[len++] = '.';
+       return len;
+}
 
-/* format read states */
-#define DP_S_DEFAULT 0
-#define DP_S_FLAGS   1
-#define DP_S_MIN     2
-#define DP_S_DOT     3
-#define DP_S_MAX     4
-#define DP_S_MOD     5
-#define DP_S_CONV    6
-#define DP_S_DONE    7
-
-/* format flags - Bits */
-#define DP_F_MINUS 1
-#define DP_F_PLUS  2
-#define DP_F_SPACE 4
-#define DP_F_NUM   8
-#define DP_F_ZERO  16
-#define DP_F_UP    32
-
-/* Conversion Flags */
-#define DP_C_SHORT   1
-#define DP_C_LONG    2
-#define DP_C_LDOUBLE 3
-
-#define char_to_int(p) (p - '0')
-#ifndef MAX
-#define MAX(p,q) ((p >= q) ? p : q)
-#endif
+/** spool floating point to buffer */
+static int
+print_float(char* buf, int max, double value, int prec)
+{
+       /* as xxx.xxx  if prec==0, no '.', with prec decimals after . */
+       /* no conversion for NAN and INF, because we do not want to require
+          linking with -lm. */
+       /* Thus, the conversions use 64bit integers to convert the numbers,
+        * which makes 19 digits before and after the decimal point the max */
+       unsigned long long whole = (unsigned long long)value;
+       double remain = value - (double)whole;
+       int len = 0;
+       if(prec != 0)
+               len = print_remainder(buf, max, remain, prec);
+       len += print_dec_ll(buf+len, max-len, whole);
+       return len;
+}
 
-static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
-{
-  char ch;
-  long value;
-  long double fvalue;
-  char *strvalue;
-  int min;
-  int max;
-  int state;
-  int flags;
-  int cflags;
-  size_t currlen;
-  
-  state = DP_S_DEFAULT;
-  currlen = flags = cflags = min = 0;
-  max = -1;
-  ch = *format++;
-
-  while (state != DP_S_DONE)
-  {
-    if ((ch == '\0') || (currlen >= maxlen)) 
-      state = DP_S_DONE;
-
-    switch(state) 
-    {
-    case DP_S_DEFAULT:
-      if (ch == '%') 
-       state = DP_S_FLAGS;
-      else 
-       dopr_outch (buffer, &currlen, maxlen, ch);
-      ch = *format++;
-      break;
-    case DP_S_FLAGS:
-      switch (ch) 
-      {
-      case '-':
-       flags |= DP_F_MINUS;
-        ch = *format++;
-       break;
-      case '+':
-       flags |= DP_F_PLUS;
-        ch = *format++;
-       break;
-      case ' ':
-       flags |= DP_F_SPACE;
-        ch = *format++;
-       break;
-      case '#':
-       flags |= DP_F_NUM;
-        ch = *format++;
-       break;
-      case '0':
-       flags |= DP_F_ZERO;
-        ch = *format++;
-       break;
-      default:
-       state = DP_S_MIN;
-       break;
-      }
-      break;
-    case DP_S_MIN:
-      if (isdigit(ch)) 
-      {
-       min = 10*min + char_to_int (ch);
-       ch = *format++;
-      } 
-      else if (ch == '*') 
-      {
-       min = va_arg (args, int);
-       ch = *format++;
-       state = DP_S_DOT;
-      } 
-      else 
-       state = DP_S_DOT;
-      break;
-    case DP_S_DOT:
-      if (ch == '.') 
-      {
-       state = DP_S_MAX;
-       ch = *format++;
-      } 
-      else 
-       state = DP_S_MOD;
-      break;
-    case DP_S_MAX:
-      if (isdigit(ch)) 
-      {
-       if (max < 0)
-         max = 0;
-       max = 10*max + char_to_int (ch);
-       ch = *format++;
-      } 
-      else if (ch == '*') 
-      {
-       max = va_arg (args, int);
-       ch = *format++;
-       state = DP_S_MOD;
-      } 
-      else 
-       state = DP_S_MOD;
-      break;
-    case DP_S_MOD:
-      /* Currently, we don't support Long Long, bummer */
-      switch (ch) 
-      {
-      case 'h':
-       cflags = DP_C_SHORT;
-       ch = *format++;
-       break;
-      case 'l':
-       cflags = DP_C_LONG;
-       ch = *format++;
-       break;
-      case 'L':
-       cflags = DP_C_LDOUBLE;
-       ch = *format++;
-       break;
-      default:
-       break;
-      }
-      state = DP_S_CONV;
-      break;
-    case DP_S_CONV:
-      switch (ch) 
-      {
-      case 'd':
-      case 'i':
-       if (cflags == DP_C_SHORT) 
-         value = va_arg (args, int);
-       else if (cflags == DP_C_LONG)
-         value = va_arg (args, long int);
-       else
-         value = va_arg (args, int);
-       fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
-       break;
-      case 'o':
-       flags &= ~DP_F_PLUS;
-       if (cflags == DP_C_SHORT)
-         value = va_arg (args, unsigned int);
-       else if (cflags == DP_C_LONG)
-         value = va_arg (args, unsigned long int);
-       else
-         value = va_arg (args, unsigned int);
-       fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags);
-       break;
-      case 'u':
-       flags &= ~DP_F_PLUS;
-       if (cflags == DP_C_SHORT)
-         value = va_arg (args, unsigned int);
-       else if (cflags == DP_C_LONG)
-         value = va_arg (args, unsigned long int);
-       else
-         value = va_arg (args, unsigned int);
-       fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
-       break;
-      case 'X':
-       flags |= DP_F_UP;
-      case 'x':
-       flags &= ~DP_F_PLUS;
-       if (cflags == DP_C_SHORT)
-         value = va_arg (args, unsigned int);
-       else if (cflags == DP_C_LONG)
-         value = va_arg (args, unsigned long int);
-       else
-         value = va_arg (args, unsigned int);
-       fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags);
-       break;
-      case 'f':
-       if (cflags == DP_C_LDOUBLE)
-         fvalue = va_arg (args, long double);
-       else
-         fvalue = va_arg (args, double);
-       /* um, floating point? */
-       fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags, 'f');
-       break;
-      case 'E':
-       flags |= DP_F_UP;
-      case 'e':
-       if (cflags == DP_C_LDOUBLE)
-         fvalue = va_arg (args, long double);
-       else
-         fvalue = va_arg (args, double);
-       break;
-      case 'G':
-       flags |= DP_F_UP;
-      case 'g':
-       if (cflags == DP_C_LDOUBLE)
-         fvalue = va_arg (args, long double);
-       else
-         fvalue = va_arg (args, double);
-       fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags, 'g');
-       break;
-      case 'c':
-       dopr_outch (buffer, &currlen, maxlen, va_arg (args, int));
-       break;
-      case 's':
-       strvalue = va_arg (args, char *);
-       if (max < 0) 
-         max = maxlen; /* ie, no max */
-       fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max);
-       break;
-      case 'p':
-       strvalue = va_arg (args, void *);
-       fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags);
-       break;
-      case 'n':
-       if (cflags == DP_C_SHORT) 
-       {
-         short int *num;
-         num = va_arg (args, short int *);
-         *num = currlen;
-        } 
-       else if (cflags == DP_C_LONG) 
-       {
-         long int *num;
-         num = va_arg (args, long int *);
-         *num = currlen;
-        } 
-       else 
-       {
-         int *num;
-         num = va_arg (args, int *);
-         *num = currlen;
-        }
-       break;
-      case '%':
-       dopr_outch (buffer, &currlen, maxlen, ch);
-       break;
-      case 'w':
-       /* not supported yet, treat as next char */
-       ch = *format++;
-       break;
-      default:
-       /* Unknown, skip */
-       break;
-      }
-      ch = *format++;
-      state = DP_S_DEFAULT;
-      flags = cflags = min = 0;
-      max = -1;
-      break;
-    case DP_S_DONE:
-      break;
-    default:
-      /* hmm? */
-      break; /* some picky compilers need this */
-    }
-  }
-  if (currlen < maxlen - 1) 
-    buffer[currlen] = '\0';
-  else 
-    buffer[maxlen - 1] = '\0';
-}
-
-static void fmtstr (char *buffer, size_t *currlen, size_t maxlen,
-                   char *value, int flags, int min, int max)
-{
-  int padlen, strln;     /* amount to pad */
-  int cnt = 0;
-  
-  if (value == 0)
-  {
-    value = "<NULL>";
-  }
-
-  for (strln = 0; value[strln]; ++strln); /* strlen */
-  padlen = min - strln;
-  if (padlen < 0) 
-    padlen = 0;
-  if (flags & DP_F_MINUS) 
-    padlen = -padlen; /* Left Justify */
-
-  while ((padlen > 0) && (cnt < max)) 
-  {
-    dopr_outch (buffer, currlen, maxlen, ' ');
-    --padlen;
-    ++cnt;
-  }
-  while (*value && (cnt < max)) 
-  {
-    dopr_outch (buffer, currlen, maxlen, *value++);
-    ++cnt;
-  }
-  while ((padlen < 0) && (cnt < max)) 
-  {
-    dopr_outch (buffer, currlen, maxlen, ' ');
-    ++padlen;
-    ++cnt;
-  }
-}
-
-/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */
-
-static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
-                   long value, int base, int min, int max, int flags)
-{
-  int signvalue = 0;
-  unsigned long uvalue;
-  char convert[20];
-  int place = 0;
-  int spadlen = 0; /* amount to space pad */
-  int zpadlen = 0; /* amount to zero pad */
-  int caps = 0;
-  
-  if (max < 0)
-    max = 0;
-
-  uvalue = value;
-  if( value < 0 ) {
-    signvalue = '-';
-    uvalue = -value;
-  }
-  else
-    if (flags & DP_F_PLUS)  /* Do a sign (+/i) */
-      signvalue = '+';
-    else
-      if (flags & DP_F_SPACE)
-       signvalue = ' ';
-
-  if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
-
-  do {
-    convert[place++] =
-      (caps? "0123456789ABCDEF":"0123456789abcdef")
-      [uvalue % (unsigned)base  ];
-    uvalue = (uvalue / (unsigned)base );
-  } while(uvalue && (place < 20));
-  if (place == 20) place--;
-  convert[place] = 0;
-
-  zpadlen = max - place;
-  spadlen = min - MAX (max, place) - (signvalue ? 1 : 0); 
-  if (zpadlen < 0) zpadlen = 0;
-  if (spadlen < 0) spadlen = 0;
-  if (flags & DP_F_ZERO)
-  {
-    zpadlen = MAX(zpadlen, spadlen);
-    spadlen = 0;
-  }
-  if (flags & DP_F_MINUS) 
-    spadlen = -spadlen; /* Left Justifty */
-
-#ifdef DEBUG_SNPRINTF
-  dprint (1, (debugfile, "zpad: %d, spad: %d, min: %d, max: %d, place: %d\n",
-      zpadlen, spadlen, min, max, place));
-#endif
+/** print %f */
+static void
+print_num_f(char** at, size_t* left, int* ret, double value,
+       int minw, int precision, int prgiven, int zeropad, int minus,
+       int plus, int space)
+{
+       char buf[PRINT_FLOAT_BUFSZ];
+       int negative = (value < 0);
+       int zero = 0;
+       int len;
+       if(!prgiven) precision = 6;
+       len = print_float(buf, (int)sizeof(buf), negative?-value:value,
+               precision);
+       print_num(at, left, ret, minw, 1, 0, zeropad, minus,
+               plus, space, zero, negative, buf, len);
+}
 
-  /* Spaces */
-  while (spadlen > 0) 
-  {
-    dopr_outch (buffer, currlen, maxlen, ' ');
-    --spadlen;
-  }
-
-  /* Sign */
-  if (signvalue) 
-    dopr_outch (buffer, currlen, maxlen, signvalue);
-
-  /* Zeros */
-  if (zpadlen > 0) 
-  {
-    while (zpadlen > 0)
-    {
-      dopr_outch (buffer, currlen, maxlen, '0');
-      --zpadlen;
-    }
-  }
-
-  /* Digits */
-  while (place > 0) 
-    dopr_outch (buffer, currlen, maxlen, convert[--place]);
-  
-  /* Left Justified spaces */
-  while (spadlen < 0) {
-    dopr_outch (buffer, currlen, maxlen, ' ');
-    ++spadlen;
-  }
-}
-
-static long double abs_val (long double value)
-{
-  long double result = value;
-
-  if (value < 0)
-    result = -value;
-
-  return result;
-}
-
-static long double compat_pow10 (int exp)
-{
-  long double result = 1;
-
-  while (exp)
-  {
-    result *= 10;
-    exp--;
-  }
-  
-  return result;
-}
-
-static long compat_round (long double value)
-{
-  long intpart;
-
-  intpart = value;
-  value = value - intpart;
-  if (value >= 0.5)
-    intpart++;
-
-  return intpart;
-}
-
-static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
-                  long double fvalue, int min, int max, int flags, int conv)
-{
-  int signvalue = 0;
-  long double ufvalue;
-  char iconvert[20];
-  char fconvert[20];
-  int iplace = 0;
-  int fplace = 0;
-  int padlen = 0; /* amount to pad */
-  int zpadlen = 0; 
-  int caps = 0;
-  long intpart;
-  long fracpart;
-  
-  /* 
-   * AIX manpage says the default is 0, but Solaris says the default
-   * is 6, and sprintf on AIX defaults to 6
-   */
-  if (max < 0)
-    max = 6;
-
-  ufvalue = abs_val (fvalue);
-
-  if (fvalue < 0)
-    signvalue = '-';
-  else
-    if (flags & DP_F_PLUS)  /* Do a sign (+/i) */
-      signvalue = '+';
-    else
-      if (flags & DP_F_SPACE)
-       signvalue = ' ';
-
-#if 0
-  if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
-#endif
+/* rudimentary %g support */
+static int
+print_float_g(char* buf, int max, double value, int prec)
+{
+       unsigned long long whole = (unsigned long long)value;
+       double remain = value - (double)whole;
+       int before = 0;
+       int len = 0;
+
+       /* number of digits before the decimal point */
+       while(whole > 0) {
+               before++;
+               whole /= 10;
+       }
+       whole = (unsigned long long)value;
+
+       if(prec > before && remain != 0.0) {
+               /* see if the last decimals are zero, if so, skip them */
+               len = print_remainder(buf, max, remain, prec-before);
+               while(len > 0 && buf[0]=='0') {
+                       memmove(buf, buf+1, --len);
+               }
+       }
+       len += print_dec_ll(buf+len, max-len, whole);
+       return len;
+}
 
-  intpart = ufvalue;
 
-  /* 
-   * Sorry, we only support 9 digits past the decimal because of our 
-   * conversion method
-   */
-  if (max > 9)
-    max = 9;
+/** print %g */
+static void
+print_num_g(char** at, size_t* left, int* ret, double value,
+       int minw, int precision, int prgiven, int zeropad, int minus,
+       int plus, int space)
+{
+       char buf[PRINT_FLOAT_BUFSZ];
+       int negative = (value < 0);
+       int zero = 0;
+       int len;
+       if(!prgiven) precision = 6;
+       if(precision == 0) precision = 1;
+       len = print_float_g(buf, (int)sizeof(buf), negative?-value:value,
+               precision);
+       print_num(at, left, ret, minw, 1, 0, zeropad, minus,
+               plus, space, zero, negative, buf, len);
+}
 
-  /* We "cheat" by converting the fractional part to integer by
-   * multiplying by a factor of 10
-   */
-  fracpart = compat_round ((compat_pow10 (max)) * (ufvalue - intpart));
 
-  if (fracpart >= compat_pow10 (max))
-  {
-    intpart++;
-    fracpart -= compat_pow10 (max);
-  }
+/** strnlen (compat implementation) */
+static int
+my_strnlen(const char* s, int max)
+{
+       int i;
+       for(i=0; i<max; i++)
+               if(s[i]==0)
+                       return i;
+       return max;
+}
 
-#ifdef DEBUG_SNPRINTF
-  dprint (1, (debugfile, "fmtfp: %f =? %d.%d\n", fvalue, intpart, fracpart));
-#endif
+/** print %s */
+static void
+print_str(char** at, size_t* left, int* ret, char* s,
+       int minw, int precision, int prgiven, int minus)
+{
+       int w;
+       /* with prec: no more than x characters from this string, stop at 0 */
+       if(prgiven)
+               w = my_strnlen(s, precision);
+       else    w = (int)strlen(s); /* up to the nul */
+       if(w < minw && !minus)
+               print_pad(at, left, ret, ' ', minw - w);
+       spool_str(at, left, ret, s, w);
+       if(w < minw && minus)
+               print_pad(at, left, ret, ' ', minw - w);
+}
 
-  /* Convert integer part */
-  do {
-    iconvert[iplace++] =
-      (caps? "0123456789ABCDEF":"0123456789abcdef")[intpart % 10];
-    intpart = (intpart / 10);
-  } while(intpart && (iplace < 20));
-  if (iplace == 20) iplace--;
-  iconvert[iplace] = 0;
-
-  /* Convert fractional part */
-  do {
-    fconvert[fplace++] =
-      (caps? "0123456789ABCDEF":"0123456789abcdef")[fracpart % 10];
-    fracpart = (fracpart / 10);
-    if(conv == 'g' && fplace == 1 && fconvert[0] == '0') {
-      fplace = 0; /* skip trailing zeroes for %g */
-      zpadlen ++;
-    }
-  } while(fracpart && (fplace < 20));
-  if (fplace == 20) fplace--;
-  fconvert[fplace] = 0;
-
-  if(conv == 'f') {
-    /* -1 for decimal point, another -1 if we are printing a sign */
-    padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0); 
-    zpadlen = max - fplace;
-  } else if(conv == 'g') {
-    /* zpadlen contains number of trailing zeroes removed */
-    padlen = min - iplace - (max-zpadlen) - 1 - ((signvalue) ? 1 : 0); 
-    if(fplace == 0) {
-      padlen += 1; /* add the decimal dot suppressed */
-      zpadlen = 0;
-    } else zpadlen = (max-zpadlen) - fplace;
-  }
-  if (zpadlen < 0)
-    zpadlen = 0;
-  if (padlen < 0) 
-    padlen = 0;
-  if (flags & DP_F_MINUS) 
-    padlen = -padlen; /* Left Justifty */
-
-  if ((flags & DP_F_ZERO) && (padlen > 0)) 
-  {
-    if (signvalue) 
-    {
-      dopr_outch (buffer, currlen, maxlen, signvalue);
-      --padlen;
-      signvalue = 0;
-    }
-    while (padlen > 0)
-    {
-      dopr_outch (buffer, currlen, maxlen, '0');
-      --padlen;
-    }
-  }
-  while (padlen > 0)
-  {
-    dopr_outch (buffer, currlen, maxlen, ' ');
-    --padlen;
-  }
-  if (signvalue) 
-    dopr_outch (buffer, currlen, maxlen, signvalue);
-
-  while (iplace > 0) 
-    dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]);
-
-  /* for %g do not output decimal point if no fraction is present */
-  if(conv == 'f' || (conv == 'g' && fplace > 0)) {
-    /*
-     * Decimal point.  This should probably use locale to find the correct
-     * char to print out.
-     */
-    dopr_outch (buffer, currlen, maxlen, '.');
-  }
-
-  while (zpadlen > 0)
-  {
-    dopr_outch (buffer, currlen, maxlen, '0');
-    --zpadlen;
-  }
-
-  while (fplace > 0) 
-    dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]);
-
-  while (padlen < 0) 
-  {
-    dopr_outch (buffer, currlen, maxlen, ' ');
-    ++padlen;
-  }
-}
-
-static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c)
-{
-  if (*currlen < maxlen)
-    buffer[(*currlen)++] = c;
-}
-
-#ifdef TEST_SNPRINTF
-#ifndef LONG_STRING
-#define LONG_STRING 1024
-#endif
-int main (void)
-{
-  char buf1[LONG_STRING];
-  char buf2[LONG_STRING];
-  char *fp_fmt[] = {
-    "%-1.5f",
-    "%1.5f",
-    "%123.9f",
-    "%10.5f",
-    "% 10.5f",
-    "%+22.9f",
-    "%+4.9f",
-    "%01.3f",
-    "%4f",
-    "%3.1f",
-    "%3.2f",
-    NULL
-  };
-  double fp_nums[] = { -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996, 
-    0.9996, 1.996, 4.136, 0};
-  char *int_fmt[] = {
-    "%-1.5d",
-    "%1.5d",
-    "%123.9d",
-    "%5.5d",
-    "%10.5d",
-    "% 10.5d",
-    "%+22.33d",
-    "%01.3d",
-    "%4d",
-    NULL
-  };
-  long int_nums[] = { -1, 134, 91340, 341, 0203, 0};
-  int x, y;
-  int fail = 0;
-  int num = 0;
-
-  printf ("Testing snprintf format codes against system sprintf...\n");
-
-  for (x = 0; fp_fmt[x] != NULL ; x++)
-    for (y = 0; fp_nums[y] != 0 ; y++)
-    {
-      snprintf (buf1, sizeof (buf1), fp_fmt[x], fp_nums[y]);
-      sprintf (buf2, fp_fmt[x], fp_nums[y]);
-      if (strcmp (buf1, buf2))
-      {
-       printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf  = %s\n", 
-           fp_fmt[x], buf1, buf2);
-       fail++;
-      }
-      num++;
-    }
-
-  for (x = 0; int_fmt[x] != NULL ; x++)
-    for (y = 0; int_nums[y] != 0 ; y++)
-    {
-      snprintf (buf1, sizeof (buf1), int_fmt[x], int_nums[y]);
-      sprintf (buf2, int_fmt[x], int_nums[y]);
-      if (strcmp (buf1, buf2))
-      {
-       printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf  = %s\n", 
-           int_fmt[x], buf1, buf2);
-       fail++;
-      }
-      num++;
-    }
-  printf ("%d tests failed out of %d.\n", fail, num);
+/** print %c */
+static void
+print_char(char** at, size_t* left, int* ret, int c,
+       int minw, int minus)
+{
+       if(1 < minw && !minus)
+               print_pad(at, left, ret, ' ', minw - 1);
+       print_pad(at, left, ret, c, 1);
+       if(1 < minw && minus)
+               print_pad(at, left, ret, ' ', minw - 1);
+}
+
+
+/** 
+ * Print to string.
+ * str: string buffer for result. result will be null terminated.
+ * size: size of the buffer. null is put inside buffer.
+ * format: printf format string.
+ * arg: '...' arguments to print.
+ * returns number of characters. a null is printed after this.
+ * return number of bytes that would have been written
+ *        if the buffer had been large enough.
+ * 
+ * supported format specifiers:
+ *     %s, %u, %d, %x, %i, %f, %g, %c, %p, %n.
+ *     length: l, ll (for d, u, x).
+ *     precision: 6.6d (for d, u, x)
+ *             %f, %g precisions, 0.3f
+ *             %20s, '.*s'
+ *     and %%.
+ */
+int vsnprintf(char* str, size_t size, const char* format, va_list arg)
+{
+       char* at = str;
+       size_t left = size;
+       int ret = 0;
+       const char* fmt = format;
+       int conv, minw, precision, prgiven, zeropad, minus, plus, space, length;
+       while(*fmt) {
+               /* copy string before % */
+               while(*fmt && *fmt!='%') {
+                       if(left > 1) {
+                               *at++ = *fmt++;
+                               left--;
+                       } else fmt++;
+                       ret++;
+               }
+               
+               /* see if we are at end */
+               if(!*fmt) break;
+
+               /* fetch next argument % designation from format string */
+               fmt++; /* skip the '%' */
+
+               /********************************/
+               /* get the argument designation */
+               /********************************/
+               /* we must do this vararg stuff inside this function for
+                * portability.  Hence, get_designation, and print_designation
+                * are not their own functions. */
+
+               /* printout designation:
+                * conversion specifier: x, d, u, s, c, n, m, p
+                * flags: # not supported
+                *        0 zeropad (on the left)
+                *        - left adjust (right by default)
+                *        ' ' printspace for positive number (in - position).
+                *        + alwayssign
+                * fieldwidth: [1-9][0-9]* minimum field width.
+                *      if this is * then type int next argument specifies the minwidth.
+                *      if this is negative, the - flag is set (with positive width).
+                * precision: period[digits]*, %.2x.
+                *      if this is * then type int next argument specifies the precision.
+                *      just '.' or negative value means precision=0.
+                *              this is mindigits to print for d, i, u, x
+                *              this is aftercomma digits for f
+                *              this is max number significant digits for g
+                *              maxnumber characters to be printed for s
+                * length: 0-none (int), 1-l (long), 2-ll (long long)
+                *      notsupported: hh (char), h (short), L (long double), q, j, z, t
+                * Does not support %m$ and *m$ argument designation as array indices.
+                * Does not support %#x
+                *
+                */
+               minw = 0;
+               precision = 1;
+               prgiven = 0;
+               zeropad = 0;
+               minus = 0;
+               plus = 0;
+               space = 0;
+               length = 0;
+
+               /* get flags in any order */
+               for(;;) {
+                       if(*fmt == '0')
+                               zeropad = 1;
+                       else if(*fmt == '-')
+                               minus = 1;
+                       else if(*fmt == '+')
+                               plus = 1;
+                       else if(*fmt == ' ')
+                               space = 1;
+                       else break;
+                       fmt++;
+               }
+
+               /* field width */
+               if(*fmt == '*') {
+                       fmt++; /* skip char */
+                       minw = va_arg(arg, int);
+                       if(minw < 0) {
+                               minus = 1;
+                               minw = -minw;
+                       }
+               } else while(*fmt >= '0' && *fmt <= '9') {
+                       minw = minw*10 + (*fmt++)-'0';
+               }
+
+               /* precision */
+               if(*fmt == '.') {
+                       fmt++; /* skip period */
+                       prgiven = 1;
+                       precision = 0;
+                       if(*fmt == '*') {
+                               fmt++; /* skip char */
+                               precision = va_arg(arg, int);
+                               if(precision < 0)
+                                       precision = 0;
+                       } else while(*fmt >= '0' && *fmt <= '9') {
+                               precision = precision*10 + (*fmt++)-'0';
+                       }
+               }
+
+               /* length */
+               if(*fmt == 'l') {
+                       fmt++; /* skip char */
+                       length = 1;
+                       if(*fmt == 'l') {
+                               fmt++; /* skip char */
+                               length = 2;
+                       }
+               }
+
+               /* get the conversion */
+               if(!*fmt) conv = 0;
+               else    conv = *fmt++;
+
+               /***********************************/
+               /* print that argument designation */
+               /***********************************/
+               switch(conv) {
+               case 'i':
+               case 'd':
+                       if(length == 0)
+                           print_num_d(&at, &left, &ret, va_arg(arg, int),
+                               minw, precision, prgiven, zeropad, minus, plus, space);
+                       else if(length == 1)
+                           print_num_ld(&at, &left, &ret, va_arg(arg, long),
+                               minw, precision, prgiven, zeropad, minus, plus, space);
+                       else if(length == 2)
+                           print_num_lld(&at, &left, &ret,
+                               va_arg(arg, long long),
+                               minw, precision, prgiven, zeropad, minus, plus, space);
+                       break;
+               case 'u':
+                       if(length == 0)
+                           print_num_u(&at, &left, &ret,
+                               va_arg(arg, unsigned int),
+                               minw, precision, prgiven, zeropad, minus, plus, space);
+                       else if(length == 1)
+                           print_num_lu(&at, &left, &ret,
+                               va_arg(arg, unsigned long),
+                               minw, precision, prgiven, zeropad, minus, plus, space);
+                       else if(length == 2)
+                           print_num_llu(&at, &left, &ret,
+                               va_arg(arg, unsigned long long),
+                               minw, precision, prgiven, zeropad, minus, plus, space);
+                       break;
+               case 'x':
+                       if(length == 0)
+                           print_num_x(&at, &left, &ret,
+                               va_arg(arg, unsigned int),
+                               minw, precision, prgiven, zeropad, minus, plus, space);
+                       else if(length == 1)
+                           print_num_lx(&at, &left, &ret,
+                               va_arg(arg, unsigned long),
+                               minw, precision, prgiven, zeropad, minus, plus, space);
+                       else if(length == 2)
+                           print_num_llx(&at, &left, &ret,
+                               va_arg(arg, unsigned long long),
+                               minw, precision, prgiven, zeropad, minus, plus, space);
+                       break;
+               case 's':
+                       print_str(&at, &left, &ret, va_arg(arg, char*),
+                               minw, precision, prgiven, minus);
+                       break;
+               case 'c':
+                       print_char(&at, &left, &ret, va_arg(arg, int),
+                               minw, minus);
+                       break;
+               case 'n':
+                       *va_arg(arg, int*) = ret;
+                       break;
+               case 'm':
+                       print_str(&at, &left, &ret, strerror(errno),
+                               minw, precision, prgiven, minus);
+                       break;
+               case 'p':
+                       print_num_llp(&at, &left, &ret, va_arg(arg, void*),
+                               minw, precision, prgiven, zeropad, minus, plus, space);
+                       break;
+               case '%':
+                       print_pad(&at, &left, &ret, '%', 1);
+                       break;
+               case 'f':
+                       print_num_f(&at, &left, &ret, va_arg(arg, double),
+                               minw, precision, prgiven, zeropad, minus, plus, space);
+                       break;
+               case 'g':
+                       print_num_g(&at, &left, &ret, va_arg(arg, double),
+                               minw, precision, prgiven, zeropad, minus, plus, space);
+                       break;
+               /* unknown */
+               default:
+               case 0: break;
+               }
+       }
+
+       /* zero terminate */
+       if(left > 0)
+               *at = 0;
+       return ret;
 }
-#endif /* SNPRINTF_TEST */
 
-#endif /* !HAVE_SNPRINTF */
+#ifdef SNPRINTF_TEST
+
+/** do tests */
+#undef snprintf
+#define DOTEST(bufsz, result, retval, ...) do { \
+       char buf[bufsz]; \
+       printf("now test %s\n", #__VA_ARGS__); \
+       int r=my_snprintf(buf, sizeof(buf), __VA_ARGS__); \
+       if(r != retval || strcmp(buf, result) != 0) { \
+               printf("error test(%s) was \"%s\":%d\n", \
+                       ""#bufsz", "#result", "#retval", "#__VA_ARGS__, \
+                       buf, r); \
+               exit(1); \
+               } \
+       r=snprintf(buf, sizeof(buf), __VA_ARGS__); \
+       if(r != retval || strcmp(buf, result) != 0) { \
+               printf("error test(%s) differs with system, \"%s\":%d\n", \
+                       ""#bufsz", "#result", "#retval", "#__VA_ARGS__, \
+                       buf, r); \
+               exit(1); \
+               } \
+       printf("test(\"%s\":%d) passed\n", buf, r); \
+       } while(0);
+
+/** test program */
+int main(void)
+{
+       int x = 0;
+
+       /* bufsize, expectedstring, expectedretval, snprintf arguments */
+       DOTEST(1024, "hello", 5, "hello");
+       DOTEST(1024, "h", 1, "h");
+       /* warning from gcc for format string, but it does work
+        * DOTEST(1024, "", 0, ""); */
+
+       DOTEST(3, "he", 5, "hello");
+       DOTEST(1, "", 7, "%d", 7823089);
+
+       /* test positive numbers */
+       DOTEST(1024, "0", 1, "%d", 0);
+       DOTEST(1024, "1", 1, "%d", 1);
+       DOTEST(1024, "9", 1, "%d", 9);
+       DOTEST(1024, "15", 2, "%d", 15);
+       DOTEST(1024, "ab15cd", 6, "ab%dcd", 15);
+       DOTEST(1024, "167", 3, "%d", 167);
+       DOTEST(1024, "7823089", 7, "%d", 7823089);
+       DOTEST(1024, " 12", 3, "%3d", 12);
+       DOTEST(1024, "012", 3, "%.3d", 12);
+       DOTEST(1024, "012", 3, "%3.3d", 12);
+       DOTEST(1024, "012", 3, "%03d", 12);
+       DOTEST(1024, " 012", 4, "%4.3d", 12);
+       DOTEST(1024, "", 0, "%.0d", 0);
+
+       /* test negative numbers */
+       DOTEST(1024, "-1", 2, "%d", -1);
+       DOTEST(1024, "-12", 3, "%3d", -12);
+       DOTEST(1024, " -2", 3, "%3d", -2);
+       DOTEST(1024, "-012", 4, "%.3d", -12);
+       DOTEST(1024, "-012", 4, "%3.3d", -12);
+       DOTEST(1024, "-012", 4, "%4.3d", -12);
+       DOTEST(1024, " -012", 5, "%5.3d", -12);
+       DOTEST(1024, "-12", 3, "%03d", -12);
+       DOTEST(1024, "-02", 3, "%03d", -2);
+       DOTEST(1024, "-15", 3, "%d", -15);
+       DOTEST(1024, "-7307", 5, "%d", -7307);
+       DOTEST(1024, "-12  ", 5, "%-5d", -12);
+       DOTEST(1024, "-00012", 6, "%-.5d", -12);
+
+       /* test + and space flags */
+       DOTEST(1024, "+12", 3, "%+d", 12);
+       DOTEST(1024, " 12", 3, "% d", 12);
+
+       /* test %u */
+       DOTEST(1024, "12", 2, "%u", 12);
+       DOTEST(1024, "0", 1, "%u", 0);
+       DOTEST(1024, "4294967295", 10, "%u", 0xffffffff);
+
+       /* test %x */
+       DOTEST(1024, "0", 1, "%x", 0);
+       DOTEST(1024, "c", 1, "%x", 12);
+       DOTEST(1024, "12ab34cd", 8, "%x", 0x12ab34cd);
+
+       /* test %llu, %lld */
+       DOTEST(1024, "18446744073709551615", 20, "%llu",
+               (long long)0xffffffffffffffff);
+       DOTEST(1024, "-9223372036854775808", 20, "%lld",
+               (long long)0x8000000000000000);
+       DOTEST(1024, "9223372036854775808", 19, "%llu",
+               (long long)0x8000000000000000);
+
+       /* test %s */
+       DOTEST(1024, "hello", 5, "%s", "hello");
+       DOTEST(1024, "     hello", 10, "%10s", "hello");
+       DOTEST(1024, "hello     ", 10, "%-10s", "hello");
+       DOTEST(1024, "he", 2, "%.2s", "hello");
+       DOTEST(1024, "  he", 4, "%4.2s", "hello");
+       DOTEST(1024, "   h", 4, "%4.2s", "h");
+
+       /* test %c */
+       DOTEST(1024, "a", 1, "%c", 'a');
+       /* warning from gcc for format string, but it does work
+          DOTEST(1024, "    a", 5, "%5c", 'a');
+          DOTEST(1024, "a", 1, "%.0c", 'a'); */
+
+       /* test %n */
+       DOTEST(1024, "hello", 5, "hello%n", &x);
+       if(x != 5) { printf("the %%n failed\n"); exit(1); }
+
+       /* test %m */
+       errno = 0;
+       DOTEST(1024, "Success", 7, "%m");
+
+       /* test %p */
+       DOTEST(1024, "0x10", 4, "%p", (void*)0x10);
+       DOTEST(1024, "(nil)", 5, "%p", (void*)0x0);
+
+       /* test %% */
+       DOTEST(1024, "%", 1, "%%");
+
+       /* test %f */
+       DOTEST(1024, "0.000000", 8, "%f", 0.0);
+       DOTEST(1024, "0.00", 4, "%.2f", 0.0);
+       /* differs, "-0.00" DOTEST(1024, "0.00", 4, "%.2f", -0.0); */
+       DOTEST(1024, "234.00", 6, "%.2f", 234.005);
+       DOTEST(1024, "8973497.1246", 12, "%.4f", 8973497.12456);
+       DOTEST(1024, "-12.000000", 10, "%f", -12.0);
+       DOTEST(1024, "6", 1, "%.0f", 6.0);
+
+       DOTEST(1024, "6", 1, "%g", 6.0);
+       DOTEST(1024, "6.1", 3, "%g", 6.1);
+       DOTEST(1024, "6.15", 4, "%g", 6.15);
+
+       /* These format strings are from the code of NSD, Unbound, ldns */
+
+       DOTEST(1024, "abcdef", 6, "%s", "abcdef");
+       DOTEST(1024, "005", 3, "%03u", 5);
+       DOTEST(1024, "12345", 5, "%03u", 12345);
+       DOTEST(1024, "5", 1, "%d", 5);
+       DOTEST(1024, "(nil)", 5, "%p", NULL);
+       DOTEST(1024, "12345", 5, "%ld", (long)12345);
+       DOTEST(1024, "12345", 5, "%lu", (long)12345);
+       DOTEST(1024, "       12345", 12, "%12u", (unsigned)12345);
+       DOTEST(1024, "12345", 5, "%u", (unsigned)12345);
+       DOTEST(1024, "12345", 5, "%llu", (unsigned long long)12345);
+       DOTEST(1024, "12345", 5, "%x", 0x12345);
+       DOTEST(1024, "12345", 5, "%llx", (long long)0x12345);
+       DOTEST(1024, "012345", 6, "%6.6d", 12345);
+       DOTEST(1024, "012345", 6, "%6.6u", 12345);
+       DOTEST(1024, "1234.54", 7, "%g", 1234.54);
+       DOTEST(1024, "123456789.54", 12, "%.12g", 123456789.54);
+       DOTEST(1024, "3456789123456.54", 16, "%.16g", 3456789123456.54);
+       /* %24g does not work with 24 digits, not enough accuracy,
+        * the first 16 digits are correct */
+       DOTEST(1024, "12345", 5, "%3.3d", 12345);
+       DOTEST(1024, "000", 3, "%3.3d", 0);
+       DOTEST(1024, "001", 3, "%3.3d", 1);
+       DOTEST(1024, "012", 3, "%3.3d", 12);
+       DOTEST(1024, "-012", 4, "%3.3d", -12);
+       DOTEST(1024, "he", 2, "%.2s", "hello");
+       DOTEST(1024, "helloworld", 10, "%s%s", "hello", "world");
+       DOTEST(1024, "he", 2, "%.*s", 2, "hello");
+       DOTEST(1024, "  hello", 7, "%*s", 7, "hello");
+       DOTEST(1024, "hello  ", 7, "%*s", -7, "hello");
+       DOTEST(1024, "0", 1, "%c", '0'); 
+       DOTEST(1024, "A", 1, "%c", 'A'); 
+       DOTEST(1024, "", 1, "%c", 0); 
+       DOTEST(1024, "\010", 1, "%c", 8); 
+       DOTEST(1024, "%", 1, "%%"); 
+       DOTEST(1024, "0a", 2, "%02x", 0x0a); 
+       DOTEST(1024, "bd", 2, "%02x", 0xbd); 
+       DOTEST(1024, "12", 2, "%02ld", (long)12); 
+       DOTEST(1024, "02", 2, "%02ld", (long)2); 
+       DOTEST(1024, "02", 2, "%02u", (unsigned)2); 
+       DOTEST(1024, "765432", 6, "%05u", (unsigned)765432); 
+       DOTEST(1024, "10.234", 6, "%0.3f", 10.23421); 
+       DOTEST(1024, "123456.234", 10, "%0.3f", 123456.23421); 
+       DOTEST(1024, "123456789.234", 13, "%0.3f", 123456789.23421); 
+       DOTEST(1024, "123456.23", 9, "%.2f", 123456.23421); 
+       DOTEST(1024, "123456", 6, "%.0f", 123456.23421); 
+       DOTEST(1024, "0123", 4, "%.4x", 0x0123); 
+       DOTEST(1024, "00000123", 8, "%.8x", 0x0123); 
+       DOTEST(1024, "ffeb0cde", 8, "%.8x", 0xffeb0cde); 
+       DOTEST(1024, " 987654321", 10, "%10lu", (unsigned long)987654321); 
+       DOTEST(1024, "   987654321", 12, "%12lu", (unsigned long)987654321); 
+       DOTEST(1024, "987654321", 9, "%i", 987654321); 
+       DOTEST(1024, "-87654321", 9, "%i", -87654321); 
+       DOTEST(1024, "hello           ", 16, "%-16s", "hello"); 
+       DOTEST(1024, "                ", 16, "%-16s", ""); 
+       DOTEST(1024, "a               ", 16, "%-16s", "a"); 
+       DOTEST(1024, "foobarfoobar    ", 16, "%-16s", "foobarfoobar"); 
+       DOTEST(1024, "foobarfoobarfoobar", 18, "%-16s", "foobarfoobarfoobar"); 
+
+       /* combined expressions */
+       DOTEST(1024, "foo 1.0 size 512 edns", 21,
+               "foo %s size %d %s%s", "1.0", 512, "", "edns");
+       DOTEST(15, "foo 1.0 size 5", 21,
+               "foo %s size %d %s%s", "1.0", 512, "", "edns");
+       DOTEST(1024, "packet 1203ceff id", 18,
+               "packet %2.2x%2.2x%2.2x%2.2x id", 0x12, 0x03, 0xce, 0xff);
+       DOTEST(1024, "/tmp/testbound_123abcd.tmp", 26, "/tmp/testbound_%u%s%s.tmp", 123, "ab", "cd");
+       return 0;
+}
+#endif /* SNPRINTF_TEST */
index 7343a24e7cec57a7cb74c0a22295e1de576a529b..6b4618a3dcf9f62ad5b210b3ff644166acbf17d4 100644 (file)
 /* Define if you have POSIX threads libraries and header files. */
 #undef HAVE_PTHREAD
 
+/* Have PTHREAD_PRIO_INHERIT. */
+#undef HAVE_PTHREAD_PRIO_INHERIT
+
 /* Define to 1 if the system has the type `pthread_rwlock_t'. */
 #undef HAVE_PTHREAD_RWLOCK_T
 
@@ -808,7 +811,7 @@ struct tm *gmtime_r(const time_t *timep, struct tm *result);
 #endif
 
 
-#ifndef HAVE_SLEEP
+#if !defined(HAVE_SLEEP) || defined(HAVE_WINDOWS_H)
 #define sleep(x) Sleep((x)*1000) /* on win32 */
 #endif /* HAVE_SLEEP */
 
@@ -874,8 +877,6 @@ char *strptime(const char *s, const char *format, struct tm *tm);
 #  endif
 #endif /* CHECKED_INET6 */
 
-/* maximum nesting of included files */
-#define MAXINCLUDES 10
 #ifndef HAVE_GETADDRINFO
 struct sockaddr_storage;
 #include "compat/fake-rfc2553.h"
index fa5e58c68621a5e517c1b923cbd67e4754f2c4dd..b9897bb00a31d5144b4d19e35eec2477bfa7a0b0 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for unbound 1.4.20.
+# Generated by GNU Autoconf 2.69 for unbound 1.4.21.
 #
 # Report bugs to <unbound-bugs@nlnetlabs.nl>.
 #
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='unbound'
 PACKAGE_TARNAME='unbound'
-PACKAGE_VERSION='1.4.20'
-PACKAGE_STRING='unbound 1.4.20'
+PACKAGE_VERSION='1.4.21'
+PACKAGE_STRING='unbound 1.4.21'
 PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl'
 PACKAGE_URL=''
 
@@ -679,7 +679,7 @@ PYTHON_VERSION
 PTHREAD_CFLAGS
 PTHREAD_LIBS
 PTHREAD_CC
-acx_pthread_config
+ax_pthread_config
 RUNTIME_PATH
 LIBOBJS
 OTOOL64
@@ -745,6 +745,9 @@ build
 LIBUNBOUND_AGE
 LIBUNBOUND_REVISION
 LIBUNBOUND_CURRENT
+UNBOUND_VERSION_MICRO
+UNBOUND_VERSION_MINOR
+UNBOUND_VERSION_MAJOR
 target_alias
 host_alias
 build_alias
@@ -796,6 +799,7 @@ with_rootcert_file
 with_username
 enable_checking
 enable_debug
+enable_flto
 enable_shared
 enable_static
 with_pic
@@ -1378,7 +1382,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures unbound 1.4.20 to adapt to many kinds of systems.
+\`configure' configures unbound 1.4.21 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1444,7 +1448,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of unbound 1.4.20:";;
+     short | recursive ) echo "Configuration of unbound 1.4.21:";;
    esac
   cat <<\_ACEOF
 
@@ -1454,6 +1458,7 @@ Optional Features:
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --enable-checking       Enable warnings, asserts, makefile-dependencies
   --enable-debug          same as enable-checking
+  --disable-flto          Disable link-time optimization
   --enable-shared[=PKGS]  build shared libraries [default=yes]
   --enable-static[=PKGS]  build static libraries [default=yes]
   --enable-fast-install[=PKGS]
@@ -1613,7 +1618,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-unbound configure 1.4.20
+unbound configure 1.4.21
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2139,7 +2144,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by unbound $as_me 1.4.20, which was
+It was created by unbound $as_me 1.4.21, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2487,10 +2492,16 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
+UNBOUND_VERSION_MAJOR=1
 
-LIBUNBOUND_CURRENT=3
-LIBUNBOUND_REVISION=5
-LIBUNBOUND_AGE=1
+UNBOUND_VERSION_MINOR=4
+
+UNBOUND_VERSION_MICRO=21
+
+
+LIBUNBOUND_CURRENT=4
+LIBUNBOUND_REVISION=1
+LIBUNBOUND_AGE=2
 # 1.0.0 had 0:12:0
 # 1.0.1 had 0:13:0
 # 1.0.2 had 0:14:0
@@ -2525,7 +2536,8 @@ LIBUNBOUND_AGE=1
 # 1.4.17 had 3:2:1
 # 1.4.18 had 3:3:1
 # 1.4.19 had 3:4:1
-# 1.4.20 had 4:0:2 # adds libunbound.ttl
+# 1.4.20 had 4:0:2 # adds libunbound.ttl # but shipped 3:5:1
+# 1.4.21 had 4:1:2
 
 #   Current  -- the number of the binary API that we're implementing
 #   Revision -- which iteration of the implementation of the binary
@@ -4143,7 +4155,7 @@ _ACEOF
 
 $as_echo "#define WINVER 0x0502" >>confdefs.h
 
-wnvs=`echo $PACKAGE_VERSION | sed -e 's/^[^0-9]*\([0-9]\)[^0-9]*\([0-9]\)[^0-9]*\([0-9]\)[^0-9]*\([0-9]\).*$/\1,\2,\3,\4/' -e 's/^[^0-9]*\([0-9]\)[^0-9]*\([0-9]\)[^0-9]*\([0-9]\)[^0-9]*$/\1,\2,\3,0/' `
+wnvs=`echo $PACKAGE_VERSION | sed -e 's/^[^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\).*$/\1,\2,\3,\4/' -e 's/^[^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9]*$/\1,\2,\3,0/' `
 
 
 cat >>confdefs.h <<_ACEOF
@@ -5756,11 +5768,19 @@ $as_echo "#define UNBOUND_DEBUG /**/" >>confdefs.h
                # nothing to do.
                ;;
 esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -flto" >&5
+
+    # Check whether --enable-flto was given.
+if test "${enable_flto+set}" = set; then :
+  enableval=$enable_flto;
+fi
+
+    if test "x$enable_flto" != "xno"; then :
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -flto" >&5
 $as_echo_n "checking if $CC supports -flto... " >&6; }
-BAKCFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -flto"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        BAKCFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS -flto"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -5773,15 +5793,15 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
 
-    if $CC $CFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then
-       CFLAGS="$BAKCFLAGS"
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+            if $CC $CFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then
+                CFLAGS="$BAKCFLAGS"
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-    else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+            else
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-    fi
-    rm -f conftest conftest.c conftest.o
+            fi
+            rm -f conftest conftest.c conftest.o
 
 else
   CFLAGS="$BAKCFLAGS" ; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
@@ -5790,6 +5810,8 @@ fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 
+fi
+
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
 $as_echo_n "checking for inline... " >&6; }
@@ -15070,14 +15092,13 @@ ub_have_pthreads=no
 if test x_$withval != x_no; then
 
 
-
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-acx_pthread_ok=no
+ax_pthread_ok=no
 
 # We used to check for pthread.h first, but this fails if pthread.h
 # requires special compiler flags (e.g. on True64 or Sequent).
@@ -15112,13 +15133,13 @@ return pthread_join ();
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  acx_pthread_ok=yes
+  ax_pthread_ok=yes
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5
-$as_echo "$acx_pthread_ok" >&6; }
-        if test x"$acx_pthread_ok" = xno; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test x"$ax_pthread_ok" = xno; then
                 PTHREAD_LIBS=""
                 PTHREAD_CFLAGS=""
         fi
@@ -15136,7 +15157,7 @@ fi
 # which indicates that we try without any flags at all, and "pthread-config"
 # which is a program returning the flags for the Pth emulation library.
 
-acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
 
 # The ordering *is* (sometimes) important.  Some notes on the
 # individual items follow:
@@ -15158,8 +15179,8 @@ acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -m
 # --thread-safe: KAI C++
 # pthread-config: use pthread-config program (for GNU Pth library)
 
-case "${host_cpu}-${host_os}" in
-        *solaris*)
+case ${host_os} in
+        solaris*)
 
         # On Solaris (at least, for some versions), libc contains stubbed
         # (non-functional) versions of the pthreads routines, so link-based
@@ -15169,12 +15190,16 @@ case "${host_cpu}-${host_os}" in
         # who knows whether they'll stub that too in a future libc.)  So,
         # we'll just look for -pthreads and -lpthread first:
 
-        acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
+        ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
+        ;;
+
+        darwin*)
+        ax_pthread_flags="-pthread $ax_pthread_flags"
         ;;
 esac
 
-if test x"$acx_pthread_ok" = xno; then
-for flag in $acx_pthread_flags; do
+if test x"$ax_pthread_ok" = xno; then
+for flag in $ax_pthread_flags; do
 
         case $flag in
                 none)
@@ -15188,16 +15213,16 @@ $as_echo_n "checking whether pthreads work with $flag... " >&6; }
                 PTHREAD_CFLAGS="$flag"
                 ;;
 
-               pthread-config)
-               # Extract the first word of "pthread-config", so it can be a program name with args.
+                pthread-config)
+                # Extract the first word of "pthread-config", so it can be a program name with args.
 set dummy pthread-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_acx_pthread_config+:} false; then :
+if ${ac_cv_prog_ax_pthread_config+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$acx_pthread_config"; then
-  ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test.
+  if test -n "$ax_pthread_config"; then
+  ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -15206,7 +15231,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_acx_pthread_config="yes"
+    ac_cv_prog_ax_pthread_config="yes"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -15214,23 +15239,23 @@ done
   done
 IFS=$as_save_IFS
 
-  test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no"
+  test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
 fi
 fi
-acx_pthread_config=$ac_cv_prog_acx_pthread_config
-if test -n "$acx_pthread_config"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5
-$as_echo "$acx_pthread_config" >&6; }
+ax_pthread_config=$ac_cv_prog_ax_pthread_config
+if test -n "$ax_pthread_config"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
+$as_echo "$ax_pthread_config" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-               if test x"$acx_pthread_config" = xno; then continue; fi
-               PTHREAD_CFLAGS="`pthread-config --cflags`"
-               PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
-               ;;
+                if test x"$ax_pthread_config" = xno; then continue; fi
+                PTHREAD_CFLAGS="`pthread-config --cflags`"
+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+                ;;
 
                 *)
                 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5
@@ -15256,18 +15281,23 @@ $as_echo_n "checking for the pthreads library -l$flag... " >&6; }
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pthread.h>
+                        static void routine(void *a) { *((int*)a) = 0; }
+                        static void *start_routine(void *a) { return a; }
 int
 main ()
 {
-pthread_t th; pthread_join(th, 0);
-                     pthread_attr_init(0); pthread_cleanup_push(0, 0);
-                     pthread_create(0,0,0,0); pthread_cleanup_pop(0);
+pthread_t th; pthread_attr_t attr;
+                        pthread_create(&th, 0, start_routine, 0);
+                        pthread_join(th, 0);
+                        pthread_attr_init(&attr);
+                        pthread_cleanup_push(routine, 0);
+                        pthread_cleanup_pop(0) /* ; */
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  acx_pthread_ok=yes
+  ax_pthread_ok=yes
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
@@ -15275,9 +15305,9 @@ rm -f core conftest.err conftest.$ac_objext \
         LIBS="$save_LIBS"
         CFLAGS="$save_CFLAGS"
 
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5
-$as_echo "$acx_pthread_ok" >&6; }
-        if test "x$acx_pthread_ok" = xyes; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test "x$ax_pthread_ok" = xyes; then
                 break;
         fi
 
@@ -15287,24 +15317,24 @@ done
 fi
 
 # Various other checks:
-if test "x$acx_pthread_ok" = xyes; then
+if test "x$ax_pthread_ok" = xyes; then
         save_LIBS="$LIBS"
         LIBS="$PTHREAD_LIBS $LIBS"
         save_CFLAGS="$CFLAGS"
         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 
         # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
 $as_echo_n "checking for joinable pthread attribute... " >&6; }
-       attr_name=unknown
-       for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
-           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        attr_name=unknown
+        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pthread.h>
 int
 main ()
 {
-int attr=$attr; return attr;
+int attr = $attr; return attr /* ; */
   ;
   return 0;
 }
@@ -15314,7 +15344,7 @@ if ac_fn_c_try_link "$LINENO"; then :
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-       done
+        done
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
 $as_echo "$attr_name" >&6; }
         if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
@@ -15328,9 +15358,16 @@ _ACEOF
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
 $as_echo_n "checking if more special flags are required for pthreads... " >&6; }
         flag=no
-        case "${host_cpu}-${host_os}" in
-            *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
-            *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
+        case ${host_os} in
+            aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
+            osf* | hpux*) flag="-D_REENTRANT";;
+            solaris*)
+            if test "$GCC" = "yes"; then
+                flag="-D_REENTRANT"
+            else
+                flag="-mt -D_REENTRANT"
+            fi
+            ;;
         esac
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5
 $as_echo "${flag}" >&6; }
@@ -15338,12 +15375,58 @@ $as_echo "${flag}" >&6; }
             PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
         fi
 
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
+$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
+if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+                    #include <pthread.h>
+int
+main ()
+{
+int i = PTHREAD_PRIO_INHERIT;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_PTHREAD_PRIO_INHERIT=yes
+else
+  ax_cv_PTHREAD_PRIO_INHERIT=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
+$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
+        if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then :
+
+$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
+
+fi
+
         LIBS="$save_LIBS"
         CFLAGS="$save_CFLAGS"
 
-        # More AIX lossage: must compile with xlc_r or cc_r
-       if test x"$GCC" != xyes; then
-          for ac_prog in xlc_r cc_r
+        # More AIX lossage: compile with *_r variant
+        if test "x$GCC" != xyes; then
+            case $host_os in
+                aix*)
+                case "x/$CC" in #(
+  x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
+    #handle absolute path differently from PATH based program lookup
+                   case "x$CC" in #(
+  x/*) :
+    if as_fn_executable_p ${CC}_r; then :
+  PTHREAD_CC="${CC}_r"
+fi ;; #(
+  *) :
+    for ac_prog in ${CC}_r
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 
   test -n "$PTHREAD_CC" && break
 done
-test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}"
-
-        else
-          PTHREAD_CC=$CC
-       fi
-else
-        PTHREAD_CC="$CC"
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+ ;;
+esac ;; #(
+  *) :
+     ;;
+esac
+                ;;
+            esac
+        fi
 fi
 
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+
 
 
 
 
 # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$acx_pthread_ok" = xyes; then
+if test x"$ax_pthread_ok" = xyes; then
 
 
 $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
@@ -15431,7 +15518,7 @@ fi
 
         :
 else
-        acx_pthread_ok=no
+        ax_pthread_ok=no
 
 fi
 ac_ext=c
@@ -18709,7 +18796,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by unbound $as_me 1.4.20, which was
+This file was extended by unbound $as_me 1.4.21, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -18775,7 +18862,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-unbound config.status 1.4.20
+unbound config.status 1.4.21
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
index 5dc05c5fa49fcd58dcaf9207b3d1b8c741147494..268c467712142a64c58a7dc9bd7fc92dd462dad7 100644 (file)
@@ -1663,6 +1663,38 @@ do_stub_remove(SSL* ssl, struct worker* worker, char* args)
        send_ok(ssl);
 }
 
+/** do the insecure_add command */
+static void
+do_insecure_add(SSL* ssl, struct worker* worker, char* arg)
+{
+       size_t nmlen;
+       int nmlabs;
+       uint8_t* nm = NULL;
+       if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs))
+               return;
+       if(!anchors_add_insecure(worker->env.anchors, LDNS_RR_CLASS_IN, nm)) {
+               (void)ssl_printf(ssl, "error out of memory\n");
+               free(nm);
+               return;
+       }
+       free(nm);
+       send_ok(ssl);
+}
+
+/** do the insecure_remove command */
+static void
+do_insecure_remove(SSL* ssl, struct worker* worker, char* arg)
+{
+       size_t nmlen;
+       int nmlabs;
+       uint8_t* nm = NULL;
+       if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs))
+               return;
+       anchors_delete_insecure(worker->env.anchors, LDNS_RR_CLASS_IN, nm);
+       free(nm);
+       send_ok(ssl);
+}
+
 /** do the status command */
 static void
 do_status(SSL* ssl, struct worker* worker)
@@ -2050,6 +2082,16 @@ execute_cmd(struct daemon_remote* rc, SSL* ssl, char* cmd,
                if(rc) distribute_cmd(rc, ssl, cmd);
                do_forward_remove(ssl, worker, skipwhite(p+14));
                return;
+       } else if(cmdcmp(p, "insecure_add", 12)) {
+               /* must always distribute this cmd */
+               if(rc) distribute_cmd(rc, ssl, cmd);
+               do_insecure_add(ssl, worker, skipwhite(p+12));
+               return;
+       } else if(cmdcmp(p, "insecure_remove", 15)) {
+               /* must always distribute this cmd */
+               if(rc) distribute_cmd(rc, ssl, cmd);
+               do_insecure_remove(ssl, worker, skipwhite(p+15));
+               return;
        } else if(cmdcmp(p, "forward", 7)) {
                /* must always distribute this cmd */
                if(rc) distribute_cmd(rc, ssl, cmd);
index 934b75f4bee5a78c9017d9dbb83347283be0fb18..73706c474c152d196cf8545c615c00440d985198 100644 (file)
@@ -714,6 +714,7 @@ main(int argc, char* argv[])
 #endif
 
        log_init(NULL, 0, NULL);
+       log_ident_set(strrchr(argv[0],'/')?strrchr(argv[0],'/')+1:argv[0]);
        /* parse the options */
        while( (c=getopt(argc, argv, "c:dhvw:")) != -1) {
                switch(c) {
index 22819e598c0da8e2ddf78aa525f9f58a194d6fdb..2e0a4a31958bafe4483e5a351791efeeb73cbb4a 100644 (file)
@@ -837,6 +837,13 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
                        (int)edns.udp_size);
                log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen);
                edns.udp_size = NORMAL_UDP_SIZE;
+       } else if(edns.edns_present &&
+               edns.udp_size > worker->daemon->cfg->max_udp_size &&
+               c->type == comm_udp) {
+               verbose(VERB_QUERY, "worker request: EDNS bufsize %d exceeds "
+                       "max-udp-size, fixed", (int)edns.udp_size);
+               log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen);
+               edns.udp_size = worker->daemon->cfg->max_udp_size;
        }
        if(edns.edns_present && edns.udp_size < LDNS_HEADER_SIZE) {
                verbose(VERB_ALGO, "worker request: edns is too small.");
index 66aa1c391ee5eb2051798dbc92a25ed549d1a3fd..4fc94b35852889f617552ec7ce4da109624e453c 100644 (file)
@@ -101,4 +101,5 @@ SSHFP type
 4701: DHCID
 5155: NSEC3, NSEC3PARAM
 4408: SPF
+6944: DNSKEY algorithm status
 
index 5b9bbdb01416ef095de9e4811245ea3381b51e45..81e1876185a54306694afd7f16963a91844657bb 100644 (file)
@@ -89,6 +89,10 @@ server:
        # is set with msg-buffer-size). 1480 can solve fragmentation (timeouts).
        # edns-buffer-size: 4096
 
+       # Maximum UDP response size (not applied to TCP response).
+       # Suggested values are 512 to 4096. Default is 4096. 65536 disables it.
+       # max-udp-size: 4096
+
        # buffer size for handling DNS data. No messages larger than this
        # size can be sent or received, by UDP or TCP. In bytes.
        # msg-buffer-size: 65552
@@ -426,6 +430,47 @@ server:
        # plain value in bytes or you can append k, m or G. default is "1Mb". 
        # neg-cache-size: 1m
 
+       # By default, for a number of zones a small default 'nothing here'
+       # reply is built-in.  Query traffic is thus blocked.  If you
+       # wish to serve such zone you can unblock them by uncommenting one
+       # of the nodefault statements below.
+       # You may also have to use domain-insecure: zone to make DNSSEC work,
+       # unless you have your own trust anchors for this zone.
+       # local-zone: "localhost." nodefault
+       # local-zone: "127.in-addr.arpa." nodefault
+       # local-zone: "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa." nodefault
+       # local-zone: "10.in-addr.arpa." nodefault
+       # local-zone: "16.172.in-addr.arpa." nodefault
+       # local-zone: "17.172.in-addr.arpa." nodefault
+       # local-zone: "18.172.in-addr.arpa." nodefault
+       # local-zone: "19.172.in-addr.arpa." nodefault
+       # local-zone: "20.172.in-addr.arpa." nodefault
+       # local-zone: "21.172.in-addr.arpa." nodefault
+       # local-zone: "22.172.in-addr.arpa." nodefault
+       # local-zone: "23.172.in-addr.arpa." nodefault
+       # local-zone: "24.172.in-addr.arpa." nodefault
+       # local-zone: "25.172.in-addr.arpa." nodefault
+       # local-zone: "26.172.in-addr.arpa." nodefault
+       # local-zone: "27.172.in-addr.arpa." nodefault
+       # local-zone: "28.172.in-addr.arpa." nodefault
+       # local-zone: "29.172.in-addr.arpa." nodefault
+       # local-zone: "30.172.in-addr.arpa." nodefault
+       # local-zone: "31.172.in-addr.arpa." nodefault
+       # local-zone: "168.192.in-addr.arpa." nodefault
+       # local-zone: "0.in-addr.arpa." nodefault
+       # local-zone: "254.169.in-addr.arpa." nodefault
+       # local-zone: "2.0.192.in-addr.arpa." nodefault
+       # local-zone: "100.51.198.in-addr.arpa." nodefault
+       # local-zone: "113.0.203.in-addr.arpa." nodefault
+       # local-zone: "255.255.255.255.in-addr.arpa." nodefault
+       # local-zone: "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa." nodefault
+       # local-zone: "d.f.ip6.arpa." nodefault
+       # local-zone: "8.e.f.ip6.arpa." nodefault
+       # local-zone: "9.e.f.ip6.arpa." nodefault
+       # local-zone: "a.e.f.ip6.arpa." nodefault
+       # local-zone: "b.e.f.ip6.arpa." nodefault
+       # local-zone: "8.b.d.0.1.0.0.2.ip6.arpa." nodefault
+
        # a number of locally served zones can be configured.
        #       local-zone: <zone> <type>
        #       local-data: "<resource record string>"
index ce9c059b3700158ea0c97a3508ef8dae983d467c..2a4184f71ca8e027b9eb6e025e1617d171663425 100644 (file)
@@ -364,7 +364,7 @@ The result of the DNS resolution and validation is returned as
 .fi
 .P
 If both secure and bogus are false, security was not enabled for the 
-domain of the query.
+domain of the query.  Else, they are not both true, one of them is true.
 .SH "RETURN VALUES"
 Many routines return an error code. The value 0 (zero) denotes no error
 happened. Other values can be passed to
index 620fd321140f7b38278151ef8093c9d78cc24eea..3a9abfc22cc45d3432f63e436b3bc7c3a39083e2 100644 (file)
@@ -170,7 +170,7 @@ harden\-glue, harden\-dnssec\-stripped, harden\-below\-nxdomain,
 harden\-referral\-path, prefetch, prefetch\-key, log\-queries,
 hide\-identity, hide\-version, identity, version, val\-log\-level,
 val\-log\-squelch, ignore\-cd\-flag, add\-holddown, del\-holddown,
-keep\-missing, tcp\-upstream, ssl\-upstream.
+keep\-missing, tcp\-upstream, ssl\-upstream, max\-udp\-size.
 .TP
 .B get_option \fIopt
 Get the value of the option.  Give the option name without a trailing ':'.
@@ -196,6 +196,14 @@ List the local zones in use.  These are printed one per line with zone type.
 .B list_local_data
 List the local data RRs in use.  The resource records are printed.
 .TP
+.B insecure_add \fIzone
+Add a \fBdomain\-insecure\fR for the given zone, like the statement in unbound.conf.
+Adds to the running unbound without affecting the cache contents (which may
+still be bogus, use \fBflush_zone\fR to remove it), does not affect the config file.
+.TP
+.B insecure_remove \fIzone
+Removes domain\-insecure for the given zone.
+.TP
 .B forward_add \fR[\fI+i\fR] \fIzone addr ...
 Add a new forward zone to running unbound.  With +i option also adds a
 \fIdomain\-insecure\fR for the zone (so it can resolve insecurely if you have
index bc520d3a94477504512747cb3d6173aabff13087..fde51dccca03eba4f47a431c6f6fcfdb2c959381 100644 (file)
@@ -183,6 +183,11 @@ stringent path MTU problems, but is seen as extreme, since the amount
 of TCP fallback generated is excessive (probably also for this resolver,
 consider tuning the outgoing tcp number).
 .TP
+.B max\-udp\-size: \fI<number>
+Maximum UDP response size (not applied to TCP response).  65536 disables the
+udp response size maximum, and uses the choice from the client, always.
+Suggested values are 512 to 4096. Default is 4096. 
+.TP
 .B msg\-buffer\-size: \fI<number>
 Number of bytes size of the message buffers. Default is 65552 bytes, enough
 for 64 Kb packets, the maximum DNS message size. No message larger than this
@@ -492,7 +497,7 @@ unsigned to badly signed often. If turned off you run the risk of a
 downgrade attack that disables security for a zone. Default is on.
 .TP
 .B harden\-below\-nxdomain: \fI<yes or no>
-From draft-vixie-dnsext-resimprove, returns nxdomain to queries for a name
+From draft\-vixie\-dnsext\-resimprove, returns nxdomain to queries for a name
 below another name that is already known to be nxdomain.  DNSSEC mandates
 noerror for empty nonterminals, hence this is possible.  Very old software
 might return nxdomain for empty nonterminals (that usually happen for reverse
index 0b3b6525c26b6e3575cc0086abbd96b0c209bf56..b84e5eff60d0944a09690e5ef43fcf01f14ec6c9 100644 (file)
@@ -324,6 +324,20 @@ forwards_apply_cfg(struct iter_forwards* fwd, struct config_file* cfg)
        return 1;
 }
 
+struct delegpt* 
+forwards_find(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass)
+{
+       rbnode_t* res = NULL;
+       struct iter_forward_zone key;
+       key.node.key = &key;
+       key.dclass = qclass;
+       key.name = qname;
+       key.namelabs = dname_count_size_labels(qname, &key.namelen);
+       res = rbtree_search(fwd->tree, &key);
+       if(res) return ((struct iter_forward_zone*)res)->dp;
+       return NULL;
+}
+
 struct delegpt* 
 forwards_lookup(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass)
 {
index dbb84f226126f64732126360312989cacfd9556d..62408ad52e2bb52fba085ea0e38d12b5f95e036c 100644 (file)
@@ -104,6 +104,16 @@ void forwards_delete(struct iter_forwards* fwd);
  */
 int forwards_apply_cfg(struct iter_forwards* fwd, struct config_file* cfg);
 
+/**
+ * Find forward zone exactly by name
+ * @param fwd: forward storage.
+ * @param qname: The qname of the query.
+ * @param qclass: The qclass of the query.
+ * @return: A delegation point or null.
+ */
+struct delegpt* forwards_find(struct iter_forwards* fwd, uint8_t* qname,
+       uint16_t qclass);
+
 /**
  * Find forward zone information
  * For this qname/qclass find forward zone information, returns delegation
index db7dbe5faa65e02fe63abbca6e07271606ff4ac3..51f3e2ea2ffb20cafb4dc75020a80d8a451be0e9 100644 (file)
@@ -208,6 +208,28 @@ size_t priv_get_mem(struct iter_priv* priv)
        return sizeof(*priv) + regional_get_mem(priv->region);
 }
 
+/** remove RR from msgparse RRset, return true if rrset is entirely bad */
+static int
+remove_rr(const char* str, ldns_buffer* pkt, struct rrset_parse* rrset,
+       struct rr_parse* prev, struct rr_parse** rr, struct sockaddr_storage* addr, socklen_t addrlen)
+{
+       if(verbosity >= VERB_QUERY && rrset->dname_len <= LDNS_MAX_DOMAINLEN) {
+               uint8_t buf[LDNS_MAX_DOMAINLEN+1];
+               dname_pkt_copy(pkt, buf, rrset->dname);
+               log_name_addr(VERB_QUERY, str, buf, addr, addrlen);
+       }
+       if(prev)
+               prev->next = (*rr)->next;
+       else    rrset->rr_first = (*rr)->next;
+       if(rrset->rr_last == *rr)
+               rrset->rr_last = prev;
+       rrset->rr_count --;
+       rrset->size -= (*rr)->size;
+       /* rr struct still exists, but is unlinked, so that in the for loop
+        * the rr->next works fine to continue. */
+       return rrset->rr_count == 0;
+}
+
 int priv_rrset_bad(struct iter_priv* priv, ldns_buffer* pkt,
        struct rrset_parse* rrset)
 {
@@ -221,7 +243,7 @@ int priv_rrset_bad(struct iter_priv* priv, ldns_buffer* pkt,
        } else {
                /* so its a public name, check the address */
                socklen_t len;
-               struct rr_parse* rr;
+               struct rr_parse* rr, *prev = NULL;
                if(rrset->type == LDNS_RR_TYPE_A) {
                        struct sockaddr_storage addr;
                        struct sockaddr_in sa;
@@ -232,13 +254,19 @@ int priv_rrset_bad(struct iter_priv* priv, ldns_buffer* pkt,
                        sa.sin_port = (in_port_t)htons(UNBOUND_DNS_PORT);
                        for(rr = rrset->rr_first; rr; rr = rr->next) {
                                if(ldns_read_uint16(rr->ttl_data+4) 
-                                       != INET_SIZE)
+                                       != INET_SIZE) {
+                                       prev = rr;
                                        continue;
+                               }
                                memmove(&sa.sin_addr, rr->ttl_data+4+2, 
                                        INET_SIZE);
                                memmove(&addr, &sa, len);
-                               if(priv_lookup_addr(priv, &addr, len))
-                                       return 1;
+                               if(priv_lookup_addr(priv, &addr, len)) {
+                                       if(remove_rr("sanitize: removing public name with private address", pkt, rrset, prev, &rr, &addr, len))
+                                               return 1;
+                                       continue;
+                               }
+                               prev = rr;
                        }
                } else if(rrset->type == LDNS_RR_TYPE_AAAA) {
                        struct sockaddr_storage addr;
@@ -249,13 +277,19 @@ int priv_rrset_bad(struct iter_priv* priv, ldns_buffer* pkt,
                        sa.sin6_port = (in_port_t)htons(UNBOUND_DNS_PORT);
                        for(rr = rrset->rr_first; rr; rr = rr->next) {
                                if(ldns_read_uint16(rr->ttl_data+4) 
-                                       != INET6_SIZE)
+                                       != INET6_SIZE) {
+                                       prev = rr;
                                        continue;
+                               }
                                memmove(&sa.sin6_addr, rr->ttl_data+4+2, 
                                        INET6_SIZE);
                                memmove(&addr, &sa, len);
-                               if(priv_lookup_addr(priv, &addr, len)) 
-                                       return 1;
+                               if(priv_lookup_addr(priv, &addr, len)) {
+                                       if(remove_rr("sanitize: removing public name with private address", pkt, rrset, prev, &rr, &addr, len))
+                                               return 1;
+                                       continue;
+                               }
+                               prev = rr;
                        }
                } 
        }
index f6264f8d0c9bcb7c053ed9a89bfc20287909ef84..e6e51c159b09b9419c15c65fe4845c46f4b34e25 100644 (file)
@@ -92,6 +92,8 @@ int priv_apply_cfg(struct iter_priv* priv, struct config_file* cfg);
 
 /**
  * See if rrset is bad.
+ * Will remove individual RRs that are bad (if possible) to
+ * sanitize the RRset without removing it completely.
  * @param priv: structure for private address storage.
  * @param pkt: packet to decompress rrset name in.
  * @param rrset: the rrset to examine, A or AAAA.
index 6147c96a9e37eb9e0e7e18fa48d90ed299b01d88..999f878027fde642a578c480adaf20e2c235b576 100644 (file)
@@ -62,7 +62,7 @@ static void
 remove_rrset(const char* str, ldns_buffer* pkt, struct msg_parse* msg, 
        struct rrset_parse* prev, struct rrset_parse** rrset)
 {
-       if(verbosity >= VERB_QUERY 
+       if(verbosity >= VERB_QUERY && str
                && (*rrset)->dname_len <= LDNS_MAX_DOMAINLEN) {
                uint8_t buf[LDNS_MAX_DOMAINLEN+1];
                dname_pkt_copy(pkt, buf, (*rrset)->dname);
@@ -646,14 +646,16 @@ scrub_sanitize(ldns_buffer* pkt, struct msg_parse* msg,
 
                /* remove private addresses */
                if( (rrset->type == LDNS_RR_TYPE_A || 
-                       rrset->type == LDNS_RR_TYPE_AAAA) &&
-                       priv_rrset_bad(ie->priv, pkt, rrset)) {
+                       rrset->type == LDNS_RR_TYPE_AAAA)) {
 
                        /* do not set servfail since this leads to too
                         * many drops of other people using rfc1918 space */
-                       remove_rrset("sanitize: removing public name with "
-                               "private address", pkt, msg, prev, &rrset);
-                       continue;
+                       /* also do not remove entire rrset, unless all records
+                        * in it are bad */
+                       if(priv_rrset_bad(ie->priv, pkt, rrset)) {
+                               remove_rrset(NULL, pkt, msg, prev, &rrset);
+                               continue;
+                       }
                }
                
                /* skip DNAME records -- they will always be followed by a 
index f0f9ef427fa5f743ead3d9bb463d02709618e17c..013d6be016e94b2745c2567de0b53cb55ecc51bc 100644 (file)
@@ -1409,6 +1409,35 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq,
        return 1;
 }
 
+/** see if last resort is possible - does config allow queries to parent */
+static int
+can_have_last_resort(struct module_env* env, struct delegpt* dp,
+       struct iter_qstate* iq)
+{
+       struct delegpt* fwddp;
+       struct iter_hints_stub* stub;
+       /* do not process a last resort (the parent side) if a stub
+        * or forward is configured, because we do not want to go 'above'
+        * the configured servers */
+       if(!dname_is_root(dp->name) && (stub = (struct iter_hints_stub*)
+               name_tree_find(&env->hints->tree, dp->name, dp->namelen,
+               dp->namelabs, iq->qchase.qclass)) &&
+               /* has_parent side is turned off for stub_first, where we
+                * are allowed to go to the parent */
+               stub->dp->has_parent_side_NS) {
+               verbose(VERB_QUERY, "configured stub servers failed -- returning SERVFAIL");
+               return 0;
+       }
+       if((fwddp = forwards_find(env->fwds, dp->name, iq->qchase.qclass)) &&
+               /* has_parent_side is turned off for forward_first, where
+                * we are allowed to go to the parent */
+               fwddp->has_parent_side_NS) {
+               verbose(VERB_QUERY, "configured forward servers failed -- returning SERVFAIL");
+               return 0;
+       }
+       return 1;
+}
+
 /**
  * Called by processQueryTargets when it would like extra targets to query
  * but it seems to be out of options.  At last resort some less appealing
@@ -1430,6 +1459,11 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq,
        verbose(VERB_ALGO, "No more query targets, attempting last resort");
        log_assert(iq->dp);
 
+       if(!can_have_last_resort(qstate->env, iq->dp, iq)) {
+               /* fail -- no more targets, no more hope of targets, no hope 
+                * of a response. */
+               return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
+       }
        if(!iq->dp->has_parent_side_NS && dname_is_root(iq->dp->name)) {
                struct delegpt* p = hints_lookup_root(qstate->env->hints,
                        iq->qchase.qclass);
index f28307971b4d3f15cf9e9edd677cbde1848554f9..18f34e45414361e366e3d098db9a20bbaad26fde 100644 (file)
@@ -124,7 +124,7 @@ find_id(struct ub_ctx* ctx, int* id)
 }
 
 struct ctx_query* 
-context_new(struct ub_ctx* ctx, char* name, int rrtype, int rrclass, 
+context_new(struct ub_ctx* ctx, const char* name, int rrtype, int rrclass, 
        ub_callback_t cb, void* cbarg)
 {
        struct ctx_query* q = (struct ctx_query*)calloc(1, sizeof(*q));
index 8898f3ebfdf92d53780a6f2e4e1098d9b737683d..23db869ac75168a44609c4e1af4e8c505fe16457 100644 (file)
@@ -234,7 +234,7 @@ void context_query_delete(struct ctx_query* q);
  * @param cbarg: user arg for async queries.
  * @return new ctx_query or NULL for malloc failure.
  */
-struct ctx_query* context_new(struct ub_ctx* ctx, char* name, int rrtype,
+struct ctx_query* context_new(struct ub_ctx* ctx, const char* name, int rrtype,
         int rrclass, ub_callback_t cb, void* cbarg);
 
 /**
index 10d00ddc521d32f0e9b454f6724a42c5c87a6a71..ae865a71eaeff0f528487128fab41a76c6012e01 100644 (file)
@@ -229,7 +229,7 @@ ub_ctx_delete(struct ub_ctx* ctx)
 }
 
 int 
-ub_ctx_set_option(struct ub_ctx* ctx, char* opt, char* val)
+ub_ctx_set_option(struct ub_ctx* ctx, const char* opt, const char* val)
 {
        lock_basic_lock(&ctx->cfglock);
        if(ctx->finalized) {
@@ -245,7 +245,7 @@ ub_ctx_set_option(struct ub_ctx* ctx, char* opt, char* val)
 }
 
 int
-ub_ctx_get_option(struct ub_ctx* ctx, char* opt, char** str)
+ub_ctx_get_option(struct ub_ctx* ctx, const char* opt, char** str)
 {
        int r;
        lock_basic_lock(&ctx->cfglock);
@@ -258,7 +258,7 @@ ub_ctx_get_option(struct ub_ctx* ctx, char* opt, char** str)
 }
 
 int 
-ub_ctx_config(struct ub_ctx* ctx, char* fname)
+ub_ctx_config(struct ub_ctx* ctx, const char* fname)
 {
        lock_basic_lock(&ctx->cfglock);
        if(ctx->finalized) {
@@ -274,7 +274,7 @@ ub_ctx_config(struct ub_ctx* ctx, char* fname)
 }
 
 int 
-ub_ctx_add_ta(struct ub_ctx* ctx, char* ta)
+ub_ctx_add_ta(struct ub_ctx* ctx, const char* ta)
 {
        char* dup = strdup(ta);
        if(!dup) return UB_NOMEM;
@@ -294,7 +294,7 @@ ub_ctx_add_ta(struct ub_ctx* ctx, char* ta)
 }
 
 int 
-ub_ctx_add_ta_file(struct ub_ctx* ctx, char* fname)
+ub_ctx_add_ta_file(struct ub_ctx* ctx, const char* fname)
 {
        char* dup = strdup(fname);
        if(!dup) return UB_NOMEM;
@@ -314,7 +314,7 @@ ub_ctx_add_ta_file(struct ub_ctx* ctx, char* fname)
 }
 
 int 
-ub_ctx_trustedkeys(struct ub_ctx* ctx, char* fname)
+ub_ctx_trustedkeys(struct ub_ctx* ctx, const char* fname)
 {
        char* dup = strdup(fname);
        if(!dup) return UB_NOMEM;
@@ -547,7 +547,7 @@ ub_wait(struct ub_ctx* ctx)
 }
 
 int 
-ub_resolve(struct ub_ctx* ctx, char* name, int rrtype, 
+ub_resolve(struct ub_ctx* ctx, const char* name, int rrtype, 
        int rrclass, struct ub_result** result)
 {
        struct ctx_query* q;
@@ -591,7 +591,7 @@ ub_resolve(struct ub_ctx* ctx, char* name, int rrtype,
 }
 
 int 
-ub_resolve_async(struct ub_ctx* ctx, char* name, int rrtype, 
+ub_resolve_async(struct ub_ctx* ctx, const char* name, int rrtype, 
        int rrclass, void* mydata, ub_callback_t callback, int* async_id)
 {
        struct ctx_query* q;
@@ -732,7 +732,7 @@ ub_strerror(int err)
 }
 
 int 
-ub_ctx_set_fwd(struct ub_ctx* ctx, char* addr)
+ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr)
 {
        struct sockaddr_storage storage;
        socklen_t stlen;
@@ -804,7 +804,7 @@ ub_ctx_set_fwd(struct ub_ctx* ctx, char* addr)
 }
 
 int 
-ub_ctx_resolvconf(struct ub_ctx* ctx, char* fname)
+ub_ctx_resolvconf(struct ub_ctx* ctx, const char* fname)
 {
        FILE* in;
        int numserv = 0;
@@ -890,7 +890,7 @@ ub_ctx_resolvconf(struct ub_ctx* ctx, char* fname)
 }
 
 int
-ub_ctx_hosts(struct ub_ctx* ctx, char* fname)
+ub_ctx_hosts(struct ub_ctx* ctx, const char* fname)
 {
        FILE* in;
        char buf[1024], ldata[1024];
@@ -1016,7 +1016,8 @@ int ub_ctx_print_local_zones(struct ub_ctx* ctx)
 }
 
 /* Add a new zone */
-int ub_ctx_zone_add(struct ub_ctx* ctx, char *zone_name, char *zone_type)
+int ub_ctx_zone_add(struct ub_ctx* ctx, const char *zone_name, 
+       const char *zone_type)
 {
        enum localzone_type t;
        struct local_zone* z;
@@ -1056,7 +1057,7 @@ int ub_ctx_zone_add(struct ub_ctx* ctx, char *zone_name, char *zone_type)
 }
 
 /* Remove zone */
-int ub_ctx_zone_remove(struct ub_ctx* ctx, char *zone_name)
+int ub_ctx_zone_remove(struct ub_ctx* ctx, const char *zone_name)
 {   
        struct local_zone* z;
        uint8_t* nm;
@@ -1082,7 +1083,7 @@ int ub_ctx_zone_remove(struct ub_ctx* ctx, char *zone_name)
 }
 
 /* Add new RR data */
-int ub_ctx_data_add(struct ub_ctx* ctx, char *data)
+int ub_ctx_data_add(struct ub_ctx* ctx, const char *data)
 {
        ldns_buffer* buf;
        int res = ub_ctx_finalize(ctx);
@@ -1100,7 +1101,7 @@ int ub_ctx_data_add(struct ub_ctx* ctx, char *data)
 }
 
 /* Remove RR data */
-int ub_ctx_data_remove(struct ub_ctx* ctx, char *data)
+int ub_ctx_data_remove(struct ub_ctx* ctx, const char *data)
 {
        uint8_t* nm;
        int nmlabs;
index d435bf28d35e433283870e30f295d3c3c59dce17..01e8253e3026bb9fe134b73431ca9c4c978d4744 100644 (file)
 extern "C" {
 #endif
 
+/** the version of this header file */
+#define UNBOUND_VERSION_MAJOR @UNBOUND_VERSION_MAJOR@
+#define UNBOUND_VERSION_MINOR @UNBOUND_VERSION_MINOR@
+#define UNBOUND_VERSION_MICRO @UNBOUND_VERSION_MICRO@
+
 /**
  * The validation context is created to hold the resolver status,
  * validation keys and a small cache (containing messages, rrsets,
@@ -245,7 +250,7 @@ void ub_ctx_delete(struct ub_ctx* ctx);
  * @param val: value of the option.
  * @return: 0 if OK, else error.
  */
-int ub_ctx_set_option(struct ub_ctx* ctx, char* opt, char* val);
+int ub_ctx_set_option(struct ub_ctx* ctx, const char* opt, const char* val);
 
 /**
  * Get an option from the context.
@@ -261,7 +266,7 @@ int ub_ctx_set_option(struct ub_ctx* ctx, char* opt, char* val);
  *     returned in the string.
  * @return 0 if OK else an error code (malloc failure, syntax error).
  */
-int ub_ctx_get_option(struct ub_ctx* ctx, char* opt, char** str);
+int ub_ctx_get_option(struct ub_ctx* ctx, const char* opt, char** str);
 
 /**
  * setup configuration for the given context.
@@ -273,7 +278,7 @@ int ub_ctx_get_option(struct ub_ctx* ctx, char* opt, char** str);
  *     routines exist.
  * @return: 0 if OK, else error.
  */
-int ub_ctx_config(struct ub_ctx* ctx, char* fname);
+int ub_ctx_config(struct ub_ctx* ctx, const char* fname);
 
 /**
  * Set machine to forward DNS queries to, the caching resolver to use. 
@@ -292,7 +297,7 @@ int ub_ctx_config(struct ub_ctx* ctx, char* fname);
  *     If the addr is NULL, forwarding is disabled.
  * @return 0 if OK, else error.
  */
-int ub_ctx_set_fwd(struct ub_ctx* ctx, char* addr);
+int ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr);
 
 /**
  * Read list of nameservers to use from the filename given.
@@ -308,7 +313,7 @@ int ub_ctx_set_fwd(struct ub_ctx* ctx, char* addr);
  * @param fname: file name string. If NULL "/etc/resolv.conf" is used.
  * @return 0 if OK, else error.
  */
-int ub_ctx_resolvconf(struct ub_ctx* ctx, char* fname);
+int ub_ctx_resolvconf(struct ub_ctx* ctx, const char* fname);
 
 /**
  * Read list of hosts from the filename given.
@@ -321,7 +326,7 @@ int ub_ctx_resolvconf(struct ub_ctx* ctx, char* fname);
  * @param fname: file name string. If NULL "/etc/hosts" is used.
  * @return 0 if OK, else error.
  */
-int ub_ctx_hosts(struct ub_ctx* ctx, char* fname);
+int ub_ctx_hosts(struct ub_ctx* ctx, const char* fname);
 
 /**
  * Add a trust anchor to the given context.
@@ -334,7 +339,7 @@ int ub_ctx_hosts(struct ub_ctx* ctx, char* fname);
  *     [domainname] [TTL optional] [type] [class optional] [rdata contents]
  * @return 0 if OK, else error.
  */
-int ub_ctx_add_ta(struct ub_ctx* ctx, char* ta);
+int ub_ctx_add_ta(struct ub_ctx* ctx, const char* ta);
 
 /**
  * Add trust anchors to the given context.
@@ -345,7 +350,7 @@ int ub_ctx_add_ta(struct ub_ctx* ctx, char* ta);
  * @param fname: filename of file with keyfile with trust anchors.
  * @return 0 if OK, else error.
  */
-int ub_ctx_add_ta_file(struct ub_ctx* ctx, char* fname);
+int ub_ctx_add_ta_file(struct ub_ctx* ctx, const char* fname);
 
 /**
  * Add trust anchors to the given context.
@@ -357,7 +362,7 @@ int ub_ctx_add_ta_file(struct ub_ctx* ctx, char* fname);
  *     anchors.
  * @return 0 if OK, else error.
  */
-int ub_ctx_trustedkeys(struct ub_ctx* ctx, char* fname);
+int ub_ctx_trustedkeys(struct ub_ctx* ctx, const char* fname);
 
 /**
  * Set debug output (and error output) to the specified stream.
@@ -442,7 +447,7 @@ int ub_process(struct ub_ctx* ctx);
  *     in that case (out of memory).
  * @return 0 if OK, else error.
  */
-int ub_resolve(struct ub_ctx* ctx, char* name, int rrtype, 
+int ub_resolve(struct ub_ctx* ctx, const char* name, int rrtype, 
        int rrclass, struct ub_result** result);
 
 /**
@@ -473,7 +478,7 @@ int ub_resolve(struct ub_ctx* ctx, char* name, int rrtype,
  *     cancel the query.
  * @return 0 if OK, else error.
  */
-int ub_resolve_async(struct ub_ctx* ctx, char* name, int rrtype, 
+int ub_resolve_async(struct ub_ctx* ctx, const char* name, int rrtype, 
        int rrclass, void* mydata, ub_callback_t callback, int* async_id);
 
 /**
@@ -520,7 +525,8 @@ int ub_ctx_print_local_zones(struct ub_ctx* ctx);
  * @param zone_type: type of the zone (like for unbound.conf) in text.
  * @return 0 if OK, else error.
  */
-int ub_ctx_zone_add(struct ub_ctx* ctx, char *zone_name, char *zone_type);
+int ub_ctx_zone_add(struct ub_ctx* ctx, const char *zone_name, 
+       const char *zone_type);
 
 /**
  * Remove zone from local authority info of the library.
@@ -529,7 +535,7 @@ int ub_ctx_zone_add(struct ub_ctx* ctx, char *zone_name, char *zone_type);
  *     If it does not exist, nothing happens.
  * @return 0 if OK, else error.
  */
-int ub_ctx_zone_remove(struct ub_ctx* ctx, char *zone_name);
+int ub_ctx_zone_remove(struct ub_ctx* ctx, const char *zone_name);
 
 /**
  * Add localdata to the library local authority info.
@@ -539,7 +545,7 @@ int ub_ctx_zone_remove(struct ub_ctx* ctx, char *zone_name);
  *     "www.example.com IN A 127.0.0.1"
  * @return 0 if OK, else error.
  */
-int ub_ctx_data_add(struct ub_ctx* ctx, char *data);
+int ub_ctx_data_add(struct ub_ctx* ctx, const char *data);
 
 /**
  * Remove localdata from the library local authority info.
@@ -547,7 +553,7 @@ int ub_ctx_data_add(struct ub_ctx* ctx, char *data);
  * @param data: the name to delete all data from, like "www.example.com".
  * @return 0 if OK, else error.
  */
-int ub_ctx_data_remove(struct ub_ctx* ctx, char *data);
+int ub_ctx_data_remove(struct ub_ctx* ctx, const char *data);
 
 /**
  * Get a version string from the libunbound implementation.
index c2e2f82cae4a4b12f5bbcb1d60f1642147ec11b3..d23ffe1d8452e1edaa8492d45883d3926038c7f2 100755 (executable)
@@ -109,16 +109,23 @@ replace_all () {
     info "Updating '$1' with today's date."
     replace_text "$1" "@date@" "`date +'%b %e, %Y'`"
 }
+
+replace_version () {
+    local v1=`echo $2 | sed -e 's/^.*\..*\.//'`
+    local v2=`echo $3 | sed -e 's/^.*\..*\.//'`
+    replace_text "$1" "VERSION_MICRO\],\[$v1" "VERSION_MICRO\],\[$v2"
+}
     
 check_svn_root () {
     # Check if SVNROOT is specified.
     if [ -z "$SVNROOT" ]; then
-       if test -f .svn/entries; then
-             eval `svn info | grep 'URL:' | sed -e 's/URL: /url=/' | head -1`
-             SVNROOT="$url"
-       fi
-       if test -z "$SVNROOT"; then
-           error "SVNROOT must be specified (using -d)"
+       if svn info 2>&1 | grep "not a working copy" >/dev/null; then
+               if test -z "$SVNROOT"; then
+                   error "SVNROOT must be specified (using -d)"
+               fi
+       else
+            eval `svn info | grep 'URL:' | sed -e 's/URL: /url=/' | head -1`
+            SVNROOT="$url"
        fi
     fi
 }
@@ -191,7 +198,7 @@ if [ "$DOWIN" = "yes" ]; then
        info "Crosscompile windows dist"
         cross="yes"
        configure="mingw32-configure"
-       strip="i686-pc-mingw32-strip"
+       strip="i686-w64-mingw32-strip"
        makensis="makensis"     # from mingw32-nsis package
        # flags for crosscompiled dependency libraries
        cross_flag=""
@@ -208,7 +215,7 @@ if [ "$DOWIN" = "yes" ]; then
                cd openssl-* || error_cleanup "no openssl-X dir in tarball"
                # configure for crosscompile, without CAPI because it fails
                # cross-compilation and it is not used anyway
-               sslflags="no-asm --cross-compile-prefix=i686-pc-mingw32- -DOPENSSL_NO_CAPIENG mingw"
+               sslflags="no-asm --cross-compile-prefix=i686-w64-mingw32- -DOPENSSL_NO_CAPIENG mingw"
                info "winssl: Configure $sslflags"
                ./Configure --prefix="$sslinstall" $sslflags || error_cleanup "OpenSSL Configure failed"
                info "winssl: make"
@@ -277,7 +284,7 @@ if [ "$DOWIN" = "yes" ]; then
                version2=`echo $version | sed -e 's/rc.*$//' -e 's/_20.*$//'`
                version2="${version2}_`date +%Y%m%d`"
        fi
-       replace_text "configure.ac" "AC_INIT(unbound, $version" "AC_INIT(unbound, $version2"
+       replace_version "configure.ac" "$version" "$version2"
        version="$version2"
        info "Rebuilding configure script (autoconf) snapshot."
        autoconf || error_cleanup "Autoconf failed."
@@ -382,7 +389,7 @@ if test ! -z "$LDNSDIR"; then
           diff -q $LDNSDIR/examples/ldns-testpkts.h testcode/ldns-testpkts.h; then
                info "ldns-testpkts.c and ldns-testpkts.h are OK"
        else
-               error_cleanup "ldns-testpkts is different in ldns and unbound"
+               info "ldns-testpkts is different in ldns and unbound"
        fi
 fi
 cd $temp_dir/unbound
@@ -404,7 +411,7 @@ if [ "$RC" != "no" ]; then
     version2="${version}rc$RC"
     info "Version number: $version2"
 
-    replace_text "configure.ac" "AC_INIT(unbound, $version" "AC_INIT(unbound, $version2"
+    replace_version "configure.ac" "$version" "$version2"
     version="$version2"
     RECONFIGURE="yes"
 fi
@@ -414,7 +421,7 @@ if [ "$SNAPSHOT" = "yes" ]; then
     version2="${version}_`date +%Y%m%d`"
     info "Snapshot version number: $version2"
 
-    replace_text "configure.ac" "AC_INIT(unbound, $version" "AC_INIT(unbound, $version2"
+    replace_version "configure.ac" "$version" "$version2"
     version="$version2"
     RECONFIGURE="yes"
 fi
index 647cbe07ebd9841b668de96445fe64ea0b2a9b9c..368faaea42119c6dc9c5f46a428dc2085503f889 100644 (file)
@@ -328,6 +328,8 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
 #    else
                        closesocket(s);
 #    endif
+                       *noproto = 0;
+                       *inuse = 0;
                        return -1;
                }
 #  elif defined(IP_DONTFRAG)
@@ -341,12 +343,15 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
 #    else
                        closesocket(s);
 #    endif
+                       *noproto = 0;
+                       *inuse = 0;
                        return -1;
                }
 #  endif /* IPv4 MTU */
        }
        if(bind(s, (struct sockaddr*)addr, addrlen) != 0) {
                *noproto = 0;
+               *inuse = 0;
 #ifndef USE_WINSOCK
 #ifdef EADDRINUSE
                *inuse = (errno == EADDRINUSE);
index 720a29b02426c02d3e44dbb8a95592bcbe9674b3..f4a8bc365ff7bfea83ff862da5f7af0a070f7ebd 100644 (file)
@@ -63,7 +63,9 @@
 #include "edns-subnet/subnet-whitelist.h"
 #endif
 
+#ifdef HAVE_OPENSSL_SSL_H
 #include <openssl/ssl.h>
+#endif
 
 #ifdef HAVE_NETDB_H
 #include <netdb.h>
index ef0031c94316bb4c88242f7b67af40de303c828e..2b6d4232b177e32f87708481c3167ec9a8574d21 100644 (file)
@@ -1231,7 +1231,7 @@ xml_charhandle(void *userData, const XML_Char *s, int len)
                printf("'\n");
        }
        if(strcasecmp(data->tag, "Zone") == 0) {
-               if(BIO_write(data->czone, s, len) <= 0) {
+               if(BIO_write(data->czone, s, len) < 0) {
                        if(verb) printf("out of memory in BIO_write\n");
                        exit(0);
                }
@@ -1242,7 +1242,7 @@ xml_charhandle(void *userData, const XML_Char *s, int len)
                return;
        b = xml_selectbio(data, data->tag);
        if(b) {
-               if(BIO_write(b, s, len) <= 0) {
+               if(BIO_write(b, s, len) < 0) {
                        if(verb) printf("out of memory in BIO_write\n");
                        exit(0);
                }
@@ -1435,7 +1435,7 @@ xml_startelem(void *userData, const XML_Char *name, const XML_Char **atts)
 static void
 xml_append_str(BIO* b, const char* s)
 {
-       if(BIO_write(b, s, (int)strlen(s)) <= 0) {
+       if(BIO_write(b, s, (int)strlen(s)) < 0) {
                if(verb) printf("out of memory in BIO_write\n");
                exit(0);
        }
@@ -1459,7 +1459,7 @@ xml_append_bio(BIO* b, BIO* a)
                        z[i] = ' ';
        }
        /* write to BIO */
-       if(BIO_write(b, z, len) <= 0) {
+       if(BIO_write(b, z, len) < 0) {
                if(verb) printf("out of memory in BIO_write\n");
                exit(0);
        }
@@ -1545,7 +1545,7 @@ xml_parse_setup(XML_Parser parser, struct xml_data* data, time_t now)
        }
        snprintf(buf, sizeof(buf), "; created by unbound-anchor on %s",
                ctime(&now));
-       if(BIO_write(data->ds, buf, (int)strlen(buf)) <= 0) {
+       if(BIO_write(data->ds, buf, (int)strlen(buf)) < 0) {
                if(verb) printf("out of memory\n");
                exit(0);
        }
index cc48866c5dbd75e89c5f8241f615efb1d2fbcd21..43a52fd49674337046147d33203861d49abd5b7a 100644 (file)
@@ -106,6 +106,8 @@ usage()
        printf("  list_forwards                 list forward-zones in use\n");
        printf("  list_local_zones              list local-zones in use\n");
        printf("  list_local_data               list local-data RRs in use\n");
+       printf("  insecure_add zone             add domain-insecure zone\n");
+       printf("  insecure_remove zone          remove domain-insecure zone\n");
        printf("  forward_add [+i] zone addr..  add forward-zone with servers\n");
        printf("  forward_remove [+i] zone      remove forward zone\n");
        printf("  stub_add [+ip] zone addr..    add stub-zone with servers\n");
index 14a187e3ff2633661b9bcb104247457e21e7e104..61f8250d89ec14bbc61abc3dae3938380363626e 100644 (file)
@@ -349,13 +349,14 @@ provide_file_10(SSL* ssl, char* fname)
                "rb"
 #endif
                );
-       int r;
+       size_t r;
        const char* rcode = "200 OK";
        if(!in) {
                char hdr[1024];
                rcode = "404 File not found";
-               r = snprintf(hdr, sizeof(hdr), "HTTP/1.1 %s\r\n\r\n", rcode);
-               if(SSL_write(ssl, hdr, r) <= 0) {
+               snprintf(hdr, sizeof(hdr), "HTTP/1.1 %s\r\n\r\n", rcode);
+               r = strlen(hdr);
+               if(SSL_write(ssl, hdr, (int)r) <= 0) {
                        /* write failure */
                }
                return;
@@ -371,16 +372,20 @@ provide_file_10(SSL* ssl, char* fname)
        }
        avail = len+header_reserve;
        at = buf;
-       r = snprintf(at, avail, "HTTP/1.1 %s\r\n", rcode);
+       snprintf(at, avail, "HTTP/1.1 %s\r\n", rcode);
+       r = strlen(at);
        at += r;
        avail -= r;
-       r = snprintf(at, avail, "Server: petal/%s\r\n", PACKAGE_VERSION);
+       snprintf(at, avail, "Server: petal/%s\r\n", PACKAGE_VERSION);
+       r = strlen(at);
        at += r;
        avail -= r;
-       r = snprintf(at, avail, "Content-Length: %u\r\n", (unsigned)len);
+       snprintf(at, avail, "Content-Length: %u\r\n", (unsigned)len);
+       r = strlen(at);
        at += r;
        avail -= r;
-       r = snprintf(at, avail, "\r\n");
+       snprintf(at, avail, "\r\n");
+       r = strlen(at);
        at += r;
        avail -= r;
        if(avail < len) { /* robust */
@@ -409,7 +414,7 @@ provide_file_chunked(SSL* ssl, char* fname)
        char buf[16384];
        char* at = buf;
        size_t avail = sizeof(buf);
-       int r;
+       size_t r;
        FILE* in = fopen(fname, 
 #ifndef USE_WINSOCK
                "r"
@@ -423,19 +428,24 @@ provide_file_chunked(SSL* ssl, char* fname)
        }
 
        /* print headers */
-       r = snprintf(at, avail, "HTTP/1.1 %s\r\n", rcode);
+       snprintf(at, avail, "HTTP/1.1 %s\r\n", rcode);
+       r = strlen(at);
        at += r;
        avail -= r;
-       r = snprintf(at, avail, "Server: petal/%s\r\n", PACKAGE_VERSION);
+       snprintf(at, avail, "Server: petal/%s\r\n", PACKAGE_VERSION);
+       r = strlen(at);
        at += r;
        avail -= r;
-       r = snprintf(at, avail, "Transfer-Encoding: chunked\r\n");
+       snprintf(at, avail, "Transfer-Encoding: chunked\r\n");
+       r = strlen(at);
        at += r;
        avail -= r;
-       r = snprintf(at, avail, "Connection: close\r\n");
+       snprintf(at, avail, "Connection: close\r\n");
+       r = strlen(at);
        at += r;
        avail -= r;
-       r = snprintf(at, avail, "\r\n");
+       snprintf(at, avail, "\r\n");
+       r = strlen(at);
        at += r;
        avail -= r;
        if(avail < 16) { /* robust */
@@ -448,7 +458,8 @@ provide_file_chunked(SSL* ssl, char* fname)
                /* read chunk; space-16 for xxxxCRLF..CRLF0CRLFCRLF (3 spare)*/
                size_t red = in?fread(tmpbuf, 1, avail-16, in):0;
                /* prepare chunk */
-               r = snprintf(at, avail, "%x\r\n", (unsigned)red);
+               snprintf(at, avail, "%x\r\n", (unsigned)red);
+               r = strlen(at);
                if(verb >= 3)
                {printf("chunk len %x\n", (unsigned)red); fflush(stdout);}
                at += r;
@@ -458,17 +469,20 @@ provide_file_chunked(SSL* ssl, char* fname)
                        memmove(at, tmpbuf, red);
                        at += red;
                        avail -= red;
-                       r = snprintf(at, avail, "\r\n");
+                       snprintf(at, avail, "\r\n");
+                       r = strlen(at);
                        at += r;
                        avail -= r;
                }
                if(in && feof(in) && red != 0) {
-                       r = snprintf(at, avail, "0\r\n");
+                       snprintf(at, avail, "0\r\n");
+                       r = strlen(at);
                        at += r;
                        avail -= r;
                }
                if(!in || feof(in)) {
-                       r = snprintf(at, avail, "\r\n");
+                       snprintf(at, avail, "\r\n");
+                       r = strlen(at);
                        at += r;
                        avail -= r;
                }
diff --git a/testdata/iter_fwdfirstequal.rpl b/testdata/iter_fwdfirstequal.rpl
new file mode 100644 (file)
index 0000000..d8da470
--- /dev/null
@@ -0,0 +1,157 @@
+; config options
+server:
+       target-fetch-policy: "0 0 0 0 0"
+
+stub-zone:
+       name: "."
+       stub-addr: 193.0.14.129         # K.ROOT-SERVERS.NET.
+
+forward-zone:
+       name: "."
+       forward-addr: 1.2.3.6           # failing resolver
+       forward-first: yes
+
+CONFIG_END
+
+SCENARIO_BEGIN Test forward-first directive with equal stub name configured.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+       ADDRESS 193.0.14.129 
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS        K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET.    IN      A       193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN A
+SECTION AUTHORITY
+com.   IN NS   a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net.    IN      A       192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+       ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com.   IN NS   a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net.    IN      A       192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+       ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A  10.20.30.40
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+RANGE_END
+
+; local resolver (that fails a lot)
+RANGE_BEGIN 0 100
+       ADDRESS 1.2.3.6
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA SERVFAIL
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+;example.com.  IN NS   ns.example.com.
+SECTION ADDITIONAL
+;ns.example.com.               IN      A       1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+;www.example.com. IN A 10.20.30.50
+SECTION AUTHORITY
+;example.com.  IN NS   ns.example.com.
+SECTION ADDITIONAL
+;ns.example.com.               IN      A       1.2.3.4
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A  10.20.30.40
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+
+SCENARIO_END
index 63fa5331bb2082dc0700e4f37dfeedbcbeda6b1e..d0f63c9ab881f1a9f1d6c953be572716cd4f421d 100644 (file)
@@ -163,6 +163,22 @@ example.com.       IN NS   ns.example.com.
 SECTION ADDITIONAL
 ns.example.com.                IN      A       1.2.3.4
 ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+toss.example.com. IN A
+SECTION ANSWER
+toss.example.com. IN A 10.20.30.40
+toss.example.com. IN A 1.2.3.4
+toss.example.com. IN A 10.20.30.41
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
 RANGE_END
 
 ; public address is not scrubbed
@@ -243,4 +259,27 @@ SECTION ANSWER
 mail.example.net. IN A 10.20.30.40
 ENTRY_END
 
+; rest of RRset intact, only 10/8 tossed away.
+STEP 60 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+toss.example.com. IN A
+ENTRY_END
+
+STEP 70 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+toss.example.com. IN A
+SECTION ANSWER
+; toss.example.com. IN A       10.20.30.40
+toss.example.com. IN A 1.2.3.4
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+
 SCENARIO_END
diff --git a/testdata/iter_stublastresort.rpl b/testdata/iter_stublastresort.rpl
new file mode 100644 (file)
index 0000000..b607789
--- /dev/null
@@ -0,0 +1,259 @@
+; config options
+server:
+       target-fetch-policy: "0 0 0 0 0"
+
+stub-zone:
+       name: "."
+       stub-addr: 193.0.14.129         # K.ROOT-SERVERS.NET.
+
+stub-zone:
+       name: "example.com"
+       stub-addr: 1.2.3.6
+       stub-prime: yes
+
+CONFIG_END
+
+SCENARIO_BEGIN Test stub with stub-prime and last resort fallback
+; the last resort fallback should not activate, as the
+; configured stub must be used for this data, or its primed data.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+       ADDRESS 193.0.14.129 
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS        K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET.    IN      A       193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN A
+SECTION AUTHORITY
+com.   IN NS   a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net.    IN      A       192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+       ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com.   IN NS   a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net.    IN      A       192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+       ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A  10.20.30.40
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+RANGE_END
+
+; the stub-prime server.
+; local authority (that fails a lot)
+RANGE_BEGIN 0 100
+       ADDRESS 1.2.3.6
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.7
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+;ns.example.com.               IN      A       1.2.3.7
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+;www.example.com. IN A 10.20.30.70
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+; the primed server
+RANGE_BEGIN 0 100
+       ADDRESS 1.2.3.7
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com.                IN      A       1.2.3.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+;www.example.com. IN A 10.20.30.80
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+; crap server that the primed server refers to.
+RANGE_BEGIN 0 100
+       ADDRESS 1.2.3.8
+
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+;www.example.com. IN A 10.20.30.50
+SECTION AUTHORITY
+;example.com.  IN NS   ns.example.com.
+SECTION ADDITIONAL
+;ns.example.com.               IN      A       1.2.3.4
+ENTRY_END
+
+SCENARIO_END
index ceab04ae6658221deaf813c5d5f0d350602058d4..4dc3541865897f8a748668f89866f0798a98e0a6 100644 (file)
@@ -210,6 +210,7 @@ config_create(void)
        cfg->control_port = UNBOUND_CONTROL_PORT;
        cfg->minimal_responses = 0;
        cfg->rrset_roundrobin = 0;
+       cfg->max_udp_size = 4096;
        if(!(cfg->server_key_file = strdup(RUN_DIR"/unbound_server.key"))) 
                goto error_exit;
        if(!(cfg->server_cert_file = strdup(RUN_DIR"/unbound_server.pem"))) 
@@ -340,7 +341,11 @@ int config_set_option(struct config_file* cfg, const char* opt,
                cfg->use_syslog = 0;
                free(cfg->logfile);
                return (cfg->logfile = strdup(val)) != NULL;
-       } 
+       }
+       else if(strcmp(opt, "log-time-ascii:") == 0)
+       { IS_YES_OR_NO; cfg->log_time_ascii = (strcmp(val, "yes") == 0);
+         log_set_time_asc(cfg->log_time_ascii); }
+       else S_SIZET_NONZERO("max-udp-size:", max_udp_size)
        else S_YNO("use-syslog:", use_syslog)
        else S_YNO("extended-statistics:", stat_extended)
        else S_YNO("statistics-cumulative:", stat_cumulative)
@@ -371,7 +376,10 @@ int config_set_option(struct config_file* cfg, const char* opt,
        else S_POW2("rrset-cache-slabs:", rrset_cache_slabs)
        else S_YNO("prefetch:", prefetch)
        else S_YNO("prefetch-key:", prefetch_key)
-       else S_NUMBER_OR_ZERO("cache-max-ttl:", max_ttl)
+       else if(strcmp(opt, "cache-max-ttl:") == 0)
+       { IS_NUMBER_OR_ZERO; cfg->max_ttl = atoi(val); MAX_TTL=cfg->max_ttl;}
+       else if(strcmp(opt, "cache-min-ttl:") == 0)
+       { IS_NUMBER_OR_ZERO; cfg->min_ttl = atoi(val); MIN_TTL=cfg->min_ttl;}
        else S_NUMBER_OR_ZERO("infra-host-ttl:", host_ttl)
        else S_POW2("infra-cache-slabs:", infra_cache_slabs)
        else S_SIZET_NONZERO("infra-cache-numhosts:", infra_cache_numhosts)
@@ -436,6 +444,10 @@ int config_set_option(struct config_file* cfg, const char* opt,
        else S_NUMBER_OR_ZERO("max-client-subnet-ipv6:", max_client_subnet_ipv6)
        else S_NUMBER_OR_ZERO("client-subnet-opcode:", client_subnet_opcode)
 #endif
+       /* val_sig_skew_min and max are copied into val_env during init,
+        * so this does not update val_env with set_option */
+       else S_NUMBER_OR_ZERO("val-sig-skew-min:", val_sig_skew_min)
+       else S_NUMBER_OR_ZERO("val-sig-skew-max:", val_sig_skew_max)
        else if (strcmp(opt, "outgoing-interface:") == 0) {
                char* d = strdup(val);
                char** oi = (char**)malloc((cfg->num_out_ifs+1)*sizeof(char*));
@@ -535,8 +547,9 @@ config_collate_cat(struct config_strlist* list)
                        return NULL;
                }
                snprintf(w, left, "%s\n", s->str);
-               w += this+1;
-               left -= this+1;
+               this = strlen(w);
+               w += this;
+               left -= this;
        }
        return r;
 }
@@ -591,6 +604,7 @@ config_get_option(struct config_file* cfg, const char* opt,
        else O_YNO(opt, "statistics-cumulative", stat_cumulative)
        else O_YNO(opt, "extended-statistics", stat_extended)
        else O_YNO(opt, "use-syslog", use_syslog)
+       else O_YNO(opt, "log-time-ascii", log_time_ascii)
        else O_DEC(opt, "num-threads", num_threads)
        else O_IFC(opt, "interface", num_ifs, ifs)
        else O_IFC(opt, "outgoing-interface", num_out_ifs, out_ifs)
@@ -612,6 +626,7 @@ config_get_option(struct config_file* cfg, const char* opt,
        else O_YNO(opt, "prefetch-key", prefetch_key)
        else O_YNO(opt, "prefetch", prefetch)
        else O_DEC(opt, "cache-max-ttl", max_ttl)
+       else O_DEC(opt, "cache-min-ttl", min_ttl)
        else O_DEC(opt, "infra-host-ttl", host_ttl)
        else O_DEC(opt, "infra-cache-slabs", infra_cache_slabs)
        else O_MEM(opt, "infra-cache-numhosts", infra_cache_numhosts)
@@ -686,6 +701,10 @@ config_get_option(struct config_file* cfg, const char* opt,
        else O_DEC(opt, "max-client-subnet-ipv6", max_client_subnet_ipv6)
        else O_DEC(opt, "client-subnet-opcode", client_subnet_opcode)
 #endif
+       else O_DEC(opt, "max-udp-size", max_udp_size)
+       else O_STR(opt, "python-script", python_script)
+       else O_DEC(opt, "val-sig-skew-min", val_sig_skew_min)
+       else O_DEC(opt, "val-sig-skew-max", val_sig_skew_max)
        /* not here:
         * outgoing-permit, outgoing-avoid - have list of ports
         * local-zone - zones and nodefault variables
index d070211cbbe886eeb793efac4261ff8ced253458..245ced8144f73e4ff03dbced569ce651070ee53f 100644 (file)
@@ -306,6 +306,9 @@ struct config_file {
 
        /* RRSet roundrobin */
        int rrset_roundrobin;
+
+       /* maximum UDP response size */
+       size_t max_udp_size;
 };
 
 /**
index 2e12567f487bafe102f2756ffd3b355c89366e34..c9c2e1b477b08f120123280cafc72207f840c0bb 100644 (file)
@@ -10,7 +10,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
+#define YY_FLEX_SUBMINOR_VERSION 36
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -143,15 +143,7 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -163,7 +155,12 @@ typedef unsigned int flex_uint32_t;
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
 #endif
 
-extern int yyleng;
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t yyleng;
 
 extern FILE *yyin, *yyout;
 
@@ -189,11 +186,6 @@ extern FILE *yyin, *yyout;
 
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
 #ifndef YY_STRUCT_YY_BUFFER_STATE
 #define YY_STRUCT_YY_BUFFER_STATE
 struct yy_buffer_state
@@ -211,7 +203,7 @@ struct yy_buffer_state
        /* Number of characters read into yy_ch_buf, not including EOB
         * characters.
         */
-       int yy_n_chars;
+       yy_size_t yy_n_chars;
 
        /* Whether we "own" the buffer - i.e., we know we created it,
         * and can realloc() it to grow it, and should free() it to
@@ -281,8 +273,8 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 
 /* yy_hold_char holds the character lost when yytext is formed. */
 static char yy_hold_char;
-static int yy_n_chars;         /* number of characters read into yy_ch_buf */
-int yyleng;
+static yy_size_t yy_n_chars;           /* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
 
 /* Points to current character in buffer. */
 static char *yy_c_buf_p = (char *) 0;
@@ -310,7 +302,7 @@ static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
 YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
 YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len  );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
 
 void *yyalloc (yy_size_t  );
 void *yyrealloc (void *,yy_size_t  );
@@ -371,8 +363,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 146
-#define YY_END_OF_BUFFER 147
+#define YY_NUM_RULES 143
+#define YY_END_OF_BUFFER 144
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -380,163 +372,157 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[1404] =
+static yyconst flex_int16_t yy_accept[1355] =
     {   0,
-        1,    1,  128,  128,  132,  132,  136,  136,  140,  140,
-        1,    1,  147,  144,    1,  126,  126,  145,    2,  145,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  128,
-      129,  129,  130,  145,  132,  133,  133,  134,  145,  139,
-      136,  137,  137,  138,  145,  140,  141,  141,  142,  145,
-      143,  127,    2,  131,  145,  143,  144,    0,    1,    2,
-        2,    2,    2,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  128,    0,  132,    0,  139,    0,  136,  140,    0,
-      143,    0,    2,    2,  143,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  143,  144,  144,  144,  144,  144,  144,  144,  144,
-
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  143,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,   62,  144,  144,
-
-      144,  144,  144,    6,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  143,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  143,  144,
-      144,  144,  144,   27,  144,  144,  144,  144,  144,  144,
-       12,   13,  144,   15,   14,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  122,  144,  144,  144,  144,  144,  144,    3,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-
-      144,  144,  144,  144,  144,  144,  144,  143,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  135,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,   30,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,   31,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,   81,  135,  144,  144,  144,
-
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,   80,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,   60,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,   20,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,   28,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-
-      144,  144,   29,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,   22,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,   25,   26,
-      144,  144,  144,   63,  144,   64,  144,   61,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,    5,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,   83,  144,  144,  144,
-
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  108,  107,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,   32,  144,  144,  144,  144,
-      144,  144,  144,  144,   66,   65,  144,  144,  144,  144,
-      144,  144,  104,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,   51,  144,  144,  144,  144,  144,
-
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  106,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,    4,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  101,  144,  144,  144,  144,  144,
-      144,  144,  144,  116,  102,  144,   21,  144,  144,  144,
-      144,   68,  144,   69,   67,  144,  144,  144,  144,  144,
-      144,   79,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  103,  144,  144,  144,  144,  144,  144,  144,  144,
-
-      144,  144,  144,  144,  144,  144,  144,  144,   59,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-       17,  144,  144,  144,   16,  144,   88,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,   39,
-       40,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,   70,  144,  144,  144,  144,  144,   78,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,   82,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  121,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-
-      144,  144,  144,   92,  144,   96,  144,  144,  144,  144,
-       73,  144,  144,  144,  114,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,   95,  144,
-      144,  144,  144,   41,   42,  144,   47,   97,  144,  109,
-      105,  144,  144,  144,   35,  144,   99,  144,  144,  144,
-      144,  144,    7,  144,   58,  113,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,   84,  144,  144,  123,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,   98,  144,
-
-      144,   34,   36,  144,  144,  144,  144,  144,   57,  144,
-      144,  144,  144,  144,  117,   18,   19,  144,  144,  144,
-      144,  144,  144,   55,  144,  144,  144,  144,  144,  144,
-      144,  144,  144,  144,  119,  144,  144,   33,  144,  144,
-      144,  144,  144,  144,   11,  144,  144,  144,  144,  144,
-      144,  144,  144,   10,  144,  144,   37,  144,  125,  144,
-      118,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,   91,   90,  144,  144,  120,  115,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,   43,  144,  144,
-      124,  144,  144,  144,  144,   38,  144,  144,  144,  144,
-
-       85,   87,  144,  144,  144,   89,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  144,   23,  144,  144,   74,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,  112,  144,  144,
-      144,  144,  144,  144,  144,   24,  144,  144,    9,  144,
-      144,  110,   48,  144,  144,  144,   94,  144,   75,   71,
-      144,  144,  144,   50,   54,   49,  144,   44,  144,  144,
-        8,  144,  144,   93,  144,  144,  144,   53,  144,   45,
-      144,  144,  144,  111,  144,  144,   86,   72,   52,   76,
-       77,   46,  144,  144,  144,  144,   56,  144,  144,  144,
-
-      144,  100,    0
+        1,    1,  125,  125,  129,  129,  133,  133,  137,  137,
+        1,    1,  144,  141,    1,  123,  123,  142,    2,  142,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  125,
+      126,  126,  127,  142,  129,  130,  130,  131,  142,  136,
+      133,  134,  134,  135,  142,  137,  138,  138,  139,  142,
+      140,  124,    2,  128,  142,  140,  141,    0,    1,    2,
+        2,    2,    2,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      125,    0,  129,    0,  136,    0,  133,  137,    0,  140,
+        0,    2,    2,  140,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  140,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  140,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,   62,  141,  141,  141,  141,  141,    6,  141,  141,
+
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  140,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  140,
+      141,  141,  141,  141,   27,  141,  141,  141,  141,  141,
+       12,   13,  141,   15,   14,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  118,  141,  141,  141,  141,  141,    3,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  140,  141,  141,  141,
+
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  132,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,   30,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,   31,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,   77,  132,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,   76,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,   60,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+       20,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,   28,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,   29,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,   22,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,   25,   26,  141,  141,  141,   63,  141,   64,  141,
+       61,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,    5,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,   79,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+
+      141,  141,  141,  141,  141,  141,  104,  103,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,   32,  141,  141,
+      141,  141,  141,  141,  141,   66,   65,  141,  141,  141,
+      141,  141,  141,  100,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,   51,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  102,  141,  141,  141,  141,  141,  141,  141,  141,
+
+      141,    4,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,   97,  141,  141,  141,  141,  141,  141,
+      141,  112,   98,  141,   21,  141,  141,  141,  141,   68,
+      141,   69,   67,  141,  141,  141,  141,  141,  141,   75,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,   99,
+      141,  141,  141,  141,  122,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,   59,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,   17,  141,  141,
+
+      141,   16,  141,   84,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,   39,   40,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,   70,  141,
+      141,  141,  141,  141,   74,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,   78,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  117,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,   88,  141,   92,
+      141,  141,  141,  141,   73,  141,  141,  110,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+
+      141,   91,  141,  141,  141,  141,   41,   42,  141,   47,
+       93,  141,  105,  101,  141,  141,   35,  141,   95,  141,
+      141,  141,  141,  141,    7,  141,   58,  109,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,   80,  141,  141,  119,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,   94,  141,
+       34,   36,  141,  141,  141,  141,  141,   57,  141,  141,
+      141,  141,  113,   18,   19,  141,  141,  141,  141,  141,
+      141,   55,  141,  141,  141,  141,  141,  141,  141,  141,
+
+      141,  115,  141,  141,   33,  141,  141,  141,  141,  141,
+      141,   11,  141,  141,  141,  141,  141,  141,  141,   10,
+      141,  141,   37,  141,  121,  114,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,   87,   86,  141,  116,
+      111,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,   43,  141,  120,  141,  141,  141,  141,   38,  141,
+      141,  141,   81,   83,  141,  141,  141,   85,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,   23,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  108,  141,  141,  141,  141,
+
+      141,  141,  141,   24,  141,    9,  141,  141,  106,   48,
+      141,  141,  141,   90,  141,   71,  141,  141,  141,   50,
+       54,   49,  141,   44,  141,    8,  141,  141,   89,  141,
+      141,  141,   53,  141,   45,  141,  107,  141,  141,   82,
+       72,   52,   46,  141,  141,  141,  141,   56,  141,  141,
+      141,  141,   96,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -579,644 +565,621 @@ static yyconst flex_int32_t yy_meta[40] =
         1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[1418] =
+static yyconst flex_int16_t yy_base[1369] =
     {   0,
         0,    0,   37,   40,   44,   51,   63,   75,   56,   68,
-       87,  108, 2619, 2604,   50, 2803, 2803, 2803,  129,   94,
-       70,  104,  122,   90,   92,  124,  132,   95,   84,  111,
-      140,  142,   50,  135,  151,  152,  161,  154,  175, 2533,
-     2803, 2803, 2803,   70, 2450, 2803, 2803, 2803,   42, 2214,
-     1931, 2803, 2803, 2803,  192, 1473, 2803, 2803, 2803,  186,
-     1243, 2803,  196, 2803,  200,  193, 1117,  206,  120,    0,
-      219,    0,    0,  103,  170,  138,  145,  199,  203,  201,
-      202,  204,  206,  221,  209,  220,  224,  225,  226,  227,
-      231,  233,  229,  241,  244,  235,  238,  250,  249,  255,
-
-      257,  258,  260,  261,  263,  267,  262,  270,  115,  269,
-      273,  279,  277,  284,  275,  278,  286,   49,  290,  292,
-      296,  989,  306,  945,  308,  771,  317,  640,  332,  309,
-      303,  321,  327,    0,  317,  323,  329,  322,  325,  326,
-      330,  331,  339,  338,  345,  352,  346,  336,  344,  342,
-      350,  348,  357,  359,  363,  358,  362,  360,  368,  369,
-      381,  388,  390,  370,  377,  391,  387,  400,  401,  397,
-      393,  389,  402,  403,  405,  406,  407,  410,  412,  411,
-      417,  419,  418,  420,  423,  429,  426,  431,  439,  442,
-      441,  428,  444,  446,  452,  448,  449,  451,  450,  458,
-
-      456,  461,  469,  455,  467,  472,  473,  474,  481,  478,
-      479,  484,  490,  486,  487,  488,  491,  493,  495,  496,
-      502,  498,  499,  500,  503,  507,  514,  516,  519,  524,
-      515,  525,  526,  529,  531,  532,  533,  535,  536,  544,
-      540,  548,  546,  549,  547,  553,  554,  562,  559,  555,
-      558,  565,  567,  566,  587,  568,  573,  571,  575,  581,
-      577,  593,  584,  585,  595,  598,  591,  600,  607,  618,
-      608,  609,  617,  620,  619,  622,  623,  624,  627,  630,
-      632,  631,  642,  645,  644,  643,  646,  652,  660,  647,
-      654,  657,  658,  661,  666,  656,  664, 2803,  672,  667,
-
-      674,  675,  678, 2803,  676,  679,  680,  681,  683,  692,
-      695,  685,  689,  693,  700,  701,  702,  704,  724,  707,
-      705,  714,  708,  712,  710,  716,  722,  726,  729,  720,
-      731,  736,  733,  743,  734,  747,  757,  746,  745,  748,
-      755,  764,  756,  760,  765,  766,  770,  774,  776,  782,
-      779,  785,  786,  767,  787,  789,  795,  794,  791,  797,
-      804,  800,  801,  806,  802,  812,  810,  808,  816,  821,
-      822,  823,  824,  813,  832,  830,  831,  837,  838,  829,
-      839,  841,  845,  844,  855,  856,  852,  857,  858,  864,
-      865,  866,  862,  869,  871,  872,  873,  874,  876,  878,
-
-      879,  886,  882,  884,  889,  895,  888,  897,  898,  899,
-      902,  903,  908,  909,  905,  912,  915,  917,  920,  918,
-      922,  927,  928, 2803,  930,  938,  932,  934,  935,  939,
-     2803, 2803,  165, 2803, 2803,  941,  940,  947,  958,  959,
-      955,  944,  942,  965,  957,  969,  972,  964,  974,  980,
-      970,  981,  984,  985,  982,  987,  988,  995,  991, 1003,
-      999, 1001, 1004, 1006, 1008, 1010, 1009, 1018, 1011, 1025,
-     1013, 2803, 1021, 1022, 1027, 1023, 1030, 1031, 2803, 1029,
-     1033, 1035, 1037, 1040, 1043, 1041, 1044, 1046, 1047, 1049,
-     1051, 1048, 1053, 1066, 1069, 1058, 1064, 1070, 1071, 1078,
-
-     1085, 1081, 1072, 1074, 1088, 1082, 1094, 1096, 1086, 1099,
-     1089, 1091, 1097, 1098, 1120, 1100, 1105, 1106, 1110, 1107,
-     1112, 1116, 1114, 1132, 1113, 1127, 1134, 1142, 1139, 1137,
-     1135, 1147, 1151, 1148, 2803, 1159, 1153, 1155, 1157, 1160,
-     1162, 1161, 1163, 1164, 1167, 1169, 1177, 2803, 1173, 1175,
-     1176, 1183, 1185, 1189, 1186, 1196, 1203, 2803, 1205, 1206,
-     1179, 1199, 1192, 1208, 1201, 1213, 1215, 1216, 1217, 1219,
-     1227, 1224, 1228, 1229, 1230, 1231, 1234, 1236, 1235, 1237,
-     1238, 1241, 1247, 1257, 1260, 1251, 1262, 1245, 1239, 1259,
-     1267, 1265, 1268, 1269, 1270, 2803,  237, 1272, 1274, 1273,
-
-     1280, 1281, 1282, 1285, 1278, 1287, 1291, 1279, 1297, 1299,
-     1300, 1302, 1303, 1304, 1305, 1306, 1309, 1307, 1314, 1315,
-     1319, 1317, 1320, 1321, 1322, 1327, 1324, 1326, 2803, 1337,
-     1333, 1338, 1334, 1340, 1353, 1343, 1349, 1355, 1359, 1357,
-     1361, 1363, 1351, 1365, 1367, 1368, 1374, 1377, 1373, 1375,
-     1376, 1380, 2803, 1383, 1382, 1384, 1389, 1388, 1393, 1395,
-     1396, 1398, 1399, 1405, 1412, 2803, 1414, 1408, 1400, 1421,
-     1406, 1423, 1425, 1428, 1415, 1429, 1431, 1432, 1418, 1438,
-     1202, 2803, 1445, 1446, 1442, 1448, 1449, 1433, 1450, 1454,
-     1451, 1455, 1462, 1456, 1459, 1460, 1463, 1464, 1466, 1467,
-
-     1469, 1468, 2803, 1485, 1470, 1472, 1477, 1475, 1483, 1494,
-     1488, 1489, 1495, 1497, 1499, 1500, 1504, 1502, 1501, 1513,
-     1510, 1514, 1515, 1516, 1528, 1529, 1526, 2803, 1530, 1517,
-     1532, 1538, 1540, 1534, 1541, 1547, 1543, 1544, 1554, 1545,
-     1546, 1548, 1552, 1555, 1556, 1557, 1558, 1561, 1570, 1563,
-     1573, 1568, 1579, 1575, 1581, 1583, 1584, 1591, 2803, 2803,
-     1587, 1589, 1598, 2803, 1595, 2803, 1597, 2803, 1599, 1600,
-     1605, 1606, 1607, 1608, 1610, 1613, 1614, 1616, 1611, 1617,
-     1618, 1619, 2803, 1625, 1626, 1627, 1629, 1630, 1634, 1632,
-     1642, 1636, 1651, 1635, 1645, 1647, 2803, 1656, 1648, 1654,
-
-     1663, 1664, 1660, 1662, 1666, 1667, 1668, 1669, 1671, 1675,
-     1676, 1677, 1679, 1682, 1683, 1685, 1689, 1687, 1688, 1690,
-     1700, 1702, 1692, 1703, 2803, 2803, 1706, 1710, 1693, 1714,
-     1716, 1717, 1720, 1718, 1726, 1723, 1724, 1728, 1731, 1733,
-     1734, 1735, 1737, 1739, 1740, 2803, 1748, 1742, 1750, 1751,
-     1756, 1757, 1754, 1761, 2803, 2803, 1763, 1765, 1766, 1768,
-     1769, 1772, 2803, 1773, 1775, 1776, 1777, 1783, 1780, 1774,
-     1786, 1792, 1794, 1795, 1798, 1796, 1804, 1800, 1802, 1803,
-     1806, 1814, 1815, 1818, 1826, 1811, 1819, 1822, 1828, 1823,
-     1830, 1834, 1836, 1837, 2803, 1844, 1835, 1846, 1825, 1848,
-
-     1851, 1854, 1845, 1855, 1856, 1858, 1860, 1862, 1863, 1865,
-     1867, 2803, 1868, 1869, 1870, 1872, 1871, 1873, 1882, 1874,
-     1886, 2803, 1888, 1896, 1884, 1894, 1898, 1903, 1905, 1892,
-     1895, 1906, 1907, 1909, 1911, 1915, 1916, 1919, 1913, 1921,
-     1931, 1930, 1938, 1941, 1939, 1945, 1942, 1943, 1944, 1923,
-     1955, 1946, 1957, 1949, 2803, 1959, 1964, 1966, 1958, 1967,
-     1969, 1970, 1971, 2803, 2803, 1960, 2803, 1977, 1975, 1979,
-     1981, 2803, 1983, 2803, 2803, 1984, 1991, 1985, 1994, 1997,
-     2001, 2803, 1996, 1987, 2004, 1992, 2006, 2008, 2009, 2010,
-     2011, 2803, 2012, 2014, 2015, 2019, 2022, 2023, 2027, 2029,
-
-     2030, 2032, 2036, 2038, 2039, 2040, 2047, 2044, 2803, 2045,
-     2048, 2051, 2046, 2054, 2059, 2052, 2056, 2067, 2069, 2070,
-     2803, 2068, 2071, 2072, 2803, 2076, 2803, 2077, 2053, 2080,
-     2085, 2086, 2093, 2087, 2090, 2096, 2097, 2099, 2100, 2803,
-     2803, 2102, 2103, 2105, 2113, 2107, 2111, 2118, 2109, 2115,
-     2121, 2123, 2803, 2125, 2126, 2127, 2128, 2129, 2803, 2131,
-     2132, 2133, 2138, 2136, 2144, 2153, 2141, 2156, 2158, 2159,
-     2161, 2163, 2165, 2164, 2803, 2134, 2167, 2168, 2170, 2171,
-     2174, 2172, 2176, 2182, 2184, 2186, 2803, 2191, 2173, 2193,
-     2188, 2196, 2195, 2200, 2201, 2202, 2204, 2206, 2208, 2209,
-
-     2210, 2217, 2216, 2803, 2213, 2803, 2221, 2227, 2229, 2231,
-     2803, 2222, 2234, 2235, 2803, 2236, 2238, 2242, 2244, 2246,
-     2252, 2253, 2245, 2255, 2254, 2256, 2262, 2260, 2803, 2263,
-     2264, 2267, 2268, 2803, 2803, 2271, 2803, 2803, 2277, 2803,
-     2803, 2273, 2280, 2282, 2803, 2284, 2803, 2291, 2287, 2289,
-     2290, 2292, 2803, 2294, 2803, 2803, 2295, 2296, 2299, 2301,
-     2302, 2304, 2309, 2311, 2306, 2314, 2316, 2317, 2319, 2320,
-     2322, 2324, 2323, 2325, 2326, 2327, 2330, 2334, 2335, 2336,
-     2337, 2347, 2803, 2343, 2353, 2803, 2356, 2348, 2350, 2358,
-     2359, 2362, 2360, 2364, 2371, 2367, 2368, 2369, 2803, 2370,
-
-     2372, 2803, 2803, 2373, 2380, 2375, 2381, 2384, 2803, 2386,
-     2388, 2395, 2392, 2399, 2803, 2803, 2803, 2400, 2403, 2404,
-     2405, 2406, 2408, 2803, 2409, 2412, 2414, 2415, 2421, 2423,
-     2431, 2418, 2428, 2435, 2803, 2432, 2429, 2803, 2436, 2438,
-     2440, 2443, 2444, 2446, 2803, 2442, 2447, 2454, 2448, 2463,
-     2460, 2456, 2462, 2803, 2465, 2468, 2803, 2470, 2803, 2471,
-     2803, 2472, 2475, 2477, 2479, 2483, 2484, 2473, 2490, 2489,
-     2493, 2803, 2803, 2494, 2495, 2803, 2803, 2486, 2496, 2498,
-     2506, 2503, 2508, 2501, 2509, 2511, 2510, 2803, 2512, 2514,
-     2803, 2516, 2525, 2518, 2527, 2803, 2529, 2531, 2526, 2532,
-
-     2803, 2803, 2537, 2543, 2539, 2803, 2541, 2545, 2547, 2549,
-     2550, 2556, 2551, 2553, 2558, 2559, 2561, 2562, 2563, 2571,
-     2564, 2573, 2803, 2575, 2572, 2803, 2576, 2584, 2586, 2581,
-     2579, 2587, 2590, 2593, 2595, 2597, 2599, 2803, 2601, 2603,
-     2610, 2612, 2614, 2616, 2620, 2803, 2602, 2622, 2803, 2626,
-     2627, 2803, 2803, 2628, 2630, 2633, 2803, 2634, 2803, 2803,
-     2617, 2641, 2631, 2803, 2803, 2803, 2643, 2803, 2647, 2646,
-     2803, 2649, 2651, 2803, 2652, 2654, 2656, 2803, 2658, 2803,
-     2660, 2662, 2664, 2803, 2665, 2667, 2803, 2803, 2803, 2803,
-     2803, 2803, 2669, 2671, 2675, 2672, 2803, 2678, 2676, 2679,
-
-     2683, 2803, 2803, 2711, 2718, 2725, 2732, 2739,   94, 2746,
-     2753, 2760, 2767, 2774, 2781, 2788, 2795
+       87,  108, 2103, 2040,   50, 2711, 2711, 2711,  129,   94,
+       70,  104,  122,   90,   92,  115,  126,   95,   84,  132,
+      135,  138,   50,  142,  148,  156,  169,  164,  179, 2006,
+     2711, 2711, 2711,   70, 1888, 2711, 2711, 2711,   42, 1877,
+     1853, 2711, 2711, 2711,  197, 1667, 2711, 2711, 2711,  154,
+     1249, 2711,  201, 2711,  205,  111, 1027,  211,  120,    0,
+      222,    0,    0,  103,  158,  165,  149,  155,  168,  206,
+      207,  198,  217,  209,  204,  208,  215,  177,  227,  228,
+      231,  219,  235,  236,  229,  241,  244,  245,  246,  247,
+
+      249,  250,  257,  256,  258,  264,  265,  266,  268,  271,
+      277,  273,  275,  279,  282,  269,   49,  283,  280,  286,
+      974,  302,  784,  308,  697,  314,  632,  362,  309,  174,
+      318,  322,    0,  315,  319,  325,  317,  321,  323,  326,
+      333,  330,  336,  347,  339,  334,  337,  327,  291,  343,
+      341,  344,  345,  352,  349,  358,  363,  369,  365,  376,
+      377,  374,  373,  380,  381,  389,  390,  388,  387,  391,
+      392,  396,  397,  399,  400,  401,  402,  403,  409,  407,
+      408,  412,  428,  413,  415,  430,  431,  433,  417,  434,
+      436,  442,  438,  439,  440,  441,  447,  445,  455,  451,
+
+      457,  459,  460,  461,  468,  465,  473,  466,  480,  469,
+      476,  477,  478,  481,  483,  484,  490,  492,  487,  486,
+      488,  493,  500,  504,  505,  510,  512,  502,  511,  518,
+      521,  523,  524,  517,  529,  535,  531,  533,  534,  536,
+      539,  543,  545,  541,  542,  544,  547,  553,  548,  573,
+      554,  557,  559,  565,  567,  570,  579,  571,  568,  578,
+      577,  581,  594,  603,  586,  596,  598,  602,  605,  604,
+      609,  610,  611,  613,  618,  615,  617,  630,  628,  631,
+      629,  637,  640,  632,  639,  643,  641,  646,  644,  650,
+      651, 2711,  656,  654,  658,  659,  660, 2711,  661,  662,
+
+      663,  664,  665,  679,  667,  670,  676,  678,  683,  684,
+      686,  706,  689,  687,  696,  690,  694,  698,  715,  702,
+      699,  704,  708,  713,  720,  721,  718,  724,  729,  731,
+      728,  734,  736,  742,  738,  743,  744,  745,  747,  754,
+      757,  751,  762,  764,  770,  758,  766,  768,  774,  773,
+      775,  767,  781,  778,  782,  785,  789,  791,  792,  795,
+      799,  800,  794,  804,  802,  808,  811,  810,  812,  814,
+      819,  813,  821,  822,  823,  828,  837,  834,  830,  838,
+      845,  846,  847,  842,  843,  850,  851,  853,  854,  852,
+      855,  859,  870,  858,  875,  862,  878,  864,  868,  872,
+
+      879,  884,  881,  890,  891,  882,  892,  893,  894,  898,
+      901,  905,  897,  906, 2711,  916,  910,  912,  913,  917,
+     2711, 2711,  919, 2711, 2711,  920,  922,  923,  931,  937,
+      933,  924,  925,  940,  935,  945,  946,  948,  953,  957,
+      951,  958,  959,  961,  964,  965,  968,  970,  980,  981,
+      982,  966,  978,  984,  987,  988,  989,  991,  994, 1000,
+      997, 2711,  998,  999, 1003, 1006, 1007, 2711, 1008, 1009,
+     1011, 1012, 1015, 1014, 1020, 1019, 1017, 1032, 1025, 1022,
+     1026, 1033, 1043, 1040, 1042, 1045, 1048, 1049, 1050, 1059,
+     1052, 1056, 1058, 1065, 1062, 1064, 1067, 1068, 1069, 1072,
+
+     1075, 1076, 1100, 1077, 1079, 1078, 1080, 1085, 1084, 1086,
+     1101, 1107, 1097, 1110, 1114, 1087, 1112, 1119, 1118, 1120,
+     1122, 1125, 2711, 1128, 1131, 1130, 1135, 1136, 1137, 1138,
+     1140, 1142, 1144, 1143, 1155, 2711, 1147, 1151, 1153, 1154,
+     1156, 1160, 1163, 1170, 1178, 2711, 1180, 1181, 1164, 1174,
+     1176, 1183, 1177, 1187, 1188, 1089, 1184, 1195, 1191, 1197,
+     1199, 1201, 1203, 1204, 1205, 1206, 1207, 1208, 1210, 1209,
+     1221, 1228, 1214, 1231, 1217, 1225, 1232, 1237, 1227, 1234,
+     1235, 1238, 2711,  141, 1241, 1242, 1240, 1251, 1252, 1248,
+     1250, 1256, 1261, 1258, 1259, 1268, 1262, 1269, 1271, 1265,
+
+     1272, 1275, 1279, 1281, 1282, 1285, 1286, 1287, 1288, 1289,
+     1293, 1295, 1291, 1292, 2711, 1308, 1302, 1296, 1305, 1312,
+     1319, 1313, 1315, 1327, 1320, 1323, 1329, 1330, 1332, 1333,
+     1335, 1336, 1342, 1344, 1340, 1343, 1346, 1348, 2711, 1352,
+     1350, 1351, 1353, 1357, 1358, 1361, 1363, 1368, 1371, 1373,
+     2711, 1374, 1378, 1379, 1385, 1380, 1387, 1389, 1391, 1382,
+     1392, 1388, 1399, 1395, 1401, 1403, 2711, 1411, 1414, 1412,
+     1420, 1416, 1405, 1408, 1422, 1418, 1423, 1431, 1427, 1428,
+     1432, 1429, 1433, 1434, 1436, 1435, 2711, 1442, 1439, 1443,
+     1440, 1444, 1449, 1451, 1452, 1456, 1457, 1463, 1460, 1467,
+
+     1466, 1476, 1464, 1468, 1474, 1480, 1483, 1485, 1492, 1493,
+     1494, 2711, 1491, 1484, 1497, 1506, 1500, 1502, 1503, 1507,
+     1508, 1509, 1517, 1510, 1511, 1513, 1518, 1514, 1519, 1520,
+     1523, 1526, 1534, 1536, 1539, 1525, 1542, 1546, 1543, 1544,
+     1555, 2711, 2711, 1552, 1553, 1561, 2711, 1559, 2711, 1563,
+     2711, 1565, 1566, 1560, 1569, 1571, 1570, 1573, 1577, 1578,
+     1574, 1580, 1582, 1581, 1583, 2711, 1584, 1587, 1589, 1592,
+     1593, 1595, 1603, 1599, 1611, 1598, 1607, 1608, 2711, 1617,
+     1609, 1616, 1625, 1623, 1610, 1626, 1627, 1630, 1629, 1631,
+     1633, 1637, 1638, 1639, 1640, 1641, 1646, 1644, 1648, 1649,
+
+     1650, 1651, 1653, 1654, 1662, 1663, 2711, 2711, 1665, 1673,
+     1675, 1666, 1677, 1678, 1681, 1683, 1689, 1688, 1685, 1691,
+     1694, 1695, 1696, 1698, 1699, 1701, 1702, 2711, 1708, 1706,
+     1715, 1707, 1719, 1718, 1723, 2711, 2711, 1722, 1725, 1711,
+     1727, 1728, 1733, 2711, 1734, 1735, 1736, 1737, 1740, 1743,
+     1747, 1748, 1750, 1753, 1756, 1757, 1760, 1759, 1758, 1766,
+     1762, 1765, 1773, 1775, 1783, 1777, 1780, 1781, 1785, 1786,
+     1788, 1790, 1796, 1792, 2711, 1802, 1793, 1805, 1779, 1808,
+     1809, 1817, 1813, 1794, 1803, 1815, 1816, 1819, 1820, 1821,
+     1824, 2711, 1829, 1831, 1826, 1833, 1834, 1828, 1847, 1836,
+
+     1839, 2711, 1845, 1856, 1849, 1852, 1858, 1860, 1861, 1853,
+     1863, 1864, 1866, 1868, 1867, 1871, 1880, 1872, 1875, 1890,
+     1892, 1899, 1900, 1884, 1902, 1901, 1903, 1904, 1886, 1910,
+     1906, 1914, 1908, 2711, 1912, 1918, 1922, 1919, 1924, 1926,
+     1927, 2711, 2711, 1923, 2711, 1930, 1933, 1934, 1937, 2711,
+     1939, 2711, 2711, 1940, 1949, 1941, 1947, 1950, 1956, 2711,
+     1953, 1945, 1961, 1957, 1959, 1963, 1964, 1966, 1967, 2711,
+     1968, 1970, 1974, 1977, 2711, 1969, 1980, 1982, 1984, 1988,
+     1991, 1993, 1985, 1994, 2000, 1997, 2711, 1999, 2001, 2005,
+     2007, 2011, 2010, 2013, 2009, 2024, 2025, 2711, 2026, 2016,
+
+     2017, 2711, 2028, 2711, 2031, 2027, 2032, 2043, 2035, 2046,
+     2038, 2047, 2048, 2049, 2055, 2050, 2711, 2711, 2056, 2060,
+     2063, 2061, 2066, 2068, 2067, 2069, 2070, 2075, 2711, 2076,
+     2078, 2077, 2079, 2080, 2711, 2084, 2085, 2086, 2089, 2092,
+     2104, 2106, 2095, 2110, 2112, 2107, 2114, 2116, 2117, 2711,
+     2118, 2120, 2121, 2125, 2127, 2081, 2128, 2132, 2130, 2122,
+     2135, 2711, 2138, 2139, 2142, 2144, 2146, 2147, 2149, 2150,
+     2151, 2154, 2155, 2157, 2160, 2161, 2164, 2711, 2162, 2711,
+     2167, 2177, 2180, 2183, 2711, 2171, 2173, 2711, 2187, 2188,
+     2195, 2196, 2198, 2203, 2199, 2189, 2206, 2191, 2207, 2213,
+
+     2214, 2711, 2181, 2216, 2215, 2217, 2711, 2711, 2224, 2711,
+     2711, 2227, 2711, 2711, 2228, 2230, 2711, 2232, 2711, 2239,
+     2235, 2222, 2218, 2237, 2711, 2244, 2711, 2711, 2241, 2245,
+     2248, 2249, 2251, 2253, 2256, 2257, 2258, 2259, 2260, 2261,
+     2263, 2265, 2266, 2179, 2267, 2268, 2270, 2274, 2277, 2279,
+     2280, 2290, 2711, 2278, 2291, 2711, 2298, 2293, 2286, 2282,
+     2299, 2303, 2304, 2306, 2312, 2309, 2308, 2310, 2711, 2313,
+     2711, 2711, 2311, 2315, 2321, 2314, 2316, 2711, 2326, 2322,
+     2336, 2338, 2711, 2711, 2711, 2339, 2328, 2333, 2343, 2344,
+     2345, 2711, 2346, 2347, 2351, 2354, 2358, 2360, 2367, 2364,
+
+     2366, 2711, 2368, 2370, 2711, 2371, 2372, 2375, 2377, 2378,
+     2380, 2711, 2376, 2381, 2388, 2383, 2391, 2393, 2394, 2711,
+     2396, 2397, 2711, 2403, 2711, 2711, 2398, 2406, 2408, 2413,
+     2415, 2404, 2409, 2421, 2420, 2424, 2711, 2711, 2425, 2711,
+     2711, 2417, 2426, 2427, 2429, 2432, 2433, 2435, 2437, 2440,
+     2439, 2711, 2441, 2711, 2442, 2451, 2443, 2445, 2711, 2452,
+     2453, 2456, 2711, 2711, 2457, 2466, 2464, 2711, 2469, 2468,
+     2470, 2471, 2476, 2478, 2472, 2479, 2482, 2480, 2458, 2483,
+     2492, 2494, 2711, 2496, 2493, 2497, 2501, 2504, 2505, 2506,
+     2507, 2509, 2510, 2512, 2514, 2711, 2515, 2516, 2526, 2531,
+
+     2535, 2523, 2537, 2711, 2538, 2711, 2541, 2542, 2711, 2711,
+     2543, 2545, 2548, 2711, 2549, 2711, 2532, 2556, 2546, 2711,
+     2711, 2711, 2558, 2711, 2559, 2711, 2561, 2562, 2711, 2564,
+     2566, 2568, 2711, 2570, 2711, 2572, 2711, 2573, 2574, 2711,
+     2711, 2711, 2711, 2576, 2578, 2584, 2579, 2711, 2581, 2586,
+     2587, 2590, 2711, 2711, 2619, 2626, 2633, 2640, 2647,   94,
+     2654, 2661, 2668, 2675, 2682, 2689, 2696, 2703
     } ;
 
-static yyconst flex_int16_t yy_def[1418] =
+static yyconst flex_int16_t yy_def[1369] =
     {   0,
-     1403,    1, 1404, 1404, 1405, 1405, 1406, 1406, 1407, 1407,
-     1408, 1408, 1403, 1409, 1403, 1403, 1403, 1403, 1410, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1411,
-     1403, 1403, 1403, 1411, 1412, 1403, 1403, 1403, 1412, 1413,
-     1403, 1403, 1403, 1403, 1413, 1414, 1403, 1403, 1403, 1414,
-     1415, 1403, 1416, 1403, 1415, 1415, 1409, 1409, 1403, 1417,
-     1410, 1417, 1410, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1411, 1411, 1412, 1412, 1413, 1413, 1403, 1414, 1414,
-     1415, 1415, 1416, 1416, 1415, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1415, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1415, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1403, 1409, 1409,
-
-     1409, 1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1415, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1415, 1409,
-     1409, 1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409, 1409,
-     1403, 1403, 1409, 1403, 1403, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1403, 1409, 1409, 1409, 1409, 1409, 1409, 1403, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1415, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1403, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1403, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1403, 1415, 1409, 1409, 1409,
-
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1403, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1403, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1403, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-
-     1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1403, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1403, 1403,
-     1409, 1409, 1409, 1403, 1409, 1403, 1409, 1403, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1403, 1409, 1409, 1409,
-
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1403, 1403, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1403, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1403, 1403, 1409, 1409, 1409, 1409,
-     1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409,
-
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1403, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1403, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1403, 1403, 1409, 1403, 1409, 1409, 1409,
-     1409, 1403, 1409, 1403, 1403, 1409, 1409, 1409, 1409, 1409,
-     1409, 1403, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1403, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1403, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1403, 1409, 1409, 1409, 1403, 1409, 1403, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1403,
-     1403, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409, 1403, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1403, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-
-     1409, 1409, 1409, 1403, 1409, 1403, 1409, 1409, 1409, 1409,
-     1403, 1409, 1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1403, 1409,
-     1409, 1409, 1409, 1403, 1403, 1409, 1403, 1403, 1409, 1403,
-     1403, 1409, 1409, 1409, 1403, 1409, 1403, 1409, 1409, 1409,
-     1409, 1409, 1403, 1409, 1403, 1403, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1403, 1409, 1409, 1403, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1403, 1409,
-
-     1409, 1403, 1403, 1409, 1409, 1409, 1409, 1409, 1403, 1409,
-     1409, 1409, 1409, 1409, 1403, 1403, 1403, 1409, 1409, 1409,
-     1409, 1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1403, 1409, 1409, 1403, 1409, 1409,
-     1409, 1409, 1409, 1409, 1403, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1403, 1409, 1409, 1403, 1409, 1403, 1409,
-     1403, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1403, 1403, 1409, 1409, 1403, 1403, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1403, 1409, 1409,
-     1403, 1409, 1409, 1409, 1409, 1403, 1409, 1409, 1409, 1409,
-
-     1403, 1403, 1409, 1409, 1409, 1403, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
-     1409, 1409, 1403, 1409, 1409, 1403, 1409, 1409, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1403, 1409, 1409,
-     1409, 1409, 1409, 1409, 1409, 1403, 1409, 1409, 1403, 1409,
-     1409, 1403, 1403, 1409, 1409, 1409, 1403, 1409, 1403, 1403,
-     1409, 1409, 1409, 1403, 1403, 1403, 1409, 1403, 1409, 1409,
-     1403, 1409, 1409, 1403, 1409, 1409, 1409, 1403, 1409, 1403,
-     1409, 1409, 1409, 1403, 1409, 1409, 1403, 1403, 1403, 1403,
-     1403, 1403, 1409, 1409, 1409, 1409, 1403, 1409, 1409, 1409,
-
-     1409, 1403,    0, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-     1403, 1403, 1403, 1403, 1403, 1403, 1403
+     1354,    1, 1355, 1355, 1356, 1356, 1357, 1357, 1358, 1358,
+     1359, 1359, 1354, 1360, 1354, 1354, 1354, 1354, 1361, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1362,
+     1354, 1354, 1354, 1362, 1363, 1354, 1354, 1354, 1363, 1364,
+     1354, 1354, 1354, 1354, 1364, 1365, 1354, 1354, 1354, 1365,
+     1366, 1354, 1367, 1354, 1366, 1366, 1360, 1360, 1354, 1368,
+     1361, 1368, 1361, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1362, 1362, 1363, 1363, 1364, 1364, 1354, 1365, 1365, 1366,
+     1366, 1367, 1367, 1366, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1366, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1366, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1354, 1360, 1360, 1360, 1360, 1360, 1354, 1360, 1360,
+
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1366, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1366,
+     1360, 1360, 1360, 1360, 1354, 1360, 1360, 1360, 1360, 1360,
+     1354, 1354, 1360, 1354, 1354, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1354, 1360, 1360, 1360, 1360, 1360, 1354, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1366, 1360, 1360, 1360,
+
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1354, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1354, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1354, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1354, 1366, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1354, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1354, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1354, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1354, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1354, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1354, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1354, 1354, 1360, 1360, 1360, 1354, 1360, 1354, 1360,
+     1354, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1354, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1354, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+
+     1360, 1360, 1360, 1360, 1360, 1360, 1354, 1354, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1354, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1354, 1354, 1360, 1360, 1360,
+     1360, 1360, 1360, 1354, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1354, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1354, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+
+     1360, 1354, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1354, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1354, 1354, 1360, 1354, 1360, 1360, 1360, 1360, 1354,
+     1360, 1354, 1354, 1360, 1360, 1360, 1360, 1360, 1360, 1354,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1354,
+     1360, 1360, 1360, 1360, 1354, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1354, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1354, 1360, 1360,
+
+     1360, 1354, 1360, 1354, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1354, 1354, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1354, 1360,
+     1360, 1360, 1360, 1360, 1354, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1354,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1354, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1354, 1360, 1354,
+     1360, 1360, 1360, 1360, 1354, 1360, 1360, 1354, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+
+     1360, 1354, 1360, 1360, 1360, 1360, 1354, 1354, 1360, 1354,
+     1354, 1360, 1354, 1354, 1360, 1360, 1354, 1360, 1354, 1360,
+     1360, 1360, 1360, 1360, 1354, 1360, 1354, 1354, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1354, 1360, 1360, 1354, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1354, 1360,
+     1354, 1354, 1360, 1360, 1360, 1360, 1360, 1354, 1360, 1360,
+     1360, 1360, 1354, 1354, 1354, 1360, 1360, 1360, 1360, 1360,
+     1360, 1354, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+
+     1360, 1354, 1360, 1360, 1354, 1360, 1360, 1360, 1360, 1360,
+     1360, 1354, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1354,
+     1360, 1360, 1354, 1360, 1354, 1354, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1354, 1354, 1360, 1354,
+     1354, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1354, 1360, 1354, 1360, 1360, 1360, 1360, 1354, 1360,
+     1360, 1360, 1354, 1354, 1360, 1360, 1360, 1354, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1354, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1354, 1360, 1360, 1360, 1360,
+
+     1360, 1360, 1360, 1354, 1360, 1354, 1360, 1360, 1354, 1354,
+     1360, 1360, 1360, 1354, 1360, 1354, 1360, 1360, 1360, 1354,
+     1354, 1354, 1360, 1354, 1360, 1354, 1360, 1360, 1354, 1360,
+     1360, 1360, 1354, 1360, 1354, 1360, 1354, 1360, 1360, 1354,
+     1354, 1354, 1354, 1360, 1360, 1360, 1360, 1354, 1360, 1360,
+     1360, 1360, 1354,    0, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354
     } ;
 
-static yyconst flex_int16_t yy_nxt[2843] =
+static yyconst flex_int16_t yy_nxt[2751] =
     {   0,
        14,   15,   16,   17,   18,   19,   18,   14,   14,   14,
        14,   18,   20,   21,   14,   22,   23,   24,   25,   14,
        26,   27,   28,   29,   30,   31,   32,   33,   34,   14,
        35,   36,   37,   38,   39,   14,   14,   14,   14,   41,
-       42,   43,   41,   42,   43,  124,   46,   47,  124,   44,
+       42,   43,   41,   42,   43,  123,   46,   47,  123,   44,
        48,   69,   44,   46,   47,   70,   49,   48,   57,   58,
        59,   68,   68,   49,   51,   52,   53,   54,   60,   18,
-       57,   58,   59,  122,  122,   55,   51,   52,   53,   54,
-       60,   18,   68,  103,  188,   74,   75,   55,   15,   16,
+       57,   58,   59,  121,  121,   55,   51,   52,   53,   54,
+       60,   18,   68,  102,  185,   74,   75,   55,   15,   16,
        17,   62,   63,   64,   67,   67,   68,   67,   67,   65,
 
-       67,   94,   68,   76,   68,   67,   85,   68,   66,   15,
-       16,   17,   62,   63,   64,   68,   68,   77,  136,   87,
-       65,   69,   93,   68,   78,   70,   86,   68,   79,   66,
-       72,   80,   72,   72,   68,   72,   68,   88,   95,   81,
-       72,   73,  177,   82,   68,   89,   83,   68,   90,   84,
-       68,   91,   68,   96,   68,  100,  104,   68,   92,  101,
-      139,   97,  105,   68,   68,  106,   68,   98,  108,  111,
-      138,   99,  107,   68,  115,  102,  116,   68,  109,  112,
-      118,  110,   68,  113,  114,  119,  137,   68,  120,  129,
-      129,  117,  121,  126,  520,  126,  126,   72,  126,   72,
-
-       72,  131,   72,  131,  131,  132,  131,   67,  134,   67,
-       67,   68,   67,   68,   68,   68,   68,   67,   68,  135,
-       72,   68,   72,   72,  141,   72,  143,  142,  146,  140,
-       72,   73,   68,   68,  144,  148,   68,   68,   68,   68,
-      145,   68,  152,   68,  153,   68,  147,   68,  155,  132,
-       68,  156,  149,   68,  150,  151,   68,  154,  159,  161,
-      158,   68,   68,  162,  164,  157,  165,   68,  166,   68,
-       68,  163,   68,   68,   68,   68,  168,  171,  160,   68,
-      167,   68,   68,  169,  173,   68,  181,   68,  174,   68,
-       68,   68,  170,  172,  175,  176,   68,  183,   68,  179,
-
-      178,  182,   68,  180,   68,  185,  186,  189,   68,  122,
-      122,  124,  129,  129,  124,  132,  190,  184,  126,  187,
-      126,  126,  131,  126,  131,  131,  191,  131,   72,  132,
-       72,   72,  192,   72,   68,   68,  194,   68,   68,  134,
-      193,   68,   68,   68,  130,  196,  200,  198,   68,  195,
-       68,   68,  202,  197,   68,  201,   68,   68,   68,  208,
-       68,  210,   68,  199,   68,  213,  212,  209,  203,   68,
-       68,   68,   68,  204,   68,   68,  222,  211,  205,  219,
-       68,   68,   68,  214,  206,  207,  215,  216,  218,   68,
-      217,  227,  220,   68,  223,  224,  221,  226,  229,   68,
-
-       68,   68,   68,   68,  230,   68,  225,  231,  232,   68,
-      228,  234,   68,   68,   68,   68,  233,   68,   68,   68,
-      236,  235,   68,   68,   68,  238,  246,  241,  242,   68,
-       68,   68,   68,  239,  248,   68,  250,  237,   68,  240,
-      132,   68,  249,   68,  252,  243,  253,  244,  245,  255,
-      247,   68,  258,   68,   68,  256,   68,  251,   68,  261,
-       68,   68,   68,   68,   68,  262,  260,   68,   68,  254,
-       68,  267,  257,   68,  268,  259,  263,  264,  266,   68,
-      265,   68,  269,  270,   68,   68,   68,  272,  275,  273,
-       68,   68,  277,   68,  271,  274,   68,  279,   68,   68,
-
-       68,  278,   68,   68,  276,   68,  284,   68,   68,  287,
-       68,   68,   68,  288,   68,   68,  283,  281,  280,   68,
-      286,  282,  293,  289,  292,  285,   68,   68,   68,  290,
-      299,   68,  291,  296,  297,  298,   68,   68,   68,  294,
-      295,   68,  304,   68,   68,   68,  306,   68,   68,  305,
-      303,  309,   68,  302,  300,  311,   68,  301,   68,   68,
-       68,   68,  307,  312,  313,   68,   68,   68,  308,  319,
-       68,   68,  310,  314,   68,  318,  320,   68,   68,   68,
-       68,  315,  324,  132,  316,   68,  317,   68,  321,   68,
-      322,  323,  326,   68,  335,  334,   68,   68,  325,   68,
-
-      340,  327,  328,   68,  336,   68,  337,   68,  338,  339,
-       68,  329,   68,  330,  331,  332,  341,  342,  333,   68,
-       68,   68,  343,  345,  347,  344,  346,  348,  349,   68,
-       68,   68,   68,  354,   68,   68,   68,  351,  355,   68,
-      350,  128,   68,   68,   68,  352,  353,  362,  358,  361,
-      357,  360,  364,  356,   68,   68,   68,   68,   68,   68,
-      366,  359,  365,  363,   68,  368,   68,  369,   68,   68,
-       68,  367,   68,   68,  374,  371,   68,  377,   68,   68,
-      370,  372,  373,  375,   68,  378,   68,   68,   68,  376,
-       68,   68,   68,   68,  380,   68,  381,   68,  386,  388,
-
-      379,   68,  382,  387,   68,   68,  385,   68,  383,  392,
-      389,  384,   68,   68,   68,  390,   68,   68,  394,   68,
-       68,  404,   68,  391,   68,  407,   68,  393,   68,  409,
-      395,  405,   68,  403,   68,  396,   68,  397,   68,  402,
-      406,   68,  398,   68,  399,   68,   68,  408,   68,  410,
-      411,  413,  400,  415,  416,   68,  412,   68,   68,  132,
-       68,  418,  401,  419,  420,  414,  424,   68,   68,   68,
-      421,  425,   68,  423,  417,  422,   68,   68,   68,   68,
-      426,  429,   68,  127,  427,  431,   68,  432,   68,  433,
-      434,   68,  428,  436,   68,  430,  435,   68,   68,   68,
-
-      437,   68,  440,   68,  438,  439,   68,   68,  442,   68,
-      441,  444,   68,   68,   68,  450,   68,  445,   68,  451,
-       68,  447,   68,  453,   68,   68,  448,  446,   68,  443,
-      449,  452,  454,   68,   68,   68,   68,  460,  456,  461,
-      458,   68,   68,   68,   68,  459,  463,  457,  462,   68,
-       68,   68,  464,   68,  455,  465,   68,   68,  468,  466,
-      469,  470,  471,  473,   68,  467,  472,   68,   68,   68,
-       68,  478,  475,  474,   68,  479,   68,   68,   68,  480,
-      481,   68,  477,   68,   68,   68,   68,  476,   68,  486,
-       68,   68,  482,  491,   68,  487,   68,  493,   68,  483,
-
-       68,   68,  484,  488,  485,  494,  490,   68,  489,   68,
-       68,   68,  495,  492,   68,   68,  496,   68,  499,  500,
-       68,   68,  501,  498,   68,  502,  503,   68,  497,   68,
-       68,  505,  132,  509,   68,  504,  506,  508,  510,   68,
-       68,  512,   68,  507,   68,  515,   68,   68,  516,  513,
-       68,   68,   68,   68,   68,  518,   68,  125,  522,   68,
-      511,  514,  521,  523,  517,  524,  519,   68,  535,   68,
-       68,   68,  531,  525,  532,  526,   68,   68,  527,  533,
-      534,   68,   68,  528,   68,  537,   68,  539,  536,  529,
-      530,  538,   68,   68,   68,  540,   68,   68,  544,   68,
-
-       68,  123,  541,   68,  543,  547,  548,   68,  549,  545,
-      550,   68,  542,   68,  551,   68,   68,  546,   68,  552,
-       68,   68,   68,   68,  553,   68,  554,  556,  557,  558,
-       68,  559,  560,   68,   68,   68,  562,   68,  555,   68,
-      564,   68,   68,   68,  561,   68,  567,   68,  563,   68,
-      565,  566,   68,   68,  568,   68,   68,  575,   68,   68,
-       68,   68,  569,   68,  574,   68,  570,  571,  578,  580,
-       68,  572,  573,  583,  576,  579,   68,  577,   68,  582,
-      581,   68,   68,   68,   68,  584,   68,  587,  586,  585,
-       68,  589,  590,   68,   68,  594,  591,   68,   68,  593,
-
-       68,   68,  592,   68,  588,  596,   68,  597,  132,   68,
-       68,   68,   68,  598,  595,  599,  609,   68,   68,   68,
-      600,  616,   68,  602,   68,   68,   68,  601,   68,   68,
-      621,  603,   68,  611,  615,  604,  612,  605,  614,   68,
-      613,  606,  610,  607,   68,  617,   68,   68,  608,   68,
-      618,   68,  619,  622,   68,  624,  625,  626,  623,   68,
-       68,  627,  629,   68,  630,   68,  631,   68,  632,   68,
-      620,   68,   68,   68,   68,   68,   68,  635,  628,   68,
-      638,   68,  634,  636,  642,   68,  633,   68,   68,   68,
-      641,   68,  637,  640,  656,   68,  639,   68,   68,  643,
-
-      646,   68,  647,  645,   68,  644,  648,  649,   68,  650,
-      651,   68,  652,   68,   68,   68,  653,   68,   68,  654,
-       68,  775,  655,  659,  658,   68,  657,   68,   68,   68,
-      661,   68,  662,  663,  660,  664,   68,  665,  666,   68,
-       68,   68,   68,   68,  669,  667,   68,   68,   68,   68,
-       68,   68,  674,   68,  675,  132,  677,   68,  668,   68,
-      670,  673,  671,   68,  679,  684,  672,  680,  676,   68,
-      678,   68,   68,  682,   68,  686,  683,   68,  681,   68,
-       68,   68,   68,  685,   68,   68,   68,  694,  695,  688,
-       68,   68,   68,   68,   68,  687,  696,   68,  691,   68,
-
-      689,  692,  697,   68,  698,  693,  701,  690,  700,   68,
-      703,   68,   68,  699,   68,   68,   68,   68,   68,   68,
-      706,   68,  708,  705,  702,  710,   68,   68,  711,   68,
-      704,   68,   68,   68,   68,  707,   68,  709,   68,   68,
-      718,  712,  713,  714,  722,   68,   68,  721,  715,   68,
-       68,  717,   68,  716,  719,   68,  720,  726,  724,  723,
-      727,   68,  731,   68,  728,   68,  725,   68,  729,   68,
-      730,   68,  732,   68,  733,   68,  735,   68,  734,   68,
-       68,  740,  737,  736,  741,   68,   68,   68,   68,   68,
-      742,  743,   68,  738,   68,   68,   68,  744,  739,  749,
-
-       68,   68,  745,  748,  746,   68,  747,   68,   68,  750,
-       68,   68,   68,  754,  751,  752,  759,   68,   68,  753,
-       68,  755,  756,  760,   68,  762,   68,   68,  757,  761,
-       68,  763,  764,   68,  766,   68,  758,   68,  765,  768,
-       68,   68,  767,   68,   68,   68,  770,  769,  773,  772,
-       68,  771,  776,  777,   68,  779,  774,   68,   68,  778,
-       68,   68,   68,   68,  781,  783,   68,   68,   68,  786,
-      780,   68,   68,  782,   68,   68,   68,  791,   68,   68,
-       68,   68,   68,  784,   68,  130,  789,   68,  787,   68,
-      785,  788,  796,  790,  800,   68,  797,   68,  792,  794,
-
-       68,   68,  799,  795,  793,  801,   68,   68,  798,   68,
-      803,   68,   68,   68,   68,  802,   68,  809,  804,  811,
-      805,  806,   68,  810,  807,   68,   68,   68,   68,   68,
-      808,  812,  815,  817,  813,  818,  819,  814,   68,  820,
-       68,   68,   68,  822,   68,  824,   68,  821,  816,  825,
-       68,  826,   68,   68,  829,   68,   68,   68,   68,   68,
-       68,  832,  831,  823,   68,  827,   68,   68,   68,   68,
-       68,  840,  828,   68,  830,   68,  833,  834,  841,  835,
-       68,  837,   68,  836,  839,   68,  842,   68,  843,  838,
-      846,   68,  847,   68,  844,   68,   68,  848,  851,   68,
-
-      845,   68,  853,   68,  852,  854,  855,   68,  856,   68,
-       68,   68,   68,  858,  857,  849,  850,   68,   68,   68,
-       68,  863,   68,   68,  861,   68,   68,  865,   68,   68,
-       68,   68,  859,  868,  867,  862,  870,   68,   68,   68,
-      873,   68,   68,  860,   68,  864,   68,   68,   68,  869,
-      866,  876,  872,  879,   68,  871,  878,   68,  880,   68,
-       68,  874,  875,   68,  877,  883,   68,  881,   68,  886,
-      887,  882,   68,  884,   68,   68,   68,  888,   68,   68,
-       68,   68,  895,   68,  892,  885,  894,   68,   68,   68,
-      889,   68,  896,  890,   68,   68,  903,   68,  891,   68,
-
-       68,   68,   68,  893,   68,   68,  897,  901,  900,  898,
-      902,  899,   68,  909,   68,   68,  910,  912,   68,  904,
-      905,  908,   68,  906,  914,  913,   68,  907,   68,   68,
-       68,  911,   68,  921,  922,   68,   68,  916,   68,  920,
-       68,  918,  915,   68,  919,   68,   68,   68,  917,   68,
-      929,   68,   68,  924,   68,  932,  923,  934,  935,  926,
-       68,  925,   68,   68,  937,  928,   68,  930,   68,   68,
-      931,  927,  933,   68,  936,   68,  939,   68,   68,  938,
-       68,   68,  940,  941,   68,   68,   68,   68,   68,   68,
-      942,  948,   68,  949,  950,   68,  943,  945,   68,  944,
-
-      951,  952,  946,  955,   68,  947,   68,   68,   68,  953,
-       68,  960,   68,  954,   68,   68,   68,  964,   68,  957,
-      956,  963,  958,   68,  961,  965,   68,   68,  959,  967,
-       68,   68,  962,  968,   68,   68,  966,   68,   68,  972,
-       68,  974,   68,  976,  969,  975,   68,   68,   68,   68,
-      970,  978,  977,  980,  971,  973,   68,   68,   68,  982,
-       68,  984,  981,   68,  983,  979,   68,   68,   68,  985,
-       68,  986,   68,  992,   68,   68,  987,   68,  994,   68,
-       68,   68,   68,   68,   68,   68,   68,  988,  989,  996,
-      990,  999, 1000,  991,   68, 1002,   68,  998,   68,  995,
-
-       68,  993,  997, 1006,   68, 1005,   68,   68,   68, 1009,
-       68, 1001, 1003, 1008, 1004,   68, 1007,   68,   68,   68,
-     1010,   68, 1013,   68, 1012,   68, 1011,   68,   68, 1017,
-     1021,   68,  128,   68, 1015,   68, 1018, 1014, 1024, 1019,
-     1016, 1025,   68,   68, 1020, 1026, 1022, 1023, 1028, 1027,
-       68,   68, 1030,   68,   68,   68,   68,   68,   68, 1032,
-     1034,   68, 1035, 1029, 1037, 1042, 1031,   68, 1033,   68,
-       68,   68,   68, 1038, 1039, 1040,   68, 1041,   68,   68,
-     1036,   68,   68,   68, 1047, 1043, 1044,   68, 1045,   68,
-     1048,   68, 1046,   68, 1053,   68,   68,   68, 1055,   68,
-
-     1051, 1049, 1052,   68,   68, 1050,   68, 1057,   68,   68,
-     1054, 1058, 1059,   68, 1056, 1060,   68, 1062,   68, 1061,
-       68,   68,   68,   68,   68, 1063,   68,   68, 1070, 1069,
-     1064,   68, 1065, 1066,   68,   68, 1073, 1067, 1075,   68,
-     1072,   68,   68, 1068,   68, 1071, 1078, 1077,   68, 1074,
-       68,   68,   68, 1079, 1083, 1080,   68,   68,   68,   68,
-       68, 1084, 1087,   68,   68,   68,   68, 1076,   68, 1081,
-     1088,   68, 1082, 1091, 1086, 1089, 1085, 1093, 1090,   68,
-       68,   68,   68,   68,   68, 1092, 1095, 1096,   68,   68,
-     1102, 1094,   68, 1097, 1100, 1101, 1104,   68,   68,   68,
-
-     1099, 1103,   68, 1098, 1106,   68, 1108, 1105,   68,   68,
-     1111,   68,   68, 1109,   68,   68, 1115,   68, 1107,   68,
-     1112,   68, 1110,   68, 1114,   68, 1116,   68, 1118, 1113,
-       68, 1117, 1121,   68, 1119,   68, 1120,   68,   68,   68,
-       68,   68, 1129,   68,   68,   68,   68, 1130,   68, 1133,
-       68, 1144, 1127,   68, 1123, 1134,   68, 1125, 1131, 1122,
-     1126, 1124, 1128, 1132, 1135,   68, 1136, 1137,   68, 1138,
-       68,   68, 1140,   68, 1141,   68,   68,   68, 1145,   68,
-       68, 1147,   68,   68,   68,   68,   68, 1150,   68, 1151,
-     1139, 1142, 1149, 1153,   68, 1143,   68, 1155,   68, 1146,
-
-       68, 1148, 1156,   68, 1152,   68, 1158,   68,   68, 1159,
-     1160, 1157,   68,   68,   68, 1154,   68, 1162,   68, 1161,
-       68,   68,   68, 1166, 1170,   68,  127, 1164,   68,   68,
-     1168, 1169, 1171,   68,   68, 1167, 1175, 1165, 1163,   68,
-     1174,   68, 1173,   68, 1176, 1172,   68,   68,   68, 1178,
-       68, 1181, 1177, 1183,   68, 1182,   68,   68,   68, 1180,
-     1184, 1185, 1179, 1186,   68,   68,   68,   68,   68, 1192,
-     1187, 1189,   68, 1191,   68,   68,   68, 1188, 1193,   68,
-       68, 1195, 1197,   68, 1198,   68, 1190, 1196, 1199,   68,
-     1200, 1194,   68, 1202,   68, 1203,   68, 1201, 1204,   68,
-
-     1205,   68,   68,   68,   68, 1209,   68,   68,   68, 1208,
-     1211,   68, 1210,   68,   68, 1215,   68, 1206,   68, 1214,
-     1216,   68, 1217,   68, 1207, 1212,   68, 1213,   68,   68,
-     1218,   68,   68, 1224,   68,   68,   68,   68,   68,   68,
-     1220, 1221,   68, 1222, 1219, 1225,   68,   68,   68,   68,
-     1232, 1228, 1223, 1233, 1234,   68, 1230, 1227, 1235,   68,
-       68, 1226,   68, 1229, 1231,   68, 1237, 1238,   68, 1239,
-       68,   68,   68, 1236,   68, 1245,   68, 1240, 1246,   68,
-       68,   68,   68,   68,   68,   68, 1254,   68, 1241, 1242,
-     1243, 1244,   68,   68, 1247, 1253,   68, 1257,   68, 1248,
-
-       68, 1249, 1250, 1251,   68, 1252, 1259,   68, 1255, 1260,
-     1261,   68,   68, 1262, 1256,   68,   68,   68,   68, 1258,
-       68,   68, 1265, 1266,   68, 1264,   68,   68, 1267, 1269,
-       68, 1270, 1272,   68, 1273,   68, 1268, 1263, 1274, 1276,
-       68,   68, 1271,   68,   68, 1275, 1277,   68,   68, 1278,
-       68, 1280,   68, 1279,   68,   68,   68, 1284,   68,   68,
-       68, 1282,  125, 1281, 1283, 1288,   68, 1285,   68, 1289,
-     1290, 1291,   68, 1286,   68,   68, 1292,   68, 1287, 1293,
-       68, 1296,   68,   68,   68,   68, 1294,   68, 1299,   68,
-     1301,   68, 1300, 1295, 1302,   68,   68, 1305,   68, 1304,
-
-     1306,   68,   68, 1297, 1298,   68,   68,   68,   68, 1307,
-       68, 1309, 1308,   68, 1303,   68, 1311, 1310,   68, 1313,
-       68,   68,   68,   68,   68, 1315,   68, 1320,   68, 1312,
-       68, 1314, 1318, 1316, 1324, 1321, 1323,   68,   68,   68,
-     1326,   68, 1319,   68,   68,  123, 1322, 1317, 1325,   68,
-     1328,   68, 1327,   68, 1330,   68, 1331,   68, 1333,   68,
-     1332,   68,   68,   68, 1335,   68, 1334, 1338,   68, 1329,
-       68,   68, 1339,   68,   68,   68,   68, 1337, 1343, 1342,
-     1336, 1340, 1346,   68,   68,   68, 1349,   68,   68, 1341,
-     1348,   68, 1347,   68, 1345, 1352,   68, 1353,   68,   68,
-
-     1344, 1357,   68, 1355, 1350,   68, 1359,   68, 1360,   68,
-     1351,   68, 1354,   68,   68,   68,   68, 1358, 1403, 1356,
-     1363, 1364,   68, 1365,   68, 1366,   68, 1362,   68,   68,
-     1361, 1368,   68, 1367,   68, 1370, 1369, 1371,   68,   68,
-       68, 1374,   68,   68, 1372,   68,   68, 1379, 1373, 1377,
-     1375, 1376, 1378,   68, 1380,   68, 1381, 1382,   68,   68,
-     1384,   68, 1383,   68,   68, 1387,   68, 1388,   68, 1389,
-       68, 1390,   68, 1391,   68, 1392,   68,   68, 1385,   68,
-     1394,   68, 1386,   68,   68, 1395, 1397,   68,   68, 1393,
-       68,   68, 1403, 1398, 1402,   68, 1403, 1403, 1403, 1403,
-
-     1403, 1403, 1400, 1396, 1403, 1399, 1403, 1403, 1403, 1403,
-     1401,   40,   40,   40,   40,   40,   40,   40,   45,   45,
-       45,   45,   45,   45,   45,   50,   50,   50,   50,   50,
-       50,   50,   56,   56,   56,   56,   56,   56,   56,   61,
-       61,   61,   61,   61,   61,   61,   71,   71, 1403,   71,
-       71,   71,   71,  122,  122, 1403, 1403, 1403,  122,  122,
-      124,  124, 1403, 1403,  124, 1403,  124,  126, 1403, 1403,
-     1403, 1403, 1403,  126,  129,  129, 1403, 1403, 1403,  129,
-      129,  131, 1403, 1403, 1403, 1403, 1403,  131,  133,  133,
-     1403,  133,  133,  133,  133,   72,   72, 1403,   72,   72,
-
-       72,   72,   13, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-     1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-     1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-     1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-     1403, 1403
+       67,   93,   68,   76,   68,   67,   84,   68,   66,   15,
+       16,   17,   62,   63,   64,   68,   68,   77,  135,   86,
+       65,   69,   92,  131,   78,   70,   85,   68,   87,   66,
+       72,   79,   72,   72,   68,   72,   88,  134,   68,   80,
+       72,   73,   89,   81,   68,   90,   82,   68,   95,   83,
+       68,   99,   91,  131,   68,  100,   96,  128,  128,   94,
+       68,   68,   97,  103,  138,  107,   98,   68,   68,  104,
+       68,  101,  105,  110,  136,  108,   68,   68,  109,  106,
+       68,   68,  114,  111,  115,  139,  131,  112,  113,   68,
+      117,   68,  119,  150,  140,  118,  120,  137,  125,  116,
+
+      125,  125,   72,  125,   72,   72,  130,   72,  130,  130,
+       68,  130,   67,  133,   67,   67,   68,   67,   68,   68,
+       68,   68,   67,   72,  144,   72,   72,   68,   72,   68,
+      141,   68,  143,   72,   73,  146,  147,  142,  148,   68,
+       68,   68,  145,   68,  151,  149,  153,   68,   68,  154,
+      156,  159,  157,   68,  152,  160,   68,   68,   68,   68,
+      163,   68,   68,  155,  164,  161,  166,  162,   68,   68,
+       68,  165,  158,  169,  167,  171,   68,   68,   68,  172,
+       68,   68,  168,   68,  178,   68,  170,   68,  180,   68,
+      174,   68,   68,  175,   68,   68,  173,  179,   68,  176,
+
+      186,  177,  184,   68,  187,  121,  121,  208,  181,  182,
+      183,  123,  128,  128,  123,  125,  188,  125,  125,  130,
+      125,  130,  130,   72,  130,   72,   72,  131,   72,   68,
+      189,   68,  191,   68,  133,   68,  190,   68,   68,   68,
+      196,  193,   68,  198,  192,   68,   68,  197,   68,   68,
+      194,   68,  204,   68,  206,   68,   68,   68,  195,   68,
+      209,   68,  207,  199,   68,  205,  215,  210,  200,  212,
+       68,  211,  213,  201,  129,   68,  218,   68,  219,  202,
+      203,   68,  214,  220,  222,   68,   68,  225,   68,   68,
+      216,  217,   68,   68,  221,  223,  227,  228,  226,   68,
+
+       68,   68,   68,   68,   68,  230,  224,  229,   68,   68,
+      232,   68,   68,   68,   68,   68,  241,  234,  237,   68,
+       68,   68,  243,  231,   68,   68,  235,   68,  247,  131,
+      233,  244,  236,  239,  240,  245,  238,  248,  250,  242,
+       68,  253,   68,   68,  246,   68,   68,  251,   68,  256,
+       68,   68,   68,   68,   68,  257,  255,   68,  262,   68,
+      249,  260,  261,   68,  252,  254,  258,   68,  263,   68,
+      259,   68,   68,   68,  266,  269,  267,   68,   68,  264,
+       68,   68,  268,  272,  265,   68,  271,  273,   68,   68,
+       68,  270,   68,   68,  278,   68,   68,  281,   68,   68,
+
+       68,  274,   68,  277,   68,   68,  275,  282,  280,  286,
+      276,  283,   68,  279,   68,  284,   68,   68,  285,  290,
+      291,  292,   68,   68,   68,  288,  287,  293,  289,   68,
+       68,  294,  298,   68,  295,   68,   68,  300,  296,  297,
+      299,   68,  303,   68,  301,   68,   68,   68,   68,  306,
+      305,   68,  312,   68,   68,   68,   68,   68,  313,   68,
+       68,  302,  307,  304,  311,   68,   68,  308,  317,   68,
+      309,  131,  310,  316,  319,  314,  315,   68,  328,   68,
+       68,  327,   68,   68,  318,   68,  333,  320,  321,   68,
+       68,   68,  329,   68,  331,  335,  330,  322,   68,  323,
+
+      324,  325,  332,  334,  326,  336,   68,  338,   68,  337,
+       68,  339,  340,  341,   68,   68,   68,   68,  342,  346,
+      347,   68,   68,   68,  343,   68,  344,   68,  345,   68,
+       68,  354,  350,  127,  352,  353,  349,  356,  355,  348,
+       68,   68,   68,   68,   68,  351,  357,  361,  358,   68,
+      360,   68,   68,   68,  359,   68,   68,  365,   68,  366,
+      363,  367,   68,   68,  369,  362,   68,  364,   68,  370,
+       68,   68,   68,   68,   68,   68,   68,   68,  372,   68,
+      373,  378,   68,  368,  374,  379,  380,  371,   68,  377,
+       68,   68,  383,  375,  376,   68,   68,  381,   68,   68,
+
+      385,   68,   68,  395,  382,  384,   68,  398,   68,  126,
+       68,   68,  386,  396,   68,  394,   68,  387,   68,  388,
+       68,  393,  397,  402,  389,   68,  390,   68,  400,  401,
+       68,  403,   68,   68,  391,  399,   68,  406,  411,  404,
+       68,  131,  407,   68,  392,  410,   68,  405,   68,  408,
+       68,  409,  412,  415,   68,   68,   68,   68,  423,   68,
+      419,  414,  416,   68,  413,  421,   68,  417,  422,   68,
+       68,  418,  420,  424,   68,  425,   68,  426,   68,   68,
+       68,  430,   68,  428,  429,   68,   68,   68,  434,  431,
+       68,  427,  432,   68,   68,  435,  124,   68,  441,  433,
+
+      437,   68,  440,   68,   68,  438,   68,   68,  436,  439,
+      443,   68,   68,  442,   68,  444,   68,  446,  451,  447,
+       68,  448,   68,   68,   68,   68,   68,  453,  452,  454,
+      449,   68,  450,   68,   68,   68,  455,  445,  459,  458,
+       68,  463,   68,  456,  461,  460,   68,  457,  462,   68,
+       68,  464,  467,  465,   68,   68,  468,   68,   68,   68,
+      469,  470,   68,   68,   68,   68,   68,   68,  466,  475,
+       68,   68,  471,  472,   68,  476,   68,  480,  483,  477,
+       68,  473,   68,  474,   68,  478,  479,   68,  482,  481,
+       68,   68,  485,   68,   68,  484,   68,  487,  488,  486,
+
+      490,  489,   68,   68,   68,   68,   68,  491,  492,   68,
+      131,  494,  493,   68,  495,  497,  498,   68,   68,  501,
+      496,  499,   68,  503,   68,   68,  504,  502,   68,   68,
+      500,   68,   68,  506,   68,   68,   68,   68,  512,  511,
+      510,  509,  505,   68,  507,   68,  523,   68,  508,   68,
+      519,  513,   68,  514,  520,  522,  515,   68,   68,  525,
+       68,  516,  521,   68,  524,   68,  527,  517,  518,   68,
+       68,   68,  528,   68,  532,  526,   68,   68,   68,  531,
+       68,  536,   68,  529,  540,  535,  122,  537,  538,  530,
+       68,  533,   68,   68,   68,  534,   68,  539,  541,   68,
+
+       68,   68,  546,   68,  542,  544,   68,  548,  545,   68,
+       68,   68,   68,  550,  547,   68,  552,  543,   68,   68,
+       68,   68,  554,   68,   68,  551,   68,   68,  549,   68,
+      555,   68,   68,  553,   68,  561,  562,   68,   68,   68,
+      567,  556,  557,  558,   68,   68,  559,  560,  564,  563,
+      570,  566,   68,  565,   68,   68,  571,   68,  568,  569,
+       68,   68,   68,  576,   68,  574,  577,  578,   68,  573,
+       68,   68,  581,  572,   68,  583,   68,   68,  584,  131,
+       68,   68,  575,  580,   68,  586,  579,   68,   68,   68,
+       68,   68,   68,  595,  582,  585,   68,   68,   68,   68,
+
+      610,   68,  589,  587,  601,  597,  598,  649,  602,   68,
+      600,  588,   68,   68,  607,  590,  596,  591,  599,   68,
+      603,  592,   68,  593,   68,  604,   68,  605,  594,  611,
+       68,   68,   68,  615,   68,  617,  608,   68,  609,  612,
+       68,  616,   68,   68,  613,  606,  618,   68,   68,   68,
+       68,  614,   68,  621,   68,   68,   68,  624,  622,   68,
+      620,  619,  628,   68,  627,   68,   68,   68,   68,  623,
+      626,  632,   68,  633,  625,   68,   68,  634,  629,  642,
+      631,  630,   68,  636,  635,  637,   68,  638,   68,   68,
+       68,  639,   68,   68,  640,   68,   68,  641,  645,   68,
+
+       68,  643,  650,   68,  647,  648,  651,   68,  644,   68,
+      646,   68,  652,   68,  654,   68,   68,   68,   68,   68,
+       68,   68,   68,  659,  660,  662,   68,  653,  664,   68,
+      658,  655,  663,   68,  656,  665,  657,   68,  661,   68,
+       68,  666,  667,   68,   68,  671,   68,   68,  668,   68,
+       68,  669,   68,   68,   68,  673,  670,  672,  679,  680,
+       68,  131,   68,   68,   68,  681,  674,  676,   68,  677,
+       68,   68,  678,   68,   68,  675,  682,   68,  684,  687,
+       68,   68,  683,   68,   68,  685,  686,   68,  690,  692,
+      689,   68,  688,   68,   68,  694,  691,   68,   68,   68,
+
+       68,   68,  695,   68,   68,   68,  693,   68,   68,  696,
+      698,  702,  697,  705,   68,  706,  708,   68,  699,  701,
+       68,  700,  703,  704,   68,   68,  711,   68,  707,  710,
+      712,   68,   68,  716,  715,   68,  714,  709,  713,   68,
+      717,   68,   68,  719,   68,   68,  718,   68,   68,  724,
+      721,  725,   68,  720,   68,   68,   68,  726,   68,  727,
+       68,  722,   68,   68,   68,   68,  723,  728,  733,   68,
+       68,  732,  729,   68,  730,   68,  731,  734,  738,  736,
+       68,  735,  742,   68,  743,   68,   68,  739,  737,  744,
+       68,   68,   68,  740,   68,  745,  747,   68,  749,   68,
+
+       68,   68,  751,   68,   68,  741,  750,   68,  754,  753,
+      746,   68,  748,   68,  752,   68,  755,   68,  759,  757,
+       68,  760,  758,   68,   68,  756,   68,  762,   68,  761,
+       68,  765,   68,  766,   68,   68,  764,  763,  769,   68,
+       68,   68,  773,   68,   68,   68,   68,   68,   68,  778,
+      767,   68,   68,  779,   68,   68,   68,  782,  768,  770,
+      771,   68,  772,   68,   68,  774,  776,  785,   68,   68,
+      777,  775,   68,  781,  783,   68,   68,  780,   68,   68,
+       68,  784,  786,  788,  791,  792,   68,  787,   68,  795,
+      789,  790,   68,  793,  794,   68,   68,   68,  797,  800,
+
+      801,  796,  799,   68,   68,   68,   68,  802,  803,   68,
+      804,  808,   68,  806,   68,   68,  798,  807,   68,   68,
+       68,   68,   68,   68,  814,   68,   68,  813,  805,   68,
+       68,   68,   68,  809,  810,   68,  822,   68,   68,  812,
+      819,  815,  816,  823,  817,  811,   68,  821,   68,  818,
+      824,   68,  820,  828,   68,   68,   68,  827,   68,  830,
+      826,  825,  832,  829,   68,   68,  834,   68,  835,  833,
+      836,   68,   68,   68,  837,   68,  831,   68,   68,  839,
+      838,   68,   68,   68,  844,   68,   68,  840,  842,   68,
+       68,  846,   68,   68,   68,   68,   68,  843,  849,   68,
+
+      851,   68,  854,  848,   68,   68,  841,   68,  847,  845,
+       68,   68,  850,  853,  852,   68,  859,  858,  860,   68,
+       68,   68,   68,   68,  855,  856,  863,  857,   68,   68,
+      861,  866,  867,  862,  864,   68,  868,   68,   68,   68,
+      869,   68,   68,   68,  875,   68,  865,  872,  874,   68,
+       68,   68,   68,   68,  876,  883,   68,  870,   68,  871,
+       68,   68,   68,   68,  873,   68,   68,  880,  877,  882,
+      881,  878,  879,  888,   68,   68,  892,   68,   68,  129,
+      887,  884,  885,  889,  886,   68,  890,   68,  893,   68,
+       68,  891,  894,   68,  895,   68,  901,   68,  896,  902,
+
+       68,   68,  898,   68,  900,  899,   68,   68,   68,  897,
+       68,   68,  909,   68,   68,  912,  904,  903,   68,   68,
+       68,  906,  914,   68,  905,  915,  916,   68,  908,  910,
+       68,   68,  911,  907,   68,   68,  913,   68,  918,   68,
+       68,  922,  920,  917,  919,   68,   68,   68,   68,   68,
+      921,  927,   68,  928,  929,   68,  924,  930,  923,   68,
+       68,  934,   68,  925,  931,   68,  926,  938,   68,   68,
+       68,   68,   68,  942,   68,  933,  943,   68,   68,  935,
+      936,  937,  932,  939,  941,   68,  945,   68,  940,   68,
+      946,   68,   68,   68,  944,   68,  950,   68,   68,  952,
+
+       68,  953,   68,  954,   68,   68,   68,  955,   68,  956,
+      947,  948,  958,  949,   68,   68,  959,   68,  951,  960,
+       68,   68,  961,  957,  962,   68,  966,   68,   68,   68,
+      970,   68,   68,   68,  972,  967,   68,  963,   68,  964,
+       68,   68,  975,   68,  965,   68,   68,  968,   68,  969,
+      974,   68,  977,  976,  127,  978,  973,   68,  971,   68,
+      980,   68,  983,  984,   68,   68,  979,  982,   68,  987,
+       68,  986,   68,   68,  981,   68,   68,  988,   68,   68,
+       68,  985,  989,   68,   68,  990,  994,   68,  995,  126,
+      991,  998,   68,  993,  996,  992,   68, 1001,   68,  997,
+
+      124, 1000,   68, 1002,   68,  999, 1003, 1005, 1006, 1007,
+     1004,   68,   68,   68,   68,   68,   68, 1012,   68, 1009,
+       68, 1014,   68, 1011,   68, 1008,   68, 1016, 1010, 1017,
+       68,   68, 1015, 1018,   68,   68,   68, 1019,   68,   68,
+     1013, 1020,   68, 1024, 1021,   68,   68, 1023, 1022,   68,
+     1029,   68,   68,   68, 1025, 1027, 1031,   68, 1028,   68,
+     1033,   68,   68, 1026, 1034,   68, 1030, 1035,   68,   68,
+     1032,   68, 1036,   68, 1038,   68,   68, 1037,   68,   68,
+       68,   68,   68, 1040, 1046, 1045,   68, 1041, 1042,   68,
+     1039, 1050,   68, 1043,   68, 1049,   68,   68, 1048, 1044,
+
+       68, 1052, 1053,   68, 1047,   68,   68, 1058, 1054,   68,
+     1055,   68,   68,   68, 1059, 1056, 1062,   68,  122,   68,
+     1051,   68,   68,   68, 1066,   68, 1057, 1061,   68,   68,
+     1060, 1063, 1064, 1068, 1067, 1065,   68,   68,   68,   68,
+       68, 1069, 1070,   68,   68, 1073, 1074,   68, 1072, 1075,
+       68, 1071,   68, 1077, 1078,   68, 1079, 1080,   68,   68,
+       68,   68,   68, 1082, 1076, 1083, 1085,   68,   68, 1081,
+     1086, 1088,   68,   68, 1084,   68, 1089, 1087,   68,   68,
+       68,   68,   68, 1091, 1092, 1090, 1094,   68,   68,   68,
+       68,   68,   68,   68, 1093, 1102,   68,   68,   68, 1121,
+
+     1103,   68, 1354, 1100,   68, 1106, 1096,   68, 1095, 1098,
+     1099, 1104, 1097, 1101, 1105, 1107,   68, 1108,   68,   68,
+     1109, 1110,   68, 1111,   68, 1113,   68, 1114,   68,   68,
+       68, 1117,   68,   68,   68, 1116, 1119,   68, 1112,   68,
+       68, 1125,   68, 1122,   68, 1123, 1127,   68, 1115, 1128,
+       68,   68, 1118, 1126,   68, 1130,   68, 1120,   68,   68,
+     1124,   68,   68,   68, 1133, 1131,   68,   68, 1141,   68,
+     1132, 1137,   68,   68,   68, 1135,   68, 1129, 1139,   68,
+     1142, 1140, 1138,   68, 1136,   68, 1134, 1146, 1144,   68,
+     1145,   68,   68,   68, 1143,   68, 1147, 1150, 1149,   68,
+
+       68,   68, 1151,   68, 1148, 1152, 1153,   68,   68, 1164,
+       68,   68, 1154, 1155, 1156,   68, 1157, 1194,   68,   68,
+     1162, 1158, 1159, 1160, 1161,   68,   68,   68,   68,   68,
+       68, 1167, 1163, 1165,   68, 1166,   68, 1168, 1169,   68,
+       68, 1171,   68, 1172,   68, 1170, 1173,   68, 1174,   68,
+     1175,   68, 1176,   68, 1177, 1178,   68,   68, 1179, 1180,
+       68,   68, 1183,   68, 1184,   68, 1182, 1185,   68,   68,
+       68,   68,   68,   68, 1181,   68, 1192,   68,   68,   68,
+       68, 1186,   68, 1188, 1189, 1190,   68, 1193, 1187,   68,
+       68,   68,   68, 1196,   68, 1191, 1200, 1201,   68, 1195,
+
+     1198, 1202,   68,   68, 1204,   68, 1197, 1199, 1203, 1205,
+       68,   68, 1208, 1207, 1206,   68,   68, 1212,   68, 1213,
+       68,   68,   68,   68,   68,   68,   68,   68,   68, 1209,
+     1219, 1210, 1220,   68,   68, 1211, 1214, 1223,   68, 1215,
+       68, 1221, 1216, 1218, 1217,   68, 1222, 1225,   68, 1226,
+       68,   68, 1227, 1224, 1229,   68,   68,   68,   68,   68,
+     1230, 1231, 1228,   68, 1234, 1232,   68, 1354, 1235, 1237,
+       68, 1238,   68, 1233, 1239, 1240,   68, 1241,   68,   68,
+       68, 1236,   68,   68,   68, 1242, 1244,   68,   68,   68,
+       68, 1248,   68,   68, 1243,   68, 1246, 1245, 1247, 1252,
+
+       68, 1249, 1254,   68, 1253,   68,   68, 1250,   68,   68,
+       68, 1256, 1251, 1255, 1259,   68,   68, 1257,   68, 1261,
+       68,   68, 1258, 1262, 1263,   68, 1264,   68, 1267,   68,
+     1260, 1268,   68,   68, 1265, 1266,   68,   68,   68,   68,
+     1269,   68, 1274, 1270,   68,   68, 1272,   68, 1271,   68,
+     1276,   68,   68,   68,   68,   68, 1281,   68, 1273, 1284,
+     1275, 1279, 1283,   68,   68,   68, 1285, 1277,   68,   68,
+       68, 1280, 1282, 1286, 1289, 1278,   68, 1287,   68, 1290,
+       68,   68,   68,   68,   68, 1291, 1292, 1296,   68, 1293,
+       68,   68,   68, 1288,   68,   68, 1302, 1301, 1295, 1297,
+
+     1298, 1294, 1300, 1304,   68,   68,   68, 1306,   68,   68,
+     1299, 1305, 1309,   68, 1303, 1310,   68,   68,   68,   68,
+     1314,   68,   68, 1316,   68, 1307,   68,   68,   68, 1354,
+     1312, 1308, 1354, 1319, 1315,   68, 1311, 1320,   68, 1313,
+     1323, 1318, 1321,   68,   68, 1317, 1322,   68, 1324,   68,
+       68, 1325, 1326,   68,   68,   68, 1329,   68,   68, 1327,
+       68,   68, 1334, 1328, 1332, 1330, 1331, 1333,   68, 1335,
+       68,   68, 1337,   68,   68, 1336,   68, 1340,   68, 1341,
+       68, 1342,   68, 1343,   68,   68,   68, 1345,   68, 1338,
+       68,   68, 1346,   68, 1339, 1348,   68, 1344,   68,   68,
+
+     1349, 1353,   68, 1354, 1354, 1354, 1354, 1354, 1350, 1354,
+     1347, 1354, 1351, 1354, 1354, 1354, 1354, 1354, 1352,   40,
+       40,   40,   40,   40,   40,   40,   45,   45,   45,   45,
+       45,   45,   45,   50,   50,   50,   50,   50,   50,   50,
+       56,   56,   56,   56,   56,   56,   56,   61,   61,   61,
+       61,   61,   61,   61,   71,   71, 1354,   71,   71,   71,
+       71,  121,  121, 1354, 1354, 1354,  121,  121,  123,  123,
+     1354, 1354,  123, 1354,  123,  125, 1354, 1354, 1354, 1354,
+     1354,  125,  128,  128, 1354, 1354, 1354,  128,  128,  130,
+     1354, 1354, 1354, 1354, 1354,  130,  132,  132, 1354,  132,
+
+      132,  132,  132,   72,   72, 1354,   72,   72,   72,   72,
+       13, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354
     } ;
 
-static yyconst flex_int16_t yy_chk[2843] =
+static yyconst flex_int16_t yy_chk[2751] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1224,313 +1187,302 @@ static yyconst flex_int16_t yy_chk[2843] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
         3,    3,    4,    4,    4,   49,    5,    5,   49,    3,
         5,   15,    4,    6,    6,   15,    5,    6,    9,    9,
-        9,  118,   33,    6,    7,    7,    7,    7,    9,    7,
+        9,  117,   33,    6,    7,    7,    7,    7,    9,    7,
        10,   10,   10,   44,   44,    7,    8,    8,    8,    8,
-       10,    8,   21,   33,  118,   21,   21,    8,   11,   11,
-       11,   11,   11,   11, 1409,   20,   29,   20,   20,   11,
+       10,    8,   21,   33,  117,   21,   21,    8,   11,   11,
+       11,   11,   11,   11, 1360,   20,   29,   20,   20,   11,
 
        20,   29,   24,   21,   25,   20,   24,   28,   11,   12,
        12,   12,   12,   12,   12,   74,   22,   22,   74,   25,
-       12,   69,   28,   30,   22,   69,   24,  109,   22,   12,
-       19,   22,   19,   19,   23,   19,   26,   26,   30,   23,
-       19,   19,  109,   23,   27,   26,   23,   34,   27,   23,
-       76,   27,   31,   31,   32,   32,   34,   77,   27,   32,
-       77,   31,   34,   35,   36,   34,   38,   31,   35,   36,
-       76,   31,   34,   37,   37,   32,   37,  433,   35,   36,
-       38,   35,   75,   36,   36,   38,   75,   39,   39,   60,
-       60,   37,   39,   55,  433,   55,   55,   63,   55,   63,
-
-       63,   65,   63,   65,   65,   66,   65,   68,   63,   68,
-       68,   78,   68,   80,   81,   79,   82,   68,   83,   66,
-       71,   85,   71,   71,   79,   71,   81,   80,   84,   78,
-       71,   71,   86,   84,   82,   85,   87,   88,   89,   90,
-       83,   93,   89,   91,   90,   92,   84,   96,   92,  597,
-       97,   92,   86,   94,   87,   88,   95,   91,   94,   95,
-       93,   99,   98,   95,   97,   92,   98,  100,   99,  101,
-      102,   96,  103,  104,  107,  105,  101,  104,   94,  106,
-      100,  110,  108,  102,  106,  111,  112,  115,  106,  113,
-      116,  112,  103,  105,  107,  108,  114,  114,  117,  111,
-
-      110,  113,  119,  111,  120,  115,  116,  119,  121,  123,
-      123,  125,  130,  130,  125,  131,  120,  114,  127,  117,
-      127,  127,  132,  127,  132,  132,  121,  132,  133,  135,
-      133,  133,  135,  133,  138,  136,  137,  139,  140,  133,
-      136,  137,  141,  142,  129,  139,  143,  141,  148,  138,
-      144,  143,  145,  140,  150,  144,  149,  145,  147,  147,
-      152,  149,  151,  142,  146,  152,  151,  148,  146,  153,
-      156,  154,  158,  146,  157,  155,  160,  150,  146,  157,
-      159,  160,  164,  153,  146,  146,  154,  155,  156,  165,
-      155,  164,  158,  161,  161,  162,  159,  163,  166,  167,
-
-      162,  172,  163,  166,  167,  171,  162,  168,  169,  170,
-      165,  171,  168,  169,  173,  174,  170,  175,  176,  177,
-      173,  172,  178,  180,  179,  175,  182,  178,  179,  181,
-      183,  182,  184,  176,  184,  185,  186,  174,  187,  177,
-      192,  186,  185,  188,  188,  180,  189,  181,  181,  190,
-      183,  189,  192,  191,  190,  191,  193,  187,  194,  195,
-      196,  197,  199,  198,  195,  196,  194,  204,  201,  189,
-      200,  201,  191,  202,  202,  193,  197,  198,  200,  205,
-      199,  203,  203,  204,  206,  207,  208,  206,  209,  207,
-      210,  211,  211,  209,  205,  208,  212,  213,  214,  215,
-
-      216,  212,  213,  217,  210,  218,  218,  219,  220,  221,
-      222,  223,  224,  222,  221,  225,  217,  215,  214,  226,
-      220,  216,  226,  223,  225,  219,  227,  231,  228,  224,
-      231,  229,  224,  229,  229,  230,  230,  232,  233,  227,
-      228,  234,  235,  235,  236,  237,  237,  238,  239,  236,
-      234,  240,  241,  233,  232,  242,  240,  232,  243,  245,
-      242,  244,  238,  243,  244,  246,  247,  250,  239,  248,
-      251,  249,  241,  245,  248,  247,  249,  252,  254,  253,
-      256,  246,  253,  258,  246,  257,  246,  259,  250,  261,
-      251,  252,  254,  260,  257,  256,  263,  264,  253,  255,
-
-      262,  255,  255,  267,  258,  262,  259,  265,  260,  261,
-      266,  255,  268,  255,  255,  255,  263,  264,  255,  269,
-      271,  272,  265,  267,  269,  266,  268,  270,  270,  273,
-      270,  275,  274,  275,  276,  277,  278,  272,  276,  279,
-      271,  128,  280,  282,  281,  273,  274,  282,  279,  281,
-      278,  280,  284,  277,  283,  286,  285,  284,  287,  290,
-      286,  279,  285,  283,  288,  288,  291,  289,  296,  292,
-      293,  287,  289,  294,  294,  291,  297,  297,  295,  300,
-      290,  292,  293,  295,  299,  299,  301,  302,  305,  296,
-      303,  306,  307,  308,  301,  309,  302,  312,  308,  310,
-
-      300,  313,  303,  309,  310,  314,  307,  311,  305,  314,
-      311,  306,  315,  316,  317,  312,  318,  321,  316,  320,
-      323,  322,  325,  313,  324,  324,  322,  315,  326,  326,
-      317,  322,  330,  321,  327,  318,  319,  319,  328,  320,
-      323,  329,  319,  331,  319,  333,  335,  325,  332,  327,
-      328,  330,  319,  332,  333,  334,  329,  339,  338,  336,
-      340,  335,  319,  336,  337,  331,  341,  341,  343,  337,
-      338,  342,  344,  340,  334,  339,  342,  345,  346,  354,
-      343,  346,  347,  126,  344,  348,  348,  349,  349,  350,
-      351,  351,  345,  353,  350,  347,  352,  352,  353,  355,
-
-      354,  356,  357,  359,  355,  356,  358,  357,  359,  360,
-      358,  361,  362,  363,  365,  365,  361,  362,  364,  366,
-      368,  364,  367,  368,  366,  374,  364,  363,  369,  360,
-      364,  367,  369,  370,  371,  372,  373,  374,  370,  375,
-      372,  380,  376,  377,  375,  373,  377,  371,  376,  378,
-      379,  381,  378,  382,  369,  379,  384,  383,  382,  380,
-      383,  384,  385,  386,  387,  381,  385,  385,  386,  388,
-      389,  390,  388,  387,  393,  390,  390,  391,  392,  391,
-      392,  394,  389,  395,  396,  397,  398,  388,  399,  397,
-      400,  401,  393,  402,  403,  398,  404,  404,  402,  394,
-
-      407,  405,  395,  399,  396,  405,  401,  406,  400,  408,
-      409,  410,  406,  403,  411,  412,  407,  415,  410,  411,
-      413,  414,  412,  409,  416,  413,  414,  417,  408,  418,
-      420,  416,  419,  420,  421,  415,  417,  419,  421,  422,
-      423,  423,  425,  418,  427,  426,  428,  429,  427,  423,
-      426,  430,  437,  436,  443,  429,  442,  124,  437,  438,
-      422,  425,  436,  438,  428,  439,  430,  441,  445,  445,
-      439,  440,  441,  440,  442,  440,  448,  444,  440,  443,
-      444,  446,  451,  440,  447,  447,  449,  449,  446,  440,
-      440,  448,  450,  452,  455,  450,  453,  454,  454,  456,
-
-      457,  122,  451,  459,  453,  457,  458,  458,  459,  455,
-      460,  461,  452,  462,  461,  460,  463,  456,  464,  462,
-      465,  467,  466,  469,  463,  471,  464,  466,  467,  468,
-      468,  469,  470,  473,  474,  476,  473,  470,  465,  475,
-      475,  480,  477,  478,  471,  481,  478,  482,  474,  483,
-      476,  477,  484,  486,  478,  485,  487,  486,  488,  489,
-      492,  490,  480,  491,  485,  493,  481,  482,  489,  491,
-      496,  483,  484,  494,  487,  490,  497,  488,  494,  493,
-      492,  495,  498,  499,  503,  495,  504,  498,  497,  496,
-      500,  500,  501,  502,  506,  505,  502,  501,  509,  504,
-
-      505,  511,  503,  512,  499,  507,  507,  508,  508,  513,
-      514,  510,  516,  509,  506,  510,  516,  517,  518,  520,
-      511,  523,  519,  513,  521,  525,  523,  512,  522,   67,
-      525,  514,  515,  518,  522,  515,  519,  515,  521,  526,
-      520,  515,  517,  515,  524,  524,  527,  531,  515,  530,
-      524,  529,  524,  526,  528,  528,  529,  530,  527,  532,
-      534,  531,  533,  533,  534,  537,  536,  538,  537,  539,
-      524,  536,  540,  542,  541,  543,  544,  540,  532,  545,
-      543,  546,  539,  541,  547,  549,  538,  550,  551,  547,
-      546,  561,  542,  545,  561,  552,  544,  553,  555,  549,
-
-      552,  554,  553,  551,  563,  550,  554,  555,  556,  556,
-      557,  562,  559,  565,  681,  557,  559,  559,  560,  560,
-      564,  681,  560,  564,  563,  566,  562,  567,  568,  569,
-      566,  570,  567,  568,  565,  569,  572,  570,  571,  571,
-      573,  574,  575,  576,  574,  572,  577,  579,  578,  580,
-      581,  589,  579,  582,  580,   61,  582,  588,  573,  583,
-      575,  578,  576,  586,  584,  589,  577,  585,  581,  584,
-      583,  590,  585,  587,  587,  591,  588,  592,  586,  591,
-      593,  594,  595,  590,  598,  600,  599,  601,  602,  593,
-      605,  608,  601,  602,  603,  592,  603,  604,  598,  606,
-
-      594,  599,  604,  607,  605,  600,  608,  595,  607,  609,
-      610,  610,  611,  606,  612,  613,  614,  615,  616,  618,
-      613,  617,  615,  612,  609,  617,  619,  620,  618,  622,
-      611,  621,  623,  624,  625,  614,  627,  616,  628,  626,
-      625,  619,  620,  621,  630,  631,  633,  628,  622,  630,
-      632,  624,  634,  623,  626,  636,  627,  634,  632,  631,
-      635,  637,  638,  643,  635,  635,  633,  638,  636,  640,
-      637,  639,  639,  641,  640,  642,  642,  644,  641,  645,
-      646,  647,  644,  643,  648,  649,  647,  650,  651,  648,
-      649,  650,  652,  645,  655,  654,  656,  651,  646,  654,
-
-      658,  657,  651,  652,  651,  659,  651,  660,  661,  655,
-      662,  663,  669,  659,  656,  657,  664,  664,  671,  658,
-      668,  660,  661,  665,  665,  668,  667,  675,  662,  667,
-      679,  669,  670,  670,  672,  672,  663,  673,  671,  674,
-      674,  676,  673,  677,  678,  688,  676,  675,  679,  678,
-      680,  677,  683,  684,  685,  686,  680,  683,  684,  685,
-      686,  687,  689,  691,  688,  690,  690,  692,  694,  693,
-      687,  695,  696,  689,  693,  697,  698,  698,  699,  700,
-      702,  701,  705,  691,  706,   56,  696,  708,  694,  707,
-      692,  695,  704,  697,  707,  709,  704,  704,  699,  701,
-
-      711,  712,  706,  702,  700,  708,  710,  713,  705,  714,
-      710,  715,  716,  719,  718,  709,  717,  716,  711,  718,
-      712,  713,  721,  717,  714,  720,  722,  723,  724,  730,
-      715,  719,  722,  724,  720,  725,  726,  721,  727,  727,
-      725,  726,  729,  730,  731,  732,  734,  729,  723,  732,
-      732,  733,  733,  735,  736,  737,  738,  740,  741,  736,
-      742,  739,  738,  731,  743,  734,  739,  744,  745,  746,
-      747,  747,  735,  748,  737,  750,  740,  741,  748,  742,
-      752,  744,  749,  743,  746,  751,  749,  754,  750,  745,
-      753,  753,  754,  755,  751,  756,  757,  755,  758,  761,
-
-      752,  762,  762,  758,  761,  763,  765,  765,  767,  767,
-      763,  769,  770,  770,  769,  756,  757,  771,  772,  773,
-      774,  775,  775,  779,  773,  776,  777,  777,  778,  780,
-      781,  782,  771,  780,  779,  774,  782,  784,  785,  786,
-      786,  787,  788,  772,  790,  776,  789,  794,  792,  781,
-      778,  789,  785,  792,  791,  784,  791,  795,  793,  796,
-      799,  787,  788,  793,  790,  796,  800,  794,  798,  800,
-      801,  795,  803,  798,  804,  801,  802,  802,  805,  806,
-      807,  808,  809,  809,  806,  799,  808,  810,  811,  812,
-      803,  813,  810,  804,  814,  815,  817,  816,  805,  818,
-
-      819,  817,  820,  807,  823,  829,  811,  815,  814,  812,
-      816,  813,  821,  823,  822,  824,  823,  827,  827,  818,
-      819,  822,  828,  820,  829,  828,  830,  821,  831,  832,
-      834,  824,  833,  835,  836,  836,  837,  831,  835,  834,
-      838,  833,  830,  839,  833,  840,  841,  842,  832,  843,
-      843,  844,  845,  838,  848,  847,  837,  849,  850,  840,
-      847,  839,  849,  850,  852,  842,  853,  844,  851,  852,
-      845,  841,  848,  854,  851,  857,  854,  858,  859,  853,
-      860,  861,  854,  857,  862,  864,  870,  865,  866,  867,
-      858,  865,  869,  866,  867,  868,  859,  861,  871,  860,
-
-      868,  869,  862,  872,  872,  864,  873,  874,  876,  870,
-      875,  877,  878,  871,  879,  880,  877,  881,  881,  874,
-      873,  880,  875,  886,  878,  882,  882,  883,  876,  884,
-      884,  887,  879,  885,  888,  890,  883,  899,  885,  889,
-      889,  891,  891,  893,  886,  892,  892,  897,  893,  894,
-      887,  896,  894,  898,  888,  890,  896,  903,  898,  900,
-      900,  902,  899,  901,  901,  897,  902,  904,  905,  903,
-      906,  903,  907,  908,  908,  909,  903,  910,  910,  911,
-      913,  914,  915,  917,  916,  918,  920,  904,  905,  913,
-      906,  916,  917,  907,  919,  919,  925,  915,  921,  911,
-
-      923,  909,  914,  924,  930,  923,  926,  931,  924,  927,
-      927,  918,  920,  926,  921,  928,  925,  929,  932,  933,
-      928,  934,  931,  935,  930,  939,  929,  936,  937,  935,
-      938,  938,   51,  940,  933,  950,  936,  932,  941,  937,
-      934,  942,  942,  941,  937,  943,  939,  940,  944,  943,
-      943,  945,  946,  944,  947,  948,  949,  946,  952,  948,
-      950,  954,  951,  945,  953,  959,  947,  951,  949,  953,
-      959,  956,  966,  954,  956,  957,  957,  958,  958,  960,
-      952,  961,  962,  963,  966,  960,  961,  969,  962,  968,
-      968,  970,  963,  971,  973,  973,  976,  978,  977,  984,
-
-      970,  968,  971,  977,  986,  969,  979,  979,  983,  980,
-      976,  980,  981,  981,  978,  983,  985,  985,  987,  984,
-      988,  989,  990,  991,  993,  986,  994,  995,  994,  993,
-      987,  996,  988,  989,  997,  998,  997,  990,  999,  999,
-      996, 1000, 1001,  991, 1002,  995, 1002, 1001, 1003,  998,
-     1004, 1005, 1006, 1003, 1007, 1004, 1008, 1010, 1013, 1007,
-     1011, 1008, 1012, 1012, 1016, 1029, 1014, 1000, 1017, 1005,
-     1013, 1015, 1006, 1015, 1011, 1014, 1010, 1017, 1014, 1018,
-     1022, 1019, 1020, 1023, 1024, 1016, 1019, 1020, 1026, 1028,
-     1029, 1018, 1030, 1022, 1026, 1028, 1031, 1031, 1032, 1034,
-
-     1024, 1030, 1035, 1023, 1033, 1033, 1035, 1032, 1036, 1037,
-     1038, 1038, 1039, 1036, 1042, 1043, 1044, 1044, 1034, 1046,
-     1039, 1049, 1037, 1047, 1043, 1045, 1045, 1050, 1047, 1042,
-     1048, 1046, 1050, 1051, 1048, 1052, 1049, 1054, 1055, 1056,
-     1057, 1058, 1060, 1060, 1061, 1062, 1076, 1061, 1064, 1064,
-     1063, 1076, 1057, 1067, 1052, 1065, 1065, 1055, 1062, 1051,
-     1056, 1054, 1058, 1063, 1066, 1066, 1067, 1068, 1068, 1069,
-     1069, 1070, 1071, 1071, 1072, 1072, 1074, 1073, 1077, 1077,
-     1078, 1079, 1079, 1080, 1082, 1089, 1081, 1082, 1083, 1083,
-     1070, 1073, 1081, 1084, 1084, 1074, 1085, 1086, 1086, 1078,
-
-     1091, 1080, 1088, 1088, 1083, 1090, 1090, 1093, 1092, 1091,
-     1092, 1089, 1094, 1095, 1096, 1085, 1097, 1094, 1098, 1093,
-     1099, 1100, 1101, 1098, 1102, 1105,   50, 1096, 1103, 1102,
-     1100, 1101, 1103, 1107, 1112, 1099, 1109, 1097, 1095, 1108,
-     1108, 1109, 1107, 1110, 1110, 1105, 1113, 1114, 1116, 1112,
-     1117, 1116, 1110, 1118, 1118, 1117, 1119, 1123, 1120, 1114,
-     1119, 1120, 1113, 1121, 1121, 1122, 1125, 1124, 1126, 1127,
-     1122, 1124, 1128, 1126, 1127, 1130, 1131, 1123, 1128, 1132,
-     1133, 1131, 1133, 1136, 1136, 1142, 1125, 1132, 1139, 1139,
-     1142, 1130, 1143, 1144, 1144, 1146, 1146, 1143, 1148, 1149,
-
-     1149, 1150, 1151, 1148, 1152, 1154, 1154, 1157, 1158, 1152,
-     1158, 1159, 1157, 1160, 1161, 1162, 1162, 1150, 1165, 1161,
-     1163, 1163, 1164, 1164, 1151, 1159, 1166, 1160, 1167, 1168,
-     1165, 1169, 1170, 1171, 1171, 1173, 1172, 1174, 1175, 1176,
-     1167, 1168, 1177, 1169, 1166, 1172, 1178, 1179, 1180, 1181,
-     1179, 1175, 1170, 1180, 1181, 1184, 1177, 1174, 1182, 1182,
-     1188, 1173, 1189, 1176, 1178, 1185, 1185, 1187, 1187, 1188,
-     1190, 1191, 1193, 1184, 1192, 1194, 1194, 1189, 1195, 1196,
-     1197, 1198, 1200, 1195, 1201, 1204, 1206, 1206, 1190, 1191,
-     1192, 1193, 1205, 1207, 1196, 1205, 1208, 1210, 1210, 1197,
-
-     1211, 1198, 1200, 1201, 1213, 1204, 1212, 1212, 1207, 1213,
-     1214, 1214, 1218, 1218, 1208, 1219, 1220, 1221, 1222, 1211,
-     1223, 1225, 1221, 1222, 1226, 1220, 1227, 1228, 1223, 1226,
-     1232, 1227, 1229, 1229, 1230, 1230, 1225, 1219, 1231, 1233,
-     1233, 1237, 1228, 1231, 1236, 1232, 1234, 1234, 1239, 1236,
-     1240, 1239, 1241, 1237, 1246, 1242, 1243, 1243, 1244, 1247,
-     1249, 1241,   45, 1240, 1242, 1248, 1248, 1244, 1252, 1249,
-     1250, 1251, 1251, 1246, 1253, 1250, 1252, 1255, 1247, 1253,
-     1256, 1258, 1258, 1260, 1262, 1268, 1255, 1263, 1263, 1264,
-     1265, 1265, 1264, 1256, 1266, 1266, 1267, 1269, 1278, 1268,
-
-     1270, 1270, 1269, 1260, 1262, 1271, 1274, 1275, 1279, 1271,
-     1280, 1275, 1274, 1284, 1267, 1282, 1279, 1278, 1281, 1281,
-     1283, 1285, 1287, 1286, 1289, 1283, 1290, 1289, 1292, 1280,
-     1294, 1282, 1286, 1284, 1294, 1290, 1293, 1293, 1299, 1295,
-     1297, 1297, 1287, 1298, 1300,   40, 1292, 1285, 1295, 1303,
-     1299, 1305, 1298, 1307, 1303, 1304, 1304, 1308, 1307, 1309,
-     1305, 1310, 1311, 1313, 1309, 1314, 1308, 1312, 1312, 1300,
-     1315, 1316, 1313, 1317, 1318, 1319, 1321, 1311, 1317, 1316,
-     1310, 1314, 1320, 1320, 1325, 1322, 1324, 1324, 1327, 1315,
-     1322, 1331, 1321, 1330, 1319, 1328, 1328, 1329, 1329, 1332,
-
-     1318, 1333, 1333, 1331, 1325, 1334, 1335, 1335, 1336, 1336,
-     1327, 1337, 1330, 1339, 1347, 1340,   14, 1334,   13, 1332,
-     1340, 1341, 1341, 1342, 1342, 1343, 1343, 1339, 1344, 1361,
-     1337, 1345, 1345, 1344, 1348, 1348, 1347, 1350, 1350, 1351,
-     1354, 1355, 1355, 1363, 1351, 1356, 1358, 1363, 1354, 1361,
-     1356, 1358, 1362, 1362, 1367, 1367, 1369, 1369, 1370, 1369,
-     1372, 1372, 1370, 1373, 1375, 1376, 1376, 1377, 1377, 1379,
-     1379, 1381, 1381, 1382, 1382, 1383, 1383, 1385, 1373, 1386,
-     1386, 1393, 1375, 1394, 1396, 1393, 1395, 1395, 1399, 1385,
-     1398, 1400,    0, 1396, 1401, 1401,    0,    0,    0,    0,
-
-        0,    0, 1399, 1394,    0, 1398,    0,    0,    0,    0,
-     1400, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1405, 1405,
-     1405, 1405, 1405, 1405, 1405, 1406, 1406, 1406, 1406, 1406,
-     1406, 1406, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1408,
-     1408, 1408, 1408, 1408, 1408, 1408, 1410, 1410,    0, 1410,
-     1410, 1410, 1410, 1411, 1411,    0,    0,    0, 1411, 1411,
-     1412, 1412,    0,    0, 1412,    0, 1412, 1413,    0,    0,
-        0,    0,    0, 1413, 1414, 1414,    0,    0,    0, 1414,
-     1414, 1415,    0,    0,    0,    0,    0, 1415, 1416, 1416,
-        0, 1416, 1416, 1416, 1416, 1417, 1417,    0, 1417, 1417,
-
-     1417, 1417, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-     1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-     1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-     1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-     1403, 1403
+       12,   69,   28,   66,   22,   69,   24,   26,   26,   12,
+       19,   22,   19,   19,   23,   19,   26,   66,   27,   23,
+       19,   19,   27,   23,   30,   27,   23,   31,   31,   23,
+       32,   32,   27,  584,   34,   32,   31,   60,   60,   30,
+       35,   77,   31,   34,   77,   35,   31,   78,   36,   34,
+       75,   32,   34,   36,   75,   35,   38,   76,   35,   34,
+       79,   37,   37,   36,   37,   78,  130,   36,   36,   88,
+       38,   39,   39,   88,   79,   38,   39,   76,   55,   37,
+
+       55,   55,   63,   55,   63,   63,   65,   63,   65,   65,
+       82,   65,   68,   63,   68,   68,   85,   68,   80,   81,
+       86,   84,   68,   71,   83,   71,   71,   87,   71,   83,
+       80,   92,   82,   71,   71,   84,   85,   81,   86,   89,
+       90,   95,   83,   91,   89,   87,   91,   93,   94,   91,
+       92,   94,   93,   96,   90,   94,   97,   98,   99,  100,
+       97,  101,  102,   91,   98,   95,  100,   96,  104,  103,
+      105,   99,   93,  103,  101,  105,  106,  107,  108,  105,
+      109,  116,  102,  110,  111,  112,  104,  113,  113,  111,
+      107,  114,  119,  108,  115,  118,  106,  112,  120,  109,
+
+      118,  110,  116,  149,  119,  122,  122,  149,  113,  114,
+      115,  124,  129,  129,  124,  126,  120,  126,  126,  131,
+      126,  131,  131,  132,  131,  132,  132,  134,  132,  137,
+      134,  135,  136,  138,  132,  139,  135,  136,  140,  148,
+      141,  138,  142,  143,  137,  141,  146,  142,  143,  147,
+      139,  145,  145,  151,  147,  150,  152,  153,  140,  144,
+      150,  155,  148,  144,  154,  146,  155,  151,  144,  153,
+      156,  152,  153,  144,  128,  157,  158,  159,  159,  144,
+      144,  158,  154,  160,  161,  163,  162,  164,  160,  161,
+      156,  157,  164,  165,  160,  162,  166,  167,  165,  169,
+
+      168,  166,  167,  170,  171,  169,  163,  168,  172,  173,
+      171,  174,  175,  176,  177,  178,  179,  173,  176,  180,
+      181,  179,  181,  170,  182,  184,  174,  185,  185,  189,
+      172,  182,  175,  178,  178,  183,  177,  186,  187,  180,
+      183,  189,  186,  187,  184,  188,  190,  188,  191,  192,
+      193,  194,  195,  196,  192,  193,  191,  198,  198,  197,
+      186,  196,  197,  200,  188,  190,  194,  199,  199,  201,
+      195,  202,  203,  204,  202,  205,  203,  206,  208,  200,
+      205,  210,  204,  208,  201,  207,  207,  209,  211,  212,
+      213,  206,  209,  214,  214,  215,  216,  217,  220,  219,
+
+      221,  210,  217,  213,  218,  222,  211,  218,  216,  221,
+      212,  219,  223,  215,  228,  220,  224,  225,  220,  225,
+      225,  226,  226,  229,  227,  223,  222,  227,  224,  234,
+      230,  228,  231,  231,  228,  232,  233,  233,  229,  230,
+      232,  235,  236,  237,  234,  238,  239,  236,  240,  239,
+      238,  241,  243,  244,  245,  242,  246,  243,  244,  247,
+      249,  235,  240,  237,  242,  248,  251,  241,  248,  252,
+      241,  253,  241,  247,  249,  245,  246,  254,  252,  255,
+      259,  251,  256,  258,  248,  250,  257,  250,  250,  261,
+      260,  257,  253,  262,  255,  259,  254,  250,  265,  250,
+
+      250,  250,  256,  258,  250,  260,  263,  262,  266,  261,
+      267,  263,  264,  264,  268,  264,  270,  269,  265,  269,
+      270,  271,  272,  273,  266,  274,  267,  276,  268,  277,
+      275,  276,  273,  127,  274,  275,  272,  278,  277,  271,
+      279,  281,  278,  280,  284,  273,  279,  283,  280,  282,
+      282,  285,  283,  287,  281,  286,  289,  287,  288,  288,
+      285,  289,  290,  291,  291,  284,  294,  286,  293,  293,
+      295,  296,  297,  299,  300,  301,  302,  303,  295,  305,
+      296,  302,  306,  290,  297,  303,  304,  294,  307,  301,
+      308,  304,  307,  299,  300,  309,  310,  305,  311,  314,
+
+      309,  313,  316,  315,  306,  308,  317,  317,  315,  125,
+      318,  321,  310,  315,  320,  314,  322,  311,  312,  312,
+      323,  313,  316,  321,  312,  324,  312,  319,  319,  320,
+      327,  322,  325,  326,  312,  318,  328,  325,  330,  323,
+      331,  329,  326,  330,  312,  329,  332,  324,  333,  327,
+      335,  328,  331,  334,  334,  336,  337,  338,  342,  339,
+      338,  333,  335,  342,  332,  340,  340,  336,  341,  341,
+      346,  337,  339,  343,  343,  344,  344,  345,  347,  352,
+      348,  349,  345,  347,  348,  350,  349,  351,  353,  350,
+      354,  346,  351,  353,  355,  354,  123,  356,  358,  352,
+
+      356,  357,  357,  358,  359,  356,  363,  360,  355,  356,
+      360,  361,  362,  359,  365,  361,  364,  362,  367,  363,
+      366,  364,  368,  367,  369,  372,  370,  369,  368,  370,
+      365,  371,  366,  373,  374,  375,  371,  361,  375,  374,
+      376,  378,  379,  372,  377,  376,  378,  373,  377,  377,
+      380,  379,  381,  380,  384,  385,  381,  381,  382,  383,
+      382,  383,  386,  387,  390,  388,  389,  391,  380,  388,
+      394,  392,  384,  385,  396,  389,  398,  393,  396,  390,
+      399,  386,  393,  387,  400,  391,  392,  395,  395,  394,
+      397,  401,  398,  403,  406,  397,  402,  400,  401,  399,
+
+      403,  402,  404,  405,  407,  408,  409,  404,  405,  413,
+      410,  407,  406,  411,  408,  410,  411,  412,  414,  414,
+      409,  412,  417,  416,  418,  419,  417,  414,  416,  420,
+      413,  423,  426,  419,  427,  428,  432,  433,  429,  428,
+      427,  426,  418,  429,  420,  431,  435,  435,  423,  430,
+      431,  430,  434,  430,  432,  434,  430,  436,  437,  437,
+      438,  430,  433,  441,  436,  439,  439,  430,  430,  440,
+      442,  443,  440,  444,  444,  438,  445,  446,  452,  443,
+      447,  448,  448,  441,  452,  447,  121,  449,  450,  442,
+      453,  445,  449,  450,  451,  446,  454,  451,  453,  455,
+
+      456,  457,  458,  458,  454,  456,  459,  460,  457,  461,
+      463,  464,  460,  463,  459,  465,  465,  455,  466,  467,
+      469,  470,  467,  471,  472,  464,  474,  473,  461,  477,
+      467,  476,  475,  466,  480,  474,  475,  479,  481,   67,
+      480,  469,  470,  471,  478,  482,  472,  473,  477,  476,
+      483,  479,  484,  478,  485,  483,  484,  486,  481,  482,
+      487,  488,  489,  489,  491,  487,  490,  491,  492,  486,
+      493,  490,  494,  485,  495,  496,  496,  494,  497,  497,
+      498,  499,  488,  493,  500,  499,  492,  501,  502,  504,
+      506,  505,  507,  504,  495,  498,  509,  508,  510,  516,
+
+      516,  556,  502,  500,  510,  506,  507,  556,  511,  513,
+      509,  501,  503,  511,  513,  503,  505,  503,  508,  512,
+      512,  503,  514,  503,  517,  512,  515,  512,  503,  517,
+      519,  518,  520,  521,  521,  524,  514,  522,  515,  518,
+      524,  522,  526,  525,  519,  512,  525,  527,  528,  529,
+      530,  520,  531,  528,  532,  534,  533,  531,  529,  537,
+      527,  526,  535,  538,  534,  539,  540,  535,  541,  530,
+      533,  540,  542,  541,  532,  543,  549,  542,  537,  549,
+      539,  538,  544,  544,  543,  545,  550,  547,  551,  553,
+      545,  547,  547,  548,  548,  552,  557,  548,  552,  554,
+
+      555,  550,  557,  559,  554,  555,  558,  558,  551,  560,
+      553,  561,  559,  562,  561,  563,  564,  565,  566,  567,
+      568,  570,  569,  566,  567,  569,  573,  560,  571,  575,
+      565,  562,  570,  571,  563,  572,  564,  576,  568,  579,
+      572,  573,  574,  574,  577,  578,  580,  581,  575,  578,
+      582,  576,  587,  585,  586,  580,  577,  579,  588,  589,
+      590,   61,  591,  588,  589,  590,  581,  585,  592,  586,
+      594,  595,  587,  593,  597,  582,  591,  600,  593,  596,
+      596,  598,  592,  599,  601,  594,  595,  602,  599,  601,
+      598,  603,  597,  604,  605,  603,  600,  606,  607,  608,
+
+      609,  610,  604,  613,  614,  611,  602,  612,  618,  605,
+      607,  611,  606,  614,  617,  616,  618,  619,  608,  610,
+      616,  609,  612,  613,  620,  622,  621,  623,  617,  620,
+      621,  621,  625,  625,  624,  626,  623,  619,  622,  624,
+      626,  627,  628,  628,  629,  630,  627,  631,  632,  633,
+      630,  634,  635,  629,  633,  636,  634,  635,  637,  636,
+      638,  631,  641,  642,  640,  643,  632,  637,  640,  644,
+      645,  638,  637,  646,  637,  647,  637,  641,  645,  643,
+      648,  642,  649,  649,  650,  650,  652,  646,  644,  652,
+      653,  654,  656,  647,  660,  653,  655,  655,  657,  657,
+
+      662,  658,  659,  659,  661,  648,  658,  664,  662,  661,
+      654,  663,  656,  665,  660,  666,  663,  673,  668,  665,
+      674,  669,  666,  668,  670,  664,  669,  671,  672,  670,
+      676,  674,  671,  675,  675,  677,  673,  672,  678,  679,
+      680,  682,  682,  678,  681,  683,  684,  686,  685,  688,
+      676,  689,  691,  688,  688,  690,  692,  691,  677,  679,
+      680,  693,  681,  694,  695,  683,  685,  694,  696,  697,
+      686,  684,  699,  690,  692,  698,  703,  689,  701,  700,
+      704,  693,  695,  697,  700,  701,  705,  696,  702,  704,
+      698,  699,  706,  702,  703,  707,  714,  708,  706,  709,
+
+      710,  705,  708,  713,  709,  710,  711,  711,  713,  715,
+      714,  717,  717,  716,  718,  719,  707,  716,  716,  720,
+      721,  722,  724,  725,  723,  726,  728,  722,  715,  723,
+      727,  729,  730,  718,  719,  731,  731,  736,  732,  721,
+      728,  724,  725,  732,  726,  720,  733,  730,  734,  727,
+      733,  735,  729,  737,  737,  739,  740,  736,  738,  739,
+      735,  734,  741,  738,  744,  745,  745,  741,  746,  744,
+      748,  748,  754,  746,  750,  750,  740,  752,  753,  753,
+      752,  755,  757,  756,  758,  758,  761,  754,  756,  759,
+      760,  760,  762,  764,  763,  765,  767,  757,  763,  768,
+
+      765,  769,  769,  762,  770,  771,  755,  772,  761,  759,
+      776,  774,  764,  768,  767,  773,  774,  773,  775,  777,
+      778,  781,  785,  775,  770,  771,  778,  772,  782,  780,
+      776,  782,  783,  777,  780,  784,  784,  783,  786,  787,
+      785,  789,  788,  790,  791,  791,  781,  788,  790,  792,
+      793,  794,  795,  796,  792,  799,  798,  786,  797,  787,
+      799,  800,  801,  802,  789,  803,  804,  796,  793,  798,
+      797,  794,  795,  804,  805,  806,  809,  809,  812,   56,
+      803,  800,  801,  805,  802,  810,  805,  811,  810,  813,
+      814,  806,  811,  815,  812,  816,  817,  819,  813,  818,
+
+      818,  817,  815,  820,  816,  815,  821,  822,  823,  814,
+      824,  825,  825,  826,  827,  829,  820,  819,  830,  832,
+      829,  822,  831,  840,  821,  832,  833,  831,  824,  826,
+      834,  833,  827,  823,  838,  835,  830,  839,  835,  841,
+      842,  840,  838,  834,  835,  843,  845,  846,  847,  848,
+      839,  846,  849,  847,  848,  850,  842,  849,  841,  851,
+      852,  853,  853,  843,  850,  854,  845,  857,  855,  856,
+      859,  858,  857,  861,  861,  852,  862,  862,  860,  854,
+      855,  856,  851,  858,  860,  863,  864,  864,  859,  866,
+      865,  879,  867,  868,  863,  865,  869,  869,  870,  871,
+
+      871,  872,  872,  873,  874,  877,  884,  874,  873,  876,
+      866,  867,  878,  868,  876,  885,  879,  878,  870,  880,
+      880,  881,  881,  877,  882,  883,  884,  886,  887,  882,
+      888,  888,  889,  890,  890,  885,  891,  883,  895,  883,
+      898,  893,  894,  894,  883,  896,  897,  886,  900,  887,
+      893,  901,  896,  895,   51,  897,  891,  903,  889,  899,
+      899,  905,  903,  904,  906,  910,  898,  901,  904,  907,
+      907,  906,  908,  909,  900,  911,  912,  908,  913,  915,
+      914,  905,  909,  916,  918,  910,  914,  919,  915,   50,
+      911,  917,  917,  913,  916,  912,  924,  920,  929,  916,
+
+       45,  919,  920,  921,  921,  918,  922,  923,  924,  925,
+      922,  922,  923,  926,  925,  927,  928,  930,  931,  927,
+      933,  932,  930,  929,  935,  926,  932,  935,  928,  936,
+      936,  938,  933,  937,  937,  944,  939,  938,  940,  941,
+      931,  939,  946,  946,  940,  947,  948,  944,  941,  949,
+      951,  951,  954,  956,  946,  948,  955,  962,  949,  957,
+      957,  955,  958,  947,  958,  961,  954,  959,  959,  964,
+      956,  965,  961,  963,  963,  966,  967,  962,  968,  969,
+      971,  976,  972,  965,  972,  971,  973,  966,  967,  974,
+      964,  977,  977,  968,  978,  976,  979,  983,  974,  969,
+
+      980,  979,  980,  981,  973,  982,  984,  985,  981,  986,
+      982,  988,  985,  989,  986,  983,  990,  990,   40,  991,
+      978,  995,  993,  992,  993,  994,  984,  989, 1000, 1001,
+      988,  991,  992,  995,  994,  992,  996,  997,  999, 1006,
+     1003,  996,  997, 1005, 1007, 1001, 1003, 1009, 1000, 1005,
+     1011,  999,   14, 1007, 1008, 1008, 1009, 1010, 1010, 1012,
+     1013, 1014, 1016, 1012, 1006, 1013, 1015, 1015, 1019, 1011,
+     1016, 1020, 1020, 1022, 1014, 1021, 1021, 1019, 1023, 1025,
+     1024, 1026, 1027, 1023, 1024, 1022, 1026, 1028, 1030, 1032,
+     1031, 1033, 1034, 1056, 1025, 1036, 1036, 1037, 1038, 1056,
+
+     1037, 1039,   13, 1033, 1040, 1040, 1028, 1043, 1027, 1031,
+     1032, 1038, 1030, 1034, 1039, 1041, 1041, 1042, 1042, 1046,
+     1043, 1044, 1044, 1045, 1045, 1047, 1047, 1048, 1048, 1049,
+     1051, 1052, 1052, 1053, 1060, 1051, 1054, 1054, 1046, 1055,
+     1057, 1059, 1059, 1057, 1058, 1058, 1061, 1061, 1049, 1063,
+     1063, 1064, 1053, 1060, 1065, 1065, 1066, 1055, 1067, 1068,
+     1058, 1069, 1070, 1071, 1068, 1066, 1072, 1073, 1076, 1074,
+     1067, 1072, 1075, 1076, 1079, 1070, 1077, 1064, 1074, 1081,
+     1077, 1075, 1073, 1086, 1071, 1087, 1069, 1083, 1081, 1082,
+     1082, 1144, 1083, 1103, 1079, 1084, 1084, 1087, 1086, 1089,
+
+     1090, 1096, 1089, 1098, 1084, 1090, 1091, 1091, 1092, 1103,
+     1093, 1095, 1092, 1093, 1094, 1094, 1095, 1144, 1097, 1099,
+     1100, 1096, 1097, 1098, 1099, 1100, 1101, 1105, 1104, 1106,
+     1123, 1106, 1101, 1104, 1122, 1105, 1109, 1109, 1112, 1112,
+     1115, 1116, 1116, 1118, 1118, 1115, 1120, 1121, 1121, 1124,
+     1122, 1120, 1123, 1129, 1124, 1126, 1126, 1130, 1129, 1130,
+     1131, 1132, 1133, 1133, 1134, 1134, 1132, 1135, 1135, 1136,
+     1137, 1138, 1139, 1140, 1131, 1141, 1142, 1142, 1143, 1145,
+     1146, 1136, 1147, 1138, 1139, 1140, 1148, 1143, 1137, 1149,
+     1154, 1150, 1151, 1146, 1160, 1141, 1150, 1151, 1159, 1145,
+
+     1148, 1152, 1152, 1155, 1155, 1158, 1147, 1149, 1154, 1157,
+     1157, 1161, 1160, 1159, 1158, 1162, 1163, 1164, 1164, 1165,
+     1167, 1166, 1168, 1173, 1165, 1170, 1176, 1174, 1177, 1161,
+     1174, 1162, 1175, 1175, 1180, 1163, 1166, 1179, 1179, 1167,
+     1187, 1176, 1168, 1173, 1170, 1188, 1177, 1181, 1181, 1182,
+     1182, 1186, 1186, 1180, 1188, 1189, 1190, 1191, 1193, 1194,
+     1189, 1190, 1187, 1195, 1194, 1191, 1196,    0, 1195, 1197,
+     1197, 1198, 1198, 1193, 1199, 1200, 1200, 1201, 1201, 1199,
+     1203, 1196, 1204, 1206, 1207, 1203, 1206, 1208, 1213, 1209,
+     1210, 1210, 1211, 1214, 1204, 1216, 1208, 1207, 1209, 1215,
+
+     1215, 1211, 1217, 1217, 1216, 1218, 1219, 1213, 1221, 1222,
+     1227, 1219, 1214, 1218, 1224, 1224, 1232, 1221, 1228, 1228,
+     1229, 1233, 1222, 1229, 1230, 1230, 1231, 1231, 1234, 1242,
+     1227, 1235, 1235, 1234, 1232, 1233, 1236, 1239, 1243, 1244,
+     1236, 1245, 1245, 1239, 1246, 1247, 1243, 1248, 1242, 1249,
+     1247, 1251, 1250, 1253, 1255, 1257, 1253, 1258, 1244, 1257,
+     1246, 1250, 1256, 1256, 1260, 1261, 1258, 1248, 1262, 1265,
+     1279, 1251, 1255, 1260, 1265, 1249, 1267, 1261, 1266, 1266,
+     1270, 1269, 1271, 1272, 1275, 1267, 1269, 1273, 1273, 1270,
+     1274, 1276, 1278, 1262, 1277, 1280, 1279, 1278, 1272, 1274,
+
+     1275, 1271, 1277, 1281, 1281, 1285, 1282, 1284, 1284, 1286,
+     1276, 1282, 1287, 1287, 1280, 1288, 1288, 1289, 1290, 1291,
+     1292, 1292, 1293, 1294, 1294, 1285, 1295, 1297, 1298,    0,
+     1290, 1286,    0, 1298, 1293, 1302, 1289, 1299, 1299, 1291,
+     1302, 1297, 1300, 1300, 1317, 1295, 1301, 1301, 1303, 1303,
+     1305, 1305, 1307, 1307, 1308, 1311, 1312, 1312, 1319, 1308,
+     1313, 1315, 1319, 1311, 1317, 1313, 1315, 1318, 1318, 1323,
+     1323, 1325, 1327, 1327, 1328, 1325, 1330, 1331, 1331, 1332,
+     1332, 1334, 1334, 1336, 1336, 1338, 1339, 1339, 1344, 1328,
+     1345, 1347, 1344, 1349, 1330, 1346, 1346, 1338, 1350, 1351,
+
+     1347, 1352, 1352,    0,    0,    0,    0,    0, 1349,    0,
+     1345,    0, 1350,    0,    0,    0,    0,    0, 1351, 1355,
+     1355, 1355, 1355, 1355, 1355, 1355, 1356, 1356, 1356, 1356,
+     1356, 1356, 1356, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
+     1358, 1358, 1358, 1358, 1358, 1358, 1358, 1359, 1359, 1359,
+     1359, 1359, 1359, 1359, 1361, 1361,    0, 1361, 1361, 1361,
+     1361, 1362, 1362,    0,    0,    0, 1362, 1362, 1363, 1363,
+        0,    0, 1363,    0, 1363, 1364,    0,    0,    0,    0,
+        0, 1364, 1365, 1365,    0,    0,    0, 1365, 1365, 1366,
+        0,    0,    0,    0,    0, 1366, 1367, 1367,    0, 1367,
+
+     1367, 1367, 1367, 1368, 1368,    0, 1368, 1368, 1368, 1368,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1591,43 +1543,54 @@ void ub_c_error(const char *message);
 struct inc_state {
        char* filename;
        int line;
+       YY_BUFFER_STATE buffer;
+       struct inc_state* next;
 };
-static struct inc_state parse_stack[MAXINCLUDES];
-static YY_BUFFER_STATE include_stack[MAXINCLUDES];
-static int config_include_stack_ptr = 0;
+static struct inc_state* config_include_stack = NULL;
 static int inc_prev = 0;
 static int num_args = 0;
 
-
 static void config_start_include(const char* filename)
 {
        FILE *input;
+       struct inc_state* s;
+       char* nm;
        if(strlen(filename) == 0) {
                ub_c_error_msg("empty include file name");
                return;
        }
-       if(config_include_stack_ptr >= MAXINCLUDES) {
-               ub_c_error_msg("includes nested too deeply, skipped (>%d)", MAXINCLUDES);
+       s = (struct inc_state*)malloc(sizeof(*s));
+       if(!s) {
+               ub_c_error_msg("include %s: malloc failure", filename);
                return;
        }
        if(cfg_parser->chroot && strncmp(filename, cfg_parser->chroot,
                strlen(cfg_parser->chroot)) == 0) {
                filename += strlen(cfg_parser->chroot);
        }
+       nm = strdup(filename);
+       if(!nm) {
+               ub_c_error_msg("include %s: malloc failure", filename);
+               free(s);
+               return;
+       }
        input = fopen(filename, "r");
        if(!input) {
                ub_c_error_msg("cannot open include file '%s': %s",
                        filename, strerror(errno));
+               free(s);
+               free(nm);
                return;
        }
-       LEXOUT(("switch_to_include_file(%s) ", filename));
-       parse_stack[config_include_stack_ptr].filename = cfg_parser->filename;
-       parse_stack[config_include_stack_ptr].line = cfg_parser->line;
-       include_stack[config_include_stack_ptr] = YY_CURRENT_BUFFER;
-       cfg_parser->filename = strdup(filename);
+       LEXOUT(("switch_to_include_file(%s)\n", filename));
+       s->filename = cfg_parser->filename;
+       s->line = cfg_parser->line;
+       s->buffer = YY_CURRENT_BUFFER;
+       s->next = config_include_stack;
+       config_include_stack = s;
+       cfg_parser->filename = nm;
        cfg_parser->line = 1;
        yy_switch_to_buffer(yy_create_buffer(input,YY_BUF_SIZE));
-       ++config_include_stack_ptr;
 }
 
 static void config_start_include_glob(const char* filename)
@@ -1659,6 +1622,8 @@ static void config_start_include_glob(const char* filename)
                if(r) {
                        /* some error */
                        globfree(&g);
+                       if(r == GLOB_NOMATCH)
+                               return; /* no matches for pattern */
                        config_start_include(filename); /* let original deal with it */
                        return;
                }
@@ -1676,12 +1641,15 @@ static void config_start_include_glob(const char* filename)
 
 static void config_end_include(void)
 {
-       --config_include_stack_ptr;
+       struct inc_state* s = config_include_stack;
+       if(!s) return;
        free(cfg_parser->filename);
-       cfg_parser->filename = parse_stack[config_include_stack_ptr].filename;
-       cfg_parser->line = parse_stack[config_include_stack_ptr].line;
+       cfg_parser->filename = s->filename;
+       cfg_parser->line = s->line;
        yy_delete_buffer(YY_CURRENT_BUFFER);
-       yy_switch_to_buffer(include_stack[config_include_stack_ptr]);
+       yy_switch_to_buffer(s->buffer);
+       config_include_stack = s->next;
+       free(s);
 }
 
 #ifndef yy_set_bol /* compat definition, for flex 2.4.6 */
@@ -1694,7 +1662,7 @@ static void config_end_include(void)
 #endif
 
 #define YY_NO_INPUT 1
-#line 148 "./util/configlexer.lex"
+#line 164 "./util/configlexer.lex"
 #ifndef YY_NO_UNPUT
 #define YY_NO_UNPUT 1
 #endif
@@ -1702,7 +1670,7 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 1704 "<stdout>"
+#line 1672 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -1746,7 +1714,7 @@ FILE *yyget_out (void );
 
 void yyset_out  (FILE * out_str  );
 
-int yyget_leng (void );
+yy_size_t yyget_leng (void );
 
 char *yyget_text (void );
 
@@ -1786,12 +1754,7 @@ static int input (void );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1892,9 +1855,9 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
     
-#line 168 "./util/configlexer.lex"
+#line 184 "./util/configlexer.lex"
 
-#line 1896 "<stdout>"
+#line 1859 "<stdout>"
 
        if ( !(yy_init) )
                {
@@ -1953,13 +1916,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 >= 1404 )
+                               if ( yy_current_state >= 1355 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 2803 );
+               while ( yy_base[yy_current_state] != 2711 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1985,668 +1948,653 @@ do_action:    /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 169 "./util/configlexer.lex"
+#line 185 "./util/configlexer.lex"
 { 
        LEXOUT(("SP ")); /* ignore */ }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 171 "./util/configlexer.lex"
+#line 187 "./util/configlexer.lex"
 { 
        /* note that flex makes the longest match and '.' is any but not nl */
        LEXOUT(("comment(%s) ", yytext)); /* ignore */ }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 174 "./util/configlexer.lex"
+#line 190 "./util/configlexer.lex"
 { YDVAR(0, VAR_SERVER) }
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 175 "./util/configlexer.lex"
+#line 191 "./util/configlexer.lex"
 { YDVAR(1, VAR_NUM_THREADS) }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 176 "./util/configlexer.lex"
+#line 192 "./util/configlexer.lex"
 { YDVAR(1, VAR_VERBOSITY) }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 177 "./util/configlexer.lex"
+#line 193 "./util/configlexer.lex"
 { YDVAR(1, VAR_PORT) }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 178 "./util/configlexer.lex"
+#line 194 "./util/configlexer.lex"
 { YDVAR(1, VAR_OUTGOING_RANGE) }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 179 "./util/configlexer.lex"
+#line 195 "./util/configlexer.lex"
 { YDVAR(1, VAR_OUTGOING_PORT_PERMIT) }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 180 "./util/configlexer.lex"
+#line 196 "./util/configlexer.lex"
 { YDVAR(1, VAR_OUTGOING_PORT_AVOID) }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 181 "./util/configlexer.lex"
+#line 197 "./util/configlexer.lex"
 { YDVAR(1, VAR_OUTGOING_NUM_TCP) }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 182 "./util/configlexer.lex"
+#line 198 "./util/configlexer.lex"
 { YDVAR(1, VAR_INCOMING_NUM_TCP) }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 183 "./util/configlexer.lex"
+#line 199 "./util/configlexer.lex"
 { YDVAR(1, VAR_DO_IP4) }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 184 "./util/configlexer.lex"
+#line 200 "./util/configlexer.lex"
 { YDVAR(1, VAR_DO_IP6) }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 185 "./util/configlexer.lex"
+#line 201 "./util/configlexer.lex"
 { YDVAR(1, VAR_DO_UDP) }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 186 "./util/configlexer.lex"
+#line 202 "./util/configlexer.lex"
 { YDVAR(1, VAR_DO_TCP) }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 187 "./util/configlexer.lex"
+#line 203 "./util/configlexer.lex"
 { YDVAR(1, VAR_TCP_UPSTREAM) }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 188 "./util/configlexer.lex"
+#line 204 "./util/configlexer.lex"
 { YDVAR(1, VAR_SSL_UPSTREAM) }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 189 "./util/configlexer.lex"
+#line 205 "./util/configlexer.lex"
 { YDVAR(1, VAR_SSL_SERVICE_KEY) }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 190 "./util/configlexer.lex"
+#line 206 "./util/configlexer.lex"
 { YDVAR(1, VAR_SSL_SERVICE_PEM) }
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 191 "./util/configlexer.lex"
+#line 207 "./util/configlexer.lex"
 { YDVAR(1, VAR_SSL_PORT) }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 192 "./util/configlexer.lex"
+#line 208 "./util/configlexer.lex"
 { YDVAR(1, VAR_DO_DAEMONIZE) }
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 193 "./util/configlexer.lex"
+#line 209 "./util/configlexer.lex"
 { YDVAR(1, VAR_INTERFACE) }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 194 "./util/configlexer.lex"
+#line 210 "./util/configlexer.lex"
 { YDVAR(1, VAR_OUTGOING_INTERFACE) }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 195 "./util/configlexer.lex"
+#line 211 "./util/configlexer.lex"
 { YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 196 "./util/configlexer.lex"
+#line 212 "./util/configlexer.lex"
 { YDVAR(1, VAR_SO_RCVBUF) }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 197 "./util/configlexer.lex"
+#line 213 "./util/configlexer.lex"
 { YDVAR(1, VAR_SO_SNDBUF) }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 198 "./util/configlexer.lex"
+#line 214 "./util/configlexer.lex"
 { YDVAR(1, VAR_CHROOT) }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 199 "./util/configlexer.lex"
+#line 215 "./util/configlexer.lex"
 { YDVAR(1, VAR_USERNAME) }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 200 "./util/configlexer.lex"
+#line 216 "./util/configlexer.lex"
 { YDVAR(1, VAR_DIRECTORY) }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 201 "./util/configlexer.lex"
+#line 217 "./util/configlexer.lex"
 { YDVAR(1, VAR_LOGFILE) }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 202 "./util/configlexer.lex"
+#line 218 "./util/configlexer.lex"
 { YDVAR(1, VAR_PIDFILE) }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 203 "./util/configlexer.lex"
+#line 219 "./util/configlexer.lex"
 { YDVAR(1, VAR_ROOT_HINTS) }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 204 "./util/configlexer.lex"
+#line 220 "./util/configlexer.lex"
 { YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 205 "./util/configlexer.lex"
+#line 221 "./util/configlexer.lex"
 { YDVAR(1, VAR_MSG_BUFFER_SIZE) }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 206 "./util/configlexer.lex"
+#line 222 "./util/configlexer.lex"
 { YDVAR(1, VAR_MSG_CACHE_SIZE) }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 207 "./util/configlexer.lex"
+#line 223 "./util/configlexer.lex"
 { YDVAR(1, VAR_MSG_CACHE_SLABS) }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 208 "./util/configlexer.lex"
+#line 224 "./util/configlexer.lex"
 { YDVAR(1, VAR_RRSET_CACHE_SIZE) }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 209 "./util/configlexer.lex"
+#line 225 "./util/configlexer.lex"
 { YDVAR(1, VAR_RRSET_CACHE_SLABS) }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 210 "./util/configlexer.lex"
+#line 226 "./util/configlexer.lex"
 { YDVAR(1, VAR_CACHE_MAX_TTL) }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 211 "./util/configlexer.lex"
+#line 227 "./util/configlexer.lex"
 { YDVAR(1, VAR_CACHE_MIN_TTL) }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 212 "./util/configlexer.lex"
+#line 228 "./util/configlexer.lex"
 { YDVAR(1, VAR_INFRA_HOST_TTL) }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 213 "./util/configlexer.lex"
+#line 229 "./util/configlexer.lex"
 { YDVAR(1, VAR_INFRA_LAME_TTL) }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 214 "./util/configlexer.lex"
+#line 230 "./util/configlexer.lex"
 { YDVAR(1, VAR_INFRA_CACHE_SLABS) }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 215 "./util/configlexer.lex"
+#line 231 "./util/configlexer.lex"
 { YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 216 "./util/configlexer.lex"
+#line 232 "./util/configlexer.lex"
 { YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 217 "./util/configlexer.lex"
+#line 233 "./util/configlexer.lex"
 { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 218 "./util/configlexer.lex"
+#line 234 "./util/configlexer.lex"
 { YDVAR(1, VAR_JOSTLE_TIMEOUT) }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 219 "./util/configlexer.lex"
+#line 235 "./util/configlexer.lex"
 { YDVAR(1, VAR_TARGET_FETCH_POLICY) }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 220 "./util/configlexer.lex"
+#line 236 "./util/configlexer.lex"
 { YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 221 "./util/configlexer.lex"
+#line 237 "./util/configlexer.lex"
 { YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 222 "./util/configlexer.lex"
+#line 238 "./util/configlexer.lex"
 { YDVAR(1, VAR_HARDEN_GLUE) }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 223 "./util/configlexer.lex"
+#line 239 "./util/configlexer.lex"
 { YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 224 "./util/configlexer.lex"
+#line 240 "./util/configlexer.lex"
 { YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 225 "./util/configlexer.lex"
+#line 241 "./util/configlexer.lex"
 { YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 226 "./util/configlexer.lex"
+#line 242 "./util/configlexer.lex"
 { YDVAR(1, VAR_USE_CAPS_FOR_ID) }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 227 "./util/configlexer.lex"
+#line 243 "./util/configlexer.lex"
 { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 228 "./util/configlexer.lex"
+#line 244 "./util/configlexer.lex"
 { YDVAR(1, VAR_PRIVATE_ADDRESS) }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 229 "./util/configlexer.lex"
+#line 245 "./util/configlexer.lex"
 { YDVAR(1, VAR_PRIVATE_DOMAIN) }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 230 "./util/configlexer.lex"
+#line 246 "./util/configlexer.lex"
 { YDVAR(1, VAR_PREFETCH_KEY) }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 231 "./util/configlexer.lex"
+#line 247 "./util/configlexer.lex"
 { YDVAR(1, VAR_PREFETCH) }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 232 "./util/configlexer.lex"
+#line 248 "./util/configlexer.lex"
 { YDVAR(0, VAR_STUB_ZONE) }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 233 "./util/configlexer.lex"
+#line 249 "./util/configlexer.lex"
 { YDVAR(1, VAR_NAME) }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 234 "./util/configlexer.lex"
+#line 250 "./util/configlexer.lex"
 { YDVAR(1, VAR_STUB_ADDR) }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 235 "./util/configlexer.lex"
+#line 251 "./util/configlexer.lex"
 { YDVAR(1, VAR_STUB_HOST) }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 236 "./util/configlexer.lex"
+#line 252 "./util/configlexer.lex"
 { YDVAR(1, VAR_STUB_PRIME) }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 237 "./util/configlexer.lex"
+#line 253 "./util/configlexer.lex"
 { YDVAR(1, VAR_STUB_FIRST) }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 238 "./util/configlexer.lex"
+#line 254 "./util/configlexer.lex"
 { YDVAR(0, VAR_FORWARD_ZONE) }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 239 "./util/configlexer.lex"
+#line 255 "./util/configlexer.lex"
 { YDVAR(1, VAR_FORWARD_ADDR) }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 240 "./util/configlexer.lex"
+#line 256 "./util/configlexer.lex"
 { YDVAR(1, VAR_FORWARD_HOST) }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 241 "./util/configlexer.lex"
+#line 257 "./util/configlexer.lex"
 { YDVAR(1, VAR_FORWARD_FIRST) }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 242 "./util/configlexer.lex"
+#line 258 "./util/configlexer.lex"
 { YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 243 "./util/configlexer.lex"
+#line 259 "./util/configlexer.lex"
 { YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 244 "./util/configlexer.lex"
+#line 260 "./util/configlexer.lex"
 { YDVAR(2, VAR_ACCESS_CONTROL) }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 245 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) }
+#line 261 "./util/configlexer.lex"
+{ YDVAR(1, VAR_HIDE_IDENTITY) }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 246 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
+#line 262 "./util/configlexer.lex"
+{ YDVAR(1, VAR_HIDE_VERSION) }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 247 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
+#line 263 "./util/configlexer.lex"
+{ YDVAR(1, VAR_IDENTITY) }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 248 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
+#line 264 "./util/configlexer.lex"
+{ YDVAR(1, VAR_VERSION) }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 249 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_IDENTITY) }
+#line 265 "./util/configlexer.lex"
+{ YDVAR(1, VAR_MODULE_CONF) }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 250 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_VERSION) }
+#line 266 "./util/configlexer.lex"
+{ YDVAR(1, VAR_DLV_ANCHOR) }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 251 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IDENTITY) }
+#line 267 "./util/configlexer.lex"
+{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 252 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VERSION) }
+#line 268 "./util/configlexer.lex"
+{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 253 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MODULE_CONF) }
+#line 269 "./util/configlexer.lex"
+{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 254 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR) }
+#line 270 "./util/configlexer.lex"
+{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 255 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
+#line 271 "./util/configlexer.lex"
+{ YDVAR(1, VAR_TRUST_ANCHOR) }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 256 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
+#line 272 "./util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 257 "./util/configlexer.lex"
-{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
+#line 273 "./util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 258 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
+#line 274 "./util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 259 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR) }
+#line 275 "./util/configlexer.lex"
+{ YDVAR(1, VAR_BOGUS_TTL) }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 260 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+#line 276 "./util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 261 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
+#line 277 "./util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 262 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
+#line 278 "./util/configlexer.lex"
+{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 263 "./util/configlexer.lex"
-{ YDVAR(1, VAR_BOGUS_TTL) }
+#line 279 "./util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 264 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+#line 280 "./util/configlexer.lex"
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 265 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+#line 281 "./util/configlexer.lex"
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 266 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
+#line 282 "./util/configlexer.lex"
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 267 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
+#line 283 "./util/configlexer.lex"
+{ 
+                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 268 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+#line 285 "./util/configlexer.lex"
+{ YDVAR(1, VAR_ADD_HOLDDOWN) }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 269 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+#line 286 "./util/configlexer.lex"
+{ YDVAR(1, VAR_DEL_HOLDDOWN) }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 270 "./util/configlexer.lex"
-{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+#line 287 "./util/configlexer.lex"
+{ YDVAR(1, VAR_KEEP_MISSING) }
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 271 "./util/configlexer.lex"
-{ 
-                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
+#line 288 "./util/configlexer.lex"
+{ YDVAR(1, VAR_USE_SYSLOG) }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 273 "./util/configlexer.lex"
-{ YDVAR(1, VAR_ADD_HOLDDOWN) }
+#line 289 "./util/configlexer.lex"
+{ YDVAR(1, VAR_LOG_TIME_ASCII) }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 274 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DEL_HOLDDOWN) }
+#line 290 "./util/configlexer.lex"
+{ YDVAR(1, VAR_LOG_QUERIES) }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 275 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEEP_MISSING) }
+#line 291 "./util/configlexer.lex"
+{ YDVAR(2, VAR_LOCAL_ZONE) }
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 276 "./util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSLOG) }
+#line 292 "./util/configlexer.lex"
+{ YDVAR(1, VAR_LOCAL_DATA) }
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 277 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TIME_ASCII) }
+#line 293 "./util/configlexer.lex"
+{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 278 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_QUERIES) }
+#line 294 "./util/configlexer.lex"
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 279 "./util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE) }
+#line 295 "./util/configlexer.lex"
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 280 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA) }
+#line 296 "./util/configlexer.lex"
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 281 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
+#line 297 "./util/configlexer.lex"
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
        YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 282 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
+#line 298 "./util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 283 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+#line 299 "./util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
        YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 284 "./util/configlexer.lex"
-{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
+#line 300 "./util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_PORT) }
        YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 285 "./util/configlexer.lex"
-{ YDVAR(0, VAR_REMOTE_CONTROL) }
+#line 301 "./util/configlexer.lex"
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
        YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 286 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_ENABLE) }
+#line 302 "./util/configlexer.lex"
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
        YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 287 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_INTERFACE) }
+#line 303 "./util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
        YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 288 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_PORT) }
+#line 304 "./util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
        YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 289 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_KEY_FILE) }
+#line 305 "./util/configlexer.lex"
+{ YDVAR(1, VAR_PYTHON_SCRIPT) }
        YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 290 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_CERT_FILE) }
+#line 306 "./util/configlexer.lex"
+{ YDVAR(0, VAR_PYTHON) }
        YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 291 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
+#line 307 "./util/configlexer.lex"
+{ YDVAR(1, VAR_DOMAIN_INSECURE) }
        YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 292 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
+#line 308 "./util/configlexer.lex"
+{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
        YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 293 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PYTHON_SCRIPT) }
+#line 309 "./util/configlexer.lex"
+{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
        YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 294 "./util/configlexer.lex"
-{ YDVAR(0, VAR_PYTHON) }
+#line 310 "./util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_UDP_SIZE) }
        YY_BREAK
 case 123:
+/* rule 123 can match eol */
 YY_RULE_SETUP
-#line 295 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DOMAIN_INSECURE) }
-       YY_BREAK
-case 124:
-YY_RULE_SETUP
-#line 296 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
-       YY_BREAK
-case 125:
-YY_RULE_SETUP
-#line 297 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
-       YY_BREAK
-case 126:
-/* rule 126 can match eol */
-YY_RULE_SETUP
-#line 298 "./util/configlexer.lex"
+#line 311 "./util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++; }
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
-case 127:
+case 124:
 YY_RULE_SETUP
-#line 301 "./util/configlexer.lex"
+#line 314 "./util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 302 "./util/configlexer.lex"
+#line 315 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 128:
+case 125:
 YY_RULE_SETUP
-#line 307 "./util/configlexer.lex"
+#line 320 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 129:
-/* rule 129 can match eol */
+case 126:
+/* rule 126 can match eol */
 YY_RULE_SETUP
-#line 308 "./util/configlexer.lex"
+#line 321 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end \""); 
                          cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 130:
+case 127:
 YY_RULE_SETUP
-#line 310 "./util/configlexer.lex"
+#line 323 "./util/configlexer.lex"
 {
         LEXOUT(("QE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -2659,34 +2607,34 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Single Quoted strings. Strip leading and ending quotes */
-case 131:
+case 128:
 YY_RULE_SETUP
-#line 322 "./util/configlexer.lex"
+#line 335 "./util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 323 "./util/configlexer.lex"
+#line 336 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 132:
+case 129:
 YY_RULE_SETUP
-#line 328 "./util/configlexer.lex"
+#line 341 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 133:
-/* rule 133 can match eol */
+case 130:
+/* rule 130 can match eol */
 YY_RULE_SETUP
-#line 329 "./util/configlexer.lex"
+#line 342 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end '"); 
                             cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 134:
+case 131:
 YY_RULE_SETUP
-#line 331 "./util/configlexer.lex"
+#line 344 "./util/configlexer.lex"
 {
         LEXOUT(("SQE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -2699,38 +2647,38 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* include: directive */
-case 135:
+case 132:
 YY_RULE_SETUP
-#line 343 "./util/configlexer.lex"
+#line 356 "./util/configlexer.lex"
 { 
        LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 345 "./util/configlexer.lex"
+#line 358 "./util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 136:
+case 133:
 YY_RULE_SETUP
-#line 349 "./util/configlexer.lex"
+#line 362 "./util/configlexer.lex"
 { LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
-case 137:
-/* rule 137 can match eol */
+case 134:
+/* rule 134 can match eol */
 YY_RULE_SETUP
-#line 350 "./util/configlexer.lex"
+#line 363 "./util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
-case 138:
+case 135:
 YY_RULE_SETUP
-#line 351 "./util/configlexer.lex"
+#line 364 "./util/configlexer.lex"
 { LEXOUT(("IQS ")); BEGIN(include_quoted); }
        YY_BREAK
-case 139:
+case 136:
 YY_RULE_SETUP
-#line 352 "./util/configlexer.lex"
+#line 365 "./util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include_glob(yytext);
@@ -2738,27 +2686,27 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 357 "./util/configlexer.lex"
+#line 370 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 140:
+case 137:
 YY_RULE_SETUP
-#line 361 "./util/configlexer.lex"
+#line 374 "./util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 141:
-/* rule 141 can match eol */
+case 138:
+/* rule 138 can match eol */
 YY_RULE_SETUP
-#line 362 "./util/configlexer.lex"
+#line 375 "./util/configlexer.lex"
 { yyerror("newline before \" in include name"); 
                                  cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
-case 142:
+case 139:
 YY_RULE_SETUP
-#line 364 "./util/configlexer.lex"
+#line 377 "./util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -2768,10 +2716,11 @@ YY_RULE_SETUP
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(val):
-#line 370 "./util/configlexer.lex"
+#line 383 "./util/configlexer.lex"
 {
+       LEXOUT(("LEXEOF "));
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
-       if (config_include_stack_ptr == 0) {
+       if (!config_include_stack) {
                yyterminate();
        } else {
                fclose(yyin);
@@ -2779,33 +2728,33 @@ case YY_STATE_EOF(val):
        }
 }
        YY_BREAK
-case 143:
+case 140:
 YY_RULE_SETUP
-#line 380 "./util/configlexer.lex"
+#line 394 "./util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
                        if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING_ARG; }
        YY_BREAK
-case 144:
+case 141:
 YY_RULE_SETUP
-#line 384 "./util/configlexer.lex"
+#line 398 "./util/configlexer.lex"
 {
        ub_c_error_msg("unknown keyword '%s'", yytext);
        }
        YY_BREAK
-case 145:
+case 142:
 YY_RULE_SETUP
-#line 388 "./util/configlexer.lex"
+#line 402 "./util/configlexer.lex"
 {
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
-case 146:
+case 143:
 YY_RULE_SETUP
-#line 392 "./util/configlexer.lex"
+#line 406 "./util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 2807 "<stdout>"
+#line 2756 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -2989,21 +2938,21 @@ static int yy_get_next_buffer (void)
 
        else
                {
-                       int num_to_read =
+                       yy_size_t num_to_read =
                        YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
                while ( num_to_read <= 0 )
                        { /* Not enough room in the buffer - grow it. */
 
                        /* just a shorter name for the current buffer */
-                       YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+                       YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
 
                        int yy_c_buf_p_offset =
                                (int) ((yy_c_buf_p) - b->yy_ch_buf);
 
                        if ( b->yy_is_our_buffer )
                                {
-                               int new_size = b->yy_buf_size * 2;
+                               yy_size_t new_size = b->yy_buf_size * 2;
 
                                if ( new_size <= 0 )
                                        b->yy_buf_size += b->yy_buf_size / 8;
@@ -3034,7 +2983,7 @@ static int yy_get_next_buffer (void)
 
                /* Read in more data. */
                YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-                       (yy_n_chars), (size_t) num_to_read );
+                       (yy_n_chars), num_to_read );
 
                YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
                }
@@ -3095,7 +3044,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 >= 1404 )
+                       if ( yy_current_state >= 1355 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3123,13 +3072,13 @@ 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 >= 1404 )
+               if ( yy_current_state >= 1355 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 1403);
+       yy_is_jam = (yy_current_state == 1354);
 
-       return yy_is_jam ? 0 : yy_current_state;
+               return yy_is_jam ? 0 : yy_current_state;
 }
 
 #ifndef YY_NO_INPUT
@@ -3156,7 +3105,7 @@ static int yy_get_next_buffer (void)
 
                else
                        { /* need more input */
-                       int offset = (yy_c_buf_p) - (yytext_ptr);
+                       yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
                        ++(yy_c_buf_p);
 
                        switch ( yy_get_next_buffer(  ) )
@@ -3316,10 +3265,6 @@ static void yy_load_buffer_state  (void)
        yyfree((void *) b  );
 }
 
-#ifndef __cplusplus
-extern int isatty (int );
-#endif /* __cplusplus */
-    
 /* Initializes or reinitializes a buffer.
  * This function is sometimes called more than once on the same buffer,
  * such as during a yyrestart() or at EOF.
@@ -3432,7 +3377,7 @@ void yypop_buffer_state (void)
  */
 static void yyensure_buffer_stack (void)
 {
-       int num_to_alloc;
+       yy_size_t num_to_alloc;
     
        if (!(yy_buffer_stack)) {
 
@@ -3529,7 +3474,7 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
        YY_BUFFER_STATE b;
        char *buf;
@@ -3616,7 +3561,7 @@ FILE *yyget_out  (void)
 /** Get the length of the current token.
  * 
  */
-int yyget_leng  (void)
+yy_size_t yyget_leng  (void)
 {
         return yyleng;
 }
@@ -3764,7 +3709,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 392 "./util/configlexer.lex"
+#line 406 "./util/configlexer.lex"
 
 
 
index e1d65f2cdbe1c66fc78d81c531123a163f16c732..1e9e9f30955c4e9353901e6b053b4a41ae6c7b33 100644 (file)
@@ -39,43 +39,54 @@ void ub_c_error(const char *message);
 struct inc_state {
        char* filename;
        int line;
+       YY_BUFFER_STATE buffer;
+       struct inc_state* next;
 };
-static struct inc_state parse_stack[MAXINCLUDES];
-static YY_BUFFER_STATE include_stack[MAXINCLUDES];
-static int config_include_stack_ptr = 0;
+static struct inc_state* config_include_stack = NULL;
 static int inc_prev = 0;
 static int num_args = 0;
 
-
 static void config_start_include(const char* filename)
 {
        FILE *input;
+       struct inc_state* s;
+       char* nm;
        if(strlen(filename) == 0) {
                ub_c_error_msg("empty include file name");
                return;
        }
-       if(config_include_stack_ptr >= MAXINCLUDES) {
-               ub_c_error_msg("includes nested too deeply, skipped (>%d)", MAXINCLUDES);
+       s = (struct inc_state*)malloc(sizeof(*s));
+       if(!s) {
+               ub_c_error_msg("include %s: malloc failure", filename);
                return;
        }
        if(cfg_parser->chroot && strncmp(filename, cfg_parser->chroot,
                strlen(cfg_parser->chroot)) == 0) {
                filename += strlen(cfg_parser->chroot);
        }
+       nm = strdup(filename);
+       if(!nm) {
+               ub_c_error_msg("include %s: malloc failure", filename);
+               free(s);
+               return;
+       }
        input = fopen(filename, "r");
        if(!input) {
                ub_c_error_msg("cannot open include file '%s': %s",
                        filename, strerror(errno));
+               free(s);
+               free(nm);
                return;
        }
-       LEXOUT(("switch_to_include_file(%s) ", filename));
-       parse_stack[config_include_stack_ptr].filename = cfg_parser->filename;
-       parse_stack[config_include_stack_ptr].line = cfg_parser->line;
-       include_stack[config_include_stack_ptr] = YY_CURRENT_BUFFER;
-       cfg_parser->filename = strdup(filename);
+       LEXOUT(("switch_to_include_file(%s)\n", filename));
+       s->filename = cfg_parser->filename;
+       s->line = cfg_parser->line;
+       s->buffer = YY_CURRENT_BUFFER;
+       s->next = config_include_stack;
+       config_include_stack = s;
+       cfg_parser->filename = nm;
        cfg_parser->line = 1;
        yy_switch_to_buffer(yy_create_buffer(input, YY_BUF_SIZE));
-       ++config_include_stack_ptr;
 }
 
 static void config_start_include_glob(const char* filename)
@@ -107,6 +118,8 @@ static void config_start_include_glob(const char* filename)
                if(r) {
                        /* some error */
                        globfree(&g);
+                       if(r == GLOB_NOMATCH)
+                               return; /* no matches for pattern */
                        config_start_include(filename); /* let original deal with it */
                        return;
                }
@@ -124,12 +137,15 @@ static void config_start_include_glob(const char* filename)
 
 static void config_end_include(void)
 {
-       --config_include_stack_ptr;
+       struct inc_state* s = config_include_stack;
+       if(!s) return;
        free(cfg_parser->filename);
-       cfg_parser->filename = parse_stack[config_include_stack_ptr].filename;
-       cfg_parser->line = parse_stack[config_include_stack_ptr].line;
+       cfg_parser->filename = s->filename;
+       cfg_parser->line = s->line;
        yy_delete_buffer(YY_CURRENT_BUFFER);
-       yy_switch_to_buffer(include_stack[config_include_stack_ptr]);
+       yy_switch_to_buffer(s->buffer);
+       config_include_stack = s->next;
+       free(s);
 }
 
 #ifndef yy_set_bol /* compat definition, for flex 2.4.6 */
@@ -295,6 +311,7 @@ python{COLON}                       { YDVAR(0, VAR_PYTHON) }
 domain-insecure{COLON}         { YDVAR(1, VAR_DOMAIN_INSECURE) }
 minimal-responses{COLON}       { YDVAR(1, VAR_MINIMAL_RESPONSES) }
 rrset-roundrobin{COLON}                { YDVAR(1, VAR_RRSET_ROUNDROBIN) }
+max-udp-size{COLON}            { YDVAR(1, VAR_MAX_UDP_SIZE) }
 <INITIAL,val>{NEWLINE}         { LEXOUT(("NL\n")); cfg_parser->line++; }
 
        /* Quoted strings. Strip leading and ending quotes */
@@ -368,8 +385,9 @@ rrset-roundrobin{COLON}             { YDVAR(1, VAR_RRSET_ROUNDROBIN) }
        BEGIN(inc_prev);
 }
 <INITIAL,val><<EOF>>   {
+       LEXOUT(("LEXEOF "));
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
-       if (config_include_stack_ptr == 0) {
+       if (!config_include_stack) {
                yyterminate();
        } else {
                fclose(yyin);
index c9632520dc539e76ea416c7d45c4ecdc946c9d55..0161aa1b06be9f3d9ed62e13c428d835cd55bbb7 100644 (file)
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.5.  */
+/* A Bison parser, made by GNU Bison 2.6.1.  */
 
 /* Bison implementation for Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989-1990, 2000-2012 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
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.5"
+#define YYBISON_VERSION "2.6.1"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
 /* Pull parsers.  */
 #define YYPULL 1
 
-/* Using locations.  */
-#define YYLSP_NEEDED 0
 
 
 
 /* Copy the first part of user declarations.  */
-
-/* Line 268 of yacc.c  */
+/* Line 336 of yacc.c  */
 #line 38 "./util/configparser.y"
 
 #include "config.h"
@@ -93,14 +90,16 @@ extern struct config_parser_state* cfg_parser;
 #endif
 
 
+/* Line 336 of yacc.c  */
+#line 95 "util/configparser.c"
 
-/* Line 268 of yacc.c  */
-#line 99 "util/configparser.c"
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
+# ifndef YY_NULL
+#  if defined __cplusplus && 201103L <= __cplusplus
+#   define YY_NULL nullptr
+#  else
+#   define YY_NULL 0
+#  endif
+# endif
 
 /* Enabling verbose error messages.  */
 #ifdef YYERROR_VERBOSE
@@ -110,11 +109,17 @@ extern struct config_parser_state* cfg_parser;
 # define YYERROR_VERBOSE 0
 #endif
 
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
+/* In a future release of Bison, this section will be replaced
+   by #include "configparser.h".  */
+#ifndef YY_UTIL_CONFIGPARSER_H
+# define YY_UTIL_CONFIGPARSER_H
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
 #endif
-
 
 /* Tokens.  */
 #ifndef YYTOKENTYPE
@@ -249,10 +254,7 @@ extern struct config_parser_state* cfg_parser;
      VAR_STUB_FIRST = 382,
      VAR_MINIMAL_RESPONSES = 383,
      VAR_RRSET_ROUNDROBIN = 384,
-     VAR_SEND_CLIENT_SUBNET = 385,
-     VAR_CLIENT_SUBNET_OPCODE = 386,
-     VAR_MAX_CLIENT_SUBNET_IPV4 = 387,
-     VAR_MAX_CLIENT_SUBNET_IPV6 = 388
+     VAR_MAX_UDP_SIZE = 385
    };
 #endif
 /* Tokens.  */
@@ -383,39 +385,49 @@ extern struct config_parser_state* cfg_parser;
 #define VAR_STUB_FIRST 382
 #define VAR_MINIMAL_RESPONSES 383
 #define VAR_RRSET_ROUNDROBIN 384
-#define VAR_SEND_CLIENT_SUBNET 385
-#define VAR_CLIENT_SUBNET_OPCODE 386
-#define VAR_MAX_CLIENT_SUBNET_IPV4 387
-#define VAR_MAX_CLIENT_SUBNET_IPV6 388
-
+#define VAR_MAX_UDP_SIZE 385
 
 
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
 {
-
-/* Line 293 of yacc.c  */
+/* Line 350 of yacc.c  */
 #line 64 "./util/configparser.y"
 
        char*   str;
 
 
-
-/* Line 293 of yacc.c  */
-#line 407 "util/configparser.c"
+/* Line 350 of yacc.c  */
+#line 403 "util/configparser.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
+extern YYSTYPE yylval;
 
-/* Copy the second part of user declarations.  */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
 
+#endif /* !YY_UTIL_CONFIGPARSER_H  */
+
+/* Copy the second part of user declarations.  */
 
-/* Line 343 of yacc.c  */
-#line 419 "util/configparser.c"
+/* Line 353 of yacc.c  */
+#line 431 "util/configparser.c"
 
 #ifdef short
 # undef short
@@ -521,6 +533,7 @@ YYID (yyi)
 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
 #     ifndef EXIT_SUCCESS
 #      define EXIT_SUCCESS 0
 #     endif
@@ -612,20 +625,20 @@ union yyalloc
 #endif
 
 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
-/* Copy COUNT objects from FROM to TO.  The source and destination do
+/* Copy COUNT objects from SRC to DST.  The source and destination do
    not overlap.  */
 # ifndef YYCOPY
 #  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#   define YYCOPY(Dst, Src, Count) \
+      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
 #  else
-#   define YYCOPY(To, From, Count)             \
-      do                                       \
-       {                                       \
-         YYSIZE_T yyi;                         \
-         for (yyi = 0; yyi < (Count); yyi++)   \
-           (To)[yyi] = (From)[yyi];            \
-       }                                       \
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYSIZE_T yyi;                         \
+          for (yyi = 0; yyi < (Count); yyi++)   \
+            (Dst)[yyi] = (Src)[yyi];            \
+        }                                       \
       while (YYID (0))
 #  endif
 # endif
@@ -634,20 +647,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   246
+#define YYLAST   239
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  134
+#define YYNTOKENS  131
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  137
+#define YYNNTS  134
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  261
+#define YYNRULES  255
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  383
+#define YYNSTATES  374
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   388
+#define YYMAXUTOK   385
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -693,7 +706,7 @@ static const yytype_uint8 yytranslate[] =
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133
+     125,   126,   127,   128,   129,   130
 };
 
 #if YYDEBUG
@@ -712,128 +725,125 @@ static const yytype_uint16 yyprhs[] =
      164,   166,   168,   170,   172,   174,   176,   178,   180,   182,
      184,   186,   188,   190,   192,   194,   196,   198,   200,   202,
      204,   206,   208,   210,   212,   214,   216,   218,   220,   222,
-     224,   226,   228,   230,   232,   234,   237,   238,   240,   242,
-     244,   246,   248,   250,   253,   254,   256,   258,   260,   262,
-     265,   268,   271,   274,   277,   280,   283,   286,   289,   292,
-     295,   298,   301,   304,   307,   310,   313,   316,   319,   322,
-     325,   328,   331,   334,   337,   340,   343,   346,   349,   352,
-     355,   358,   361,   364,   367,   370,   373,   376,   379,   382,
-     385,   388,   391,   394,   397,   400,   403,   406,   409,   412,
-     415,   418,   421,   424,   427,   430,   433,   436,   439,   442,
-     445,   448,   451,   454,   457,   460,   463,   466,   469,   472,
-     475,   478,   481,   484,   487,   490,   493,   496,   500,   503,
-     506,   509,   512,   515,   518,   521,   524,   527,   530,   533,
-     536,   539,   542,   545,   548,   551,   554,   558,   561,   564,
-     567,   570,   573,   576,   579,   582,   585,   588,   591,   594,
-     597,   599,   602,   603,   605,   607,   609,   611,   613,   615,
-     617,   620,   623,   626,   629,   632,   635,   638,   640,   643,
-     644,   646
+     224,   226,   228,   231,   232,   234,   236,   238,   240,   242,
+     244,   247,   248,   250,   252,   254,   256,   259,   262,   265,
+     268,   271,   274,   277,   280,   283,   286,   289,   292,   295,
+     298,   301,   304,   307,   310,   313,   316,   319,   322,   325,
+     328,   331,   334,   337,   340,   343,   346,   349,   352,   355,
+     358,   361,   364,   367,   370,   373,   376,   379,   382,   385,
+     388,   391,   394,   397,   400,   403,   406,   409,   412,   415,
+     418,   421,   424,   427,   430,   433,   436,   439,   442,   445,
+     448,   451,   454,   457,   460,   463,   466,   469,   472,   475,
+     478,   482,   485,   488,   491,   494,   497,   500,   503,   506,
+     509,   512,   515,   518,   521,   524,   527,   530,   533,   536,
+     540,   543,   546,   549,   552,   555,   558,   561,   564,   567,
+     570,   573,   576,   579,   582,   584,   587,   588,   590,   592,
+     594,   596,   598,   600,   602,   605,   608,   611,   614,   617,
+     620,   623,   625,   628,   629,   631
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     135,     0,    -1,    -1,   135,   136,    -1,   137,   138,    -1,
-     140,   141,    -1,   143,   144,    -1,   267,   268,    -1,   257,
-     258,    -1,    11,    -1,   138,   139,    -1,    -1,   146,    -1,
-     147,    -1,   151,    -1,   158,    -1,   164,    -1,   165,    -1,
-     166,    -1,   167,    -1,   156,    -1,   177,    -1,   178,    -1,
-     179,    -1,   180,    -1,   181,    -1,   198,    -1,   199,    -1,
-     200,    -1,   202,    -1,   203,    -1,   161,    -1,   204,    -1,
-     205,    -1,   208,    -1,   206,    -1,   207,    -1,   209,    -1,
-     210,    -1,   211,    -1,   222,    -1,   190,    -1,   191,    -1,
-     192,    -1,   193,    -1,   212,    -1,   225,    -1,   186,    -1,
-     188,    -1,   226,    -1,   231,    -1,   232,    -1,   233,    -1,
-     162,    -1,   197,    -1,   240,    -1,   241,    -1,   187,    -1,
-     236,    -1,   174,    -1,   157,    -1,   182,    -1,   223,    -1,
-     229,    -1,   213,    -1,   224,    -1,   243,    -1,   244,    -1,
-     163,    -1,   148,    -1,   173,    -1,   216,    -1,   149,    -1,
-     159,    -1,   160,    -1,   183,    -1,   184,    -1,   242,    -1,
-     215,    -1,   217,    -1,   218,    -1,   150,    -1,   245,    -1,
-     201,    -1,   221,    -1,   175,    -1,   189,    -1,   227,    -1,
-     228,    -1,   230,    -1,   235,    -1,   185,    -1,   237,    -1,
-     238,    -1,   239,    -1,   194,    -1,   196,    -1,   219,    -1,
-     220,    -1,   195,    -1,   214,    -1,   234,    -1,   176,    -1,
-     168,    -1,   169,    -1,   170,    -1,   171,    -1,   172,    -1,
-     246,    -1,   247,    -1,   152,    -1,   153,    -1,   154,    -1,
-     155,    -1,    38,    -1,   141,   142,    -1,    -1,   248,    -1,
-     249,    -1,   250,    -1,   252,    -1,   251,    -1,    44,    -1,
-     144,   145,    -1,    -1,   253,    -1,   254,    -1,   255,    -1,
-     256,    -1,    13,    10,    -1,    12,    10,    -1,    76,    10,
-      -1,    79,    10,    -1,    96,    10,    -1,    14,    10,    -1,
-     130,    10,    -1,   131,    10,    -1,   132,    10,    -1,   133,
-      10,    -1,    16,    10,    -1,    67,    10,    -1,    15,    10,
-      -1,    80,    10,    -1,    81,    10,    -1,    31,    10,    -1,
-      60,    10,    -1,    75,    10,    -1,    17,    10,    -1,    18,
-      10,    -1,    19,    10,    -1,    20,    10,    -1,   121,    10,
-      -1,   122,    10,    -1,   123,    10,    -1,   124,    10,    -1,
-     125,    10,    -1,    77,    10,    -1,    66,    10,    -1,   101,
-      10,    -1,   120,    10,    -1,    21,    10,    -1,    22,    10,
-      -1,    23,    10,    -1,    24,    10,    -1,    25,    10,    -1,
-      68,    10,    -1,    82,    10,    -1,    83,    10,    -1,   109,
-      10,    -1,    54,    10,    -1,    64,    10,    -1,    55,    10,
-      -1,   102,    10,    -1,    48,    10,    -1,    49,    10,    -1,
-      50,    10,    -1,    51,    10,    -1,   113,    10,    -1,   117,
-      10,    -1,   114,    10,    -1,    61,    10,    -1,    26,    10,
-      -1,    27,    10,    -1,    28,    10,    -1,    98,    10,    -1,
-      29,    10,    -1,    30,    10,    -1,    32,    10,    -1,    33,
-      10,    -1,    35,    10,    -1,    36,    10,    -1,    34,    10,
-      -1,    41,    10,    -1,    42,    10,    -1,    43,    10,    -1,
-      52,    10,    -1,    71,    10,    -1,   118,    10,    -1,    85,
-      10,    -1,    78,    10,    -1,    86,    10,    -1,    87,    10,
-      -1,   115,    10,    -1,   116,    10,    -1,   100,    10,    -1,
-      47,    10,    -1,    69,    10,    -1,    72,    10,    10,    -1,
-      53,    10,    -1,    56,    10,    -1,   105,    10,    -1,   106,
-      10,    -1,    70,    10,    -1,   107,    10,    -1,    57,    10,
-      -1,    58,    10,    -1,    59,    10,    -1,   119,    10,    -1,
-     108,    10,    -1,    65,    10,    -1,   111,    10,    -1,   112,
-      10,    -1,   110,    10,    -1,    62,    10,    -1,    63,    10,
-      -1,    84,    10,    -1,    73,    10,    10,    -1,    74,    10,
-      -1,    97,    10,    -1,   128,    10,    -1,   129,    10,    -1,
-      37,    10,    -1,    39,    10,    -1,    40,    10,    -1,   127,
-      10,    -1,    99,    10,    -1,    37,    10,    -1,    45,    10,
-      -1,    46,    10,    -1,   126,    10,    -1,    88,    -1,   258,
-     259,    -1,    -1,   260,    -1,   262,    -1,   261,    -1,   263,
-      -1,   264,    -1,   265,    -1,   266,    -1,    89,    10,    -1,
-      91,    10,    -1,    90,    10,    -1,    92,    10,    -1,    93,
-      10,    -1,    94,    10,    -1,    95,    10,    -1,   103,    -1,
-     268,   269,    -1,    -1,   270,    -1,   104,    10,    -1
+     132,     0,    -1,    -1,   132,   133,    -1,   134,   135,    -1,
+     137,   138,    -1,   140,   141,    -1,   261,   262,    -1,   251,
+     252,    -1,    11,    -1,   135,   136,    -1,    -1,   143,    -1,
+     144,    -1,   148,    -1,   151,    -1,   157,    -1,   158,    -1,
+     159,    -1,   160,    -1,   149,    -1,   170,    -1,   171,    -1,
+     172,    -1,   173,    -1,   174,    -1,   191,    -1,   192,    -1,
+     193,    -1,   195,    -1,   196,    -1,   154,    -1,   197,    -1,
+     198,    -1,   201,    -1,   199,    -1,   200,    -1,   202,    -1,
+     203,    -1,   204,    -1,   215,    -1,   183,    -1,   184,    -1,
+     185,    -1,   186,    -1,   205,    -1,   218,    -1,   179,    -1,
+     181,    -1,   219,    -1,   224,    -1,   225,    -1,   226,    -1,
+     155,    -1,   190,    -1,   233,    -1,   234,    -1,   180,    -1,
+     229,    -1,   167,    -1,   150,    -1,   175,    -1,   216,    -1,
+     222,    -1,   206,    -1,   217,    -1,   236,    -1,   237,    -1,
+     156,    -1,   145,    -1,   166,    -1,   209,    -1,   146,    -1,
+     152,    -1,   153,    -1,   176,    -1,   177,    -1,   235,    -1,
+     208,    -1,   210,    -1,   211,    -1,   147,    -1,   238,    -1,
+     194,    -1,   214,    -1,   168,    -1,   182,    -1,   220,    -1,
+     221,    -1,   223,    -1,   228,    -1,   178,    -1,   230,    -1,
+     231,    -1,   232,    -1,   187,    -1,   189,    -1,   212,    -1,
+     213,    -1,   188,    -1,   207,    -1,   227,    -1,   169,    -1,
+     161,    -1,   162,    -1,   163,    -1,   164,    -1,   165,    -1,
+     239,    -1,   240,    -1,   241,    -1,    38,    -1,   138,   139,
+      -1,    -1,   242,    -1,   243,    -1,   244,    -1,   246,    -1,
+     245,    -1,    44,    -1,   141,   142,    -1,    -1,   247,    -1,
+     248,    -1,   249,    -1,   250,    -1,    13,    10,    -1,    12,
+      10,    -1,    76,    10,    -1,    79,    10,    -1,    96,    10,
+      -1,    14,    10,    -1,    16,    10,    -1,    67,    10,    -1,
+      15,    10,    -1,    80,    10,    -1,    81,    10,    -1,    31,
+      10,    -1,    60,    10,    -1,    75,    10,    -1,    17,    10,
+      -1,    18,    10,    -1,    19,    10,    -1,    20,    10,    -1,
+     121,    10,    -1,   122,    10,    -1,   123,    10,    -1,   124,
+      10,    -1,   125,    10,    -1,    77,    10,    -1,    66,    10,
+      -1,   101,    10,    -1,   120,    10,    -1,    21,    10,    -1,
+      22,    10,    -1,    23,    10,    -1,    24,    10,    -1,    25,
+      10,    -1,    68,    10,    -1,    82,    10,    -1,    83,    10,
+      -1,   109,    10,    -1,    54,    10,    -1,    64,    10,    -1,
+      55,    10,    -1,   102,    10,    -1,    48,    10,    -1,    49,
+      10,    -1,    50,    10,    -1,    51,    10,    -1,   113,    10,
+      -1,   117,    10,    -1,   114,    10,    -1,    61,    10,    -1,
+      26,    10,    -1,    27,    10,    -1,    28,    10,    -1,    98,
+      10,    -1,    29,    10,    -1,    30,    10,    -1,    32,    10,
+      -1,    33,    10,    -1,    35,    10,    -1,    36,    10,    -1,
+      34,    10,    -1,    41,    10,    -1,    42,    10,    -1,    43,
+      10,    -1,    52,    10,    -1,    71,    10,    -1,   118,    10,
+      -1,    85,    10,    -1,    78,    10,    -1,    86,    10,    -1,
+      87,    10,    -1,   115,    10,    -1,   116,    10,    -1,   100,
+      10,    -1,    47,    10,    -1,    69,    10,    -1,    72,    10,
+      10,    -1,    53,    10,    -1,    56,    10,    -1,   105,    10,
+      -1,   106,    10,    -1,    70,    10,    -1,   107,    10,    -1,
+      57,    10,    -1,    58,    10,    -1,    59,    10,    -1,   119,
+      10,    -1,   108,    10,    -1,    65,    10,    -1,   111,    10,
+      -1,   112,    10,    -1,   110,    10,    -1,    62,    10,    -1,
+      63,    10,    -1,    84,    10,    -1,    73,    10,    10,    -1,
+      74,    10,    -1,    97,    10,    -1,   128,    10,    -1,   129,
+      10,    -1,   130,    10,    -1,    37,    10,    -1,    39,    10,
+      -1,    40,    10,    -1,   127,    10,    -1,    99,    10,    -1,
+      37,    10,    -1,    45,    10,    -1,    46,    10,    -1,   126,
+      10,    -1,    88,    -1,   252,   253,    -1,    -1,   254,    -1,
+     256,    -1,   255,    -1,   257,    -1,   258,    -1,   259,    -1,
+     260,    -1,    89,    10,    -1,    91,    10,    -1,    90,    10,
+      -1,    92,    10,    -1,    93,    10,    -1,    94,    10,    -1,
+      95,    10,    -1,   103,    -1,   262,   263,    -1,    -1,   264,
+      -1,   104,    10,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   112,   112,   112,   113,   113,   114,   114,   115,   119,
-     124,   125,   126,   126,   126,   127,   127,   128,   128,   128,
-     129,   129,   129,   130,   130,   130,   131,   131,   132,   132,
-     133,   133,   134,   134,   135,   135,   136,   136,   137,   137,
-     138,   138,   139,   139,   139,   140,   140,   140,   141,   141,
-     141,   142,   142,   143,   143,   144,   144,   145,   145,   146,
-     146,   146,   147,   147,   148,   148,   149,   149,   149,   150,
-     150,   151,   151,   152,   152,   153,   153,   153,   154,   154,
-     155,   155,   156,   156,   157,   157,   158,   158,   159,   159,
-     159,   160,   160,   161,   161,   161,   162,   162,   162,   163,
-     163,   163,   164,   164,   164,   165,   165,   165,   166,   166,
-     167,   167,   168,   168,   170,   182,   183,   184,   184,   184,
-     184,   184,   186,   198,   199,   200,   200,   200,   200,   202,
-     211,   220,   231,   240,   249,   258,   269,   284,   301,   318,
-     331,   346,   355,   364,   373,   382,   391,   400,   409,   418,
-     427,   436,   445,   454,   461,   468,   477,   486,   500,   509,
-     518,   525,   532,   539,   547,   554,   561,   568,   575,   583,
-     591,   599,   606,   613,   622,   631,   638,   645,   653,   661,
-     674,   685,   693,   706,   715,   724,   732,   745,   754,   762,
-     771,   779,   792,   799,   809,   819,   829,   839,   849,   859,
-     869,   876,   883,   892,   901,   910,   917,   927,   941,   948,
-     966,   979,   992,  1001,  1010,  1019,  1029,  1039,  1048,  1057,
-    1064,  1073,  1082,  1091,  1099,  1112,  1120,  1142,  1149,  1164,
-    1174,  1184,  1194,  1201,  1208,  1217,  1227,  1237,  1244,  1251,
-    1260,  1265,  1266,  1267,  1267,  1267,  1268,  1268,  1268,  1269,
-    1271,  1281,  1290,  1297,  1304,  1311,  1318,  1325,  1330,  1331,
-    1332,  1334
+       0,   111,   111,   111,   112,   112,   113,   113,   114,   118,
+     123,   124,   125,   125,   125,   126,   126,   127,   127,   127,
+     128,   128,   128,   129,   129,   129,   130,   130,   131,   131,
+     132,   132,   133,   133,   134,   134,   135,   135,   136,   136,
+     137,   137,   138,   138,   138,   139,   139,   139,   140,   140,
+     140,   141,   141,   142,   142,   143,   143,   144,   144,   145,
+     145,   145,   146,   146,   147,   147,   148,   148,   148,   149,
+     149,   150,   150,   151,   151,   152,   152,   152,   153,   153,
+     154,   154,   155,   155,   156,   156,   157,   157,   158,   158,
+     158,   159,   159,   160,   160,   160,   161,   161,   161,   162,
+     162,   162,   163,   163,   163,   164,   164,   164,   165,   165,
+     165,   167,   179,   180,   181,   181,   181,   181,   181,   183,
+     195,   196,   197,   197,   197,   197,   199,   208,   217,   228,
+     237,   246,   255,   268,   283,   292,   301,   310,   319,   328,
+     337,   346,   355,   364,   373,   382,   391,   398,   405,   414,
+     423,   437,   446,   455,   462,   469,   476,   484,   491,   498,
+     505,   512,   520,   528,   536,   543,   550,   559,   568,   575,
+     582,   590,   598,   611,   622,   630,   643,   652,   661,   669,
+     682,   691,   699,   708,   716,   729,   736,   746,   756,   766,
+     776,   786,   796,   806,   813,   820,   829,   838,   847,   854,
+     864,   878,   885,   903,   916,   929,   938,   947,   956,   966,
+     976,   985,   994,  1001,  1010,  1019,  1028,  1036,  1049,  1057,
+    1079,  1086,  1101,  1111,  1121,  1127,  1137,  1144,  1151,  1160,
+    1170,  1180,  1187,  1194,  1203,  1208,  1209,  1210,  1210,  1210,
+    1211,  1211,  1211,  1212,  1214,  1224,  1233,  1240,  1247,  1254,
+    1261,  1268,  1273,  1274,  1275,  1277
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+#if YYDEBUG || YYERROR_VERBOSE || 0
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
@@ -879,21 +889,17 @@ static const char *const yytname[] =
   "VAR_LOG_QUERIES", "VAR_TCP_UPSTREAM", "VAR_SSL_UPSTREAM",
   "VAR_SSL_SERVICE_KEY", "VAR_SSL_SERVICE_PEM", "VAR_SSL_PORT",
   "VAR_FORWARD_FIRST", "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES",
-  "VAR_RRSET_ROUNDROBIN", "VAR_SEND_CLIENT_SUBNET",
-  "VAR_CLIENT_SUBNET_OPCODE", "VAR_MAX_CLIENT_SUBNET_IPV4",
-  "VAR_MAX_CLIENT_SUBNET_IPV6", "$accept", "toplevelvars", "toplevelvar",
-  "serverstart", "contents_server", "content_server", "stubstart",
-  "contents_stub", "content_stub", "forwardstart", "contents_forward",
-  "content_forward", "server_num_threads", "server_verbosity",
-  "server_statistics_interval", "server_statistics_cumulative",
-  "server_extended_statistics", "server_port", "server_send_client_subnet",
-  "server_client_subnet_opcode", "server_max_client_subnet_ipv4",
-  "server_max_client_subnet_ipv6", "server_interface",
-  "server_outgoing_interface", "server_outgoing_range",
-  "server_outgoing_port_permit", "server_outgoing_port_avoid",
-  "server_outgoing_num_tcp", "server_incoming_num_tcp",
-  "server_interface_automatic", "server_do_ip4", "server_do_ip6",
-  "server_do_udp", "server_do_tcp", "server_tcp_upstream",
+  "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE", "$accept", "toplevelvars",
+  "toplevelvar", "serverstart", "contents_server", "content_server",
+  "stubstart", "contents_stub", "content_stub", "forwardstart",
+  "contents_forward", "content_forward", "server_num_threads",
+  "server_verbosity", "server_statistics_interval",
+  "server_statistics_cumulative", "server_extended_statistics",
+  "server_port", "server_interface", "server_outgoing_interface",
+  "server_outgoing_range", "server_outgoing_port_permit",
+  "server_outgoing_port_avoid", "server_outgoing_num_tcp",
+  "server_incoming_num_tcp", "server_interface_automatic", "server_do_ip4",
+  "server_do_ip6", "server_do_udp", "server_do_tcp", "server_tcp_upstream",
   "server_ssl_upstream", "server_ssl_service_key",
   "server_ssl_service_pem", "server_ssl_port", "server_do_daemonize",
   "server_use_syslog", "server_log_time_ascii", "server_log_queries",
@@ -927,13 +933,13 @@ static const char *const yytname[] =
   "server_del_holddown", "server_keep_missing", "server_key_cache_size",
   "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone",
   "server_local_data", "server_local_data_ptr", "server_minimal_responses",
-  "server_rrset_roundrobin", "stub_name", "stub_host", "stub_addr",
-  "stub_first", "stub_prime", "forward_name", "forward_host",
-  "forward_addr", "forward_first", "rcstart", "contents_rc", "content_rc",
-  "rc_control_enable", "rc_control_port", "rc_control_interface",
-  "rc_server_key_file", "rc_server_cert_file", "rc_control_key_file",
-  "rc_control_cert_file", "pythonstart", "contents_py", "content_py",
-  "py_script", 0
+  "server_rrset_roundrobin", "server_max_udp_size", "stub_name",
+  "stub_host", "stub_addr", "stub_first", "stub_prime", "forward_name",
+  "forward_host", "forward_addr", "forward_first", "rcstart",
+  "contents_rc", "content_rc", "rc_control_enable", "rc_control_port",
+  "rc_control_interface", "rc_server_key_file", "rc_server_cert_file",
+  "rc_control_key_file", "rc_control_cert_file", "pythonstart",
+  "contents_py", "content_py", "py_script", YY_NULL
 };
 #endif
 
@@ -955,26 +961,26 @@ static const yytype_uint16 yytoknum[] =
      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
+     385
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   134,   135,   135,   136,   136,   136,   136,   136,   137,
-     138,   138,   139,   139,   139,   139,   139,   139,   139,   139,
-     139,   139,   139,   139,   139,   139,   139,   139,   139,   139,
-     139,   139,   139,   139,   139,   139,   139,   139,   139,   139,
-     139,   139,   139,   139,   139,   139,   139,   139,   139,   139,
-     139,   139,   139,   139,   139,   139,   139,   139,   139,   139,
-     139,   139,   139,   139,   139,   139,   139,   139,   139,   139,
-     139,   139,   139,   139,   139,   139,   139,   139,   139,   139,
-     139,   139,   139,   139,   139,   139,   139,   139,   139,   139,
-     139,   139,   139,   139,   139,   139,   139,   139,   139,   139,
-     139,   139,   139,   139,   139,   139,   139,   139,   139,   139,
-     139,   139,   139,   139,   140,   141,   141,   142,   142,   142,
-     142,   142,   143,   144,   144,   145,   145,   145,   145,   146,
+       0,   131,   132,   132,   133,   133,   133,   133,   133,   134,
+     135,   135,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   137,   138,   138,   139,   139,   139,   139,   139,   140,
+     141,   141,   142,   142,   142,   142,   143,   144,   145,   146,
      147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
      157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
      167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
@@ -985,10 +991,9 @@ static const yytype_uint16 yyr1[] =
      217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
      227,   228,   229,   230,   231,   232,   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,   258,   259,   259,   259,   259,   259,   259,   259,
-     260,   261,   262,   263,   264,   265,   266,   267,   268,   268,
-     269,   270
+     247,   248,   249,   250,   251,   252,   252,   253,   253,   253,
+     253,   253,   253,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   262,   263,   264
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1005,8 +1010,8 @@ static const yytype_uint8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     0,     1,     1,     1,
-       1,     1,     1,     2,     0,     1,     1,     1,     1,     2,
+       1,     1,     2,     0,     1,     1,     1,     1,     1,     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,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1014,23 +1019,21 @@ 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,     3,     2,     2,
+       3,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     3,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     3,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       1,     2,     0,     1,     1,     1,     1,     1,     1,     1,
-       2,     2,     2,     2,     2,     2,     2,     1,     2,     0,
-       1,     2
+       2,     2,     2,     2,     1,     2,     0,     1,     1,     1,
+       1,     1,     1,     1,     2,     2,     2,     2,     2,     2,
+       2,     1,     2,     0,     1,     2
 };
 
 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
    Performed when YYTABLE doesn't specify something else to do.  Zero
    means the default is an error.  */
-static const yytype_uint16 yydefact[] =
+static const yytype_uint8 yydefact[] =
 {
-       2,     0,     1,     9,   114,   122,   240,   257,     3,    11,
-     116,   124,   242,   259,     4,     5,     6,     8,     7,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       2,     0,     1,     9,   111,   119,   234,   251,     3,    11,
+     113,   121,   236,   253,     4,     5,     6,     8,     7,     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,
@@ -1040,52 +1043,52 @@ 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,    10,    12,    13,    69,    72,    81,    14,   110,   111,
-     112,   113,    20,    60,    15,    73,    74,    31,    53,    68,
-      16,    17,    18,    19,   103,   104,   105,   106,   107,    70,
-      59,    85,   102,    21,    22,    23,    24,    25,    61,    75,
-      76,    91,    47,    57,    48,    86,    41,    42,    43,    44,
-      95,    99,    96,    54,    26,    27,    28,    83,    29,    30,
-      32,    33,    35,    36,    34,    37,    38,    39,    45,    64,
-     100,    78,    71,    79,    80,    97,    98,    84,    40,    62,
-      65,    46,    49,    87,    88,    63,    89,    50,    51,    52,
-     101,    90,    58,    92,    93,    94,    55,    56,    77,    66,
-      67,    82,   108,   109,     0,     0,     0,     0,     0,   115,
-     117,   118,   119,   121,   120,     0,     0,     0,     0,   123,
-     125,   126,   127,   128,     0,     0,     0,     0,     0,     0,
-       0,   241,   243,   245,   244,   246,   247,   248,   249,     0,
-     258,   260,   130,   129,   134,   141,   139,   147,   148,   149,
-     150,   160,   161,   162,   163,   164,   181,   182,   183,   185,
-     186,   144,   187,   188,   191,   189,   190,   192,   193,   194,
-     205,   173,   174,   175,   176,   195,   208,   169,   171,   209,
-     214,   215,   216,   145,   180,   223,   224,   170,   219,   157,
-     140,   165,   206,   212,   196,     0,     0,   227,   146,   131,
-     156,   199,   132,   142,   143,   166,   167,   225,   198,   200,
-     201,   133,   228,   184,   204,   158,   172,   210,   211,   213,
-     218,   168,   222,   220,   221,   177,   179,   202,   203,   178,
-     197,   217,   159,   151,   152,   153,   154,   155,   229,   230,
-     135,   136,   137,   138,   231,   232,   233,   235,   234,   236,
-     237,   238,   239,   250,   252,   251,   253,   254,   255,   256,
-     261,   207,   226
+       0,     0,     0,     0,     0,     0,     0,     0,    10,    12,
+      13,    69,    72,    81,    14,    20,    60,    15,    73,    74,
+      31,    53,    68,    16,    17,    18,    19,   103,   104,   105,
+     106,   107,    70,    59,    85,   102,    21,    22,    23,    24,
+      25,    61,    75,    76,    91,    47,    57,    48,    86,    41,
+      42,    43,    44,    95,    99,    96,    54,    26,    27,    28,
+      83,    29,    30,    32,    33,    35,    36,    34,    37,    38,
+      39,    45,    64,   100,    78,    71,    79,    80,    97,    98,
+      84,    40,    62,    65,    46,    49,    87,    88,    63,    89,
+      50,    51,    52,   101,    90,    58,    92,    93,    94,    55,
+      56,    77,    66,    67,    82,   108,   109,   110,     0,     0,
+       0,     0,     0,   112,   114,   115,   116,   118,   117,     0,
+       0,     0,     0,   120,   122,   123,   124,   125,     0,     0,
+       0,     0,     0,     0,     0,   235,   237,   239,   238,   240,
+     241,   242,   243,     0,   252,   254,   127,   126,   131,   134,
+     132,   140,   141,   142,   143,   153,   154,   155,   156,   157,
+     174,   175,   176,   178,   179,   137,   180,   181,   184,   182,
+     183,   185,   186,   187,   198,   166,   167,   168,   169,   188,
+     201,   162,   164,   202,   207,   208,   209,   138,   173,   216,
+     217,   163,   212,   150,   133,   158,   199,   205,   189,     0,
+       0,   220,   139,   128,   149,   192,   129,   135,   136,   159,
+     160,   218,   191,   193,   194,   130,   221,   177,   197,   151,
+     165,   203,   204,   206,   211,   161,   215,   213,   214,   170,
+     172,   195,   196,   171,   190,   210,   152,   144,   145,   146,
+     147,   148,   222,   223,   224,   225,   226,   227,   229,   228,
+     230,   231,   232,   233,   244,   246,   245,   247,   248,   249,
+     250,   255,   200,   219
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     8,     9,    14,   121,    10,    15,   229,    11,
-      16,   239,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   230,   231,   232,   233,   234,   240,
-     241,   242,   243,    12,    17,   251,   252,   253,   254,   255,
-     256,   257,   258,    13,    18,   260,   261
+      -1,     1,     8,     9,    14,   118,    10,    15,   223,    11,
+      16,   233,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   224,   225,   226,   227,   228,   234,   235,   236,   237,
+      12,    17,   245,   246,   247,   248,   249,   250,   251,   252,
+      13,    18,   254,   255
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -1093,21 +1096,18 @@ static const yytype_int16 yydefgoto[] =
 #define YYPACT_NINF -80
 static const yytype_int16 yypact[] =
 {
-     -80,   114,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
-     -80,   -80,   -80,   -80,   -12,    39,    46,    37,   -79,    16,
-      17,    18,    22,    23,    24,    67,    70,    71,    72,    77,
-     105,   112,   113,   123,   124,   125,   126,   127,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   143,   144,   145,   146,   147,   149,   150,   151,   152,
-     153,   154,   155,   157,   158,   159,   160,   161,   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,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
-     -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
-     -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
+     -80,    76,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
+     -80,   -80,   -80,   -80,   -12,    40,    46,    32,   -79,    16,
+      17,    18,    22,    23,    24,    68,    71,    72,   105,   109,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   155,   156,   158,   159,   160,
+     161,   163,   164,   165,   166,   167,   168,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
@@ -1115,23 +1115,25 @@ static const yytype_int16 yypact[] =
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
-     -80,   -80,   -80,   -80,   218,   219,   220,   221,   222,   -80,
-     -80,   -80,   -80,   -80,   -80,   223,   224,   225,   226,   -80,
-     -80,   -80,   -80,   -80,   227,   228,   229,   230,   231,   232,
-     233,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   234,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
+     -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   211,   212,
+     213,   214,   215,   -80,   -80,   -80,   -80,   -80,   -80,   216,
+     217,   218,   219,   -80,   -80,   -80,   -80,   -80,   220,   221,
+     222,   223,   224,   225,   226,   -80,   -80,   -80,   -80,   -80,
+     -80,   -80,   -80,   227,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
-     -80,   -80,   -80,   -80,   -80,   235,   236,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
+     -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   228,
+     229,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
-     -80,   -80,   -80
+     -80,   -80,   -80,   -80
 };
 
 /* YYPGOTO[NTERM-NUM].  */
@@ -1150,7 +1152,7 @@ static const yytype_int8 yypgoto[] =
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
      -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
-     -80,   -80,   -80,   -80,   -80,   -80,   -80
+     -80,   -80,   -80,   -80
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -1161,29 +1163,28 @@ static const yytype_uint16 yytable[] =
 {
       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,   259,   262,   263,   264,    44,
-      45,    46,   265,   266,   267,    47,    48,    49,    50,    51,
+      39,    40,    41,    42,    43,   253,   256,   257,   258,    44,
+      45,    46,   259,   260,   261,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,   224,   268,   225,   226,
-     269,   270,   271,   235,    88,    89,    90,   272,    91,    92,
-      93,   236,   237,    94,    95,    96,    97,    98,    99,   100,
+      82,    83,    84,    85,    86,    87,     2,   218,   262,   219,
+     220,   263,   264,   229,    88,    89,    90,     3,    91,    92,
+      93,   230,   231,    94,    95,    96,    97,    98,    99,   100,
      101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,     2,   273,   115,   116,   117,   118,
-     119,   120,   274,   275,     0,     3,   244,   245,   246,   247,
-     248,   249,   250,   276,   277,   278,   279,   280,   227,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   293,     4,   294,   295,   296,   297,   298,     5,   299,
-     300,   301,   302,   303,   304,   305,   228,   306,   307,   308,
-     309,   310,   238,   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,     6,   340,   341,   342,   343,   344,   345,   346,
-     347,   348,   349,   350,   351,   352,   353,     7,   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
+     111,   112,   113,   114,     4,   265,   115,   116,   117,   266,
+       5,   238,   239,   240,   241,   242,   243,   244,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   221,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,     6,   302,   303,   222,   304,   305,
+     306,   307,   232,   308,   309,   310,   311,   312,   313,     7,
+     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
 };
 
 #define yypact_value_is_default(yystate) \
@@ -1192,7 +1193,7 @@ static const yytype_uint16 yytable[] =
 #define yytable_value_is_error(yytable_value) \
   YYID (0)
 
-static const yytype_int16 yycheck[] =
+static const yytype_uint8 yycheck[] =
 {
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
@@ -1201,32 +1202,31 @@ static const yytype_int16 yycheck[] =
       52,    53,    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,    37,    10,    39,    40,
-      10,    10,    10,    37,    96,    97,    98,    10,   100,   101,
+      82,    83,    84,    85,    86,    87,     0,    37,    10,    39,
+      40,    10,    10,    37,    96,    97,    98,    11,   100,   101,
      102,    45,    46,   105,   106,   107,   108,   109,   110,   111,
      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,     0,    10,   128,   129,   130,   131,
-     132,   133,    10,    10,    -1,    11,    89,    90,    91,    92,
-      93,    94,    95,    10,    10,    10,    10,    10,    99,    10,
+     122,   123,   124,   125,    38,    10,   128,   129,   130,    10,
+      44,    89,    90,    91,    92,    93,    94,    95,    10,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    99,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    38,    10,    10,    10,    10,    10,    44,    10,
-      10,    10,    10,    10,    10,    10,   127,    10,    10,    10,
-      10,    10,   126,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    88,    10,    10,   127,    10,    10,
+      10,    10,   126,    10,    10,    10,    10,    10,    10,   103,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    88,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,   103,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    10
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   135,     0,    11,    38,    44,    88,   103,   136,   137,
-     140,   143,   257,   267,   138,   141,   144,   258,   268,    12,
+       0,   132,     0,    11,    38,    44,    88,   103,   133,   134,
+     137,   140,   251,   261,   135,   138,   141,   252,   262,    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,    41,    42,    43,    47,    48,    49,
@@ -1236,8 +1236,8 @@ static const yytype_uint16 yystos[] =
       80,    81,    82,    83,    84,    85,    86,    87,    96,    97,
       98,   100,   101,   102,   105,   106,   107,   108,   109,   110,
      111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   128,   129,   130,   131,   132,
-     133,   139,   146,   147,   148,   149,   150,   151,   152,   153,
+     121,   122,   123,   124,   125,   128,   129,   130,   136,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
      154,   155,   156,   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,
@@ -1246,12 +1246,11 @@ static const yytype_uint16 yystos[] =
      204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
      214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
      224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,    37,    39,    40,    99,   127,   142,
-     248,   249,   250,   251,   252,    37,    45,    46,   126,   145,
-     253,   254,   255,   256,    89,    90,    91,    92,    93,    94,
-      95,   259,   260,   261,   262,   263,   264,   265,   266,   104,
-     269,   270,    10,    10,    10,    10,    10,    10,    10,    10,
+     234,   235,   236,   237,   238,   239,   240,   241,    37,    39,
+      40,    99,   127,   139,   242,   243,   244,   245,   246,    37,
+      45,    46,   126,   142,   247,   248,   249,   250,    89,    90,
+      91,    92,    93,    94,    95,   253,   254,   255,   256,   257,
+     258,   259,   260,   104,   263,   264,    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,
@@ -1263,7 +1262,7 @@ 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
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1293,17 +1292,18 @@ static const yytype_uint16 yystos[] =
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)                                 \
-do                                                             \
-  if (yychar == YYEMPTY && yylen == 1)                         \
-    {                                                          \
-      yychar = (Token);                                                \
-      yylval = (Value);                                                \
-      YYPOPSTACK (1);                                          \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    {                                                          \
+#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;                                                 \
     }                                                          \
@@ -1313,32 +1313,33 @@ while (YYID (0))
 #define YYTERROR       1
 #define YYERRCODE      256
 
-
 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
    If N is 0, then set CURRENT to the empty location which ends
    the previous symbol: RHS[0] (always defined).  */
 
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
 #ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
-    do                                                                 \
-      if (YYID (N))                                                    \
-       {                                                               \
-         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
-         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
-         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
-         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
-       }                                                               \
-      else                                                             \
-       {                                                               \
-         (Current).first_line   = (Current).last_line   =              \
-           YYRHSLOC (Rhs, 0).last_line;                                \
-         (Current).first_column = (Current).last_column =              \
-           YYRHSLOC (Rhs, 0).last_column;                              \
-       }                                                               \
+# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
+    do                                                                  \
+      if (YYID (N))                                                     \
+        {                                                               \
+          (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+          (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+          (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+          (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+        }                                                               \
+      else                                                              \
+        {                                                               \
+          (Current).first_line   = (Current).last_line   =              \
+            YYRHSLOC (Rhs, 0).last_line;                                \
+          (Current).first_column = (Current).last_column =              \
+            YYRHSLOC (Rhs, 0).last_column;                              \
+        }                                                               \
     while (YYID (0))
 #endif
 
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+
+
 
 /* This macro is provided for backward compatibility. */
 
@@ -1398,6 +1399,8 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep)
     YYSTYPE const * const yyvaluep;
 #endif
 {
+  FILE *yyo = yyoutput;
+  YYUSE (yyo);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
@@ -1649,12 +1652,12 @@ static int
 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                 yytype_int16 *yyssp, int yytoken)
 {
-  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
   YYSIZE_T yysize = yysize0;
   YYSIZE_T yysize1;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
-  const char *yyformat = 0;
+  const char *yyformat = YY_NULL;
   /* Arguments of yyformat. */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
   /* Number of reported tokens (one for the "unexpected", one per
@@ -1714,7 +1717,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                     break;
                   }
                 yyarg[yycount++] = yytname[yyx];
-                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+                yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
                 if (! (yysize <= yysize1
                        && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                   return 2;
@@ -1806,20 +1809,6 @@ yydestruct (yymsg, yytype, yyvaluep)
 }
 
 
-/* Prevent warnings from -Wmissing-prototypes.  */
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
 
 
 /* The lookahead symbol.  */
@@ -1866,7 +1855,7 @@ yyparse ()
        `yyss': related to states.
        `yyvs': related to semantic values.
 
-       Refer to the stacks thru separate pointers, to allow yyoverflow
+       Refer to the stacks through separate pointers, to allow yyoverflow
        to reallocate them elsewhere.  */
 
     /* The state stack.  */
@@ -1920,7 +1909,6 @@ yyparse ()
      The wasted elements are never initialized.  */
   yyssp = yyss;
   yyvsp = yyvs;
-
   goto yysetstate;
 
 /*------------------------------------------------------------.
@@ -2098,18 +2086,16 @@ yyreduce:
   switch (yyn)
     {
         case 9:
-
-/* Line 1806 of yacc.c  */
-#line 120 "./util/configparser.y"
+/* Line 1787 of yacc.c  */
+#line 119 "./util/configparser.y"
     { 
                OUTYY(("\nP(server:)\n")); 
        }
     break;
 
-  case 114:
-
-/* Line 1806 of yacc.c  */
-#line 171 "./util/configparser.y"
+  case 111:
+/* Line 1787 of yacc.c  */
+#line 168 "./util/configparser.y"
     {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
@@ -2122,10 +2108,9 @@ yyreduce:
        }
     break;
 
-  case 122:
-
-/* Line 1806 of yacc.c  */
-#line 187 "./util/configparser.y"
+  case 119:
+/* Line 1787 of yacc.c  */
+#line 184 "./util/configparser.y"
     {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
@@ -2138,10 +2123,9 @@ yyreduce:
        }
     break;
 
-  case 129:
-
-/* Line 1806 of yacc.c  */
-#line 203 "./util/configparser.y"
+  case 126:
+/* Line 1787 of yacc.c  */
+#line 200 "./util/configparser.y"
     { 
                OUTYY(("P(server_num_threads:%s)\n", (yyvsp[(2) - (2)].str))); 
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2151,10 +2135,9 @@ yyreduce:
        }
     break;
 
-  case 130:
-
-/* Line 1806 of yacc.c  */
-#line 212 "./util/configparser.y"
+  case 127:
+/* Line 1787 of yacc.c  */
+#line 209 "./util/configparser.y"
     { 
                OUTYY(("P(server_verbosity:%s)\n", (yyvsp[(2) - (2)].str))); 
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2164,10 +2147,9 @@ yyreduce:
        }
     break;
 
-  case 131:
-
-/* Line 1806 of yacc.c  */
-#line 221 "./util/configparser.y"
+  case 128:
+/* Line 1787 of yacc.c  */
+#line 218 "./util/configparser.y"
     { 
                OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[(2) - (2)].str))); 
                if(strcmp((yyvsp[(2) - (2)].str), "") == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0)
@@ -2179,10 +2161,9 @@ yyreduce:
        }
     break;
 
-  case 132:
-
-/* Line 1806 of yacc.c  */
-#line 232 "./util/configparser.y"
+  case 129:
+/* Line 1787 of yacc.c  */
+#line 229 "./util/configparser.y"
     {
                OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2192,10 +2173,9 @@ yyreduce:
        }
     break;
 
-  case 133:
-
-/* Line 1806 of yacc.c  */
-#line 241 "./util/configparser.y"
+  case 130:
+/* Line 1787 of yacc.c  */
+#line 238 "./util/configparser.y"
     {
                OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2205,10 +2185,9 @@ yyreduce:
        }
     break;
 
-  case 134:
-
-/* Line 1806 of yacc.c  */
-#line 250 "./util/configparser.y"
+  case 131:
+/* Line 1787 of yacc.c  */
+#line 247 "./util/configparser.y"
     {
                OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2218,86 +2197,9 @@ yyreduce:
        }
     break;
 
-  case 135:
-
-/* Line 1806 of yacc.c  */
-#line 259 "./util/configparser.y"
-    {
-       #ifdef CLIENT_SUBNET
-               OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[(2) - (2)].str)))
-                       fatal_exit("out of memory adding client-subnet");
-       #else
-               OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
-       #endif
-       }
-    break;
-
-  case 136:
-
-/* Line 1806 of yacc.c  */
-#line 270 "./util/configparser.y"
-    {
-       #ifdef CLIENT_SUBNET
-               OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
-                       yyerror("option code expected");
-               else if(atoi((yyvsp[(2) - (2)].str)) > 65535 || atoi((yyvsp[(2) - (2)].str)) < 0)
-                       yyerror("option code must be in interval [0, 65535]");
-               else cfg_parser->cfg->client_subnet_opcode = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
-       #else
-               OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
-       #endif
-       }
-    break;
-
-  case 137:
-
-/* Line 1806 of yacc.c  */
-#line 285 "./util/configparser.y"
-    {
-       #ifdef CLIENT_SUBNET
-               OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
-                       yyerror("IPv4 subnet length expected");
-               else if (atoi((yyvsp[(2) - (2)].str)) > 32)
-                       cfg_parser->cfg->max_client_subnet_ipv4 = 32;
-               else if (atoi((yyvsp[(2) - (2)].str)) < 0)
-                       cfg_parser->cfg->max_client_subnet_ipv4 = 0;
-               else cfg_parser->cfg->max_client_subnet_ipv4 = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
-       #else
-               OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
-       #endif
-       }
-    break;
-
-  case 138:
-
-/* Line 1806 of yacc.c  */
-#line 302 "./util/configparser.y"
-    {
-       #ifdef CLIENT_SUBNET
-               OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
-                       yyerror("Ipv6 subnet length expected");
-               else if (atoi((yyvsp[(2) - (2)].str)) > 128)
-                       cfg_parser->cfg->max_client_subnet_ipv6 = 128;
-               else if (atoi((yyvsp[(2) - (2)].str)) < 0)
-                       cfg_parser->cfg->max_client_subnet_ipv6 = 0;
-               else cfg_parser->cfg->max_client_subnet_ipv6 = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
-       #else
-               OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
-       #endif
-       }
-    break;
-
-  case 139:
-
-/* Line 1806 of yacc.c  */
-#line 319 "./util/configparser.y"
+  case 132:
+/* Line 1787 of yacc.c  */
+#line 256 "./util/configparser.y"
     {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].str)));
                if(cfg_parser->cfg->num_ifs == 0)
@@ -2311,10 +2213,9 @@ yyreduce:
        }
     break;
 
-  case 140:
-
-/* Line 1806 of yacc.c  */
-#line 332 "./util/configparser.y"
+  case 133:
+/* Line 1787 of yacc.c  */
+#line 269 "./util/configparser.y"
     {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].str)));
                if(cfg_parser->cfg->num_out_ifs == 0)
@@ -2330,10 +2231,9 @@ yyreduce:
        }
     break;
 
-  case 141:
-
-/* Line 1806 of yacc.c  */
-#line 347 "./util/configparser.y"
+  case 134:
+/* Line 1787 of yacc.c  */
+#line 284 "./util/configparser.y"
     {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2343,10 +2243,9 @@ yyreduce:
        }
     break;
 
-  case 142:
-
-/* Line 1806 of yacc.c  */
-#line 356 "./util/configparser.y"
+  case 135:
+/* Line 1787 of yacc.c  */
+#line 293 "./util/configparser.y"
     {
                OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 1, 
@@ -2356,10 +2255,9 @@ yyreduce:
        }
     break;
 
-  case 143:
-
-/* Line 1806 of yacc.c  */
-#line 365 "./util/configparser.y"
+  case 136:
+/* Line 1787 of yacc.c  */
+#line 302 "./util/configparser.y"
     {
                OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 0, 
@@ -2369,10 +2267,9 @@ yyreduce:
        }
     break;
 
-  case 144:
-
-/* Line 1806 of yacc.c  */
-#line 374 "./util/configparser.y"
+  case 137:
+/* Line 1787 of yacc.c  */
+#line 311 "./util/configparser.y"
     {
                OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2382,10 +2279,9 @@ yyreduce:
        }
     break;
 
-  case 145:
-
-/* Line 1806 of yacc.c  */
-#line 383 "./util/configparser.y"
+  case 138:
+/* Line 1787 of yacc.c  */
+#line 320 "./util/configparser.y"
     {
                OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2395,10 +2291,9 @@ yyreduce:
        }
     break;
 
-  case 146:
-
-/* Line 1806 of yacc.c  */
-#line 392 "./util/configparser.y"
+  case 139:
+/* Line 1787 of yacc.c  */
+#line 329 "./util/configparser.y"
     {
                OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2408,10 +2303,9 @@ yyreduce:
        }
     break;
 
-  case 147:
-
-/* Line 1806 of yacc.c  */
-#line 401 "./util/configparser.y"
+  case 140:
+/* Line 1787 of yacc.c  */
+#line 338 "./util/configparser.y"
     {
                OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2421,10 +2315,9 @@ yyreduce:
        }
     break;
 
-  case 148:
-
-/* Line 1806 of yacc.c  */
-#line 410 "./util/configparser.y"
+  case 141:
+/* Line 1787 of yacc.c  */
+#line 347 "./util/configparser.y"
     {
                OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2434,10 +2327,9 @@ yyreduce:
        }
     break;
 
-  case 149:
-
-/* Line 1806 of yacc.c  */
-#line 419 "./util/configparser.y"
+  case 142:
+/* Line 1787 of yacc.c  */
+#line 356 "./util/configparser.y"
     {
                OUTYY(("P(server_do_udp:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2447,10 +2339,9 @@ yyreduce:
        }
     break;
 
-  case 150:
-
-/* Line 1806 of yacc.c  */
-#line 428 "./util/configparser.y"
+  case 143:
+/* Line 1787 of yacc.c  */
+#line 365 "./util/configparser.y"
     {
                OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2460,10 +2351,9 @@ yyreduce:
        }
     break;
 
-  case 151:
-
-/* Line 1806 of yacc.c  */
-#line 437 "./util/configparser.y"
+  case 144:
+/* Line 1787 of yacc.c  */
+#line 374 "./util/configparser.y"
     {
                OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2473,10 +2363,9 @@ yyreduce:
        }
     break;
 
-  case 152:
-
-/* Line 1806 of yacc.c  */
-#line 446 "./util/configparser.y"
+  case 145:
+/* Line 1787 of yacc.c  */
+#line 383 "./util/configparser.y"
     {
                OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2486,10 +2375,9 @@ yyreduce:
        }
     break;
 
-  case 153:
-
-/* Line 1806 of yacc.c  */
-#line 455 "./util/configparser.y"
+  case 146:
+/* Line 1787 of yacc.c  */
+#line 392 "./util/configparser.y"
     {
                OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->ssl_service_key);
@@ -2497,10 +2385,9 @@ yyreduce:
        }
     break;
 
-  case 154:
-
-/* Line 1806 of yacc.c  */
-#line 462 "./util/configparser.y"
+  case 147:
+/* Line 1787 of yacc.c  */
+#line 399 "./util/configparser.y"
     {
                OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->ssl_service_pem);
@@ -2508,10 +2395,9 @@ yyreduce:
        }
     break;
 
-  case 155:
-
-/* Line 1806 of yacc.c  */
-#line 469 "./util/configparser.y"
+  case 148:
+/* Line 1787 of yacc.c  */
+#line 406 "./util/configparser.y"
     {
                OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2521,10 +2407,9 @@ yyreduce:
        }
     break;
 
-  case 156:
-
-/* Line 1806 of yacc.c  */
-#line 478 "./util/configparser.y"
+  case 149:
+/* Line 1787 of yacc.c  */
+#line 415 "./util/configparser.y"
     {
                OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2534,10 +2419,9 @@ yyreduce:
        }
     break;
 
-  case 157:
-
-/* Line 1806 of yacc.c  */
-#line 487 "./util/configparser.y"
+  case 150:
+/* Line 1787 of yacc.c  */
+#line 424 "./util/configparser.y"
     {
                OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2552,10 +2436,9 @@ yyreduce:
        }
     break;
 
-  case 158:
-
-/* Line 1806 of yacc.c  */
-#line 501 "./util/configparser.y"
+  case 151:
+/* Line 1787 of yacc.c  */
+#line 438 "./util/configparser.y"
     {
                OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2565,10 +2448,9 @@ yyreduce:
        }
     break;
 
-  case 159:
-
-/* Line 1806 of yacc.c  */
-#line 510 "./util/configparser.y"
+  case 152:
+/* Line 1787 of yacc.c  */
+#line 447 "./util/configparser.y"
     {
                OUTYY(("P(server_log_queries:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2578,10 +2460,9 @@ yyreduce:
        }
     break;
 
-  case 160:
-
-/* Line 1806 of yacc.c  */
-#line 519 "./util/configparser.y"
+  case 153:
+/* Line 1787 of yacc.c  */
+#line 456 "./util/configparser.y"
     {
                OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->chrootdir);
@@ -2589,10 +2470,9 @@ yyreduce:
        }
     break;
 
-  case 161:
-
-/* Line 1806 of yacc.c  */
-#line 526 "./util/configparser.y"
+  case 154:
+/* Line 1787 of yacc.c  */
+#line 463 "./util/configparser.y"
     {
                OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->username);
@@ -2600,10 +2480,9 @@ yyreduce:
        }
     break;
 
-  case 162:
-
-/* Line 1806 of yacc.c  */
-#line 533 "./util/configparser.y"
+  case 155:
+/* Line 1787 of yacc.c  */
+#line 470 "./util/configparser.y"
     {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->directory);
@@ -2611,10 +2490,9 @@ yyreduce:
        }
     break;
 
-  case 163:
-
-/* Line 1806 of yacc.c  */
-#line 540 "./util/configparser.y"
+  case 156:
+/* Line 1787 of yacc.c  */
+#line 477 "./util/configparser.y"
     {
                OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->logfile);
@@ -2623,10 +2501,9 @@ yyreduce:
        }
     break;
 
-  case 164:
-
-/* Line 1806 of yacc.c  */
-#line 548 "./util/configparser.y"
+  case 157:
+/* Line 1787 of yacc.c  */
+#line 485 "./util/configparser.y"
     {
                OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->pidfile);
@@ -2634,10 +2511,9 @@ yyreduce:
        }
     break;
 
-  case 165:
-
-/* Line 1806 of yacc.c  */
-#line 555 "./util/configparser.y"
+  case 158:
+/* Line 1787 of yacc.c  */
+#line 492 "./util/configparser.y"
     {
                OUTYY(("P(server_root_hints:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[(2) - (2)].str)))
@@ -2645,10 +2521,9 @@ yyreduce:
        }
     break;
 
-  case 166:
-
-/* Line 1806 of yacc.c  */
-#line 562 "./util/configparser.y"
+  case 159:
+/* Line 1787 of yacc.c  */
+#line 499 "./util/configparser.y"
     {
                OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->dlv_anchor_file);
@@ -2656,10 +2531,9 @@ yyreduce:
        }
     break;
 
-  case 167:
-
-/* Line 1806 of yacc.c  */
-#line 569 "./util/configparser.y"
+  case 160:
+/* Line 1787 of yacc.c  */
+#line 506 "./util/configparser.y"
     {
                OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[(2) - (2)].str)))
@@ -2667,10 +2541,9 @@ yyreduce:
        }
     break;
 
-  case 168:
-
-/* Line 1806 of yacc.c  */
-#line 576 "./util/configparser.y"
+  case 161:
+/* Line 1787 of yacc.c  */
+#line 513 "./util/configparser.y"
     {
                OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
@@ -2679,10 +2552,9 @@ yyreduce:
        }
     break;
 
-  case 169:
-
-/* Line 1806 of yacc.c  */
-#line 584 "./util/configparser.y"
+  case 162:
+/* Line 1787 of yacc.c  */
+#line 521 "./util/configparser.y"
     {
                OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
@@ -2691,10 +2563,9 @@ yyreduce:
        }
     break;
 
-  case 170:
-
-/* Line 1806 of yacc.c  */
-#line 592 "./util/configparser.y"
+  case 163:
+/* Line 1787 of yacc.c  */
+#line 529 "./util/configparser.y"
     {
                OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
@@ -2703,10 +2574,9 @@ yyreduce:
        }
     break;
 
-  case 171:
-
-/* Line 1806 of yacc.c  */
-#line 600 "./util/configparser.y"
+  case 164:
+/* Line 1787 of yacc.c  */
+#line 537 "./util/configparser.y"
     {
                OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[(2) - (2)].str)))
@@ -2714,10 +2584,9 @@ yyreduce:
        }
     break;
 
-  case 172:
-
-/* Line 1806 of yacc.c  */
-#line 607 "./util/configparser.y"
+  case 165:
+/* Line 1787 of yacc.c  */
+#line 544 "./util/configparser.y"
     {
                OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[(2) - (2)].str)))
@@ -2725,10 +2594,9 @@ yyreduce:
        }
     break;
 
-  case 173:
-
-/* Line 1806 of yacc.c  */
-#line 614 "./util/configparser.y"
+  case 166:
+/* Line 1787 of yacc.c  */
+#line 551 "./util/configparser.y"
     {
                OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2738,10 +2606,9 @@ yyreduce:
        }
     break;
 
-  case 174:
-
-/* Line 1806 of yacc.c  */
-#line 623 "./util/configparser.y"
+  case 167:
+/* Line 1787 of yacc.c  */
+#line 560 "./util/configparser.y"
     {
                OUTYY(("P(server_hide_version:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2751,10 +2618,9 @@ yyreduce:
        }
     break;
 
-  case 175:
-
-/* Line 1806 of yacc.c  */
-#line 632 "./util/configparser.y"
+  case 168:
+/* Line 1787 of yacc.c  */
+#line 569 "./util/configparser.y"
     {
                OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->identity);
@@ -2762,10 +2628,9 @@ yyreduce:
        }
     break;
 
-  case 176:
-
-/* Line 1806 of yacc.c  */
-#line 639 "./util/configparser.y"
+  case 169:
+/* Line 1787 of yacc.c  */
+#line 576 "./util/configparser.y"
     {
                OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->version);
@@ -2773,10 +2638,9 @@ yyreduce:
        }
     break;
 
-  case 177:
-
-/* Line 1806 of yacc.c  */
-#line 646 "./util/configparser.y"
+  case 170:
+/* Line 1787 of yacc.c  */
+#line 583 "./util/configparser.y"
     {
                OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_rcvbuf))
@@ -2785,10 +2649,9 @@ yyreduce:
        }
     break;
 
-  case 178:
-
-/* Line 1806 of yacc.c  */
-#line 654 "./util/configparser.y"
+  case 171:
+/* Line 1787 of yacc.c  */
+#line 591 "./util/configparser.y"
     {
                OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_sndbuf))
@@ -2797,10 +2660,9 @@ yyreduce:
        }
     break;
 
-  case 179:
-
-/* Line 1806 of yacc.c  */
-#line 662 "./util/configparser.y"
+  case 172:
+/* Line 1787 of yacc.c  */
+#line 599 "./util/configparser.y"
     {
                OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2814,10 +2676,9 @@ yyreduce:
        }
     break;
 
-  case 180:
-
-/* Line 1806 of yacc.c  */
-#line 675 "./util/configparser.y"
+  case 173:
+/* Line 1787 of yacc.c  */
+#line 612 "./util/configparser.y"
     {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2829,10 +2690,9 @@ yyreduce:
        }
     break;
 
-  case 181:
-
-/* Line 1806 of yacc.c  */
-#line 686 "./util/configparser.y"
+  case 174:
+/* Line 1787 of yacc.c  */
+#line 623 "./util/configparser.y"
     {
                OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->msg_cache_size))
@@ -2841,10 +2701,9 @@ yyreduce:
        }
     break;
 
-  case 182:
-
-/* Line 1806 of yacc.c  */
-#line 694 "./util/configparser.y"
+  case 175:
+/* Line 1787 of yacc.c  */
+#line 631 "./util/configparser.y"
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2858,10 +2717,9 @@ yyreduce:
        }
     break;
 
-  case 183:
-
-/* Line 1806 of yacc.c  */
-#line 707 "./util/configparser.y"
+  case 176:
+/* Line 1787 of yacc.c  */
+#line 644 "./util/configparser.y"
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2871,10 +2729,9 @@ yyreduce:
        }
     break;
 
-  case 184:
-
-/* Line 1806 of yacc.c  */
-#line 716 "./util/configparser.y"
+  case 177:
+/* Line 1787 of yacc.c  */
+#line 653 "./util/configparser.y"
     {
                OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2884,10 +2741,9 @@ yyreduce:
        }
     break;
 
-  case 185:
-
-/* Line 1806 of yacc.c  */
-#line 725 "./util/configparser.y"
+  case 178:
+/* Line 1787 of yacc.c  */
+#line 662 "./util/configparser.y"
     {
                OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->rrset_cache_size))
@@ -2896,10 +2752,9 @@ yyreduce:
        }
     break;
 
-  case 186:
-
-/* Line 1806 of yacc.c  */
-#line 733 "./util/configparser.y"
+  case 179:
+/* Line 1787 of yacc.c  */
+#line 670 "./util/configparser.y"
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2913,10 +2768,9 @@ yyreduce:
        }
     break;
 
-  case 187:
-
-/* Line 1806 of yacc.c  */
-#line 746 "./util/configparser.y"
+  case 180:
+/* Line 1787 of yacc.c  */
+#line 683 "./util/configparser.y"
     {
                OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2926,10 +2780,9 @@ yyreduce:
        }
     break;
 
-  case 188:
-
-/* Line 1806 of yacc.c  */
-#line 755 "./util/configparser.y"
+  case 181:
+/* Line 1787 of yacc.c  */
+#line 692 "./util/configparser.y"
     {
                OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
@@ -2938,10 +2791,9 @@ yyreduce:
        }
     break;
 
-  case 189:
-
-/* Line 1806 of yacc.c  */
-#line 763 "./util/configparser.y"
+  case 182:
+/* Line 1787 of yacc.c  */
+#line 700 "./util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2951,10 +2803,9 @@ yyreduce:
        }
     break;
 
-  case 190:
-
-/* Line 1806 of yacc.c  */
-#line 772 "./util/configparser.y"
+  case 183:
+/* Line 1787 of yacc.c  */
+#line 709 "./util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str)));
                verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
@@ -2963,10 +2814,9 @@ yyreduce:
        }
     break;
 
-  case 191:
-
-/* Line 1806 of yacc.c  */
-#line 780 "./util/configparser.y"
+  case 184:
+/* Line 1787 of yacc.c  */
+#line 717 "./util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2980,10 +2830,9 @@ yyreduce:
        }
     break;
 
-  case 192:
-
-/* Line 1806 of yacc.c  */
-#line 793 "./util/configparser.y"
+  case 185:
+/* Line 1787 of yacc.c  */
+#line 730 "./util/configparser.y"
     {
                OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->target_fetch_policy);
@@ -2991,10 +2840,9 @@ yyreduce:
        }
     break;
 
-  case 193:
-
-/* Line 1806 of yacc.c  */
-#line 800 "./util/configparser.y"
+  case 186:
+/* Line 1787 of yacc.c  */
+#line 737 "./util/configparser.y"
     {
                OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3005,10 +2853,9 @@ yyreduce:
        }
     break;
 
-  case 194:
-
-/* Line 1806 of yacc.c  */
-#line 810 "./util/configparser.y"
+  case 187:
+/* Line 1787 of yacc.c  */
+#line 747 "./util/configparser.y"
     {
                OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3019,10 +2866,9 @@ yyreduce:
        }
     break;
 
-  case 195:
-
-/* Line 1806 of yacc.c  */
-#line 820 "./util/configparser.y"
+  case 188:
+/* Line 1787 of yacc.c  */
+#line 757 "./util/configparser.y"
     {
                OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3033,10 +2879,9 @@ yyreduce:
        }
     break;
 
-  case 196:
-
-/* Line 1806 of yacc.c  */
-#line 830 "./util/configparser.y"
+  case 189:
+/* Line 1787 of yacc.c  */
+#line 767 "./util/configparser.y"
     {
                OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3047,10 +2892,9 @@ yyreduce:
        }
     break;
 
-  case 197:
-
-/* Line 1806 of yacc.c  */
-#line 840 "./util/configparser.y"
+  case 190:
+/* Line 1787 of yacc.c  */
+#line 777 "./util/configparser.y"
     {
                OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3061,10 +2905,9 @@ yyreduce:
        }
     break;
 
-  case 198:
-
-/* Line 1806 of yacc.c  */
-#line 850 "./util/configparser.y"
+  case 191:
+/* Line 1787 of yacc.c  */
+#line 787 "./util/configparser.y"
     {
                OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3075,10 +2918,9 @@ yyreduce:
        }
     break;
 
-  case 199:
-
-/* Line 1806 of yacc.c  */
-#line 860 "./util/configparser.y"
+  case 192:
+/* Line 1787 of yacc.c  */
+#line 797 "./util/configparser.y"
     {
                OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3089,10 +2931,9 @@ yyreduce:
        }
     break;
 
-  case 200:
-
-/* Line 1806 of yacc.c  */
-#line 870 "./util/configparser.y"
+  case 193:
+/* Line 1787 of yacc.c  */
+#line 807 "./util/configparser.y"
     {
                OUTYY(("P(server_private_address:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[(2) - (2)].str)))
@@ -3100,10 +2941,9 @@ yyreduce:
        }
     break;
 
-  case 201:
-
-/* Line 1806 of yacc.c  */
-#line 877 "./util/configparser.y"
+  case 194:
+/* Line 1787 of yacc.c  */
+#line 814 "./util/configparser.y"
     {
                OUTYY(("P(server_private_domain:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[(2) - (2)].str)))
@@ -3111,10 +2951,9 @@ yyreduce:
        }
     break;
 
-  case 202:
-
-/* Line 1806 of yacc.c  */
-#line 884 "./util/configparser.y"
+  case 195:
+/* Line 1787 of yacc.c  */
+#line 821 "./util/configparser.y"
     {
                OUTYY(("P(server_prefetch:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3124,10 +2963,9 @@ yyreduce:
        }
     break;
 
-  case 203:
-
-/* Line 1806 of yacc.c  */
-#line 893 "./util/configparser.y"
+  case 196:
+/* Line 1787 of yacc.c  */
+#line 830 "./util/configparser.y"
     {
                OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3137,10 +2975,9 @@ yyreduce:
        }
     break;
 
-  case 204:
-
-/* Line 1806 of yacc.c  */
-#line 902 "./util/configparser.y"
+  case 197:
+/* Line 1787 of yacc.c  */
+#line 839 "./util/configparser.y"
     {
                OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -3150,10 +2987,9 @@ yyreduce:
        }
     break;
 
-  case 205:
-
-/* Line 1806 of yacc.c  */
-#line 911 "./util/configparser.y"
+  case 198:
+/* Line 1787 of yacc.c  */
+#line 848 "./util/configparser.y"
     {
                OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[(2) - (2)].str)))
@@ -3161,10 +2997,9 @@ yyreduce:
        }
     break;
 
-  case 206:
-
-/* Line 1806 of yacc.c  */
-#line 918 "./util/configparser.y"
+  case 199:
+/* Line 1787 of yacc.c  */
+#line 855 "./util/configparser.y"
     {
                OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3175,10 +3010,9 @@ yyreduce:
        }
     break;
 
-  case 207:
-
-/* Line 1806 of yacc.c  */
-#line 928 "./util/configparser.y"
+  case 200:
+/* Line 1787 of yacc.c  */
+#line 865 "./util/configparser.y"
     {
                OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
                if(strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 &&
@@ -3193,10 +3027,9 @@ yyreduce:
        }
     break;
 
-  case 208:
-
-/* Line 1806 of yacc.c  */
-#line 942 "./util/configparser.y"
+  case 201:
+/* Line 1787 of yacc.c  */
+#line 879 "./util/configparser.y"
     {
                OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->module_conf);
@@ -3204,10 +3037,9 @@ yyreduce:
        }
     break;
 
-  case 209:
-
-/* Line 1806 of yacc.c  */
-#line 949 "./util/configparser.y"
+  case 202:
+/* Line 1787 of yacc.c  */
+#line 886 "./util/configparser.y"
     {
                OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) {
@@ -3226,10 +3058,9 @@ yyreduce:
        }
     break;
 
-  case 210:
-
-/* Line 1806 of yacc.c  */
-#line 967 "./util/configparser.y"
+  case 203:
+/* Line 1787 of yacc.c  */
+#line 904 "./util/configparser.y"
     {
                OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) {
@@ -3243,10 +3074,9 @@ yyreduce:
        }
     break;
 
-  case 211:
-
-/* Line 1806 of yacc.c  */
-#line 980 "./util/configparser.y"
+  case 204:
+/* Line 1787 of yacc.c  */
+#line 917 "./util/configparser.y"
     {
                OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) {
@@ -3260,10 +3090,9 @@ yyreduce:
        }
     break;
 
-  case 212:
-
-/* Line 1806 of yacc.c  */
-#line 993 "./util/configparser.y"
+  case 205:
+/* Line 1787 of yacc.c  */
+#line 930 "./util/configparser.y"
     {
                OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -3273,10 +3102,9 @@ yyreduce:
        }
     break;
 
-  case 213:
-
-/* Line 1806 of yacc.c  */
-#line 1002 "./util/configparser.y"
+  case 206:
+/* Line 1787 of yacc.c  */
+#line 939 "./util/configparser.y"
     {
                OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -3286,10 +3114,9 @@ yyreduce:
        }
     break;
 
-  case 214:
-
-/* Line 1806 of yacc.c  */
-#line 1011 "./util/configparser.y"
+  case 207:
+/* Line 1787 of yacc.c  */
+#line 948 "./util/configparser.y"
     {
                OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -3299,10 +3126,9 @@ yyreduce:
        }
     break;
 
-  case 215:
-
-/* Line 1806 of yacc.c  */
-#line 1020 "./util/configparser.y"
+  case 208:
+/* Line 1787 of yacc.c  */
+#line 957 "./util/configparser.y"
     {
                OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3313,10 +3139,9 @@ yyreduce:
        }
     break;
 
-  case 216:
-
-/* Line 1806 of yacc.c  */
-#line 1030 "./util/configparser.y"
+  case 209:
+/* Line 1787 of yacc.c  */
+#line 967 "./util/configparser.y"
     {
                OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3327,10 +3152,9 @@ yyreduce:
        }
     break;
 
-  case 217:
-
-/* Line 1806 of yacc.c  */
-#line 1040 "./util/configparser.y"
+  case 210:
+/* Line 1787 of yacc.c  */
+#line 977 "./util/configparser.y"
     {
                OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3340,10 +3164,9 @@ yyreduce:
        }
     break;
 
-  case 218:
-
-/* Line 1806 of yacc.c  */
-#line 1049 "./util/configparser.y"
+  case 211:
+/* Line 1787 of yacc.c  */
+#line 986 "./util/configparser.y"
     {
                OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -3353,10 +3176,9 @@ yyreduce:
        }
     break;
 
-  case 219:
-
-/* Line 1806 of yacc.c  */
-#line 1058 "./util/configparser.y"
+  case 212:
+/* Line 1787 of yacc.c  */
+#line 995 "./util/configparser.y"
     {
                OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->val_nsec3_key_iterations);
@@ -3364,10 +3186,9 @@ yyreduce:
        }
     break;
 
-  case 220:
-
-/* Line 1806 of yacc.c  */
-#line 1065 "./util/configparser.y"
+  case 213:
+/* Line 1787 of yacc.c  */
+#line 1002 "./util/configparser.y"
     {
                OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -3377,10 +3198,9 @@ yyreduce:
        }
     break;
 
-  case 221:
-
-/* Line 1806 of yacc.c  */
-#line 1074 "./util/configparser.y"
+  case 214:
+/* Line 1787 of yacc.c  */
+#line 1011 "./util/configparser.y"
     {
                OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -3390,10 +3210,9 @@ yyreduce:
        }
     break;
 
-  case 222:
-
-/* Line 1806 of yacc.c  */
-#line 1083 "./util/configparser.y"
+  case 215:
+/* Line 1787 of yacc.c  */
+#line 1020 "./util/configparser.y"
     {
                OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -3403,10 +3222,9 @@ yyreduce:
        }
     break;
 
-  case 223:
-
-/* Line 1806 of yacc.c  */
-#line 1092 "./util/configparser.y"
+  case 216:
+/* Line 1787 of yacc.c  */
+#line 1029 "./util/configparser.y"
     {
                OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->key_cache_size))
@@ -3415,10 +3233,9 @@ yyreduce:
        }
     break;
 
-  case 224:
-
-/* Line 1806 of yacc.c  */
-#line 1100 "./util/configparser.y"
+  case 217:
+/* Line 1787 of yacc.c  */
+#line 1037 "./util/configparser.y"
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -3432,10 +3249,9 @@ yyreduce:
        }
     break;
 
-  case 225:
-
-/* Line 1806 of yacc.c  */
-#line 1113 "./util/configparser.y"
+  case 218:
+/* Line 1787 of yacc.c  */
+#line 1050 "./util/configparser.y"
     {
                OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->neg_cache_size))
@@ -3444,10 +3260,9 @@ yyreduce:
        }
     break;
 
-  case 226:
-
-/* Line 1806 of yacc.c  */
-#line 1121 "./util/configparser.y"
+  case 219:
+/* Line 1787 of yacc.c  */
+#line 1058 "./util/configparser.y"
     {
                OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
                if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 &&
@@ -3470,10 +3285,9 @@ yyreduce:
        }
     break;
 
-  case 227:
-
-/* Line 1806 of yacc.c  */
-#line 1143 "./util/configparser.y"
+  case 220:
+/* Line 1787 of yacc.c  */
+#line 1080 "./util/configparser.y"
     {
                OUTYY(("P(server_local_data:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[(2) - (2)].str)))
@@ -3481,10 +3295,9 @@ yyreduce:
        }
     break;
 
-  case 228:
-
-/* Line 1806 of yacc.c  */
-#line 1150 "./util/configparser.y"
+  case 221:
+/* Line 1787 of yacc.c  */
+#line 1087 "./util/configparser.y"
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -3500,10 +3313,9 @@ yyreduce:
        }
     break;
 
-  case 229:
-
-/* Line 1806 of yacc.c  */
-#line 1165 "./util/configparser.y"
+  case 222:
+/* Line 1787 of yacc.c  */
+#line 1102 "./util/configparser.y"
     {
                OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3514,10 +3326,9 @@ yyreduce:
        }
     break;
 
-  case 230:
-
-/* Line 1806 of yacc.c  */
-#line 1175 "./util/configparser.y"
+  case 223:
+/* Line 1787 of yacc.c  */
+#line 1112 "./util/configparser.y"
     {
                OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3528,10 +3339,18 @@ yyreduce:
        }
     break;
 
-  case 231:
+  case 224:
+/* Line 1787 of yacc.c  */
+#line 1122 "./util/configparser.y"
+    {
+               OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[(2) - (2)].str)));
+               cfg_parser->cfg->max_udp_size = atoi((yyvsp[(2) - (2)].str));
+       }
+    break;
 
-/* Line 1806 of yacc.c  */
-#line 1185 "./util/configparser.y"
+  case 225:
+/* Line 1787 of yacc.c  */
+#line 1128 "./util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
                if(cfg_parser->cfg->stubs->name)
@@ -3542,10 +3361,9 @@ yyreduce:
        }
     break;
 
-  case 232:
-
-/* Line 1806 of yacc.c  */
-#line 1195 "./util/configparser.y"
+  case 226:
+/* Line 1787 of yacc.c  */
+#line 1138 "./util/configparser.y"
     {
                OUTYY(("P(stub-host:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[(2) - (2)].str)))
@@ -3553,10 +3371,9 @@ yyreduce:
        }
     break;
 
-  case 233:
-
-/* Line 1806 of yacc.c  */
-#line 1202 "./util/configparser.y"
+  case 227:
+/* Line 1787 of yacc.c  */
+#line 1145 "./util/configparser.y"
     {
                OUTYY(("P(stub-addr:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[(2) - (2)].str)))
@@ -3564,10 +3381,9 @@ yyreduce:
        }
     break;
 
-  case 234:
-
-/* Line 1806 of yacc.c  */
-#line 1209 "./util/configparser.y"
+  case 228:
+/* Line 1787 of yacc.c  */
+#line 1152 "./util/configparser.y"
     {
                OUTYY(("P(stub-first:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3577,10 +3393,9 @@ yyreduce:
        }
     break;
 
-  case 235:
-
-/* Line 1806 of yacc.c  */
-#line 1218 "./util/configparser.y"
+  case 229:
+/* Line 1787 of yacc.c  */
+#line 1161 "./util/configparser.y"
     {
                OUTYY(("P(stub-prime:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3591,10 +3406,9 @@ yyreduce:
        }
     break;
 
-  case 236:
-
-/* Line 1806 of yacc.c  */
-#line 1228 "./util/configparser.y"
+  case 230:
+/* Line 1787 of yacc.c  */
+#line 1171 "./util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
                if(cfg_parser->cfg->forwards->name)
@@ -3605,10 +3419,9 @@ yyreduce:
        }
     break;
 
-  case 237:
-
-/* Line 1806 of yacc.c  */
-#line 1238 "./util/configparser.y"
+  case 231:
+/* Line 1787 of yacc.c  */
+#line 1181 "./util/configparser.y"
     {
                OUTYY(("P(forward-host:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[(2) - (2)].str)))
@@ -3616,10 +3429,9 @@ yyreduce:
        }
     break;
 
-  case 238:
-
-/* Line 1806 of yacc.c  */
-#line 1245 "./util/configparser.y"
+  case 232:
+/* Line 1787 of yacc.c  */
+#line 1188 "./util/configparser.y"
     {
                OUTYY(("P(forward-addr:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[(2) - (2)].str)))
@@ -3627,10 +3439,9 @@ yyreduce:
        }
     break;
 
-  case 239:
-
-/* Line 1806 of yacc.c  */
-#line 1252 "./util/configparser.y"
+  case 233:
+/* Line 1787 of yacc.c  */
+#line 1195 "./util/configparser.y"
     {
                OUTYY(("P(forward-first:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3640,19 +3451,17 @@ yyreduce:
        }
     break;
 
-  case 240:
-
-/* Line 1806 of yacc.c  */
-#line 1261 "./util/configparser.y"
+  case 234:
+/* Line 1787 of yacc.c  */
+#line 1204 "./util/configparser.y"
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
     break;
 
-  case 250:
-
-/* Line 1806 of yacc.c  */
-#line 1272 "./util/configparser.y"
+  case 244:
+/* Line 1787 of yacc.c  */
+#line 1215 "./util/configparser.y"
     {
                OUTYY(("P(control_enable:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -3663,10 +3472,9 @@ yyreduce:
        }
     break;
 
-  case 251:
-
-/* Line 1806 of yacc.c  */
-#line 1282 "./util/configparser.y"
+  case 245:
+/* Line 1787 of yacc.c  */
+#line 1225 "./util/configparser.y"
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -3676,10 +3484,9 @@ yyreduce:
        }
     break;
 
-  case 252:
-
-/* Line 1806 of yacc.c  */
-#line 1291 "./util/configparser.y"
+  case 246:
+/* Line 1787 of yacc.c  */
+#line 1234 "./util/configparser.y"
     {
                OUTYY(("P(control_interface:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[(2) - (2)].str)))
@@ -3687,10 +3494,9 @@ yyreduce:
        }
     break;
 
-  case 253:
-
-/* Line 1806 of yacc.c  */
-#line 1298 "./util/configparser.y"
+  case 247:
+/* Line 1787 of yacc.c  */
+#line 1241 "./util/configparser.y"
     {
                OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->server_key_file);
@@ -3698,10 +3504,9 @@ yyreduce:
        }
     break;
 
-  case 254:
-
-/* Line 1806 of yacc.c  */
-#line 1305 "./util/configparser.y"
+  case 248:
+/* Line 1787 of yacc.c  */
+#line 1248 "./util/configparser.y"
     {
                OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->server_cert_file);
@@ -3709,10 +3514,9 @@ yyreduce:
        }
     break;
 
-  case 255:
-
-/* Line 1806 of yacc.c  */
-#line 1312 "./util/configparser.y"
+  case 249:
+/* Line 1787 of yacc.c  */
+#line 1255 "./util/configparser.y"
     {
                OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->control_key_file);
@@ -3720,10 +3524,9 @@ yyreduce:
        }
     break;
 
-  case 256:
-
-/* Line 1806 of yacc.c  */
-#line 1319 "./util/configparser.y"
+  case 250:
+/* Line 1787 of yacc.c  */
+#line 1262 "./util/configparser.y"
     {
                OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->control_cert_file);
@@ -3731,19 +3534,17 @@ yyreduce:
        }
     break;
 
-  case 257:
-
-/* Line 1806 of yacc.c  */
-#line 1326 "./util/configparser.y"
+  case 251:
+/* Line 1787 of yacc.c  */
+#line 1269 "./util/configparser.y"
     { 
                OUTYY(("\nP(python:)\n")); 
        }
     break;
 
-  case 261:
-
-/* Line 1806 of yacc.c  */
-#line 1335 "./util/configparser.y"
+  case 255:
+/* Line 1787 of yacc.c  */
+#line 1278 "./util/configparser.y"
     {
                OUTYY(("P(python-script:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->python_script);
@@ -3752,9 +3553,8 @@ yyreduce:
     break;
 
 
-
-/* Line 1806 of yacc.c  */
-#line 3758 "util/configparser.c"
+/* Line 1787 of yacc.c  */
+#line 3558 "util/configparser.c"
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -3941,7 +3741,7 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+#if !defined yyoverflow || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -3983,9 +3783,8 @@ yyreturn:
 }
 
 
-
-/* Line 2067 of yacc.c  */
-#line 1340 "./util/configparser.y"
+/* Line 2048 of yacc.c  */
+#line 1283 "./util/configparser.y"
 
 
 /* parse helper routines could be here */
index 4965220867f091730a1840be6e9bbb35b355fc6f..a862769de20620799236df334492ce63b71107fa 100644 (file)
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.5.  */
+/* A Bison parser, made by GNU Bison 2.6.1.  */
 
 /* Bison interface for Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989-1990, 2000-2012 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
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
+#ifndef YY_UTIL_CONFIGPARSER_H
+# define YY_UTIL_CONFIGPARSER_H
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
 
 /* Tokens.  */
 #ifndef YYTOKENTYPE
      VAR_STUB_FIRST = 382,
      VAR_MINIMAL_RESPONSES = 383,
      VAR_RRSET_ROUNDROBIN = 384,
-     VAR_SEND_CLIENT_SUBNET = 385,
-     VAR_CLIENT_SUBNET_OPCODE = 386,
-     VAR_MAX_CLIENT_SUBNET_IPV4 = 387,
-     VAR_MAX_CLIENT_SUBNET_IPV6 = 388
+     VAR_MAX_UDP_SIZE = 385
    };
 #endif
 /* Tokens.  */
 #define VAR_STUB_FIRST 382
 #define VAR_MINIMAL_RESPONSES 383
 #define VAR_RRSET_ROUNDROBIN 384
-#define VAR_SEND_CLIENT_SUBNET 385
-#define VAR_CLIENT_SUBNET_OPCODE 386
-#define VAR_MAX_CLIENT_SUBNET_IPV4 387
-#define VAR_MAX_CLIENT_SUBNET_IPV6 388
-
+#define VAR_MAX_UDP_SIZE 385
 
 
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
 {
-
-/* Line 2068 of yacc.c  */
+/* Line 2049 of yacc.c  */
 #line 64 "./util/configparser.y"
 
        char*   str;
 
 
-
-/* Line 2068 of yacc.c  */
+/* Line 2049 of yacc.c  */
 #line 322 "util/configparser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -327,4 +327,18 @@ typedef union YYSTYPE
 
 extern YYSTYPE yylval;
 
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
 
+#endif /* !YY_UTIL_CONFIGPARSER_H  */
index 20d4077877ffcace8783f0ebfd44383da3d64589..10823124db0eff65822bdb2b7a214f8c50315f6d 100644 (file)
@@ -107,6 +107,7 @@ extern struct config_parser_state* cfg_parser;
 %token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN
 %token VAR_SEND_CLIENT_SUBNET VAR_CLIENT_SUBNET_OPCODE
 %token VAR_MAX_CLIENT_SUBNET_IPV4 VAR_MAX_CLIENT_SUBNET_IPV6
+%token VAR_MAX_UDP_SIZE
 
 %%
 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -166,6 +167,7 @@ content_server: server_num_threads | server_verbosity | server_port |
        server_minimal_responses | server_rrset_roundrobin | 
        server_send_client_subnet | server_client_subnet_opcode |
        server_max_client_subnet_ipv4 | server_max_client_subnet_ipv6
+       server_minimal_responses | server_rrset_roundrobin | server_max_udp_size
        ;
 stubstart: VAR_STUB_ZONE
        {
@@ -1181,6 +1183,12 @@ server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG
                free($2);
        }
        ;
+server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG
+       {
+               OUTYY(("P(server_max_udp_size:%s)\n", $2));
+               cfg_parser->cfg->max_udp_size = atoi($2);
+       }
+       ;
 stub_name: VAR_NAME STRING_ARG
        {
                OUTYY(("P(name:%s)\n", $2));
index 45e6db17a701d8aa8e3ba96d42c0da77027e131b..a1e56a491bb0796ec0f5d856ea9a5c7d6bc6b95c 100644 (file)
@@ -661,8 +661,9 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
                        return 0;
                }
        }
-       /* roundrobin offset. using query id for random number */
-       rr_offset = RRSET_ROUNDROBIN?id:0;
+       /* roundrobin offset. using query id for random number.  With ntohs
+        * for different roundrobins for sequential id client senders. */
+       rr_offset = RRSET_ROUNDROBIN?ntohs(id):0;
 
        /* insert answer section */
        if((r=insert_section(rep, rep->an_numrrsets, &ancount, buffer, 
@@ -711,9 +712,6 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
                        return 0;
                }
                ldns_buffer_write_u16_at(buffer, 10, arcount);
-       } else {
-               ldns_buffer_write_u16_at(buffer, 8, nscount);
-               ldns_buffer_write_u16_at(buffer, 10, arcount);
        }
        ldns_buffer_flip(buffer);
        return 1;
index e30302a470fb0bedb9f367e5b3e4170fd335a6b7..82521a1ec737324bf5d6f6639c6f120971c43f32 100644 (file)
@@ -98,7 +98,9 @@
 #  ifdef HAVE_EVENT_H
 #    include <event.h>
 #  else
-#    include "event.h"
+#    include "event2/event.h"
+#    include "event2/event_struct.h"
+#    include "event2/event_compat.h"
 #  endif
 #endif /* USE_MINI_EVENT */
 
@@ -318,6 +320,10 @@ udp_send_errno_needs_log(struct sockaddr* addr, socklen_t addrlen)
                        break;
        }
 #endif
+       /* permission denied is gotten for every send if the
+        * network is disconnected (on some OS), squelch it */
+       if(errno == EPERM && verbosity < VERB_DETAIL)
+               return 0;
        /* squelch errors where people deploy AAAA ::ffff:bla for
         * authority servers, which we try for intranets. */
        if(errno == EINVAL && addr_is_ip4mapped(
index a8c49863e0c45efe431dea5a253e1136ef4568d0..7596033bdee27d4fed52f734a7b3f0d01539f8a7 100644 (file)
@@ -50,6 +50,9 @@ on 1 byte), but shoehorning those bytes into integers efficiently is messy.
 #include <time.h>       /* defines time_t for timings in the test */
 /*#include <stdint.h>     defines uint32_t etc  (from config.h) */
 #include <sys/param.h>  /* attempt to define endianness */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h> /* attempt to define endianness (solaris) */
+#endif
 #ifdef linux
 # include <endian.h>    /* attempt to define endianness */
 #endif
@@ -75,22 +78,25 @@ hash_set_raninit(uint32_t v)
  */
 #if (defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && \
      __BYTE_ORDER == __LITTLE_ENDIAN) || \
-    (defined(_BYTE_ORDER) && defined(_LITTLE_ENDIAN) && \
-     _BYTE_ORDER == _LITTLE_ENDIAN) || \
     (defined(i386) || defined(__i386__) || defined(__i486__) || \
-     defined(__i586__) || defined(__i686__) || defined(vax) || defined(MIPSEL))
+     defined(__i586__) || defined(__i686__) || defined(vax) || defined(MIPSEL) || defined(__x86))
 # define HASH_LITTLE_ENDIAN 1
 # define HASH_BIG_ENDIAN 0
-#elif (!defined(_BYTE_ORDER) && !defined(__BYTE_ORDER) && defined(_BIG_ENDIAN))
-# define HASH_LITTLE_ENDIAN 0
-# define HASH_BIG_ENDIAN 1
 #elif (defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && \
        __BYTE_ORDER == __BIG_ENDIAN) || \
-      (defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && \
-       _BYTE_ORDER == _BIG_ENDIAN) || \
-      (defined(sparc) || defined(POWERPC) || defined(mc68000) || defined(sel))
+      (defined(sparc) || defined(__sparc) || defined(__sparc__) || defined(POWERPC) || defined(mc68000) || defined(sel))
 # define HASH_LITTLE_ENDIAN 0
 # define HASH_BIG_ENDIAN 1
+#elif defined(_MACHINE_ENDIAN_H_)
+/* test for machine_endian_h protects failure if some are empty strings */
+# if defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && _BYTE_ORDER == _BIG_ENDIAN
+#  define HASH_LITTLE_ENDIAN 0
+#  define HASH_BIG_ENDIAN 1
+# endif
+# if defined(_BYTE_ORDER) && defined(_LITTLE_ENDIAN) && _BYTE_ORDER == _LITTLE_ENDIAN
+#  define HASH_LITTLE_ENDIAN 1
+#  define HASH_BIG_ENDIAN 0
+# endif /* _MACHINE_ENDIAN_H_ */
 #else
 # define HASH_LITTLE_ENDIAN 0
 # define HASH_BIG_ENDIAN 0
index eec2eb1b6bb75ddc5e494f2208a0a03edceb29bf..83f0df5a3f2d423b6f3574d108989519cfebab3b 100644 (file)
@@ -494,8 +494,8 @@ static struct val_neg_zone* neg_zone_chain(
                        struct val_neg_zone* p=first, *np;
                        while(p) {
                                np = p->parent;
-                               free(p);
                                free(p->name);
+                               free(p);
                                p = np;
                        }
                        return NULL;
@@ -640,8 +640,8 @@ static struct val_neg_data* neg_data_chain(
                        struct val_neg_data* p = first, *np;
                        while(p) {
                                np = p->parent;
-                               free(p);
                                free(p->name);
+                               free(p);
                                p = np;
                        }
                        return NULL;
index 79d5e45a237918caa01c74f2f18c8238314a084e..4642ea6da22e896f710d3f9b8f99f0eef977a8ba 100644 (file)
@@ -808,7 +808,12 @@ canonical_compare(struct ub_packed_rrset_key* rrset, size_t i, size_t j)
                case LDNS_RR_TYPE_MR:
                case LDNS_RR_TYPE_PTR:
                case LDNS_RR_TYPE_DNAME:
-                       return query_dname_compare(d->rr_data[i]+2, 
+                       /* the wireread function has already checked these
+                        * dname's for correctness, and this double checks */
+                       if(!dname_valid(d->rr_data[i]+2, d->rr_len[i]-2) ||
+                               !dname_valid(d->rr_data[j]+2, d->rr_len[j]-2))
+                               return 0;
+                       return query_dname_compare(d->rr_data[i]+2,
                                d->rr_data[j]+2);
 
                /* These RR types have STR and fixed size rdata fields
index d4a64464d80873b6f535bd62bc1b9b8d50007708..768f2368a8f538ec29d07dd11f70f825c5feab8b 100644 (file)
@@ -773,6 +773,8 @@ rrset_has_signer(struct ub_packed_rrset_key* rrset, uint8_t* name, size_t len)
        for(i = d->count; i< d->count+d->rrsig_count; i++) {
                if(d->rr_len[i] > 2+18+len) {
                        /* at least rdatalen + signature + signame (+1 sig)*/
+                       if(!dname_valid(d->rr_data[i]+2+18, d->rr_len[i]-2-18))
+                               continue;
                        if(query_dname_compare(name, d->rr_data[i]+2+18) == 0)
                        {
                                return 1;
index 3d324f3f3c6fd8937a2ef15fac54bca7e9d5c2a1..99e34f2e2c92daa23ff8196fbcc31127636d46d5 100644 (file)
@@ -82,7 +82,7 @@ section /o "DLV - dlv.isc.org" SectionDLV
        SetOutPath $INSTDIR
 
        # libgcc exception lib used by NSISdl plugin (in crosscompile).
-       File /nonfatal "/oname=$PLUGINSDIR\libgcc_s_sjlj-1.dll" "/usr/i686-pc-mingw32/sys-root/mingw/bin/libgcc_s_sjlj-1.dll"
+       File /nonfatal "/oname=$PLUGINSDIR\libgcc_s_sjlj-1.dll" "/usr/i686-w64-mingw32/sys-root/mingw/bin/libgcc_s_sjlj-1.dll"
 
        NSISdl::download "http://ftp.isc.org/www/dlv/dlv.isc.org.key" "$INSTDIR\dlv.isc.org.key"
        Pop $R0 # result from Inetc::get