]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
min-ttl option and tests for min-ttl and max-ttl.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 14 Apr 2009 10:10:11 +0000 (10:10 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 14 Apr 2009 10:10:11 +0000 (10:10 +0000)
git-svn-id: file:///svn/unbound/trunk@1598 be551aaa-1e26-0410-a405-d3ace91eadb9

14 files changed:
doc/Changelog
doc/example.conf.in
doc/unbound.conf.5.in
testdata/ttl_max.rpl [new file with mode: 0644]
testdata/ttl_min.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/msgparse.h
util/data/msgreply.c

index 3647480c335bca5d4d6efbf6c94746a0f685f714..1a17e560dc9878e82ed922d3e6d22745672d2438 100644 (file)
@@ -1,6 +1,7 @@
 14 April 2009: Wouter
        - bug #245: fix munin plugin, perform cleanup of stale lockfiles.
        - makedist.sh; better help text.
+       - cache-min-ttl option and tests.
 
 9 April 2009: Wouter
        - Fix for removal of RSASHA256_NSEC3 protonumber from ldns.
index d5760f0adf55fda4ce02416efe5f88868cd288e4..8618cf654081567f16c30e3a920a4c1194e0a8d3 100644 (file)
@@ -100,7 +100,11 @@ server:
        # the number of slabs must be a power of 2.
        # more slabs reduce lock contention, but fragment memory usage.
        # rrset-cache-slabs: 4
-       
+
+       # the time to live (TTL) value lower bound, in seconds. Default 0.
+       # If more than an hour could easily give trouble due to stale data.
+       # cache-min-ttl: 0
+
        # the time to live (TTL) value cap for RRsets and messages in the
        # cache. Items are not cached for longer. In seconds.
        # cache-max-ttl: 86400
index 75dc24b4de885822d8244f3c71ab9c20ed47adaf..64e4ac669116016dcecc84a6bea5428293f1dd49 100644 (file)
@@ -214,6 +214,14 @@ When the internal TTL expires, the cache item has expired.
 Can be set lower to force the resolver to query for data often, and not
 trust (very large) TTL values.
 .TP
+.B cache\-min\-ttl: \fI<seconds>
+Time to live minimum for RRsets and messages in the cache. Default is 0.
+If the the minimum kicks in, the data is cached for longer than the domain
+owner intended, and thus less queries are made to look up the data.
+Zero makes sure the data in the cache is as the domain owner intended,
+higher values, especially more than an hour or so, can lead to trouble as 
+the data in the cache does not match up with the actual data any more.
+.TP
 .B infra\-host\-ttl: \fI<seconds>
 Time to live for entries in the host cache. The host cache contains 
 roundtrip timing and EDNS support information. Default is 900.
diff --git a/testdata/ttl_max.rpl b/testdata/ttl_max.rpl
new file mode 100644 (file)
index 0000000..6443da7
--- /dev/null
@@ -0,0 +1,212 @@
+; config options
+server:
+       access-control: 127.0.0.1 allow_snoop
+       cache-max-ttl: 10
+
+stub-zone:
+       name: "."
+       stub-addr: 193.0.14.129         # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test TTL max option for messages in the cache
+
+; 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
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.gtld-servers.net.    IN A
+SECTION ANSWER
+a.gtld-servers.net.    IN A    192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+K.ROOT-SERVERS.NET.    IN      A
+SECTION ANSWER
+K.ROOT-SERVERS.NET.    IN      A       193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.gtld-servers.net.    IN AAAA
+SECTION AUTHORITY
+. 86400 IN SOA . . 20070304 28800 7200 604800 86400
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+K.ROOT-SERVERS.NET.    IN      AAAA
+SECTION AUTHORITY
+. 86400 IN SOA . . 20070304 28800 7200 604800 86400
+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 AA NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com.                IN      A       1.2.3.4
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+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.  248 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
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. 10 IN SOA . . 15 28800 7200 604800 10
+ENTRY_END
+
+RANGE_END
+
+; start by passing time ; so we are not at 0
+STEP 1 TIME_PASSES ELAPSE 10
+
+; query for the record
+STEP 8 QUERY
+ENTRY_BEGIN
+REPLY RD CD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA CD
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 248 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
+
+; wait 
+STEP 20 TIME_PASSES ELAPSE 17
+
+; do a lookup to check TTLs.
+STEP 25 QUERY
+ENTRY_BEGIN
+REPLY
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 26 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RA
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+.       3600    IN      NS      K.ROOT-SERVERS.NET.
+SECTION AUTHORITY
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET.     3600    IN      A       193.0.14.129
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/ttl_min.rpl b/testdata/ttl_min.rpl
new file mode 100644 (file)
index 0000000..1fa7ef1
--- /dev/null
@@ -0,0 +1,213 @@
+; config options
+server:
+       access-control: 127.0.0.1 allow_snoop
+       cache-min-ttl: 10
+
+stub-zone:
+       name: "."
+       stub-addr: 193.0.14.129         # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test TTL min option for messages in the cache
+
+; 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
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.gtld-servers.net.    IN A
+SECTION ANSWER
+a.gtld-servers.net.    IN A    192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+K.ROOT-SERVERS.NET.    IN      A
+SECTION ANSWER
+K.ROOT-SERVERS.NET.    IN      A       193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.gtld-servers.net.    IN AAAA
+SECTION AUTHORITY
+. 86400 IN SOA . . 20070304 28800 7200 604800 86400
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+K.ROOT-SERVERS.NET.    IN      AAAA
+SECTION AUTHORITY
+. 86400 IN SOA . . 20070304 28800 7200 604800 86400
+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 AA NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com.                IN      A       1.2.3.4
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+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.  5 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
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. 10 IN SOA . . 15 28800 7200 604800 10
+ENTRY_END
+
+RANGE_END
+
+; start by passing time ; so we are not at 0
+STEP 1 TIME_PASSES ELAPSE 10
+
+; query for the record
+STEP 8 QUERY
+ENTRY_BEGIN
+REPLY RD CD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA CD
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 10 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
+
+; wait for 7 seconds
+STEP 20 TIME_PASSES ELAPSE 7
+
+; do a lookup to check TTLs.
+STEP 25 QUERY
+ENTRY_BEGIN
+REPLY
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 26 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RA
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3 IN A        10.20.30.40
+SECTION AUTHORITY
+example.com.   3593 IN NS      ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.        3593    IN      A       1.2.3.4
+ENTRY_END
+
+SCENARIO_END
index fb27519eee5444f55151c251822ff1c6062dc6b5..97a9e230c41b966acf168abaccaeecf0fa8ef7aa 100644 (file)
@@ -46,6 +46,7 @@
 #include "util/config_file.h"
 #include "util/configparser.h"
 #include "util/net_help.h"
+#include "util/data/msgparse.h"
 /** global config during parsing */
 struct config_parser_state* cfg_parser = 0;
 /** lex in file */
@@ -101,6 +102,7 @@ config_create()
        cfg->host_ttl = 900;
        cfg->lame_ttl = 900;
        cfg->bogus_ttl = 60;
+       cfg->min_ttl = 0;
        cfg->max_ttl = 3600 * 24;
        cfg->infra_cache_slabs = 4;
        cfg->infra_cache_numhosts = 10000;
@@ -810,13 +812,11 @@ cfg_parse_memsize(const char* str, size_t* res)
        return 1;
 }
 
-/** the MAX_TTL global */
-extern uint32_t MAX_TTL;
-
 void 
 config_apply(struct config_file* config)
 {
        MAX_TTL = (uint32_t)config->max_ttl;
+       MIN_TTL = (uint32_t)config->min_ttl;
        log_set_time_asc(config->log_time_ascii);
 }
 
index 74da245479b1a221b5d55174cfafd8302f89fa4e..49ef8e3a7d8a0f33fa82aa28cc1f642e710f5d48 100644 (file)
@@ -201,6 +201,8 @@ struct config_file {
 
        /** the number of seconds maximal TTL used for RRsets and messages */
        int max_ttl;
+       /** the number of seconds minimum TTL used for RRsets and messages */
+       int min_ttl;
        /** if not 0, this value is the validation date for RRSIGs */
        int32_t val_date_override;
        /** the minimum for signature clock skew */
index aaaaac7cdc5b73dc319f4ebcf8e41fb73dd2b8aa..98c86260cbc93fb3c459e1f726ec18da06204ddf 100644 (file)
@@ -362,8 +362,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 119
-#define YY_END_OF_BUFFER 120
+#define YY_NUM_RULES 120
+#define YY_END_OF_BUFFER 121
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -371,130 +371,130 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[1104] =
+static yyconst flex_int16_t yy_accept[1111] =
     {   0,
-        1,    1,  101,  101,  105,  105,  109,  109,  113,  113,
-        1,    1,  120,  117,    1,   99,   99,  118,  117,  118,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  101,
-      102,  102,  103,  118,  105,  106,  106,  107,  118,  112,
-      109,  110,  110,  111,  118,  113,  114,  114,  115,  118,
-      116,  100,  116,  104,  118,  116,  117,    0,    1,    0,
-      117,    0,    2,    0,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  101,    0,  105,    0,  112,    0,  109,  113,    0,
-      116,    0,  116,    0,  116,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  116,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  116,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,   50,  117,
-      117,  117,  117,  117,    6,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  116,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      116,  117,  117,   20,  117,  117,  117,  117,   12,   13,
-      117,   15,   14,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,   97,  117,  117,  117,  117,    3,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-
-      117,  117,  117,  117,  117,  117,  117,  117,  116,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  108,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,   23,  117,
-      117,  117,  117,  117,  117,  117,   24,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,   63,  108,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,   62,  117,
-
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,   21,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-       22,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,   17,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,   51,   52,  117,   49,
-
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,    5,  117,  117,  117,  117,  117,  117,  117,
-      117,   65,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,   83,   82,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,   25,  117,  117,  117,  117,   53,  117,  117,  117,
-      117,  117,   80,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,   42,  117,  117,  117,  117,
-
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,    4,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,   91,  117,
-       16,  117,  117,  117,   55,   56,   54,  117,  117,  117,
-      117,  117,   61,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,   69,  117,  117,  117,
-
-      117,  117,  117,  117,  117,  117,  117,   31,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,   60,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,   64,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,   96,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,   73,
-      117,  117,  117,  117,  117,   59,  117,   89,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,   32,   33,  117,   38,   76,  117,   84,
-       81,  117,   27,  117,   78,  117,  117,  117,  117,  117,
-
-        7,  117,   48,   88,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,   66,  117,  117,   98,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,   77,   26,
-       28,  117,  117,  117,  117,  117,   47,  117,  117,  117,
-       92,  117,  117,  117,  117,  117,  117,   45,  117,  117,
-      117,  117,  117,  117,  117,  117,   94,  117,  117,  117,
-      117,  117,  117,  117,   11,  117,  117,  117,  117,  117,
-      117,   10,  117,  117,   29,  117,   93,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,   72,   71,   95,
-
-       90,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-       34,  117,  117,  117,  117,  117,   30,  117,  117,  117,
-       67,   68,  117,  117,  117,   70,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,   18,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-       87,  117,  117,  117,  117,  117,  117,   19,  117,    9,
-      117,  117,   85,   39,  117,  117,  117,   75,   57,  117,
-      117,   41,   44,   40,  117,   35,  117,    8,  117,  117,
-       74,  117,  117,  117,   36,  117,   86,  117,  117,   58,
-       43,   37,  117,  117,  117,  117,   46,  117,  117,  117,
-
-      117,   79,    0
+        1,    1,  102,  102,  106,  106,  110,  110,  114,  114,
+        1,    1,  121,  118,    1,  100,  100,  119,  118,  119,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  102,
+      103,  103,  104,  119,  106,  107,  107,  108,  119,  113,
+      110,  111,  111,  112,  119,  114,  115,  115,  116,  119,
+      117,  101,  117,  105,  119,  117,  118,    0,    1,    0,
+      118,    0,    2,    0,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  102,    0,  106,    0,  113,    0,  110,  114,    0,
+      117,    0,  117,    0,  117,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  117,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  117,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,   51,  118,
+      118,  118,  118,  118,    6,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  117,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      117,  118,  118,   20,  118,  118,  118,  118,   12,   13,
+      118,   15,   14,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,   98,  118,  118,  118,  118,    3,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+
+      118,  118,  118,  118,  118,  118,  118,  118,  117,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  109,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,   23,
+      118,  118,  118,  118,  118,  118,  118,   24,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,   64,  109,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+
+       63,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,   21,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,   22,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,   17,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,   52,
+
+       53,  118,   50,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,    5,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,   66,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,   84,   83,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,   25,  118,  118,  118,  118,
+       54,  118,  118,  118,  118,  118,   81,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+
+       43,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,    4,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,   92,  118,   16,  118,  118,  118,
+       56,   57,   55,  118,  118,  118,  118,  118,   62,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+
+      118,  118,   70,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,   31,   32,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,   61,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,   65,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,   97,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,   74,  118,  118,  118,
+      118,  118,   60,  118,   90,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+       33,   34,  118,   39,   77,  118,   85,   82,  118,   27,
+
+      118,   79,  118,  118,  118,  118,  118,    7,  118,   49,
+       89,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,   67,  118,  118,   99,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,   78,   26,   28,  118,  118,
+      118,  118,  118,   48,  118,  118,  118,   93,  118,  118,
+      118,  118,  118,  118,   46,  118,  118,  118,  118,  118,
+      118,  118,  118,   95,  118,  118,  118,  118,  118,  118,
+      118,   11,  118,  118,  118,  118,  118,  118,   10,  118,
+      118,   29,  118,   94,  118,  118,  118,  118,  118,  118,
+
+      118,  118,  118,  118,   73,   72,   96,   91,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,   35,  118,  118,
+      118,  118,  118,   30,  118,  118,  118,   68,   69,  118,
+      118,  118,   71,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,   18,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,   88,  118,  118,
+      118,  118,  118,  118,   19,  118,    9,  118,  118,   86,
+       40,  118,  118,  118,   76,   58,  118,  118,   42,   45,
+       41,  118,   36,  118,    8,  118,  118,   75,  118,  118,
+      118,   37,  118,   87,  118,  118,   59,   44,   38,  118,
+
+      118,  118,  118,   47,  118,  118,  118,  118,   80,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -537,21 +537,21 @@ static yyconst flex_int32_t yy_meta[40] =
         1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[1118] =
+static yyconst flex_int16_t yy_base[1125] =
     {   0,
         0,    0,   37,   40,   44,   51,   63,   75,   56,   68,
-       87,  108, 2128, 2114,   50, 2218, 2218, 2218,  129,   94,
+       87,  108, 2142, 2128,   50, 2227, 2227, 2227,  129,   94,
        33,  124,   94,   49,   74,   61,   91,   92,  110,  111,
-      112,  133,   50,  135,  137,  136,  145,  143,  164, 2113,
-     2218, 2218, 2218,  122, 2112, 2218, 2218, 2218,  157, 2110,
-     1950, 2218, 2218, 2218,  179, 1739, 2218, 2218, 2218,  167,
-     1324, 2218,  185, 2218,  189,   90, 1191,  195,  199, 1155,
-      206, 1110, 2218, 1062,  190,  199,  122,  116,  149,  182,
+      112,  133,   50,  135,  137,  136,  145,  143,  164, 2126,
+     2227, 2227, 2227,  122, 2125, 2227, 2227, 2227,  157, 2124,
+     2134, 2227, 2227, 2227,  179, 2122, 2227, 2227, 2227,  167,
+     2121, 2227,  185, 2227,  189,   90, 2060,  195,  199, 2001,
+      206, 1955, 2227, 1917,  190,  199,  122,  116,  149,  182,
       208,  191,  201,  207,  209,  161,  212,  210,  147,  217,
       222,  216,  214,  228,  230,  231,  233,  234,  236,  238,
 
       240,  239,  241,  244,  246,  248,  242,  249,  250,   72,
-      256, 1042,  273,  939,  277,  885,  284,  740,  663,  278,
+      256, 1897,  273, 1504,  277,  894,  284,  740,  663,  278,
       521,  288,  294,  502,  287,  291,  281,  292,  293,  295,
       302,  314,  298,  301,  303,  257,  304,  305,  310,  311,
       312,  316,  320,  330,  332,  321,  344,  340,  346,  348,
@@ -565,8 +565,8 @@ static yyconst flex_int16_t yy_base[1118] =
       464,  462,  465,  471,  470,  491,  472,  477,  475,  478,
       485,  481,  483,  488,  489,  495,  514,  499,  502,  504,
       509,  513,  515,  516,  522,  525,  524,  526,  532,  536,
-      538,  539,  546,  545,  537,  547,  529,  555, 2218,  557,
-      548,  551,  553,  560, 2218,  561,  563,  565,  566,  573,
+      538,  539,  546,  545,  537,  547,  529,  555, 2227,  557,
+      548,  551,  553,  560, 2227,  561,  563,  565,  566,  573,
       564,  567,  575,  578,  584,  580,  587,  571,  592,  590,
       585,  594,  595,  599,  602,  603,  606,  608,  614,  607,
       616,  618,  610,  623,  619,  628,  634,  629,  636,  638,
@@ -576,222 +576,224 @@ static yyconst flex_int16_t yy_base[1118] =
       683,  684,  685,  686,  687,  694,  701,  697,  700,  709,
       690,  707,  698,  705,  712,  719,  715,  717,  720,  718,
       722,  724,  726,  730,  731,  738,  728,  732,  740,  742,
-      745,  744,  751, 2218,  753,  754,  755,  758, 2218, 2218,
-      757, 2218, 2218,  759,  760,  766,  775,  762,  765,  770,
-      777,  771,  780,  769,  785,  788,  789,  790,  796,  792,
-      799,  801,  802,  806,  803,  808,  810,  813,  814,  820,
-      822,  815, 2218,  823,  824,  829,  832, 2218,  827,  833,
-      825,  831,  839,  841,  842,  850,  848,  846,  849,  854,
-
-      851,  857,  860,  855,  862,  869,  866,  868,  871,  874,
-      876,  901,  877,  878,  880,  882,  881,  884,  890,  883,
-      887,  907,  909,  888,  905,  892,  921, 2218,  918,  922,
-      915,  923,  924,  926,  927,  928,  930,  938, 2218,  931,
-      937,  940,  947,  941,  953,  956, 2218,  957,  959,  949,
-      943,  965,  955,  966,  967,  969,  972,  973,  974,  975,
-      978,  977,  989,  990,  976,  983,  993,  994,  999,  996,
-      997,  998, 1000, 2218,  259, 1001, 1007, 1004, 1005, 1010,
-     1011, 1003, 1021, 1013, 1023, 1022, 1026, 1028, 1029, 1034,
-     1035, 1036, 1030, 1038, 1037, 1039, 1040, 1044, 2218, 1048,
-
-     1057, 1041, 1058, 1069, 1046, 1071, 1072, 1070, 1076, 1067,
-     1074, 1083, 1084, 1080, 1082, 1087, 1089, 1091, 1090, 1088,
-     1094, 1099, 1097, 1095, 1098, 1110, 1112, 1114, 1122, 1104,
-     1118, 1123, 1116, 1125, 1129, 2218, 1132, 1135, 1138, 1137,
-     1139, 1140, 1142, 1143, 1144, 1147, 1148, 1150, 1152, 1153,
-     2218, 1160, 1154, 1156, 1157, 1161, 1168, 1166, 1169, 1167,
-     1173, 1175, 1179, 1176, 1187, 1188, 1189, 1190, 1197, 1198,
-     1199, 2218, 1201, 1202, 1209, 1212, 1205, 1207, 1219, 1215,
-     1216, 1217, 1218, 1225, 1220, 1223, 1226, 1228, 1229, 1222,
-     1230, 1244, 1240, 1233, 1251, 1252, 2218, 2218, 1249, 2218,
-
-     1254, 1255, 1256, 1258, 1259, 1261, 1262, 1264, 1266, 1267,
-     1268, 1273, 2218, 1272, 1269, 1275, 1283, 1279, 1291, 1276,
-     1288, 2218, 1292, 1280, 1298, 1299, 1293, 1302, 1303, 1304,
-     1307, 1310, 1312, 1313, 1314, 1317, 1316, 1323, 1319, 1320,
-     1321, 1326, 1335, 1327, 2218, 2218, 1325, 1336, 1332, 1337,
-     1348, 1355, 1353, 1338, 1354, 1356, 1359, 1360, 1361, 1363,
-     1364, 2218, 1370, 1371, 1369, 1377, 2218, 1368, 1372, 1381,
-     1383, 1384, 2218, 1385, 1387, 1388, 1389, 1392, 1395, 1396,
-     1397, 1403, 1404, 1406, 1407, 1415, 1408, 1420, 1426, 1410,
-     1412, 1423, 1428, 1430, 1433, 2218, 1439, 1425, 1440, 1437,
-
-     1442, 1449, 1438, 1445, 1446, 1447, 1448, 1451, 1453, 1455,
-     1459, 1456, 1461, 1458, 1471, 1460, 1464, 2218, 1473, 1479,
-     1476, 1481, 1482, 1483, 1485, 1489, 1490, 1491, 1493, 1494,
-     1498, 1500, 1508, 1506, 1499, 1518, 1510, 1516, 1514, 1524,
-      631, 1526, 1517, 1528, 1525, 1530, 1532, 1533, 2218, 1534,
-     2218, 1536, 1523, 1540, 2218, 2218, 2218, 1550, 1543, 1551,
-     1553, 1557, 2218, 1544, 1558, 1547, 1554, 1561, 1562, 1563,
-     1565, 1567, 1569, 1570, 1575, 1577, 1579, 1581, 1580, 1587,
-     1589, 1583, 1590, 1596, 1593, 1595, 1597, 1600, 1603, 1604,
-     1608, 1606, 1607, 1602, 1609, 1621, 2218, 1623, 1612, 1619,
-
-     1631, 1624, 1626, 1632, 1634, 1635, 1641, 2218, 1638, 1643,
-     1649, 1644, 1646, 1653, 1652, 1654, 1655, 1658, 1660, 1661,
-     1662, 2218, 1663, 1665, 1669, 1670, 1676, 1680, 1672, 1687,
-     1689, 1684, 1691, 1693, 2218, 1694, 1696, 1697, 1701, 1702,
-     1698, 1705, 1706, 1710, 1711, 1713, 2218, 1715, 1717, 1718,
-     1721, 1723, 1724, 1726, 1725, 1727, 1729, 1737, 1664, 2218,
-     1734, 1735, 1741, 1751, 1747, 2218, 1749, 2218, 1750, 1752,
-     1759, 1760, 1762, 1767, 1755, 1763, 1768, 1774, 1770, 1771,
-     1772, 1778, 1779, 2218, 2218, 1784, 2218, 2218, 1789, 2218,
-     2218, 1791, 2218, 1793, 2218, 1799, 1795, 1782, 1780, 1800,
-
-     2218, 1804, 2218, 2218, 1801, 1807, 1808, 1811, 1812, 1797,
-     1814, 1816, 1817, 1818, 1820, 1821, 1822, 1823, 1827, 1825,
-     1831, 1832, 1834, 1836, 2218, 1833, 1841, 2218, 1844, 1846,
-     1847, 1850, 1852, 1855, 1861, 1857, 1858, 1859, 2218, 2218,
-     2218, 1860, 1867, 1863, 1868, 1869, 2218, 1874, 1875, 1882,
-     2218, 1884, 1876, 1886, 1888, 1891, 1889, 2218, 1890, 1899,
-     1901, 1892, 1903, 1909, 1911, 1913, 2218, 1914, 1915, 1917,
-     1916, 1921, 1922, 1924, 2218, 1918, 1926, 1929, 1931, 1934,
-     1936, 2218, 1935, 1938, 2218, 1947, 2218, 1932, 1948, 1950,
-     1955, 1957, 1943, 1958, 1964, 1963, 1965, 2218, 2218, 2218,
-
-     2218, 1960, 1966, 1967, 1968, 1970, 1971, 1973, 1976, 1977,
-     2218, 1978, 1980, 1983, 1988, 1987, 2218, 1993, 1989, 1990,
-     2218, 2218, 1995, 2003, 2005, 2218, 2006, 1994, 2007, 2009,
-     2010, 2012, 2016, 2018, 2017, 2019, 2021, 2025, 2218, 2028,
-     2029, 1878, 2033, 2035, 2036, 2039, 2037, 2041, 2045, 2042,
-     2218, 2047, 2054, 2059, 2063, 2060, 2067, 2218, 2068, 2218,
-     2071, 2072, 2218, 2218, 2048, 2074, 2075, 2218, 2218, 2064,
-     2046, 2218, 2218, 2218, 2079, 2218, 2081, 2218, 2083, 2076,
-     2218, 2086, 2088, 2090, 2218, 2093, 2218, 2094, 2095, 2218,
-     2218, 2218, 2097, 2098, 2100, 2102, 2218, 2105, 2103, 2107,
-
-     2109, 2218, 2218, 2139, 2145, 2151, 2157, 2163,   94, 2169,
-     2175, 2181, 2187, 2193, 2199, 2205, 2211
+      745,  744,  751, 2227,  753,  754,  755,  758, 2227, 2227,
+      757, 2227, 2227,  759,  761,  767,  775,  764,  766,  770,
+      777,  771,  780,  783,  785,  788,  789,  792,  796,  790,
+      799,  802,  803,  807,  808,  810,  811,  812,  814,  820,
+      827,  815, 2227,  823,  824,  830,  825, 2227,  832,  833,
+      835,  839,  842,  840,  843,  849,  847,  845,  850,  853,
+
+      852,  859,  863,  861,  855,  870,  867,  872,  875,  869,
+      876,  877,  901,  878,  880,  882,  881,  883,  890,  907,
+      899,  886,  888,  909,  911,  916,  905,  893, 2227,  923,
+      922,  920,  921,  926,  927,  932,  928,  929,  940, 2227,
+      938,  941,  942,  944,  945,  950,  957, 2227,  955,  958,
+      960,  962,  963,  964,  965,  968,  967,  972,  973,  974,
+      976,  977,  978,  988,  995,  984,  994,  987,  991, 1000,
+      997,  998, 1001, 1002, 2227,  259, 1003, 1009, 1013, 1011,
+     1010, 1012, 1014, 1018, 1022, 1023, 1025, 1030, 1028, 1029,
+     1032, 1031, 1037, 1038, 1039, 1040, 1043, 1044, 1042, 1045,
+
+     2227, 1050, 1053, 1051, 1063, 1070, 1066, 1072, 1055, 1073,
+     1074, 1076, 1077, 1085, 1086, 1082, 1084, 1083, 1089, 1091,
+     1094, 1096, 1098, 1100, 1102, 1103, 1104, 1114, 1116, 1119,
+     1122, 1105, 1118, 1127, 1111, 1130, 1131, 2227, 1139, 1140,
+     1142, 1141, 1133, 1143, 1145, 1146, 1147, 1148, 1151, 1155,
+     1153, 1149, 1157, 2227, 1163, 1159, 1160, 1165, 1161, 1172,
+     1164, 1177, 1171, 1179, 1180, 1188, 1182, 1186, 1189, 1192,
+     1194, 1201, 1202, 1205, 2227, 1198, 1207, 1215, 1209, 1211,
+     1212, 1221, 1217, 1219, 1220, 1222, 1223, 1224, 1225, 1227,
+     1229, 1231, 1234, 1232, 1247, 1248, 1235, 1254, 1256, 2227,
+
+     2227, 1258, 2227, 1259, 1250, 1242, 1261, 1260, 1264, 1268,
+     1269, 1271, 1272, 1273, 1274, 2227, 1277, 1278, 1280, 1281,
+     1107, 1284, 1290, 1283, 1287, 2227, 1286, 1294, 1296, 1304,
+     1297, 1302, 1306, 1307, 1309, 1313, 1310, 1314, 1316, 1317,
+     1320, 1326, 1323, 1324, 1325, 1327, 1329, 1332, 2227, 2227,
+     1337, 1330, 1335, 1347, 1349, 1350, 1352, 1353, 1355, 1357,
+     1360, 1361, 1362, 1364, 1365, 2227, 1371, 1372, 1370, 1378,
+     2227, 1369, 1382, 1384, 1385, 1386, 2227, 1388, 1389, 1390,
+     1391, 1397, 1392, 1394, 1398, 1399, 1407, 1405, 1412, 1413,
+     1421, 1414, 1425, 1427, 1416, 1418, 1429, 1432, 1434, 1436,
+
+     2227, 1440, 1426, 1446, 1442, 1448, 1450, 1443, 1449, 1451,
+     1452, 1453, 1454, 1458, 1456, 1461, 1466, 1468, 1460, 1463,
+     1465, 1478, 2227, 1479, 1487, 1475, 1481, 1485, 1483, 1489,
+     1493, 1496, 1497, 1498, 1499, 1500, 1506, 1517, 1510, 1511,
+     1518, 1519, 1521, 1502, 1529,  631, 1533, 1522, 1536, 1538,
+     1526, 1539, 1540, 1541, 2227, 1530, 2227, 1547, 1543, 1545,
+     2227, 2227, 2227, 1556, 1549, 1552, 1555, 1563, 2227, 1558,
+     1564, 1560, 1567, 1568, 1570, 1569, 1571, 1572, 1573, 1574,
+     1576, 1587, 1583, 1588, 1594, 1590, 1597, 1589, 1598, 1604,
+     1600, 1601, 1603, 1611, 1612, 1613, 1606, 1614, 1608, 1616,
+
+     1619, 1623, 2227, 1627, 1628, 1630, 1632, 1634, 1637, 1638,
+     1640, 1641, 1647, 2227, 2227, 1648, 1650, 1651, 1655, 1658,
+     1660, 1644, 1661, 1662, 1665, 1668, 1670, 1669, 2227, 1671,
+     1672, 1673, 1675, 1678, 1680, 1683, 1688, 1692, 1693, 1695,
+     1698, 2227, 1699, 1701, 1702, 1706, 1707, 1703, 1708, 1713,
+     1716, 1717, 1719, 2227, 1723, 1720, 1726, 1728, 1730, 1710,
+     1732, 1724, 1733, 1734, 1749, 1741, 2227, 1738, 1747, 1750,
+     1753, 1754, 2227, 1752, 2227, 1757, 1761, 1768, 1765, 1759,
+     1771, 1772, 1773, 1774, 1780, 1776, 1778, 1781, 1777, 1787,
+     2227, 2227, 1783, 2227, 2227, 1791, 2227, 2227, 1796, 2227,
+
+     1798, 2227, 1804, 1800, 1802, 1788, 1803, 2227, 1806, 2227,
+     2227, 1807, 1809, 1814, 1816, 1813, 1817, 1820, 1821, 1822,
+     1823, 1827, 1828, 1824, 1829, 1831, 1830, 1838, 1836, 1840,
+     1847, 2227, 1839, 1855, 2227, 1842, 1848, 1853, 1858, 1859,
+     1861, 1867, 1864, 1863, 1865, 2227, 2227, 2227, 1868, 1869,
+     1876, 1877, 1873, 2227, 1881, 1870, 1884, 2227, 1886, 1890,
+     1893, 1894, 1895, 1896, 2227, 1898, 1901, 1903, 1905, 1910,
+     1915, 1917, 1919, 2227, 1921, 1911, 1922, 1924, 1927, 1928,
+     1930, 2227, 1931, 1932, 1935, 1937, 1940, 1938, 2227, 1944,
+     1941, 2227, 1956, 2227, 1942, 1957, 1949, 1960, 1964, 1947,
+
+     1961, 1971, 1968, 1969, 2227, 2227, 2227, 2227, 1970, 1972,
+     1974, 1976, 1977, 1978, 1979, 1981, 1983, 2227, 1984, 1986,
+     1995, 1996, 1988, 2227, 1999, 2001, 1985, 2227, 2227, 2002,
+     2011, 2006, 2227, 2009, 2016, 2017, 2019, 2020, 2021, 2022,
+     2023, 2024, 2025, 2027, 2029, 2227, 2038, 2031, 2033, 2042,
+     2046, 2039, 2047, 2043, 2049, 2053, 2054, 2227, 2056, 2065,
+     2067, 2069, 2057, 2071, 2227, 2074, 2227, 2077, 2078, 2227,
+     2227, 2072, 2082, 2079, 2227, 2227, 2085, 2086, 2227, 2227,
+     2227, 2088, 2227, 2089, 2227, 2092, 2094, 2227, 2095, 2097,
+     2099, 2227, 2101, 2227, 2102, 2103, 2227, 2227, 2227, 2106,
+
+     2107, 2112, 2108, 2227, 2115, 2118, 2116, 2120, 2227, 2227,
+     2148, 2154, 2160, 2166, 2172,   94, 2178, 2184, 2190, 2196,
+     2202, 2208, 2214, 2220
     } ;
 
-static yyconst flex_int16_t yy_def[1118] =
+static yyconst flex_int16_t yy_def[1125] =
     {   0,
-     1103,    1, 1104, 1104, 1105, 1105, 1106, 1106, 1107, 1107,
-     1108, 1108, 1103, 1109, 1103, 1103, 1103, 1103, 1110, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1111,
-     1103, 1103, 1103, 1111, 1112, 1103, 1103, 1103, 1112, 1113,
-     1103, 1103, 1103, 1103, 1113, 1114, 1103, 1103, 1103, 1114,
-     1115, 1103, 1116, 1103, 1115, 1115, 1109, 1109, 1103, 1117,
-     1110, 1117, 1103, 1110, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1111, 1111, 1112, 1112, 1113, 1113, 1103, 1114, 1114,
-     1115, 1115, 1116, 1116, 1115, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1115, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1115, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109,
-     1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1115, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1115, 1109, 1109, 1103, 1109, 1109, 1109, 1109, 1103, 1103,
-     1109, 1103, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1103, 1109, 1109, 1109, 1109, 1103, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1115, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1103, 1115, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109,
-
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1103, 1103, 1109, 1103,
-
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1103, 1103, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1103, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
-     1109, 1109, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109, 1109,
-
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109,
-     1103, 1109, 1109, 1109, 1103, 1103, 1103, 1109, 1109, 1109,
-     1109, 1109, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
-
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103,
-     1109, 1109, 1109, 1109, 1109, 1103, 1109, 1103, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1103, 1103, 1109, 1103, 1103, 1109, 1103,
-     1103, 1109, 1103, 1109, 1103, 1109, 1109, 1109, 1109, 1109,
-
-     1103, 1109, 1103, 1103, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1103, 1109, 1109, 1103, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1103,
-     1103, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
-     1103, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109, 1109, 1109,
-     1109, 1103, 1109, 1109, 1103, 1109, 1103, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1103, 1103,
-
-     1103, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1103, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
-     1103, 1103, 1109, 1109, 1109, 1103, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109,
-     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1103, 1109, 1109, 1109, 1109, 1109, 1109, 1103, 1109, 1103,
-     1109, 1109, 1103, 1103, 1109, 1109, 1109, 1103, 1103, 1109,
-     1109, 1103, 1103, 1103, 1109, 1103, 1109, 1103, 1109, 1109,
-     1103, 1109, 1109, 1109, 1103, 1109, 1103, 1109, 1109, 1103,
-     1103, 1103, 1109, 1109, 1109, 1109, 1103, 1109, 1109, 1109,
-
-     1109, 1103,    0, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
-     1103, 1103, 1103, 1103, 1103, 1103, 1103
+     1110,    1, 1111, 1111, 1112, 1112, 1113, 1113, 1114, 1114,
+     1115, 1115, 1110, 1116, 1110, 1110, 1110, 1110, 1117, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1118,
+     1110, 1110, 1110, 1118, 1119, 1110, 1110, 1110, 1119, 1120,
+     1110, 1110, 1110, 1110, 1120, 1121, 1110, 1110, 1110, 1121,
+     1122, 1110, 1123, 1110, 1122, 1122, 1116, 1116, 1110, 1124,
+     1117, 1124, 1110, 1117, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1118, 1118, 1119, 1119, 1120, 1120, 1110, 1121, 1121,
+     1122, 1122, 1123, 1123, 1122, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1122, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1122, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1110, 1116,
+     1116, 1116, 1116, 1116, 1110, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1122, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1122, 1116, 1116, 1110, 1116, 1116, 1116, 1116, 1110, 1110,
+     1116, 1110, 1110, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1110, 1116, 1116, 1116, 1116, 1110, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1122, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1110, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1110,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1110, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1110, 1122, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+
+     1110, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1110, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1110, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1110, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1110,
+
+     1110, 1116, 1110, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1110, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1110, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1110, 1110,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1110, 1116, 1116, 1116, 1116,
+     1110, 1116, 1116, 1116, 1116, 1116, 1110, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+
+     1110, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1110, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1110, 1116, 1110, 1116, 1116, 1116,
+     1110, 1110, 1110, 1116, 1116, 1116, 1116, 1116, 1110, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+
+     1116, 1116, 1110, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1110, 1110, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1110, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1110, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1110, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1110, 1116, 1116, 1116,
+     1116, 1116, 1110, 1116, 1110, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1110, 1110, 1116, 1110, 1110, 1116, 1110, 1110, 1116, 1110,
+
+     1116, 1110, 1116, 1116, 1116, 1116, 1116, 1110, 1116, 1110,
+     1110, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1110, 1116, 1116, 1110, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1110, 1110, 1110, 1116, 1116,
+     1116, 1116, 1116, 1110, 1116, 1116, 1116, 1110, 1116, 1116,
+     1116, 1116, 1116, 1116, 1110, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1110, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1110, 1116, 1116, 1116, 1116, 1116, 1116, 1110, 1116,
+     1116, 1110, 1116, 1110, 1116, 1116, 1116, 1116, 1116, 1116,
+
+     1116, 1116, 1116, 1116, 1110, 1110, 1110, 1110, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1110, 1116, 1116,
+     1116, 1116, 1116, 1110, 1116, 1116, 1116, 1110, 1110, 1116,
+     1116, 1116, 1110, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1110, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1110, 1116, 1116,
+     1116, 1116, 1116, 1116, 1110, 1116, 1110, 1116, 1116, 1110,
+     1110, 1116, 1116, 1116, 1110, 1110, 1116, 1116, 1110, 1110,
+     1110, 1116, 1110, 1116, 1110, 1116, 1116, 1110, 1116, 1116,
+     1116, 1110, 1116, 1110, 1116, 1116, 1110, 1110, 1110, 1116,
+
+     1116, 1116, 1116, 1110, 1116, 1116, 1116, 1116, 1110,    0,
+     1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
+     1110, 1110, 1110, 1110
     } ;
 
-static yyconst flex_int16_t yy_nxt[2258] =
+static yyconst flex_int16_t yy_nxt[2267] =
     {   0,
        14,   15,   16,   17,   18,   19,   18,   14,   14,   14,
        14,   18,   20,   21,   14,   22,   23,   24,   25,   14,
@@ -865,7 +867,7 @@ static yyconst flex_int16_t yy_nxt[2258] =
        68,   68,  343,  340,  339,   68,  351,  346,  347,  349,
        68,   68,  345,   68,  348,  350,   68,  352,   68,  353,
        68,  354,   68,   68,   68,  357,   68,  355,  356,   68,
-       68,   68,   68,  358,   68,  805,  359,  361,   68,   68,
+       68,   68,   68,  358,   68,  811,  359,  361,   68,   68,
       366,  363,  367,  360,   68,  120,  364,   68,  362,   68,
       365,   68,  368,   68,  373,  369,   68,  371,  372,   68,
        68,   68,  374,  375,  376,   68,   68,   68,   68,   68,
@@ -876,174 +878,175 @@ static yyconst flex_int16_t yy_nxt[2258] =
        68,   68,   68,  396,   68,  392,   68,  397,   68,  393,
        68,  118,   68,   68,   68,  401,  398,  402,  403,  400,
        68,  406,   68,  399,   68,  404,   68,  122,  405,  410,
-      412,  407,  409,   68,  411,   68,   68,   68,  408,   68,
-       68,   68,   68,  419,   68,  414,  418,   68,   68,  425,
-      417,   68,   68,   68,  413,  415,  416,   68,  428,   68,
-      429,  420,   68,  430,  421,  426,  431,   68,  432,  422,
-
-       68,   68,   68,  433,   68,  423,  424,  427,   68,  436,
-      435,   68,  439,   68,   68,   68,  438,  440,   68,  437,
-       68,  434,   68,  442,  441,   68,   68,   68,  443,  448,
-      445,  447,   68,  446,   68,   68,   68,   68,  450,   68,
-      444,   68,  452,   68,   68,   68,  449,  453,  455,  456,
-      451,   68,  458,   68,   68,  454,  457,  462,   68,  460,
-       68,   68,   68,   68,  463,  459,   68,   68,  461,   68,
-      468,  466,   68,  465,   68,  469,  472,  464,   68,  474,
-       68,   68,  475,  122,  467,  470,   68,  471,   68,   68,
-       68,  488,   68,   68,   68,   68,   68,  117,  473,   68,
-
-       68,  476,   68,  489,   68,  484,  485,  487,  496,  492,
-      490,  493,  477,   68,  483,  486,  478,   68,  479,   68,
-      494,   68,  480,  498,  481,  500,  495,   68,  491,  482,
-       68,  497,  499,   68,   68,   68,   68,  501,   68,   68,
-       68,  504,   68,   68,  506,  509,  502,  505,  503,   68,
-       68,  115,   68,   68,  511,   68,  508,  512,  510,   68,
-      507,   68,  514,  516,  513,   68,  515,   68,   68,   68,
-      517,   68,  523,  518,  519,  521,  520,   68,   68,   68,
-      522,   68,  525,  524,   68,   68,   68,   68,   68,   68,
-       68,  529,  530,  531,  536,   68,  533,  534,  528,  526,
-
-      532,   68,   68,  535,  527,   68,   68,  539,   68,   68,
-       68,   68,   68,   68,  545,   68,   68,   68,  541,   68,
-      538,  546,   68,   68,  537,   68,  540,  544,  549,  542,
-      550,  547,  551,   68,   68,   68,  548,  543,   68,  554,
-       68,   68,   68,  552,  553,  557,   68,   68,   68,   68,
-       68,   68,   68,   68,  113,  563,   68,  555,   68,  556,
-       68,  558,  559,  561,   73,  566,  564,  560,  562,   68,
-       68,  573,  565,  569,  567,  570,  571,  568,  574,   68,
-      572,   68,   68,   68,   68,  575,   68,  576,   68,  577,
-      580,  581,   68,  578,   68,   68,   68,  582,  583,   68,
-
-       68,   68,   68,   68,  579,  588,   68,   68,  584,   68,
-       68,   68,   73,  585,  591,  586,   68,  587,  589,  593,
-      590,  597,   68,  598,   68,  592,   68,  594,   68,  596,
-       68,  599,  595,  600,   68,   68,  601,   68,  602,  607,
-      603,   68,  608,  605,   68,  609,  604,   68,  606,   68,
-       68,   68,   68,  613,   68,   68,   68,   73,  610,   68,
-       68,  617,   68,  612,   68,   68,   68,  621,   68,   68,
-      611,  622,   68,   68,  625,  614,  615,  616,   68,   68,
-       68,   68,  618,  620,  627,   68,  624,   68,   68,  619,
-      631,   68,  623,  626,  632,  629,  633,  628,  630,   68,
-
-       68,   68,   68,   68,  639,  640,  634,  638,  635,   68,
-       68,   68,  641,   68,   68,  636,  644,   68,  642,   68,
-      645,   68,  637,  646,   68,  648,  649,   68,   68,   68,
-       68,   68,   68,  643,   68,   68,  647,   68,   68,  657,
-       68,   68,   68,  660,  658,   68,  650,  651,  652,  653,
-      656,  654,   68,  655,  659,  662,   68,  663,  665,  666,
-      667,   68,  661,   68,   68,  664,   68,   68,   68,  668,
-       68,   68,  673,   68,   68,  671,   68,  675,   68,   68,
-       68,   68,  669,  677,   68,   68,  672,   68,   68,  676,
-      679,   68,   68,  670,  674,   68,  684,  683,  685,  678,
-
-       68,  681,  680,   68,   68,   68,  687,  682,  686,  688,
-       68,   68,  691,  690,   68,   68,   68,  689,  696,   68,
-      694,  695,   68,  692,   68,   68,   68,  697,   68,   68,
-      703,   68,   68,   68,  693,   68,  122,   68,   68,   68,
-      711,  702,  698,  701,   68,  699,  700,   68,   68,   68,
-       68,  704,  705,  707,  706,  710,  708,  712,  714,  709,
-       68,  715,  717,  713,  718,   68,   68,   68,   68,  716,
-      719,   68,   68,   68,  724,   68,   68,  727,  728,  720,
-       68,   68,   68,   68,   68,  722,  721,  729,  732,   68,
-      723,  725,  730,   68,  726,   68,   68,   68,  731,   68,
-
-       68,   68,  733,  738,   68,  739,  740,   68,   68,   68,
-      745,  735,  734,  741,  736,   68,   68,  737,   68,   68,
-       68,  744,   68,  743,   68,  748,  749,   68,  746,  750,
-      742,  751,   68,  752,  755,   68,  747,   68,   68,  756,
-       68,  757,   68,  753,  754,   68,  759,  761,  758,   68,
-       68,   68,   68,  763,   68,  760,  764,   68,   68,   68,
-       68,   68,  765,   68,  766,   68,  773,   68,   68,  767,
-       68,   68,   68,   68,  762,  776,   68,  768,  769,  770,
-      775,  771,  777,   68,  779,   68,  783,  774,   68,  772,
-      782,   68,  781,   68,   68,   68,  778,   68,  780,  786,
-
-      785,   68,   68,   68,  787,   68,   68,  795,  784,  791,
-       68,   68,   68,  798,  792,  796,  789,  788,   68,  797,
-       68,  790,   68,  799,  794,  800,   68,  793,   68,   68,
-       68,  804,  802,  806,  801,   68,   68,   68,   68,  808,
-       68,  807,   68,  809,   68,   68,   68,  810,   68,  814,
-      811,  803,   68,  816,  812,   68,   68,  818,  813,   68,
-      815,  817,   68,   68,  820,   68,   68,  821,  822,   68,
-       68,  824,  819,   68,   68,   68,  823,   68,  826,   68,
-      825,   68,   68,  832,  831,  827,  828,   68,  835,   68,
-      829,   68,   68,   68,  838,   68,  834,  830,  837,   68,
-
-      833,   68,   68,  843,  839,   68,  840,   68,   68,   68,
-      844,  847,   68,  841,   68,   68,   68,  836,   68,   68,
-       68,   68,  842,  846,   68,  849,  845,  848,  850,  851,
-      852,   68,  853,   68,  854,   68,   68,  855,   68,  856,
-      859,  857,  860,   68,   68,  861,   68,   68,  863,  858,
-       68,  864,  866,   68,  868,   68,   68,  862,   68,  867,
-      865,   68,  869,  871,   68,   68,   68,   68,  870,  872,
-       68,  874,   68,   68,   68,   68,   68,   68,  880,  873,
-      915,   68,   68,  883,   68,  878,  875,  884,   68,  876,
-      881,  885,   68,  877,  882,  879,   68,  886,  887,   68,
-
-      888,   68,  890,   68,  891,   68,   68,  893,   68,   68,
-       68,  892,  895,   68,   68,  889,  897,   68,   68,  899,
-      898,  901,   68,   68,  903,   68,  904,   68,  894,   68,
-       68,  906,  896,   68,  900,   68,   68,   68,   68,   68,
-      908,   68,  902,  910,  914,  907,   68,   68,  912,   68,
-      913,  120,  911,   68,  918,  905,  917,  909,  919,   68,
-      920,   68,   68,   68,   68,  923,  916,   68,  921,  924,
-      925,   68,   68,  922,   68,   68,  926,  927,  928,   68,
-       68,  932,   68,   68,   68,  931,   68,  929,  933,  935,
-       68,   68,   68,  937,   68,  930,   68,  938,  936,  934,
-
-      939,   68,  940,   68,  941,   68,  942,   68,  943,   68,
-      944,   68,   68,   68,  945,  947,   68,  946,  948,   68,
-       68,  949,  951,   68,   68,  950,   68,  953,   68,   68,
-       68,  958,   68,   68,   68,   68,  952,   68,  954,   68,
-      955,  956,  959,   68,   68,   68,   68,  967,   68,  965,
-      957,  966,  962,   68,  969,  961,   68,  964,   68,   68,
-      960,  963,   68,  968,   68,  970,  975,   68,  976,   68,
-       68,   68,   68,   68,  982,   68,  971,  972,  973,   68,
-       68,   68,  981,  974,  977,  985,   68,   68,   68,  978,
-       68,  979,  980,  987,   68,  983,   68,  988,   68,  984,
-
-       68,   68,   68,   68,   68,  991,  986,  990,  992,  993,
-      989,   68, 1062,   68,  998,   68,  995,  994,  996,  997,
-      999,   68, 1000,   68, 1001,   68,   68,   68,   68,   68,
-       68, 1002, 1004,   68,   68, 1007,   68, 1005,   68, 1003,
-     1011,   68, 1006,   68,   68, 1008,   68,   68,   68, 1009,
-       68,  118, 1012, 1014, 1013,   68, 1015, 1010, 1017,   68,
-       68, 1019,   68, 1016, 1018, 1020, 1021,   68, 1022,   68,
-       68, 1025,   68, 1023, 1026,   68,   68,   68,   68,   68,
-       68, 1027,   68,   68, 1024,   68, 1029, 1032,   68,   68,
-       68, 1028,   68, 1037, 1039,   68, 1031, 1035, 1030,   68,
-
-       68,   68,   68, 1033, 1040,   68,   68,   68, 1041, 1036,
-     1038, 1034, 1045, 1043, 1042,   68, 1046,   68,   68,   68,
-     1051,   68,   68, 1048,   68, 1049, 1047, 1044,   68,   68,
-       68,   68, 1058,   68, 1050, 1055, 1054,   68, 1052, 1060,
-       68,   68, 1059, 1053, 1063,   68, 1064,   68,   68,   68,
-     1057,   68, 1068,   68,   68, 1056, 1069,   68,   68,   68,
-       68, 1061, 1084, 1066, 1071, 1072,   68, 1065, 1080, 1067,
-     1073,   68,   68, 1070, 1074,   68,   68, 1075, 1076,   68,
-       68, 1077, 1078,   68,   68, 1081,   68,   68,   68, 1079,
-     1085,   68, 1082,   68, 1087,   68, 1083, 1086,   68, 1090,
-
-       68, 1091,   68, 1088, 1092,   68,   68,   68, 1094,   68,
-       68, 1097,   68, 1095,   68,   68, 1089,   68, 1093,   68,
-     1102,   68,  117, 1098,  115,  113,   68, 1103, 1103, 1100,
-     1096, 1103, 1099, 1103, 1103, 1103, 1103, 1103, 1101,   40,
-       40,   40,   40,   40,   40,   45,   45,   45,   45,   45,
-       45,   50,   50,   50,   50,   50,   50,   56,   56,   56,
-       56,   56,   56,   61,   61,   61,   61,   61,   61,   71,
-       71,   71,   71,   71,   71,  112,  112, 1103, 1103,  112,
-      112,  114,  114, 1103,  114, 1103,  114,  116, 1103, 1103,
-     1103, 1103,  116,  119,  119, 1103, 1103,  119,  119,  121,
-
-     1103, 1103, 1103, 1103,  121,  123,  123,  123,  123,  123,
-      123,   72,   72,   72,   72,   72,   72,   13, 1103, 1103,
-     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
-     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
-     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
-     1103, 1103, 1103, 1103, 1103, 1103, 1103
+      413,  407,  409,   68,  411,   68,   68,   68,  408,   68,
+       68,   68,  412,   68,  420,  415,   68,  419,   68,   68,
+      418,  426,   68,   68,  414,  416,  417,   68,  429,   68,
+      430,  421,   68,  431,  422,   68,  427,   68,  433,  423,
+
+       68,   68,   68,  434,   68,  424,  425,  428,   68,  437,
+      432,   68,  436,  440,   68,   68,  439,  438,  441,   68,
+       68,  435,   68,   68,   68,  442,   68,   68,  443,  446,
+      444,  448,   68,  447,  449,   68,   68,   68,  451,   68,
+      454,  445,   68,  453,   68,   68,  450,   68,  455,  457,
+      452,   68,   68,  456,   68,   68,  463,   68,  461,   68,
+      459,   68,   68,  464,   68,   68,  458,   68,  460,  462,
+      467,   68,  469,   68,  466,   68,  465,  473,  470,   68,
+      472,   68,   68,  475,   68,  468,  476,  122,   68,   68,
+       68,  471,   68,   68,   68,   68,  477,  490,   68,  474,
+
+       68,  496,   68,  479,  501,   68,  117,  486,  487,  489,
+      495,   68,  478,   68,  488,  485,  480,   68,  481,   68,
+      491,   68,  482,   68,  483,  494,  497,  492,   68,  484,
+      502,  498,   68,   68,   68,   68,  500,  503,   68,   68,
+       68,   68,  499,  506,   68,  493,  505,  511,  507,  508,
+       68,  504,   68,   68,   68,  510,   68,   68,  513,  514,
+      509,  515,   68,  517,  518,  512,  516,   68,  519,   68,
+       68,  520,   68,  521,   68,   68,   68,   68,  524,   68,
+       68,  525,  526,  527,   68,   68,   68,  522,   68,   68,
+       68,  531,  533,  532,  523,  535,   68,  528,  530,   68,
+
+       68,  534,  536,   68,  529,  538,   68,   68,  541,   68,
+       68,  537,   68,   68,   68,   68,  547,  540,  539,  543,
+      548,   68,   68,   68,   68,   68,   68,  542,  549,  546,
+       68,  552,  544,  554,   68,   68,  550,   68,  551,  545,
+       68,   68,   68,   68,   68,  553,  556,  557,  560,   68,
+       68,   68,   68,  555,   68,   68,   68,   68,  561,  558,
+      559,  566,   68,   68,  562,   68,  569,   68,  578,  563,
+      565,  567,  564,  571,  568,   68,  570,  574,   68,  577,
+      573,  575,   68,  572,   68,   68,   68,  580,   68,   68,
+      579,  576,  583,  584,   68,   68,   68,   68,   68,  585,
+
+      586,   68,  581,   68,  587,  591,   68,  582,   68,  588,
+       68,  589,   68,  590,   68,   68,   68,   68,  592,   68,
+      596,  688,  594,   68,  593,  600,   68,  601,   68,  595,
+       68,   68,  597,  603,   68,  599,  602,  604,  605,   68,
+      598,  607,   68,   68,  606,   68,  610,  611,  608,  612,
+      609,   68,   68,   68,   68,   68,  616,   68,   68,   68,
+       68,   68,  613,   68,  614,   68,  615,   68,  621,   68,
+      625,   68,   68,   68,  626,   68,   68,   68,  617,  618,
+      619,  620,  629,   68,   68,  622,  623,  624,  631,   68,
+      628,   68,   68,  630,   68,  632,  635,  627,   68,  636,
+
+       68,   68,  634,  633,   68,  637,   68,  639,  643,  644,
+       68,  642,  638,   68,   68,  646,  640,   68,  645,   68,
+      650,   68,  648,   68,   68,  641,  649,   68,  653,   68,
+      652,   68,   68,   68,   68,   68,   68,   68,  647,   68,
+      661,   68,  651,   68,   68,  662,   68,   68,  654,  658,
+      655,  656,  660,  657,   68,  664,  663,  659,  666,   68,
+       68,  669,   68,  670,  665,  667,   68,  668,   68,  671,
+       68,   68,   68,   68,  672,  677,   68,  673,  675,  674,
+       68,   68,  679,   68,   68,   68,   68,  676,  681,   68,
+       68,  683,   68,   68,  680,   68,   68,  690,   68,   68,
+
+      678,  689,   68,  693,  682,  692,   68,  684,   68,   68,
+      685,  695,  686,  687,   68,  691,   68,  696,   68,   68,
+      701,   68,   68,  699,  700,   68,   68,  697,   68,   68,
+      702,  694,   68,  708,  698,   68,   68,   68,   68,   68,
+      703,   68,   68,  706,   68,  707,  704,   68,  705,   68,
+      713,  717,  716,  714,  712,  709,  710,  722,  711,   68,
+      715,   68,   68,  723,   68,   68,  718,   68,  719,   68,
+      721,  720,   68,   68,   68,  729,   68,   68,  732,  733,
+      725,   68,   68,   68,   68,  724,  727,  726,  734,  737,
+       68,  728,  730,  735,   68,  731,   68,   68,   68,  736,
+
+       68,   68,   68,   68,   68,  743,   68,  744,  745,   68,
+       68,   68,  738,  740,  751,  739,  741,   68,  746,   68,
+      742,  748,  749,  750,   68,   68,   68,  747,   68,  752,
+       68,  754,  755,   68,  758,  756,  757,   68,   68,   68,
+      761,   68,  753,  762,   68,  763,   68,  765,   68,  759,
+      760,  764,   68,  767,   68,   68,  766,  770,   68,  769,
+       68,   68,   68,   68,   68,   68,   68,  771,   68,  772,
+       68,  779,   68,   68,  773,   68,  785,   68,   68,  768,
+       68,  774,  781,  775,  776,  782,  777,   68,  780,  783,
+       68,   68,  778,   68,  789,   68,  788,   68,  784,   68,
+
+      791,   68,  792,  786,  793,   68,  787,  790,   68,   68,
+       68,   68,   68,  801,   68,  797,  115,  804,   68,  798,
+      795,  794,   68,   68,  802,  806,  800,  796,  803,   68,
+       68,   68,  799,   68,   68,  805,  810,  808,   68,  809,
+      812,   68,   68,  807,  816,   68,  813,  814,   68,  815,
+       68,   68,   68,   68,  820,   68,  817,   68,  818,   68,
+      821,   68,  819,  825,   68,  827,  824,   68,   68,  828,
+       68,  822,   68,  823,  829,   68,   68,  831,  826,   68,
+       68,   68,   68,   68,   68,   68,   68,  839,   68,  838,
+      830,  833,  834,  832,  835,   68,  836,  841,  842,   68,
+
+       68,   68,   68,  837,  840,  844,   68,  846,  845,   68,
+       68,  850,   68,   68,  847,   68,   68,  851,   68,  848,
+       68,  843,  854,   68,   68,   68,   68,  858,   68,  853,
+      849,   68,  852,  860,  856,   68,  855,  857,  859,   68,
+       68,  863,   68,  867,   68,  864,   68,  862,  861,   68,
+       68,  866,   68,   68,  870,  868,   68,  871,  873,   68,
+       68,  875,   68,   68,  876,  865,  872,   68,  869,  874,
+       68,  880,   68,   68,   68,  878,  879,   68,  881,  877,
+       68,   68,   68,   68,   68,   68,  887,   68,  890,  891,
+       68,  892,   68,  882,  885,   68,  883,  888,  889,  894,
+
+       68,  884,  886,  895,   68,   68,  897,   68,  893,  898,
+       68,   68,  900,   68,   68,   68,  899,  902,   68,   68,
+       68,  904,   68,  905,  896,   68,  906,  908,   68,   68,
+      910,   68,   68,  901,  911,   68,   68,  903,   68,  913,
+       68,  907,   68,  916,   68,   68,   68,  915,  909,  917,
+       68,  918,  914,   68,  919,  920,  921,  922,  912,   68,
+      926,   68,   68,  925,   68,   68,   68,  927,  924,   68,
+      923,   68,  930,   68,  934,  928,  929,   68,  931,  932,
+       68,  933,  935,   68,   68,   68,   68,  939,   68,   68,
+       68,  938,   68,   68,  940,   68,  945,  943,  942,   68,
+
+       68,  944,  946,   68,  936,  937,  941,  947,   68,  948,
+       68,  949,   68,  950,   68,   68,   68,  954,   68,   68,
+      953,   68,  952,  956,  955,   68,   68,  958,   68,   68,
+      951,  957,   68,   68,   68,   68,   68,  959,  965,   68,
+       68,   68,   68,   68,  961,  962,  963,  960,   68,  966,
+       68,   68,   68,  972,   68,  964,  969,  973,  974,   68,
+       68,  968,  967,  977,  971,   68,  970,   68,  976,  975,
+       68,   68,  982,   68,  983,   68,   68,   68,  978,   68,
+       68,   68,   68,  979,  988,   68,  980,  989,   68,   68,
+      981,  984,  992,   68,  985,  994,   68,  986,   68,  995,
+
+      987,  993,   68,  991,  990,   68,   68,   68,   68,  113,
+       68,  998,  999,   68,  997,   68, 1000,   68, 1002,   73,
+     1003, 1005,   68,   68,  996, 1001, 1006,   68, 1007,   68,
+     1008,   68, 1004,   68,   68, 1010,   68, 1011, 1009,   68,
+       68, 1014,   68,   68,   68, 1012, 1018,   68, 1013,   68,
+       68, 1015,   68,   68,   68, 1021,   68,   73, 1019,   68,
+     1020,   68, 1016, 1017, 1027, 1022, 1023, 1024,   68,   68,
+     1026, 1028,   68,   68, 1025, 1029,   68, 1030, 1032, 1033,
+       68,   68,   68,   68,   68, 1034,   68, 1031,   68,   68,
+       68,   68, 1036,   68, 1039,   68,   68,   68,   68, 1044,
+
+       68, 1035, 1042,   73, 1038, 1037, 1046,   68,   68, 1048,
+     1040,   68, 1047,   68,   68, 1043, 1045, 1041,   68, 1052,
+     1049,   68, 1051,   68, 1053, 1050, 1055, 1054,   68,   68,
+     1058,   68,   68,   68,   68,   68,   68,   68, 1065,   68,
+     1062,   68, 1061,   68, 1057,   68, 1066, 1056, 1059, 1067,
+       68,   68, 1060, 1070,   68,   68, 1064, 1071,   68,   68,
+     1075,   68, 1063, 1068, 1076,   68,   68, 1069,   68,   68,
+     1072, 1073,   68, 1078, 1082, 1074, 1079,   68, 1080,   68,
+     1081,   68, 1083,   68,   68, 1077,   68, 1084, 1085,   68,
+       68,   68, 1087, 1088,   68, 1086, 1089,   68,   68, 1092,
+
+       68,   68, 1091, 1094,   68, 1093,   68,   68, 1097,   68,
+     1098,   68, 1099,   68,   68,   68, 1101, 1090,   68,   68,
+       68, 1095, 1102, 1104,   68, 1096, 1100,   68,   68, 1105,
+       68, 1109,   68,  122,  120,  118,  117,  115,  113, 1103,
+       68, 1110, 1106, 1110, 1107, 1110, 1110, 1108,   40,   40,
+       40,   40,   40,   40,   45,   45,   45,   45,   45,   45,
+       50,   50,   50,   50,   50,   50,   56,   56,   56,   56,
+       56,   56,   61,   61,   61,   61,   61,   61,   71,   71,
+       71,   71,   71,   71,  112,  112, 1110, 1110,  112,  112,
+      114,  114, 1110,  114, 1110,  114,  116, 1110, 1110, 1110,
+
+     1110,  116,  119,  119, 1110, 1110,  119,  119,  121, 1110,
+     1110, 1110, 1110,  121,  123,  123,  123,  123,  123,  123,
+       72,   72,   72,   72,   72,   72,   13, 1110, 1110, 1110,
+     1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
+     1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
+     1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
+     1110, 1110, 1110, 1110, 1110, 1110
     } ;
 
-static yyconst flex_int16_t yy_chk[2258] =
+static yyconst flex_int16_t yy_chk[2267] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1054,7 +1057,7 @@ static yyconst flex_int16_t yy_chk[2258] =
         9,   24,   33,    6,    7,    7,    7,    7,    9,    7,
        10,   10,   10,   26,   26,    7,    8,    8,    8,    8,
        10,    8,   26,   33,  110,   24,   25,    8,   11,   11,
-       11,   11,   11,   11, 1109,   20,  110,   20,   20,   11,
+       11,   11,   11,   11, 1116,   20,  110,   20,   20,   11,
 
        20,   25,   66,   27,   28,   20,   23,   27,   11,   12,
        12,   12,   12,   12,   12,   23,   66,   27,   23,   28,
@@ -1074,7 +1077,7 @@ static yyconst flex_int16_t yy_chk[2258] =
        94,   88,   95,   96,   87,   97,   98,   94,   99,   97,
       100,  102,  101,  103,  107,   95,  104,   99,  105,  105,
       106,  108,  109,   96,   98,  101,  102,  109,  111,  136,
-      100,  475,  103,  136,  104,  107,  113,  113,  106,  105,
+      100,  476,  103,  136,  104,  107,  113,  113,  106,  105,
       115,  120,  120,  115,  108,  117,  111,  117,  117,  122,
       117,  122,  122,  127,  122,  123,  123,  123,  123,  125,
 
@@ -1115,9 +1118,9 @@ static yyconst flex_int16_t yy_chk[2258] =
       264,  274,  266,  263,  275,  276,  274,  270,  277,  280,
       278,  279,  283,  275,  278,  272,  279,  281,  281,  273,
       282,  285,  280,  277,  276,  284,  288,  283,  284,  286,
-      286,  288,  282,  741,  285,  287,  287,  289,  289,  290,
+      286,  288,  282,  746,  285,  287,  287,  289,  289,  290,
       290,  291,  292,  297,  293,  294,  291,  292,  293,  295,
-      294,  296,  298,  295,  299,  741,  296,  298,  300,  301,
+      294,  296,  298,  295,  299,  746,  296,  298,  300,  301,
       301,  300,  302,  297,  305,  119,  300,  302,  299,  303,
       300,  304,  303,  306,  307,  304,  308,  305,  306,  307,
       309,  310,  308,  309,  310,  311,  312,  313,  314,  315,
@@ -1129,170 +1132,171 @@ static yyconst flex_int16_t yy_chk[2258] =
       337,  118,  334,  335,  338,  333,  330,  334,  335,  332,
       336,  338,  339,  331,  340,  336,  342,  341,  337,  342,
       345,  339,  341,  343,  343,  345,  346,  347,  340,  351,
-      348,  354,  355,  356,  358,  347,  355,  359,  356,  358,
-      354,  364,  360,  362,  346,  348,  351,  357,  361,  361,
-      362,  357,  363,  363,  357,  359,  364,  365,  365,  357,
-
-      366,  367,  368,  366,  370,  357,  357,  360,  369,  369,
-      368,  371,  372,  372,  373,  375,  371,  373,  374,  370,
-      376,  367,  377,  375,  374,  378,  379,  382,  376,  381,
-      378,  380,  380,  379,  381,  384,  385,  391,  384,  389,
-      377,  386,  386,  392,  387,  390,  382,  387,  389,  390,
-      385,  393,  392,  394,  395,  387,  391,  396,  398,  394,
-      397,  399,  396,  401,  397,  393,  400,  404,  395,  402,
-      402,  400,  403,  399,  405,  403,  406,  398,  407,  408,
-      408,  406,  409,  409,  401,  404,  410,  405,  411,  413,
-      414,  418,  415,  417,  416,  420,  418,  116,  407,  421,
-
-      424,  410,  419,  419,  426,  414,  415,  417,  424,  420,
-      419,  421,  411,  412,  413,  416,  412,  425,  412,  422,
-      422,  423,  412,  426,  412,  429,  423,  431,  419,  412,
-      429,  425,  427,  427,  430,  432,  433,  430,  434,  435,
-      436,  433,  437,  440,  435,  438,  431,  434,  432,  441,
-      438,  114,  442,  444,  441,  451,  437,  442,  440,  443,
-      436,  450,  444,  446,  443,  445,  445,  453,  446,  448,
-      448,  449,  453,  448,  449,  451,  450,  452,  454,  455,
-      452,  456,  455,  454,  457,  458,  459,  460,  465,  462,
-      461,  459,  460,  461,  466,  466,  463,  464,  458,  456,
-
-      462,  463,  464,  465,  457,  467,  468,  469,  470,  471,
-      472,  469,  473,  476,  477,  482,  478,  479,  471,  477,
-      468,  478,  480,  481,  467,  484,  470,  476,  481,  472,
-      482,  479,  483,  483,  486,  485,  480,  473,  487,  486,
-      488,  489,  493,  484,  485,  489,  490,  491,  492,  495,
-      494,  496,  497,  502,  112,  495,  498,  487,  505,  488,
-      500,  490,  491,  493,   74,  498,  496,  492,  494,  501,
-      503,  505,  497,  502,  500,  503,  504,  501,  506,  510,
-      504,  504,  508,  506,  507,  507,  511,  508,  509,  509,
-      512,  513,  514,  510,  515,  512,  513,  514,  515,  516,
-
-      520,  517,  519,  518,  511,  517,  521,  524,  516,  523,
-      525,  522,   72,  516,  520,  516,  530,  516,  518,  522,
-      519,  526,  526,  527,  527,  521,  528,  523,  533,  525,
-      531,  528,  524,  529,  529,  532,  530,  534,  531,  537,
-      532,  535,  538,  534,  537,  539,  533,  538,  535,  540,
-      539,  541,  542,  543,  543,  544,  545,   70,  540,  546,
-      547,  547,  548,  542,  549,  550,  553,  552,  554,  555,
-      541,  552,  552,  556,  555,  544,  545,  546,  558,  560,
-      557,  559,  548,  550,  557,  561,  554,  562,  564,  549,
-      561,  563,  553,  556,  562,  559,  563,  558,  560,  565,
-
-      566,  567,  568,   67,  569,  570,  564,  568,  565,  569,
-      570,  571,  571,  573,  574,  566,  575,  577,  573,  578,
-      575,  575,  567,  576,  576,  578,  579,  580,  581,  582,
-      583,  579,  585,  574,  590,  586,  577,  584,  587,  587,
-      588,  589,  591,  590,  588,  594,  580,  581,  582,  583,
-      586,  584,  593,  585,  589,  592,  592,  593,  595,  596,
-      599,  599,  591,  595,  596,  594,  601,  602,  603,  601,
-      604,  605,  606,  606,  607,  604,  608,  608,  609,  610,
-      611,  615,  602,  610,  614,  612,  605,  616,  620,  609,
-      612,  618,  624,  603,  607,  617,  618,  617,  619,  611,
-
-      621,  615,  614,  619,  623,  627,  621,  616,  620,  623,
-      625,  626,  626,  625,  628,  629,  630,  624,  631,  631,
-      629,  630,  632,  627,  633,  634,  635,  632,  637,  636,
-      638,  639,  640,  641,  628,  638,   61,  647,  642,  644,
-      647,  637,  633,  636,  649,  634,  635,  643,  648,  650,
-      654,  639,  640,  642,  641,  644,  643,  648,  650,  643,
-      651,  650,  652,  649,  653,  653,  655,  652,  656,  651,
-      654,  657,  658,  659,  659,  660,  661,  663,  664,  655,
-      668,  665,  663,  664,  669,  657,  656,  665,  668,  666,
-      658,  660,  666,  670,  661,  671,  672,  674,  666,  675,
-
-      676,  677,  669,  675,  678,  676,  677,  679,  680,  681,
-      682,  671,  670,  678,  672,  682,  683,  674,  684,  685,
-      687,  681,  690,  680,  691,  685,  686,  686,  683,  687,
-      679,  688,  688,  689,  692,  692,  684,  698,  689,  693,
-      693,  694,  694,  690,  691,  695,  697,  699,  695,  700,
-      703,  697,  699,  701,  701,  698,  702,  704,  705,  706,
-      707,  702,  703,  708,  703,  709,  709,  710,  712,  703,
-      714,  711,  716,  713,  700,  712,  717,  704,  705,  706,
-      711,  707,  713,  715,  715,  719,  720,  710,  721,  708,
-      719,  720,  717,  722,  723,  724,  714,  725,  716,  723,
-
-      722,  726,  727,  728,  724,  729,  730,  732,  721,  728,
-      731,  735,  732,  734,  729,  733,  726,  725,  734,  733,
-      733,  727,  737,  735,  731,  736,  739,  730,  738,  743,
-      736,  740,  738,  742,  737,  753,  740,  745,  742,  744,
-      744,  743,  746,  745,  747,  748,  750,  746,  752,  752,
-      747,  739,  754,  753,  748,  759,  764,  758,  750,  766,
-      752,  754,  758,  760,  760,  761,  767,  761,  762,  762,
-      765,  765,  759,  768,  769,  770,  764,  771,  767,  772,
-      766,  773,  774,  773,  772,  768,  769,  775,  776,  776,
-      770,  777,  779,  778,  779,  782,  775,  771,  778,  780,
-
-      774,  781,  783,  784,  780,  785,  781,  786,  784,  787,
-      785,  788,  788,  782,  794,  789,  790,  777,  792,  793,
-      791,  795,  783,  787,  799,  790,  786,  789,  790,  791,
-      792,  800,  793,  796,  794,  798,  802,  795,  803,  796,
-      800,  798,  801,  801,  804,  802,  805,  806,  804,  799,
-      809,  805,  807,  807,  810,  810,  812,  803,  813,  809,
-      806,  811,  811,  813,  815,  814,  816,  817,  812,  814,
-      818,  816,  819,  820,  821,  823,  859,  824,  823,  815,
-      859,  825,  826,  826,  829,  820,  817,  827,  827,  818,
-      824,  828,  828,  819,  825,  821,  832,  829,  830,  830,
-
-      831,  831,  833,  833,  834,  834,  836,  837,  837,  838,
-      841,  836,  839,  839,  840,  832,  841,  842,  843,  843,
-      842,  844,  844,  845,  846,  846,  848,  848,  838,  849,
-      850,  850,  840,  851,  843,  852,  853,  855,  854,  856,
-      852,  857,  845,  854,  858,  851,  861,  862,  856,  858,
-      857,   56,  855,  863,  863,  849,  862,  853,  864,  865,
-      865,  867,  869,  864,  870,  869,  861,  875,  865,  870,
-      871,  871,  872,  867,  873,  876,  872,  873,  874,  874,
-      877,  878,  879,  880,  881,  877,  878,  875,  879,  881,
-      882,  883,  899,  883,  898,  876,  886,  886,  882,  880,
-
-      889,  889,  892,  892,  894,  894,  896,  897,  897,  910,
-      898,  896,  900,  905,  899,  902,  902,  900,  905,  906,
-      907,  906,  908,  908,  909,  907,  911,  910,  912,  913,
-      914,  915,  915,  916,  917,  918,  909,  920,  911,  919,
-      912,  913,  916,  921,  922,  926,  923,  924,  924,  922,
-      914,  923,  919,  927,  927,  918,  929,  921,  930,  931,
-      917,  920,  932,  926,  933,  929,  934,  934,  935,  936,
-      937,  938,  942,  935,  944,  944,  930,  931,  932,  943,
-      945,  946,  943,  933,  936,  948,  948,  949,  953,  937,
-     1042,  938,  942,  950,  950,  945,  952,  952,  954,  946,
-
-      955,  957,  959,  956,  962,  955,  949,  954,  956,  957,
-      953,  960, 1042,  961,  963,  963,  960,  959,  961,  962,
-      964,  964,  965,  965,  966,  966,  968,  969,  971,  970,
-      976,  968,  970,  972,  973,  973,  974,  971,  977,  969,
-      978,  978,  972,  979,  988,  974,  980,  983,  981,  976,
-      984,   51,  979,  981,  980,  993,  983,  977,  986,  986,
-      989,  989,  990,  984,  988,  990,  991,  991,  992,  992,
-      994,  995, 1002,  993,  996,  996,  995,  997, 1003, 1004,
-     1005,  997, 1006, 1007,  994, 1008, 1003, 1006, 1009, 1010,
-     1012, 1002, 1013, 1012, 1014, 1014, 1005, 1009, 1004, 1016,
-
-     1015, 1019, 1020, 1007, 1015, 1018, 1028, 1023, 1016, 1010,
-     1013, 1008, 1023, 1019, 1018, 1024, 1024, 1025, 1027, 1029,
-     1030, 1030, 1031, 1027, 1032, 1028, 1025, 1020, 1033, 1035,
-     1034, 1036, 1037, 1037, 1029, 1034, 1033, 1038, 1031, 1040,
-     1040, 1041, 1038, 1032, 1043, 1043, 1044, 1044, 1045, 1047,
-     1036, 1046, 1048, 1048, 1050, 1035, 1049, 1049, 1071, 1052,
-     1065, 1041, 1071, 1046, 1052, 1053, 1053, 1045, 1065, 1047,
-     1054, 1054, 1056, 1050, 1055, 1055, 1070, 1056, 1057, 1057,
-     1059, 1059, 1061, 1061, 1062, 1066, 1066, 1067, 1080, 1062,
-     1075, 1075, 1067, 1077, 1079, 1079, 1070, 1077, 1082, 1083,
-
-     1083, 1084, 1084, 1080, 1086, 1086, 1088, 1089, 1089, 1093,
-     1094, 1095, 1095, 1093, 1096, 1099, 1082, 1098, 1088, 1100,
-     1101, 1101,   50, 1096,   45,   40,   14,   13,    0, 1099,
-     1094,    0, 1098,    0,    0,    0,    0,    0, 1100, 1104,
-     1104, 1104, 1104, 1104, 1104, 1105, 1105, 1105, 1105, 1105,
-     1105, 1106, 1106, 1106, 1106, 1106, 1106, 1107, 1107, 1107,
-     1107, 1107, 1107, 1108, 1108, 1108, 1108, 1108, 1108, 1110,
-     1110, 1110, 1110, 1110, 1110, 1111, 1111,    0,    0, 1111,
-     1111, 1112, 1112,    0, 1112,    0, 1112, 1113,    0,    0,
-        0,    0, 1113, 1114, 1114,    0,    0, 1114, 1114, 1115,
-
-        0,    0,    0,    0, 1115, 1116, 1116, 1116, 1116, 1116,
-     1116, 1117, 1117, 1117, 1117, 1117, 1117, 1103, 1103, 1103,
-     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
-     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
-     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
-     1103, 1103, 1103, 1103, 1103, 1103, 1103
+      348,  354,  343,  355,  356,  347,  358,  355,  359,  356,
+      354,  358,  360,  362,  346,  348,  351,  357,  361,  361,
+      362,  357,  363,  363,  357,  364,  359,  365,  365,  357,
+
+      366,  367,  370,  366,  368,  357,  357,  360,  369,  369,
+      364,  371,  368,  372,  372,  373,  371,  370,  373,  374,
+      375,  367,  376,  377,  378,  374,  379,  382,  375,  378,
+      376,  380,  380,  379,  381,  384,  385,  387,  384,  381,
+      387,  377,  386,  386,  389,  390,  382,  391,  387,  390,
+      385,  392,  394,  389,  393,  395,  396,  398,  394,  397,
+      392,  396,  399,  397,  401,  400,  391,  405,  393,  395,
+      400,  402,  402,  404,  399,  403,  398,  406,  403,  407,
+      405,  410,  406,  408,  408,  401,  409,  409,  411,  412,
+      414,  404,  415,  417,  416,  418,  410,  419,  422,  407,
+
+      423,  423,  419,  412,  428,  428,  116,  415,  416,  418,
+      422,  421,  411,  413,  417,  414,  413,  427,  413,  420,
+      420,  424,  413,  425,  413,  421,  424,  420,  426,  413,
+      430,  425,  432,  433,  431,  430,  427,  431,  434,  435,
+      437,  438,  426,  434,  436,  420,  433,  439,  435,  436,
+      441,  432,  439,  442,  443,  438,  444,  445,  442,  443,
+      437,  444,  446,  446,  447,  441,  445,  449,  449,  447,
+      450,  449,  451,  450,  452,  453,  454,  455,  453,  457,
+      456,  454,  455,  456,  458,  459,  460,  451,  461,  462,
+      463,  460,  462,  461,  452,  464,  466,  457,  459,  468,
+
+      464,  463,  465,  469,  458,  467,  467,  465,  470,  471,
+      472,  466,  470,  473,  474,  477,  478,  469,  468,  472,
+      479,  478,  481,  480,  482,  479,  483,  471,  480,  477,
+      484,  483,  473,  485,  485,  486,  481,  487,  482,  474,
+      489,  490,  488,  492,  491,  484,  487,  488,  491,  493,
+      494,  495,  496,  486,  499,  497,  498,  500,  492,  489,
+      490,  497,  502,  504,  493,  503,  500,  509,  509,  494,
+      496,  498,  495,  503,  499,  505,  502,  506,  507,  508,
+      505,  506,  506,  504,  508,  510,  511,  511,  512,  513,
+      510,  507,  514,  515,  516,  518,  517,  514,  515,  516,
+
+      517,  519,  512,  520,  518,  519,  521,  513,  522,  518,
+      523,  518,  524,  518,  525,  526,  527,  532,  520,  621,
+      524,  621,  522,  535,  521,  528,  528,  529,  529,  523,
+      533,  530,  525,  531,  531,  527,  530,  532,  533,  534,
+      526,  535,  536,  537,  534,  543,  539,  540,  536,  541,
+      537,  539,  540,  542,  541,  544,  545,  545,  546,  547,
+      548,  552,  542,  549,  543,  551,  544,  550,  550,  553,
+      555,  556,  557,  559,  555,  555,  561,  558,  546,  547,
+      548,  549,  558,  563,  560,  551,  552,  553,  560,  562,
+      557,  564,  565,  559,  567,  561,  564,  556,  568,  565,
+
+      566,  569,  563,  562,  570,  566,  571,  568,  572,  573,
+      576,  571,  567,  572,  573,  576,  569,  574,  574,  577,
+      579,  579,  578,  580,  581,  570,  578,  578,  582,  583,
+      581,  584,  585,  582,  586,  587,  588,  589,  577,  590,
+      590,  591,  580,  592,  594,  591,  593,  597,  583,  587,
+      584,  585,  589,  586,  606,  593,  592,  588,  595,  595,
+      596,  598,  605,  599,  594,  596,  598,  597,  599,  602,
+      602,  604,  608,  607,  604,  609,  609,  605,  607,  606,
+      610,  611,  611,  612,  613,  614,  615,  608,  613,  617,
+      618,  615,  619,  620,  612,  624,  622,  623,  627,  625,
+
+      610,  622,  623,  627,  614,  625,  628,  617,  629,  631,
+      618,  629,  619,  620,  632,  624,  630,  630,  633,  634,
+      635,  635,  637,  633,  634,  636,  638,  631,  639,  640,
+      636,  628,  641,  642,  632,  643,  644,  645,  642,  646,
+      637,  647,  652,  640,  648,  641,  638,  653,  639,  651,
+      647,  652,  651,  647,  646,  643,  644,  656,  645,  654,
+      648,  655,  656,  657,  657,  658,  653,  659,  654,  660,
+      655,  654,  661,  662,  663,  663,  664,  665,  667,  668,
+      659,  672,  669,  667,  668,  658,  661,  660,  669,  672,
+      670,  662,  664,  670,  673,  665,  674,  675,  676,  670,
+
+      678,  679,  680,  681,  683,  679,  684,  680,  681,  682,
+      685,  686,  673,  675,  687,  674,  676,  688,  682,  687,
+      678,  684,  685,  686,  689,  690,  692,  683,  695,  688,
+      696,  690,  691,  691,  694,  692,  693,  693,  703,  694,
+      697,  697,  689,  698,  698,  699,  699,  702,  700,  695,
+      696,  700,  702,  704,  705,  708,  703,  707,  704,  706,
+      706,  709,  707,  710,  711,  712,  713,  708,  715,  708,
+      714,  714,  719,  716,  708,  720,  720,  721,  717,  705,
+      718,  709,  716,  710,  711,  717,  712,  726,  715,  718,
+      722,  724,  713,  727,  725,  729,  724,  728,  719,  725,
+
+      727,  730,  728,  721,  729,  731,  722,  726,  732,  733,
+      734,  735,  736,  737,  744,  733,  114,  739,  737,  734,
+      731,  730,  739,  740,  738,  741,  736,  732,  738,  738,
+      741,  742,  735,  743,  748,  740,  745,  743,  751,  744,
+      747,  745,  756,  742,  751,  747,  748,  749,  749,  750,
+      750,  752,  753,  754,  756,  759,  752,  760,  753,  758,
+      758,  765,  754,  764,  766,  766,  760,  767,  764,  767,
+      770,  758,  772,  759,  768,  768,  771,  771,  765,  773,
+      774,  776,  775,  777,  778,  779,  780,  779,  781,  778,
+      770,  773,  774,  772,  775,  783,  776,  781,  782,  782,
+
+      784,  788,  786,  777,  780,  784,  785,  786,  785,  787,
+      789,  790,  791,  792,  787,  793,  790,  791,  797,  788,
+      799,  783,  794,  794,  795,  796,  798,  797,  800,  793,
+      789,  801,  792,  799,  796,  802,  795,  796,  798,  804,
+      805,  802,  806,  807,  807,  804,  808,  801,  800,  809,
+      810,  806,  811,  812,  810,  808,  822,  811,  813,  813,
+      816,  817,  817,  818,  818,  805,  812,  819,  809,  816,
+      820,  822,  821,  823,  824,  820,  821,  825,  823,  819,
+      826,  828,  827,  830,  831,  832,  830,  833,  833,  834,
+      834,  835,  835,  824,  827,  836,  825,  831,  832,  837,
+
+      837,  826,  828,  838,  838,  839,  840,  840,  836,  841,
+      841,  843,  844,  844,  845,  848,  843,  846,  846,  847,
+      849,  848,  860,  849,  839,  850,  850,  851,  851,  852,
+      853,  853,  856,  845,  855,  855,  862,  847,  857,  857,
+      858,  850,  859,  860,  861,  863,  864,  859,  852,  861,
+      868,  862,  858,  866,  863,  864,  865,  866,  856,  869,
+      871,  865,  870,  870,  874,  871,  872,  872,  869,  876,
+      868,  880,  876,  877,  880,  872,  874,  879,  877,  878,
+      878,  879,  881,  881,  882,  883,  884,  885,  886,  889,
+      887,  884,  885,  888,  886,  893,  893,  889,  888,  890,
+
+      906,  890,  896,  896,  882,  883,  887,  899,  899,  901,
+      901,  903,  904,  904,  905,  907,  903,  909,  909,  912,
+      907,  913,  906,  913,  912,  916,  914,  915,  915,  917,
+      905,  914,  918,  919,  920,  921,  924,  916,  922,  922,
+      923,  925,  927,  926,  918,  919,  920,  917,  929,  923,
+      928,  933,  930,  929,  936,  921,  926,  930,  931,  931,
+      937,  925,  924,  936,  928,  938,  927,  934,  934,  933,
+      939,  940,  941,  941,  942,  944,  943,  945,  937,  942,
+      949,  950,  956,  938,  950,  953,  939,  951,  951,  952,
+      940,  943,  955,  955,  944,  957,  957,  945,  959,  959,
+
+      949,  956,  960,  953,  952,  961,  962,  963,  964,  112,
+      966,  962,  963,  967,  961,  968,  964,  969,  967,   74,
+      968,  970,  970,  976,  960,  966,  971,  971,  972,  972,
+      973,  973,  969,  975,  977,  976,  978,  977,  975,  979,
+      980,  980,  981,  983,  984,  978,  985,  985,  979,  986,
+      988,  981,  987,  991,  995,  988,  990,   72,  986, 1000,
+      987,  997,  983,  984,  997,  990,  991,  993,  993,  996,
+      996,  998,  998, 1001,  995,  999,  999, 1000, 1002, 1003,
+     1003, 1004, 1009, 1002, 1010, 1004, 1011, 1001, 1012, 1013,
+     1014, 1015, 1010, 1016, 1013, 1017, 1019, 1027, 1020, 1019,
+
+     1023, 1009, 1016,   70, 1012, 1011, 1021, 1021, 1022, 1023,
+     1014, 1025, 1022, 1026, 1030, 1017, 1020, 1015, 1032, 1030,
+     1025, 1034, 1027, 1031, 1031, 1026, 1034, 1032, 1035, 1036,
+     1037, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1044,
+     1041, 1045, 1040, 1048, 1036, 1049, 1045, 1035, 1038, 1047,
+     1047, 1052, 1039, 1050, 1050, 1054, 1043, 1051, 1051, 1053,
+     1055, 1055, 1042, 1048, 1056, 1056, 1057, 1049, 1059, 1063,
+     1052, 1053,   67, 1059, 1063, 1054, 1060, 1060, 1061, 1061,
+     1062, 1062, 1064, 1064, 1072, 1057, 1066, 1066, 1068, 1068,
+     1069, 1074, 1072, 1073, 1073, 1069, 1074, 1077, 1078, 1082,
+
+     1082, 1084, 1078, 1086, 1086, 1084, 1087, 1089, 1090, 1090,
+     1091, 1091, 1093, 1093, 1095, 1096, 1096, 1077, 1100, 1101,
+     1103, 1087, 1100, 1102, 1102, 1089, 1095, 1105, 1107, 1103,
+     1106, 1108, 1108,   61,   56,   51,   50,   45,   40, 1101,
+       14,   13, 1105,    0, 1106,    0,    0, 1107, 1111, 1111,
+     1111, 1111, 1111, 1111, 1112, 1112, 1112, 1112, 1112, 1112,
+     1113, 1113, 1113, 1113, 1113, 1113, 1114, 1114, 1114, 1114,
+     1114, 1114, 1115, 1115, 1115, 1115, 1115, 1115, 1117, 1117,
+     1117, 1117, 1117, 1117, 1118, 1118,    0,    0, 1118, 1118,
+     1119, 1119,    0, 1119,    0, 1119, 1120,    0,    0,    0,
+
+        0, 1120, 1121, 1121,    0,    0, 1121, 1121, 1122,    0,
+        0,    0,    0, 1122, 1123, 1123, 1123, 1123, 1123, 1123,
+     1124, 1124, 1124, 1124, 1124, 1124, 1110, 1110, 1110, 1110,
+     1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
+     1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
+     1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
+     1110, 1110, 1110, 1110, 1110, 1110
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1416,7 +1420,7 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 1418 "<stdout>"
+#line 1422 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -1603,7 +1607,7 @@ YY_DECL
     
 #line 120 "util/configlexer.lex"
 
-#line 1605 "<stdout>"
+#line 1609 "<stdout>"
 
        if ( !(yy_init) )
                {
@@ -1662,13 +1666,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 >= 1104 )
+                               if ( yy_current_state >= 1111 )
                                        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] != 2218 );
+               while ( yy_base[yy_current_state] != 2227 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1855,374 +1859,379 @@ YY_RULE_SETUP
 case 32:
 YY_RULE_SETUP
 #line 154 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_HOST_TTL) }
+{ YDVAR(1, VAR_CACHE_MIN_TTL) }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 155 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_LAME_TTL) }
+{ YDVAR(1, VAR_INFRA_HOST_TTL) }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 156 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
+{ YDVAR(1, VAR_INFRA_LAME_TTL) }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 157 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
+{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 158 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
+{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 159 "util/configlexer.lex"
-{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
+{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 160 "util/configlexer.lex"
-{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
+{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 161 "util/configlexer.lex"
-{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
+{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 162 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
+{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 163 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
+{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 164 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_GLUE) }
+{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 165 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_DNNSEC_STRIPPED) }
+{ YDVAR(1, VAR_HARDEN_GLUE) }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 166 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
+{ YDVAR(1, VAR_HARDEN_DNNSEC_STRIPPED) }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 167 "util/configlexer.lex"
-{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
+{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 168 "util/configlexer.lex"
-{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
+{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 169 "util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
+{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 170 "util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
+{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
 #line 171 "util/configlexer.lex"
-{ YDVAR(0, VAR_STUB_ZONE) }
+{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 172 "util/configlexer.lex"
-{ YDVAR(1, VAR_NAME) }
+{ YDVAR(0, VAR_STUB_ZONE) }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 173 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_ADDR) }
+{ YDVAR(1, VAR_NAME) }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 174 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_HOST) }
+{ YDVAR(1, VAR_STUB_ADDR) }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 175 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_PRIME) }
+{ YDVAR(1, VAR_STUB_HOST) }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 176 "util/configlexer.lex"
-{ YDVAR(0, VAR_FORWARD_ZONE) }
+{ YDVAR(1, VAR_STUB_PRIME) }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 177 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_ADDR) }
+{ YDVAR(0, VAR_FORWARD_ZONE) }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 178 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_HOST) }
+{ YDVAR(1, VAR_FORWARD_ADDR) }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 179 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
+{ YDVAR(1, VAR_FORWARD_HOST) }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 180 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 181 "util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 182 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_IDENTITY) }
+{ YDVAR(2, VAR_ACCESS_CONTROL) }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 183 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_VERSION) }
+{ YDVAR(1, VAR_HIDE_IDENTITY) }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 184 "util/configlexer.lex"
-{ YDVAR(1, VAR_IDENTITY) }
+{ YDVAR(1, VAR_HIDE_VERSION) }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 185 "util/configlexer.lex"
-{ YDVAR(1, VAR_VERSION) }
+{ YDVAR(1, VAR_IDENTITY) }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 186 "util/configlexer.lex"
-{ YDVAR(1, VAR_MODULE_CONF) }
+{ YDVAR(1, VAR_VERSION) }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 187 "util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR) }
+{ YDVAR(1, VAR_MODULE_CONF) }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 188 "util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR) }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 189 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 190 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 191 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR) }
+{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 192 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR) }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
 #line 193 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
+{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
 #line 194 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 195 "util/configlexer.lex"
-{ YDVAR(1, VAR_BOGUS_TTL) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
 #line 196 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+{ YDVAR(1, VAR_BOGUS_TTL) }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
 #line 197 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
 #line 198 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
 #line 199 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
 #line 200 "util/configlexer.lex"
-{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
 #line 201 "util/configlexer.lex"
-{ 
-                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 203 "util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSLOG) }
+#line 202 "util/configlexer.lex"
+{ 
+                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 204 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TIME_ASCII) }
+{ YDVAR(1, VAR_USE_SYSLOG) }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
 #line 205 "util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE) }
+{ YDVAR(1, VAR_LOG_TIME_ASCII) }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
 #line 206 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA) }
+{ YDVAR(2, VAR_LOCAL_ZONE) }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
 #line 207 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
+{ YDVAR(1, VAR_LOCAL_DATA) }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
 #line 208 "util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
+{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
 #line 209 "util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 210 "util/configlexer.lex"
-{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
 #line 211 "util/configlexer.lex"
-{ YDVAR(0, VAR_REMOTE_CONTROL) }
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 212 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_ENABLE) }
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 213 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_INTERFACE) }
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 214 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_PORT) }
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 215 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_KEY_FILE) }
+{ YDVAR(1, VAR_CONTROL_PORT) }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
 #line 216 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_CERT_FILE) }
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 217 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 218 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 219 "util/configlexer.lex"
-{ YDVAR(1, VAR_PYTHON_SCRIPT) }
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 220 "util/configlexer.lex"
-{ YDVAR(0, VAR_PYTHON) }
+{ YDVAR(1, VAR_PYTHON_SCRIPT) }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
 #line 221 "util/configlexer.lex"
-{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+{ YDVAR(0, VAR_PYTHON) }
        YY_BREAK
 case 99:
-/* rule 99 can match eol */
 YY_RULE_SETUP
 #line 222 "util/configlexer.lex"
+{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+       YY_BREAK
+case 100:
+/* rule 100 can match eol */
+YY_RULE_SETUP
+#line 223 "util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++; }
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
-case 100:
+case 101:
 YY_RULE_SETUP
-#line 225 "util/configlexer.lex"
+#line 226 "util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 226 "util/configlexer.lex"
+#line 227 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 101:
+case 102:
 YY_RULE_SETUP
-#line 231 "util/configlexer.lex"
+#line 232 "util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 102:
-/* rule 102 can match eol */
+case 103:
+/* rule 103 can match eol */
 YY_RULE_SETUP
-#line 232 "util/configlexer.lex"
+#line 233 "util/configlexer.lex"
 { yyerror("newline inside quoted string, no end \""); 
                          cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 103:
+case 104:
 YY_RULE_SETUP
-#line 234 "util/configlexer.lex"
+#line 235 "util/configlexer.lex"
 {
         LEXOUT(("QE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -2235,34 +2244,34 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Single Quoted strings. Strip leading and ending quotes */
-case 104:
+case 105:
 YY_RULE_SETUP
-#line 246 "util/configlexer.lex"
+#line 247 "util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 247 "util/configlexer.lex"
+#line 248 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 105:
+case 106:
 YY_RULE_SETUP
-#line 252 "util/configlexer.lex"
+#line 253 "util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 106:
-/* rule 106 can match eol */
+case 107:
+/* rule 107 can match eol */
 YY_RULE_SETUP
-#line 253 "util/configlexer.lex"
+#line 254 "util/configlexer.lex"
 { yyerror("newline inside quoted string, no end '"); 
                             cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 107:
+case 108:
 YY_RULE_SETUP
-#line 255 "util/configlexer.lex"
+#line 256 "util/configlexer.lex"
 {
         LEXOUT(("SQE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -2275,38 +2284,38 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* include: directive */
-case 108:
+case 109:
 YY_RULE_SETUP
-#line 267 "util/configlexer.lex"
+#line 268 "util/configlexer.lex"
 { 
        LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 269 "util/configlexer.lex"
+#line 270 "util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 109:
-YY_RULE_SETUP
-#line 273 "util/configlexer.lex"
-{ LEXOUT(("ISP ")); /* ignore */ }
-       YY_BREAK
 case 110:
-/* rule 110 can match eol */
 YY_RULE_SETUP
 #line 274 "util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++;}
+{ LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
 case 111:
+/* rule 111 can match eol */
 YY_RULE_SETUP
 #line 275 "util/configlexer.lex"
-{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+{ LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
 case 112:
 YY_RULE_SETUP
 #line 276 "util/configlexer.lex"
+{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+       YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 277 "util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include(yytext);
@@ -2314,27 +2323,27 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 281 "util/configlexer.lex"
+#line 282 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 113:
+case 114:
 YY_RULE_SETUP
-#line 285 "util/configlexer.lex"
+#line 286 "util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 114:
-/* rule 114 can match eol */
+case 115:
+/* rule 115 can match eol */
 YY_RULE_SETUP
-#line 286 "util/configlexer.lex"
+#line 287 "util/configlexer.lex"
 { yyerror("newline before \" in include name"); 
                                  cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
-case 115:
+case 116:
 YY_RULE_SETUP
-#line 288 "util/configlexer.lex"
+#line 289 "util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -2344,7 +2353,7 @@ YY_RULE_SETUP
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(val):
-#line 294 "util/configlexer.lex"
+#line 295 "util/configlexer.lex"
 {
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
        if (config_include_stack_ptr == 0) {
@@ -2355,33 +2364,33 @@ case YY_STATE_EOF(val):
        }
 }
        YY_BREAK
-case 116:
+case 117:
 YY_RULE_SETUP
-#line 304 "util/configlexer.lex"
+#line 305 "util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
                        if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING_ARG; }
        YY_BREAK
-case 117:
+case 118:
 YY_RULE_SETUP
-#line 308 "util/configlexer.lex"
+#line 309 "util/configlexer.lex"
 {
        ub_c_error_msg("unknown keyword '%s'", yytext);
        }
        YY_BREAK
-case 118:
+case 119:
 YY_RULE_SETUP
-#line 312 "util/configlexer.lex"
+#line 313 "util/configlexer.lex"
 {
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
-case 119:
+case 120:
 YY_RULE_SETUP
-#line 316 "util/configlexer.lex"
+#line 317 "util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 2383 "<stdout>"
+#line 2392 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -2671,7 +2680,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 >= 1104 )
+                       if ( yy_current_state >= 1111 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2699,11 +2708,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 1104 )
+               if ( yy_current_state >= 1111 )
                        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 == 1103);
+       yy_is_jam = (yy_current_state == 1110);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3340,7 +3349,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 316 "util/configlexer.lex"
+#line 317 "util/configlexer.lex"
 
 
 
index 15910998808b87bb2899eefefc7ceafebf6c22d3..6d6e4ef32b69c8376b49d32f06545d4e36cf6321 100644 (file)
@@ -151,6 +151,7 @@ msg-cache-slabs{COLON}              { YDVAR(1, VAR_MSG_CACHE_SLABS) }
 rrset-cache-size{COLON}                { YDVAR(1, VAR_RRSET_CACHE_SIZE) }
 rrset-cache-slabs{COLON}       { YDVAR(1, VAR_RRSET_CACHE_SLABS) }
 cache-max-ttl{COLON}           { YDVAR(1, VAR_CACHE_MAX_TTL) }
+cache-min-ttl{COLON}           { YDVAR(1, VAR_CACHE_MIN_TTL) }
 infra-host-ttl{COLON}          { YDVAR(1, VAR_INFRA_HOST_TTL) }
 infra-lame-ttl{COLON}          { YDVAR(1, VAR_INFRA_LAME_TTL) }
 infra-cache-slabs{COLON}       { YDVAR(1, VAR_INFRA_CACHE_SLABS) }
index 0285e22987e17474b2280ac71071547dce48a7c7..beb8398e34f0062ca9c41cf5f3e146cf8ae89719 100644 (file)
      VAR_PYTHON = 358,
      VAR_PYTHON_SCRIPT = 359,
      VAR_VAL_SIG_SKEW_MIN = 360,
-     VAR_VAL_SIG_SKEW_MAX = 361
+     VAR_VAL_SIG_SKEW_MAX = 361,
+     VAR_CACHE_MIN_TTL = 362
    };
 #endif
 /* Tokens.  */
 #define VAR_PYTHON_SCRIPT 359
 #define VAR_VAL_SIG_SKEW_MIN 360
 #define VAR_VAL_SIG_SKEW_MAX 361
+#define VAR_CACHE_MIN_TTL 362
 
 
 
@@ -335,7 +337,7 @@ typedef union YYSTYPE
        char*   str;
 }
 /* Line 187 of yacc.c.  */
-#line 339 "util/configparser.c"
+#line 341 "util/configparser.c"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -348,7 +350,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 352 "util/configparser.c"
+#line 354 "util/configparser.c"
 
 #ifdef short
 # undef short
@@ -563,20 +565,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   198
+#define YYLAST   199
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  107
+#define YYNTOKENS  108
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  110
+#define YYNNTS  111
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  207
+#define YYNRULES  209
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  302
+#define YYNSTATES  305
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   361
+#define YYMAXUTOK   362
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -620,7 +622,7 @@ static const yytype_uint8 yytranslate[] =
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106
+     105,   106,   107
 };
 
 #if YYDEBUG
@@ -637,75 +639,75 @@ static const yytype_uint16 yyprhs[] =
      124,   126,   128,   130,   132,   134,   136,   138,   140,   142,
      144,   146,   148,   150,   152,   154,   156,   158,   160,   162,
      164,   166,   168,   170,   172,   174,   176,   178,   180,   182,
-     184,   187,   188,   190,   192,   194,   196,   198,   201,   202,
-     204,   206,   208,   211,   214,   217,   220,   223,   226,   229,
-     232,   235,   238,   241,   244,   247,   250,   253,   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,   395,   398,   401,   404,   407,   410,
-     413,   416,   419,   422,   425,   428,   431,   435,   438,   441,
-     444,   447,   450,   453,   456,   459,   462,   464,   467,   468,
-     470,   472,   474,   476,   478,   480,   482,   485,   488,   491,
-     494,   497,   500,   503,   505,   508,   509,   511
+     184,   186,   189,   190,   192,   194,   196,   198,   200,   203,
+     204,   206,   208,   210,   213,   216,   219,   222,   225,   228,
+     231,   234,   237,   240,   243,   246,   249,   252,   255,   258,
+     261,   264,   267,   270,   273,   276,   279,   282,   285,   288,
+     291,   294,   297,   300,   303,   306,   309,   312,   315,   318,
+     321,   324,   327,   330,   333,   336,   339,   342,   345,   348,
+     351,   354,   357,   360,   363,   366,   369,   372,   375,   378,
+     381,   384,   387,   390,   393,   397,   400,   403,   406,   409,
+     412,   415,   418,   421,   424,   427,   430,   433,   436,   440,
+     443,   446,   449,   452,   455,   458,   461,   464,   467,   469,
+     472,   473,   475,   477,   479,   481,   483,   485,   487,   490,
+     493,   496,   499,   502,   505,   508,   510,   513,   514,   516
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     108,     0,    -1,    -1,   108,   109,    -1,   110,   111,    -1,
-     113,   114,    -1,   116,   117,    -1,   213,   214,    -1,   203,
-     204,    -1,    11,    -1,   111,   112,    -1,    -1,   119,    -1,
-     120,    -1,   124,    -1,   127,    -1,   133,    -1,   134,    -1,
-     135,    -1,   136,    -1,   125,    -1,   140,    -1,   141,    -1,
-     142,    -1,   143,    -1,   144,    -1,   157,    -1,   158,    -1,
-     159,    -1,   161,    -1,   162,    -1,   130,    -1,   163,    -1,
-     164,    -1,   167,    -1,   165,    -1,   166,    -1,   168,    -1,
-     169,    -1,   170,    -1,   178,    -1,   152,    -1,   153,    -1,
-     154,    -1,   155,    -1,   171,    -1,   181,    -1,   148,    -1,
-     150,    -1,   182,    -1,   186,    -1,   187,    -1,   188,    -1,
-     131,    -1,   156,    -1,   190,    -1,   191,    -1,   149,    -1,
-     189,    -1,   138,    -1,   126,    -1,   145,    -1,   179,    -1,
-     185,    -1,   172,    -1,   180,    -1,   193,    -1,   194,    -1,
-     132,    -1,   121,    -1,   137,    -1,   174,    -1,   122,    -1,
-     128,    -1,   129,    -1,   146,    -1,   147,    -1,   192,    -1,
-     173,    -1,   175,    -1,   176,    -1,   123,    -1,   195,    -1,
-     160,    -1,   177,    -1,   139,    -1,   151,    -1,   183,    -1,
-     184,    -1,    38,    -1,   114,   115,    -1,    -1,   196,    -1,
-     197,    -1,   198,    -1,   199,    -1,    44,    -1,   117,   118,
-      -1,    -1,   200,    -1,   201,    -1,   202,    -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,    77,    10,    -1,    66,    10,    -1,   101,    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,    54,    10,    -1,    64,    10,
-      -1,    55,    10,    -1,   102,    10,    -1,    48,    10,    -1,
-      49,    10,    -1,    50,    10,    -1,    51,    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,
-      85,    10,    -1,    78,    10,    -1,    86,    10,    -1,    87,
-      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,
-      57,    10,    -1,    58,    10,    -1,    59,    10,    -1,    65,
-      10,    -1,    62,    10,    -1,    63,    10,    -1,    84,    10,
-      -1,    73,    10,    10,    -1,    74,    10,    -1,    97,    10,
-      -1,    37,    10,    -1,    39,    10,    -1,    40,    10,    -1,
-      99,    10,    -1,    37,    10,    -1,    45,    10,    -1,    46,
-      10,    -1,    88,    -1,   204,   205,    -1,    -1,   206,    -1,
-     208,    -1,   207,    -1,   209,    -1,   210,    -1,   211,    -1,
-     212,    -1,    89,    10,    -1,    91,    10,    -1,    90,    10,
-      -1,    92,    10,    -1,    93,    10,    -1,    94,    10,    -1,
-      95,    10,    -1,   103,    -1,   214,   215,    -1,    -1,   216,
-      -1,   104,    10,    -1
+     109,     0,    -1,    -1,   109,   110,    -1,   111,   112,    -1,
+     114,   115,    -1,   117,   118,    -1,   215,   216,    -1,   205,
+     206,    -1,    11,    -1,   112,   113,    -1,    -1,   120,    -1,
+     121,    -1,   125,    -1,   128,    -1,   134,    -1,   135,    -1,
+     136,    -1,   137,    -1,   126,    -1,   141,    -1,   142,    -1,
+     143,    -1,   144,    -1,   145,    -1,   158,    -1,   159,    -1,
+     160,    -1,   162,    -1,   163,    -1,   131,    -1,   164,    -1,
+     165,    -1,   168,    -1,   166,    -1,   167,    -1,   169,    -1,
+     170,    -1,   171,    -1,   179,    -1,   153,    -1,   154,    -1,
+     155,    -1,   156,    -1,   172,    -1,   182,    -1,   149,    -1,
+     151,    -1,   183,    -1,   188,    -1,   189,    -1,   190,    -1,
+     132,    -1,   157,    -1,   192,    -1,   193,    -1,   150,    -1,
+     191,    -1,   139,    -1,   127,    -1,   146,    -1,   180,    -1,
+     186,    -1,   173,    -1,   181,    -1,   195,    -1,   196,    -1,
+     133,    -1,   122,    -1,   138,    -1,   175,    -1,   123,    -1,
+     129,    -1,   130,    -1,   147,    -1,   148,    -1,   194,    -1,
+     174,    -1,   176,    -1,   177,    -1,   124,    -1,   197,    -1,
+     161,    -1,   178,    -1,   140,    -1,   152,    -1,   184,    -1,
+     185,    -1,   187,    -1,    38,    -1,   115,   116,    -1,    -1,
+     198,    -1,   199,    -1,   200,    -1,   201,    -1,    44,    -1,
+     118,   119,    -1,    -1,   202,    -1,   203,    -1,   204,    -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,    77,    10,    -1,    66,    10,    -1,
+     101,    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,    54,    10,    -1,
+      64,    10,    -1,    55,    10,    -1,   102,    10,    -1,    48,
+      10,    -1,    49,    10,    -1,    50,    10,    -1,    51,    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,    85,    10,    -1,    78,    10,    -1,    86,    10,
+      -1,    87,    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,    65,    10,    -1,    62,    10,    -1,
+      63,    10,    -1,    84,    10,    -1,    73,    10,    10,    -1,
+      74,    10,    -1,    97,    10,    -1,    37,    10,    -1,    39,
+      10,    -1,    40,    10,    -1,    99,    10,    -1,    37,    10,
+      -1,    45,    10,    -1,    46,    10,    -1,    88,    -1,   206,
+     207,    -1,    -1,   208,    -1,   210,    -1,   209,    -1,   211,
+      -1,   212,    -1,   213,    -1,   214,    -1,    89,    10,    -1,
+      91,    10,    -1,    90,    10,    -1,    92,    10,    -1,    93,
+      10,    -1,    94,    10,    -1,    95,    10,    -1,   103,    -1,
+     216,   217,    -1,    -1,   218,    -1,   104,    10,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -719,19 +721,19 @@ static const yytype_uint16 yyrline[] =
      133,   134,   134,   135,   135,   136,   136,   137,   137,   138,
      138,   138,   139,   139,   140,   140,   141,   141,   141,   142,
      142,   143,   143,   144,   144,   145,   145,   145,   146,   146,
-     147,   147,   148,   148,   149,   149,   150,   150,   151,   153,
-     165,   166,   167,   167,   167,   167,   169,   181,   182,   183,
-     183,   183,   185,   194,   203,   214,   223,   232,   241,   254,
-     269,   278,   287,   296,   305,   314,   323,   332,   341,   350,
-     359,   368,   382,   391,   398,   405,   412,   420,   427,   434,
-     441,   448,   456,   464,   471,   478,   487,   496,   503,   510,
-     521,   529,   542,   551,   560,   568,   581,   590,   599,   608,
-     617,   630,   637,   647,   657,   667,   677,   687,   697,   704,
-     711,   720,   727,   737,   751,   758,   776,   789,   802,   811,
-     820,   830,   840,   847,   855,   868,   876,   896,   903,   918,
-     925,   932,   939,   949,   956,   963,   970,   975,   976,   977,
-     977,   977,   978,   978,   978,   979,   981,   991,  1000,  1007,
-    1014,  1021,  1028,  1035,  1040,  1041,  1042,  1044
+     147,   147,   148,   148,   149,   149,   150,   150,   151,   151,
+     153,   165,   166,   167,   167,   167,   167,   169,   181,   182,
+     183,   183,   183,   185,   194,   203,   214,   223,   232,   241,
+     254,   269,   278,   287,   296,   305,   314,   323,   332,   341,
+     350,   359,   368,   382,   391,   398,   405,   412,   420,   427,
+     434,   441,   448,   456,   464,   471,   478,   487,   496,   503,
+     510,   521,   529,   542,   551,   560,   568,   581,   590,   599,
+     608,   617,   630,   637,   647,   657,   667,   677,   687,   697,
+     704,   711,   720,   727,   737,   751,   758,   776,   789,   802,
+     811,   820,   829,   839,   849,   856,   864,   877,   885,   905,
+     912,   927,   934,   941,   948,   958,   965,   972,   979,   984,
+     985,   986,   986,   986,   987,   987,   987,   988,   990,  1000,
+    1009,  1016,  1023,  1030,  1037,  1044,  1049,  1050,  1051,  1053
 };
 #endif
 
@@ -773,10 +775,10 @@ static const char *const yytname[] =
   "VAR_EXTENDED_STATISTICS", "VAR_LOCAL_DATA_PTR", "VAR_JOSTLE_TIMEOUT",
   "VAR_STUB_PRIME", "VAR_UNWANTED_REPLY_THRESHOLD", "VAR_LOG_TIME_ASCII",
   "VAR_DOMAIN_INSECURE", "VAR_PYTHON", "VAR_PYTHON_SCRIPT",
-  "VAR_VAL_SIG_SKEW_MIN", "VAR_VAL_SIG_SKEW_MAX", "$accept",
-  "toplevelvars", "toplevelvar", "serverstart", "contents_server",
-  "content_server", "stubstart", "contents_stub", "content_stub",
-  "forwardstart", "contents_forward", "content_forward",
+  "VAR_VAL_SIG_SKEW_MIN", "VAR_VAL_SIG_SKEW_MAX", "VAR_CACHE_MIN_TTL",
+  "$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",
@@ -805,7 +807,7 @@ static const char *const yytname[] =
   "server_do_not_query_localhost", "server_access_control",
   "server_module_conf", "server_val_override_date",
   "server_val_sig_skew_min", "server_val_sig_skew_max",
-  "server_cache_max_ttl", "server_bogus_ttl",
+  "server_cache_max_ttl", "server_cache_min_ttl", "server_bogus_ttl",
   "server_val_clean_additional", "server_val_permissive_mode",
   "server_val_nsec3_keysize_iterations", "server_key_cache_size",
   "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone",
@@ -834,24 +836,24 @@ static const yytype_uint16 yytoknum[] =
      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
+     355,   356,   357,   358,   359,   360,   361,   362
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   107,   108,   108,   109,   109,   109,   109,   109,   110,
-     111,   111,   112,   112,   112,   112,   112,   112,   112,   112,
-     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
-     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
-     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
-     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
-     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
-     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
-     112,   112,   112,   112,   112,   112,   112,   112,   112,   113,
-     114,   114,   115,   115,   115,   115,   116,   117,   117,   118,
-     118,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+       0,   108,   109,   109,   110,   110,   110,   110,   110,   111,
+     112,   112,   113,   113,   113,   113,   113,   113,   113,   113,
+     113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
+     113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
+     113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
+     113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
+     113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
+     113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
+     113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
+     114,   115,   115,   116,   116,   116,   116,   117,   118,   118,
+     119,   119,   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,
@@ -859,9 +861,9 @@ static const yytype_uint8 yyr1[] =
      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,   204,   205,
-     205,   205,   205,   205,   205,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   214,   215,   216
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     206,   207,   207,   207,   207,   207,   207,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   216,   217,   218
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -876,18 +878,18 @@ 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,
-       2,     0,     1,     1,     1,     1,     1,     2,     0,     1,
-       1,     1,     2,     2,     2,     2,     2,     2,     2,     2,
+       1,     2,     0,     1,     1,     1,     1,     1,     2,     0,
+       1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     3,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     3,     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,     3,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     3,     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
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -895,8 +897,8 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,     0,     1,     9,    89,    96,   186,   203,     3,    11,
-      91,    98,   188,   205,     4,     5,     6,     8,     7,     0,
+       2,     0,     1,     9,    90,    97,   188,   205,     3,    11,
+      92,    99,   190,   207,     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,
@@ -904,44 +906,45 @@ static const yytype_uint8 yydefact[] =
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    10,    12,    13,    69,
-      72,    81,    14,    20,    60,    15,    73,    74,    31,    53,
-      68,    16,    17,    18,    19,    70,    59,    85,    21,    22,
-      23,    24,    25,    61,    75,    76,    47,    57,    48,    86,
-      41,    42,    43,    44,    54,    26,    27,    28,    83,    29,
-      30,    32,    33,    35,    36,    34,    37,    38,    39,    45,
-      64,    78,    71,    79,    80,    84,    40,    62,    65,    46,
-      49,    87,    88,    63,    50,    51,    52,    58,    55,    56,
-      77,    66,    67,    82,     0,     0,     0,     0,    90,    92,
-      93,    94,    95,     0,     0,     0,    97,    99,   100,   101,
-       0,     0,     0,     0,     0,     0,     0,   187,   189,   191,
-     190,   192,   193,   194,   195,     0,   204,   206,   103,   102,
-     107,   110,   108,   116,   117,   118,   119,   123,   124,   125,
-     126,   127,   140,   141,   142,   144,   145,   113,   146,   147,
-     150,   148,   149,   151,   152,   153,   161,   135,   136,   137,
-     138,   154,   164,   131,   133,   165,   169,   170,   171,   114,
-     139,   173,   174,   132,   172,   121,   109,   128,   162,   168,
-     155,     0,     0,   177,   115,   104,   120,   157,   105,   111,
-     112,   129,   130,   175,   156,   158,   159,   106,   178,   143,
-     160,   122,   134,   166,   167,   179,   180,   181,   182,   183,
-     184,   185,   196,   198,   197,   199,   200,   201,   202,   207,
-     163,   176
+       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,    70,    59,    85,    21,
+      22,    23,    24,    25,    61,    75,    76,    47,    57,    48,
+      86,    41,    42,    43,    44,    54,    26,    27,    28,    83,
+      29,    30,    32,    33,    35,    36,    34,    37,    38,    39,
+      45,    64,    78,    71,    79,    80,    84,    40,    62,    65,
+      46,    49,    87,    88,    63,    89,    50,    51,    52,    58,
+      55,    56,    77,    66,    67,    82,     0,     0,     0,     0,
+      91,    93,    94,    95,    96,     0,     0,     0,    98,   100,
+     101,   102,     0,     0,     0,     0,     0,     0,     0,   189,
+     191,   193,   192,   194,   195,   196,   197,     0,   206,   208,
+     104,   103,   108,   111,   109,   117,   118,   119,   120,   124,
+     125,   126,   127,   128,   141,   142,   143,   145,   146,   114,
+     147,   148,   151,   149,   150,   152,   153,   154,   162,   136,
+     137,   138,   139,   155,   165,   132,   134,   166,   171,   172,
+     173,   115,   140,   175,   176,   133,   174,   122,   110,   129,
+     163,   169,   156,     0,     0,   179,   116,   105,   121,   158,
+     106,   112,   113,   130,   131,   177,   157,   159,   160,   107,
+     180,   144,   161,   123,   135,   167,   168,   170,   181,   182,
+     183,   184,   185,   186,   187,   198,   200,   199,   201,   202,
+     203,   204,   209,   164,   178
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     8,     9,    14,    96,    10,    15,   178,    11,
-      16,   186,    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,   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,   179,
-     180,   181,   182,   187,   188,   189,    12,    17,   197,   198,
-     199,   200,   201,   202,   203,   204,    13,    18,   206,   207
+      -1,     1,     8,     9,    14,    97,    10,    15,   180,    11,
+      16,   188,    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,   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,
+     181,   182,   183,   184,   189,   190,   191,    12,    17,   199,
+     200,   201,   202,   203,   204,   205,   206,    13,    18,   208,
+     209
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -958,7 +961,7 @@ static const yytype_int16 yypact[] =
       50,    51,    52,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,  -103,  -103,  -103,  -103,
+      82,    83,    84,    85,    86,    87,    88,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
@@ -966,20 +969,20 @@ static const yytype_int16 yypact[] =
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
-    -103,  -103,  -103,  -103,    88,    89,    90,    91,  -103,  -103,
-    -103,  -103,  -103,   119,   120,   121,  -103,  -103,  -103,  -103,
-     122,   126,   127,   128,   170,   171,   172,  -103,  -103,  -103,
-    -103,  -103,  -103,  -103,  -103,   173,  -103,  -103,  -103,  -103,
+    -103,  -103,  -103,  -103,  -103,  -103,    89,    90,    91,   119,
+    -103,  -103,  -103,  -103,  -103,   120,   121,   122,  -103,  -103,
+    -103,  -103,   126,   127,   128,   170,   171,   172,   173,  -103,
+    -103,  -103,  -103,  -103,  -103,  -103,  -103,   174,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
-    -103,   174,   175,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
+    -103,  -103,  -103,   175,   176,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
-    -103,  -103
+    -103,  -103,  -103,  -103,  -103
 };
 
 /* YYPGOTO[NTERM-NUM].  */
@@ -995,7 +998,8 @@ static const yytype_int8 yypgoto[] =
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
     -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
-    -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103
+    -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,  -103,
+    -103
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -1005,26 +1009,26 @@ static const yytype_int8 yypgoto[] =
 #define YYTABLE_NINF -1
 static const yytype_uint16 yytable[] =
 {
-       2,   174,   205,   175,   176,   183,   208,   209,   210,   211,
-       0,     3,   212,   184,   185,   190,   191,   192,   193,   194,
-     195,   196,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,     4,   229,
-     230,   231,   232,   233,     5,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   177,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,     6,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,     0,     7,    19,    20,    21,    22,    23,    24,
+       2,   176,   207,   177,   178,   185,   210,   211,   212,   213,
+       0,     3,   214,   186,   187,   192,   193,   194,   195,   196,
+     197,   198,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,     4,   231,
+     232,   233,   234,   235,     5,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   179,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,     6,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,     0,     7,    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,   289,
-     290,   291,   292,    44,    45,    46,   293,   294,   295,    47,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,   291,
+     292,   293,   294,    44,    45,    46,   295,   296,   297,    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,
-     296,   297,   298,   299,   300,   301,     0,     0,    88,    89,
-      90,     0,    91,    92,    93,     0,     0,    94,    95
+     298,   299,   300,   301,   302,   303,   304,     0,    88,    89,
+      90,     0,    91,    92,    93,     0,     0,    94,    95,    96
 };
 
 static const yytype_int8 yycheck[] =
@@ -1047,16 +1051,16 @@ static const yytype_int8 yycheck[] =
       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,
-      10,    10,    10,    10,    10,    10,    -1,    -1,    96,    97,
-      98,    -1,   100,   101,   102,    -1,    -1,   105,   106
+      10,    10,    10,    10,    10,    10,    10,    -1,    96,    97,
+      98,    -1,   100,   101,   102,    -1,    -1,   105,   106,   107
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,   108,     0,    11,    38,    44,    88,   103,   109,   110,
-     113,   116,   203,   213,   111,   114,   117,   204,   214,    12,
+       0,   109,     0,    11,    38,    44,    88,   103,   110,   111,
+     114,   117,   205,   215,   112,   115,   118,   206,   216,    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,
@@ -1064,7 +1068,7 @@ static const yytype_uint8 yystos[] =
       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,    96,    97,
-      98,   100,   101,   102,   105,   106,   112,   119,   120,   121,
+      98,   100,   101,   102,   105,   106,   107,   113,   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,
@@ -1072,10 +1076,10 @@ static const yytype_uint8 yystos[] =
      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,    37,    39,    40,    99,   115,   196,
-     197,   198,   199,    37,    45,    46,   118,   200,   201,   202,
-      89,    90,    91,    92,    93,    94,    95,   205,   206,   207,
-     208,   209,   210,   211,   212,   104,   215,   216,    10,    10,
+     192,   193,   194,   195,   196,   197,    37,    39,    40,    99,
+     116,   198,   199,   200,   201,    37,    45,    46,   119,   202,
+     203,   204,    89,    90,    91,    92,    93,    94,    95,   207,
+     208,   209,   210,   211,   212,   213,   214,   104,   217,   218,
       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,
@@ -1085,7 +1089,7 @@ static const yytype_uint8 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)
@@ -1906,7 +1910,7 @@ yyreduce:
        }
     break;
 
-  case 89:
+  case 90:
 #line 154 "util/configparser.y"
     {
                struct config_stub* s;
@@ -1920,7 +1924,7 @@ yyreduce:
        }
     break;
 
-  case 96:
+  case 97:
 #line 170 "util/configparser.y"
     {
                struct config_stub* s;
@@ -1934,7 +1938,7 @@ yyreduce:
        }
     break;
 
-  case 102:
+  case 103:
 #line 186 "util/configparser.y"
     { 
                OUTYY(("P(server_num_threads:%s)\n", (yyvsp[(2) - (2)].str))); 
@@ -1945,7 +1949,7 @@ yyreduce:
        }
     break;
 
-  case 103:
+  case 104:
 #line 195 "util/configparser.y"
     { 
                OUTYY(("P(server_verbosity:%s)\n", (yyvsp[(2) - (2)].str))); 
@@ -1956,7 +1960,7 @@ yyreduce:
        }
     break;
 
-  case 104:
+  case 105:
 #line 204 "util/configparser.y"
     { 
                OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[(2) - (2)].str))); 
@@ -1969,7 +1973,7 @@ yyreduce:
        }
     break;
 
-  case 105:
+  case 106:
 #line 215 "util/configparser.y"
     {
                OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -1980,7 +1984,7 @@ yyreduce:
        }
     break;
 
-  case 106:
+  case 107:
 #line 224 "util/configparser.y"
     {
                OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -1991,7 +1995,7 @@ yyreduce:
        }
     break;
 
-  case 107:
+  case 108:
 #line 233 "util/configparser.y"
     {
                OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2002,7 +2006,7 @@ yyreduce:
        }
     break;
 
-  case 108:
+  case 109:
 #line 242 "util/configparser.y"
     {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2017,7 +2021,7 @@ yyreduce:
        }
     break;
 
-  case 109:
+  case 110:
 #line 255 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2034,7 +2038,7 @@ yyreduce:
        }
     break;
 
-  case 110:
+  case 111:
 #line 270 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2045,7 +2049,7 @@ yyreduce:
        }
     break;
 
-  case 111:
+  case 112:
 #line 279 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2056,7 +2060,7 @@ yyreduce:
        }
     break;
 
-  case 112:
+  case 113:
 #line 288 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2067,7 +2071,7 @@ yyreduce:
        }
     break;
 
-  case 113:
+  case 114:
 #line 297 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2078,7 +2082,7 @@ yyreduce:
        }
     break;
 
-  case 114:
+  case 115:
 #line 306 "util/configparser.y"
     {
                OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2089,7 +2093,7 @@ yyreduce:
        }
     break;
 
-  case 115:
+  case 116:
 #line 315 "util/configparser.y"
     {
                OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2100,7 +2104,7 @@ yyreduce:
        }
     break;
 
-  case 116:
+  case 117:
 #line 324 "util/configparser.y"
     {
                OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2111,7 +2115,7 @@ yyreduce:
        }
     break;
 
-  case 117:
+  case 118:
 #line 333 "util/configparser.y"
     {
                OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2122,7 +2126,7 @@ yyreduce:
        }
     break;
 
-  case 118:
+  case 119:
 #line 342 "util/configparser.y"
     {
                OUTYY(("P(server_do_udp:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2133,7 +2137,7 @@ yyreduce:
        }
     break;
 
-  case 119:
+  case 120:
 #line 351 "util/configparser.y"
     {
                OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2144,7 +2148,7 @@ yyreduce:
        }
     break;
 
-  case 120:
+  case 121:
 #line 360 "util/configparser.y"
     {
                OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2155,7 +2159,7 @@ yyreduce:
        }
     break;
 
-  case 121:
+  case 122:
 #line 369 "util/configparser.y"
     {
                OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2171,7 +2175,7 @@ yyreduce:
        }
     break;
 
-  case 122:
+  case 123:
 #line 383 "util/configparser.y"
     {
                OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2182,7 +2186,7 @@ yyreduce:
        }
     break;
 
-  case 123:
+  case 124:
 #line 392 "util/configparser.y"
     {
                OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2191,7 +2195,7 @@ yyreduce:
        }
     break;
 
-  case 124:
+  case 125:
 #line 399 "util/configparser.y"
     {
                OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2200,7 +2204,7 @@ yyreduce:
        }
     break;
 
-  case 125:
+  case 126:
 #line 406 "util/configparser.y"
     {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2209,7 +2213,7 @@ yyreduce:
        }
     break;
 
-  case 126:
+  case 127:
 #line 413 "util/configparser.y"
     {
                OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2219,7 +2223,7 @@ yyreduce:
        }
     break;
 
-  case 127:
+  case 128:
 #line 421 "util/configparser.y"
     {
                OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2228,7 +2232,7 @@ yyreduce:
        }
     break;
 
-  case 128:
+  case 129:
 #line 428 "util/configparser.y"
     {
                OUTYY(("P(server_root_hints:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2237,7 +2241,7 @@ yyreduce:
        }
     break;
 
-  case 129:
+  case 130:
 #line 435 "util/configparser.y"
     {
                OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2246,7 +2250,7 @@ yyreduce:
        }
     break;
 
-  case 130:
+  case 131:
 #line 442 "util/configparser.y"
     {
                OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2255,7 +2259,7 @@ yyreduce:
        }
     break;
 
-  case 131:
+  case 132:
 #line 449 "util/configparser.y"
     {
                OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2265,7 +2269,7 @@ yyreduce:
        }
     break;
 
-  case 132:
+  case 133:
 #line 457 "util/configparser.y"
     {
                OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2275,7 +2279,7 @@ yyreduce:
        }
     break;
 
-  case 133:
+  case 134:
 #line 465 "util/configparser.y"
     {
                OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2284,7 +2288,7 @@ yyreduce:
        }
     break;
 
-  case 134:
+  case 135:
 #line 472 "util/configparser.y"
     {
                OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2293,7 +2297,7 @@ yyreduce:
        }
     break;
 
-  case 135:
+  case 136:
 #line 479 "util/configparser.y"
     {
                OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2304,7 +2308,7 @@ yyreduce:
        }
     break;
 
-  case 136:
+  case 137:
 #line 488 "util/configparser.y"
     {
                OUTYY(("P(server_hide_version:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2315,7 +2319,7 @@ yyreduce:
        }
     break;
 
-  case 137:
+  case 138:
 #line 497 "util/configparser.y"
     {
                OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2324,7 +2328,7 @@ yyreduce:
        }
     break;
 
-  case 138:
+  case 139:
 #line 504 "util/configparser.y"
     {
                OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2333,7 +2337,7 @@ yyreduce:
        }
     break;
 
-  case 139:
+  case 140:
 #line 511 "util/configparser.y"
     {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2346,7 +2350,7 @@ yyreduce:
        }
     break;
 
-  case 140:
+  case 141:
 #line 522 "util/configparser.y"
     {
                OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2356,7 +2360,7 @@ yyreduce:
        }
     break;
 
-  case 141:
+  case 142:
 #line 530 "util/configparser.y"
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2371,7 +2375,7 @@ yyreduce:
        }
     break;
 
-  case 142:
+  case 143:
 #line 543 "util/configparser.y"
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2382,7 +2386,7 @@ yyreduce:
        }
     break;
 
-  case 143:
+  case 144:
 #line 552 "util/configparser.y"
     {
                OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2393,7 +2397,7 @@ yyreduce:
        }
     break;
 
-  case 144:
+  case 145:
 #line 561 "util/configparser.y"
     {
                OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2403,7 +2407,7 @@ yyreduce:
        }
     break;
 
-  case 145:
+  case 146:
 #line 569 "util/configparser.y"
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2418,7 +2422,7 @@ yyreduce:
        }
     break;
 
-  case 146:
+  case 147:
 #line 582 "util/configparser.y"
     {
                OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2429,7 +2433,7 @@ yyreduce:
        }
     break;
 
-  case 147:
+  case 148:
 #line 591 "util/configparser.y"
     {
                OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2440,7 +2444,7 @@ yyreduce:
        }
     break;
 
-  case 148:
+  case 149:
 #line 600 "util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2451,7 +2455,7 @@ yyreduce:
        }
     break;
 
-  case 149:
+  case 150:
 #line 609 "util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2462,7 +2466,7 @@ yyreduce:
        }
     break;
 
-  case 150:
+  case 151:
 #line 618 "util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2477,7 +2481,7 @@ yyreduce:
        }
     break;
 
-  case 151:
+  case 152:
 #line 631 "util/configparser.y"
     {
                OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2486,7 +2490,7 @@ yyreduce:
        }
     break;
 
-  case 152:
+  case 153:
 #line 638 "util/configparser.y"
     {
                OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2498,7 +2502,7 @@ yyreduce:
        }
     break;
 
-  case 153:
+  case 154:
 #line 648 "util/configparser.y"
     {
                OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2510,7 +2514,7 @@ yyreduce:
        }
     break;
 
-  case 154:
+  case 155:
 #line 658 "util/configparser.y"
     {
                OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2522,7 +2526,7 @@ yyreduce:
        }
     break;
 
-  case 155:
+  case 156:
 #line 668 "util/configparser.y"
     {
                OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2534,7 +2538,7 @@ yyreduce:
        }
     break;
 
-  case 156:
+  case 157:
 #line 678 "util/configparser.y"
     {
                OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2546,7 +2550,7 @@ yyreduce:
        }
     break;
 
-  case 157:
+  case 158:
 #line 688 "util/configparser.y"
     {
                OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2558,7 +2562,7 @@ yyreduce:
        }
     break;
 
-  case 158:
+  case 159:
 #line 698 "util/configparser.y"
     {
                OUTYY(("P(server_private_address:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2567,7 +2571,7 @@ yyreduce:
        }
     break;
 
-  case 159:
+  case 160:
 #line 705 "util/configparser.y"
     {
                OUTYY(("P(server_private_domain:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2576,7 +2580,7 @@ yyreduce:
        }
     break;
 
-  case 160:
+  case 161:
 #line 712 "util/configparser.y"
     {
                OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2587,7 +2591,7 @@ yyreduce:
        }
     break;
 
-  case 161:
+  case 162:
 #line 721 "util/configparser.y"
     {
                OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2596,7 +2600,7 @@ yyreduce:
        }
     break;
 
-  case 162:
+  case 163:
 #line 728 "util/configparser.y"
     {
                OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2608,7 +2612,7 @@ yyreduce:
        }
     break;
 
-  case 163:
+  case 164:
 #line 738 "util/configparser.y"
     {
                OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
@@ -2624,7 +2628,7 @@ yyreduce:
        }
     break;
 
-  case 164:
+  case 165:
 #line 752 "util/configparser.y"
     {
                OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2633,7 +2637,7 @@ yyreduce:
        }
     break;
 
-  case 165:
+  case 166:
 #line 759 "util/configparser.y"
     {
                OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2653,7 +2657,7 @@ yyreduce:
        }
     break;
 
-  case 166:
+  case 167:
 #line 777 "util/configparser.y"
     {
                OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2668,7 +2672,7 @@ yyreduce:
        }
     break;
 
-  case 167:
+  case 168:
 #line 790 "util/configparser.y"
     {
                OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2683,7 +2687,7 @@ yyreduce:
        }
     break;
 
-  case 168:
+  case 169:
 #line 803 "util/configparser.y"
     {
                OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2694,8 +2698,19 @@ yyreduce:
        }
     break;
 
-  case 169:
+  case 170:
 #line 812 "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)
+                       yyerror("number expected");
+               else cfg_parser->cfg->min_ttl = atoi((yyvsp[(2) - (2)].str));
+               free((yyvsp[(2) - (2)].str));
+       }
+    break;
+
+  case 171:
+#line 821 "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)
@@ -2705,8 +2720,8 @@ yyreduce:
        }
     break;
 
-  case 170:
-#line 821 "util/configparser.y"
+  case 172:
+#line 830 "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)
@@ -2717,8 +2732,8 @@ yyreduce:
        }
     break;
 
-  case 171:
-#line 831 "util/configparser.y"
+  case 173:
+#line 840 "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)
@@ -2729,8 +2744,8 @@ yyreduce:
        }
     break;
 
-  case 172:
-#line 841 "util/configparser.y"
+  case 174:
+#line 850 "util/configparser.y"
     {
                OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->val_nsec3_key_iterations);
@@ -2738,8 +2753,8 @@ yyreduce:
        }
     break;
 
-  case 173:
-#line 848 "util/configparser.y"
+  case 175:
+#line 857 "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))
@@ -2748,8 +2763,8 @@ yyreduce:
        }
     break;
 
-  case 174:
-#line 856 "util/configparser.y"
+  case 176:
+#line 865 "util/configparser.y"
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2763,8 +2778,8 @@ yyreduce:
        }
     break;
 
-  case 175:
-#line 869 "util/configparser.y"
+  case 177:
+#line 878 "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))
@@ -2773,8 +2788,8 @@ yyreduce:
        }
     break;
 
-  case 176:
-#line 877 "util/configparser.y"
+  case 178:
+#line 886 "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 &&
@@ -2795,8 +2810,8 @@ yyreduce:
        }
     break;
 
-  case 177:
-#line 897 "util/configparser.y"
+  case 179:
+#line 906 "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)))
@@ -2804,8 +2819,8 @@ yyreduce:
        }
     break;
 
-  case 178:
-#line 904 "util/configparser.y"
+  case 180:
+#line 913 "util/configparser.y"
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str)));
@@ -2821,8 +2836,8 @@ yyreduce:
        }
     break;
 
-  case 179:
-#line 919 "util/configparser.y"
+  case 181:
+#line 928 "util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->stubs->name);
@@ -2830,8 +2845,8 @@ yyreduce:
        }
     break;
 
-  case 180:
-#line 926 "util/configparser.y"
+  case 182:
+#line 935 "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)))
@@ -2839,8 +2854,8 @@ yyreduce:
        }
     break;
 
-  case 181:
-#line 933 "util/configparser.y"
+  case 183:
+#line 942 "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)))
@@ -2848,8 +2863,8 @@ yyreduce:
        }
     break;
 
-  case 182:
-#line 940 "util/configparser.y"
+  case 184:
+#line 949 "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)
@@ -2860,8 +2875,8 @@ yyreduce:
        }
     break;
 
-  case 183:
-#line 950 "util/configparser.y"
+  case 185:
+#line 959 "util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->forwards->name);
@@ -2869,8 +2884,8 @@ yyreduce:
        }
     break;
 
-  case 184:
-#line 957 "util/configparser.y"
+  case 186:
+#line 966 "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)))
@@ -2878,8 +2893,8 @@ yyreduce:
        }
     break;
 
-  case 185:
-#line 964 "util/configparser.y"
+  case 187:
+#line 973 "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)))
@@ -2887,15 +2902,15 @@ yyreduce:
        }
     break;
 
-  case 186:
-#line 971 "util/configparser.y"
+  case 188:
+#line 980 "util/configparser.y"
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
     break;
 
-  case 196:
-#line 982 "util/configparser.y"
+  case 198:
+#line 991 "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)
@@ -2906,8 +2921,8 @@ yyreduce:
        }
     break;
 
-  case 197:
-#line 992 "util/configparser.y"
+  case 199:
+#line 1001 "util/configparser.y"
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2917,8 +2932,8 @@ yyreduce:
        }
     break;
 
-  case 198:
-#line 1001 "util/configparser.y"
+  case 200:
+#line 1010 "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)))
@@ -2926,8 +2941,8 @@ yyreduce:
        }
     break;
 
-  case 199:
-#line 1008 "util/configparser.y"
+  case 201:
+#line 1017 "util/configparser.y"
     {
                OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->server_key_file);
@@ -2935,8 +2950,8 @@ yyreduce:
        }
     break;
 
-  case 200:
-#line 1015 "util/configparser.y"
+  case 202:
+#line 1024 "util/configparser.y"
     {
                OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->server_cert_file);
@@ -2944,8 +2959,8 @@ yyreduce:
        }
     break;
 
-  case 201:
-#line 1022 "util/configparser.y"
+  case 203:
+#line 1031 "util/configparser.y"
     {
                OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->control_key_file);
@@ -2953,8 +2968,8 @@ yyreduce:
        }
     break;
 
-  case 202:
-#line 1029 "util/configparser.y"
+  case 204:
+#line 1038 "util/configparser.y"
     {
                OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->control_cert_file);
@@ -2962,15 +2977,15 @@ yyreduce:
        }
     break;
 
-  case 203:
-#line 1036 "util/configparser.y"
+  case 205:
+#line 1045 "util/configparser.y"
     { 
                OUTYY(("\nP(python:)\n")); 
        }
     break;
 
-  case 207:
-#line 1045 "util/configparser.y"
+  case 209:
+#line 1054 "util/configparser.y"
     {
                OUTYY(("P(python-script:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->python_script);
@@ -2980,7 +2995,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 2984 "util/configparser.c"
+#line 2999 "util/configparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3194,7 +3209,7 @@ yyreturn:
 }
 
 
-#line 1050 "util/configparser.y"
+#line 1059 "util/configparser.y"
 
 
 /* parse helper routines could be here */
index adcbf3cf8721f7136d67c788890710774f21f49e..645958dbf899620086d190192028f1710f619696 100644 (file)
      VAR_PYTHON = 358,
      VAR_PYTHON_SCRIPT = 359,
      VAR_VAL_SIG_SKEW_MIN = 360,
-     VAR_VAL_SIG_SKEW_MAX = 361
+     VAR_VAL_SIG_SKEW_MAX = 361,
+     VAR_CACHE_MIN_TTL = 362
    };
 #endif
 /* Tokens.  */
 #define VAR_PYTHON_SCRIPT 359
 #define VAR_VAL_SIG_SKEW_MIN 360
 #define VAR_VAL_SIG_SKEW_MAX 361
+#define VAR_CACHE_MIN_TTL 362
 
 
 
@@ -261,7 +263,7 @@ typedef union YYSTYPE
        char*   str;
 }
 /* Line 1489 of yacc.c.  */
-#line 265 "util/configparser.h"
+#line 267 "util/configparser.h"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
index a35427e22427c86139621df145f9543e53a93192..c2a0b2c9114774dfaa6bd53ff85b0668aaec39b8 100644 (file)
@@ -98,7 +98,7 @@ extern struct config_parser_state* cfg_parser;
 %token VAR_EXTENDED_STATISTICS VAR_LOCAL_DATA_PTR VAR_JOSTLE_TIMEOUT
 %token VAR_STUB_PRIME VAR_UNWANTED_REPLY_THRESHOLD VAR_LOG_TIME_ASCII
 %token VAR_DOMAIN_INSECURE VAR_PYTHON VAR_PYTHON_SCRIPT VAR_VAL_SIG_SKEW_MIN
-%token VAR_VAL_SIG_SKEW_MAX
+%token VAR_VAL_SIG_SKEW_MAX VAR_CACHE_MIN_TTL
 
 %%
 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -148,7 +148,7 @@ content_server: server_num_threads | server_verbosity | server_port |
        server_local_data_ptr | server_jostle_timeout | 
        server_unwanted_reply_threshold | server_log_time_ascii | 
        server_domain_insecure | server_val_sig_skew_min | 
-       server_val_sig_skew_max
+       server_val_sig_skew_max | server_cache_min_ttl
        ;
 stubstart: VAR_STUB_ZONE
        {
@@ -808,6 +808,15 @@ server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG
                free($2);
        }
        ;
+server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG
+       {
+               OUTYY(("P(server_cache_min_ttl:%s)\n", $2));
+               if(atoi($2) == 0 && strcmp($2, "0") != 0)
+                       yyerror("number expected");
+               else cfg_parser->cfg->min_ttl = atoi($2);
+               free($2);
+       }
+       ;
 server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG
        {
                OUTYY(("P(server_bogus_ttl:%s)\n", $2));
index ea21a42693892383cb5181ba7084cd5ce8c19bf1..bc367fd7e3451b4c3687bf6e7835c5a138cffb6e 100644 (file)
@@ -71,6 +71,8 @@ struct regional;
 #define PARSE_TABLE_SIZE 32
 /** Maximum TTL that is allowed. */
 extern uint32_t MAX_TTL;
+/** Minimum TTL that is allowed. */
+extern uint32_t MIN_TTL;
 /** Negative cache time (for entries without any RRs.) */
 #define NORR_TTL 5 /* seconds */
 
index 1d02c38db76f86947ca45fc6ef1983379c145af7..11ba08aa774f1acf5456701c7d8232a530060fca 100644 (file)
@@ -53,6 +53,8 @@
 
 /** MAX TTL default for messages and rrsets */
 uint32_t MAX_TTL = 3600 * 24 * 10; /* ten days */
+/** MIN TTL default for messages and rrsets */
+uint32_t MIN_TTL = 0;
 
 /** allocate qinfo, return 0 on error */
 static int
@@ -159,6 +161,8 @@ rdata_copy(ldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to,
        /* RFC 2181 Section 8. if msb of ttl is set treat as if zero. */
        if(*rr_ttl & 0x80000000U)
                *rr_ttl = 0;
+       if(*rr_ttl < MIN_TTL)
+               *rr_ttl = MIN_TTL;
        if(*rr_ttl < data->ttl)
                data->ttl = *rr_ttl;