diff --git a/Makefile.in b/Makefile.in index 1a2e2c548..e81131468 100644 --- a/Makefile.in +++ b/Makefile.in @@ -110,6 +110,7 @@ iterator/iter_delegpt.c iterator/iter_donotq.c iterator/iter_fwd.c \ iterator/iter_hints.c iterator/iter_priv.c iterator/iter_resptype.c \ iterator/iter_scrub.c iterator/iter_utils.c services/listen_dnsport.c \ services/localzone.c services/mesh.c services/modstack.c services/view.c \ +services/rpz.c \ services/outbound_list.c services/outside_network.c util/alloc.c \ util/config_file.c util/configlexer.c util/configparser.c \ util/shm_side/shm_main.c services/authzone.c \ @@ -135,7 +136,7 @@ outbound_list.lo alloc.lo config_file.lo configlexer.lo configparser.lo \ fptr_wlist.lo edns.lo locks.lo log.lo mini_event.lo module.lo net_help.lo \ random.lo rbtree.lo regional.lo rtt.lo dnstree.lo lookup3.lo lruhash.lo \ slabhash.lo tcp_conn_limit.lo timehist.lo tube.lo winsock_event.lo \ -autotrust.lo val_anchor.lo \ +autotrust.lo val_anchor.lo rpz.lo \ validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \ val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \ $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \ @@ -654,9 +655,9 @@ infra.lo infra.o: $(srcdir)/services/cache/infra.c config.h $(srcdir)/sldns/rrde $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lookup3.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h rrset.lo rrset.o: $(srcdir)/services/cache/rrset.c config.h $(srcdir)/services/cache/rrset.h \ @@ -681,11 +682,14 @@ msgparse.lo msgparse.o: $(srcdir)/util/data/msgparse.c config.h $(srcdir)/util/d msgreply.lo msgreply.o: $(srcdir)/util/data/msgreply.c config.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h \ - $(srcdir)/util/module.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ - $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h + $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/module.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/respip/respip.h packed_rrset.lo packed_rrset.o: $(srcdir)/util/data/packed_rrset.c config.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/regional.h \ @@ -699,11 +703,12 @@ iterator.lo iterator.o: $(srcdir)/iterator/iterator.c config.h $(srcdir)/iterato $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_scrub.h $(srcdir)/iterator/iter_priv.h \ $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/authzone.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/random.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/random.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h iter_delegpt.lo iter_delegpt.o: $(srcdir)/iterator/iter_delegpt.c config.h $(srcdir)/iterator/iter_delegpt.h \ $(srcdir)/util/log.h $(srcdir)/services/cache/dns.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h \ @@ -745,88 +750,106 @@ iter_utils.lo iter_utils.o: $(srcdir)/iterator/iter_utils.c config.h $(srcdir)/i $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/iterator/iter_donotq.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_priv.h \ $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/random.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_kentry.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/str2wire.h + $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/sldns/str2wire.h listen_dnsport.lo listen_dnsport.o: $(srcdir)/services/listen_dnsport.c config.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/mesh.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/services/localzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/net_help.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/as112.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/as112.h mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/dns.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/regional.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/timehist.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/tube.h $(srcdir)/util/alloc.h $(srcdir)/util/config_file.h $(srcdir)/util/edns.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/services/view.h $(srcdir)/util/data/dname.h $(srcdir)/respip/respip.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ + $(srcdir)/util/alloc.h $(srcdir)/util/edns.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/data/dname.h \ $(srcdir)/services/listen_dnsport.h modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/services/modstack.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/dns64/dns64.h \ - $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/respip/respip.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \ - $(srcdir)/ipset/ipset.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h +rpz.lo rpz.o: $(srcdir)/services/rpz.c config.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/str2wire.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h outbound_list.lo outbound_list.o: $(srcdir)/services/outbound_list.c config.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h + outside_network.lo outside_network.o: $(srcdir)/services/outside_network.c config.h \ $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/dnstap/dnstap.h \ - + $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + $(srcdir)/dnstap/dnstap.h alloc.lo alloc.o: $(srcdir)/util/alloc.c config.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/regional.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h config_file.lo config_file.o: $(srcdir)/util/config_file.c config.h $(srcdir)/util/log.h \ $(srcdir)/util/configyyrename.h $(srcdir)/util/config_file.h util/configparser.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/data/dname.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h \ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/util/iana_ports.inc configlexer.lo configlexer.o: util/configlexer.c config.h $(srcdir)/util/configyyrename.h \ $(srcdir)/util/config_file.h util/configparser.h @@ -837,71 +860,83 @@ shm_main.lo shm_main.o: $(srcdir)/util/shm_side/shm_main.c config.h $(srcdir)/ut $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/services/mesh.h \ - $(srcdir)/util/rbtree.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ - $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h + $(srcdir)/util/rbtree.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/tube.h authzone.lo authzone.o: $(srcdir)/services/authzone.c config.h $(srcdir)/services/authzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h \ - $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/util/random.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/random.h \ $(srcdir)/services/cache/dns.h $(srcdir)/services/outside_network.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_secalgo.h + $(srcdir)/services/listen_dnsport.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/keyraw.h $(srcdir)/validator/val_nsec3.h \ + $(srcdir)/validator/val_secalgo.h fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h \ - $(srcdir)/services/outside_network.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/validator/validator.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_nsec3.h \ - $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_neg.h \ - $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h $(srcdir)/libunbound/context.h \ - $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h \ - $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/net_help.h \ - $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h \ + $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \ + $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h \ + $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h \ + $(srcdir)/validator/val_neg.h $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h \ + $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/libunbound/worker.h locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h -mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h +mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h module.lo module.o: $(srcdir)/util/module.c config.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h $(srcdir)/util/tcp_conn_limit.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/services/listen_dnsport.h \ - + $(srcdir)/util/ub_event.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/tcp_conn_limit.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/sldns/str2wire.h \ + $(srcdir)/dnstap/dnstap.h $(srcdir)/services/listen_dnsport.h net_help.lo net_help.o: $(srcdir)/util/net_help.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ - + $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h random.lo random.o: $(srcdir)/util/random.c config.h $(srcdir)/util/random.h $(srcdir)/util/log.h rbtree.lo rbtree.o: $(srcdir)/util/rbtree.c config.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h regional.lo regional.o: $(srcdir)/util/regional.c config.h $(srcdir)/util/log.h $(srcdir)/util/regional.h rtt.lo rtt.o: $(srcdir)/util/rtt.c config.h $(srcdir)/util/rtt.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ @@ -909,19 +944,22 @@ rtt.lo rtt.o: $(srcdir)/util/rtt.c config.h $(srcdir)/util/rtt.h $(srcdir)/itera $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h edns.lo edns.o: $(srcdir)/util/edns.c config.h $(srcdir)/util/edns.h $(srcdir)/util/config_file.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/regional.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h + $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h dnstree.lo dnstree.o: $(srcdir)/util/storage/dnstree.c config.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/net_help.h lookup3.lo lookup3.o: $(srcdir)/util/storage/lookup3.c config.h $(srcdir)/util/storage/lookup3.h lruhash.lo lruhash.o: $(srcdir)/util/storage/lruhash.c config.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h slabhash.lo slabhash.o: $(srcdir)/util/storage/slabhash.c config.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h tcp_conn_limit.lo tcp_conn_limit.o: $(srcdir)/util/tcp_conn_limit.c config.h $(srcdir)/util/regional.h \ @@ -929,26 +967,30 @@ tcp_conn_limit.lo tcp_conn_limit.o: $(srcdir)/util/tcp_conn_limit.c config.h $(s $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/services/localzone.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/str2wire.h + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h timehist.lo timehist.o: $(srcdir)/util/timehist.c config.h $(srcdir)/util/timehist.h $(srcdir)/util/log.h tube.lo tube.o: $(srcdir)/util/tube.c config.h $(srcdir)/util/tube.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h \ - $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/ub_event.h + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/ub_event.h ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/tube.h \ - + $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \ $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h \ - + $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h winsock_event.lo winsock_event.o: $(srcdir)/util/winsock_event.c config.h autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/validator/autotrust.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ @@ -957,10 +999,11 @@ autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/val $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/services/mesh.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/modstack.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/validator/val_kcache.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/keyraw.h \ - + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/respip/respip.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ + $(srcdir)/validator/val_kcache.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/keyraw.h val_anchor.lo val_anchor.o: $(srcdir)/validator/val_anchor.c config.h $(srcdir)/validator/val_anchor.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_sigcrypt.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h \ @@ -977,8 +1020,11 @@ validator.lo validator.o: $(srcdir)/validator/validator.c config.h $(srcdir)/val $(srcdir)/validator/autotrust.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/modstack.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/respip/respip.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h val_kcache.lo val_kcache.o: $(srcdir)/validator/val_kcache.c config.h $(srcdir)/validator/val_kcache.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/validator/val_kentry.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ @@ -987,13 +1033,11 @@ val_kcache.lo val_kcache.o: $(srcdir)/validator/val_kcache.c config.h $(srcdir)/ val_kentry.lo val_kentry.o: $(srcdir)/validator/val_kentry.c config.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ - -val_neg.lo val_neg.o: $(srcdir)/validator/val_neg.c config.h \ - $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ - $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h +val_neg.lo val_neg.o: $(srcdir)/validator/val_neg.c config.h $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/rbtree.h $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_utils.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/services/cache/dns.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h val_nsec3.lo val_nsec3.o: $(srcdir)/validator/val_nsec3.c config.h $(srcdir)/validator/val_nsec3.h \ @@ -1011,17 +1055,15 @@ val_nsec.lo val_nsec.o: $(srcdir)/validator/val_nsec.c config.h $(srcdir)/valida val_secalgo.lo val_secalgo.o: $(srcdir)/validator/val_secalgo.c config.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_secalgo.h \ $(srcdir)/validator/val_nsec3.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/sldns/sbuffer.h \ - + $(srcdir)/sldns/sbuffer.h val_sigcrypt.lo val_sigcrypt.o: $(srcdir)/validator/val_sigcrypt.c config.h \ $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_secalgo.h \ $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/rbtree.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ - $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ - + $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/sldns/wire2str.h val_utils.lo val_utils.o: $(srcdir)/validator/val_utils.c config.h $(srcdir)/validator/val_utils.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ @@ -1037,9 +1079,11 @@ dns64.lo dns64.o: $(srcdir)/dns64/dns64.c config.h $(srcdir)/dns64/dns64.h $(src $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h edns-subnet.lo edns-subnet.o: $(srcdir)/edns-subnet/edns-subnet.c config.h subnetmod.lo subnetmod.o: $(srcdir)/edns-subnet/subnetmod.c config.h addrtree.lo addrtree.o: $(srcdir)/edns-subnet/addrtree.c config.h $(srcdir)/util/log.h \ @@ -1053,36 +1097,16 @@ respip.lo respip.o: $(srcdir)/respip/respip.c config.h $(srcdir)/services/localz $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h \ - $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/respip/respip.h + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/services/cache/dns.h \ + $(srcdir)/sldns/str2wire.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/regional.h checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/testcode/checklocks.h -dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/locks.h $(srcdir)/dnstap/dnstap.h \ - dnstap/dnstap.pb-c.h -dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h \ - -dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/storage/lookup3.h ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h -ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h \ - $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h \ - $(srcdir)/ipsecmod/ipsecmod-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/regional.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h -ipset.lo ipset.o: $(srcdir)/ipset/ipset.c config.h $(srcdir)/ipset/ipset.h $(srcdir)/util/module.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h +ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h unitanchor.lo unitanchor.o: $(srcdir)/testcode/unitanchor.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h @@ -1091,16 +1115,15 @@ unitdname.lo unitdname.o: $(srcdir)/testcode/unitdname.c config.h $(srcdir)/util $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h unitlruhash.lo unitlruhash.o: $(srcdir)/testcode/unitlruhash.c config.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h -unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ +unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/util/rtt.h $(srcdir)/util/timehist.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/libunbound/unbound.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/random.h $(srcdir)/respip/respip.h \ - $(srcdir)/services/localzone.h $(srcdir)/services/view.h + $(srcdir)/util/random.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h unitmsgparse.lo unitmsgparse.o: $(srcdir)/testcode/unitmsgparse.c config.h $(srcdir)/util/log.h \ $(srcdir)/testcode/unitmain.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ @@ -1134,59 +1157,59 @@ unitldns.lo unitldns.o: $(srcdir)/testcode/unitldns.c config.h $(srcdir)/util/lo unitecs.lo unitecs.o: $(srcdir)/testcode/unitecs.c config.h unitauth.lo unitauth.o: $(srcdir)/testcode/unitauth.c config.h $(srcdir)/services/authzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/services/modstack.h $(srcdir)/testcode/unitmain.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/testcode/unitmain.h \ + $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h \ + $(srcdir)/sldns/wire2str.h acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h -cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.h \ - $(srcdir)/daemon/cachedump.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/regional.h \ - $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h +cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.h $(srcdir)/daemon/cachedump.h \ + $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h \ + $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h \ + $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_utils.h \ $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \ $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h -daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/worker.h \ +daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h \ + $(srcdir)/util/storage/lookup3.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/rpz.h $(srcdir)/respip/respip.h $(srcdir)/util/random.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/keyraw.h +remote.lo remote.o: $(srcdir)/daemon/remote.c config.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h \ $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h $(srcdir)/util/storage/lookup3.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/random.h \ - $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/sldns/keyraw.h $(srcdir)/respip/respip.h -remote.lo remote.o: $(srcdir)/daemon/remote.c config.h \ - $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/cachedump.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/alloc.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ + $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ + $(srcdir)/services/modstack.h $(srcdir)/daemon/cachedump.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/net_help.h $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/data/dname.h $(srcdir)/validator/validator.h \ $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \ @@ -1197,56 +1220,59 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/outside_network.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/util/config_file.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ - $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/iterator/iterator.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h \ - + $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/listen_dnsport.h $(srcdir)/util/tube.h \ + $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ + $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h unbound.lo unbound.o: $(srcdir)/daemon/unbound.c config.h $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h \ $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/remote.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h + $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/services/listen_dnsport.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/ub_event.h worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/random.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/rtt.h $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/localzone.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h $(srcdir)/iterator/iter_fwd.h \ - $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h $(srcdir)/validator/val_anchor.h \ - $(srcdir)/respip/respip.h $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ + $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/listen_dnsport.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/outbound_list.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/respip/respip.h $(srcdir)/util/data/msgencode.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h \ + $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h \ + $(srcdir)/validator/val_anchor.h $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h \ $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h testbound.lo testbound.o: $(srcdir)/testcode/testbound.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h $(srcdir)/daemon/remote.h \ - $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/daemon/unbound.c $(srcdir)/daemon/daemon.h \ - $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h + $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h \ + $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/daemon/unbound.c \ + $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h @@ -1254,77 +1280,79 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr $(srcdir)/util/random.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/rtt.h $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/localzone.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h $(srcdir)/iterator/iter_fwd.h \ - $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h $(srcdir)/validator/val_anchor.h \ - $(srcdir)/respip/respip.h $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ + $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/listen_dnsport.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/outbound_list.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/respip/respip.h $(srcdir)/util/data/msgencode.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h \ + $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h \ + $(srcdir)/validator/val_anchor.h $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h \ $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h -daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/worker.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h $(srcdir)/util/storage/lookup3.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/random.h \ - $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/sldns/keyraw.h $(srcdir)/respip/respip.h + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h +daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h \ + $(srcdir)/util/storage/lookup3.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/rpz.h $(srcdir)/respip/respip.h $(srcdir)/util/random.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/keyraw.h stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/outside_network.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/util/config_file.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ - $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/iterator/iterator.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h \ - + $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/listen_dnsport.h $(srcdir)/util/tube.h \ + $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ + $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h replay.lo replay.o: $(srcdir)/testcode/replay.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h \ - $(srcdir)/testcode/testpkts.h $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/rrdef.h + $(srcdir)/testcode/testpkts.h $(srcdir)/util/rbtree.h \ + $(srcdir)/testcode/fake_event.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h fake_event.lo fake_event.o: $(srcdir)/testcode/fake_event.c config.h $(srcdir)/testcode/fake_event.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/config_file.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ - $(srcdir)/testcode/replay.h $(srcdir)/testcode/testpkts.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h + $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ + $(srcdir)/util/rbtree.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h $(srcdir)/testcode/replay.h $(srcdir)/testcode/testpkts.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h lock_verify.lo lock_verify.o: $(srcdir)/testcode/lock_verify.c config.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h pktview.lo pktview.o: $(srcdir)/testcode/pktview.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/testcode/unitmain.h $(srcdir)/testcode/readhex.h $(srcdir)/sldns/sbuffer.h \ @@ -1333,10 +1361,13 @@ readhex.lo readhex.o: $(srcdir)/testcode/readhex.c config.h $(srcdir)/testcode/r $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h memstats.lo memstats.o: $(srcdir)/testcode/memstats.c config.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h unbound-checkconf.lo unbound-checkconf.o: $(srcdir)/smallapp/unbound-checkconf.c config.h $(srcdir)/util/log.h \ $(srcdir)/util/config_file.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ @@ -1344,27 +1375,31 @@ unbound-checkconf.lo unbound-checkconf.o: $(srcdir)/smallapp/unbound-checkconf.c $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_hints.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/services/localzone.h \ - $(srcdir)/services/view.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/services/modstack.h $(srcdir)/respip/respip.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h worker_cb.lo worker_cb.o: $(srcdir)/smallapp/worker_cb.c config.h $(srcdir)/libunbound/context.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h context.lo context.o: $(srcdir)/libunbound/context.c config.h $(srcdir)/libunbound/context.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h \ $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/services/view.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/authzone.h \ - $(srcdir)/services/mesh.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h libunbound.lo libunbound.o: $(srcdir)/libunbound/libunbound.c $(srcdir)/libunbound/unbound.h \ $(srcdir)/libunbound/unbound-event.h config.h $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ @@ -1373,70 +1408,70 @@ libunbound.lo libunbound.o: $(srcdir)/libunbound/libunbound.c $(srcdir)/libunbou $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h \ $(srcdir)/util/random.h $(srcdir)/util/net_help.h $(srcdir)/util/tube.h $(srcdir)/util/ub_event.h \ $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ - $(srcdir)/sldns/sbuffer.h -libworker.lo libworker.o: $(srcdir)/libunbound/libworker.c config.h \ - $(srcdir)/libunbound/libworker.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/outside_network.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/mesh.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/services/view.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/services/authzone.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/tube.h $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/rpz.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h +libworker.lo libworker.o: $(srcdir)/libunbound/libworker.c config.h $(srcdir)/libunbound/libworker.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/worker.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/outside_network.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/outbound_list.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/regional.h $(srcdir)/util/random.h \ $(srcdir)/util/storage/lookup3.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \ $(srcdir)/sldns/str2wire.h unbound-host.lo unbound-host.o: $(srcdir)/smallapp/unbound-host.c config.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h \ - + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h asynclook.lo asynclook.o: $(srcdir)/testcode/asynclook.c config.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/rrdef.h \ - + $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/rrdef.h streamtcp.lo streamtcp.o: $(srcdir)/testcode/streamtcp.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h \ - + $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h perf.lo perf.o: $(srcdir)/testcode/perf.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h delayer.lo delayer.o: $(srcdir)/testcode/delayer.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h -unbound-control.lo unbound-control.o: $(srcdir)/smallapp/unbound-control.c config.h \ - $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/shm_side/shm_main.h $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/stats.h \ - $(srcdir)/util/timehist.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/pkthdr.h +unbound-control.lo unbound-control.o: $(srcdir)/smallapp/unbound-control.c config.h $(srcdir)/util/log.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h $(srcdir)/util/shm_side/shm_main.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/modstack.h $(srcdir)/respip/respip.h unbound-anchor.lo unbound-anchor.o: $(srcdir)/smallapp/unbound-anchor.c config.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h \ - -petal.lo petal.o: $(srcdir)/testcode/petal.c config.h \ - + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h +petal.lo petal.o: $(srcdir)/testcode/petal.c config.h pythonmod_utils.lo pythonmod_utils.o: $(srcdir)/pythonmod/pythonmod_utils.c config.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/net_help.h \ - $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/util/regional.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/regional.h \ + $(srcdir)/iterator/iter_delegpt.h $(srcdir)/sldns/sbuffer.h win_svc.lo win_svc.o: $(srcdir)/winrc/win_svc.c config.h $(srcdir)/winrc/win_svc.h $(srcdir)/winrc/w_inst.h \ $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/daemon/worker.h \ $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ + $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h \ + $(srcdir)/util/net_help.h w_inst.lo w_inst.o: $(srcdir)/winrc/w_inst.c config.h $(srcdir)/winrc/w_inst.h $(srcdir)/winrc/win_svc.h unbound-service-install.lo unbound-service-install.o: $(srcdir)/winrc/unbound-service-install.c config.h \ $(srcdir)/winrc/w_inst.h @@ -1444,14 +1479,12 @@ unbound-service-remove.lo unbound-service-remove.o: $(srcdir)/winrc/unbound-serv $(srcdir)/winrc/w_inst.h anchor-update.lo anchor-update.o: $(srcdir)/winrc/anchor-update.c config.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/wire2str.h -keyraw.lo keyraw.o: $(srcdir)/sldns/keyraw.c config.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/sldns/rrdef.h \ - +keyraw.lo keyraw.o: $(srcdir)/sldns/keyraw.c config.h $(srcdir)/sldns/keyraw.h $(srcdir)/sldns/rrdef.h sbuffer.lo sbuffer.o: $(srcdir)/sldns/sbuffer.c config.h $(srcdir)/sldns/sbuffer.h wire2str.lo wire2str.o: $(srcdir)/sldns/wire2str.c config.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/keyraw.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h + $(srcdir)/sldns/keyraw.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h parse.lo parse.o: $(srcdir)/sldns/parse.c config.h $(srcdir)/sldns/parse.h $(srcdir)/sldns/parseutil.h \ $(srcdir)/sldns/sbuffer.h parseutil.lo parseutil.o: $(srcdir)/sldns/parseutil.c config.h $(srcdir)/sldns/parseutil.h @@ -1471,12 +1504,9 @@ snprintf.lo snprintf.o: $(srcdir)/compat/snprintf.c config.h strlcat.lo strlcat.o: $(srcdir)/compat/strlcat.c config.h strlcpy.lo strlcpy.o: $(srcdir)/compat/strlcpy.c config.h strptime.lo strptime.o: $(srcdir)/compat/strptime.c config.h -getentropy_freebsd.lo getentropy_freebsd.o: $(srcdir)/compat/getentropy_freebsd.c -getentropy_linux.lo getentropy_linux.o: $(srcdir)/compat/getentropy_linux.c config.h \ - +getentropy_linux.lo getentropy_linux.o: $(srcdir)/compat/getentropy_linux.c config.h getentropy_osx.lo getentropy_osx.o: $(srcdir)/compat/getentropy_osx.c -getentropy_solaris.lo getentropy_solaris.o: $(srcdir)/compat/getentropy_solaris.c config.h \ - +getentropy_solaris.lo getentropy_solaris.o: $(srcdir)/compat/getentropy_solaris.c config.h getentropy_win.lo getentropy_win.o: $(srcdir)/compat/getentropy_win.c explicit_bzero.lo explicit_bzero.o: $(srcdir)/compat/explicit_bzero.c config.h arc4random.lo arc4random.o: $(srcdir)/compat/arc4random.c config.h $(srcdir)/compat/chacha_private.h diff --git a/daemon/daemon.c b/daemon/daemon.c index 0b1200a2e..8b0fc3483 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -617,7 +617,8 @@ daemon_fork(struct daemon* daemon) have_view_respip_cfg; /* read auth zonefiles */ - if(!auth_zones_apply_cfg(daemon->env->auth_zones, daemon->cfg, 1)) + if(!auth_zones_apply_cfg(daemon->env->auth_zones, daemon->cfg, 1, + &daemon->use_rpz)) fatal_exit("auth_zones could not be setup"); /* setup modules */ @@ -629,6 +630,12 @@ daemon_fork(struct daemon* daemon) if(daemon->use_response_ip && modstack_find(&daemon->mods, "respip") < 0) fatal_exit("response-ip options require respip module"); + /* RPZ response ip triggers don't work as expected without the respip + * module. To avoid run-time operational surprise we reject such + * configuration. */ + if(daemon->use_rpz && + modstack_find(&daemon->mods, "respip") < 0) + fatal_exit("RPZ requires the respip module"); /* first create all the worker structures, so we can pass * them to the newly created threads. diff --git a/daemon/daemon.h b/daemon/daemon.h index 5749dbef8..3effbafb7 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -132,6 +132,8 @@ struct daemon { struct respip_set* respip_set; /** some response-ip tags or actions are configured if true */ int use_response_ip; + /** some RPZ policies are configured */ + int use_rpz; #ifdef USE_DNSCRYPT /** the dnscrypt environment */ struct dnsc_env* dnscenv; diff --git a/daemon/remote.c b/daemon/remote.c index 25547f570..68186937a 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -69,6 +69,7 @@ #include "services/mesh.h" #include "services/localzone.h" #include "services/authzone.h" +#include "services/rpz.h" #include "util/storage/slabhash.h" #include "util/fptr_wlist.h" #include "util/data/dname.h" @@ -1045,6 +1046,16 @@ print_ext(RES* ssl, struct ub_stats_info* s) (unsigned)s->svr.infra_cache_count)) return 0; if(!ssl_printf(ssl, "key.cache.count"SQ"%u\n", (unsigned)s->svr.key_cache_count)) return 0; + /* applied RPZ actions */ + for(i=0; isvr.rpz_action[i] == 0) + continue; + if(!ssl_printf(ssl, "num.rpz.action.%s"SQ"%lu\n", + rpz_action_to_string(i), + (unsigned long)s->svr.rpz_action[i])) return 0; + } #ifdef USE_DNSCRYPT if(!ssl_printf(ssl, "dnscrypt_shared_secret.cache.count"SQ"%u\n", (unsigned)s->svr.shared_secret_cache_count)) return 0; diff --git a/daemon/stats.c b/daemon/stats.c index a01fb6d34..93a85c618 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -271,8 +271,10 @@ server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset) s->svr.ans_secure += (long long)worker->env.mesh->ans_secure; s->svr.ans_bogus += (long long)worker->env.mesh->ans_bogus; s->svr.ans_rcode_nodata += (long long)worker->env.mesh->ans_nodata; - for(i=0; i<16; i++) + for(i=0; isvr.ans_rcode[i] += (long long)worker->env.mesh->ans_rcode[i]; + for(i=0; isvr.rpz_action[i] += (long long)worker->env.mesh->rpz_action[i]; timehist_export(worker->env.mesh->histogram, s->svr.hist, NUM_BUCKETS_HIST); /* values from outside network */ @@ -446,6 +448,8 @@ void server_stats_add(struct ub_stats_info* total, struct ub_stats_info* a) total->svr.ans_rcode[i] += a->svr.ans_rcode[i]; for(i=0; isvr.hist[i] += a->svr.hist[i]; + for(i=0; isvr.rpz_action[i] += a->svr.rpz_action[i]; } total->mesh_num_states += a->mesh_num_states; diff --git a/daemon/worker.c b/daemon/worker.c index aa16650ec..d41453f7c 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -61,6 +61,7 @@ #include "services/authzone.h" #include "services/mesh.h" #include "services/localzone.h" +#include "services/rpz.h" #include "util/data/msgparse.h" #include "util/data/msgencode.h" #include "util/data/dname.h" @@ -572,9 +573,10 @@ static int apply_respip_action(struct worker* worker, const struct query_info* qinfo, struct respip_client_info* cinfo, struct reply_info* rep, struct comm_reply* repinfo, struct ub_packed_rrset_key** alias_rrset, - struct reply_info** encode_repp) + struct reply_info** encode_repp, struct auth_zones* az) { - struct respip_action_info actinfo = {respip_none, NULL}; + struct respip_action_info actinfo = {0}; + actinfo.action = respip_none; if(qinfo->qtype != LDNS_RR_TYPE_A && qinfo->qtype != LDNS_RR_TYPE_AAAA && @@ -582,7 +584,7 @@ apply_respip_action(struct worker* worker, const struct query_info* qinfo, return 1; if(!respip_rewrite_reply(qinfo, cinfo, rep, encode_repp, &actinfo, - alias_rrset, 0, worker->scratchpad)) + alias_rrset, 0, worker->scratchpad, az)) return 0; /* xxx_deny actions mean dropping the reply, unless the original reply @@ -595,9 +597,20 @@ apply_respip_action(struct worker* worker, const struct query_info* qinfo, /* If address info is returned, it means the action should be an * 'inform' variant and the information should be logged. */ if(actinfo.addrinfo) { - respip_inform_print(actinfo.addrinfo, qinfo->qname, + respip_inform_print(&actinfo, qinfo->qname, qinfo->qtype, qinfo->qclass, qinfo->local_alias, repinfo); + + if(worker->stats.extended && actinfo.rpz_used) { + if(actinfo.rpz_disabled) + worker->stats.rpz_action[RPZ_DISABLED_ACTION] += + actinfo.rpz_disabled; + if(actinfo.rpz_cname_override) + worker->stats.rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; + else + worker->stats.rpz_action[ + respip_action_to_rpz_action(actinfo.action)]++; + } } return 1; @@ -709,13 +722,15 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo, (int)(flags&LDNS_RCODE_MASK), edns, repinfo, worker->scratchpad)) goto bail_out; *alias_rrset = NULL; /* avoid confusion if caller set it to non-NULL */ - if(worker->daemon->use_response_ip && !partial_rep && - !apply_respip_action(worker, qinfo, cinfo, rep, repinfo, alias_rrset, - &encode_rep)) { + if((worker->daemon->use_response_ip || worker->daemon->use_rpz) && + !partial_rep && !apply_respip_action(worker, qinfo, cinfo, rep, + repinfo, alias_rrset, + &encode_rep, worker->env.auth_zones)) { goto bail_out; } else if(partial_rep && !respip_merge_cname(partial_rep, qinfo, rep, cinfo, - must_validate, &encode_rep, worker->scratchpad)) { + must_validate, &encode_rep, worker->scratchpad, + worker->env.auth_zones)) { goto bail_out; } if(encode_rep != rep) @@ -1364,6 +1379,18 @@ worker_handle_request(struct comm_point* c, void* arg, int error, server_stats_insrcode(&worker->stats, c->buffer); goto send_reply; } + if(worker->env.auth_zones && + rpz_apply_qname_trigger(worker->env.auth_zones, + &worker->env, &qinfo, &edns, c->buffer, worker->scratchpad, + repinfo, acladdr->taglist, acladdr->taglen, &worker->stats)) { + regional_free_all(worker->scratchpad); + if(sldns_buffer_limit(c->buffer) == 0) { + comm_point_drop_reply(repinfo); + return 0; + } + server_stats_insrcode(&worker->stats, c->buffer); + goto send_reply; + } if(worker->env.auth_zones && auth_zones_answer(worker->env.auth_zones, &worker->env, &qinfo, &edns, repinfo, c->buffer, worker->scratchpad)) { @@ -1434,7 +1461,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, /* If we may apply IP-based actions to the answer, build the client * information. As this can be expensive, skip it if there is * absolutely no possibility of it. */ - if(worker->daemon->use_response_ip && + if((worker->daemon->use_response_ip || worker->daemon->use_rpz) && (qinfo.qtype == LDNS_RR_TYPE_A || qinfo.qtype == LDNS_RR_TYPE_AAAA || qinfo.qtype == LDNS_RR_TYPE_ANY)) { diff --git a/doc/example.conf.in b/doc/example.conf.in index 9d8edbf9e..ff5c16fc8 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -1006,3 +1006,20 @@ remote-control: # name-v6: "list-v6" # +# Response Policy Zones +# RPZ policies. Applied in order of configuration. QNAME and Response IP +# Address trigger are the only supported triggers. Supported actions are: +# NXDOMAIN, NODATA, PASSTHRU, DROP and Local Data. Policies can be loaded from +# file, using zone transfer, or using HTTP. The respip module needs to be added +# to the module-config, e.g.: module-config: "respip validator iterator". +# rpz: +# name: "rpz.example.com" +# zonefile: "rpz.example.com" +# master: 192.0.2.0 +# allow-notify: 192.0.2.0/32 +# url: http://www.example.com/rpz.example.org.zone +# rpz-action-override: cname +# rpz-cname-override: www.example.org +# rpz-log: yes +# rpz-log-name: "example policy" +# tags: "example" diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in index 6ea40009c..37f88abf7 100644 --- a/doc/unbound-control.8.in +++ b/doc/unbound-control.8.in @@ -660,6 +660,11 @@ Number of queries that got an answer that contained EDNS client subnet data. Number of queries answered from the edns client subnet cache. These are counted as cachemiss by the main counters, but hit the client subnet specific cache, after getting processed by the edns client subnet module. +.TP +.I num.rpz.action. +Number of queries answered using configured RPZ policy, per RPZ action type. +Possible actions are: nxdomain, nodata, passthru, drop, local_data, disabled, +and cname_override. .SH "FILES" .TP .I @ub_conf_file@ diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index a4d925499..5f8043fa5 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -2090,6 +2090,70 @@ If this timeout expires Unbound closes the connection, treats it as if the Redis server does not have the requested data, and will try to re-establish a new connection later. This option defaults to 100 milliseconds. +.SS Response Policy Zone Options +.LP +Response Policy Zones are configured with \fBrpz:\fR, and each one must have a +\fBname:\fR. There can be multiple ones, by listing multiple rpz clauses, each +with a different name. RPZ clauses are applied in order of configuration. The +\fBrespip\fR module needs to be added to the \fBmodule-config\fR, e.g.: +\fBmodule-config: "respip validator iterator"\fR. +.P +Only the QNAME and Response IP Address triggers are supported. The supported RPZ +actions are: NXDOMAIN, NODATA, PASSTHRU, DROP and Local Data. RPZ QNAME triggers +are applied after +\fBlocal-zones\fR and before \fBauth-zones\fR. +.TP +.B name: \fI +Name of the authority zone. +.TP +.B master: \fI +Where to download a copy of the zone from, with AXFR and IXFR. Multiple +masters can be specified. They are all tried if one fails. +.TP +.B url: \fI +Where to download a zonefile for the zone. With http or https. An example +for the url is "http://www.example.com/example.org.zone". Multiple url +statements can be given, they are tried in turn. If only urls are given +the SOA refresh timer is used to wait for making new downloads. If also +masters are listed, the masters are first probed with UDP SOA queries to +see if the SOA serial number has changed, reducing the number of downloads. +If none of the urls work, the masters are tried with IXFR and AXFR. +For https, the \fBtls\-cert\-bundle\fR and the hostname from the url are used +to authenticate the connection. +.TP +.B allow\-notify: \fI +With allow\-notify you can specify additional sources of notifies. +When notified, the server attempts to first probe and then zone transfer. +If the notify is from a master, it first attempts that master. Otherwise +other masters are attempted. If there are no masters, but only urls, the +file is downloaded when notified. The masters from master: statements are +allowed notify by default. +.TP +.B zonefile: \fI +The filename where the zone is stored. If not given then no zonefile is used. +If the file does not exist or is empty, unbound will attempt to fetch zone +data (eg. from the master servers). +.TP +.B rpz\-action\-override: \fI +Always use this RPZ action for matching triggers from this zone. Possible action +are: nxdomain, nodata, passthru, drop, disabled and cname. +.TP +.B rpz\-cname\-override: \fI +The CNAME target domain to use if the cname action is configured for +\fBrpz\-action\-override\fR. +.TP +.B rpz\-log: \fI +Log all applied RPZ actions for this RPZ zone. Default is no. +.TP +.B rpz\-log\-name: \fI +Specify a string to be part of the log line, for easy referencing. +.TP +.B tags: \fI +Limit the policies from this RPZ clause to clients with a matching tag. Tags +need to be defined in \fBdefine\-tag\fR and can be assiged to client addresses +using \fBaccess\-control\-tag\fR. Enclose list of tags in quotes ("") and put +spaces between tags. If no tags are specified the policies from this clause will +be applied for all clients. .SH "MEMORY CONTROL EXAMPLE" In the example config settings below memory usage is reduced. Some service levels are lower, notable very large data and a high TCP load are no longer diff --git a/libunbound/context.c b/libunbound/context.c index b8fe87d2e..6d62e32b5 100644 --- a/libunbound/context.c +++ b/libunbound/context.c @@ -55,6 +55,7 @@ int context_finalize(struct ub_ctx* ctx) { + int is_rpz = 0; struct config_file* cfg = ctx->env->cfg; verbosity = cfg->verbosity; if(ctx_logfile_overridden && !ctx->logfile_override) { @@ -76,7 +77,7 @@ context_finalize(struct ub_ctx* ctx) return UB_NOMEM; if(!local_zones_apply_cfg(ctx->local_zones, cfg)) return UB_INITFAIL; - if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1)) + if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1, &is_rpz)) return UB_INITFAIL; if(!slabhash_is_size(ctx->env->msg_cache, cfg->msg_cache_size, cfg->msg_cache_slabs)) { diff --git a/libunbound/unbound.h b/libunbound/unbound.h index 682ba5530..491222e72 100644 --- a/libunbound/unbound.h +++ b/libunbound/unbound.h @@ -654,6 +654,8 @@ struct ub_shm_stat_info { #define UB_STATS_OPCODE_NUM 16 /** number of histogram buckets */ #define UB_STATS_BUCKET_NUM 40 +/** number of RPZ actions */ +#define UB_STATS_RPZ_ACTION_NUM 10 /** per worker statistics. */ struct ub_server_stats { @@ -785,6 +787,8 @@ struct ub_server_stats { long long mem_stream_wait; /** number of TLS connection resume */ long long qtls_resume; + /** RPZ action stats */ + long long rpz_action[UB_STATS_RPZ_ACTION_NUM]; }; /** diff --git a/respip/respip.c b/respip/respip.c index 632a9df64..7147a051c 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -12,6 +12,7 @@ #include "config.h" #include "services/localzone.h" +#include "services/authzone.h" #include "services/cache/dns.h" #include "sldns/str2wire.h" #include "util/config_file.h" @@ -25,30 +26,6 @@ #include "services/view.h" #include "sldns/rrdef.h" -/** - * Conceptual set of IP addresses for response AAAA or A records that should - * trigger special actions. - */ -struct respip_set { - struct regional* region; - struct rbtree_type ip_tree; - char* const* tagname; /* shallow copy of tag names, for logging */ - int num_tags; /* number of tagname entries */ -}; - -/** An address span with response control information */ -struct resp_addr { - /** node in address tree */ - struct addr_tree_node node; - /** tag bitlist */ - uint8_t* taglist; - /** length of the taglist (in bytes) */ - size_t taglen; - /** action for this address span */ - enum respip_action action; - /** "local data" for this node */ - struct ub_packed_rrset_key* data; -}; /** Subset of resp_addr.node, used for inform-variant logging */ struct respip_addr_info { @@ -88,6 +65,7 @@ respip_set_create(void) return NULL; } addr_tree_init(&set->ip_tree); + lock_rw_init(&set->lock); return set; } @@ -96,6 +74,7 @@ respip_set_delete(struct respip_set* set) { if(!set) return; + lock_rw_destroy(&set->lock); regional_destroy(set->region); free(set); } @@ -108,29 +87,21 @@ respip_set_get_tree(struct respip_set* set) return &set->ip_tree; } -/** returns the node in the address tree for the specified netblock string; - * non-existent node will be created if 'create' is true */ -static struct resp_addr* -respip_find_or_create(struct respip_set* set, const char* ipstr, int create) +struct resp_addr* +respip_sockaddr_find_or_create(struct respip_set* set, struct sockaddr_storage* addr, + socklen_t addrlen, int net, int create, const char* ipstr) { struct resp_addr* node; - struct sockaddr_storage addr; - int net; - socklen_t addrlen; - - if(!netblockstrtoaddr(ipstr, 0, &addr, &addrlen, &net)) { - log_err("cannot parse netblock: '%s'", ipstr); - return NULL; - } - node = (struct resp_addr*)addr_tree_find(&set->ip_tree, &addr, addrlen, net); + node = (struct resp_addr*)addr_tree_find(&set->ip_tree, addr, addrlen, net); if(!node && create) { node = regional_alloc_zero(set->region, sizeof(*node)); if(!node) { log_err("out of memory"); return NULL; } + lock_rw_init(&node->lock); node->action = respip_none; - if(!addr_tree_insert(&set->ip_tree, &node->node, &addr, + if(!addr_tree_insert(&set->ip_tree, &node->node, addr, addrlen, net)) { /* We know we didn't find it, so this should be * impossible. */ @@ -140,6 +111,37 @@ respip_find_or_create(struct respip_set* set, const char* ipstr, int create) return node; } +void +respip_sockaddr_delete(struct respip_set* set, struct resp_addr* node) +{ + struct resp_addr* prev; + prev = (struct resp_addr*)rbtree_previous((struct rbnode_type*)node); + lock_rw_destroy(&node->lock); + rbtree_delete(&set->ip_tree, node); + /* no free'ing, all allocated in region */ + if(!prev) + addr_tree_init_parents((rbtree_type*)set); + else + addr_tree_init_parents_node(&prev->node); +} + +/** returns the node in the address tree for the specified netblock string; + * non-existent node will be created if 'create' is true */ +static struct resp_addr* +respip_find_or_create(struct respip_set* set, const char* ipstr, int create) +{ + struct sockaddr_storage addr; + int net; + socklen_t addrlen; + + if(!netblockstrtoaddr(ipstr, 0, &addr, &addrlen, &net)) { + log_err("cannot parse netblock: '%s'", ipstr); + return NULL; + } + return respip_sockaddr_find_or_create(set, &addr, addrlen, net, create, + ipstr); +} + static int respip_tag_cfg(struct respip_set* set, const char* ipstr, const uint8_t* taglist, size_t taglen) @@ -191,6 +193,10 @@ respip_action_cfg(struct respip_set* set, const char* ipstr, action = respip_always_refuse; else if(strcmp(actnstr, "always_nxdomain") == 0) action = respip_always_nxdomain; + else if(strcmp(actnstr, "always_nodata") == 0) + action = respip_always_nodata; + else if(strcmp(actnstr, "always_deny") == 0) + action = respip_always_deny; else { log_err("unknown response-ip action %s", actnstr); return 0; @@ -232,8 +238,43 @@ new_rrset(struct regional* region, uint16_t rrtype, uint16_t rrclass) } /** enter local data as resource records into a response-ip node */ -static int + +int respip_enter_rr(struct regional* region, struct resp_addr* raddr, + uint16_t rrtype, uint16_t rrclass, time_t ttl, uint8_t* rdata, + size_t rdata_len, const char* rrstr, const char* netblockstr) +{ + struct packed_rrset_data* pd; + struct sockaddr* sa; + sa = (struct sockaddr*)&raddr->node.addr; + if (rrtype == LDNS_RR_TYPE_CNAME && raddr->data) { + log_err("CNAME response-ip data (%s) can not co-exist with other " + "response-ip data for netblock %s", rrstr, netblockstr); + return 0; + } else if (raddr->data && + raddr->data->rk.type == htons(LDNS_RR_TYPE_CNAME)) { + log_err("response-ip data (%s) can not be added; CNAME response-ip " + "data already in place for netblock %s", rrstr, netblockstr); + return 0; + } else if((rrtype != LDNS_RR_TYPE_CNAME) && + ((sa->sa_family == AF_INET && rrtype != LDNS_RR_TYPE_A) || + (sa->sa_family == AF_INET6 && rrtype != LDNS_RR_TYPE_AAAA))) { + log_err("response-ip data %s record type does not correspond " + "to netblock %s address family", rrstr, netblockstr); + return 0; + } + + if(!raddr->data) { + raddr->data = new_rrset(region, rrtype, rrclass); + if(!raddr->data) + return 0; + } + pd = raddr->data->entry.data; + return rrset_insert_rr(region, pd, rdata, rdata_len, ttl, rrstr); +} + +static int +respip_enter_rrstr(struct regional* region, struct resp_addr* raddr, const char* rrstr, const char* netblock) { uint8_t* nm; @@ -244,8 +285,6 @@ respip_enter_rr(struct regional* region, struct resp_addr* raddr, size_t rdata_len = 0; char buf[65536]; char bufshort[64]; - struct packed_rrset_data* pd; - struct sockaddr* sa; int ret; if(raddr->action != respip_redirect && raddr->action != respip_inform_redirect) { @@ -265,31 +304,8 @@ respip_enter_rr(struct regional* region, struct resp_addr* raddr, return 0; } free(nm); - sa = (struct sockaddr*)&raddr->node.addr; - if (rrtype == LDNS_RR_TYPE_CNAME && raddr->data) { - log_err("CNAME response-ip data (%s) can not co-exist with other " - "response-ip data for netblock %s", rrstr, netblock); - return 0; - } else if (raddr->data && - raddr->data->rk.type == htons(LDNS_RR_TYPE_CNAME)) { - log_err("response-ip data (%s) can not be added; CNAME response-ip " - "data already in place for netblock %s", rrstr, netblock); - return 0; - } else if((rrtype != LDNS_RR_TYPE_CNAME) && - ((sa->sa_family == AF_INET && rrtype != LDNS_RR_TYPE_A) || - (sa->sa_family == AF_INET6 && rrtype != LDNS_RR_TYPE_AAAA))) { - log_err("response-ip data %s record type does not correspond " - "to netblock %s address family", rrstr, netblock); - return 0; - } - - if(!raddr->data) { - raddr->data = new_rrset(region, rrtype, rrclass); - if(!raddr->data) - return 0; - } - pd = raddr->data->entry.data; - return rrset_insert_rr(region, pd, rdata, rdata_len, ttl, rrstr); + return respip_enter_rr(region, raddr, rrtype, rrclass, ttl, rdata, + rdata_len, rrstr, netblock); } static int @@ -303,7 +319,7 @@ respip_data_cfg(struct respip_set* set, const char* ipstr, const char* rrstr) "response-ip node for %s not found", rrstr, ipstr); return 0; } - return respip_enter_rr(set->region, node, rrstr, ipstr); + return respip_enter_rrstr(set->region, node, rrstr, ipstr); } static int @@ -564,9 +580,10 @@ rdata2sockaddr(const struct packed_rrset_data* rd, uint16_t rtype, size_t i, * rep->rrsets for the RRset that contains the matching IP address record * (the index is normally 0, but can be larger than that if this is a CNAME * chain or type-ANY response). + * Returns resp_addr holding read lock. */ -static const struct resp_addr* -respip_addr_lookup(const struct reply_info *rep, struct rbtree_type* iptree, +static struct resp_addr* +respip_addr_lookup(const struct reply_info *rep, struct respip_set* rs, size_t* rrset_id) { size_t i; @@ -574,6 +591,7 @@ respip_addr_lookup(const struct reply_info *rep, struct rbtree_type* iptree, struct sockaddr_storage ss; socklen_t addrlen; + lock_rw_rdlock(&rs->lock); for(i=0; ian_numrrsets; i++) { size_t j; const struct packed_rrset_data* rd; @@ -585,15 +603,17 @@ respip_addr_lookup(const struct reply_info *rep, struct rbtree_type* iptree, for(j = 0; j < rd->count; j++) { if(!rdata2sockaddr(rd, rtype, j, &ss, &addrlen)) continue; - ra = (struct resp_addr*)addr_tree_lookup(iptree, &ss, - addrlen); + ra = (struct resp_addr*)addr_tree_lookup(&rs->ip_tree, + &ss, addrlen); if(ra) { *rrset_id = i; + lock_rw_rdlock(&ra->lock); + lock_rw_unlock(&rs->lock); return ra; } } } - + lock_rw_unlock(&rs->lock); return NULL; } @@ -642,8 +662,8 @@ make_new_reply_info(const struct reply_info* rep, struct regional* region, * Note that this function distinguishes error conditions from "success but * not overridden". This is because we want to avoid accidentally applying * the "no data" action in case of error. - * @param raddr: address span that requires an action * @param action: action to apply + * @param data: RRset to use for override * @param qtype: original query type * @param rep: original reply message * @param rrset_id: the rrset ID in 'rep' to which the action should apply @@ -658,14 +678,15 @@ make_new_reply_info(const struct reply_info* rep, struct regional* region, * @return 1 if overridden, 0 if not overridden, -1 on error. */ static int -respip_data_answer(const struct resp_addr* raddr, enum respip_action action, +respip_data_answer(enum respip_action action, + struct ub_packed_rrset_key* data, uint16_t qtype, const struct reply_info* rep, size_t rrset_id, struct reply_info** new_repp, int tag, struct config_strlist** tag_datas, size_t tag_datas_size, char* const* tagname, int num_tags, struct ub_packed_rrset_key** redirect_rrsetp, struct regional* region) { - struct ub_packed_rrset_key* rp = raddr->data; + struct ub_packed_rrset_key* rp = data; struct reply_info* new_rep; *redirect_rrsetp = NULL; @@ -703,7 +724,7 @@ respip_data_answer(const struct resp_addr* raddr, enum respip_action action, * to replace the rrset's dname. Note that, unlike local data, we * rename the dname for other actions than redirect. This is because * response-ip-data isn't associated to any specific name. */ - if(rp == raddr->data) { + if(rp == data) { rp = copy_rrset(rp, region); if(!rp) return -1; @@ -761,6 +782,7 @@ respip_nodata_answer(uint16_t qtype, enum respip_action action, return 1; } else if(action == respip_static || action == respip_redirect || action == respip_always_nxdomain || + action == respip_always_nodata || action == respip_inform_redirect) { /* Since we don't know about other types of the owner name, * we generally return NOERROR/NODATA unless an NXDOMAIN action @@ -794,16 +816,22 @@ populate_action_info(struct respip_action_info* actinfo, enum respip_action action, const struct resp_addr* raddr, const struct ub_packed_rrset_key* ATTR_UNUSED(rrset), int ATTR_UNUSED(tag), const struct respip_set* ATTR_UNUSED(ipset), - int ATTR_UNUSED(action_only), struct regional* region) + int ATTR_UNUSED(action_only), struct regional* region, int rpz_used, + int rpz_log, char* log_name, int rpz_cname_override) { if(action == respip_none || !raddr) return 1; actinfo->action = action; + actinfo->rpz_used = rpz_used; + actinfo->rpz_log = rpz_log; + actinfo->log_name = log_name; + actinfo->rpz_cname_override = rpz_cname_override; /* for inform variants, make a copy of the matched address block for * later logging. We make a copy to proactively avoid disruption if * and when we allow a dynamic update to the respip tree. */ - if(action == respip_inform || action == respip_inform_deny) { + if(action == respip_inform || action == respip_inform_deny || + rpz_used) { struct respip_addr_info* a = regional_alloc_zero(region, sizeof(*a)); if(!a) { @@ -819,12 +847,39 @@ populate_action_info(struct respip_action_info* actinfo, return 1; } +static int +respip_use_rpz(struct resp_addr* raddr, struct rpz* r, + enum respip_action* action, + struct ub_packed_rrset_key** data, int* rpz_log, char** log_name, + int* rpz_cname_override, struct regional* region, int* is_rpz) +{ + if(r->action_override == RPZ_DISABLED_ACTION) { + *is_rpz = 0; + return 1; + } + else if(r->action_override == RPZ_NO_OVERRIDE_ACTION) + *action = raddr->action; + else + *action = rpz_action_to_respip_action(r->action_override); + if(r->action_override == RPZ_CNAME_OVERRIDE_ACTION && + r->cname_override) { + *data = r->cname_override; + *rpz_cname_override = 1; + } + *rpz_log = r->log; + if(r->log_name) + if(!(*log_name = regional_strdup(region, r->log_name))) + return 0; + *is_rpz = 1; + return 1; +} + int respip_rewrite_reply(const struct query_info* qinfo, const struct respip_client_info* cinfo, const struct reply_info* rep, struct reply_info** new_repp, struct respip_action_info* actinfo, struct ub_packed_rrset_key** alias_rrset, int search_only, - struct regional* region) + struct regional* region, struct auth_zones* az) { const uint8_t* ctaglist; size_t ctaglen; @@ -837,9 +892,15 @@ respip_rewrite_reply(const struct query_info* qinfo, size_t rrset_id = 0; enum respip_action action = respip_none; int tag = -1; - const struct resp_addr* raddr = NULL; + struct resp_addr* raddr = NULL; int ret = 1; struct ub_packed_rrset_key* redirect_rrset = NULL; + struct rpz* r; + struct ub_packed_rrset_key* data = NULL; + int rpz_used = 0; + int rpz_log = 0; + int rpz_cname_override = 0; + char* log_name = NULL; if(!cinfo) goto done; @@ -866,7 +927,7 @@ respip_rewrite_reply(const struct query_info* qinfo, lock_rw_rdlock(&view->lock); if(view->respip_set) { if((raddr = respip_addr_lookup(rep, - &view->respip_set->ip_tree, &rrset_id))) { + view->respip_set, &rrset_id))) { /** for per-view respip directives the action * can only be direct (i.e. not tag-based) */ action = raddr->action; @@ -875,7 +936,7 @@ respip_rewrite_reply(const struct query_info* qinfo, if(!raddr && !view->isfirst) goto done; } - if(!raddr && ipset && (raddr = respip_addr_lookup(rep, &ipset->ip_tree, + if(!raddr && ipset && (raddr = respip_addr_lookup(rep, ipset, &rrset_id))) { action = (enum respip_action)local_data_find_tag_action( raddr->taglist, raddr->taglen, ctaglist, ctaglen, @@ -883,6 +944,31 @@ respip_rewrite_reply(const struct query_info* qinfo, (enum localzone_type)raddr->action, &tag, ipset->tagname, ipset->num_tags); } + lock_rw_rdlock(&az->rpz_lock); + for(r = az->rpz_first; r && !raddr; r = r->next) { + if(!r->taglist || taglist_intersect(r->taglist, + r->taglistlen, ctaglist, ctaglen)) { + if((raddr = respip_addr_lookup(rep, + r->respip_set, &rrset_id))) { + } + if(raddr) { + if(!respip_use_rpz(raddr, r, &action, &data, + &rpz_log, &log_name, &rpz_cname_override, + region, &rpz_used)) { + log_err("out of memory"); + lock_rw_unlock(&raddr->lock); + lock_rw_unlock(&az->rpz_lock); + return 0; + } + if(!rpz_used) { + lock_rw_unlock(&raddr->lock); + raddr = NULL; + actinfo->rpz_disabled++; + } + } + } + } + lock_rw_unlock(&az->rpz_lock); if(raddr && !search_only) { int result = 0; @@ -891,10 +977,13 @@ respip_rewrite_reply(const struct query_info* qinfo, if(action != respip_always_refuse && action != respip_always_transparent && action != respip_always_nxdomain - && (result = respip_data_answer(raddr, action, - qinfo->qtype, rep, rrset_id, new_repp, tag, tag_datas, - tag_datas_size, ipset->tagname, ipset->num_tags, - &redirect_rrset, region)) < 0) { + && action != respip_always_nodata + && action != respip_always_deny + && (result = respip_data_answer(action, + (data) ? data : raddr->data, qinfo->qtype, rep, + rrset_id, new_repp, tag, tag_datas, tag_datas_size, + ipset->tagname, ipset->num_tags, &redirect_rrset, + region)) < 0) { ret = 0; goto done; } @@ -925,8 +1014,11 @@ respip_rewrite_reply(const struct query_info* qinfo, *alias_rrset = redirect_rrset; /* on success, populate respip result structure */ ret = populate_action_info(actinfo, action, raddr, - redirect_rrset, tag, ipset, search_only, region); + redirect_rrset, tag, ipset, search_only, region, + rpz_used, rpz_log, log_name, rpz_cname_override); } + if(raddr) + lock_rw_unlock(&raddr->lock); return ret; } @@ -981,14 +1073,15 @@ respip_operate(struct module_qstate* qstate, enum module_ev event, int id, qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA || qstate->qinfo.qtype == LDNS_RR_TYPE_ANY) && qstate->return_msg && qstate->return_msg->rep) { - struct respip_action_info actinfo = {respip_none, NULL}; struct reply_info* new_rep = qstate->return_msg->rep; struct ub_packed_rrset_key* alias_rrset = NULL; + struct respip_action_info actinfo = {0}; + actinfo.action = respip_none; if(!respip_rewrite_reply(&qstate->qinfo, qstate->client_info, qstate->return_msg->rep, &new_rep, &actinfo, &alias_rrset, 0, - qstate->region)) { + qstate->region, qstate->env->auth_zones)) { goto servfail; } if(actinfo.action != respip_none) { @@ -1004,9 +1097,10 @@ respip_operate(struct module_qstate* qstate, enum module_ev event, int id, } else { qstate->respip_action_info = NULL; } - if (new_rep == qstate->return_msg->rep && + if (actinfo.action == respip_always_deny || + (new_rep == qstate->return_msg->rep && (actinfo.action == respip_deny || - actinfo.action == respip_inform_deny)) { + actinfo.action == respip_inform_deny))) { /* for deny-variant actions (unless response-ip * data is applied), mark the query state so * the response will be dropped for all @@ -1034,14 +1128,16 @@ int respip_merge_cname(struct reply_info* base_rep, const struct query_info* qinfo, const struct reply_info* tgt_rep, const struct respip_client_info* cinfo, int must_validate, - struct reply_info** new_repp, struct regional* region) + struct reply_info** new_repp, struct regional* region, + struct auth_zones* az) { struct reply_info* new_rep; struct reply_info* tmp_rep = NULL; /* just a placeholder */ struct ub_packed_rrset_key* alias_rrset = NULL; /* ditto */ uint16_t tgt_rcode; size_t i, j; - struct respip_action_info actinfo = {respip_none, NULL}; + struct respip_action_info actinfo = {0}; + actinfo.action = respip_none; /* If the query for the CNAME target would result in an unusual rcode, * we generally translate it as a failure for the base query @@ -1060,7 +1156,7 @@ respip_merge_cname(struct reply_info* base_rep, /* see if the target reply would be subject to a response-ip action. */ if(!respip_rewrite_reply(qinfo, cinfo, tgt_rep, &tmp_rep, &actinfo, - &alias_rrset, 1, region)) + &alias_rrset, 1, region, az)) return 0; if(actinfo.action != respip_none) { log_info("CNAME target of redirect response-ip action would " @@ -1112,7 +1208,8 @@ respip_inform_super(struct module_qstate* qstate, int id, if(!respip_merge_cname(super->return_msg->rep, &qstate->qinfo, qstate->return_msg->rep, super->client_info, - super->env->need_to_validate, &new_rep, super->region)) + super->env->need_to_validate, &new_rep, super->region, + qstate->env->auth_zones)) goto fail; super->return_msg->rep = new_rep; return; @@ -1171,12 +1268,15 @@ respip_set_is_empty(const struct respip_set* set) } void -respip_inform_print(struct respip_addr_info* respip_addr, uint8_t* qname, +respip_inform_print(struct respip_action_info* respip_actinfo, uint8_t* qname, uint16_t qtype, uint16_t qclass, struct local_rrset* local_alias, struct comm_reply* repinfo) { char srcip[128], respip[128], txt[512]; unsigned port; + struct respip_addr_info* respip_addr = respip_actinfo->addrinfo; + size_t txtlen = 0; + const char* actionstr = NULL; if(local_alias) qname = local_alias->rrset->rk.dname; @@ -1186,7 +1286,23 @@ respip_inform_print(struct respip_addr_info* respip_addr, uint8_t* qname, addr_to_str(&repinfo->addr, repinfo->addrlen, srcip, sizeof(srcip)); addr_to_str(&respip_addr->addr, respip_addr->addrlen, respip, sizeof(respip)); - snprintf(txt, sizeof(txt), "%s/%d inform %s@%u", respip, - respip_addr->net, srcip, port); + if(respip_actinfo->rpz_log) { + txtlen += snprintf(txt+txtlen, sizeof(txt)-txtlen, "%s", + "RPZ applied "); + if(respip_actinfo->rpz_cname_override) + actionstr = rpz_action_to_string( + RPZ_CNAME_OVERRIDE_ACTION); + else + actionstr = rpz_action_to_string( + respip_action_to_rpz_action( + respip_actinfo->action)); + } + if(respip_actinfo->log_name) { + txtlen += snprintf(txt+txtlen, sizeof(txt)-txtlen, + "[%s] ", respip_actinfo->log_name); + } + snprintf(txt+txtlen, sizeof(txt)-txtlen, + "%s/%d %s %s@%u", respip, respip_addr->net, + (actionstr) ? actionstr : "inform", srcip, port); log_nametypeclass(NO_VERBOSE, txt, qname, qtype, qclass); } diff --git a/respip/respip.h b/respip/respip.h index 01309caec..bbd471421 100644 --- a/respip/respip.h +++ b/respip/respip.h @@ -14,23 +14,42 @@ #include "util/module.h" #include "services/localzone.h" +#include "util/locks.h" /** - * Set of response IP addresses with associated actions and tags. - * Forward declaration only here. Actual definition is hidden within the - * module. + * Conceptual set of IP addresses for response AAAA or A records that should + * trigger special actions. */ -struct respip_set; +struct respip_set { + struct regional* region; + struct rbtree_type ip_tree; + lock_rw_type lock; /* lock on the respip tree */ + char* const* tagname; /* shallow copy of tag names, for logging */ + int num_tags; /* number of tagname entries */ +}; + + +/** An address span with response control information */ +struct resp_addr { + /** node in address tree */ + struct addr_tree_node node; + /** lock on the node item */ + lock_rw_type lock; + /** tag bitlist */ + uint8_t* taglist; + /** length of the taglist (in bytes) */ + size_t taglen; + /** action for this address span */ + enum respip_action action; + /** "local data" for this node */ + struct ub_packed_rrset_key* data; +}; -/** - * Forward declaration for the structure that represents a node in the - * respip_set address tree - */ -struct resp_addr; /** * Forward declaration for the structure that represents a tree of view data. */ + struct views; struct respip_addr_info; @@ -60,6 +79,11 @@ struct respip_client_info { */ struct respip_action_info { enum respip_action action; + int rpz_used; + int rpz_log; + int rpz_disabled; + char* log_name; + int rpz_cname_override; struct respip_addr_info* addrinfo; /* set only for inform variants */ }; @@ -124,12 +148,14 @@ int respip_views_apply_cfg(struct views* vs, struct config_file* cfg, * @param new_repp: pointer placeholder for the merged reply. will be intact * on error. * @param region: allocator to build *new_repp. + * @param az: auth zones containing RPZ information. * @return 1 on success, 0 on error. */ int respip_merge_cname(struct reply_info* base_rep, const struct query_info* qinfo, const struct reply_info* tgt_rep, const struct respip_client_info* cinfo, int must_validate, - struct reply_info** new_repp, struct regional* region); + struct reply_info** new_repp, struct regional* region, + struct auth_zones* az); /** * See if any IP-based action should apply to any IP address of AAAA/A answer @@ -148,6 +174,7 @@ int respip_merge_cname(struct reply_info* base_rep, * @param alias_rrset: must not be NULL. * @param search_only: if true, only check if an action would apply. actionp * will be set (or intact) accordingly but the modified reply won't be built. + * @param az: auth zones containing RPZ information. * @param region: allocator to build *new_repp. * @return 1 on success, 0 on error. */ @@ -156,7 +183,7 @@ int respip_rewrite_reply(const struct query_info* qinfo, const struct reply_info *rep, struct reply_info** new_repp, struct respip_action_info* actinfo, struct ub_packed_rrset_key** alias_rrset, - int search_only, struct regional* region); + int search_only, struct regional* region, struct auth_zones* az); /** * Get the response-ip function block. @@ -213,7 +240,7 @@ int respip_set_is_empty(const struct respip_set* set); /** * print log information for a query subject to an inform or inform-deny * response-ip action. - * @param respip_addr: response-ip information that causes the action + * @param respip_actinfo: response-ip information that causes the action * @param qname: query name in the context, will be ignored if local_alias is * non-NULL. * @param qtype: query type, in host byte order. @@ -223,8 +250,48 @@ int respip_set_is_empty(const struct respip_set* set); * query name. * @param repinfo: reply info containing the client's source address and port. */ -void respip_inform_print(struct respip_addr_info* respip_addr, uint8_t* qname, - uint16_t qtype, uint16_t qclass, struct local_rrset* local_alias, - struct comm_reply* repinfo); +void respip_inform_print(struct respip_action_info* respip_actinfo, + uint8_t* qname, uint16_t qtype, uint16_t qclass, + struct local_rrset* local_alias, struct comm_reply* repinfo); +/** + * Find resp_addr in tree, create and add to tree if it does not exist. + * @param set: struct containing the tree and region to alloc new node on. + * should hold write lock. + * @param addr: address to look up. + * @param addrlen: length of addr. + * @param net: netblock to lookup. + * @param create: create node if it does not exist when 1. + * @param ipstr: human redable ip string, for logging. + * @return newly created of found node, not holding lock. + */ +struct resp_addr* +respip_sockaddr_find_or_create(struct respip_set* set, struct sockaddr_storage* addr, + socklen_t addrlen, int net, int create, const char* ipstr); + +/** + * Add RR to resp_addr's RRset. Create RRset if not existing. + * @param region: region to alloc RR(set). + * @param raddr: resp_addr containing RRset. Must hold write lock. + * @param rrtype: RR type. + * @param rrclass: RR class. + * @param ttl: TTL. + * @param rdata: RDATA. + * @param rdata_len: length of rdata. + * @param rrstr: RR as string, for logging + * @param netblockstr: netblock as string, for logging + * @return 0 on error + */ +int +respip_enter_rr(struct regional* region, struct resp_addr* raddr, + uint16_t rrtype, uint16_t rrclass, time_t ttl, uint8_t* rdata, + size_t rdata_len, const char* rrstr, const char* netblockstr); + +/** + * Delete resp_addr node from tree. + * @param set: struct containing tree. Must hold write lock. + * @param node: node to delete. Not locked. + */ +void +respip_sockaddr_delete(struct respip_set* set, struct resp_addr* node); #endif /* RESPIP_RESPIP_H */ diff --git a/services/authzone.c b/services/authzone.c index bad649c39..edff3e6dd 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -381,11 +381,25 @@ auth_data_del(rbnode_type* n, void* ATTR_UNUSED(arg)) /** delete an auth zone structure (tree remove must be done elsewhere) */ static void -auth_zone_delete(struct auth_zone* z) +auth_zone_delete(struct auth_zone* z, struct auth_zones* az) { if(!z) return; lock_rw_destroy(&z->lock); traverse_postorder(&z->data, auth_data_del, NULL); + + if(az && z->rpz) { + /* keep RPZ linked list intact */ + lock_rw_wrlock(&az->rpz_lock); + if(z->rpz->prev) + z->rpz->prev->next = z->rpz->next; + else + az->rpz_first = z->rpz->next; + if(z->rpz->next) + z->rpz->next->prev = z->rpz->prev; + lock_rw_unlock(&az->rpz_lock); + } + if(z->rpz) + rpz_delete(z->rpz); free(z->name); free(z->zonefile); free(z); @@ -415,7 +429,7 @@ auth_zone_create(struct auth_zones* az, uint8_t* nm, size_t nmlen, /* z lock protects all, except rbtree itself, which is az->lock */ if(!rbtree_insert(&az->ztree, &z->node)) { lock_rw_unlock(&z->lock); - auth_zone_delete(z); + auth_zone_delete(z, NULL); log_warn("duplicate auth zone"); return NULL; } @@ -660,23 +674,6 @@ domain_remove_rrset(struct auth_data* node, uint16_t rr_type) } } -/** find an rr index in the rrset. returns true if found */ -static int -az_rrset_find_rr(struct packed_rrset_data* d, uint8_t* rdata, size_t len, - size_t* index) -{ - size_t i; - for(i=0; icount; i++) { - if(d->rr_len[i] != len) - continue; - if(memcmp(d->rr_data[i], rdata, len) == 0) { - *index = i; - return 1; - } - } - return 0; -} - /** find an rrsig index in the rrset. returns true if found */ static int az_rrset_find_rrsig(struct packed_rrset_data* d, uint8_t* rdata, size_t len, @@ -1178,6 +1175,12 @@ az_insert_rr(struct auth_zone* z, uint8_t* rr, size_t rr_len, log_err("cannot add RR to domain"); return 0; } + if(z->rpz) { + if(!(rpz_insert_rr(z->rpz, z->namelen, dname, dname_len, + rr_type, rr_class, rr_ttl, rdata, rdatalen, rr, + rr_len))) + return 0; + } return 1; } @@ -1192,7 +1195,7 @@ az_domain_remove_rr(struct auth_data* node, uint16_t rr_type, /* find the plain RR of the given type */ if((rrset=az_domain_rrset(node, rr_type))!= NULL) { - if(az_rrset_find_rr(rrset->data, rdata, rdatalen, &index)) { + if(packed_rrset_find_rr(rrset->data, rdata, rdatalen, &index)) { if(rrset->data->count == 1 && rrset->data->rrsig_count == 0) { /* last RR, delete the rrset */ @@ -1293,6 +1296,10 @@ az_remove_rr(struct auth_zone* z, uint8_t* rr, size_t rr_len, (void)rbtree_delete(&z->data, node); auth_data_delete(node); } + if(z->rpz) { + rpz_remove_rr(z->rpz, z->namelen, dname, dname_len, rr_type, + rr_class, rdata, rdatalen); + } return 1; } @@ -1585,6 +1592,9 @@ auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg) /* clear the data tree */ traverse_postorder(&z->data, auth_data_del, NULL); rbtree_init(&z->data, &auth_data_cmp); + /* clear the RPZ policies */ + if(z->rpz) + rpz_clear(z->rpz); memset(&state, 0, sizeof(state)); /* default TTL to 3600 */ @@ -1604,6 +1614,9 @@ auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg) return 0; } fclose(in); + + if(z->rpz) + rpz_finish_config(z->rpz); return 1; } @@ -1877,6 +1890,18 @@ auth_zones_cfg(struct auth_zones* az, struct config_auth* c) z->for_downstream = c->for_downstream; z->for_upstream = c->for_upstream; z->fallback_enabled = c->fallback_enabled; + if(c->isrpz && !z->rpz){ + if(!(z->rpz = rpz_create(c))){ + fatal_exit("Could not setup RPZ zones"); + return 0; + } + lock_rw_wrlock(&az->rpz_lock); + z->rpz->next = az->rpz_first; + if(az->rpz_first) + az->rpz_first->prev = z->rpz; + az->rpz_first = z->rpz; + lock_rw_unlock(&az->rpz_lock); + } /* xfer zone */ if(x) { @@ -1947,14 +1972,14 @@ az_delete_deleted_zones(struct auth_zones* az) auth_xfer_delete(xfr); } (void)rbtree_delete(&az->ztree, &z->node); - auth_zone_delete(z); + auth_zone_delete(z, az); z = next; } lock_rw_unlock(&az->lock); } int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, - int setup) + int setup, int* is_rpz) { struct config_auth* p; az_setall_deleted(az); @@ -1963,6 +1988,7 @@ int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, log_warn("auth-zone without a name, skipped"); continue; } + *is_rpz = (*is_rpz || p->isrpz); if(!auth_zones_cfg(az, p)) { log_err("cannot config auth zone %s", p->name); return 0; @@ -2063,7 +2089,7 @@ static void auth_zone_del(rbnode_type* n, void* ATTR_UNUSED(arg)) { struct auth_zone* z = (struct auth_zone*)n->key; - auth_zone_delete(z); + auth_zone_delete(z, NULL); } /** helper traverse to delete xfer zones */ @@ -4690,6 +4716,10 @@ apply_axfr(struct auth_xfer* xfr, struct auth_zone* z, /* clear the data tree */ traverse_postorder(&z->data, auth_data_del, NULL); rbtree_init(&z->data, &auth_data_cmp); + /* clear the RPZ policies */ + if(z->rpz) + rpz_clear(z->rpz); + xfr->have_zone = 0; xfr->serial = 0; @@ -4786,6 +4816,10 @@ apply_http(struct auth_xfer* xfr, struct auth_zone* z, /* clear the data tree */ traverse_postorder(&z->data, auth_data_del, NULL); rbtree_init(&z->data, &auth_data_cmp); + /* clear the RPZ policies */ + if(z->rpz) + rpz_clear(z->rpz); + xfr->have_zone = 0; xfr->serial = 0; @@ -4971,6 +5005,9 @@ xfr_process_chunk_list(struct auth_xfer* xfr, struct module_env* env, if(xfr->have_zone) xfr->lease_time = *env->now; + if(z->rpz) + rpz_finish_config(z->rpz); + /* unlock */ lock_rw_unlock(&z->lock); diff --git a/services/authzone.h b/services/authzone.h index a695bd029..9bb131ad8 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -46,6 +46,7 @@ #include "util/rbtree.h" #include "util/locks.h" #include "services/mesh.h" +#include "services/rpz.h" struct ub_packed_rrset_key; struct regional; struct config_file; @@ -81,6 +82,11 @@ struct auth_zones { size_t num_query_up; /** number of queries downstream */ size_t num_query_down; + /** first rpz item in linked list */ + struct rpz* rpz_first; + /** rw lock for rpz linked list, needed when iterating or editing linked + * list. */ + lock_rw_type rpz_lock; }; /** @@ -126,6 +132,8 @@ struct auth_zone { /** for upstream: this zone answers queries that unbound intends to * send upstream. */ int for_upstream; + /** RPZ zones */ + struct rpz* rpz; /** zone has been deleted */ int zone_deleted; /** deletelist pointer, unused normally except during delete */ @@ -460,10 +468,11 @@ struct auth_zones* auth_zones_create(void); * @param az: auth zones structure * @param cfg: config to apply. * @param setup: if true, also sets up values in the auth zones structure + * @param is_rpz: set to 1 if at least one RPZ zone is configured. * @return false on failure. */ int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, - int setup); + int setup, int* is_rpz); /** initial pick up of worker timeouts, ties events to worker event loop * @param az: auth zones structure diff --git a/services/localzone.c b/services/localzone.c index 492bb8304..3f86aa0f4 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -41,7 +41,6 @@ #include "config.h" #include "services/localzone.h" #include "sldns/str2wire.h" -#include "sldns/sbuffer.h" #include "util/regional.h" #include "util/config_file.h" #include "util/data/dname.h" @@ -395,9 +394,30 @@ rrset_insert_rr(struct regional* region, struct packed_rrset_data* pd, return 1; } -/** find a data node by exact name */ -static struct local_data* -lz_find_node(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs) +/** Delete RR from local-zone RRset, wastes memory as the deleted RRs cannot be + * free'd (regionally alloc'd) */ +int +local_rrset_remove_rr(struct packed_rrset_data* pd, size_t index) +{ + log_assert(pd->count > 0); + if(index >= pd->count) { + log_warn("Trying to remove RR with out of bound index"); + return 0; + } + if(index + 1 < pd->count) { + /* not removing last element */ + size_t nexti = index + 1; + size_t num = pd->count - nexti; + memmove(pd->rr_len+index, pd->rr_len+nexti, sizeof(*pd->rr_len)*num); + memmove(pd->rr_ttl+index, pd->rr_ttl+nexti, sizeof(*pd->rr_ttl)*num); + memmove(pd->rr_data+index, pd->rr_data+nexti, sizeof(*pd->rr_data)*num); + } + pd->count--; + return 1; +} + +struct local_data* +local_zone_find_data(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs) { struct local_data key; key.node.key = &key; @@ -412,7 +432,7 @@ static int lz_find_create_node(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs, struct local_data** res) { - struct local_data* ld = lz_find_node(z, nm, nmlen, nmlabs); + struct local_data* ld = local_zone_find_data(z, nm, nmlen, nmlabs); if(!ld) { /* create a domain name to store rr. */ ld = (struct local_data*)regional_alloc_zero(z->region, @@ -443,42 +463,19 @@ lz_find_create_node(struct local_zone* z, uint8_t* nm, size_t nmlen, return 1; } -/** enter data RR into auth zone */ -static int -lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) +int +local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, + int nmlabs, uint16_t rrtype, uint16_t rrclass, time_t ttl, + uint8_t* rdata, size_t rdata_len, const char* rrstr) { - uint8_t* nm; - size_t nmlen; - int nmlabs; struct local_data* node; struct local_rrset* rrset; struct packed_rrset_data* pd; - uint16_t rrtype = 0, rrclass = 0; - time_t ttl = 0; - uint8_t rr[LDNS_RR_BUF_SIZE]; - uint8_t* rdata; - size_t rdata_len; - if(!rrstr_get_rr_content(rrstr, &nm, &rrtype, &rrclass, &ttl, rr, - sizeof(rr), &rdata, &rdata_len)) { - log_err("bad local-data: %s", rrstr); - return 0; - } - log_assert(z->dclass == rrclass); - if((z->type == local_zone_redirect || - z->type == local_zone_inform_redirect) && - query_dname_compare(z->name, nm) != 0) { - log_err("local-data in redirect zone must reside at top of zone" - ", not at %s", rrstr); - free(nm); - return 0; - } - nmlabs = dname_count_size_labels(nm, &nmlen); + if(!lz_find_create_node(z, nm, nmlen, nmlabs, &node)) { - free(nm); return 0; } log_assert(node); - free(nm); /* Reject it if we would end up having CNAME and other data (including * another CNAME) for a redirect zone. */ @@ -520,6 +517,39 @@ lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) return rrset_insert_rr(z->region, pd, rdata, rdata_len, ttl, rrstr); } +/** enter data RR into auth zone */ +int +lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) +{ + uint8_t* nm; + size_t nmlen; + int nmlabs, ret; + uint16_t rrtype = 0, rrclass = 0; + time_t ttl = 0; + uint8_t rr[LDNS_RR_BUF_SIZE]; + uint8_t* rdata; + size_t rdata_len; + if(!rrstr_get_rr_content(rrstr, &nm, &rrtype, &rrclass, &ttl, rr, + sizeof(rr), &rdata, &rdata_len)) { + log_err("bad local-data: %s", rrstr); + return 0; + } + log_assert(z->dclass == rrclass); + if((z->type == local_zone_redirect || + z->type == local_zone_inform_redirect) && + query_dname_compare(z->name, nm) != 0) { + log_err("local-data in redirect zone must reside at top of zone" + ", not at %s", rrstr); + free(nm); + return 0; + } + nmlabs = dname_count_size_labels(nm, &nmlen); + ret = local_zone_enter_rr(z, nm, nmlen, nmlabs, rrtype, rrclass, ttl, + rdata, rdata_len, rrstr); + free(nm); + return ret; +} + /** enter a data RR into auth data; a zone for it must exist */ static int lz_enter_rr_str(struct local_zones* zones, const char* rr) @@ -1113,6 +1143,22 @@ local_zones_find(struct local_zones* zones, return (struct local_zone*)rbtree_search(&zones->ztree, &key); } +struct local_zone* +local_zones_find_le(struct local_zones* zones, + uint8_t* name, size_t len, int labs, uint16_t dclass, + int* exact) +{ + struct local_zone key; + rbnode_type *node; + key.node.key = &key; + key.dclass = dclass; + key.name = name; + key.namelen = len; + key.namelabs = labs; + *exact = rbtree_find_less_equal(&zones->ztree, &key, &node); + return (struct local_zone*)node; +} + /** print all RRsets in local zone */ static void local_zone_out(struct local_zone* z) @@ -1309,8 +1355,7 @@ find_tag_datas(struct query_info* qinfo, struct config_strlist* list, return result; } -/** answer local data match */ -static int +int local_data_answer(struct local_zone* z, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf, @@ -1362,16 +1407,69 @@ local_data_answer(struct local_zone* z, struct module_env* env, lz_type == local_zone_inform_redirect) && qinfo->qtype != LDNS_RR_TYPE_CNAME && lr->rrset->rk.type == htons(LDNS_RR_TYPE_CNAME)) { + uint8_t* ctarget; + size_t ctargetlen = 0; + qinfo->local_alias = regional_alloc_zero(temp, sizeof(struct local_rrset)); if(!qinfo->local_alias) return 0; /* out of memory */ - qinfo->local_alias->rrset = - regional_alloc_init(temp, lr->rrset, sizeof(*lr->rrset)); + qinfo->local_alias->rrset = regional_alloc_init( + temp, lr->rrset, sizeof(*lr->rrset)); if(!qinfo->local_alias->rrset) return 0; /* out of memory */ qinfo->local_alias->rrset->rk.dname = qinfo->qname; qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len; + get_cname_target(lr->rrset, &ctarget, &ctargetlen); + if(!ctargetlen) + return 0; /* invalid cname */ + if(dname_is_wild(ctarget)) { + /* synthesize cname target */ + struct packed_rrset_data* d; + /* -3 for wildcard label and root label from qname */ + size_t newtargetlen = qinfo->qname_len + ctargetlen - 3; + + log_assert(ctargetlen >= 3); + log_assert(qinfo->qname_len >= 1); + + if(newtargetlen > LDNS_MAX_DOMAINLEN) { + qinfo->local_alias = NULL; + local_error_encode(qinfo, env, edns, repinfo, + buf, temp, LDNS_RCODE_YXDOMAIN, + (LDNS_RCODE_YXDOMAIN|BIT_AA)); + return 1; + } + memset(&qinfo->local_alias->rrset->entry, 0, + sizeof(qinfo->local_alias->rrset->entry)); + qinfo->local_alias->rrset->entry.key = + qinfo->local_alias->rrset; + qinfo->local_alias->rrset->entry.hash = + rrset_key_hash(&qinfo->local_alias->rrset->rk); + d = (struct packed_rrset_data*)regional_alloc_zero(temp, + sizeof(struct packed_rrset_data) + sizeof(size_t) + + sizeof(uint8_t*) + sizeof(time_t) + sizeof(uint16_t) + + newtargetlen); + if(!d) + return 0; /* out of memory */ + qinfo->local_alias->rrset->entry.data = d; + d->ttl = 0; /* 0 for synthesized CNAME TTL */ + d->count = 1; + d->rrsig_count = 0; + d->trust = rrset_trust_ans_noAA; + d->rr_len = (size_t*)((uint8_t*)d + + sizeof(struct packed_rrset_data)); + d->rr_len[0] = newtargetlen + sizeof(uint16_t); + packed_rrset_ptr_fixup(d); + d->rr_ttl[0] = d->ttl; + sldns_write_uint16(d->rr_data[0], newtargetlen); + /* write qname */ + memmove(d->rr_data[0] + sizeof(uint16_t), qinfo->qname, + qinfo->qname_len - 1); + /* write cname target wilcard wildcard label */ + memmove(d->rr_data[0] + sizeof(uint16_t) + + qinfo->qname_len - 1, ctarget + 2, + ctargetlen - 2); + } return 1; } if(lz_type == local_zone_redirect || @@ -1416,26 +1514,15 @@ local_zone_does_not_cover(struct local_zone* z, struct query_info* qinfo, return (lr == NULL); } -/** - * Answer in case where no exact match is found. - * @param z: zone for query. - * @param env: module environment. - * @param qinfo: query. - * @param edns: edns from query. - * @param repinfo: source address for checks. may be NULL. - * @param buf: buffer for answer. - * @param temp: temp region for encoding. - * @param ld: local data, if NULL, no such name exists in localdata. - * @param lz_type: type of the local zone. - * @return 1 if a reply is to be sent, 0 if not. - */ -static int -lz_zone_answer(struct local_zone* z, struct module_env* env, +int +local_zones_zone_answer(struct local_zone* z, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf, struct regional* temp, struct local_data* ld, enum localzone_type lz_type) { - if(lz_type == local_zone_deny || lz_type == local_zone_inform_deny) { + if(lz_type == local_zone_deny || + lz_type == local_zone_always_deny || + lz_type == local_zone_inform_deny) { /** no reply at all, signal caller by clearing buffer. */ sldns_buffer_clear(buf); sldns_buffer_flip(buf); @@ -1448,7 +1535,8 @@ lz_zone_answer(struct local_zone* z, struct module_env* env, } else if(lz_type == local_zone_static || lz_type == local_zone_redirect || lz_type == local_zone_inform_redirect || - lz_type == local_zone_always_nxdomain) { + lz_type == local_zone_always_nxdomain || + lz_type == local_zone_always_nodata) { /* for static, reply nodata or nxdomain * for redirect, reply nodata */ /* no additional section processing, @@ -1457,7 +1545,8 @@ lz_zone_answer(struct local_zone* z, struct module_env* env, * or using closest match for returning delegation downwards */ int rcode = (ld || lz_type == local_zone_redirect || - lz_type == local_zone_inform_redirect)? + lz_type == local_zone_inform_redirect || + lz_type == local_zone_always_nodata)? LDNS_RCODE_NOERROR:LDNS_RCODE_NXDOMAIN; if(z->soa) return local_encode(qinfo, env, edns, repinfo, buf, temp, @@ -1640,6 +1729,8 @@ local_zones_answer(struct local_zones* zones, struct module_env* env, if(lzt != local_zone_always_refuse && lzt != local_zone_always_transparent && lzt != local_zone_always_nxdomain + && lzt != local_zone_always_nodata + && lzt != local_zone_always_deny && local_data_answer(z, env, qinfo, edns, repinfo, buf, temp, labs, &ld, lzt, tag, tag_datas, tag_datas_size, tagname, num_tags)) { lock_rw_unlock(&z->lock); @@ -1647,7 +1738,7 @@ local_zones_answer(struct local_zones* zones, struct module_env* env, * a local alias. */ return !qinfo->local_alias; } - r = lz_zone_answer(z, env, qinfo, edns, repinfo, buf, temp, ld, lzt); + r = local_zones_zone_answer(z, env, qinfo, edns, repinfo, buf, temp, ld, lzt); lock_rw_unlock(&z->lock); return r && !qinfo->local_alias; /* see above */ } @@ -1669,7 +1760,10 @@ const char* local_zone_type2str(enum localzone_type t) case local_zone_always_transparent: return "always_transparent"; case local_zone_always_refuse: return "always_refuse"; case local_zone_always_nxdomain: return "always_nxdomain"; + case local_zone_always_nodata: return "always_nodata"; + case local_zone_always_deny: return "always_deny"; case local_zone_noview: return "noview"; + case local_zone_invalid: return "invalid"; } return "badtyped"; } @@ -1700,6 +1794,10 @@ int local_zone_str2type(const char* type, enum localzone_type* t) *t = local_zone_always_refuse; else if(strcmp(type, "always_nxdomain") == 0) *t = local_zone_always_nxdomain; + else if(strcmp(type, "always_nodata") == 0) + *t = local_zone_always_nodata; + else if(strcmp(type, "always_deny") == 0) + *t = local_zone_always_deny; else if(strcmp(type, "noview") == 0) *t = local_zone_noview; else if(strcmp(type, "nodefault") == 0) @@ -1843,7 +1941,7 @@ del_empty_term(struct local_zone* z, struct local_data* d, return; dname_remove_label(&name, &len); labs--; - d = lz_find_node(z, name, len, labs); + d = local_zone_find_data(z, name, len, labs); } } @@ -1876,7 +1974,7 @@ void local_zones_del_data(struct local_zones* zones, z = local_zones_lookup(zones, name, len, labs, dclass, LDNS_RR_TYPE_DS); if(z) { lock_rw_wrlock(&z->lock); - d = lz_find_node(z, name, len, labs); + d = local_zone_find_data(z, name, len, labs); if(d) { del_local_rrset(d, LDNS_RR_TYPE_DS); del_empty_term(z, d, name, len, labs); @@ -1897,7 +1995,7 @@ void local_zones_del_data(struct local_zones* zones, lock_rw_unlock(&zones->lock); /* find the domain */ - d = lz_find_node(z, name, len, labs); + d = local_zone_find_data(z, name, len, labs); if(d) { /* no memory recycling for zone deletions ... */ d->rrsets = NULL; diff --git a/services/localzone.h b/services/localzone.h index 1d6caeff2..bb3593936 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -46,6 +46,7 @@ #include "util/storage/dnstree.h" #include "util/module.h" #include "services/view.h" +#include "sldns/sbuffer.h" struct packed_rrset_data; struct ub_packed_rrset_key; struct regional; @@ -91,8 +92,14 @@ enum localzone_type { local_zone_always_refuse, /** answer with nxdomain, even when there is local data */ local_zone_always_nxdomain, + /** answer with noerror/nodata, even when there is local data */ + local_zone_always_nodata, + /** drop query, even when there is local data */ + local_zone_always_deny, /** answer not from the view, but global or no-answer */ - local_zone_noview + local_zone_noview, + /** Invalid type, cannot be used to generate answer */ + local_zone_invalid }; /** @@ -310,6 +317,25 @@ int local_zones_answer(struct local_zones* zones, struct module_env* env, struct config_strlist** tag_datas, size_t tag_datas_size, char** tagname, int num_tags, struct view* view); +/** + * Answer using the local zone only (not local data used). + * @param z: zone for query. + * @param env: module environment. + * @param qinfo: query. + * @param edns: edns from query. + * @param repinfo: source address for checks. may be NULL. + * @param buf: buffer for answer. + * @param temp: temp region for encoding. + * @param ld: local data, if NULL, no such name exists in localdata. + * @param lz_type: type of the local zone. + * @return 1 if a reply is to be sent, 0 if not. + */ +int +local_zones_zone_answer(struct local_zone* z, struct module_env* env, + struct query_info* qinfo, struct edns_data* edns, + struct comm_reply* repinfo, sldns_buffer* buf, struct regional* temp, + struct local_data* ld, enum localzone_type lz_type); + /** * Parse the string into localzone type. * @@ -340,6 +366,22 @@ const char* local_zone_type2str(enum localzone_type t); struct local_zone* local_zones_find(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass); +/** + * Find zone that with exactly or smaller name/class + * User must lock the tree or result zone. + * @param zones: the zones tree + * @param name: dname to lookup + * @param len: length of name. + * @param labs: labelcount of name. + * @param dclass: class to lookup. + * @param exact: 1 on return is this is an exact match. + * @return the exact or smaller local_zone or NULL. + */ +struct local_zone* +local_zones_find_le(struct local_zones* zones, + uint8_t* name, size_t len, int labs, uint16_t dclass, + int* exact); + /** * Add a new zone. Caller must hold the zones lock. * Adjusts the other zones as well (parent pointers) after insertion. @@ -473,6 +515,15 @@ int rrstr_get_rr_content(const char* str, uint8_t** nm, uint16_t* type, int rrset_insert_rr(struct regional* region, struct packed_rrset_data* pd, uint8_t* rdata, size_t rdata_len, time_t ttl, const char* rrstr); +/** + * Remove RR from rrset that is created using localzone's rrset_insert_rr. + * @param pd: the RRset containing the RR to remove + * @param index: index of RR to remove + * @return: 1 on success; 0 otherwise. + */ +int +local_rrset_remove_rr(struct packed_rrset_data* pd, size_t index); + /** * Valid response ip actions for the IP-response-driven-action feature; * defined here instead of in the respip module to enable sharing of enum @@ -501,6 +552,10 @@ enum respip_action { respip_always_refuse = local_zone_always_refuse, /** answer with 'no such domain' response */ respip_always_nxdomain = local_zone_always_nxdomain, + /** answer with nodata response */ + respip_always_nodata = local_zone_always_nodata, + /** answer with nodata response */ + respip_always_deny = local_zone_always_deny, /* The rest of the values are only possible as * access-control-tag-action */ @@ -513,6 +568,64 @@ enum respip_action { respip_transparent = local_zone_transparent, /** gives response data (if any), else nodata answer. */ respip_typetransparent = local_zone_typetransparent, + /** type invalid */ + respip_invalid = local_zone_invalid, }; +/** + * Get local data from local zone and encode answer. + * @param z: local zone to use + * @param env: module env + * @param qinfo: qinfo + * @param edns: edns data, for message encoding + * @param repinfo: reply info, for message encoding + * @param buf: commpoint buffer + * @param temp: scratchpad region + * @param labs: number of labels in qname + * @param ldp: where to store local data + * @param lz_type: type of local zone + * @param tag: matching tag index + * @param tag_datas: alc specific tag data list + * @param tag_datas_size: size of tag_datas + * @param tagname: list of names of tags, for logging purpose + * @param num_tags: number of tags + * @return 1 on success + */ +int +local_data_answer(struct local_zone* z, struct module_env* env, + struct query_info* qinfo, struct edns_data* edns, + struct comm_reply* repinfo, sldns_buffer* buf, + struct regional* temp, int labs, struct local_data** ldp, + enum localzone_type lz_type, int tag, struct config_strlist** tag_datas, + size_t tag_datas_size, char** tagname, int num_tags); + +/** + * Add RR to local zone. + * @param z: local zone to add RR to + * @param nm: dname of RR + * @param nmlen: length of nm + * @param nmlabs: number of labels of nm + * @param rrtype: RR type + * @param rrclass: RR class + * @param ttl: TTL of RR to add + * @param rdata: RDATA of RR to add + * @param rdata_len: length of rdata + * @param rrstr: RR in string format, for logging + * @return: 1 on success + */ +int +local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, + int nmlabs, uint16_t rrtype, uint16_t rrclass, time_t ttl, + uint8_t* rdata, size_t rdata_len, const char* rrstr); + +/** + * Find a data node by exact name for a local zone + * @param z: local_zone containing data tree + * @param nm: name of local-data element to find + * @param nmlen: length of nm + * @param nmlabs: labs of nm + * @return local_data on exact match, NULL otherwise. + */ +struct local_data* +local_zone_find_data(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs); #endif /* SERVICES_LOCALZONE_H */ diff --git a/services/mesh.c b/services/mesh.c index d4f814d5a..039eab53a 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1184,10 +1184,21 @@ void mesh_query_done(struct mesh_state* mstate) * information should be logged for each client. */ if(mstate->s.respip_action_info && mstate->s.respip_action_info->addrinfo) { - respip_inform_print(mstate->s.respip_action_info->addrinfo, + respip_inform_print(mstate->s.respip_action_info, r->qname, mstate->s.qinfo.qtype, mstate->s.qinfo.qclass, r->local_alias, &r->query_reply); + if(mstate->s.env->cfg->stat_extended && + mstate->s.respip_action_info->rpz_used) { + if(mstate->s.respip_action_info->rpz_disabled) + mstate->s.env->mesh->rpz_action[RPZ_DISABLED_ACTION] += + mstate->s.respip_action_info->rpz_disabled; + if(mstate->s.respip_action_info->rpz_cname_override) + mstate->s.env->mesh->rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; + else + mstate->s.env->mesh->rpz_action[respip_action_to_rpz_action( + mstate->s.respip_action_info->action)]++; + } } /* if this query is determined to be dropped during the @@ -1581,7 +1592,8 @@ mesh_stats_clear(struct mesh_area* mesh) timehist_clear(mesh->histogram); mesh->ans_secure = 0; mesh->ans_bogus = 0; - memset(&mesh->ans_rcode[0], 0, sizeof(size_t)*16); + memset(&mesh->ans_rcode[0], 0, sizeof(size_t)*UB_STATS_RCODE_NUM); + memset(&mesh->rpz_action[0], 0, sizeof(size_t)*UB_STATS_RPZ_ACTION_NUM); mesh->ans_nodata = 0; } diff --git a/services/mesh.h b/services/mesh.h index a2622844b..9c2b2c97c 100644 --- a/services/mesh.h +++ b/services/mesh.h @@ -51,6 +51,8 @@ #include "util/data/msgparse.h" #include "util/module.h" #include "services/modstack.h" +#include "services/rpz.h" +#include "libunbound/unbound.h" struct sldns_buffer; struct mesh_state; struct mesh_reply; @@ -121,9 +123,11 @@ struct mesh_area { /** (extended stats) bogus replies */ size_t ans_bogus; /** (extended stats) rcodes in replies */ - size_t ans_rcode[16]; + size_t ans_rcode[UB_STATS_RCODE_NUM]; /** (extended stats) rcode nodata in replies */ size_t ans_nodata; + /** (extended stats) type of applied RPZ action */ + size_t rpz_action[UB_STATS_RPZ_ACTION_NUM]; /** backup of query if other operations recurse and need the * network buffers */ diff --git a/services/rpz.c b/services/rpz.c new file mode 100644 index 000000000..1047852ad --- /dev/null +++ b/services/rpz.c @@ -0,0 +1,1013 @@ +/* + * services/rpz.c - rpz service + * + * Copyright (c) 2019, NLnet Labs. All rights reserved. + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NLNET LABS nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * \file + * + * This file contains functions to enable RPZ service. + */ + +#include "config.h" +#include "services/rpz.h" +#include "util/config_file.h" +#include "sldns/wire2str.h" +#include "sldns/str2wire.h" +#include "util/data/dname.h" +#include "util/net_help.h" +#include "util/log.h" +#include "util/data/dname.h" +#include "util/locks.h" +#include "util/regional.h" + +/** string for RPZ action enum */ +const char* +rpz_action_to_string(enum rpz_action a) +{ + switch(a) { + case RPZ_NXDOMAIN_ACTION: return "nxdomain"; + case RPZ_NODATA_ACTION: return "nodata"; + case RPZ_PASSTHRU_ACTION: return "passthru"; + case RPZ_DROP_ACTION: return "drop"; + case RPZ_TCP_ONLY_ACTION: return "tcp_only"; + case RPZ_INVALID_ACTION: return "invalid"; + case RPZ_LOCAL_DATA_ACTION: return "local_data"; + case RPZ_DISABLED_ACTION: return "disabled"; + case RPZ_CNAME_OVERRIDE_ACTION: return "cname_override"; + case RPZ_NO_OVERRIDE_ACTION: return "no_override"; + } + return "unknown"; +} + +/** RPZ action enum for config string */ +static enum rpz_action +rpz_config_to_action(char* a) +{ + if(strcmp(a, "nxdomain") == 0) + return RPZ_NXDOMAIN_ACTION; + else if(strcmp(a, "nodata") == 0) + return RPZ_NODATA_ACTION; + else if(strcmp(a, "passthru") == 0) + return RPZ_PASSTHRU_ACTION; + else if(strcmp(a, "drop") == 0) + return RPZ_DROP_ACTION; + else if(strcmp(a, "tcp_only") == 0) + return RPZ_TCP_ONLY_ACTION; + else if(strcmp(a, "cname") == 0) + return RPZ_CNAME_OVERRIDE_ACTION; + else if(strcmp(a, "disabled") == 0) + return RPZ_DISABLED_ACTION; + return RPZ_INVALID_ACTION; +} + +/** string for RPZ trigger enum */ +static const char* +rpz_trigger_to_string(enum rpz_trigger r) +{ + switch(r) { + case RPZ_QNAME_TRIGGER: return "qname"; + case RPZ_CLIENT_IP_TRIGGER: return "client_ip"; + case RPZ_RESPONSE_IP_TRIGGER: return "response_ip"; + case RPZ_NSDNAME_TRIGGER: return "nsdname"; + case RPZ_NSIP_TRIGGER: return "nsip"; + case RPZ_INVALID_TRIGGER: return "invalid"; + } + return "unknown"; +} + +/** + * Get the label that is just before the root label. + * @param dname: dname to work on + * @param maxdnamelen: maximum length of the dname + * @return: pointer to TLD label, NULL if not found or invalid dname + */ +static uint8_t* +get_tld_label(uint8_t* dname, size_t maxdnamelen) +{ + uint8_t* prevlab = dname; + size_t dnamelen = 0; + + /* one byte needed for label length */ + if(dnamelen+1 > maxdnamelen) + return NULL; + + /* only root label */ + if(*dname == 0) + return NULL; + + while(*dname) { + dnamelen += ((size_t)*dname)+1; + if(dnamelen+1 > maxdnamelen) + return NULL; + dname = dname+((size_t)*dname)+1; + if(*dname != 0) + prevlab = dname; + } + return prevlab; +} + +/** + * Classify RPZ action for RR type/rdata + * @param rr_type: the RR type + * @param rdatawl: RDATA with 2 bytes length + * @param rdatalen: the length of rdatawl (including its 2 bytes length) + * @return: the RPZ action + */ +static enum rpz_action +rpz_rr_to_action(uint16_t rr_type, uint8_t* rdatawl, size_t rdatalen) +{ + char* endptr; + uint8_t* rdata; + int rdatalabs; + uint8_t* tldlab = NULL; + + switch(rr_type) { + case LDNS_RR_TYPE_SOA: + case LDNS_RR_TYPE_NS: + case LDNS_RR_TYPE_DNAME: + /* all DNSSEC-related RRs must be ignored */ + case LDNS_RR_TYPE_DNSKEY: + case LDNS_RR_TYPE_DS: + case LDNS_RR_TYPE_RRSIG: + case LDNS_RR_TYPE_NSEC: + case LDNS_RR_TYPE_NSEC3: + return RPZ_INVALID_ACTION; + case LDNS_RR_TYPE_CNAME: + break; + default: + return RPZ_LOCAL_DATA_ACTION; + } + + /* use CNAME target to determine RPZ action */ + log_assert(rr_type == LDNS_RR_TYPE_CNAME); + if(rdatalen < 3) + return RPZ_INVALID_ACTION; + + rdata = rdatawl + 2; /* 2 bytes of rdata length */ + if(dname_valid(rdata, rdatalen-2) != rdatalen-2) + return RPZ_INVALID_ACTION; + + rdatalabs = dname_count_labels(rdata); + if(rdatalabs == 1) + return RPZ_NXDOMAIN_ACTION; + else if(rdatalabs == 2) { + if(dname_subdomain_c(rdata, (uint8_t*)&"\001*\000")) + return RPZ_NODATA_ACTION; + else if(dname_subdomain_c(rdata, + (uint8_t*)&"\014rpz-passthru\000")) + return RPZ_PASSTHRU_ACTION; + else if(dname_subdomain_c(rdata, (uint8_t*)&"\010rpz-drop\000")) + return RPZ_DROP_ACTION; + else if(dname_subdomain_c(rdata, + (uint8_t*)&"\014rpz-tcp-only\000")) + return RPZ_TCP_ONLY_ACTION; + } + + /* all other TLDs starting with "rpz-" are invalid */ + tldlab = get_tld_label(rdata, rdatalen-2); + if(tldlab && dname_lab_startswith(tldlab, "rpz-", &endptr)) + return RPZ_INVALID_ACTION; + + /* no special label found */ + return RPZ_LOCAL_DATA_ACTION; +} + +static enum localzone_type +rpz_action_to_localzone_type(enum rpz_action a) +{ + switch(a) { + case RPZ_NXDOMAIN_ACTION: return local_zone_always_nxdomain; + case RPZ_NODATA_ACTION: return local_zone_always_nodata; + case RPZ_DROP_ACTION: return local_zone_always_deny; + case RPZ_PASSTHRU_ACTION: return local_zone_always_transparent; + case RPZ_LOCAL_DATA_ACTION: /* fallthrough */ + case RPZ_CNAME_OVERRIDE_ACTION: return local_zone_redirect; + case RPZ_INVALID_ACTION: /* fallthrough */ + case RPZ_TCP_ONLY_ACTION: /* fallthrough */ + default: return local_zone_invalid; + } +} + +enum respip_action +rpz_action_to_respip_action(enum rpz_action a) +{ + switch(a) { + case RPZ_NXDOMAIN_ACTION: return respip_always_nxdomain; + case RPZ_NODATA_ACTION: return respip_always_nodata; + case RPZ_DROP_ACTION: return respip_always_deny; + case RPZ_PASSTHRU_ACTION: return respip_always_transparent; + case RPZ_LOCAL_DATA_ACTION: /* fallthrough */ + case RPZ_CNAME_OVERRIDE_ACTION: return respip_redirect; + case RPZ_INVALID_ACTION: /* fallthrough */ + case RPZ_TCP_ONLY_ACTION: /* fallthrough */ + default: return respip_invalid; + } +} + +static enum rpz_action +localzone_type_to_rpz_action(enum localzone_type lzt) +{ + switch(lzt) { + case local_zone_always_nxdomain: return RPZ_NXDOMAIN_ACTION; + case local_zone_always_nodata: return RPZ_NODATA_ACTION; + case local_zone_always_deny: return RPZ_DROP_ACTION; + case local_zone_always_transparent: return RPZ_PASSTHRU_ACTION; + case local_zone_redirect: return RPZ_LOCAL_DATA_ACTION; + case local_zone_invalid: + default: + return RPZ_INVALID_ACTION; + } +} + +enum rpz_action +respip_action_to_rpz_action(enum respip_action a) +{ + switch(a) { + case respip_always_nxdomain: return RPZ_NXDOMAIN_ACTION; + case respip_always_nodata: return RPZ_NODATA_ACTION; + case respip_always_deny: return RPZ_DROP_ACTION; + case respip_always_transparent: return RPZ_PASSTHRU_ACTION; + case respip_redirect: return RPZ_LOCAL_DATA_ACTION; + case respip_invalid: + default: + return RPZ_INVALID_ACTION; + } +} + +/** + * Get RPZ trigger for dname + * @param dname: dname containing RPZ trigger + * @param dname_len: length of the dname + * @return: RPZ trigger enum + */ +static enum rpz_trigger +rpz_dname_to_trigger(uint8_t* dname, size_t dname_len) +{ + uint8_t* tldlab; + char* endptr; + + if(dname_valid(dname, dname_len) != dname_len) + return RPZ_INVALID_TRIGGER; + + tldlab = get_tld_label(dname, dname_len); + if(!tldlab || !dname_lab_startswith(tldlab, "rpz-", &endptr)) + return RPZ_QNAME_TRIGGER; + + if(dname_subdomain_c(tldlab, + (uint8_t*)&"\015rpz-client-ip\000")) + return RPZ_CLIENT_IP_TRIGGER; + else if(dname_subdomain_c(tldlab, (uint8_t*)&"\006rpz-ip\000")) + return RPZ_RESPONSE_IP_TRIGGER; + else if(dname_subdomain_c(tldlab, (uint8_t*)&"\013rpz-nsdname\000")) + return RPZ_NSDNAME_TRIGGER; + else if(dname_subdomain_c(tldlab, (uint8_t*)&"\010rpz-nsip\000")) + return RPZ_NSIP_TRIGGER; + + return RPZ_QNAME_TRIGGER; +} + +void rpz_delete(struct rpz* r) +{ + if(!r) + return; + local_zones_delete(r->local_zones); + respip_set_delete(r->respip_set); + regional_destroy(r->region); + free(r->taglist); + free(r->log_name); + free(r); +} + +int +rpz_clear(struct rpz* r) +{ + /* must hold write lock on auth_zone */ + local_zones_delete(r->local_zones); + respip_set_delete(r->respip_set); + if(!(r->local_zones = local_zones_create())){ + return 0; + } + if(!(r->respip_set = respip_set_create())) { + return 0; + } + return 1; +} + +void +rpz_finish_config(struct rpz* r) +{ + lock_rw_wrlock(&r->respip_set->lock); + addr_tree_init_parents(&r->respip_set->ip_tree); + lock_rw_unlock(&r->respip_set->lock); +} + +/** new rrset containing CNAME override, does not yet contain a dname */ +static struct ub_packed_rrset_key* +new_cname_override(struct regional* region, uint8_t* ct, size_t ctlen) +{ + struct ub_packed_rrset_key* rrset; + struct packed_rrset_data* pd; + uint16_t rdlength = htons(ctlen); + rrset = (struct ub_packed_rrset_key*)regional_alloc_zero(region, + sizeof(*rrset)); + if(!rrset) { + log_err("out of memory"); + return NULL; + } + rrset->entry.key = rrset; + pd = (struct packed_rrset_data*)regional_alloc_zero(region, sizeof(*pd)); + if(!pd) { + log_err("out of memory"); + return NULL; + } + pd->trust = rrset_trust_prim_noglue; + pd->security = sec_status_insecure; + + pd->count = 1; + pd->rr_len = regional_alloc_zero(region, sizeof(*pd->rr_len)); + pd->rr_ttl = regional_alloc_zero(region, sizeof(*pd->rr_ttl)); + pd->rr_data = regional_alloc_zero(region, sizeof(*pd->rr_data)); + if(!pd->rr_len || !pd->rr_ttl || !pd->rr_data) { + log_err("out of memory"); + return NULL; + } + pd->rr_len[0] = ctlen+2; + pd->rr_ttl[0] = 3600; + pd->rr_data[0] = regional_alloc_zero(region, 2 /* rdlength */ + ctlen); + if(!pd->rr_data[0]) { + log_err("out of memory"); + return NULL; + } + memmove(pd->rr_data[0], &rdlength, 2); + memmove(pd->rr_data[0]+2, ct, ctlen); + + rrset->entry.data = pd; + rrset->rk.type = htons(LDNS_RR_TYPE_CNAME); + rrset->rk.rrset_class = htons(LDNS_RR_CLASS_IN); + return rrset; +} + +struct rpz* +rpz_create(struct config_auth* p) +{ + struct rpz* r = calloc(1, sizeof(*r)); + if(!r) + goto err; + + r->region = regional_create_custom(sizeof(struct regional)); + if(!r->region) { + goto err; + } + + if(!(r->local_zones = local_zones_create())){ + goto err; + } + if(!(r->respip_set = respip_set_create())) { + goto err; + } + r->taglistlen = p->rpz_taglistlen; + r->taglist = memdup(p->rpz_taglist, r->taglistlen); + if(p->rpz_action_override) { + r->action_override = rpz_config_to_action(p->rpz_action_override); + } + else + r->action_override = RPZ_NO_OVERRIDE_ACTION; + + if(r->action_override == RPZ_CNAME_OVERRIDE_ACTION) { + uint8_t nm[LDNS_MAX_DOMAINLEN+1]; + size_t nmlen = sizeof(nm); + + if(!p->rpz_cname) { + log_err("RPZ override with cname action found, but no " + "rpz-cname-override configured"); + goto err; + } + + if(sldns_str2wire_dname_buf(p->rpz_cname, nm, &nmlen) != 0) { + log_err("cannot parse RPZ cname override: %s", + p->rpz_cname); + goto err; + } + r->cname_override = new_cname_override(r->region, nm, nmlen); + if(!r->cname_override) { + goto err; + } + } + r->log = p->rpz_log; + if(p->rpz_log_name) { + if(!(r->log_name = strdup(p->rpz_log_name))) { + log_err("malloc failure on RPZ log_name strdup"); + goto err; + } + } + return r; +err: + if(r) { + if(r->local_zones) + local_zones_delete(r->local_zones); + if(r->respip_set) + respip_set_delete(r->respip_set); + if(r->taglist) + free(r->taglist); + free(r); + } + return NULL; +} + +/** + * Remove RPZ zone name from dname + * Copy dname to newdname, without the originlen number of trailing bytes + */ +static size_t +strip_dname_origin(uint8_t* dname, size_t dnamelen, size_t originlen, + uint8_t* newdname, size_t maxnewdnamelen) +{ + size_t newdnamelen; + if(dnamelen < originlen) + return 0; + newdnamelen = dnamelen - originlen; + if(newdnamelen+1 > maxnewdnamelen) + return 0; + memmove(newdname, dname, newdnamelen); + newdname[newdnamelen] = 0; + return newdnamelen + 1; /* + 1 for root label */ +} + +/** Insert RR into RPZ's local-zone */ +static void +rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, + enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl, + uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len) +{ + struct local_zone* z; + enum localzone_type tp = local_zone_always_transparent; + int dnamelabs = dname_count_labels(dname); + char* rrstr; + int newzone = 0; + + if(a == RPZ_TCP_ONLY_ACTION || a == RPZ_INVALID_ACTION) { + verbose(VERB_ALGO, "RPZ: skipping unsupported action: %s", + rpz_action_to_string(a)); + free(dname); + return; + } + + lock_rw_wrlock(&r->local_zones->lock); + /* exact match */ + z = local_zones_find(r->local_zones, dname, dnamelen, dnamelabs, + LDNS_RR_CLASS_IN); + if(z && a != RPZ_LOCAL_DATA_ACTION) { + rrstr = sldns_wire2str_rr(rr, rr_len); + if(!rrstr) { + log_err("malloc error while inserting RPZ qname " + "trigger"); + free(dname); + lock_rw_unlock(&r->local_zones->lock); + return; + } + verbose(VERB_ALGO, "RPZ: skipping duplicate record: '%s'", + rrstr); + free(rrstr); + free(dname); + lock_rw_unlock(&r->local_zones->lock); + return; + } + if(!z) { + tp = rpz_action_to_localzone_type(a); + if(!(z = local_zones_add_zone(r->local_zones, dname, dnamelen, + dnamelabs, rrclass, tp))) { + log_warn("RPZ create failed"); + lock_rw_unlock(&r->local_zones->lock); + /* dname will be free'd in failed local_zone_create() */ + return; + } + newzone = 1; + } + if(a == RPZ_LOCAL_DATA_ACTION) { + rrstr = sldns_wire2str_rr(rr, rr_len); + if(!rrstr) { + log_err("malloc error while inserting RPZ qname " + "trigger"); + free(dname); + lock_rw_unlock(&r->local_zones->lock); + return; + } + local_zone_enter_rr(z, dname, dnamelen, dnamelabs, + rrtype, rrclass, ttl, rdata, rdata_len, rrstr); + free(rrstr); + } + if(!newzone) + free(dname); + lock_rw_unlock(&r->local_zones->lock); + return; +} + +/** Insert RR into RPZ's respip_set */ +static int +rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, + enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl, + uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len) +{ + struct resp_addr* node; + struct sockaddr_storage addr; + socklen_t addrlen; + int net, af; + char* rrstr; + enum respip_action respa = rpz_action_to_respip_action(a); + + if(a == RPZ_TCP_ONLY_ACTION || a == RPZ_INVALID_ACTION || + respa == respip_invalid) { + verbose(VERB_ALGO, "RPZ: skipping unsupported action: %s", + rpz_action_to_string(a)); + return 0; + } + + if(!netblockdnametoaddr(dname, dnamelen, &addr, &addrlen, &net, &af)) + return 0; + + lock_rw_wrlock(&r->respip_set->lock); + rrstr = sldns_wire2str_rr(rr, rr_len); + if(!rrstr) { + log_err("malloc error while inserting RPZ respip trigger"); + lock_rw_unlock(&r->respip_set->lock); + return 0; + } + if(!(node=respip_sockaddr_find_or_create(r->respip_set, &addr, addrlen, + net, 1, rrstr))) { + lock_rw_unlock(&r->respip_set->lock); + free(rrstr); + return 0; + } + + lock_rw_wrlock(&node->lock); + lock_rw_unlock(&r->respip_set->lock); + node->action = respa; + + if(a == RPZ_LOCAL_DATA_ACTION) { + respip_enter_rr(r->respip_set->region, node, rrtype, + rrclass, ttl, rdata, rdata_len, rrstr, ""); + } + lock_rw_unlock(&node->lock); + free(rrstr); + return 1; +} + +int +rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, + size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, + uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len) +{ + size_t policydnamelen; + /* name is free'd in local_zone delete */ + enum rpz_trigger t; + enum rpz_action a; + uint8_t* policydname; + + log_assert(dnamelen >= aznamelen); + if(!(policydname = calloc(1, (dnamelen-aznamelen)+1))) + return 0; + + a = rpz_rr_to_action(rr_type, rdatawl, rdatalen); + if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, + policydname, (dnamelen-aznamelen)+1))) { + free(policydname); + return 0; + } + t = rpz_dname_to_trigger(policydname, policydnamelen); + if(t == RPZ_INVALID_TRIGGER) { + free(policydname); + verbose(VERB_ALGO, "RPZ: skipping invalid trigger"); + return 1; + } + if(t == RPZ_QNAME_TRIGGER) { + rpz_insert_qname_trigger(r, policydname, policydnamelen, + a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, + rr_len); + } + else if(t == RPZ_RESPONSE_IP_TRIGGER) { + rpz_insert_response_ip_trigger(r, policydname, policydnamelen, + a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, + rr_len); + free(policydname); + } + else { + free(policydname); + verbose(VERB_ALGO, "RPZ: skipping unsupported trigger: %s", + rpz_trigger_to_string(t)); + } + return 1; +} + +/** + * Find RPZ local-zone by qname. + * @param r: rpz containing local-zone tree + * @param qname: qname + * @param qname_len: length of qname + * @param qclass: qclass + * @param only_exact: if 1 only excact (non wildcard) matches are returned + * @param wr: get write lock for local-zone if 1, read lock if 0 + * @param zones_keep_lock: if set do not release the r->local_zones lock, this + * makes the caller of this function responsible for releasing the lock. + * @return: NULL or local-zone holding rd or wr lock + */ +static struct local_zone* +rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, + int only_exact, int wr, int zones_keep_lock) +{ + uint8_t* ce; + size_t ce_len, ce_labs; + uint8_t wc[LDNS_MAX_DOMAINLEN+1]; + int exact; + struct local_zone* z = NULL; + if(wr) { + lock_rw_wrlock(&r->local_zones->lock); + } else { + lock_rw_rdlock(&r->local_zones->lock); + } + z = local_zones_find_le(r->local_zones, qname, qname_len, + dname_count_labels(qname), + LDNS_RR_CLASS_IN, &exact); + if(!z || (only_exact && !exact)) { + lock_rw_unlock(&r->local_zones->lock); + return NULL; + } + if(wr) { + lock_rw_wrlock(&z->lock); + } else { + lock_rw_rdlock(&z->lock); + } + if(!zones_keep_lock) { + lock_rw_unlock(&r->local_zones->lock); + } + + if(exact) + return z; + + /* No exact match found, lookup wildcard. closest encloser must + * be the shared parent between the qname and the best local + * zone match, append '*' to that and do another lookup. */ + + ce = dname_get_shared_topdomain(z->name, qname); + if(!ce /* should not happen */ || !*ce /* root */) { + lock_rw_unlock(&z->lock); + if(zones_keep_lock) { + lock_rw_unlock(&r->local_zones->lock); + } + return NULL; + } + ce_labs = dname_count_size_labels(ce, &ce_len); + if(ce_len+2 > sizeof(wc)) { + lock_rw_unlock(&z->lock); + if(zones_keep_lock) { + lock_rw_unlock(&r->local_zones->lock); + } + return NULL; + } + wc[0] = 1; /* length of wildcard label */ + wc[1] = (uint8_t)'*'; /* wildcard label */ + memmove(wc+2, ce, ce_len); + lock_rw_unlock(&z->lock); + + if(!zones_keep_lock) { + if(wr) { + lock_rw_wrlock(&r->local_zones->lock); + } else { + lock_rw_rdlock(&r->local_zones->lock); + } + } + z = local_zones_find_le(r->local_zones, wc, + ce_len+2, ce_labs+1, qclass, &exact); + if(!z || !exact) { + lock_rw_unlock(&r->local_zones->lock); + return NULL; + } + if(wr) { + lock_rw_wrlock(&z->lock); + } else { + lock_rw_rdlock(&z->lock); + } + if(!zones_keep_lock) { + lock_rw_unlock(&r->local_zones->lock); + } + return z; +} + +/** + * Remove RR from RPZ's local-data + * @param z: local-zone for RPZ, holding write lock + * @param policydname: dname of RR to remove + * @param policydnamelen: lenth of policydname + * @param rr_type: RR type of RR to remove + * @param rdata: rdata of RR to remove + * @param rdatalen: length of rdata + * @return: 1 if zone must be removed after RR deletion + */ +static int +rpz_data_delete_rr(struct local_zone* z, uint8_t* policydname, + size_t policydnamelen, uint16_t rr_type, uint8_t* rdata, + size_t rdatalen) +{ + struct local_data* ld; + struct packed_rrset_data* d; + size_t index; + ld = local_zone_find_data(z, policydname, policydnamelen, + dname_count_labels(policydname)); + if(ld) { + struct local_rrset* prev=NULL, *p=ld->rrsets; + while(p && ntohs(p->rrset->rk.type) != rr_type) { + prev = p; + p = p->next; + } + if(!p) + return 0; + d = (struct packed_rrset_data*)p->rrset->entry.data; + if(packed_rrset_find_rr(d, rdata, rdatalen, &index)) { + if(d->count == 1) { + /* no memory recycling for zone deletions ... */ + if(prev) prev->next = p->next; + else ld->rrsets = p->next; + } + if(d->count > 1) { + if(!local_rrset_remove_rr(d, index)) + return 0; + } + } + } + if(ld && ld->rrsets) + return 0; + return 1; +} + +/** + * Remove RR from RPZ's respip set + * @param raddr: respip node + * @param rr_type: RR type of RR to remove + * @param rdata: rdata of RR to remove + * @param rdatalen: length of rdata + * @return: 1 if zone must be removed after RR deletion + */ +static int +rpz_rrset_delete_rr(struct resp_addr* raddr, uint16_t rr_type, uint8_t* rdata, + size_t rdatalen) +{ + size_t index; + struct packed_rrset_data* d; + if(!raddr->data) + return 1; + d = raddr->data->entry.data; + if(ntohs(raddr->data->rk.type) != rr_type) { + return 0; + } + if(packed_rrset_find_rr(d, rdata, rdatalen, &index)) { + if(d->count == 1) { + /* regional alloc'd */ + raddr->data->entry.data = NULL; + raddr->data = NULL; + return 1; + } + if(d->count > 1) { + if(!local_rrset_remove_rr(d, index)) + return 0; + } + } + return 0; + +} + +/** Remove RR from RPZ's local-zone */ +static void +rpz_remove_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, + enum rpz_action a, uint16_t rr_type, uint16_t rr_class, + uint8_t* rdatawl, size_t rdatalen) +{ + struct local_zone* z; + int delete_zone = 1; + z = rpz_find_zone(r, dname, dnamelen, rr_class, + 1 /* only exact */, 1 /* wr lock */, 1 /* keep lock*/); + if(!z) { + verbose(VERB_ALGO, "RPZ: cannot remove RR from IXFR, " + "RPZ domain not found"); + return; + } + if(a == RPZ_LOCAL_DATA_ACTION) + delete_zone = rpz_data_delete_rr(z, dname, + dnamelen, rr_type, rdatawl, rdatalen); + else if(a != localzone_type_to_rpz_action(z->type)) { + return; + } + lock_rw_unlock(&z->lock); + if(delete_zone) { + local_zones_del_zone(r->local_zones, z); + } + lock_rw_unlock(&r->local_zones->lock); + return; +} + +static void +rpz_remove_response_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, + enum rpz_action a, uint16_t rr_type, uint8_t* rdatawl, size_t rdatalen) +{ + struct resp_addr* node; + struct sockaddr_storage addr; + socklen_t addrlen; + int net, af; + int delete_respip = 1; + + if(!netblockdnametoaddr(dname, dnamelen, &addr, &addrlen, &net, &af)) + return; + + lock_rw_wrlock(&r->respip_set->lock); + if(!(node = (struct resp_addr*)addr_tree_find( + &r->respip_set->ip_tree, &addr, addrlen, net))) { + verbose(VERB_ALGO, "RPZ: cannot remove RR from IXFR, " + "RPZ domain not found"); + lock_rw_unlock(&r->respip_set->lock); + return; + } + + lock_rw_wrlock(&node->lock); + if(a == RPZ_LOCAL_DATA_ACTION) { + /* remove RR, signal whether RR can be removed */ + delete_respip = rpz_rrset_delete_rr(node, rr_type, rdatawl, + rdatalen); + } + lock_rw_unlock(&node->lock); + if(delete_respip) + respip_sockaddr_delete(r->respip_set, node); + lock_rw_unlock(&r->respip_set->lock); +} + +void +rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t dnamelen, + uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, size_t rdatalen) +{ + size_t policydnamelen; + enum rpz_trigger t; + enum rpz_action a; + uint8_t* policydname; + + if(!(policydname = calloc(1, LDNS_MAX_DOMAINLEN + 1))) + return; + + a = rpz_rr_to_action(rr_type, rdatawl, rdatalen); + if(a == RPZ_INVALID_ACTION) { + free(policydname); + return; + } + if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, + policydname, LDNS_MAX_DOMAINLEN + 1))) { + free(policydname); + return; + } + t = rpz_dname_to_trigger(policydname, policydnamelen); + if(t == RPZ_QNAME_TRIGGER) { + rpz_remove_qname_trigger(r, policydname, policydnamelen, a, + rr_type, rr_class, rdatawl, rdatalen); + } else if(t == RPZ_RESPONSE_IP_TRIGGER) { + rpz_remove_response_ip_trigger(r, policydname, policydnamelen, + a, rr_type, rdatawl, rdatalen); + } + free(policydname); +} + +/** print log information for an applied RPZ policy. Based on local-zone's + * lz_inform_print(). + */ +static void +log_rpz_apply(uint8_t* dname, enum rpz_action a, struct query_info* qinfo, + struct comm_reply* repinfo, char* log_name) +{ + char ip[128], txt[512]; + char dnamestr[LDNS_MAX_DOMAINLEN+1]; + uint16_t port = ntohs(((struct sockaddr_in*)&repinfo->addr)->sin_port); + dname_str(dname, dnamestr); + addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip)); + if(log_name) + snprintf(txt, sizeof(txt), "RPZ applied [%s] %s %s %s@%u", + log_name, dnamestr, rpz_action_to_string(a), ip, + (unsigned)port); + else + snprintf(txt, sizeof(txt), "RPZ applied %s %s %s@%u", + dnamestr, rpz_action_to_string(a), ip, (unsigned)port); + log_nametypeclass(0, txt, qinfo->qname, qinfo->qtype, qinfo->qclass); +} + +int +rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, + struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf, + struct regional* temp, struct comm_reply* repinfo, + uint8_t* taglist, size_t taglen, struct ub_server_stats* stats) +{ + struct rpz* r; + int ret; + enum localzone_type lzt; + struct local_zone* z = NULL; + struct local_data* ld = NULL; + lock_rw_rdlock(&az->rpz_lock); + for(r = az->rpz_first; r; r = r->next) { + if(!r->taglist || taglist_intersect(r->taglist, + r->taglistlen, taglist, taglen)) { + z = rpz_find_zone(r, qinfo->qname, qinfo->qname_len, + qinfo->qclass, 0, 0, 0); + if(z && r->action_override == RPZ_DISABLED_ACTION) { + if(r->log) + log_rpz_apply(z->name, + r->action_override, + qinfo, repinfo, r->log_name); + /* TODO only register stats when stats_extended? + * */ + stats->rpz_action[r->action_override]++; + lock_rw_unlock(&z->lock); + z = NULL; + } + if(z) + break; + } + } + lock_rw_unlock(&az->rpz_lock); + if(!z) + return 0; + + + if(r->action_override == RPZ_NO_OVERRIDE_ACTION) + lzt = z->type; + else + lzt = rpz_action_to_localzone_type(r->action_override); + + if(r->action_override == RPZ_CNAME_OVERRIDE_ACTION) { + qinfo->local_alias = + regional_alloc_zero(temp, sizeof(struct local_rrset)); + if(!qinfo->local_alias) { + lock_rw_unlock(&z->lock); + return 0; /* out of memory */ + } + qinfo->local_alias->rrset = + regional_alloc_init(temp, r->cname_override, + sizeof(*r->cname_override)); + if(!qinfo->local_alias->rrset) { + lock_rw_unlock(&z->lock); + return 0; /* out of memory */ + } + qinfo->local_alias->rrset->rk.dname = qinfo->qname; + qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len; + if(r->log) + log_rpz_apply(z->name, RPZ_CNAME_OVERRIDE_ACTION, + qinfo, repinfo, r->log_name); + stats->rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; + lock_rw_unlock(&z->lock); + return 0; + } + + if(lzt == local_zone_redirect && local_data_answer(z, env, qinfo, + edns, repinfo, buf, temp, dname_count_labels(qinfo->qname), + &ld, lzt, -1, NULL, 0, NULL, 0)) { + if(r->log) + log_rpz_apply(z->name, + localzone_type_to_rpz_action(lzt), qinfo, + repinfo, r->log_name); + stats->rpz_action[localzone_type_to_rpz_action(lzt)]++; + lock_rw_unlock(&z->lock); + return !qinfo->local_alias; + } + + ret = local_zones_zone_answer(z, env, qinfo, edns, repinfo, buf, temp, + 0 /* no local data used */, lzt); + if(r->log) + log_rpz_apply(z->name, localzone_type_to_rpz_action(lzt), + qinfo, repinfo, r->log_name); + stats->rpz_action[localzone_type_to_rpz_action(lzt)]++; + lock_rw_unlock(&z->lock); + + return ret; +} diff --git a/services/rpz.h b/services/rpz.h new file mode 100644 index 000000000..676a4f2a8 --- /dev/null +++ b/services/rpz.h @@ -0,0 +1,201 @@ +/* + * services/rpz.h - rpz service + * + * Copyright (c) 2019, NLnet Labs. All rights reserved. + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NLNET LABS nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * \file + * + * This file contains functions to enable RPZ service. + */ + +#ifndef SERVICES_RPZ_H +#define SERVICES_RPZ_H + +#include "services/localzone.h" +#include "util/locks.h" +#include "util/log.h" +#include "util/config_file.h" +#include "services/authzone.h" +#include "sldns/sbuffer.h" +#include "daemon/stats.h" +#include "respip/respip.h" + +/** + * RPZ triggers, only the QNAME trigger is currently supported in Unbound. + */ +enum rpz_trigger { + RPZ_QNAME_TRIGGER = 0, + /* unsupported triggers */ + RPZ_CLIENT_IP_TRIGGER, /* rpz-client-ip */ + RPZ_RESPONSE_IP_TRIGGER, /* rpz-ip */ + RPZ_NSDNAME_TRIGGER, /* rpz-nsdname */ + RPZ_NSIP_TRIGGER, /* rpz-nsip */ + RPZ_INVALID_TRIGGER, /* dname does not contain valid trigger */ +}; + +/** + * RPZ actions. + */ +enum rpz_action { + RPZ_NXDOMAIN_ACTION = 0,/* CNAME . */ + RPZ_NODATA_ACTION, /* CNAME *. */ + RPZ_PASSTHRU_ACTION, /* CNAME rpz-passthru. */ + RPZ_DROP_ACTION, /* CNAME rpz-drop. */ + RPZ_TCP_ONLY_ACTION, /* CNAME rpz-tcp-only. */ + RPZ_INVALID_ACTION, /* CNAME with (child of) TLD starting with + "rpz-" in target, SOA, NS, DNAME and + DNSSEC-related records. */ + RPZ_LOCAL_DATA_ACTION, /* anything else */ + /* RPZ override actions */ + RPZ_DISABLED_ACTION, /* RPZ action disabled using override */ + RPZ_NO_OVERRIDE_ACTION, /* RPZ action no override*/ + RPZ_CNAME_OVERRIDE_ACTION, /* RPZ CNAME action override*/ +}; + +/** + * RPZ containing policies. Pointed to from corresponding auth-zone. Part of a + * linked list to keep configuration order. Iterating or changing the linked + * list requires the rpz_lock from struct auth_zones. + */ +struct rpz { + struct local_zones* local_zones; + struct respip_set* respip_set; + uint8_t* taglist; + size_t taglistlen; + enum rpz_action action_override; + struct ub_packed_rrset_key* cname_override; + int log; + char* log_name; + struct rpz* next; + struct rpz* prev; + struct regional* region; +}; + +/** + * Create policy from RR and add to this RPZ. + * @param r: the rpz to add the policy to. + * @param aznamelen: the length of the auth-zone name + * @param dname: dname of the RR + * @param dnamelen: length of the dname + * @param rr_type: RR type of the RR + * @param rr_class: RR class of the RR + * @param rr_ttl: TTL of the RR + * @param rdatawl: rdata of the RR, prepended with the rdata size + * @param rdatalen: length if the RR, including the prepended rdata size + * @param rr: the complete RR, for logging purposes + * @param rr_len: the length of the complete RR + * @return: 0 on error + */ +int rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, + size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, + uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len); + +/** + * Delete policy matching RR, used for IXFR. + * @param r: the rpz to add the policy to. + * @param aznamelen: the length of the auth-zone name + * @param dname: dname of the RR + * @param dnamelen: length of the dname + * @param rr_type: RR type of the RR + * @param rr_class: RR class of the RR + * @param rdatawl: rdata of the RR, prepended with the rdata size + * @param rdatalen: length if the RR, including the prepended rdata size + */ +void rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, + size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, + size_t rdatalen); + +/** + * Walk over the RPZ zones to find and apply a QNAME trigger policy. + * @param az: auth_zones struct, containing first RPZ item and RPZ lock + * @param env: module env + * @param qinfo: qinfo containing qname and qtype + * @param edns: edns data + * @param buf: buffer to write answer to + * @param temp: scratchpad + * @param repinfo: reply info + * @param taglist: taglist to lookup. + * @param taglen: lenth of taglist. + * @param stats: worker stats struct + * @return: 1 if client answer is ready, 0 to continue resolving + */ +int rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, + struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf, + struct regional* temp, struct comm_reply* repinfo, + uint8_t* taglist, size_t taglen, struct ub_server_stats* stats); + +/** + * Delete RPZ + * @param r: RPZ struct to delete + */ +void rpz_delete(struct rpz* r); + +/** + * Clear local-zones and respip data in RPZ, used after reloading file or + * AXFR/HTTP transfer. + * @param r: RPZ to use + */ +int rpz_clear(struct rpz* r); + +/** + * Create RPZ. RPZ must be added to linked list after creation. + * @return: the newly created RPZ + */ +struct rpz* rpz_create(struct config_auth* p); + +/** + * String for RPZ action enum + * @param a: RPZ action to get string for + * @return: string for RPZ action + */ +const char* rpz_action_to_string(enum rpz_action a); + +enum rpz_action +respip_action_to_rpz_action(enum respip_action a); + +/** + * Prepare RPZ after procesing feed content. + * @param r: RPZ to use + */ +void rpz_finish_config(struct rpz* r); + +/** + * Classify respip action for RPZ action + * @param a: RPZ action + * @return: the respip action + */ +enum respip_action +rpz_action_to_respip_action(enum rpz_action a); + +#endif /* SERVICES_RPZ_H */ diff --git a/sldns/str2wire.c b/sldns/str2wire.c index 358e45345..977cda28a 100644 --- a/sldns/str2wire.c +++ b/sldns/str2wire.c @@ -80,7 +80,7 @@ static int sldns_str2wire_dname_buf_rel(const char* str, uint8_t* buf, for (s = str; *s; s++, q++) { if (q >= buf + *olen) return RET_ERR(LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL, q-buf); - if (q > buf + LDNS_MAX_DOMAINLEN) + if (q >= buf + LDNS_MAX_DOMAINLEN) return RET_ERR(LDNS_WIREPARSE_ERR_DOMAINNAME_OVERFLOW, q-buf); switch (*s) { case '.': @@ -117,7 +117,7 @@ static int sldns_str2wire_dname_buf_rel(const char* str, uint8_t* buf, if(rel) *rel = 1; if (q >= buf + *olen) return RET_ERR(LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL, q-buf); - if (q > buf + LDNS_MAX_DOMAINLEN) { + if (q >= buf + LDNS_MAX_DOMAINLEN) { return RET_ERR(LDNS_WIREPARSE_ERR_DOMAINNAME_OVERFLOW, q-buf); } if (label_len > LDNS_MAX_LABELLEN) { diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 1a66609cd..07b8f4522 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -469,6 +469,7 @@ check_modules_exist(const char* module_conf) static void morechecks(struct config_file* cfg) { + struct config_auth* auth; warn_hosts("stub-host", cfg->stubs); warn_hosts("forward-host", cfg->forwards); interfacechecks(cfg); @@ -534,6 +535,12 @@ morechecks(struct config_file* cfg) cfg->trusted_keys_file_list, cfg->chrootdir, cfg); check_chroot_string("dlv-anchor-file", &cfg->dlv_anchor_file, cfg->chrootdir, cfg); + for(auth = cfg->auths; auth; auth = auth->next) { + char* az = (auth->isrpz) ? "rpz zonefile" : + "auth-zone zonefile"; + check_chroot_string(az, &auth->zonefile, + cfg->chrootdir, cfg); + } #ifdef USE_IPSECMOD if(cfg->ipsecmod_enabled && strstr(cfg->module_conf, "ipsecmod")) { /* only check hook if enabled */ @@ -676,8 +683,9 @@ check_hints(struct config_file* cfg) static void check_auth(struct config_file* cfg) { + int is_rpz = 0; struct auth_zones* az = auth_zones_create(); - if(!az || !auth_zones_apply_cfg(az, cfg, 0)) { + if(!az || !auth_zones_apply_cfg(az, cfg, 0i, &is_rpz)) { fatal_exit("Could not setup authority zones"); } auth_zones_delete(az); diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index 4f51e400e..c6263c824 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -62,6 +62,7 @@ #include "daemon/stats.h" #include "sldns/wire2str.h" #include "sldns/pkthdr.h" +#include "services/rpz.h" #ifdef HAVE_SYS_IPC_H #include "sys/ipc.h" @@ -372,6 +373,14 @@ static void print_extended(struct ub_stats_info* s) PR_UL("rrset.cache.count", s->svr.rrset_cache_count); PR_UL("infra.cache.count", s->svr.infra_cache_count); PR_UL("key.cache.count", s->svr.key_cache_count); + /* applied RPZ actions */ + for(i=0; isvr.rpz_action[i] == 0) + continue; + PR_UL_SUB("num.rpz.action", rpz_action_to_string(i), s->svr.rpz_action[i]); + } #ifdef USE_DNSCRYPT PR_UL("dnscrypt_shared_secret.cache.count", s->svr.shared_secret_cache_count); diff --git a/testcode/unitdname.c b/testcode/unitdname.c index 238c3edf7..6769127b9 100644 --- a/testcode/unitdname.c +++ b/testcode/unitdname.c @@ -794,6 +794,34 @@ dname_test_valid(void) , 4096) == 0); } +/** Test dname_has_label */ +static void +dname_test_has_label(void) +{ + unit_show_func("util/data/dname.c", "dname_has_label"); + /* label past root label */ + unit_assert(dname_has_label((uint8_t*)"\01a\0\01c", 5, (uint8_t*)"\01c") == 0); + /* label not found */ + unit_assert(dname_has_label((uint8_t*)"\02ab\01c\0", 6, (uint8_t*)"\01e") == 0); + /* buffer too short */ + unit_assert(dname_has_label((uint8_t*)"\02ab\01c\0", 5, (uint8_t*)"\0") == 0); + unit_assert(dname_has_label((uint8_t*)"\1a\0", 2, (uint8_t*)"\0") == 0); + unit_assert(dname_has_label((uint8_t*)"\0", 0, (uint8_t*)"\0") == 0); + unit_assert(dname_has_label((uint8_t*)"\02ab\01c", 4, (uint8_t*)"\01c") == 0); + unit_assert(dname_has_label((uint8_t*)"\02ab\03qwe\06oqieur\03def\01c\0", 19, (uint8_t*)"\01c") == 0); + + /* positive cases */ + unit_assert(dname_has_label((uint8_t*)"\0", 1, (uint8_t*)"\0") == 1); + unit_assert(dname_has_label((uint8_t*)"\1a\0", 3, (uint8_t*)"\0") == 1); + unit_assert(dname_has_label((uint8_t*)"\01a\0\01c", 5, (uint8_t*)"\0") == 1); + unit_assert(dname_has_label((uint8_t*)"\02ab\01c", 5, (uint8_t*)"\01c") == 1); + unit_assert(dname_has_label((uint8_t*)"\02ab\01c\0", 10, (uint8_t*)"\0") == 1); + unit_assert(dname_has_label((uint8_t*)"\02ab\01c\0", 7, (uint8_t*)"\0") == 1); + unit_assert(dname_has_label((uint8_t*)"\02ab\03qwe\06oqieur\03def\01c\0", 22, (uint8_t*)"\03def") == 1); + unit_assert(dname_has_label((uint8_t*)"\02ab\03qwe\06oqieur\03def\01c\0", 22, (uint8_t*)"\02ab") == 1); + unit_assert(dname_has_label((uint8_t*)"\02ab\03qwe\06oqieur\03def\01c\0", 22, (uint8_t*)"\01c") == 1); +} + /** test pkt_dname_tolower */ static void dname_test_pdtl(sldns_buffer* loopbuf, sldns_buffer* boundbuf) @@ -855,6 +883,7 @@ void dname_test(void) dname_test_canoncmp(); dname_test_topdomain(); dname_test_valid(); + dname_test_has_label(); sldns_buffer_free(buff); sldns_buffer_free(loopbuf); sldns_buffer_free(boundbuf); diff --git a/testdata/rpz_axfr.rpl b/testdata/rpz_axfr.rpl new file mode 100644 index 000000000..b5b84bfd3 --- /dev/null +++ b/testdata/rpz_axfr.rpl @@ -0,0 +1,362 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + +rpz: + name: "rpz.example.com." + master: 10.20.30.40 + zonefile: +TEMPFILE_NAME rpz.example.com +TEMPFILE_CONTENTS rpz.example.com +$ORIGIN rpz.example.com. +a IN CNAME *. +c IN TXT "hello from initial RPZ" +c IN TXT "another hello from initial RPZ" +d IN CNAME . +32.1.123.0.10.rpz-ip CNAME *. +32.3.123.0.10.rpz-ip A 10.66.0.3 +32.3.123.0.10.rpz-ip A 10.66.0.4 +32.4.123.0.10.rpz-ip CNAME . +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 10.20.30.40 + +CONFIG_END + +SCENARIO_BEGIN Test RPZ QNAME trigger, loaded using AXFR + +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.40 + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS ns. +SECTION ADDITIONAL +ns. IN NS 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +b. IN TXT +SECTION ANSWER +b. TXT "hello from upstream" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. TXT "hello from upstream" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +a.rpz-ip. IN A +SECTION ANSWER +a.rpz-ip. IN A 10.0.123.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +c.rpz-ip. IN A +SECTION ANSWER +c.rpz-ip. IN A 10.0.123.3 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +d.rpz-ip. IN A +SECTION ANSWER +d.rpz-ip. IN A 10.0.123.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +rpz.example.com. IN SOA +SECTION ANSWER +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +rpz.example.com. IN AXFR +SECTION ANSWER +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 +b.rpz.example.com. TXT "hello from RPZ" +c.rpz.example.com. TXT "hello from RPZ" +a.rpz.example.com. CNAME . +32.1.123.0.10.rpz-ip.rpz.example.com. CNAME . +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.5 +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.6 +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 +ENTRY_END + +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN TXT +ENTRY_END + +STEP 2 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +b. IN TXT +SECTION ANSWER +b. IN TXT "hello from upstream" +ENTRY_END + +STEP 3 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN TXT +ENTRY_END + +STEP 4 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +a. IN TXT +SECTION ANSWER +ENTRY_END + +STEP 5 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.rpz-ip. IN A +ENTRY_END + +STEP 6 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +a.rpz-ip. IN A +SECTION ANSWER +ENTRY_END + +STEP 7 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN TXT +ENTRY_END + +STEP 8 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +c. IN TXT +SECTION ANSWER +c. IN TXT "another hello from initial RPZ" +c. IN TXT "hello from initial RPZ" +ENTRY_END + +STEP 9 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c.rpz-ip. IN A +ENTRY_END + +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c.rpz-ip. IN A +SECTION ANSWER +c.rpz-ip. IN A 10.66.0.4 +c.rpz-ip. IN A 10.66.0.3 +ENTRY_END + +STEP 11 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 12 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 13 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d.rpz-ip. IN A +ENTRY_END + +STEP 14 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +d.rpz-ip. IN A +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN TXT +ENTRY_END + +STEP 51 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +b. IN TXT +SECTION ANSWER +b. IN TXT "hello from RPZ" +ENTRY_END + +STEP 52 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN TXT +ENTRY_END + +STEP 53 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +a. IN TXT +SECTION ANSWER +ENTRY_END + +STEP 54 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.rpz-ip. IN A +ENTRY_END + +STEP 55 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +a.rpz-ip. IN A +SECTION ANSWER +ENTRY_END + +STEP 56 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN TXT +ENTRY_END + +STEP 57 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +c. IN TXT +SECTION ANSWER +c. IN TXT "hello from RPZ" +ENTRY_END + +STEP 58 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c.rpz-ip. IN A +ENTRY_END + +STEP 59 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c.rpz-ip. IN A +SECTION ANSWER +c.rpz-ip. IN A 10.66.0.6 +c.rpz-ip. IN A 10.66.0.5 +ENTRY_END + +STEP 60 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 61 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. IN TXT "hello from upstream" +ENTRY_END + +STEP 62 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d.rpz-ip. IN A +ENTRY_END + +STEP 63 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +d.rpz-ip. IN A +SECTION ANSWER +d.rpz-ip. IN A 10.0.123.4 +ENTRY_END + +SCENARIO_END diff --git a/testdata/rpz_ixfr.rpl b/testdata/rpz_ixfr.rpl new file mode 100644 index 000000000..3f7cb3d35 --- /dev/null +++ b/testdata/rpz_ixfr.rpl @@ -0,0 +1,378 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + +rpz: + name: "rpz.example.com." + master: 10.20.30.40 + zonefile: +TEMPFILE_NAME rpz.example.com +TEMPFILE_CONTENTS rpz.example.com +rpz.example.com. 3600 IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 +rpz.example.com. 3600 IN NS ns.rpz.example.net. +a.rpz.example.com. IN CNAME *. +c.rpz.example.com. IN TXT "hello from initial RPZ" +c.rpz.example.com. IN TXT "another hello from initial RPZ" +c.rpz.example.com. IN TXT "yet another hello from initial RPZ" +d.rpz.example.com. IN CNAME . +32.1.123.0.10.rpz-ip.rpz.example.com. CNAME *. +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.3 +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.4 +32.4.123.0.10.rpz-ip.rpz.example.com. CNAME . +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 10.20.30.40 + +CONFIG_END + +SCENARIO_BEGIN Test RPZ QNAME trigger, loaded using IXFR + +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.40 + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS ns. +SECTION ADDITIONAL +ns. IN NS 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +b. IN TXT +SECTION ANSWER +b. TXT "hello from upstream" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. TXT "hello from upstream" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +a.rpz-ip. IN A +SECTION ANSWER +a.rpz-ip. IN A 10.0.123.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +c.rpz-ip. IN A +SECTION ANSWER +c.rpz-ip. IN A 10.0.123.3 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +d.rpz-ip. IN A +SECTION ANSWER +d.rpz-ip. IN A 10.0.123.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +rpz.example.com. IN SOA +SECTION ANSWER +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 2 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +rpz.example.com. IN IXFR +SECTION ANSWER +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 2 3600 900 86400 3600 +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 +a.rpz.example.com. IN CNAME *. +c.rpz.example.com. IN TXT "hello from initial RPZ" +c.rpz.example.com. IN TXT "another hello from initial RPZ" +d.rpz.example.com. IN CNAME . +32.1.123.0.10.rpz-ip.rpz.example.com. CNAME *. +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.3 +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.4 +32.4.123.0.10.rpz-ip.rpz.example.com. CNAME . +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 2 3600 900 86400 3600 +b.rpz.example.com. TXT "hello from RPZ" +c.rpz.example.com. TXT "hello from RPZ" +a.rpz.example.com. CNAME . +32.1.123.0.10.rpz-ip.rpz.example.com. CNAME . +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.5 +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.6 +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 2 3600 900 86400 3600 +ENTRY_END + +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN TXT +ENTRY_END + +STEP 2 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +b. IN TXT +SECTION ANSWER +b. IN TXT "hello from upstream" +ENTRY_END + +STEP 3 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN TXT +ENTRY_END + +STEP 4 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +a. IN TXT +SECTION ANSWER +ENTRY_END + +STEP 5 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.rpz-ip. IN A +ENTRY_END + +STEP 6 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +a.rpz-ip. IN A +SECTION ANSWER +ENTRY_END + +STEP 7 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN TXT +ENTRY_END + +STEP 8 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +c. IN TXT +SECTION ANSWER +c. IN TXT "yet another hello from initial RPZ" +c. IN TXT "another hello from initial RPZ" +c. IN TXT "hello from initial RPZ" +ENTRY_END + +STEP 9 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c.rpz-ip. IN A +ENTRY_END + +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c.rpz-ip. IN A +SECTION ANSWER +c.rpz-ip. IN A 10.66.0.4 +c.rpz-ip. IN A 10.66.0.3 +ENTRY_END + +STEP 11 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 12 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 13 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d.rpz-ip. IN A +ENTRY_END + + +STEP 15 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +d.rpz-ip. IN A +ENTRY_END + +STEP 16 TIME_PASSES ELAPSE 1 +STEP 30 TIME_PASSES ELAPSE 3600 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN TXT +ENTRY_END + +STEP 51 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +b. IN TXT +SECTION ANSWER +b. IN TXT "hello from RPZ" +ENTRY_END + +STEP 52 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN TXT +ENTRY_END + +STEP 53 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +a. IN TXT +SECTION ANSWER +ENTRY_END + +STEP 54 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.rpz-ip. IN A +ENTRY_END + +STEP 55 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +a.rpz-ip. IN A +SECTION ANSWER +ENTRY_END + +STEP 56 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN TXT +ENTRY_END + +STEP 57 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +c. IN TXT +SECTION ANSWER +c. IN TXT "hello from RPZ" +c. IN TXT "yet another hello from initial RPZ" +ENTRY_END + +STEP 58 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c.rpz-ip. IN A +ENTRY_END + +STEP 59 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c.rpz-ip. IN A +SECTION ANSWER +c.rpz-ip. IN A 10.66.0.6 +c.rpz-ip. IN A 10.66.0.5 +ENTRY_END + +STEP 60 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 61 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. IN TXT "hello from upstream" +ENTRY_END + +STEP 62 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d.rpz-ip. IN A +ENTRY_END + +STEP 63 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +d.rpz-ip. IN A +SECTION ANSWER +d.rpz-ip. IN A 10.0.123.4 +ENTRY_END + +SCENARIO_END diff --git a/testdata/rpz_qname.rpl b/testdata/rpz_qname.rpl new file mode 100644 index 000000000..7940e9392 --- /dev/null +++ b/testdata/rpz_qname.rpl @@ -0,0 +1,304 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + +rpz: + name: "rpz.example.com." + zonefile: +TEMPFILE_NAME rpz.example.com +TEMPFILE_CONTENTS rpz.example.com +$ORIGIN example.com. +rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( + 1379078166 28800 7200 604800 7200 ) + 3600 IN NS ns1.rpz.example.com. + 3600 IN NS ns2.rpz.example.com. +$ORIGIN rpz.example.com. +a CNAME . +a CNAME *. ; duplicate CNAME here on purpose +*.a TXT "wildcard local data" +b.a CNAME *. +c.a CNAME rpz-passthru. +TEMPFILE_END + +rpz: + name: "rpz2.example.com." + zonefile: +TEMPFILE_NAME rpz2.example.com +TEMPFILE_CONTENTS rpz2.example.com +$ORIGIN example.com. +rpz2 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( + 1379078166 28800 7200 604800 7200 ) + 3600 IN NS ns1.rpz.example.com. + 3600 IN NS ns2.rpz.example.com. +$ORIGIN rpz2.example.com. +a TXT "local data 2nd zone" +d TXT "local data 2nd zone" +e CNAME *.a.example. +*.e CNAME *.b.example. +drop CNAME rpz-drop. +TEMPFILE_END + +stub-zone: + name: "a." + stub-addr: 10.20.30.40 +stub-zone: + name: "example." + stub-addr: 10.20.30.50 +CONFIG_END + +SCENARIO_BEGIN Test all support RPZ action for QNAME trigger + +; a. +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.40 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +a. IN NS +SECTION ANSWER +a. IN NS ns.a. +SECTION ADDITIONAL +ns.a IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +c.a. IN TXT +SECTION ANSWER +c.a. IN TXT "answer from upstream ns" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +x.b.a. IN TXT +SECTION ANSWER +x.b.a. IN TXT "answer from upstream ns" +ENTRY_END + +RANGE_END + +; example. +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.50 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example. IN NS +SECTION ANSWER +example. IN NS ns.example. +SECTION ADDITIONAL +ns.example IN A 10.20.30.50 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +e.a.example. IN TXT +SECTION ANSWER +e.a.example. IN TXT "e.a.example. answer from upstream ns" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +something.e.b.example. IN TXT +SECTION ANSWER +something.e.b.example. IN TXT "*.b.example. answer from upstream ns" +ENTRY_END + +RANGE_END + +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN TXT +ENTRY_END + +STEP 11 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +a. IN TXT +SECTION ANSWER +ENTRY_END + +STEP 20 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.a. IN TXT +ENTRY_END + +STEP 21 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +a.a. IN TXT +SECTION ANSWER +a.a. IN TXT "wildcard local data" +ENTRY_END + +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b.a. IN TXT +ENTRY_END + +STEP 31 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +b.a. IN TXT +SECTION ANSWER +ENTRY_END + +STEP 40 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +x.a. IN TXT +ENTRY_END + +STEP 41 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +x.a. IN TXT +SECTION ANSWER +x.a. IN TXT "wildcard local data" +ENTRY_END + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +x.a.a. IN TXT +ENTRY_END + +STEP 51 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +x.a.a. IN TXT +SECTION ANSWER +x.a.a. IN TXT "wildcard local data" +ENTRY_END + +STEP 60 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c.a. IN TXT +ENTRY_END + +STEP 61 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c.a. IN TXT +SECTION ANSWER +c.a. IN TXT "answer from upstream ns" +ENTRY_END + +STEP 70 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +x.b.a. IN TXT +ENTRY_END + +STEP 71 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +x.b.a. IN TXT +SECTION ANSWER +x.b.a. IN TXT "answer from upstream ns" +ENTRY_END + +STEP 80 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 81 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. IN TXT "local data 2nd zone" +ENTRY_END + +STEP 82 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +e. IN TXT +ENTRY_END + +STEP 83 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +e. IN TXT +SECTION ANSWER +e. IN CNAME e.a.example. +e.a.example. IN TXT "e.a.example. answer from upstream ns" +ENTRY_END + +STEP 84 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +something.e. IN TXT +ENTRY_END + +STEP 85 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +something.e. IN TXT +SECTION ANSWER +something.e. IN CNAME something.e.b.example. +something.e.b.example. IN TXT "*.b.example. answer from upstream ns" +ENTRY_END + +; deny zone +STEP 90 QUERY +ENTRY_BEGIN +SECTION QUESTION +drop. IN TXT +ENTRY_END +; no answer is checked at exit of testbound. +SCENARIO_END diff --git a/testdata/rpz_qname_override.rpl b/testdata/rpz_qname_override.rpl new file mode 100644 index 000000000..b2608e251 --- /dev/null +++ b/testdata/rpz_qname_override.rpl @@ -0,0 +1,197 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + +rpz: + name: "rpz.example.com." + rpz-action-override: disabled + zonefile: +TEMPFILE_NAME rpz.example.com +TEMPFILE_CONTENTS rpz.example.com +$ORIGIN rpz.example.com. +a TXT "record zone rpz.example.com" +TEMPFILE_END + +rpz: + name: "rpz2.example.com." + zonefile: +TEMPFILE_NAME rpz2.example.com +TEMPFILE_CONTENTS rpz2.example.com +$ORIGIN rpz2.example.com. +a TXT "record zone rpz2.example.com" +TEMPFILE_END + +rpz: + name: "rpz3.example.com." + rpz-action-override: nodata + zonefile: +TEMPFILE_NAME rpz3.example.com +TEMPFILE_CONTENTS rpz3.example.com +$ORIGIN rpz3.example.com. +b CNAME . +TEMPFILE_END + +rpz: + name: "rpz4.example.com." + rpz-action-override: nxdomain + zonefile: +TEMPFILE_NAME rpz4.example.com +TEMPFILE_CONTENTS rpz4.example.com +$ORIGIN rpz4.example.com. +c CNAME *. +TEMPFILE_END + +rpz: + name: "rpz5.example.com." + rpz-action-override: passthru + zonefile: +TEMPFILE_NAME rpz5.example.com +TEMPFILE_CONTENTS rpz5.example.com +$ORIGIN rpz5.example.com. +d TXT "should be override by passthru" +TEMPFILE_END + +rpz: + name: "rpz6.example.com." + rpz-action-override: cname + rpz-cname-override: "d." + zonefile: +TEMPFILE_NAME rpz6.example.com +TEMPFILE_CONTENTS rpz6.example.com +$ORIGIN rpz6.example.com. +e TXT "should be override by cname" +TEMPFILE_END + +rpz: + name: "rpz7.example.com." + rpz-action-override: drop + zonefile: +TEMPFILE_NAME rpz7.example.com +TEMPFILE_CONTENTS rpz7.example.com +$ORIGIN rpz7.example.com. +f TXT "should be override by drop policy" +TEMPFILE_END + +stub-zone: + name: "d." + stub-addr: 10.20.30.40 +CONFIG_END + +SCENARIO_BEGIN Test RPZ action overrides for QNAME trigger + +; d. +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.40 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. IN TXT "answer from upstream ns" +ENTRY_END + +RANGE_END + +; check disabled override, should be answered using next policy zone +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN TXT +ENTRY_END + +STEP 11 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +a. IN TXT +SECTION ANSWER +a TXT "record zone rpz2.example.com" +ENTRY_END + +; check nodata override, would be NXDOMAIN without override +STEP 20 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN TXT +ENTRY_END + +STEP 21 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +b. IN TXT +SECTION ANSWER +ENTRY_END + +; check nxdomain override, would be NODATA without override +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN TXT +ENTRY_END + +STEP 31 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +c. IN TXT +SECTION ANSWER +ENTRY_END + +; check passthru override, would be localdata without override +STEP 40 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 41 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. IN TXT "answer from upstream ns" +ENTRY_END + +; check cname override, would be localdata without override +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +e. IN TXT +ENTRY_END + +STEP 51 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +e. IN TXT +SECTION ANSWER +e. IN CNAME d. +d. IN TXT "answer from upstream ns" +ENTRY_END + +; check drop override, would be localdata without override +STEP 60 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +f. IN TXT +ENTRY_END +; no answer is checked at exit of testbound. + +SCENARIO_END diff --git a/testdata/rpz_respip.rpl b/testdata/rpz_respip.rpl new file mode 100644 index 000000000..94f998be6 --- /dev/null +++ b/testdata/rpz_respip.rpl @@ -0,0 +1,449 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + + +rpz: + name: "rpz.example.com." + zonefile: +TEMPFILE_NAME rpz.example.com +TEMPFILE_CONTENTS rpz.example.com +$ORIGIN example.com. +rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( + 1379078166 28800 7200 604800 7200 ) + 3600 IN NS ns1.rpz.example.com. + 3600 IN NS ns2.rpz.example.com. +$ORIGIN rpz.example.com. +8.0.0.0.10.rpz-ip CNAME *. +16.0.0.10.10.rpz-ip CNAME . +24.0.10.10.10.rpz-ip CNAME rpz-drop. +32.10.10.10.10.rpz-ip CNAME rpz-passthru. +32.zz.db8.2001.rpz-ip CNAME *. +48.zz.aa.db8.2001.rpz-ip CNAME . +64.zz.bb.aa.db8.2001.rpz-ip CNAME rpz-drop. +128.1.zz.cc.bb.aa.db8.2001.rpz-ip CNAME rpz-passthru. +128.123.zz.cc.bb.aa.db8.2001.rpz-ip AAAA 2001:db8::123 +128.124.0.0.cc.bb.aa.db8.2001.rpz-ip AAAA 2001:db8::124 + +TEMPFILE_END + +rpz: + name: "rpz2.example.com." + zonefile: +TEMPFILE_NAME rpz2.example.com +TEMPFILE_CONTENTS rpz2.example.com +$ORIGIN example.com. +rpz2 3600 IN SOA ns1.rpz2.example.com. hostmaster.rpz2.example.com. ( + 1379078166 28800 7200 604800 7200 ) + 3600 IN NS ns1.rpz2.example.com. + 3600 IN NS ns2.rpz2.example.com. +$ORIGIN rpz2.example.com. +32.10.10.10.10.rpz-ip A 203.0.113.123 +32.123.2.0.192.rpz-ip A 203.0.113.123 +128.1.zz.cc.bb.aa.db8.2001.rpz-ip AAAA 2001:db1::123 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 10.20.30.40 +CONFIG_END + +SCENARIO_BEGIN Test all supported RPZ action for response IP address trigger + +; c. +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.40 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS ns. +SECTION ADDITIONAL +ns. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +a. IN A +SECTION ANSWER +a. IN A 10.0.0.123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +a. IN AAAA +SECTION ANSWER +a. IN AAAA 2001:db8::123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +b. IN A +SECTION ANSWER +b. IN A 10.1.0.123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +b. IN AAAA +SECTION ANSWER +b. IN AAAA 2001:db8:1::123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +c. IN A +SECTION ANSWER +c. IN A 10.11.0.123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +c. IN AAAA +SECTION ANSWER +c. IN AAAA 2001:db8:ff::123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +d. IN A +SECTION ANSWER +d. IN A 10.10.0.123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +d. IN AAAA +SECTION ANSWER +d. IN AAAA 2001:db8:aa::123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +e. IN A +SECTION ANSWER +e. IN A 10.10.10.123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +e. IN AAAA +SECTION ANSWER +e. IN AAAA 2001:db8:aa:bb::123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +f. IN A +SECTION ANSWER +f. IN A 10.10.10.10 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +f. IN AAAA +SECTION ANSWER +f. IN AAAA 2001:db8:aa:bb:cc::1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +g. IN A +SECTION ANSWER +g. IN A 192.0.2.123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +g. IN AAAA +SECTION ANSWER +g. IN AAAA 2001:db8:aa:bb:cc::123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +h. IN AAAA +SECTION ANSWER +h. IN AAAA 2001:db8:aa:bb:cc::124 +ENTRY_END + +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN A +ENTRY_END + +STEP 2 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +a. IN A +SECTION ANSWER +ENTRY_END + +STEP 3 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN AAAA +ENTRY_END + +STEP 4 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +a. IN AAAA +SECTION ANSWER +ENTRY_END + +STEP 5 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN A +ENTRY_END + +STEP 6 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +b. IN A +SECTION ANSWER +ENTRY_END + +STEP 7 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN AAAA +ENTRY_END + +STEP 8 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +b. IN AAAA +SECTION ANSWER +ENTRY_END + +STEP 9 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN A +ENTRY_END + +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c. IN A +SECTION ANSWER +ENTRY_END + +STEP 11 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN AAAA +ENTRY_END + +STEP 12 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c. IN AAAA +SECTION ANSWER +ENTRY_END + +STEP 13 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN A +ENTRY_END + +STEP 14 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +d. IN A +SECTION ANSWER +ENTRY_END + +STEP 15 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN AAAA +ENTRY_END + +STEP 16 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +d. IN AAAA +SECTION ANSWER +ENTRY_END + +STEP 17 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +f. IN A +ENTRY_END + +STEP 18 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +f. IN A +SECTION ANSWER +f. IN A 10.10.10.10 +ENTRY_END + +STEP 19 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +f. IN AAAA +ENTRY_END + +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +f. IN AAAA +SECTION ANSWER +f. IN AAAA 2001:db8:aa:bb:cc::1 +ENTRY_END + +STEP 21 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +g. IN A +ENTRY_END + +STEP 22 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +g. IN A +SECTION ANSWER +g. IN A 203.0.113.123 +ENTRY_END + +STEP 23 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +g. IN AAAA +ENTRY_END + +STEP 24 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +g. IN AAAA +SECTION ANSWER +g. IN AAAA 2001:db8::123 +ENTRY_END + +STEP 25 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +h. IN AAAA +ENTRY_END + +STEP 26 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +h. IN AAAA +SECTION ANSWER +h. IN AAAA 2001:db8::124 +ENTRY_END + +; should be dropped +STEP 27 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +e. IN A +ENTRY_END +STEP 28 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +e. IN AAAA +ENTRY_END +STEP 29 TIME_PASSES ELAPSE 12 +SCENARIO_END diff --git a/testdata/rpz_respip_override.rpl b/testdata/rpz_respip_override.rpl new file mode 100644 index 000000000..16d91378a --- /dev/null +++ b/testdata/rpz_respip_override.rpl @@ -0,0 +1,265 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + +rpz: + name: "rpz.example.com." + rpz-action-override: disabled + zonefile: +TEMPFILE_NAME rpz.example.com +TEMPFILE_CONTENTS rpz.example.com +$ORIGIN rpz.example.com. +32.1.113.0.203.rpz-ip A 192.0.2.1 +TEMPFILE_END + +rpz: + name: "rpz2.example.com." + zonefile: +TEMPFILE_NAME rpz2.example.com +TEMPFILE_CONTENTS rpz2.example.com +$ORIGIN rpz2.example.com. +32.1.113.0.203.rpz-ip A 192.0.2.2 +TEMPFILE_END + +rpz: + name: "rpz3.example.com." + rpz-action-override: nodata + zonefile: +TEMPFILE_NAME rpz3.example.com +TEMPFILE_CONTENTS rpz3.example.com +$ORIGIN rpz3.example.com. +32.3.113.0.203.rpz-ip CNAME . +TEMPFILE_END + +rpz: + name: "rpz4.example.com." + rpz-action-override: nxdomain + zonefile: +TEMPFILE_NAME rpz4.example.com +TEMPFILE_CONTENTS rpz4.example.com +$ORIGIN rpz4.example.com. +32.4.113.0.203.rpz-ip CNAME *. +TEMPFILE_END + +rpz: + name: "rpz5.example.com." + rpz-action-override: passthru + zonefile: +TEMPFILE_NAME rpz5.example.com +TEMPFILE_CONTENTS rpz5.example.com +$ORIGIN rpz5.example.com. +32.5.113.0.203.rpz-ip A 192.0.2.5 +TEMPFILE_END + +rpz: + name: "rpz6.example.com." + rpz-action-override: cname + rpz-cname-override: ns. + zonefile: +TEMPFILE_NAME rpz6.example.com +TEMPFILE_CONTENTS rpz6.example.com +$ORIGIN rpz6.example.com. +32.6.113.0.203.rpz-ip A 192.0.2.6 +TEMPFILE_END + +rpz: + name: "rpz7.example.com." + rpz-action-override: drop + zonefile: +TEMPFILE_NAME rpz7.example.com +TEMPFILE_CONTENTS rpz7.example.com +$ORIGIN rpz7.example.com. +32.7.113.0.203.rpz-ip A 192.0.2.7 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 10.20.30.40 +CONFIG_END + +SCENARIO_BEGIN Test all supported RPZ action for response IP address trigger + +; c. +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.40 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS ns. +SECTION ADDITIONAL +ns. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns. IN A +SECTION ANSWER +ns. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +a. IN A +SECTION ANSWER +a. IN A 203.0.113.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +b. IN A +SECTION ANSWER +b. IN A 203.0.113.3 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +c. IN A +SECTION ANSWER +c. IN A 203.0.113.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +d. IN A +SECTION ANSWER +d. IN A 203.0.113.5 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +e. IN A +SECTION ANSWER +e. IN A 203.0.113.6 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +f. IN A +SECTION ANSWER +f. IN A 203.0.113.7 +ENTRY_END + +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN A +ENTRY_END + +STEP 2 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +a. IN A +SECTION ANSWER +a. IN A 192.0.2.2 +ENTRY_END + +STEP 3 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN A +ENTRY_END + +STEP 4 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +b. IN A +SECTION ANSWER +ENTRY_END + +STEP 5 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN A +ENTRY_END + +STEP 6 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +c. IN A +SECTION ANSWER +ENTRY_END + +STEP 7 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN A +ENTRY_END + +STEP 8 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +d. IN A +SECTION ANSWER +d. IN A 203.0.113.5 +ENTRY_END + +STEP 9 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +e. IN A +ENTRY_END + +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +e. IN A +SECTION ANSWER +e. IN CNAME ns. +ns. IN A 10.20.30.40 +ENTRY_END + +STEP 11 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +f. IN A +ENTRY_END +; no answer is checked at exit of testbound. + +STEP 12 TIME_PASSES ELAPSE 10 + +SCENARIO_END diff --git a/util/config_file.c b/util/config_file.c index 104c3f83e..027228135 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -1279,6 +1279,10 @@ config_delauth(struct config_auth* p) config_delstrlist(p->urls); config_delstrlist(p->allow_notify); free(p->zonefile); + free(p->rpz_taglist); + free(p->rpz_action_override); + free(p->rpz_cname); + free(p->rpz_log_name); free(p); } @@ -1942,7 +1946,7 @@ char* config_taglist2str(struct config_file* cfg, uint8_t* taglist, return strdup(buf); } -int taglist_intersect(uint8_t* list1, size_t list1len, uint8_t* list2, +int taglist_intersect(uint8_t* list1, size_t list1len, const uint8_t* list2, size_t list2len) { size_t i; diff --git a/util/config_file.h b/util/config_file.h index b3ef930a0..72f44aba4 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -641,6 +641,21 @@ struct config_auth { /** fallback to recursion to authorities if zone expired and other * reasons perhaps (like, query bogus) */ int fallback_enabled; + /** this zone is used to create local-zone policies */ + int isrpz; + /** rpz tags (or NULL) */ + uint8_t* rpz_taglist; + /** length of the taglist (in bytes) */ + size_t rpz_taglistlen; + /** Override RPZ action for this zone, regardless of zone content */ + char* rpz_action_override; + /** Log when this RPZ policy is applied */ + int rpz_log; + /** Display this name in the log when RPZ policy is applied */ + char* rpz_log_name; + /** Always reply with this CNAME target if the cname override action is + * used */ + char* rpz_cname; }; /** @@ -1043,7 +1058,7 @@ char* config_taglist2str(struct config_file* cfg, uint8_t* taglist, * @param list2len: length in bytes of second list. * @return true if there are tags in common, 0 if not. */ -int taglist_intersect(uint8_t* list1, size_t list1len, uint8_t* list2, +int taglist_intersect(uint8_t* list1, size_t list1len, const uint8_t* list2, size_t list2len); /** diff --git a/util/configlexer.c b/util/configlexer.c index cedb4878d..462820cef 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -1,7 +1,7 @@ #include "config.h" #include "util/configyyrename.h" -#line 2 "" +#line 3 "" #define YY_INT_ALIGNED short int @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 294 -#define YY_END_OF_BUFFER 295 +#define YY_NUM_RULES 300 +#define YY_END_OF_BUFFER 301 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,329 +363,333 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[2913] = +static const flex_int16_t yy_accept[2961] = { 0, - 1, 1, 276, 276, 280, 280, 284, 284, 288, 288, - 1, 1, 295, 292, 1, 274, 274, 293, 2, 293, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 276, 277, 277, 278, 293, 280, 281, 281, - 282, 293, 287, 284, 285, 285, 286, 293, 288, 289, - 289, 290, 293, 291, 275, 2, 279, 293, 291, 292, - 0, 1, 2, 2, 2, 2, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 276, - 0, 280, 0, 287, 0, 284, 288, 0, 291, 0, - 2, 2, 291, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 291, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 114, - 292, 292, 292, 292, 292, 292, 292, 291, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 96, 292, 292, 292, 292, 292, 292, 8, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 119, 292, 291, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 269, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 291, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 54, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 214, 292, - 14, 15, 292, 18, 17, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 113, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 198, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 3, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 292, 292, 291, 292, 292, - 292, 292, 292, 292, 292, 264, 292, 292, 263, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 283, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 57, 292, 238, - 292, 292, 292, 292, 292, 292, 292, 292, 270, 271, - - 292, 292, 292, 292, 292, 58, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 187, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 20, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 138, 292, 292, 283, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 94, - - 292, 292, 292, 292, 292, 292, 292, 246, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 159, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 137, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 93, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 292, 292, 292, 31, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 32, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 55, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 112, 292, 292, 292, 292, 292, 111, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 56, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 160, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 45, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 229, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 49, 292, - 50, 292, 292, 292, 292, 292, 97, 292, 98, 292, - - 292, 292, 292, 95, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 7, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 207, 292, 292, 292, 292, 140, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 46, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 179, - 292, 178, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 16, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 59, 292, 292, 292, 292, 292, 292, 292, 292, - 186, 292, 292, 292, 292, 292, 292, 100, 292, 99, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 170, 292, 292, 292, 292, 292, 292, 292, 292, 120, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 78, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 82, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 53, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 173, 174, 292, 292, 292, 240, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 6, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 244, 292, 292, 292, 265, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 41, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 43, 292, - 292, 292, 292, 292, 292, 292, 292, 166, 292, 292, - 292, 115, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 191, 292, 167, 292, 292, 292, 204, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 44, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 117, 105, 292, 106, 292, - 292, 292, 104, 292, 292, 292, 292, 292, 292, 292, - 292, 135, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 228, 292, 292, 292, 292, 292, 292, - 292, 292, 168, 292, 292, 292, 292, 292, 171, 292, - 177, 292, 292, 292, 292, 292, 203, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 92, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 51, 292, 292, 292, 25, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 19, 292, 292, - 292, 292, 292, 292, 26, 35, 292, 145, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 67, 69, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 248, 292, 292, 292, 215, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 107, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 134, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 259, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 139, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 197, 292, 292, 292, 292, 292, - 292, 292, 292, 268, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 156, 292, 292, 292, 292, 292, 292, - 292, 292, 101, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 151, 292, 161, 292, 292, 292, 292, 292, - 123, 292, 292, 292, 292, 292, 88, 292, 292, 292, - 292, 189, 292, 292, 292, 292, 292, 292, 205, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 220, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 116, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 155, 292, 292, 292, 292, 292, 70, 71, - 292, 292, 292, 292, 292, 52, 292, 292, 292, 292, - 292, 77, 162, 292, 180, 292, 208, 292, 292, 172, - - 241, 292, 292, 292, 292, 292, 63, 292, 164, 292, - 292, 292, 292, 292, 9, 292, 292, 292, 91, 292, - 292, 292, 292, 233, 292, 292, 292, 188, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 154, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 141, 292, 247, 292, 292, 292, - 292, 219, 292, 292, 292, 292, 292, 292, 292, 292, - - 199, 292, 292, 292, 292, 239, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 262, 292, 163, 292, 292, 292, 292, 292, 292, 292, - 62, 64, 292, 292, 292, 292, 292, 292, 292, 90, - 292, 292, 292, 292, 231, 292, 292, 292, 243, 292, - 292, 292, 292, 292, 292, 292, 193, 33, 27, 29, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 34, - 292, 28, 30, 292, 292, 292, 292, 292, 292, 292, - 292, 87, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 292, 292, 292, 292, 195, - 192, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 61, 292, 292, 118, 292, - 108, 292, 292, 292, 292, 292, 292, 292, 292, 136, - 13, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 257, 292, 260, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 12, 292, 292, 21, 292, 292, 292, - 237, 292, 292, 292, 245, 292, 65, 292, 201, 292, - 292, 194, 292, 292, 60, 292, 292, 292, 292, 22, - 292, 42, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 150, 149, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 196, 190, 292, 206, 292, - 292, 249, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 72, 292, 292, 292, - 232, 292, 292, 292, 292, 176, 292, 292, 292, 292, - 200, 292, 292, 292, 292, 292, 292, 292, 292, 266, - 267, 147, 66, 292, 292, 157, 292, 292, 102, 103, - 292, 292, 292, 292, 142, 292, 144, 292, 181, 292, - 292, 292, 292, 148, 292, 292, 209, 292, 292, 292, - - 292, 292, 292, 292, 125, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 216, 292, 292, 292, - 23, 292, 242, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 182, 292, 292, 230, 292, 261, - 292, 175, 292, 292, 292, 292, 47, 292, 292, 292, - 292, 4, 292, 292, 124, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 212, 36, 37, 292, 292, 292, 292, 292, 292, - 292, 250, 292, 292, 292, 292, 292, 292, 218, 292, - 292, 292, 185, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 75, 292, 48, 236, 292, 213, 292, 292, - 292, 292, 11, 292, 292, 292, 292, 292, 292, 292, - 183, 79, 292, 39, 292, 292, 292, 292, 292, 292, - 292, 292, 153, 292, 292, 292, 292, 292, 127, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 217, 121, - 292, 292, 109, 110, 292, 292, 292, 81, 85, 80, - 292, 73, 292, 292, 292, 292, 292, 10, 292, 292, - 292, 234, 292, 292, 273, 38, 292, 292, 292, 292, - 292, 152, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 86, 84, 292, 74, 258, 292, 292, 292, 292, 292, - 292, 292, 169, 292, 292, 292, 184, 292, 292, 292, - 292, 292, 292, 292, 292, 143, 68, 292, 292, 292, - 292, 292, 251, 292, 292, 292, 292, 292, 292, 292, - 122, 292, 83, 128, 129, 132, 133, 130, 131, 76, - 292, 235, 292, 292, 146, 292, 292, 292, 292, 292, - 211, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 158, 40, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 89, 292, - - 210, 292, 227, 255, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 5, 292, 202, 292, 292, 256, - 292, 292, 292, 292, 292, 292, 292, 292, 24, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 126, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 165, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 252, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 272, 292, 292, 223, 292, 292, 292, 292, 292, 253, - 292, 292, 292, 292, 292, 292, 254, 292, 292, 292, - - 221, 292, 224, 225, 292, 292, 292, 292, 292, 222, - 226, 0 + 1, 1, 282, 282, 286, 286, 290, 290, 294, 294, + 1, 1, 301, 298, 1, 280, 280, 299, 2, 299, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 282, 283, 283, 284, 299, 286, 287, 287, + 288, 299, 293, 290, 291, 291, 292, 299, 294, 295, + 295, 296, 299, 297, 281, 2, 285, 299, 297, 298, + 0, 1, 2, 2, 2, 2, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 282, 0, 286, 0, 293, 0, 290, 294, 0, 297, + 0, 2, 2, 297, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 297, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 112, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 120, 298, 298, 298, 298, + 298, 298, 298, 297, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 96, 298, + 298, 298, 298, 298, 298, 8, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 113, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 125, 298, 297, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 275, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 297, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 54, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 220, 298, 14, 15, 298, 18, 17, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 119, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 204, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 3, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 297, 298, 298, 298, 298, 298, 298, + 298, 270, 298, 298, 269, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 289, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 57, 298, 244, 298, 298, 298, 298, + 298, 298, 298, 298, 276, 277, 298, 298, 298, 298, + 298, 58, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 116, 298, 298, + 298, 298, 298, 298, 298, 298, 193, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 20, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 144, 298, 298, 289, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 94, + 298, 298, 298, 298, 298, 298, 298, 252, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 165, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 143, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 93, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 31, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 32, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 55, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 118, 298, 298, 298, 298, + 298, 111, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 56, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 166, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 45, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 235, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 49, 298, 50, 298, 298, 298, + 298, 298, 97, 298, 98, 298, 298, 298, 298, 95, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 7, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 213, 298, 298, 298, + 298, 146, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 46, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 185, 298, 184, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 16, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 59, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 192, + + 298, 298, 298, 298, 298, 298, 100, 298, 99, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 176, + 298, 298, 298, 298, 298, 298, 298, 298, 126, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 78, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 82, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 53, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 179, 180, 298, 298, 298, 246, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 6, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 250, + 298, 298, 298, 298, 298, 298, 271, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 41, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 43, 298, 298, 298, 298, 298, 298, 298, 298, 172, + 298, 298, 298, 121, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 197, 298, 173, 298, 298, 298, + 210, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 44, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 123, 105, 298, + 106, 298, 298, 298, 104, 298, 298, 298, 298, 298, + 298, 298, 298, 141, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 234, 298, 298, 298, 298, + + 298, 298, 298, 298, 174, 298, 298, 298, 298, 298, + 177, 298, 183, 298, 298, 298, 298, 298, 209, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 92, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 117, 298, 298, 298, 298, 298, 298, 51, 298, + 298, 298, 25, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 19, 298, 298, 298, 298, 298, 298, 26, + 35, 298, 151, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 67, 69, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 254, 298, 298, + 298, 221, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 107, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 140, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 265, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 145, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 203, + + 298, 298, 298, 298, 298, 298, 298, 298, 274, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 162, 298, 298, 298, 298, 298, 298, 298, 298, 101, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 157, + 298, 167, 298, 298, 298, 298, 298, 129, 298, 298, + 298, 298, 298, 88, 298, 298, 298, 298, 195, 298, + 298, 298, 298, 298, 298, 211, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 226, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 122, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 161, + 298, 298, 298, 298, 298, 70, 71, 298, 298, 298, + 298, 298, 52, 298, 298, 298, 298, 298, 77, 168, + 298, 186, 298, 214, 298, 298, 178, 247, 298, 298, + 298, 298, 298, 63, 298, 170, 298, 298, 298, 298, + 298, 9, 298, 298, 298, 91, 298, 298, 298, 298, + 239, 298, 298, 298, 194, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 160, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 147, 298, 253, 298, 298, 298, 298, + 225, 298, 298, 298, 298, 298, 298, 298, 298, 205, + 298, 298, 298, 298, 245, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 268, + 298, 169, 298, 298, 298, 298, 298, 298, 298, 62, + 64, 298, 298, 298, 298, 298, 298, 298, 90, 298, + 298, 298, 298, 237, 298, 298, 298, 249, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 199, 33, 27, + 29, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 34, 298, 28, 30, 298, 298, 298, 298, 298, 298, + 298, 298, 87, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 201, 198, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 61, 298, 298, 124, + 298, 108, 298, 298, 298, 298, 298, 298, 298, 298, + 142, 13, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 263, 298, 266, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 12, 298, 298, 21, 298, 298, + 298, 243, 298, 298, 298, 251, 298, 298, 298, 65, + 298, 207, 298, 298, 200, 298, 298, 60, 298, 298, + 298, 298, 22, 298, 42, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 156, 155, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 202, 196, + 298, 212, 298, 298, 255, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 72, + 298, 298, 298, 238, 298, 298, 298, 298, 182, 298, + + 298, 298, 298, 206, 298, 298, 298, 298, 298, 298, + 298, 298, 272, 273, 153, 298, 298, 66, 298, 298, + 163, 298, 298, 102, 103, 298, 298, 298, 298, 148, + 298, 150, 298, 187, 298, 298, 298, 298, 154, 298, + 298, 215, 298, 298, 298, 298, 298, 298, 298, 131, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 222, 298, 298, 298, 23, 298, 248, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 188, + 298, 298, 236, 298, 267, 298, 181, 298, 298, 298, + 298, 47, 298, 298, 298, 298, 4, 298, 298, 298, + + 115, 130, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 218, 36, + 37, 298, 298, 298, 298, 298, 298, 298, 256, 298, + 298, 298, 298, 298, 298, 224, 298, 298, 298, 191, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 75, + 298, 48, 242, 298, 219, 298, 298, 298, 298, 11, + 298, 298, 298, 298, 298, 114, 298, 298, 189, 79, + 298, 39, 298, 298, 298, 298, 298, 298, 298, 298, + 159, 298, 298, 298, 298, 298, 133, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 223, 127, 298, 298, + + 109, 110, 298, 298, 298, 81, 85, 80, 298, 73, + 298, 298, 298, 298, 298, 10, 298, 298, 298, 240, + 298, 298, 279, 38, 298, 298, 298, 298, 298, 158, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 86, 84, + 298, 74, 264, 298, 298, 298, 298, 298, 298, 298, + 175, 298, 298, 298, 190, 298, 298, 298, 298, 298, + 298, 298, 298, 149, 68, 298, 298, 298, 298, 298, + 257, 298, 298, 298, 298, 298, 298, 298, 128, 298, + 83, 134, 135, 138, 139, 136, 137, 76, 298, 241, + + 298, 298, 152, 298, 298, 298, 298, 298, 217, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 164, 40, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 89, 298, 216, 298, + 233, 261, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 5, 298, 208, 298, 298, 262, 298, 298, + 298, 298, 298, 298, 298, 298, 24, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 132, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 171, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 258, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 278, 298, + 298, 229, 298, 298, 298, 298, 298, 259, 298, 298, + 298, 298, 298, 298, 260, 298, 298, 298, 227, 298, + 230, 231, 298, 298, 298, 298, 298, 228, 232, 0 } ; static const YY_CHAR yy_ec[256] = @@ -728,659 +732,669 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[2927] = +static const flex_int16_t yy_base[2975] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2420, 2266, 81, 5685, 5685, 5685, 96, 52, + 90, 112, 4198, 4028, 81, 5768, 5768, 5768, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, - 76, 135, 141, 117, 148, 145, 160, 164, 185, 176, - 191, 152, 2154, 5685, 5685, 5685, 107, 1925, 5685, 5685, - 5685, 165, 1534, 1291, 5685, 5685, 5685, 211, 1056, 5685, - 5685, 5685, 180, 911, 5685, 217, 5685, 221, 168, 758, - 225, 189, 0, 232, 0, 0, 226, 189, 85, 221, - 114, 227, 234, 156, 219, 235, 239, 236, 238, 132, - 246, 242, 241, 252, 244, 247, 266, 243, 258, 273, - - 275, 187, 277, 278, 267, 274, 280, 283, 287, 289, - 295, 297, 298, 299, 304, 305, 306, 311, 307, 315, - 309, 313, 330, 318, 329, 325, 320, 335, 336, 339, - 340, 343, 345, 342, 346, 350, 349, 355, 357, 713, - 373, 703, 376, 671, 382, 632, 365, 386, 198, 390, - 394, 0, 386, 374, 396, 388, 392, 393, 257, 391, - 395, 397, 398, 400, 402, 415, 404, 413, 421, 423, - 427, 424, 431, 434, 435, 436, 437, 419, 448, 446, - 451, 443, 452, 454, 455, 458, 459, 474, 460, 461, - 410, 468, 476, 478, 485, 470, 488, 489, 486, 493, - - 491, 501, 503, 499, 500, 502, 504, 505, 509, 510, - 512, 514, 517, 515, 516, 520, 522, 521, 529, 523, - 534, 535, 542, 537, 538, 544, 541, 555, 556, 547, - 558, 551, 559, 560, 565, 568, 575, 570, 567, 571, - 579, 574, 577, 578, 582, 580, 594, 601, 592, 599, - 602, 600, 605, 606, 607, 608, 584, 617, 610, 581, - 622, 628, 612, 626, 631, 618, 614, 633, 635, 637, - 644, 640, 647, 643, 648, 649, 650, 652, 661, 656, - 659, 658, 660, 662, 664, 665, 668, 666, 674, 669, - 678, 680, 688, 686, 685, 699, 691, 694, 690, 701, - - 693, 702, 709, 723, 730, 707, 714, 705, 727, 728, - 733, 735, 738, 741, 742, 743, 744, 745, 746, 754, - 749, 752, 759, 762, 766, 770, 750, 776, 751, 780, - 774, 778, 785, 807, 782, 772, 784, 786, 789, 5685, - 812, 790, 832, 796, 791, 819, 814, 816, 805, 821, - 829, 822, 833, 817, 825, 839, 855, 840, 842, 850, - 852, 856, 854, 864, 865, 857, 860, 868, 879, 871, - 874, 875, 886, 878, 876, 881, 885, 887, 891, 900, - 893, 901, 888, 902, 905, 908, 906, 912, 909, 913, - 916, 930, 910, 927, 932, 929, 935, 937, 939, 941, - - 942, 943, 944, 954, 946, 949, 951, 953, 957, 959, - 961, 963, 966, 965, 967, 971, 969, 978, 980, 974, - 986, 787, 5685, 988, 976, 982, 991, 992, 993, 5685, - 996, 998, 994, 1007, 1002, 1009, 999, 1006, 1013, 1023, - 1010, 1019, 1031, 1015, 1027, 1026, 1033, 1034, 1035, 1028, - 1036, 1037, 1039, 1042, 1059, 1044, 1046, 1047, 1050, 1052, - 1062, 1071, 1057, 1077, 1070, 1074, 1087, 1084, 1088, 1089, - 1090, 1093, 1095, 1096, 1098, 1099, 1101, 1102, 1103, 1104, - 1105, 1107, 1108, 1118, 5685, 1106, 1127, 1128, 1117, 1119, - 1130, 1132, 1133, 1045, 1135, 1137, 1136, 1143, 1141, 1153, - - 1142, 1158, 1144, 1157, 1145, 1155, 1161, 1162, 1163, 1164, - 1174, 1171, 1176, 1178, 1187, 1186, 1189, 1196, 1183, 1191, - 1192, 1193, 1195, 1198, 1200, 1199, 1202, 1206, 1213, 1211, - 1208, 1209, 1216, 1223, 1219, 1218, 1225, 1220, 1229, 1227, - 1234, 1235, 1241, 1231, 5685, 1248, 1243, 1244, 1249, 1251, - 1254, 1258, 1250, 1259, 1260, 1261, 1264, 1262, 1271, 1272, - 1265, 1273, 1276, 1268, 1292, 1287, 1288, 1297, 1296, 1278, - 1290, 1298, 1306, 1302, 1309, 1301, 1305, 1317, 1313, 1314, - 1315, 1324, 1319, 1320, 1323, 1322, 1336, 1321, 1332, 1345, - 1341, 1331, 1167, 1343, 1346, 1347, 1349, 1350, 1351, 1352, - - 1359, 1354, 1355, 1360, 1361, 1363, 1366, 1357, 1371, 1379, - 1374, 1377, 1378, 1380, 1383, 1382, 1390, 1384, 1391, 1392, - 1393, 1394, 1401, 1396, 1403, 1398, 1408, 1404, 1416, 1417, - 1418, 1419, 1421, 1422, 1426, 1423, 1429, 1433, 1432, 1434, - 1437, 1439, 1445, 1447, 1438, 1450, 1440, 1453, 1454, 1457, - 1460, 1463, 1464, 5685, 1458, 1471, 1466, 1468, 1470, 1474, - 1476, 1484, 1479, 1481, 1480, 1483, 1485, 1491, 5685, 1489, - 5685, 5685, 1490, 5685, 5685, 1492, 1506, 1493, 1511, 1516, - 1518, 1514, 1502, 1521, 1522, 1529, 1543, 1526, 1527, 1528, - 1524, 1530, 1537, 1532, 1540, 1538, 1551, 1554, 1557, 1558, - - 1495, 1556, 1564, 1565, 1566, 1570, 1567, 1571, 1573, 1576, - 1577, 1574, 1579, 1580, 1587, 1593, 1585, 1600, 5685, 1596, - 1603, 1610, 1606, 1613, 1605, 1609, 1612, 1617, 1619, 1614, - 1621, 1623, 1624, 1625, 1627, 1629, 1632, 1636, 1633, 5685, - 1634, 1637, 1642, 1641, 1645, 1649, 1651, 1635, 1655, 1653, - 1657, 1658, 1659, 1661, 5685, 1669, 1663, 1666, 1670, 1673, - 1677, 1678, 1674, 1679, 1680, 1681, 1682, 1684, 1688, 1691, - 1692, 1693, 1690, 1700, 1706, 1703, 1708, 1711, 1695, 1716, - 1718, 1719, 1720, 1721, 1722, 1724, 1729, 1728, 1732, 1730, - 1737, 1739, 1745, 1734, 1735, 1746, 1736, 1758, 1754, 1760, - - 1752, 1582, 1762, 1761, 1765, 1766, 1767, 1769, 1771, 1773, - 1774, 1776, 1779, 1778, 1782, 5685, 1780, 1788, 5685, 1785, - 1787, 1809, 1789, 1791, 1792, 1794, 1796, 1806, 1800, 1797, - 1817, 1813, 1829, 1819, 1831, 1824, 1832, 1836, 1826, 1834, - 1838, 1842, 1849, 1850, 1846, 1856, 1859, 1854, 1858, 1857, - 1878, 1860, 1861, 1867, 1862, 1863, 1865, 1880, 1868, 1871, - 1883, 1894, 1869, 5685, 1891, 1896, 1887, 1803, 1895, 1900, - 1901, 1903, 1907, 1908, 1915, 1910, 1911, 1913, 1914, 1917, - 1921, 1923, 1927, 1928, 1926, 1922, 1944, 5685, 1929, 5685, - 1933, 1940, 1942, 1943, 1946, 1948, 1949, 1950, 5685, 5685, - - 1951, 1953, 1958, 1971, 1966, 5685, 1952, 1973, 1974, 1977, - 1969, 1970, 1976, 1982, 1981, 1991, 1984, 1992, 1997, 1987, - 1988, 1998, 1989, 2001, 2002, 1999, 5685, 2009, 2010, 2012, - 2019, 2017, 2014, 2020, 2021, 2027, 2022, 2025, 2029, 2030, - 2032, 2037, 2041, 2034, 2042, 2043, 2052, 5685, 2036, 2050, - 2057, 2053, 2056, 2059, 2060, 2061, 2062, 2063, 2064, 2067, - 2071, 2072, 2080, 2082, 2073, 2081, 2078, 2084, 2087, 2090, - 2093, 2092, 2095, 2094, 2096, 5685, 2097, 2099, 124, 2100, - 2105, 2106, 2107, 2108, 2123, 2109, 2125, 2130, 2126, 2132, - 2128, 2127, 2135, 2137, 2136, 2138, 2139, 2140, 2143, 5685, - - 2145, 2147, 2148, 2150, 2152, 2153, 2163, 5685, 2159, 2164, - 2167, 2156, 2172, 2171, 2176, 2178, 2180, 2181, 2184, 2187, - 5685, 2191, 2188, 2192, 2194, 2196, 2111, 2198, 2200, 2202, - 2203, 2204, 2205, 2211, 2209, 2208, 2210, 2212, 2213, 2223, - 2224, 2225, 2226, 5685, 2234, 2229, 2232, 2233, 2236, 2237, - 2248, 2239, 2246, 2250, 2251, 2264, 2254, 2256, 2261, 2270, - 2257, 2259, 2280, 2276, 2279, 2285, 2275, 2288, 2290, 2278, - 2282, 2292, 2291, 2294, 2302, 2297, 2309, 2310, 2307, 2313, - 2305, 2326, 2308, 2318, 5685, 2320, 2322, 2328, 2330, 2341, - 2331, 2333, 2334, 2336, 2332, 2342, 2344, 2343, 2349, 2350, - - 2347, 2355, 2358, 2360, 2363, 2359, 2367, 2368, 5685, 2369, - 2371, 2375, 2377, 2379, 2380, 2382, 2384, 2387, 2388, 2389, - 2391, 2393, 2395, 2396, 2397, 2399, 2401, 2404, 5685, 2411, - 2405, 2407, 2418, 2417, 2419, 2421, 2427, 2429, 2415, 2430, - 2431, 2432, 5685, 2441, 2443, 2439, 2446, 2442, 2447, 2448, - 2450, 2452, 5685, 2453, 2454, 2461, 2462, 2457, 5685, 2464, - 2460, 2465, 2467, 2468, 2469, 2470, 2475, 2476, 2478, 2481, - 2484, 2488, 2489, 5685, 2490, 2498, 2499, 2491, 2502, 2493, - 2503, 2504, 2508, 2512, 2506, 2521, 2523, 2524, 2525, 2505, - 2528, 2529, 2530, 2532, 2533, 5685, 2526, 2536, 2538, 2541, - - 2539, 2545, 2547, 2555, 2550, 2551, 2557, 2552, 2558, 2559, - 2560, 2561, 2564, 2572, 2574, 2575, 2577, 2579, 2580, 2581, - 2588, 2593, 2594, 2596, 5685, 2599, 2600, 2602, 2589, 2591, - 2603, 2606, 2608, 2610, 2612, 2614, 2615, 2616, 2623, 2627, - 2624, 2631, 2628, 2633, 2625, 2636, 2637, 2638, 2639, 2646, - 2643, 2642, 2651, 2650, 2649, 2659, 2654, 2660, 2661, 2662, - 2663, 2664, 2667, 2665, 2671, 2672, 2676, 2678, 2686, 2687, - 2688, 2689, 2692, 5685, 2691, 2693, 2695, 2701, 2704, 2705, - 2707, 2709, 2714, 2699, 2706, 2716, 2726, 2722, 5685, 2723, - 5685, 2725, 2727, 2728, 2737, 2730, 5685, 2734, 5685, 2735, - - 2740, 2742, 2743, 5685, 2744, 2745, 2748, 2751, 2749, 2753, - 2754, 2755, 2756, 2761, 2763, 2767, 2766, 2768, 2771, 2772, - 2775, 2777, 2779, 2783, 2776, 2788, 2784, 2786, 2794, 2793, - 2795, 5685, 2802, 2799, 2804, 2803, 2805, 2807, 2808, 2810, - 2811, 2813, 2816, 2821, 2814, 2827, 2830, 2842, 2820, 2843, - 5685, 2824, 2845, 2828, 2846, 5685, 2848, 2839, 2849, 2854, - 2851, 2841, 2856, 2857, 2861, 2858, 2864, 2869, 2873, 2874, - 2868, 2876, 2866, 2880, 2888, 2885, 2892, 2894, 2902, 2898, - 2886, 2889, 2878, 2900, 2901, 2911, 2912, 2908, 2915, 2910, - 2914, 2917, 2918, 2921, 2922, 2924, 2926, 2927, 2925, 2930, - - 2934, 2929, 2931, 2932, 2935, 5685, 2948, 2938, 2945, 2952, - 2954, 2957, 2936, 2955, 2959, 2961, 2963, 2965, 2962, 5685, - 2964, 5685, 2966, 2972, 2981, 2983, 2985, 2986, 2987, 2989, - 2992, 2993, 2994, 2995, 2996, 2998, 3001, 3002, 3007, 3008, - 3009, 3023, 3006, 3011, 3013, 3018, 3020, 3025, 5685, 3027, - 3028, 3029, 3033, 3034, 3035, 3038, 3042, 3041, 3044, 3045, - 3056, 5685, 3047, 3064, 3048, 3068, 3075, 3057, 3076, 3071, - 5685, 3060, 3072, 3079, 3074, 3081, 3088, 5685, 3083, 5685, - 3078, 3085, 3092, 3089, 3093, 3094, 3095, 3096, 3102, 3105, - 3114, 3103, 3111, 3112, 3113, 3115, 3124, 3117, 3119, 3120, - - 5685, 3122, 3125, 3129, 3136, 3137, 3143, 3140, 3127, 5685, - 3144, 3147, 3134, 3151, 3152, 3155, 3156, 3157, 3160, 3161, - 3158, 3162, 3174, 3166, 3165, 3169, 3180, 3181, 3186, 5685, - 3187, 3167, 3194, 3190, 3191, 3193, 3196, 3197, 3198, 3200, - 3201, 3202, 3204, 3209, 3208, 3205, 3206, 3211, 3212, 3225, - 3222, 3214, 3226, 3230, 3229, 3232, 3236, 3237, 3240, 3242, - 3233, 3244, 3247, 3251, 3254, 3256, 3257, 3264, 3259, 5685, - 3266, 3263, 3271, 3267, 3270, 3269, 3276, 3280, 3282, 3278, - 3279, 3289, 3284, 5685, 3291, 3286, 3303, 3297, 3287, 3312, - 3307, 3293, 3288, 3311, 3314, 3317, 3315, 3319, 3320, 3323, - - 3324, 5685, 5685, 3326, 3327, 3328, 5685, 3329, 3330, 3339, - 3332, 3334, 3342, 3336, 3345, 3346, 3347, 3349, 3350, 5685, - 3353, 3362, 3359, 3360, 3369, 3370, 3374, 3371, 3368, 3361, - 3365, 3378, 3380, 3382, 3385, 3386, 3394, 3389, 3391, 3392, - 5685, 3393, 3395, 3401, 5685, 3398, 3399, 3402, 3410, 3405, - 3418, 3415, 3421, 3407, 3423, 3424, 3425, 3427, 3429, 3438, - 3433, 3434, 3436, 3440, 3442, 5685, 3444, 3445, 3450, 3452, - 3455, 3463, 3464, 3465, 3460, 3466, 3467, 3474, 5685, 3469, - 3472, 3473, 3475, 3483, 3480, 3484, 3482, 5685, 3487, 3488, - 3490, 5685, 3489, 3496, 3504, 3506, 3491, 3514, 3509, 3493, - - 3510, 3512, 5685, 3513, 5685, 3517, 3519, 3522, 5685, 3524, - 3525, 3527, 3529, 3526, 3533, 3534, 3541, 3530, 3542, 3543, - 3544, 3545, 3547, 3554, 3546, 5685, 3555, 3553, 3557, 3558, - 3564, 3562, 3565, 3570, 3568, 5685, 5685, 3577, 5685, 3569, - 3578, 3579, 5685, 3582, 3584, 3589, 3585, 3587, 3590, 3600, - 3593, 5685, 3596, 3591, 3604, 3606, 3607, 3608, 3609, 3610, - 3612, 3614, 3613, 5685, 3616, 3618, 3624, 3617, 3625, 3631, - 3637, 3626, 5685, 3639, 3641, 3633, 3647, 3648, 5685, 3640, - 5685, 3650, 3653, 3654, 3656, 3657, 5685, 3659, 3660, 3664, - 3665, 3667, 3669, 3670, 3673, 3677, 3679, 3686, 3682, 3681, - - 3684, 5685, 3683, 3689, 3697, 3700, 3690, 3688, 3704, 3706, - 3707, 3710, 3713, 3715, 3716, 3719, 3714, 3721, 3722, 3725, - 3735, 3728, 3731, 5685, 3732, 3736, 3740, 5685, 3738, 3739, - 3747, 3749, 3742, 3750, 3753, 3752, 3755, 5685, 3761, 3762, - 3757, 3758, 3767, 3771, 5685, 5685, 3775, 5685, 3776, 3764, - 3778, 3765, 3754, 3786, 3785, 3788, 3790, 3791, 3792, 3798, - 3799, 3806, 3807, 3808, 3811, 3685, 3804, 5685, 5685, 3816, - 3817, 3813, 3820, 3825, 3809, 3823, 3833, 3829, 3830, 3836, - 3837, 3844, 5685, 3845, 3828, 3846, 5685, 3839, 3847, 3840, - 3851, 3853, 3854, 3855, 3857, 3861, 3859, 3862, 3860, 3868, - - 3869, 3870, 3876, 3873, 3878, 5685, 3879, 3881, 3882, 3883, - 3884, 3885, 3890, 3893, 3892, 5685, 3894, 3896, 3899, 3897, - 3898, 3903, 3914, 3918, 3920, 3907, 3921, 3923, 3926, 3928, - 3925, 5685, 3931, 3929, 3932, 3933, 3940, 3942, 3937, 3944, - 3946, 3948, 3950, 3953, 3955, 3960, 3957, 3961, 3962, 3963, - 5685, 3967, 3969, 3966, 3974, 3975, 3977, 3978, 3979, 3987, - 3984, 3989, 3988, 3991, 5685, 3992, 3994, 3996, 3997, 3999, - 4000, 4005, 4006, 5685, 4009, 4002, 4016, 4010, 4013, 4014, - 4018, 4026, 4025, 5685, 4029, 4030, 4031, 4032, 4033, 4034, - 4037, 4038, 5685, 4043, 4044, 4047, 4056, 4040, 4058, 4054, - - 4060, 4051, 4053, 4067, 4063, 4068, 4069, 4071, 4073, 4081, - 4085, 4082, 5685, 4074, 5685, 4083, 4088, 4090, 4095, 4091, - 5685, 4093, 4098, 4100, 4097, 4101, 5685, 4103, 4102, 4105, - 4107, 5685, 4121, 4117, 4106, 4116, 4130, 4131, 5685, 4134, - 4135, 4136, 4143, 4145, 4147, 4140, 4148, 4144, 4150, 4108, - 4151, 5685, 4153, 4155, 4160, 4161, 4162, 4163, 4165, 4168, - 4172, 5685, 4170, 4173, 4174, 4176, 4177, 4178, 4179, 4186, - 4182, 4187, 5685, 4191, 4192, 4195, 4196, 4123, 5685, 5685, - 4199, 4200, 4203, 4202, 4208, 5685, 4210, 4217, 4212, 4216, - 4218, 5685, 5685, 4220, 5685, 4221, 5685, 4222, 4225, 5685, - - 5685, 4226, 4223, 4229, 4230, 4233, 5685, 4238, 5685, 4246, - 4242, 4244, 4245, 4247, 5685, 4250, 4251, 4254, 5685, 4248, - 4261, 4256, 4258, 5685, 4265, 4259, 4262, 5685, 4270, 4276, - 4272, 4279, 4266, 4281, 4282, 4283, 4285, 4287, 4289, 4292, - 4294, 4297, 4298, 4299, 4300, 4305, 4302, 4307, 4308, 4310, - 4312, 4313, 4318, 4321, 4322, 4315, 4323, 4324, 4325, 4329, - 4331, 4335, 4338, 4339, 4340, 4341, 4343, 4344, 4346, 4349, - 4353, 4342, 4352, 5685, 4347, 4354, 4358, 4369, 4359, 4370, - 4374, 4364, 4378, 4382, 5685, 4384, 5685, 4386, 4371, 4380, - 4388, 5685, 4390, 4393, 4392, 4395, 4394, 4396, 4399, 4397, - - 5685, 4401, 4402, 4404, 4406, 5685, 4409, 4420, 4408, 4412, - 4421, 4422, 4423, 4425, 4429, 4427, 4432, 4434, 4442, 4435, - 4439, 4438, 4444, 4440, 4447, 4450, 4456, 4452, 4459, 4463, - 5685, 4464, 5685, 4465, 4466, 4468, 4469, 4470, 4471, 4473, - 5685, 5685, 4476, 4478, 4487, 4479, 4472, 4498, 4484, 5685, - 4493, 4495, 4501, 4502, 5685, 4503, 4504, 4506, 5685, 4507, - 4510, 4511, 4513, 4477, 4514, 4517, 5685, 5685, 5685, 5685, - 4520, 4518, 4528, 4522, 4525, 4532, 4533, 4537, 4529, 5685, - 4546, 5685, 5685, 4534, 4543, 4547, 4549, 4550, 4551, 4553, - 4552, 5685, 4556, 4559, 4563, 4557, 4566, 4574, 4569, 4575, - - 4567, 4577, 4584, 4581, 4582, 4579, 4587, 4589, 4591, 5685, - 5685, 4593, 4597, 4598, 4605, 4602, 4603, 4615, 4610, 4611, - 4612, 4613, 4617, 4618, 4619, 5685, 4622, 4626, 5685, 4620, - 5685, 4630, 4633, 4624, 4634, 4636, 4637, 4639, 4641, 5685, - 5685, 4643, 4644, 4648, 4652, 4649, 4654, 4655, 4657, 4653, - 5685, 4658, 5685, 4659, 4661, 4675, 4660, 4677, 4682, 4684, - 4681, 4683, 4687, 5685, 4686, 4688, 5685, 4689, 4690, 4694, - 5685, 4696, 4699, 4703, 5685, 4706, 5685, 4708, 5685, 4700, - 4716, 5685, 4711, 4712, 5685, 4718, 4722, 4666, 4714, 5685, - 4719, 5685, 4723, 4725, 4728, 4733, 4726, 4735, 4736, 4730, - - 4738, 4745, 4747, 4740, 5685, 5685, 4756, 4742, 4751, 4753, - 4754, 4763, 4758, 4762, 4768, 5685, 5685, 4759, 5685, 4761, - 4772, 5685, 4770, 4774, 4776, 4779, 4778, 4780, 4785, 4782, - 4786, 4789, 4804, 4787, 4791, 4801, 4807, 4809, 4811, 4813, - 4814, 4815, 4792, 4816, 4817, 4820, 5685, 4822, 4823, 4824, - 5685, 4828, 4831, 4833, 4834, 5685, 4844, 4836, 4841, 4846, - 5685, 4830, 4852, 4849, 4847, 4854, 4863, 4858, 4859, 5685, - 5685, 5685, 5685, 4861, 4864, 5685, 4865, 4866, 5685, 5685, - 4867, 4870, 4873, 4881, 5685, 4872, 5685, 4876, 5685, 4880, - 4883, 4886, 4889, 5685, 4890, 4899, 5685, 4902, 4905, 4907, - - 4908, 4891, 4877, 4909, 5685, 4916, 4913, 4915, 4922, 4894, - 4919, 4923, 4924, 4931, 4926, 4930, 5685, 4927, 4932, 4933, - 5685, 4935, 5685, 4936, 4937, 4939, 4945, 4941, 4944, 4948, - 4955, 4938, 4959, 4952, 5685, 4962, 4966, 5685, 4967, 5685, - 4969, 5685, 4970, 4973, 4974, 4972, 5685, 4976, 4978, 4979, - 4980, 5685, 4981, 4983, 5685, 4987, 4984, 4994, 4996, 4985, - 5001, 5003, 5004, 4991, 5015, 5007, 5010, 5008, 5017, 5018, - 5023, 5685, 5685, 5685, 5019, 5012, 5033, 5030, 5034, 5041, - 5025, 5685, 5039, 5040, 5036, 5048, 5046, 5050, 5685, 5052, - 5038, 5047, 5685, 5054, 5059, 5060, 5061, 5062, 5069, 5071, - - 5073, 5074, 5685, 5077, 5685, 5685, 5066, 5685, 5078, 5080, - 5081, 5082, 5685, 5087, 5084, 5088, 5090, 5092, 5093, 5089, - 5685, 5685, 5096, 5685, 5105, 5101, 5097, 5113, 5109, 5110, - 5115, 5117, 5685, 5116, 5119, 5120, 5123, 5124, 5685, 5126, - 5127, 5128, 5129, 5132, 5131, 5137, 5138, 5140, 5685, 5685, - 5133, 5143, 5685, 5685, 5142, 5152, 5157, 5685, 5685, 5685, - 5163, 5685, 5165, 5169, 5173, 5177, 5168, 5685, 5179, 5158, - 5180, 5685, 5181, 5183, 5685, 5685, 5160, 5184, 5188, 5187, - 5189, 5685, 5190, 5193, 5197, 5200, 5206, 5195, 5207, 5209, - 5217, 5219, 5201, 5214, 5203, 5215, 5222, 5223, 5231, 5228, - - 5685, 5685, 5235, 5685, 5685, 5237, 5239, 5241, 5244, 5246, - 5248, 5250, 5685, 5251, 5253, 5254, 5685, 5256, 5258, 5255, - 5259, 5261, 5262, 5264, 5266, 5685, 5685, 5267, 5268, 5269, - 5276, 5278, 5685, 5280, 5287, 5284, 5286, 5282, 5288, 5289, - 5685, 5292, 5685, 5685, 5685, 5685, 5685, 5685, 5685, 5685, - 5290, 5685, 5300, 5303, 5685, 5294, 5304, 5308, 5309, 5297, - 5685, 5310, 5314, 5315, 5316, 5319, 5321, 5323, 5324, 5326, - 5330, 5327, 5332, 5328, 5331, 5685, 5685, 5339, 5335, 5338, - 5341, 5357, 5358, 5361, 5363, 5345, 5348, 5366, 5365, 5367, - 5354, 5371, 5380, 5373, 5375, 5377, 5378, 5382, 5685, 5383, - - 5685, 5384, 5685, 5685, 5389, 5390, 5385, 5392, 5400, 5405, - 5396, 5401, 5403, 5407, 5685, 5404, 5685, 5409, 5408, 5685, - 5413, 5415, 5416, 5417, 5418, 5419, 5421, 5427, 5685, 5425, - 5428, 5437, 5429, 5445, 5440, 5444, 5446, 5448, 5442, 5456, - 5452, 5455, 5685, 5458, 5459, 5225, 5460, 5463, 5470, 5465, - 5467, 5468, 5685, 5472, 5474, 5476, 5466, 5473, 5475, 5489, - 5491, 5487, 5685, 5477, 5493, 5495, 5497, 5501, 5499, 5505, - 5506, 5508, 5510, 5340, 5517, 5511, 5513, 5509, 5519, 5521, - 5685, 5523, 5526, 5685, 5527, 5529, 5530, 5531, 5535, 5685, - 5538, 5533, 5539, 5541, 5544, 5546, 5685, 5548, 5555, 5556, - - 5685, 5557, 5685, 5685, 5559, 5551, 5560, 5566, 5568, 5685, - 5685, 5685, 5593, 5600, 5607, 5614, 5621, 88, 5628, 5635, - 5642, 5649, 5656, 5663, 5670, 5677 + 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, + 189, 152, 3954, 5768, 5768, 5768, 107, 3854, 5768, 5768, + 5768, 165, 3105, 2544, 5768, 5768, 5768, 211, 2291, 5768, + 5768, 5768, 180, 2178, 5768, 217, 5768, 221, 168, 1832, + 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, + 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, + 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, + + 279, 262, 282, 285, 270, 272, 291, 293, 290, 299, + 301, 284, 302, 305, 310, 312, 311, 315, 313, 319, + 322, 318, 324, 327, 326, 193, 221, 334, 329, 340, + 342, 325, 348, 349, 350, 353, 354, 357, 363, 359, + 1432, 379, 1075, 381, 915, 388, 450, 365, 392, 278, + 396, 400, 0, 377, 392, 401, 367, 394, 396, 402, + 261, 398, 399, 403, 405, 406, 418, 407, 416, 422, + 426, 430, 427, 434, 424, 437, 439, 440, 429, 451, + 453, 454, 446, 455, 456, 458, 461, 462, 463, 472, + 465, 473, 484, 479, 488, 492, 475, 493, 496, 491, + + 503, 499, 506, 507, 502, 498, 508, 510, 513, 515, + 516, 518, 517, 520, 521, 523, 525, 533, 535, 526, + 534, 528, 547, 542, 549, 546, 548, 552, 551, 555, + 563, 564, 556, 565, 567, 568, 571, 574, 583, 584, + 585, 569, 576, 586, 580, 588, 589, 590, 591, 600, + 603, 602, 605, 612, 593, 611, 613, 615, 616, 617, + 626, 618, 628, 622, 635, 619, 633, 638, 627, 636, + 641, 645, 646, 653, 640, 656, 657, 658, 660, 661, + 663, 671, 666, 667, 648, 670, 672, 674, 675, 676, + 678, 687, 679, 689, 682, 690, 695, 691, 710, 699, + + 700, 701, 702, 711, 704, 712, 713, 726, 731, 721, + 732, 733, 735, 737, 740, 748, 739, 746, 743, 750, + 752, 753, 762, 758, 5768, 757, 760, 773, 766, 774, + 775, 776, 781, 782, 763, 789, 787, 788, 792, 814, + 796, 798, 794, 803, 806, 5768, 804, 808, 838, 810, + 812, 832, 828, 824, 827, 829, 839, 836, 849, 842, + 847, 851, 862, 858, 859, 860, 861, 864, 863, 877, + 872, 870, 799, 874, 889, 875, 882, 886, 887, 892, + 893, 894, 897, 899, 902, 903, 895, 904, 905, 908, + 913, 914, 916, 917, 927, 929, 921, 940, 918, 935, + + 942, 943, 937, 944, 947, 950, 951, 952, 953, 961, + 958, 959, 963, 964, 966, 967, 970, 972, 973, 975, + 977, 979, 978, 985, 988, 981, 994, 989, 5768, 996, + 998, 999, 1000, 1001, 1003, 5768, 1004, 1005, 1006, 1014, + 1017, 1016, 1013, 1023, 1027, 1028, 1029, 1030, 1039, 1012, + 1041, 1040, 1036, 1042, 1046, 1048, 1049, 1051, 1052, 1054, + 1055, 1057, 1060, 1077, 5768, 1061, 1064, 1062, 1063, 1070, + 1080, 1089, 1072, 1090, 1088, 1065, 1105, 1092, 1106, 1100, + 1101, 1111, 1102, 1113, 1107, 1116, 1115, 1117, 1118, 1119, + 1120, 1125, 1126, 1131, 5768, 1133, 1134, 1145, 1135, 1143, + + 1132, 1146, 1148, 1149, 1150, 1152, 1153, 1156, 1162, 1172, + 1157, 1174, 1159, 1170, 1175, 1176, 1177, 1178, 1179, 1180, + 1193, 1184, 1186, 1200, 1207, 1203, 1205, 1212, 1190, 1210, + 1209, 1208, 1215, 1216, 1217, 1218, 1220, 1221, 1230, 1228, + 1226, 1229, 1231, 1242, 1233, 1235, 1240, 1237, 1245, 1247, + 1253, 1254, 1250, 1256, 5768, 1263, 1260, 1267, 1262, 1268, + 1272, 1274, 1261, 1276, 1278, 1280, 1281, 1282, 1284, 1287, + 1289, 1290, 1291, 1292, 1301, 1297, 1307, 1314, 1313, 1315, + 1299, 1305, 1324, 1321, 1328, 1327, 1329, 1337, 1325, 1332, + 1323, 1339, 1335, 1340, 1341, 1344, 1347, 1350, 1352, 1359, + + 1351, 1356, 1366, 1367, 1358, 1369, 1362, 1372, 1373, 1375, + 1376, 1377, 1378, 1385, 1380, 1386, 1382, 1387, 1388, 1389, + 1392, 1390, 1407, 1399, 1400, 1403, 1409, 1410, 1411, 1415, + 1416, 1417, 1418, 1419, 1420, 1423, 1424, 1183, 1425, 1440, + 1426, 1430, 1438, 1441, 1447, 1446, 1450, 1454, 1444, 1456, + 1457, 1458, 1460, 1461, 1465, 1464, 1471, 1468, 1474, 1476, + 1478, 1477, 1480, 1484, 1487, 1481, 5768, 1488, 1495, 1494, + 1496, 1497, 1499, 1501, 1508, 1503, 1505, 1504, 1506, 1510, + 1516, 5768, 1517, 5768, 5768, 1520, 5768, 5768, 1518, 1523, + 1526, 1536, 1533, 1543, 1298, 1539, 1541, 1545, 1552, 1566, + + 1548, 1550, 1551, 1547, 1556, 1561, 1574, 1562, 1549, 1575, + 1577, 1580, 1586, 1513, 1587, 1579, 1554, 1588, 1590, 1589, + 1592, 1595, 1600, 1601, 1594, 1603, 1596, 1611, 1616, 1607, + 1623, 5768, 1619, 1626, 1631, 1627, 1634, 1630, 1629, 1636, + 1638, 1640, 1641, 1642, 1643, 1645, 1646, 1651, 1604, 1647, + 1659, 1654, 5768, 1657, 1658, 1656, 1662, 1669, 1663, 1664, + 1670, 1674, 1675, 1682, 1679, 1677, 1684, 1685, 1686, 1687, + 5768, 1689, 1697, 1693, 1699, 1700, 1702, 1705, 1701, 1706, + 1707, 1708, 1709, 1711, 1715, 1718, 1719, 1720, 1717, 1724, + 1727, 1730, 1735, 1742, 1737, 1739, 1743, 1745, 1746, 1747, + + 1749, 1750, 1758, 1751, 1760, 1755, 1762, 1767, 1772, 1759, + 1771, 1774, 1764, 1780, 1788, 1784, 1777, 1773, 1796, 1789, + 1793, 1794, 1797, 1799, 1800, 1801, 1803, 1806, 1807, 1808, + 1810, 5768, 1811, 1816, 5768, 1814, 1817, 1839, 1818, 1820, + 1821, 1823, 1826, 1833, 1825, 1831, 1841, 1843, 1853, 1849, + 1854, 1856, 1859, 1861, 1862, 1865, 1867, 1869, 1878, 1879, + 1883, 1885, 1890, 1870, 1868, 1877, 1896, 1888, 1889, 1891, + 1899, 1906, 1893, 1901, 1903, 1908, 1912, 1914, 1919, 5768, + 1924, 1925, 1920, 1921, 1932, 1930, 1929, 1933, 1936, 1937, + 1944, 1940, 1941, 1946, 1943, 1947, 1950, 1952, 1956, 1957, + + 1962, 1954, 1973, 5768, 1958, 5768, 1955, 1959, 1972, 1975, + 1976, 1977, 1978, 1980, 5768, 5768, 1981, 1984, 1987, 1996, + 1982, 5768, 1997, 2004, 2001, 2006, 2000, 1999, 2007, 2008, + 2011, 2016, 2012, 2023, 2015, 2022, 2020, 5768, 2028, 2018, + 2024, 2033, 2035, 2036, 2037, 2040, 5768, 2043, 2044, 2047, + 2054, 2046, 2050, 2055, 2058, 2056, 2062, 2063, 2064, 2065, + 2066, 2075, 2076, 2067, 2078, 2081, 2077, 5768, 2074, 2085, + 2093, 2089, 2091, 2088, 2095, 2096, 2098, 2099, 2100, 2103, + 2106, 2107, 2115, 2116, 2108, 2112, 2120, 2113, 2122, 2125, + 2128, 2127, 2129, 2130, 2131, 5768, 2133, 2135, 124, 2139, + + 2140, 2142, 2141, 2148, 2144, 2147, 2164, 2165, 2161, 2160, + 2163, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2177, 5768, + 2151, 2179, 2180, 2182, 2185, 2186, 2189, 5768, 2199, 2202, + 2188, 2201, 2209, 2204, 2210, 2211, 2213, 2218, 2214, 2217, + 5768, 2221, 2224, 2226, 2227, 2228, 2230, 2235, 2237, 2238, + 2239, 2242, 2240, 2241, 2245, 2243, 2246, 2250, 2259, 2249, + 2251, 2256, 2260, 5768, 2272, 2261, 2270, 2263, 2274, 2273, + 2287, 2277, 2280, 2282, 2288, 2297, 2290, 2284, 2298, 2299, + 2304, 2308, 2307, 2313, 2314, 2311, 2315, 2321, 2323, 2324, + 2325, 2329, 2327, 2330, 2331, 2332, 2339, 2340, 2337, 2348, + + 2346, 2353, 2351, 2356, 5768, 2357, 2358, 2341, 2363, 2371, + 2368, 2369, 2375, 2376, 2377, 2378, 2379, 2386, 2381, 2383, + 2384, 2387, 2388, 2394, 2395, 2399, 2400, 2407, 2401, 2409, + 2410, 5768, 2411, 2415, 2404, 2417, 2419, 2421, 2428, 2429, + 2431, 2422, 2425, 2433, 2434, 2435, 2437, 2439, 2440, 2445, + 2442, 5768, 2448, 2450, 2453, 2456, 2455, 2459, 2462, 2468, + 2466, 2452, 2472, 2473, 2474, 5768, 2481, 2482, 2479, 2483, + 2485, 2486, 2488, 2490, 2491, 5768, 2492, 2493, 2501, 2502, + 2497, 5768, 2504, 2500, 2506, 2507, 2508, 2509, 2517, 2510, + 2513, 2515, 2523, 2525, 2521, 2529, 5768, 2531, 2541, 2536, + + 2537, 2539, 2542, 2543, 2545, 2557, 2549, 2552, 2559, 2564, + 2561, 2548, 2555, 2569, 2570, 2571, 2573, 2574, 5768, 2576, + 2577, 2579, 2582, 2580, 2585, 2586, 2598, 2588, 2591, 2593, + 2596, 2599, 2601, 2604, 2606, 2612, 2608, 2615, 2618, 2616, + 2621, 2602, 2625, 2628, 2635, 2632, 2636, 5768, 2639, 2640, + 2634, 2641, 2642, 2645, 2646, 2647, 2649, 2650, 2652, 2651, + 2654, 2667, 2676, 2662, 2663, 2655, 2668, 2671, 2672, 2678, + 2679, 2683, 2690, 2681, 2685, 2694, 2689, 2692, 2702, 2691, + 2693, 2695, 2700, 2703, 2704, 2705, 2706, 2713, 2709, 2723, + 2724, 2726, 2715, 2718, 2731, 2732, 5768, 2735, 2733, 2736, + + 2737, 2742, 2745, 2749, 2739, 2746, 2747, 2757, 2758, 2755, + 2760, 2763, 2770, 2766, 5768, 2767, 5768, 2768, 2769, 2771, + 2779, 2776, 5768, 2781, 5768, 2784, 2791, 2777, 2782, 5768, + 2792, 2786, 2788, 2799, 2794, 2801, 2802, 2803, 2804, 2810, + 2805, 2812, 2807, 2813, 2815, 2816, 2819, 2820, 2826, 2833, + 2828, 2830, 2817, 2836, 2838, 2840, 2841, 5768, 2844, 2845, + 2850, 2849, 2851, 2852, 2853, 2855, 2856, 2858, 2857, 2862, + 2861, 2870, 2874, 2886, 2871, 2888, 5768, 2873, 2884, 2875, + 2889, 5768, 2885, 2892, 2896, 2898, 2893, 2900, 2902, 2901, + 2905, 2903, 2908, 2919, 2920, 2921, 2923, 2924, 2909, 2910, + + 2933, 2930, 2911, 2938, 2942, 2940, 2931, 2941, 2943, 2946, + 2947, 2954, 2955, 2951, 2958, 2953, 2960, 2964, 2967, 2957, + 2961, 2968, 2969, 2970, 2973, 2974, 2977, 2978, 2979, 2980, + 2982, 5768, 2990, 2986, 2991, 2992, 2995, 2997, 3000, 3001, + 3004, 3002, 3005, 3009, 3007, 5768, 3014, 5768, 3008, 3022, + 3016, 3027, 3020, 3028, 3035, 3031, 3036, 3037, 3039, 3040, + 3041, 3042, 3043, 3047, 3050, 3048, 3061, 3054, 3051, 3063, + 3064, 3065, 3067, 3068, 5768, 3069, 3070, 3072, 3074, 3075, + 3081, 3077, 3087, 3085, 3089, 3091, 3101, 5768, 3093, 3097, + 3098, 3106, 3108, 3104, 3114, 3121, 3118, 3125, 3124, 5768, + + 3116, 3117, 3132, 3127, 3134, 3135, 5768, 3133, 5768, 3128, + 3138, 3142, 3139, 3145, 3146, 3149, 3151, 3153, 3160, 3161, + 3156, 3144, 3162, 3166, 3168, 3173, 3170, 3171, 3172, 5768, + 3176, 3177, 3178, 3179, 3183, 3186, 3189, 3193, 5768, 3194, + 3196, 3199, 3200, 3201, 3203, 3205, 3204, 3210, 3213, 3207, + 3208, 3221, 3217, 3206, 3227, 3231, 3232, 3237, 5768, 3234, + 3214, 3244, 3241, 3242, 3243, 3246, 3247, 3248, 3250, 3251, + 3252, 3253, 3259, 3258, 3255, 3256, 3261, 3264, 3275, 3272, + 3263, 3276, 3277, 3280, 3283, 3282, 3286, 3289, 3291, 3292, + 3302, 3303, 3294, 3297, 3306, 3307, 3314, 3310, 5768, 3322, + + 3299, 3325, 3309, 3320, 3327, 3328, 3330, 3331, 3321, 3332, + 3339, 3335, 5768, 3348, 3337, 3336, 3346, 3349, 3359, 3354, + 3340, 3356, 3362, 3358, 3365, 3367, 3368, 3369, 3372, 3373, + 5768, 5768, 3375, 3376, 3379, 5768, 3380, 3378, 3391, 3382, + 3383, 3392, 3395, 3394, 3386, 3396, 3398, 3400, 5768, 3405, + 3414, 3406, 3411, 3415, 3419, 3421, 3417, 3423, 3425, 3427, + 3428, 3430, 3429, 3431, 3434, 3442, 3438, 3437, 3439, 5768, + 3441, 3444, 3448, 3450, 3451, 3454, 5768, 3455, 3456, 3462, + 3463, 3465, 3467, 3473, 3476, 3477, 3478, 3480, 3481, 3482, + 3483, 3485, 3490, 3488, 3495, 3496, 3487, 5768, 3500, 3501, + + 3504, 3507, 3511, 3514, 3521, 3522, 3518, 3520, 3519, 3529, + 5768, 3526, 3528, 3527, 3530, 3540, 3535, 3542, 3533, 5768, + 3537, 3541, 3543, 5768, 3547, 3551, 3554, 3559, 3546, 3562, + 3561, 3563, 3564, 3565, 5768, 3571, 5768, 3569, 3573, 3577, + 5768, 3575, 3579, 3581, 3583, 3580, 3588, 3590, 3597, 3584, + 3592, 3594, 3598, 3599, 3600, 3608, 3606, 5768, 3609, 3607, + 3613, 3614, 3618, 3611, 3616, 3619, 3626, 5768, 5768, 3629, + 5768, 3630, 3631, 3632, 5768, 3634, 3636, 3641, 3638, 3642, + 3644, 3652, 3645, 5768, 3654, 3640, 3656, 3658, 3659, 3662, + 3663, 3664, 3665, 3666, 3671, 5768, 3668, 3670, 3673, 3669, + + 3678, 3683, 3679, 3685, 5768, 3689, 3693, 3692, 3696, 3697, + 5768, 3699, 5768, 3700, 3702, 3703, 3707, 3706, 5768, 3712, + 3713, 3717, 3719, 3721, 3720, 3723, 3724, 3730, 3731, 3738, + 3734, 3733, 3735, 5768, 3736, 3740, 3742, 3749, 3737, 3744, + 3753, 3756, 3757, 3758, 3763, 3760, 3767, 3769, 3771, 3773, + 3765, 5768, 3775, 3777, 3776, 3791, 3786, 3781, 5768, 3782, + 3796, 3798, 5768, 3789, 3788, 3800, 3805, 3792, 3799, 3806, + 3807, 3811, 5768, 3812, 3813, 3814, 3815, 3818, 3819, 5768, + 5768, 3827, 5768, 3829, 3816, 3830, 3831, 3832, 3838, 3837, + 3841, 3843, 3840, 3844, 3851, 3852, 3861, 3864, 3868, 3863, + + 3867, 3853, 5768, 5768, 3870, 3871, 3874, 3877, 3878, 3880, + 3881, 3888, 3884, 3890, 3894, 3895, 3902, 5768, 3901, 3887, + 3904, 5768, 3885, 3898, 3906, 3909, 3911, 3912, 3915, 3914, + 3917, 3918, 3920, 3919, 3922, 3923, 3927, 3926, 3928, 3936, + 5768, 3940, 3937, 3938, 3941, 3943, 3944, 3947, 3949, 3950, + 5768, 3951, 3953, 3955, 3959, 3960, 3962, 3969, 3977, 3979, + 3965, 3973, 3981, 3983, 3985, 3988, 5768, 3989, 3987, 3990, + 3991, 3997, 3999, 4000, 4002, 4004, 4006, 4008, 4009, 4012, + 4016, 4013, 4017, 4018, 4020, 5768, 4024, 4031, 4021, 4034, + 4025, 4035, 4042, 4036, 4047, 4038, 4044, 4048, 4050, 5768, + + 4051, 4053, 4054, 4056, 4062, 4055, 4058, 4063, 5768, 4065, + 4066, 4068, 4070, 4072, 4077, 4079, 4080, 4082, 4083, 4087, + 5768, 4088, 4089, 4092, 4093, 4096, 4098, 4099, 4101, 5768, + 4103, 4106, 4102, 4116, 4112, 4120, 4121, 4123, 4113, 4122, + 4129, 4115, 4125, 4130, 4131, 4136, 4143, 4147, 4142, 5768, + 4144, 5768, 4145, 4148, 4157, 4152, 4155, 5768, 4156, 4158, + 4160, 4163, 4162, 5768, 4167, 4165, 4168, 4170, 5768, 4166, + 4180, 4173, 4176, 4187, 4189, 5768, 4192, 4194, 4195, 4202, + 4204, 4206, 4199, 4207, 4203, 4209, 4201, 4210, 5768, 4212, + 4214, 4219, 4221, 4222, 4224, 4225, 4228, 4230, 5768, 4232, + + 4233, 4234, 4235, 4236, 4238, 4241, 4245, 4242, 4247, 5768, + 4250, 4251, 4261, 4252, 4257, 5768, 5768, 4262, 4263, 4267, + 4268, 4271, 5768, 4269, 4280, 4275, 4278, 4279, 5768, 5768, + 4282, 5768, 4283, 5768, 4284, 4286, 5768, 5768, 4285, 4289, + 4291, 4292, 4300, 5768, 4304, 5768, 4311, 4306, 4293, 4295, + 4308, 5768, 4310, 4312, 4319, 5768, 4314, 4322, 4320, 4321, + 5768, 4326, 4327, 4330, 5768, 4331, 4334, 4335, 4337, 4341, + 4339, 4343, 4328, 4347, 4349, 4351, 4353, 4358, 4360, 4363, + 4354, 4364, 4365, 4367, 4371, 4373, 4374, 4375, 4376, 4378, + 4379, 4381, 4384, 4388, 4389, 4387, 4390, 4391, 4400, 4393, + + 4396, 4404, 4397, 4407, 4408, 4409, 4410, 4412, 4414, 4418, + 4417, 4420, 5768, 4419, 4421, 4423, 4436, 4424, 4425, 4440, + 4442, 4448, 4449, 5768, 4451, 5768, 4453, 4444, 4455, 4456, + 5768, 4457, 4458, 4459, 4460, 4461, 4463, 4464, 4467, 5768, + 4472, 4465, 4469, 4474, 5768, 4479, 4485, 4486, 4489, 4490, + 4491, 4492, 4493, 4496, 4494, 4499, 4501, 4508, 4503, 4505, + 4495, 4517, 4509, 4515, 4518, 4429, 4525, 4526, 4531, 5768, + 4519, 5768, 4527, 4532, 4533, 4534, 4537, 4539, 4541, 5768, + 5768, 4543, 4544, 4549, 4540, 4546, 4553, 4557, 5768, 4550, + 4558, 4567, 4556, 5768, 4568, 4570, 4572, 5768, 4573, 4574, + + 4575, 4577, 4578, 4581, 4582, 4584, 4592, 5768, 5768, 5768, + 5768, 4593, 4586, 4599, 4589, 4600, 4595, 4601, 4606, 4603, + 5768, 4612, 5768, 5768, 4609, 4615, 4607, 4617, 4616, 4619, + 4623, 4625, 5768, 4626, 4629, 4630, 4627, 4637, 4640, 4643, + 4644, 4628, 4645, 4653, 4651, 4654, 4652, 4657, 4659, 4661, + 5768, 5768, 4664, 4666, 4668, 4675, 4673, 4676, 4685, 4680, + 4682, 4683, 4686, 4688, 4689, 4690, 5768, 4693, 4697, 5768, + 4691, 5768, 4699, 4705, 4695, 4706, 4707, 4708, 4711, 4709, + 5768, 5768, 4714, 4715, 4720, 4722, 4723, 4725, 4726, 4728, + 4724, 5768, 4729, 5768, 4730, 4732, 4738, 4731, 4746, 4751, + + 4753, 4749, 4752, 4754, 5768, 4755, 4757, 5768, 4758, 4761, + 4763, 5768, 4765, 4768, 4772, 5768, 4774, 4776, 4777, 5768, + 4784, 5768, 4769, 4787, 5768, 4779, 4790, 5768, 4793, 4795, + 4785, 4796, 5768, 4797, 5768, 4798, 4801, 4802, 4805, 4806, + 4808, 4810, 4811, 4812, 4819, 4817, 4820, 5768, 5768, 4828, + 4814, 4825, 4830, 4832, 4839, 4831, 4836, 4835, 5768, 5768, + 4841, 5768, 4843, 4844, 5768, 4842, 4849, 4848, 4853, 4854, + 4855, 4857, 4860, 4861, 4862, 4869, 4864, 4874, 4876, 4878, + 4881, 4884, 4886, 4887, 4888, 4889, 4890, 4891, 4893, 5768, + 4895, 4897, 4896, 5768, 4904, 4898, 4907, 4912, 5768, 4910, + + 4916, 4918, 4919, 5768, 4920, 4922, 4926, 4923, 4924, 4935, + 4931, 4933, 5768, 5768, 5768, 4936, 4946, 5768, 4948, 4937, + 5768, 4940, 4950, 5768, 5768, 4943, 4951, 4952, 4959, 5768, + 4954, 5768, 4956, 5768, 4958, 4964, 4970, 4965, 5768, 4973, + 4975, 5768, 4981, 4983, 4985, 4986, 4967, 4988, 4989, 5768, + 4996, 4992, 4993, 5000, 4991, 5001, 5003, 5002, 5010, 5005, + 5012, 5768, 5006, 5013, 5014, 5768, 5016, 5768, 5018, 5019, + 4957, 5017, 5021, 5023, 5027, 5024, 5033, 5039, 5036, 5768, + 5041, 5044, 5768, 5045, 5768, 5047, 5768, 5048, 5049, 5051, + 5052, 5768, 5054, 5050, 5056, 5058, 5768, 5060, 5062, 5069, + + 5768, 5768, 5073, 4648, 5072, 5075, 5063, 5081, 5082, 5085, + 5084, 5092, 5087, 5089, 5088, 5091, 5095, 5096, 5768, 5768, + 5768, 5099, 5102, 5109, 5113, 5107, 5120, 5105, 5768, 5116, + 5119, 5115, 5131, 5118, 5127, 5768, 5129, 5130, 5132, 5768, + 5138, 5140, 5142, 5143, 5145, 5152, 5154, 5156, 5158, 5768, + 5160, 5768, 5768, 5146, 5768, 5144, 5148, 5161, 5167, 5768, + 5172, 5162, 5164, 5169, 5174, 5768, 5175, 5177, 5768, 5768, + 5180, 5768, 5186, 5187, 5181, 5196, 5188, 5189, 5199, 5201, + 5768, 5191, 5193, 5202, 5203, 5204, 5768, 5208, 5205, 5209, + 5212, 5217, 5117, 5219, 5218, 5220, 5768, 5768, 5214, 5227, + + 5768, 5768, 5222, 5231, 5238, 5768, 5768, 5768, 5244, 5768, + 5246, 5250, 5254, 5258, 5249, 5768, 5260, 5223, 5257, 5768, + 5228, 5262, 5768, 5768, 5263, 5265, 5264, 5266, 5267, 5768, + 5269, 5270, 5273, 5277, 5281, 5278, 5284, 5283, 5291, 5300, + 5286, 5297, 5296, 5298, 5299, 5301, 5306, 5302, 5768, 5768, + 5309, 5768, 5768, 5314, 5316, 5319, 5322, 5324, 5326, 5328, + 5768, 5329, 5331, 5332, 5768, 5334, 5336, 5333, 5337, 5339, + 5340, 5342, 5344, 5768, 5768, 5345, 5346, 5347, 5354, 5356, + 5768, 5358, 5365, 5362, 5364, 5360, 5366, 5367, 5768, 5370, + 5768, 5768, 5768, 5768, 5768, 5768, 5768, 5768, 5368, 5768, + + 5378, 5381, 5768, 5372, 5382, 5386, 5387, 5375, 5768, 5388, + 5392, 5393, 5394, 5397, 5399, 5401, 5402, 5404, 5408, 5405, + 5410, 5406, 5409, 5768, 5768, 5417, 5413, 5416, 5419, 5435, + 5436, 5439, 5441, 5423, 5426, 5444, 5443, 5445, 5432, 5449, + 5458, 5451, 5453, 5455, 5456, 5460, 5768, 5461, 5768, 5462, + 5768, 5768, 5467, 5468, 5463, 5470, 5478, 5483, 5474, 5479, + 5481, 5485, 5768, 5482, 5768, 5487, 5486, 5768, 5491, 5493, + 5494, 5495, 5496, 5497, 5499, 5505, 5768, 5503, 5506, 5515, + 5507, 5523, 5518, 5522, 5524, 5526, 5520, 5534, 5530, 5533, + 5768, 5536, 5537, 5538, 5541, 5542, 5549, 5544, 5546, 5547, + + 5768, 5551, 5553, 5552, 5554, 5555, 5558, 5566, 5564, 5568, + 5768, 5570, 5575, 5572, 5577, 5579, 5582, 5583, 5584, 5586, + 5588, 5418, 5595, 5592, 5597, 5589, 5600, 5598, 5768, 5602, + 5606, 5768, 5607, 5609, 5610, 5611, 5615, 5768, 5619, 5613, + 5620, 5621, 5624, 5626, 5768, 5628, 5635, 5631, 5768, 5636, + 5768, 5768, 5637, 5640, 5643, 5645, 5647, 5768, 5768, 5768, + 5676, 5683, 5690, 5697, 5704, 88, 5711, 5718, 5725, 5732, + 5739, 5746, 5753, 5760 } ; -static const flex_int16_t yy_def[2927] = +static const flex_int16_t yy_def[2975] = { 0, - 2912, 1, 2913, 2913, 2914, 2914, 2915, 2915, 2916, 2916, - 2917, 2917, 2912, 2918, 2912, 2912, 2912, 2912, 2919, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2920, 2912, 2912, 2912, 2920, 2921, 2912, 2912, - 2912, 2921, 2922, 2912, 2912, 2912, 2912, 2922, 2923, 2912, - 2912, 2912, 2923, 2924, 2912, 2925, 2912, 2924, 2924, 2918, - 2918, 2912, 2926, 2919, 2926, 2919, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2920, - 2920, 2921, 2921, 2922, 2922, 2912, 2923, 2923, 2924, 2924, - 2925, 2925, 2924, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2924, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2924, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2912, 2918, 2924, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2924, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - 2912, 2912, 2918, 2912, 2912, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2924, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2912, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2912, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2912, - - 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2924, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2912, 2918, - - 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2912, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2912, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2912, 2912, 2918, 2918, 2918, 2912, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2912, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2912, 2918, 2912, 2918, 2918, 2918, 2912, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2912, 2912, 2918, 2912, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2912, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, - 2918, 2918, 2918, 2918, 2912, 2912, 2918, 2912, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2912, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2912, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2912, 2918, 2918, 2918, 2918, 2918, - 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2912, - 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, - 2918, 2912, 2912, 2918, 2912, 2918, 2912, 2918, 2918, 2912, - - 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2912, 2918, - 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2912, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2912, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2912, 2918, 2912, 2918, 2918, 2918, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2912, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2912, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2912, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2912, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2912, 2912, 2912, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - 2918, 2912, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2912, 2918, - 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2912, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2912, 2918, 2918, 2918, - 2912, 2918, 2918, 2918, 2912, 2918, 2912, 2918, 2912, 2918, - 2918, 2912, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2912, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2912, 2912, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2912, 2912, 2918, 2912, 2918, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, - 2912, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, - 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, - 2912, 2912, 2912, 2918, 2918, 2912, 2918, 2918, 2912, 2912, - 2918, 2918, 2918, 2918, 2912, 2918, 2912, 2918, 2912, 2918, - 2918, 2918, 2918, 2912, 2918, 2918, 2912, 2918, 2918, 2918, - - 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, - 2912, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2912, 2918, 2912, - 2918, 2912, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, - 2918, 2912, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2912, 2912, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2918, 2918, 2912, 2918, 2912, 2912, 2918, 2912, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2912, 2912, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2912, - 2918, 2918, 2912, 2912, 2918, 2918, 2918, 2912, 2912, 2912, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, - 2918, 2912, 2918, 2918, 2912, 2912, 2918, 2918, 2918, 2918, - 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - - 2912, 2912, 2918, 2912, 2912, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2912, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2912, 2912, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2912, 2918, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, - 2918, 2912, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, - 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2912, 2912, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - - 2912, 2918, 2912, 2912, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2912, 2918, 2912, 2918, 2918, 2912, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, - 2912, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2912, - 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, - - 2912, 2918, 2912, 2912, 2918, 2918, 2918, 2918, 2918, 2912, - 2912, 0, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, - 2912, 2912, 2912, 2912, 2912, 2912 + 2960, 1, 2961, 2961, 2962, 2962, 2963, 2963, 2964, 2964, + 2965, 2965, 2960, 2966, 2960, 2960, 2960, 2960, 2967, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2968, 2960, 2960, 2960, 2968, 2969, 2960, 2960, + 2960, 2969, 2970, 2960, 2960, 2960, 2960, 2970, 2971, 2960, + 2960, 2960, 2971, 2972, 2960, 2973, 2960, 2972, 2972, 2966, + 2966, 2960, 2974, 2967, 2974, 2967, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2968, 2968, 2969, 2969, 2970, 2970, 2960, 2971, 2971, 2972, + 2972, 2973, 2973, 2972, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2972, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2972, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2960, 2966, 2972, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2972, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2960, 2966, 2960, 2960, 2966, 2960, 2960, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2972, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2960, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + + 2966, 2966, 2966, 2960, 2966, 2960, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2960, 2960, 2966, 2966, 2966, 2966, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2972, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2960, 2966, 2960, 2966, 2966, 2966, + 2966, 2966, 2960, 2966, 2960, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2960, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + + 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2960, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2960, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2960, 2966, 2960, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2960, 2966, + 2960, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, + 2960, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2960, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + + 2966, 2966, 2960, 2960, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, + 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2966, 2966, 2960, 2960, 2966, 2966, 2966, + 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2960, 2960, + 2966, 2960, 2966, 2960, 2966, 2966, 2960, 2960, 2966, 2966, + 2966, 2966, 2966, 2960, 2966, 2960, 2966, 2966, 2966, 2966, + 2966, 2960, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2960, 2966, 2960, 2966, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2960, 2966, 2966, + + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2960, 2960, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2966, 2960, 2960, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2960, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2960, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, + + 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2960, 2966, 2966, + 2966, 2960, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2960, + 2966, 2960, 2966, 2966, 2960, 2966, 2966, 2960, 2966, 2966, + 2966, 2966, 2960, 2966, 2960, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2960, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2960, + 2966, 2960, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2960, 2966, + + 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2960, 2960, 2960, 2966, 2966, 2960, 2966, 2966, + 2960, 2966, 2966, 2960, 2960, 2966, 2966, 2966, 2966, 2960, + 2966, 2960, 2966, 2960, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2960, 2966, 2966, 2966, 2960, 2966, 2960, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2960, 2966, 2960, 2966, 2960, 2966, 2966, 2966, + 2966, 2960, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, + + 2960, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2960, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2960, 2960, 2966, 2960, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2960, 2960, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2960, 2966, 2966, + + 2960, 2960, 2966, 2966, 2966, 2960, 2960, 2960, 2966, 2960, + 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2960, + 2966, 2966, 2960, 2960, 2966, 2966, 2966, 2966, 2966, 2960, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2960, + 2966, 2960, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2960, 2960, 2966, 2966, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2966, 2960, + + 2966, 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2960, 2960, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2960, 2966, + 2960, 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2960, 2966, 2960, 2966, 2966, 2960, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2960, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, + 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2966, 2960, 2966, + 2966, 2960, 2966, 2966, 2966, 2966, 2966, 2960, 2966, 2966, + 2966, 2966, 2966, 2966, 2960, 2966, 2966, 2966, 2960, 2966, + 2960, 2960, 2966, 2966, 2966, 2966, 2966, 2960, 2960, 0, + 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, + 2960, 2960, 2960, 2960 } ; -static const flex_int16_t yy_nxt[5726] = +static const flex_int16_t yy_nxt[5809] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1393,628 +1407,637 @@ static const flex_int16_t yy_nxt[5726] = 61, 62, 72, 71, 63, 102, 73, 92, 70, 71, 63, 15, 16, 17, 65, 66, 67, 75, 71, 75, - 75, 71, 75, 68, 104, 156, 103, 93, 75, 76, - 140, 140, 69, 15, 16, 17, 65, 66, 67, 71, + 75, 71, 75, 68, 104, 157, 103, 93, 75, 76, + 141, 141, 69, 15, 16, 17, 65, 66, 67, 71, 71, 83, 77, 78, 71, 68, 79, 71, 84, 87, - 71, 80, 85, 88, 69, 86, 89, 150, 90, 91, - 81, 71, 94, 71, 96, 71, 71, 158, 71, 105, + 71, 80, 85, 88, 69, 86, 89, 151, 90, 91, + 81, 71, 94, 71, 96, 71, 71, 159, 71, 105, 98, 112, 97, 99, 71, 109, 95, 106, 71, 110, - 100, 71, 101, 107, 171, 71, 113, 108, 142, 71, - 114, 142, 118, 71, 119, 111, 115, 71, 120, 116, - 139, 150, 123, 147, 147, 124, 117, 162, 121, 71, - 72, 122, 125, 132, 73, 153, 126, 127, 71, 128, - - 71, 129, 71, 133, 71, 136, 155, 134, 135, 137, - 130, 150, 144, 138, 144, 144, 131, 144, 75, 190, - 75, 75, 149, 75, 149, 149, 70, 149, 70, 70, - 152, 70, 71, 75, 71, 75, 75, 70, 75, 71, - 71, 163, 154, 159, 75, 76, 157, 71, 71, 71, - 160, 71, 71, 172, 71, 71, 71, 71, 165, 71, - 71, 182, 164, 161, 166, 71, 167, 168, 169, 174, - 71, 71, 173, 170, 175, 179, 176, 177, 180, 71, - 71, 249, 188, 181, 178, 183, 71, 71, 71, 184, - 71, 71, 185, 71, 193, 191, 71, 199, 194, 196, - - 71, 198, 71, 200, 197, 186, 187, 189, 71, 202, - 71, 71, 71, 201, 195, 192, 206, 71, 71, 71, - 71, 203, 71, 208, 71, 211, 71, 209, 71, 205, - 204, 71, 213, 71, 224, 207, 222, 216, 71, 210, - 212, 214, 71, 71, 221, 217, 218, 215, 71, 71, - 223, 225, 71, 71, 226, 71, 71, 219, 71, 71, - 232, 220, 71, 71, 236, 228, 227, 235, 71, 233, - 71, 229, 231, 239, 230, 237, 140, 140, 148, 142, - 238, 234, 142, 144, 240, 144, 144, 71, 144, 147, - 147, 149, 242, 149, 149, 75, 149, 75, 75, 150, - - 75, 71, 241, 243, 71, 71, 71, 152, 71, 71, - 71, 71, 250, 71, 247, 71, 253, 71, 244, 245, - 246, 248, 256, 71, 255, 252, 71, 251, 71, 257, - 261, 259, 71, 254, 71, 260, 71, 71, 262, 293, - 71, 265, 258, 263, 71, 270, 266, 71, 71, 71, - 71, 267, 275, 272, 273, 276, 71, 268, 269, 71, - 264, 71, 274, 278, 71, 71, 271, 71, 71, 279, - 280, 71, 71, 71, 71, 294, 285, 286, 291, 282, - 281, 71, 283, 71, 277, 296, 284, 71, 287, 71, - 295, 71, 298, 288, 292, 300, 301, 297, 71, 71, - - 304, 71, 71, 299, 71, 289, 71, 290, 306, 305, - 307, 302, 71, 71, 71, 71, 71, 71, 71, 308, - 303, 310, 71, 71, 312, 71, 309, 71, 71, 71, - 71, 314, 316, 71, 71, 71, 71, 311, 315, 317, - 321, 325, 71, 318, 313, 319, 323, 71, 71, 328, - 71, 71, 322, 320, 71, 71, 330, 71, 324, 331, - 71, 332, 333, 334, 71, 336, 326, 327, 71, 71, - 329, 71, 71, 71, 339, 341, 337, 340, 71, 335, - 71, 71, 343, 71, 71, 344, 338, 71, 71, 347, - 71, 71, 150, 71, 71, 71, 367, 71, 350, 342, - - 352, 354, 345, 346, 348, 71, 349, 71, 355, 358, - 356, 351, 71, 71, 71, 71, 353, 357, 71, 71, - 71, 71, 364, 71, 365, 71, 366, 71, 359, 363, - 71, 71, 360, 146, 362, 71, 368, 361, 369, 71, - 371, 71, 374, 370, 71, 372, 71, 373, 71, 375, - 71, 378, 376, 71, 380, 382, 71, 71, 381, 377, - 71, 71, 71, 71, 385, 71, 383, 379, 387, 71, - 386, 71, 71, 71, 71, 71, 392, 71, 71, 71, - 393, 71, 71, 384, 145, 395, 391, 71, 397, 388, - 389, 71, 390, 71, 399, 402, 394, 396, 71, 71, - - 398, 71, 403, 71, 71, 401, 71, 71, 413, 417, - 404, 400, 71, 411, 71, 71, 143, 414, 71, 415, - 71, 405, 71, 424, 406, 412, 141, 71, 418, 407, - 408, 409, 410, 427, 419, 416, 71, 422, 420, 421, - 71, 71, 423, 71, 425, 430, 71, 426, 71, 428, - 429, 71, 432, 431, 71, 71, 71, 71, 71, 71, - 434, 439, 71, 71, 71, 71, 442, 71, 435, 433, - 441, 71, 71, 453, 438, 71, 436, 448, 437, 71, - 443, 455, 440, 71, 444, 71, 446, 71, 447, 71, - 445, 71, 449, 71, 454, 71, 456, 71, 71, 71, - - 71, 457, 71, 71, 71, 450, 468, 458, 451, 71, - 452, 459, 469, 483, 470, 467, 471, 474, 71, 460, - 71, 461, 568, 462, 482, 71, 484, 71, 472, 150, - 71, 485, 71, 486, 71, 71, 463, 488, 71, 464, - 492, 465, 71, 466, 473, 71, 71, 475, 476, 489, - 487, 490, 71, 71, 491, 71, 493, 477, 494, 478, - 479, 480, 496, 71, 481, 71, 495, 71, 71, 71, - 71, 504, 497, 71, 502, 499, 498, 71, 71, 505, - 501, 71, 503, 500, 71, 507, 509, 71, 71, 71, - 506, 71, 71, 512, 71, 508, 513, 514, 71, 71, - - 71, 71, 519, 511, 71, 516, 71, 524, 521, 510, - 517, 515, 518, 71, 71, 71, 526, 522, 71, 71, - 520, 71, 71, 71, 150, 71, 71, 534, 530, 71, - 535, 527, 523, 525, 533, 529, 528, 537, 536, 531, - 71, 532, 71, 71, 538, 71, 539, 541, 71, 540, - 71, 543, 71, 545, 71, 71, 71, 71, 548, 71, - 546, 549, 71, 550, 71, 544, 71, 71, 542, 547, - 71, 553, 71, 555, 71, 554, 71, 551, 71, 71, - 71, 556, 71, 561, 71, 552, 557, 71, 562, 71, - 560, 71, 564, 71, 563, 71, 558, 559, 565, 71, - - 567, 71, 569, 571, 71, 71, 71, 71, 566, 71, - 570, 71, 71, 572, 579, 71, 581, 582, 574, 71, - 71, 578, 71, 71, 580, 573, 71, 575, 71, 576, - 586, 577, 71, 583, 584, 588, 71, 585, 589, 71, - 71, 71, 591, 587, 71, 592, 71, 71, 71, 71, - 71, 595, 71, 596, 598, 71, 597, 71, 71, 71, - 71, 593, 590, 71, 612, 71, 599, 594, 601, 148, - 71, 600, 71, 602, 611, 71, 649, 610, 603, 615, - 604, 614, 613, 71, 71, 618, 605, 71, 606, 616, - 71, 607, 608, 617, 622, 619, 621, 71, 609, 620, - - 71, 71, 71, 71, 625, 623, 71, 628, 71, 71, - 630, 71, 71, 624, 71, 71, 71, 71, 71, 71, - 71, 71, 636, 627, 632, 626, 631, 637, 641, 633, - 71, 71, 71, 629, 634, 643, 639, 640, 635, 638, - 150, 71, 644, 71, 642, 71, 71, 645, 71, 71, - 71, 652, 650, 654, 71, 71, 71, 71, 71, 647, - 655, 648, 646, 651, 653, 657, 71, 656, 71, 658, - 71, 71, 660, 659, 71, 71, 71, 71, 663, 662, - 71, 668, 758, 661, 71, 664, 669, 71, 671, 71, - 672, 71, 665, 667, 673, 666, 71, 670, 674, 71, - - 71, 675, 71, 676, 71, 71, 71, 678, 71, 71, - 679, 71, 71, 71, 682, 71, 681, 677, 683, 71, - 687, 71, 71, 686, 71, 680, 71, 690, 688, 71, - 692, 71, 71, 71, 685, 684, 71, 693, 71, 689, - 71, 695, 71, 699, 71, 694, 696, 71, 71, 691, - 697, 698, 701, 702, 71, 705, 71, 71, 700, 704, - 707, 71, 71, 71, 71, 706, 708, 71, 703, 710, - 711, 71, 71, 71, 71, 71, 712, 71, 71, 713, - 715, 71, 717, 719, 71, 71, 71, 716, 709, 71, - 714, 71, 146, 724, 720, 718, 731, 721, 723, 725, - - 71, 71, 722, 71, 727, 71, 726, 728, 729, 71, - 71, 71, 730, 734, 71, 71, 736, 737, 71, 71, - 735, 732, 71, 738, 739, 733, 71, 71, 71, 740, - 71, 745, 71, 71, 71, 71, 71, 71, 749, 741, - 742, 748, 747, 751, 71, 71, 752, 743, 744, 71, - 753, 746, 754, 750, 71, 756, 71, 755, 71, 71, - 71, 760, 71, 71, 71, 71, 766, 71, 71, 757, - 71, 767, 71, 71, 71, 759, 71, 768, 761, 71, - 762, 763, 773, 764, 71, 765, 775, 71, 769, 770, - 71, 71, 71, 71, 771, 71, 71, 71, 772, 774, - - 780, 776, 777, 71, 71, 71, 71, 71, 788, 71, - 778, 71, 779, 781, 71, 783, 71, 71, 789, 782, - 787, 71, 784, 785, 786, 792, 793, 791, 790, 71, - 71, 71, 71, 794, 71, 71, 71, 798, 797, 71, - 800, 799, 71, 796, 801, 71, 71, 71, 795, 803, - 71, 71, 150, 71, 802, 804, 806, 808, 71, 805, - 71, 809, 807, 71, 810, 811, 71, 71, 813, 816, - 71, 71, 812, 71, 817, 819, 71, 71, 822, 71, - 814, 71, 818, 71, 71, 824, 820, 71, 815, 71, - 821, 828, 71, 71, 71, 825, 71, 71, 71, 823, - - 829, 830, 71, 71, 71, 71, 71, 827, 71, 834, - 872, 831, 826, 835, 841, 71, 836, 839, 833, 71, - 840, 832, 843, 837, 71, 842, 838, 71, 844, 71, - 845, 71, 846, 848, 71, 71, 851, 71, 847, 71, - 71, 71, 71, 71, 859, 71, 863, 145, 849, 864, - 71, 71, 865, 71, 866, 850, 71, 852, 853, 861, - 854, 860, 862, 855, 71, 868, 867, 71, 856, 71, - 71, 71, 869, 870, 857, 858, 871, 71, 71, 71, - 71, 873, 875, 71, 71, 879, 71, 71, 878, 71, - 71, 882, 71, 71, 886, 71, 874, 888, 71, 876, - - 71, 880, 877, 881, 884, 883, 71, 889, 973, 71, - 892, 887, 890, 71, 891, 885, 71, 893, 71, 71, - 895, 896, 71, 71, 894, 71, 71, 71, 897, 899, - 71, 900, 71, 898, 71, 901, 71, 71, 71, 906, - 71, 903, 71, 909, 904, 71, 71, 71, 71, 71, - 71, 907, 902, 908, 71, 71, 911, 905, 71, 912, - 913, 915, 71, 914, 71, 910, 71, 916, 71, 919, - 71, 71, 71, 918, 71, 927, 71, 924, 917, 71, - 922, 920, 71, 71, 926, 925, 71, 71, 929, 921, - 71, 71, 71, 71, 71, 71, 923, 71, 940, 937, - - 928, 71, 935, 71, 71, 71, 71, 930, 71, 933, - 931, 932, 934, 71, 941, 938, 71, 936, 942, 71, - 939, 71, 943, 948, 71, 945, 947, 944, 949, 71, - 946, 71, 71, 71, 71, 71, 957, 71, 950, 959, - 952, 71, 71, 71, 961, 71, 962, 71, 71, 71, - 71, 951, 71, 953, 955, 958, 954, 956, 71, 71, - 965, 970, 963, 960, 967, 71, 964, 71, 966, 974, - 968, 71, 969, 71, 71, 71, 971, 976, 71, 71, - 71, 979, 150, 972, 71, 978, 71, 71, 982, 71, - 981, 71, 71, 71, 975, 71, 985, 977, 71, 980, - - 71, 71, 71, 997, 71, 71, 1000, 71, 998, 71, - 71, 983, 984, 71, 986, 988, 71, 987, 989, 71, - 999, 990, 71, 1002, 1004, 991, 71, 992, 1003, 1049, - 71, 993, 71, 994, 1001, 1005, 1007, 71, 995, 71, - 1006, 1008, 71, 996, 71, 71, 1009, 71, 1010, 71, - 1012, 71, 1011, 1015, 1014, 71, 1019, 1020, 1021, 71, - 1013, 1018, 71, 71, 1022, 1017, 1023, 71, 1016, 71, - 71, 71, 71, 71, 71, 71, 71, 1038, 71, 1035, - 71, 71, 71, 1039, 71, 1034, 1045, 1037, 1026, 1024, - 1025, 71, 1027, 71, 1036, 1041, 71, 1028, 1046, 1029, - - 71, 1040, 1050, 1042, 71, 1030, 1044, 71, 71, 71, - 1031, 1032, 1047, 71, 71, 1043, 71, 1033, 1051, 1048, - 71, 71, 1056, 71, 71, 1053, 71, 71, 71, 1054, - 71, 1059, 1057, 1052, 71, 71, 71, 1055, 143, 71, - 71, 71, 71, 1058, 1061, 1066, 71, 1060, 1063, 1064, - 1065, 1068, 1067, 71, 1062, 71, 71, 71, 1069, 71, - 1070, 71, 71, 71, 71, 71, 71, 1076, 1077, 1078, - 1073, 71, 1080, 1071, 1072, 1079, 1075, 1074, 1081, 71, - 1084, 1083, 71, 71, 71, 1085, 71, 71, 1086, 71, - 71, 1087, 1082, 1088, 71, 71, 1089, 71, 1094, 1096, - - 71, 71, 71, 1090, 71, 71, 1099, 1091, 1092, 1093, - 71, 71, 71, 1097, 71, 71, 1100, 1095, 1101, 1102, - 1103, 1098, 71, 71, 1104, 71, 1108, 71, 1105, 1109, - 71, 1107, 71, 71, 71, 71, 1110, 1112, 71, 1106, - 71, 1113, 71, 71, 1119, 71, 1117, 71, 1120, 71, - 71, 1111, 1121, 1114, 71, 71, 71, 1115, 1118, 1124, - 1122, 1123, 1116, 71, 1127, 71, 71, 1125, 1129, 71, - 71, 1128, 71, 71, 71, 71, 71, 71, 1133, 1134, - 71, 1130, 1131, 1126, 71, 71, 71, 1139, 1135, 1140, - 1143, 71, 1132, 71, 71, 71, 1137, 71, 1136, 1142, - - 71, 1141, 1147, 71, 1138, 71, 71, 71, 71, 71, - 71, 1153, 71, 71, 1145, 1146, 1144, 1149, 71, 71, - 71, 71, 71, 1148, 71, 1157, 1150, 1154, 1201, 1152, - 1158, 1156, 1161, 1155, 1151, 1159, 71, 1162, 71, 71, - 71, 71, 1160, 71, 1163, 71, 1165, 1164, 71, 71, - 71, 71, 71, 71, 1166, 1168, 71, 1174, 71, 1171, - 71, 71, 1167, 71, 1169, 71, 71, 141, 1172, 71, - 1170, 1178, 71, 1184, 1175, 1173, 71, 71, 1177, 1176, - 71, 1180, 1185, 1187, 71, 71, 1179, 1186, 1188, 71, - 1181, 71, 1182, 71, 71, 1183, 1191, 71, 1190, 1193, - - 71, 71, 1189, 1196, 71, 71, 1197, 71, 1194, 71, - 1198, 71, 1192, 71, 1200, 71, 71, 71, 71, 1195, - 1202, 71, 71, 71, 71, 71, 71, 1199, 1203, 1206, - 1204, 1208, 1213, 1207, 1209, 1205, 71, 71, 71, 71, - 1210, 1218, 71, 1212, 1211, 71, 71, 71, 1217, 71, - 71, 1214, 71, 1220, 1222, 1224, 1219, 1215, 1216, 71, - 1225, 71, 1223, 71, 71, 1229, 1221, 71, 1238, 71, - 71, 1226, 71, 1227, 71, 1240, 1228, 71, 1237, 71, - 1236, 1241, 1230, 71, 1239, 1231, 1232, 1242, 71, 71, - 1233, 71, 71, 71, 1243, 71, 1234, 1244, 71, 1245, - - 1235, 71, 1247, 71, 71, 71, 1248, 71, 1249, 1246, - 71, 1250, 1254, 1251, 1252, 71, 1257, 1258, 71, 1267, - 71, 71, 71, 71, 1253, 1259, 71, 1261, 1256, 1255, - 1260, 71, 1262, 71, 1263, 71, 1264, 1269, 1265, 71, - 1266, 71, 1268, 71, 71, 71, 71, 71, 1273, 71, - 1270, 1276, 1272, 1274, 71, 71, 71, 71, 1278, 1271, - 71, 1277, 71, 71, 1279, 1281, 1275, 1283, 71, 1285, - 1282, 71, 71, 71, 1280, 1289, 71, 1284, 1288, 1291, - 71, 71, 71, 1292, 71, 1293, 1286, 1290, 71, 1294, - 71, 1297, 71, 71, 1299, 71, 1287, 71, 1300, 1296, - - 71, 71, 71, 1304, 71, 1301, 71, 1295, 71, 71, - 71, 1306, 71, 1298, 71, 1308, 1310, 71, 71, 2912, - 71, 1309, 1302, 1303, 71, 1314, 1305, 1312, 71, 1307, - 71, 71, 71, 1313, 71, 1311, 1315, 1317, 1316, 1318, - 71, 1319, 71, 71, 71, 71, 1321, 1320, 1325, 1322, - 1326, 1323, 71, 1328, 71, 71, 71, 1327, 1324, 71, - 71, 71, 1332, 71, 1329, 71, 71, 71, 1336, 1337, - 71, 1339, 1331, 71, 71, 71, 1338, 71, 71, 1330, - 71, 71, 71, 71, 1346, 1333, 1334, 1340, 71, 71, - 1335, 71, 1343, 1341, 71, 1344, 1351, 71, 1342, 1350, - - 1345, 71, 71, 71, 71, 1355, 71, 1353, 1347, 1349, - 1356, 71, 71, 1358, 1348, 71, 71, 71, 71, 71, - 1360, 71, 1354, 1359, 1352, 71, 1364, 1366, 1368, 1365, - 1357, 1361, 1362, 1367, 71, 1363, 71, 71, 71, 71, - 1369, 71, 71, 71, 1372, 71, 71, 1374, 1370, 71, - 1376, 71, 71, 1378, 71, 1381, 1382, 1371, 71, 1373, - 71, 1375, 1385, 71, 71, 71, 1377, 1379, 71, 1380, - 71, 71, 71, 71, 71, 1386, 1383, 71, 1392, 1384, - 1389, 1393, 1394, 1387, 1388, 71, 1390, 71, 71, 1397, - 71, 1391, 71, 71, 71, 1402, 1396, 2912, 1399, 1401, - - 1403, 71, 71, 1395, 71, 1398, 71, 71, 1404, 71, - 1405, 1406, 71, 71, 1400, 71, 71, 1407, 1410, 71, - 1409, 71, 1413, 71, 1408, 71, 1412, 71, 71, 71, - 1419, 1411, 1416, 1415, 1421, 1420, 71, 71, 71, 1422, - 71, 71, 1417, 1414, 71, 1424, 71, 1427, 1418, 71, - 71, 71, 71, 1432, 1428, 71, 71, 1423, 1435, 71, - 1425, 1433, 71, 71, 71, 1426, 1438, 71, 1437, 1429, - 1431, 1430, 71, 71, 71, 71, 71, 71, 71, 1446, - 71, 1434, 1436, 2912, 71, 71, 1439, 1447, 1449, 71, - 1443, 71, 1440, 1441, 1442, 1445, 1450, 1448, 1444, 71, - - 71, 71, 71, 1451, 71, 71, 71, 1455, 71, 1458, - 1453, 1456, 71, 1452, 71, 1454, 1462, 71, 71, 71, - 71, 1459, 71, 1463, 1457, 1464, 1465, 71, 1460, 71, - 1461, 1466, 1467, 1470, 1471, 71, 71, 1468, 71, 71, - 71, 71, 1475, 71, 1476, 1474, 1478, 71, 71, 1469, - 71, 1479, 1480, 71, 1472, 71, 71, 71, 71, 1473, - 1483, 71, 71, 1477, 71, 1486, 71, 71, 71, 71, - 1485, 1481, 1482, 1490, 71, 1492, 71, 1487, 1484, 71, - 71, 71, 1496, 1491, 71, 71, 1489, 1488, 71, 71, - 71, 1501, 71, 1499, 1493, 1494, 71, 71, 1497, 71, - - 1502, 71, 1504, 1498, 1495, 1500, 71, 71, 71, 1503, - 1506, 1507, 71, 1509, 1510, 71, 71, 71, 71, 1505, - 71, 71, 1517, 71, 71, 1508, 71, 71, 1518, 71, - 1511, 1512, 1515, 71, 71, 1513, 1514, 71, 1521, 1522, - 71, 71, 1524, 71, 1519, 1516, 1520, 1523, 1525, 1526, - 1528, 1529, 71, 1527, 71, 71, 71, 1530, 71, 71, - 1531, 71, 71, 1535, 71, 1532, 1533, 71, 1536, 71, - 71, 71, 1538, 1540, 71, 1541, 1534, 71, 1537, 71, - 1547, 71, 71, 1542, 1539, 1544, 71, 71, 1545, 71, - 1549, 71, 1548, 71, 1550, 1553, 1552, 1543, 71, 71, - - 1546, 71, 71, 1554, 1551, 71, 1555, 71, 1556, 1557, - 1561, 71, 1559, 71, 71, 71, 1558, 1563, 1564, 1565, - 1560, 71, 1567, 71, 71, 71, 1566, 71, 71, 1570, - 71, 71, 1569, 1562, 71, 71, 1571, 71, 71, 71, - 71, 1579, 71, 71, 71, 71, 1568, 71, 71, 71, - 1577, 71, 1572, 1575, 1576, 1573, 1578, 1574, 71, 1582, - 1584, 71, 1580, 1586, 1581, 71, 1587, 71, 71, 1583, - 71, 1585, 71, 1590, 71, 71, 71, 71, 71, 71, - 2912, 1592, 1588, 1594, 1589, 71, 1591, 1595, 1601, 1593, - 1596, 1597, 1598, 1602, 71, 1603, 71, 1599, 71, 71, - - 71, 1607, 71, 1606, 1600, 71, 71, 71, 71, 71, - 1604, 71, 1610, 1611, 71, 71, 1619, 1605, 1608, 71, - 71, 71, 71, 1614, 71, 1609, 71, 1613, 1612, 1616, - 1618, 71, 1617, 71, 1615, 1620, 71, 1622, 71, 1621, - 71, 71, 71, 1629, 1623, 1624, 71, 71, 71, 1625, - 1626, 71, 1633, 1632, 71, 71, 1631, 71, 71, 1628, - 71, 71, 1630, 1640, 1635, 1627, 1634, 1636, 1641, 71, - 71, 1643, 1637, 71, 1642, 1647, 1639, 71, 1638, 1644, - 1645, 71, 1646, 1648, 71, 71, 1652, 71, 71, 71, - 1649, 71, 71, 1650, 71, 1656, 71, 1654, 71, 1651, - - 1653, 71, 71, 1655, 1657, 71, 71, 71, 71, 71, - 1658, 1661, 1668, 1660, 1666, 71, 71, 1659, 71, 1662, - 1663, 1669, 1664, 1665, 71, 71, 71, 71, 71, 1670, - 71, 1675, 71, 71, 1679, 71, 1667, 71, 71, 2912, - 71, 1674, 71, 1672, 1671, 1673, 1681, 71, 1677, 71, - 71, 1678, 1676, 71, 1682, 1683, 71, 71, 1680, 1688, - 71, 1684, 1685, 1686, 71, 71, 1689, 1692, 71, 71, - 71, 71, 1687, 71, 71, 71, 1690, 1694, 71, 71, - 71, 1699, 71, 1693, 1691, 1695, 1696, 71, 1702, 1707, - 1697, 1700, 1703, 71, 71, 1698, 1701, 1704, 1705, 71, - - 71, 1708, 1709, 71, 71, 1706, 71, 71, 1711, 71, - 71, 71, 1712, 71, 71, 71, 1710, 71, 71, 71, - 1717, 71, 71, 1721, 71, 71, 1718, 71, 1722, 1727, - 1713, 1715, 1716, 1714, 1719, 71, 1720, 1726, 71, 71, - 1725, 1723, 71, 71, 1724, 71, 71, 1732, 1728, 71, - 71, 1735, 1736, 71, 1737, 71, 1739, 71, 1729, 1730, - 71, 1740, 1731, 1733, 71, 1734, 1738, 71, 1743, 71, - 71, 1745, 71, 1747, 1744, 1746, 71, 71, 1749, 71, - 71, 1752, 71, 71, 71, 1741, 1751, 1754, 1742, 71, - 1753, 71, 71, 71, 1748, 71, 1761, 71, 1763, 71, - - 71, 71, 71, 1764, 71, 1750, 71, 1755, 1756, 1757, - 71, 1759, 1760, 1765, 1758, 1768, 71, 1762, 1766, 1769, - 71, 1767, 1772, 1773, 71, 71, 1771, 71, 71, 1770, - 71, 1775, 71, 71, 1778, 1779, 71, 71, 1781, 71, - 71, 71, 71, 71, 1787, 71, 1786, 71, 1776, 71, - 1783, 1784, 71, 1774, 1777, 71, 1790, 1780, 71, 71, - 71, 1793, 71, 71, 1785, 1782, 71, 1791, 1788, 1797, - 1789, 1796, 71, 71, 71, 71, 1800, 1801, 71, 1795, - 1799, 71, 71, 71, 71, 1792, 1802, 71, 1794, 1803, - 1804, 71, 1798, 71, 1805, 71, 1808, 1806, 71, 71, - - 1811, 1812, 71, 1807, 71, 71, 71, 71, 71, 1815, - 2912, 71, 71, 1809, 71, 71, 1821, 1824, 71, 1814, - 71, 1822, 1813, 71, 1810, 1816, 1817, 1818, 71, 1819, - 1820, 71, 1823, 1828, 71, 1825, 71, 71, 71, 1826, - 71, 1829, 71, 1832, 1827, 1835, 71, 71, 1838, 71, - 1830, 71, 1837, 71, 1839, 71, 1831, 71, 71, 1840, - 1833, 1836, 1834, 71, 1845, 71, 1841, 1846, 71, 1842, - 1847, 1849, 1850, 71, 1843, 1848, 71, 71, 71, 71, - 71, 1854, 71, 1844, 1852, 71, 71, 71, 71, 1856, - 1859, 1861, 1853, 71, 1855, 71, 71, 71, 1857, 1851, - - 71, 71, 71, 71, 71, 1866, 71, 1862, 1865, 71, - 1867, 1873, 1863, 1858, 2912, 1860, 1868, 71, 1869, 71, - 1864, 1871, 71, 71, 1870, 71, 71, 71, 1872, 1874, - 71, 1876, 71, 1877, 1875, 71, 1879, 71, 71, 71, - 71, 1883, 71, 71, 1878, 1882, 71, 71, 1884, 1880, - 1881, 1885, 1886, 1887, 71, 71, 71, 71, 71, 71, - 71, 1894, 1892, 1888, 1889, 1893, 71, 71, 71, 1896, - 71, 71, 1900, 1895, 1890, 71, 1891, 71, 71, 1899, - 1897, 71, 71, 71, 1898, 1907, 1901, 1902, 1904, 1906, - 71, 71, 71, 2912, 1905, 71, 1912, 71, 71, 1903, - - 71, 1914, 71, 71, 71, 1915, 71, 1908, 1909, 71, - 1910, 1911, 1916, 71, 1917, 1913, 1918, 71, 1920, 71, - 71, 71, 71, 71, 1919, 71, 71, 71, 1921, 71, - 71, 71, 1928, 1923, 1924, 1925, 1932, 71, 71, 71, - 2912, 1922, 1927, 1931, 71, 1929, 71, 1935, 1933, 1930, - 71, 1926, 71, 71, 71, 1936, 1939, 1938, 1934, 1937, - 71, 71, 1943, 71, 1940, 1941, 71, 71, 1942, 71, - 71, 1947, 71, 71, 1949, 1945, 1951, 71, 71, 1946, - 71, 1944, 71, 71, 1954, 1953, 71, 1950, 1955, 1948, - 71, 1956, 71, 1959, 71, 71, 71, 71, 71, 71, - - 1960, 71, 71, 71, 1952, 1962, 2025, 1961, 1957, 1965, - 71, 1969, 1958, 71, 1966, 1963, 1964, 71, 1967, 71, - 71, 1968, 1971, 71, 1970, 1974, 71, 71, 71, 71, - 1976, 1972, 71, 1977, 71, 71, 1978, 1981, 71, 1973, - 1975, 71, 1983, 1979, 71, 71, 1980, 1984, 71, 71, - 1985, 71, 71, 71, 1988, 71, 1986, 1987, 1989, 1982, - 71, 1993, 71, 71, 1990, 71, 71, 71, 71, 1992, - 71, 71, 1991, 1994, 71, 71, 2002, 71, 71, 1997, - 71, 1995, 1996, 1998, 71, 2003, 1999, 2000, 71, 71, - 2001, 71, 2011, 2004, 2005, 2007, 2010, 2013, 71, 71, - - 2008, 71, 2015, 71, 71, 71, 2009, 2006, 2012, 2017, - 2014, 71, 71, 2020, 2022, 2023, 2018, 71, 2021, 71, - 71, 71, 71, 2016, 71, 2019, 71, 2024, 2027, 71, - 71, 2028, 2032, 71, 2034, 2031, 71, 2026, 71, 2033, - 2036, 71, 71, 71, 2038, 2029, 71, 2037, 2039, 71, - 71, 2041, 71, 71, 2035, 2040, 2030, 71, 71, 71, - 71, 2043, 2042, 2044, 71, 2046, 71, 71, 71, 2052, - 71, 2049, 71, 71, 71, 71, 2047, 2045, 2053, 2048, - 2055, 71, 71, 71, 2051, 2050, 71, 2054, 2059, 71, - 2062, 71, 71, 2057, 71, 71, 71, 71, 71, 2056, - - 2063, 2058, 2060, 71, 2061, 71, 71, 71, 2073, 71, - 71, 71, 71, 2064, 2065, 2074, 71, 2068, 2070, 2066, - 71, 2067, 2072, 2075, 2069, 2076, 2071, 71, 2078, 2077, - 2079, 71, 2080, 71, 71, 2081, 71, 2083, 71, 71, - 2086, 71, 71, 2087, 71, 71, 71, 2082, 2084, 2088, - 71, 2085, 2092, 71, 2093, 71, 2095, 71, 2091, 71, - 2097, 71, 2089, 71, 2912, 2090, 71, 2100, 71, 2094, - 71, 2099, 2101, 71, 71, 71, 71, 2096, 2098, 71, - 71, 2107, 71, 2103, 2102, 2106, 2109, 71, 71, 2104, - 71, 71, 71, 2113, 2112, 2105, 2111, 71, 2108, 2115, - - 71, 71, 71, 2119, 71, 71, 2110, 71, 2114, 71, - 71, 2124, 71, 71, 2123, 71, 2116, 2117, 71, 71, - 2118, 2128, 71, 71, 2122, 2120, 71, 71, 2133, 71, - 2121, 71, 2125, 2126, 2127, 2129, 2130, 2131, 71, 71, - 2134, 2135, 71, 71, 71, 71, 71, 71, 2138, 2139, - 71, 71, 2132, 71, 2137, 2143, 71, 71, 2136, 2141, - 71, 2145, 2146, 2148, 71, 2150, 71, 71, 2142, 71, - 2140, 71, 2151, 71, 2149, 2147, 71, 2144, 2152, 2154, - 71, 71, 71, 2155, 71, 2156, 71, 71, 2161, 2153, - 2157, 2158, 2162, 2159, 71, 71, 71, 2167, 71, 2163, - - 2160, 71, 2166, 71, 71, 2165, 71, 2164, 71, 2168, - 71, 71, 2174, 71, 71, 71, 71, 2169, 71, 71, - 71, 71, 2172, 2176, 2170, 2175, 2171, 2173, 2177, 71, - 71, 2178, 2180, 2179, 71, 2182, 71, 2181, 2222, 2183, - 2197, 2184, 2185, 71, 71, 2186, 2187, 71, 71, 71, - 2190, 2188, 2191, 71, 2189, 2912, 71, 71, 71, 2192, - 71, 71, 2194, 71, 71, 2198, 71, 2193, 71, 2195, - 2199, 2200, 2201, 71, 71, 71, 71, 2196, 71, 2202, - 2206, 71, 2205, 71, 2203, 71, 71, 71, 2208, 71, - 71, 71, 71, 2215, 2212, 71, 2204, 2214, 2207, 71, - - 71, 2216, 2220, 2211, 71, 71, 2209, 2210, 71, 71, - 2219, 2213, 71, 71, 2224, 71, 71, 2221, 2217, 2225, - 2218, 71, 2227, 71, 2229, 71, 2223, 2228, 2231, 71, - 71, 71, 2233, 71, 71, 71, 71, 2230, 71, 71, - 2232, 2226, 71, 71, 2237, 2241, 71, 2239, 2240, 2235, - 2242, 71, 2234, 2243, 2236, 71, 2244, 71, 71, 71, - 71, 71, 2238, 71, 71, 2247, 2250, 71, 2252, 71, - 2251, 71, 71, 2245, 71, 71, 2249, 2255, 71, 71, - 2246, 2262, 2248, 71, 2258, 71, 2254, 2253, 2259, 71, - 2260, 2256, 71, 2257, 71, 71, 71, 2261, 71, 2267, - - 71, 2268, 71, 2266, 2269, 71, 2270, 71, 2263, 2264, - 71, 71, 71, 71, 2274, 71, 2265, 2273, 71, 2275, - 71, 71, 2271, 71, 2280, 71, 71, 2276, 71, 2272, - 2282, 71, 2277, 2283, 71, 71, 71, 71, 71, 2279, - 2285, 2278, 71, 2286, 71, 2281, 2284, 2289, 71, 2287, - 2292, 71, 71, 71, 71, 71, 71, 71, 2288, 71, - 71, 2293, 71, 2299, 2290, 71, 71, 71, 2291, 2296, - 2301, 71, 71, 2298, 2295, 2300, 2310, 71, 2303, 2294, - 2302, 2297, 71, 71, 71, 2306, 2307, 71, 2308, 2304, - 2311, 71, 2309, 71, 2305, 71, 2312, 71, 2313, 71, - - 2314, 71, 2315, 71, 2316, 71, 71, 71, 71, 71, - 71, 2325, 71, 2326, 71, 71, 2322, 71, 2329, 71, - 2317, 71, 71, 2318, 2319, 71, 2328, 2320, 2321, 2323, - 2324, 2330, 2331, 71, 71, 71, 71, 2327, 71, 2332, - 71, 2334, 71, 2333, 2340, 71, 2341, 71, 71, 2342, - 2335, 71, 71, 71, 2336, 71, 2337, 71, 2338, 2339, - 71, 2912, 2346, 71, 2351, 71, 2343, 2344, 2349, 71, - 2345, 2350, 71, 2347, 2352, 2353, 71, 71, 71, 71, - 2348, 71, 71, 71, 71, 71, 71, 2355, 2359, 71, - 71, 71, 71, 2357, 2363, 2380, 2354, 71, 2356, 2364, - - 71, 2368, 2358, 2366, 2360, 2361, 71, 2365, 71, 2362, - 2367, 71, 2370, 2371, 71, 71, 71, 71, 2375, 71, - 71, 2369, 2377, 71, 71, 2379, 71, 71, 2372, 2382, - 71, 71, 2376, 71, 2383, 71, 2373, 2374, 71, 2381, - 2385, 71, 71, 2378, 2912, 71, 71, 71, 2386, 2390, - 71, 2387, 2393, 2384, 2388, 2389, 71, 2391, 2392, 71, - 71, 2394, 71, 71, 71, 71, 71, 2396, 2912, 71, - 71, 2397, 71, 2400, 2395, 2399, 71, 2402, 2405, 71, - 71, 2403, 71, 2398, 2401, 2404, 2406, 71, 71, 2407, - 71, 2411, 71, 2408, 71, 71, 2413, 71, 2409, 2412, - - 71, 2416, 71, 2417, 71, 2415, 71, 2414, 2410, 2419, - 71, 71, 2421, 2912, 2420, 71, 71, 2422, 71, 2418, - 2423, 2424, 2425, 71, 71, 71, 71, 2426, 71, 2427, - 71, 71, 71, 71, 2428, 71, 2431, 71, 2430, 71, - 2433, 2429, 2434, 71, 2432, 2435, 71, 71, 2436, 71, - 71, 2437, 71, 2442, 71, 2438, 71, 71, 2440, 2441, - 2439, 71, 71, 2443, 2447, 71, 71, 71, 71, 2451, - 71, 71, 71, 71, 71, 2444, 2449, 2445, 2455, 71, - 2446, 2448, 2481, 2450, 2458, 2452, 2453, 2456, 71, 2459, - 71, 2460, 2454, 2461, 71, 71, 71, 71, 2457, 71, - - 71, 71, 71, 71, 2462, 2463, 2466, 71, 2464, 71, - 2469, 2470, 71, 71, 2465, 2471, 71, 2467, 2472, 71, - 2473, 71, 2468, 2475, 71, 71, 2478, 71, 2476, 71, - 2479, 71, 71, 2474, 2480, 71, 71, 2485, 71, 71, - 2482, 71, 2486, 71, 2477, 2487, 71, 2489, 71, 71, - 2483, 71, 2493, 71, 2488, 71, 2484, 2495, 71, 2494, - 71, 2491, 2490, 2496, 71, 2492, 71, 71, 2497, 71, - 2502, 71, 71, 2501, 71, 71, 71, 2506, 2498, 2504, - 2505, 71, 2507, 71, 2499, 71, 2500, 71, 2508, 71, - 2510, 71, 71, 71, 2517, 71, 2503, 2513, 71, 71, - - 71, 2912, 71, 2523, 71, 71, 2511, 2512, 2509, 2514, - 2519, 2520, 2516, 2515, 71, 2524, 2521, 71, 2518, 2522, - 71, 2525, 71, 2526, 71, 2527, 71, 71, 71, 71, - 71, 2531, 2529, 71, 2535, 71, 71, 71, 2532, 2536, - 2538, 71, 2528, 71, 71, 2540, 71, 71, 2530, 71, - 2533, 2539, 2541, 2534, 71, 2537, 2542, 71, 2543, 71, - 71, 2546, 71, 2544, 2547, 71, 2548, 71, 2545, 2549, - 2551, 71, 71, 2555, 71, 2552, 71, 71, 71, 71, - 71, 2554, 2550, 71, 2553, 71, 71, 2557, 2562, 71, - 71, 2558, 2560, 71, 71, 2556, 71, 2563, 2565, 71, - - 2567, 2566, 71, 71, 71, 2559, 2561, 71, 2569, 2577, - 2564, 2568, 71, 2570, 2572, 71, 2571, 2573, 71, 2574, - 71, 71, 71, 2579, 2576, 2583, 71, 2578, 71, 71, - 2575, 2580, 71, 2581, 2582, 71, 71, 71, 2587, 71, - 71, 2585, 2589, 71, 71, 71, 71, 2593, 71, 71, - 71, 71, 71, 2584, 71, 2586, 2596, 71, 71, 2590, - 2591, 71, 2594, 2595, 2588, 71, 2592, 2597, 71, 2600, - 2598, 2603, 71, 2601, 2605, 71, 2599, 2602, 2606, 71, - 71, 2608, 71, 71, 2604, 71, 71, 71, 2613, 71, - 2612, 71, 71, 71, 71, 2617, 71, 71, 71, 2609, - - 71, 2607, 2610, 2611, 71, 2619, 2621, 71, 2622, 71, - 2618, 2614, 2616, 2624, 71, 2615, 71, 71, 2623, 2620, - 71, 71, 2629, 71, 2628, 71, 2627, 2626, 71, 2633, - 71, 71, 71, 2625, 2634, 2631, 71, 2635, 71, 2630, - 2638, 2632, 2639, 71, 2636, 2637, 71, 71, 2641, 71, - 2640, 71, 71, 71, 71, 2646, 2642, 2643, 2644, 71, - 71, 71, 2649, 71, 2650, 71, 2653, 71, 2645, 2652, - 2651, 2654, 71, 71, 71, 71, 2647, 2648, 2655, 71, - 2657, 2658, 71, 2659, 71, 2660, 71, 71, 2656, 2662, - 71, 71, 2661, 71, 71, 71, 2667, 71, 2663, 2668, - - 71, 71, 71, 71, 2672, 71, 71, 2674, 2675, 71, - 71, 2669, 2671, 2664, 71, 2665, 2666, 2676, 71, 2677, - 2679, 2670, 71, 71, 2678, 2673, 71, 2682, 71, 71, - 71, 2681, 71, 71, 2680, 2683, 71, 71, 2686, 71, - 71, 71, 71, 2688, 71, 71, 71, 2689, 2687, 2684, - 71, 71, 2685, 71, 2701, 71, 71, 2912, 2698, 2690, - 2694, 2691, 2692, 2693, 2702, 71, 2699, 2695, 2696, 2700, - 71, 71, 2697, 71, 2703, 2704, 71, 2705, 71, 2706, - 2707, 71, 71, 2708, 2709, 2712, 71, 2710, 2711, 2714, - 71, 2713, 71, 71, 71, 2717, 71, 71, 2718, 2716, - - 71, 71, 71, 71, 2719, 2720, 71, 2715, 71, 2721, - 71, 2725, 2726, 71, 71, 2724, 71, 2722, 2727, 71, - 71, 2723, 71, 2728, 2732, 2729, 2734, 71, 71, 2733, - 71, 2730, 71, 2738, 2731, 71, 71, 2737, 71, 2735, - 2739, 71, 2736, 2741, 71, 2856, 2742, 2743, 71, 2744, - 71, 2745, 71, 2746, 71, 2740, 2747, 71, 2748, 71, - 2749, 71, 2750, 71, 71, 2752, 71, 71, 71, 71, - 2755, 71, 71, 2751, 71, 71, 2759, 71, 2761, 71, - 71, 71, 71, 2756, 2763, 2757, 2758, 2753, 2754, 71, - 2765, 71, 2760, 71, 2768, 71, 2767, 71, 2762, 71, - - 71, 71, 71, 71, 2770, 71, 2775, 71, 2764, 2766, - 71, 2769, 2776, 71, 2771, 2777, 71, 71, 2773, 2772, - 2774, 71, 71, 71, 2782, 2780, 2779, 71, 71, 71, - 2778, 2786, 71, 2785, 71, 2788, 71, 71, 2784, 71, - 71, 71, 2781, 71, 71, 71, 2783, 2787, 71, 2789, - 2799, 71, 71, 71, 71, 2883, 2790, 2791, 71, 2792, - 2794, 71, 2795, 2800, 2796, 2793, 2797, 71, 2798, 2801, - 71, 71, 2802, 2803, 71, 2804, 71, 2805, 71, 71, - 71, 2806, 2807, 2808, 71, 2809, 71, 2812, 71, 2815, - 71, 71, 2810, 71, 2817, 71, 71, 71, 71, 2811, - - 2813, 2820, 71, 71, 2821, 71, 2822, 2824, 2814, 71, - 2816, 2818, 2825, 71, 71, 2819, 71, 71, 71, 2829, - 71, 71, 71, 2826, 2823, 2832, 71, 2827, 71, 71, - 71, 71, 71, 2834, 71, 2828, 2831, 2830, 71, 2839, - 71, 71, 71, 2836, 2837, 2840, 2833, 2844, 2835, 2843, - 71, 2838, 2845, 71, 2846, 71, 2841, 71, 71, 71, - 2842, 71, 2847, 2851, 2848, 71, 2849, 2853, 71, 71, - 2852, 71, 71, 71, 2850, 2854, 71, 2859, 71, 71, - 71, 71, 2862, 71, 2863, 71, 71, 71, 71, 71, - 71, 2855, 2857, 2861, 2866, 2858, 2864, 2860, 2867, 2865, - - 71, 2869, 71, 2870, 71, 2868, 71, 2874, 71, 2871, - 71, 2876, 71, 2872, 71, 2877, 2873, 2878, 71, 71, - 2881, 71, 71, 71, 71, 2879, 71, 2875, 2882, 2884, - 71, 2885, 71, 2886, 71, 2890, 71, 2888, 2880, 71, - 71, 2887, 71, 71, 71, 2892, 71, 2893, 71, 2896, - 2897, 71, 71, 2889, 71, 2900, 2901, 71, 2891, 71, - 2903, 71, 2894, 2895, 71, 2898, 2902, 2904, 71, 71, - 71, 2899, 71, 71, 2912, 2906, 2905, 2907, 2910, 71, - 2911, 71, 2912, 2908, 2912, 2912, 2912, 2912, 2912, 2912, - 2912, 2912, 2909, 43, 43, 43, 43, 43, 43, 43, - - 48, 48, 48, 48, 48, 48, 48, 53, 53, 53, - 53, 53, 53, 53, 59, 59, 59, 59, 59, 59, - 59, 64, 64, 64, 64, 64, 64, 64, 74, 74, - 2912, 74, 74, 74, 74, 140, 140, 2912, 2912, 2912, - 140, 140, 142, 142, 2912, 2912, 142, 2912, 142, 144, - 2912, 2912, 2912, 2912, 2912, 144, 147, 147, 2912, 2912, - 2912, 147, 147, 149, 2912, 2912, 2912, 2912, 2912, 149, - 151, 151, 2912, 151, 151, 151, 151, 75, 75, 2912, - 75, 75, 75, 75, 13, 2912, 2912, 2912, 2912, 2912, - 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, - - 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, - 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, - 2912, 2912, 2912, 2912, 2912 + 100, 71, 101, 107, 172, 71, 113, 108, 143, 71, + 114, 143, 118, 71, 119, 111, 115, 71, 120, 116, + 140, 151, 124, 148, 148, 125, 117, 163, 121, 122, + 71, 123, 126, 71, 133, 154, 127, 128, 71, 129, + + 224, 130, 71, 137, 134, 158, 71, 138, 135, 136, + 131, 139, 145, 71, 145, 145, 132, 145, 75, 71, + 75, 75, 150, 75, 150, 150, 70, 150, 70, 70, + 153, 70, 72, 165, 71, 171, 73, 70, 75, 71, + 75, 75, 155, 75, 71, 71, 225, 71, 156, 75, + 76, 71, 71, 71, 160, 161, 164, 71, 71, 166, + 173, 71, 71, 169, 170, 167, 71, 168, 162, 71, + 71, 175, 177, 178, 71, 71, 184, 71, 176, 174, + 179, 182, 253, 71, 71, 71, 189, 180, 181, 183, + 71, 151, 71, 185, 191, 71, 186, 71, 71, 199, + + 192, 194, 197, 71, 71, 195, 71, 198, 200, 187, + 188, 190, 71, 201, 71, 71, 202, 205, 71, 203, + 193, 196, 207, 71, 71, 71, 71, 204, 71, 212, + 209, 71, 71, 206, 210, 71, 214, 71, 71, 71, + 71, 208, 71, 220, 211, 215, 213, 71, 226, 229, + 217, 216, 223, 71, 221, 71, 219, 218, 222, 233, + 230, 71, 71, 71, 235, 227, 71, 71, 228, 231, + 71, 239, 71, 236, 232, 238, 71, 234, 149, 240, + 71, 242, 141, 141, 143, 237, 243, 143, 241, 145, + 151, 145, 145, 244, 145, 148, 148, 150, 248, 150, + + 150, 75, 150, 75, 75, 71, 75, 71, 246, 71, + 245, 71, 71, 153, 71, 71, 71, 250, 71, 71, + 71, 256, 249, 247, 251, 259, 252, 255, 258, 71, + 254, 71, 260, 264, 262, 71, 263, 71, 257, 71, + 71, 265, 71, 71, 268, 261, 266, 71, 273, 269, + 71, 147, 71, 71, 270, 275, 274, 276, 279, 71, + 271, 272, 278, 267, 71, 277, 71, 71, 71, 71, + 281, 71, 282, 283, 71, 71, 71, 290, 71, 288, + 289, 285, 291, 284, 286, 71, 71, 280, 71, 287, + 294, 297, 71, 298, 292, 299, 293, 71, 295, 301, + + 303, 71, 296, 304, 71, 71, 71, 300, 302, 71, + 307, 71, 71, 309, 310, 71, 71, 308, 305, 71, + 71, 71, 311, 71, 312, 306, 71, 313, 71, 71, + 71, 71, 315, 71, 71, 319, 71, 317, 71, 71, + 324, 71, 320, 314, 318, 325, 71, 71, 71, 321, + 316, 328, 322, 326, 330, 71, 333, 327, 323, 71, + 71, 71, 71, 329, 71, 71, 335, 336, 71, 71, + 339, 340, 342, 331, 332, 338, 71, 71, 71, 334, + 71, 71, 71, 337, 71, 345, 346, 71, 341, 71, + 347, 349, 343, 71, 353, 344, 71, 71, 71, 151, + + 350, 71, 71, 71, 71, 352, 71, 360, 358, 356, + 361, 354, 355, 71, 348, 71, 71, 351, 71, 364, + 362, 365, 357, 363, 71, 71, 71, 359, 71, 71, + 71, 71, 71, 371, 372, 71, 374, 369, 366, 71, + 71, 71, 368, 373, 367, 375, 71, 377, 71, 71, + 376, 71, 378, 71, 71, 370, 379, 381, 71, 71, + 384, 71, 382, 386, 380, 388, 71, 385, 383, 71, + 71, 71, 387, 71, 71, 391, 71, 389, 393, 71, + 71, 392, 396, 71, 71, 71, 398, 71, 71, 71, + 399, 71, 71, 401, 390, 71, 397, 408, 395, 394, + + 71, 403, 71, 71, 71, 405, 400, 407, 71, 402, + 404, 409, 71, 71, 71, 71, 410, 71, 420, 419, + 421, 417, 406, 71, 71, 71, 71, 423, 426, 427, + 424, 418, 411, 428, 71, 412, 422, 425, 429, 71, + 413, 414, 415, 416, 71, 71, 71, 430, 71, 436, + 71, 431, 71, 71, 432, 434, 71, 435, 437, 71, + 433, 71, 438, 71, 440, 71, 71, 439, 441, 445, + 71, 71, 446, 71, 447, 71, 71, 463, 450, 71, + 451, 444, 442, 448, 452, 443, 71, 71, 71, 71, + 449, 455, 453, 456, 71, 71, 464, 458, 454, 465, + + 71, 71, 71, 457, 462, 71, 466, 71, 467, 71, + 459, 71, 71, 460, 468, 461, 71, 71, 469, 71, + 482, 71, 479, 71, 517, 71, 470, 71, 471, 477, + 472, 480, 478, 481, 493, 484, 483, 151, 492, 494, + 71, 71, 71, 473, 495, 71, 474, 496, 475, 71, + 476, 71, 71, 485, 486, 71, 502, 499, 497, 498, + 71, 500, 71, 487, 71, 488, 489, 490, 501, 506, + 491, 71, 71, 71, 71, 71, 71, 71, 505, 507, + 504, 503, 512, 71, 514, 71, 515, 71, 71, 511, + 71, 513, 509, 510, 508, 71, 519, 523, 524, 71, + + 71, 518, 71, 516, 522, 71, 71, 71, 71, 534, + 71, 521, 71, 520, 529, 71, 71, 71, 71, 531, + 532, 71, 526, 527, 528, 525, 71, 71, 146, 71, + 71, 71, 530, 536, 71, 533, 535, 537, 540, 543, + 71, 539, 71, 546, 538, 544, 545, 547, 71, 541, + 71, 542, 548, 71, 549, 71, 71, 71, 553, 550, + 71, 551, 555, 71, 71, 71, 71, 558, 559, 556, + 552, 71, 71, 554, 71, 560, 71, 71, 557, 71, + 71, 565, 563, 71, 564, 71, 71, 561, 71, 566, + 71, 71, 71, 571, 71, 567, 572, 562, 71, 574, + + 570, 71, 71, 573, 569, 568, 575, 71, 577, 71, + 579, 71, 71, 71, 71, 576, 71, 71, 71, 71, + 581, 589, 582, 591, 578, 71, 71, 71, 584, 71, + 71, 592, 580, 588, 583, 585, 71, 586, 587, 590, + 71, 71, 71, 71, 596, 600, 599, 602, 594, 71, + 593, 595, 71, 71, 71, 71, 597, 601, 598, 71, + 605, 71, 71, 604, 71, 71, 608, 71, 71, 609, + 71, 603, 611, 71, 71, 71, 71, 71, 71, 625, + 610, 606, 607, 71, 612, 71, 614, 634, 144, 613, + 71, 615, 624, 71, 623, 626, 616, 628, 617, 627, + + 631, 71, 71, 71, 618, 71, 619, 629, 632, 620, + 621, 630, 635, 71, 71, 71, 622, 633, 71, 71, + 71, 637, 638, 636, 71, 641, 71, 643, 71, 71, + 71, 71, 71, 71, 640, 644, 639, 649, 71, 71, + 642, 645, 650, 646, 71, 71, 71, 151, 71, 647, + 653, 655, 656, 648, 652, 654, 71, 651, 71, 71, + 657, 71, 71, 71, 659, 71, 71, 663, 665, 71, + 71, 658, 71, 660, 667, 71, 661, 666, 664, 668, + 662, 670, 669, 71, 671, 71, 672, 71, 71, 71, + 71, 71, 71, 71, 676, 675, 71, 71, 684, 71, + + 681, 677, 673, 71, 674, 682, 71, 807, 678, 680, + 683, 679, 685, 71, 686, 687, 71, 688, 71, 689, + 71, 71, 71, 71, 690, 71, 691, 692, 71, 71, + 71, 71, 695, 71, 71, 696, 694, 700, 699, 71, + 693, 71, 71, 71, 71, 701, 71, 703, 71, 705, + 71, 706, 698, 71, 697, 71, 708, 702, 71, 712, + 71, 709, 707, 71, 704, 710, 71, 71, 711, 71, + 718, 714, 715, 71, 71, 71, 71, 716, 713, 721, + 71, 71, 719, 720, 717, 71, 723, 71, 724, 71, + 726, 71, 725, 71, 71, 71, 732, 71, 728, 730, + + 71, 722, 71, 71, 71, 71, 729, 727, 738, 733, + 71, 71, 71, 736, 71, 731, 739, 737, 71, 735, + 71, 734, 863, 740, 741, 742, 71, 71, 71, 743, + 745, 747, 746, 744, 71, 749, 71, 71, 71, 748, + 71, 71, 71, 750, 752, 71, 758, 751, 71, 753, + 71, 754, 71, 71, 71, 756, 757, 71, 755, 761, + 71, 763, 760, 71, 71, 71, 767, 759, 765, 71, + 764, 71, 71, 770, 769, 71, 768, 762, 771, 71, + 71, 772, 71, 766, 774, 71, 71, 776, 71, 71, + 71, 71, 782, 71, 775, 71, 773, 783, 71, 71, + + 71, 71, 71, 71, 777, 71, 778, 779, 784, 780, + 785, 781, 71, 71, 791, 786, 71, 789, 790, 787, + 71, 788, 71, 71, 71, 793, 792, 796, 71, 71, + 71, 71, 71, 71, 804, 794, 71, 71, 71, 71, + 805, 795, 797, 71, 798, 142, 803, 799, 800, 801, + 802, 71, 808, 71, 71, 810, 806, 71, 809, 71, + 71, 813, 811, 71, 812, 814, 815, 71, 816, 71, + 71, 71, 817, 71, 71, 818, 819, 71, 151, 820, + 825, 71, 822, 824, 71, 821, 823, 71, 826, 71, + 71, 71, 832, 71, 71, 827, 828, 71, 833, 835, + + 71, 71, 838, 836, 829, 830, 834, 71, 71, 71, + 71, 831, 71, 840, 71, 844, 71, 71, 71, 71, + 837, 71, 841, 71, 845, 846, 71, 839, 888, 71, + 71, 71, 843, 71, 850, 847, 71, 842, 851, 71, + 857, 852, 858, 849, 848, 855, 71, 861, 853, 71, + 856, 854, 71, 860, 71, 859, 71, 862, 71, 867, + 71, 71, 71, 71, 71, 71, 875, 71, 865, 71, + 864, 891, 879, 880, 71, 71, 882, 883, 866, 71, + 868, 869, 877, 870, 876, 878, 871, 71, 71, 884, + 71, 872, 71, 71, 881, 885, 886, 873, 874, 71, + + 71, 71, 71, 71, 887, 71, 895, 71, 71, 71, + 894, 890, 889, 71, 71, 898, 71, 71, 902, 904, + 71, 892, 893, 896, 71, 899, 923, 897, 900, 71, + 905, 901, 71, 908, 903, 906, 71, 907, 909, 71, + 71, 911, 71, 71, 71, 910, 912, 71, 913, 71, + 915, 71, 916, 71, 71, 71, 71, 914, 71, 71, + 71, 919, 917, 922, 71, 920, 925, 71, 924, 71, + 71, 71, 71, 918, 929, 71, 71, 71, 921, 927, + 928, 932, 71, 71, 930, 931, 926, 71, 71, 937, + 71, 933, 71, 939, 938, 71, 935, 71, 71, 71, + + 71, 936, 71, 944, 946, 940, 71, 942, 934, 947, + 71, 945, 71, 71, 71, 71, 941, 949, 71, 71, + 71, 71, 71, 943, 71, 960, 957, 948, 71, 955, + 71, 71, 71, 71, 950, 951, 953, 71, 952, 954, + 71, 961, 958, 71, 956, 962, 965, 959, 71, 963, + 71, 964, 71, 967, 968, 71, 71, 966, 71, 71, + 71, 970, 71, 71, 71, 977, 972, 979, 71, 981, + 969, 71, 71, 71, 982, 71, 971, 71, 978, 973, + 71, 975, 974, 976, 71, 71, 71, 71, 980, 983, + 71, 984, 987, 71, 989, 990, 985, 71, 988, 993, + + 991, 71, 71, 994, 986, 996, 71, 71, 992, 71, + 71, 999, 151, 71, 71, 998, 71, 1002, 1001, 71, + 71, 71, 995, 71, 71, 997, 1005, 71, 1000, 71, + 71, 71, 1017, 71, 71, 1020, 71, 1018, 71, 71, + 1004, 1003, 1006, 1008, 71, 71, 71, 1009, 1007, 1019, + 1022, 1010, 71, 1023, 71, 1011, 71, 1012, 1024, 1025, + 1027, 1013, 71, 1014, 1021, 1028, 71, 71, 1015, 71, + 1026, 1030, 71, 1016, 71, 71, 1029, 1032, 71, 1034, + 71, 71, 71, 71, 1031, 1039, 1040, 1033, 1038, 1035, + 71, 71, 71, 1042, 1037, 1041, 71, 1043, 71, 1036, + + 1045, 71, 71, 71, 71, 1044, 71, 1055, 1046, 71, + 1047, 1059, 71, 1054, 71, 1048, 71, 1049, 1056, 71, + 1058, 71, 1060, 1050, 1057, 71, 1064, 71, 1051, 1052, + 1061, 1066, 71, 71, 71, 1053, 1065, 71, 71, 1070, + 1062, 1067, 71, 71, 1063, 71, 71, 1069, 1071, 71, + 71, 1076, 1068, 71, 71, 1073, 71, 71, 1074, 71, + 71, 1072, 1077, 71, 1079, 71, 1075, 71, 71, 71, + 71, 71, 71, 1078, 1081, 71, 1080, 1083, 1084, 1085, + 1088, 1086, 1090, 1082, 1087, 71, 71, 1089, 71, 71, + 71, 71, 1091, 71, 71, 71, 1096, 71, 1097, 1098, + + 71, 1100, 1093, 1101, 1092, 1095, 1099, 1094, 1102, 71, + 71, 1104, 71, 71, 71, 1106, 1105, 71, 1107, 71, + 71, 71, 1108, 1114, 71, 71, 1103, 1109, 71, 71, + 1116, 71, 1110, 71, 1112, 71, 71, 71, 1111, 1113, + 1118, 71, 1122, 1117, 1120, 1115, 71, 1119, 71, 71, + 71, 1123, 1121, 71, 1125, 1126, 71, 71, 1132, 71, + 71, 1131, 1128, 71, 1124, 1127, 1130, 71, 71, 71, + 1136, 71, 1133, 1129, 1135, 71, 71, 71, 71, 71, + 71, 1140, 1142, 1143, 1147, 1144, 1134, 71, 71, 71, + 71, 71, 1141, 1137, 71, 1138, 1145, 1139, 71, 1146, + + 1150, 71, 71, 1152, 71, 1148, 71, 1151, 71, 71, + 1153, 71, 71, 71, 1156, 1157, 71, 1154, 1149, 71, + 71, 71, 1162, 1163, 1158, 71, 71, 1155, 71, 71, + 1165, 1160, 1166, 71, 1159, 71, 1164, 1170, 71, 1161, + 71, 71, 71, 71, 71, 1167, 71, 1176, 71, 1168, + 1169, 1172, 71, 71, 71, 71, 1182, 71, 1171, 1180, + 71, 71, 1173, 1197, 71, 1175, 1177, 1179, 1178, 1174, + 1181, 1184, 1185, 71, 71, 1187, 71, 71, 71, 1186, + 1183, 1188, 71, 71, 71, 71, 71, 71, 71, 1191, + 71, 151, 71, 71, 1194, 71, 1189, 1190, 71, 71, + + 1192, 71, 71, 1195, 1201, 1193, 1198, 1203, 1209, 1196, + 1200, 1199, 71, 1207, 71, 71, 1204, 71, 1205, 1202, + 1208, 1206, 71, 71, 71, 1211, 71, 71, 1210, 1214, + 71, 71, 1213, 1219, 71, 1212, 1216, 71, 1217, 71, + 71, 71, 1220, 71, 1221, 1215, 1223, 1224, 71, 1218, + 71, 71, 71, 71, 71, 71, 71, 1225, 71, 71, + 1222, 1231, 71, 71, 71, 1226, 1227, 1229, 1230, 71, + 1232, 1228, 71, 71, 71, 1233, 71, 1237, 1236, 1241, + 1234, 1235, 1240, 71, 1238, 71, 71, 71, 1242, 1239, + 71, 1243, 1245, 71, 1247, 71, 1244, 71, 1246, 1248, + + 71, 71, 1252, 71, 149, 1261, 1260, 1250, 1251, 1249, + 71, 71, 71, 1262, 1265, 1253, 1259, 71, 1254, 1255, + 71, 71, 1263, 1256, 71, 1268, 71, 71, 71, 1257, + 1264, 1266, 1267, 1258, 71, 1270, 71, 71, 71, 1271, + 71, 1272, 71, 71, 71, 71, 1280, 1281, 1277, 1269, + 71, 1275, 71, 71, 71, 1282, 1274, 1273, 1278, 71, + 1276, 71, 1290, 1279, 71, 1283, 71, 1289, 1284, 71, + 71, 71, 1294, 1285, 1292, 1286, 71, 1287, 1296, 1288, + 1291, 71, 71, 1297, 71, 1295, 1293, 1299, 71, 71, + 71, 71, 71, 1305, 71, 1306, 71, 71, 1301, 71, + + 71, 71, 1300, 1298, 1307, 1309, 1304, 71, 71, 1302, + 1303, 1308, 71, 71, 71, 1310, 1311, 71, 1314, 1315, + 71, 1317, 71, 71, 71, 1318, 1312, 1319, 71, 1316, + 71, 1323, 71, 1320, 71, 71, 1321, 1313, 71, 1322, + 1325, 71, 71, 1326, 71, 1330, 71, 71, 71, 1327, + 71, 1332, 71, 71, 1324, 71, 1328, 1334, 71, 1329, + 1336, 71, 1335, 71, 1338, 71, 71, 1331, 71, 71, + 1333, 1340, 71, 1337, 1341, 71, 1342, 1343, 1339, 71, + 1344, 71, 1345, 1347, 1346, 71, 71, 71, 1351, 1352, + 1354, 1348, 71, 1349, 71, 71, 71, 1353, 71, 71, + + 1350, 71, 1358, 71, 71, 71, 71, 1355, 1362, 1363, + 71, 1365, 1357, 71, 71, 71, 1364, 71, 1356, 71, + 71, 71, 71, 71, 1359, 1360, 71, 1366, 71, 1361, + 71, 1372, 1369, 1367, 71, 1370, 71, 1377, 71, 1368, + 1371, 1376, 71, 1373, 71, 147, 1375, 1379, 1381, 71, + 71, 1374, 71, 1382, 71, 71, 71, 1378, 71, 1384, + 1385, 71, 71, 1380, 1392, 71, 1394, 1383, 71, 1386, + 71, 1387, 71, 1388, 71, 1390, 1389, 71, 1391, 1393, + 1397, 1395, 71, 71, 71, 1396, 71, 71, 1400, 71, + 71, 1402, 71, 71, 1398, 71, 1407, 1408, 71, 71, + + 1399, 71, 1401, 1404, 71, 1411, 71, 1403, 1405, 71, + 1406, 71, 71, 1412, 71, 71, 1409, 71, 1410, 71, + 1414, 71, 1418, 1413, 1415, 71, 1419, 1416, 71, 71, + 1420, 71, 1423, 1417, 71, 1428, 1426, 1422, 71, 1421, + 1425, 71, 1429, 1427, 1424, 71, 1430, 71, 71, 71, + 1431, 1432, 71, 71, 71, 71, 1434, 1433, 71, 71, + 71, 1439, 71, 71, 71, 71, 1438, 71, 71, 1436, + 1442, 1441, 1435, 1437, 1445, 71, 71, 1450, 1443, 1446, + 71, 71, 1440, 1447, 71, 71, 1444, 1451, 1448, 71, + 1454, 71, 71, 1453, 71, 1449, 71, 1458, 71, 1459, + + 1452, 1461, 71, 71, 71, 71, 71, 71, 71, 1464, + 1455, 1463, 1456, 71, 1457, 71, 71, 71, 71, 71, + 1472, 1462, 71, 1465, 1460, 1466, 71, 1467, 71, 1473, + 1469, 71, 1468, 1471, 1474, 1475, 71, 71, 1470, 71, + 1479, 1478, 1476, 1477, 71, 71, 71, 1481, 71, 71, + 71, 1482, 71, 1484, 1488, 71, 1490, 1480, 71, 71, + 71, 1485, 71, 1489, 1483, 1493, 1487, 1491, 71, 1486, + 71, 71, 1492, 71, 1494, 1495, 71, 1499, 1500, 71, + 71, 71, 71, 71, 71, 1504, 1505, 1503, 1496, 71, + 71, 1497, 71, 1507, 71, 71, 1498, 71, 1501, 71, + + 1508, 71, 1502, 1509, 71, 71, 1510, 71, 1512, 1506, + 1514, 1511, 71, 1515, 71, 71, 71, 71, 71, 1513, + 71, 1519, 1516, 71, 1521, 71, 71, 1525, 71, 71, + 71, 1520, 71, 71, 1518, 1517, 1522, 1528, 1530, 71, + 1523, 71, 1526, 71, 1533, 1524, 71, 1527, 1529, 71, + 1531, 71, 1534, 71, 71, 1536, 1539, 71, 71, 1538, + 1535, 1532, 71, 71, 71, 71, 71, 1546, 71, 71, + 71, 71, 1537, 1547, 71, 71, 1540, 1541, 1544, 1550, + 1551, 1542, 1543, 71, 71, 1553, 71, 71, 71, 1548, + 1545, 1549, 1554, 1555, 1552, 1557, 1559, 71, 71, 71, + + 1558, 71, 71, 1562, 1556, 71, 71, 1560, 1561, 71, + 1564, 71, 1565, 71, 71, 71, 71, 1569, 71, 1570, + 1566, 71, 71, 71, 71, 1584, 1581, 1576, 1571, 1563, + 1568, 1567, 71, 71, 71, 1573, 71, 71, 1574, 1577, + 1582, 1572, 1579, 71, 71, 1578, 71, 1580, 1583, 1586, + 1575, 71, 1585, 71, 71, 71, 71, 1588, 1587, 71, + 71, 1593, 1594, 1592, 71, 1596, 71, 71, 71, 1595, + 71, 71, 1589, 71, 71, 1590, 1599, 71, 1598, 1591, + 71, 71, 71, 71, 1608, 1600, 71, 71, 1601, 1597, + 71, 71, 71, 71, 1602, 71, 1604, 1605, 1606, 71, + + 1607, 1603, 1613, 71, 71, 71, 1616, 1611, 71, 1615, + 71, 1609, 1610, 71, 71, 71, 1612, 71, 71, 1614, + 71, 71, 71, 1617, 1618, 1623, 1621, 71, 1631, 71, + 1622, 1624, 1620, 71, 1625, 71, 1626, 1619, 1630, 1632, + 71, 71, 1627, 1636, 71, 1633, 1629, 1628, 71, 71, + 71, 1635, 71, 71, 71, 71, 71, 1639, 1640, 1634, + 71, 71, 1637, 71, 71, 1643, 1649, 71, 1648, 1638, + 1647, 1642, 1645, 1641, 71, 1646, 71, 71, 71, 1644, + 71, 71, 71, 71, 1650, 71, 1658, 71, 71, 1651, + 71, 1662, 1653, 1655, 71, 1652, 1654, 1660, 71, 1661, + + 71, 1657, 71, 1659, 71, 1663, 71, 1656, 1669, 1664, + 71, 71, 1665, 1670, 71, 1675, 1666, 71, 146, 71, + 1671, 71, 1668, 1667, 1674, 1672, 1677, 71, 1678, 71, + 71, 71, 1680, 1673, 71, 1676, 1679, 71, 71, 1684, + 71, 71, 1688, 1681, 1683, 71, 71, 71, 71, 1682, + 1686, 71, 71, 1685, 1689, 71, 1687, 71, 71, 71, + 1690, 1693, 71, 1692, 71, 1698, 71, 1700, 1701, 71, + 1691, 1694, 1695, 71, 71, 71, 1696, 1703, 1697, 71, + 1707, 71, 1702, 71, 71, 71, 71, 1699, 1711, 71, + 71, 71, 71, 1704, 1706, 1713, 71, 1714, 1705, 71, + + 1709, 1715, 71, 1710, 1716, 1708, 71, 71, 1720, 71, + 1712, 1717, 71, 71, 71, 1724, 71, 71, 71, 71, + 71, 71, 1719, 71, 1726, 1722, 71, 71, 1731, 1718, + 71, 1721, 1725, 1723, 71, 1727, 1739, 1733, 1728, 1729, + 71, 1730, 1732, 1735, 71, 71, 1734, 71, 1736, 1737, + 71, 1740, 1738, 1741, 71, 71, 71, 71, 1743, 71, + 71, 71, 1744, 71, 71, 71, 71, 1742, 71, 71, + 1749, 71, 71, 1753, 71, 1750, 71, 71, 1754, 1759, + 1745, 1747, 1748, 1746, 1751, 71, 1752, 1758, 71, 71, + 71, 1755, 1757, 71, 1756, 71, 71, 1760, 1764, 71, + + 1767, 1768, 71, 1769, 71, 71, 1762, 71, 1761, 1765, + 71, 1766, 71, 1763, 1771, 71, 71, 1772, 1775, 71, + 71, 1777, 71, 71, 1776, 1770, 1778, 71, 1773, 1779, + 1780, 1774, 1781, 71, 71, 71, 1783, 1786, 71, 1784, + 71, 71, 1785, 71, 71, 71, 1793, 1782, 71, 71, + 71, 1798, 71, 71, 1791, 1795, 1787, 1788, 1789, 71, + 1796, 71, 71, 1790, 1797, 1792, 1801, 71, 1794, 71, + 1799, 71, 71, 1803, 1805, 71, 1802, 1800, 71, 1807, + 71, 71, 71, 1810, 1811, 71, 71, 1813, 71, 71, + 1804, 71, 71, 71, 1819, 71, 71, 1806, 1818, 71, + + 1808, 1815, 1816, 1809, 71, 71, 1812, 71, 71, 71, + 1825, 71, 1817, 71, 1814, 1822, 1823, 1820, 71, 71, + 1821, 1829, 1832, 1828, 71, 1824, 1833, 71, 71, 1827, + 71, 1831, 71, 1834, 71, 1835, 71, 1826, 71, 1830, + 71, 71, 71, 71, 71, 1836, 1840, 71, 1843, 1844, + 71, 71, 71, 1839, 71, 71, 1847, 71, 1837, 1838, + 1841, 71, 1852, 71, 71, 1846, 1851, 71, 71, 71, + 1842, 1845, 1848, 1856, 1849, 71, 71, 1859, 71, 1850, + 71, 1857, 1854, 1853, 1860, 1858, 71, 1855, 1863, 71, + 71, 71, 1870, 71, 71, 71, 71, 1861, 71, 1867, + + 71, 71, 1862, 71, 1875, 1865, 1872, 1873, 71, 71, + 1874, 1864, 1866, 71, 71, 1868, 1869, 71, 1871, 1880, + 71, 1882, 1876, 1881, 71, 1877, 1883, 71, 1884, 1885, + 1878, 71, 71, 71, 71, 71, 1889, 1879, 1887, 71, + 71, 71, 71, 71, 1888, 1891, 71, 1894, 71, 1896, + 71, 1890, 1892, 71, 71, 71, 71, 1886, 1897, 71, + 71, 1900, 1898, 1901, 71, 1902, 1903, 71, 1893, 1906, + 1895, 1904, 71, 1899, 71, 71, 71, 71, 71, 1905, + 1907, 1908, 71, 1909, 71, 1912, 71, 1910, 71, 1911, + 71, 1914, 71, 71, 71, 1918, 71, 71, 1913, 1917, + + 1915, 71, 1919, 71, 1916, 71, 1920, 71, 1921, 1922, + 71, 71, 71, 71, 1924, 1929, 1927, 1923, 1928, 71, + 71, 71, 71, 1931, 71, 1925, 71, 71, 1935, 71, + 1926, 71, 71, 1930, 1932, 1934, 1937, 1939, 1933, 71, + 1936, 1941, 71, 71, 71, 71, 1942, 71, 1947, 71, + 1938, 71, 1940, 71, 71, 71, 1949, 71, 71, 1950, + 1943, 1944, 1945, 1946, 1951, 71, 1952, 71, 1948, 71, + 1955, 71, 71, 1954, 1953, 71, 71, 71, 71, 71, + 1956, 71, 71, 71, 71, 1967, 71, 1958, 1959, 1960, + 1963, 71, 71, 1957, 1962, 1966, 71, 1971, 71, 1970, + + 1968, 1965, 71, 1964, 1961, 71, 71, 1973, 1974, 71, + 71, 1969, 71, 71, 1976, 71, 71, 1977, 1972, 71, + 71, 1978, 1982, 1975, 1980, 71, 71, 1984, 1981, 1986, + 71, 1979, 71, 71, 71, 1989, 71, 71, 1983, 1988, + 1985, 1990, 1991, 71, 71, 1994, 71, 71, 71, 71, + 71, 71, 1995, 71, 2000, 71, 1997, 71, 1987, 1996, + 2004, 1992, 71, 2001, 1993, 2002, 71, 1999, 1998, 71, + 71, 71, 2006, 71, 2005, 2009, 71, 2003, 71, 2007, + 71, 2011, 71, 2012, 71, 2010, 71, 2008, 71, 71, + 71, 2014, 2018, 2013, 71, 71, 2015, 2016, 2020, 71, + + 2017, 71, 71, 2021, 71, 71, 2023, 2024, 2022, 71, + 2019, 71, 71, 71, 2025, 2027, 2026, 2030, 71, 71, + 71, 2028, 2029, 2031, 71, 71, 71, 71, 71, 71, + 2032, 71, 71, 2039, 2034, 2033, 2040, 2036, 2037, 2035, + 71, 2041, 71, 71, 71, 71, 2042, 2038, 2044, 2050, + 71, 71, 2045, 71, 71, 2052, 71, 71, 2046, 2043, + 2049, 2054, 2047, 2051, 71, 71, 71, 144, 2057, 2055, + 2048, 2059, 2053, 2058, 71, 2060, 71, 71, 2056, 2061, + 71, 71, 2064, 71, 71, 2065, 2063, 71, 2062, 2069, + 71, 71, 2070, 71, 71, 2073, 2068, 71, 71, 2066, + + 71, 71, 2074, 71, 2075, 2071, 2076, 71, 71, 2078, + 2067, 71, 2072, 2077, 71, 71, 2083, 71, 2079, 71, + 2080, 2081, 71, 2082, 71, 71, 2089, 71, 71, 2086, + 71, 71, 71, 71, 2090, 71, 71, 2085, 2092, 71, + 71, 71, 2084, 2087, 2088, 2096, 2091, 2094, 2099, 71, + 71, 71, 2097, 71, 71, 2095, 71, 71, 2093, 2098, + 71, 2100, 71, 71, 71, 2110, 71, 142, 71, 2101, + 2102, 2111, 71, 71, 2107, 71, 2105, 2103, 71, 2109, + 2104, 2106, 71, 2115, 2108, 2112, 71, 2113, 2114, 2116, + 71, 2117, 71, 2118, 71, 2120, 71, 2123, 71, 2119, + + 71, 71, 71, 71, 71, 2121, 2124, 2125, 2122, 2129, + 71, 2130, 71, 71, 2132, 71, 2128, 71, 2134, 71, + 2126, 71, 71, 2127, 2137, 71, 71, 2136, 2138, 71, + 71, 71, 2131, 71, 71, 2133, 2135, 71, 71, 2140, + 2139, 71, 2143, 2144, 71, 2141, 2146, 71, 71, 71, + 2150, 71, 2142, 2145, 2148, 71, 2147, 71, 2149, 2152, + 71, 71, 2156, 71, 71, 2151, 71, 71, 71, 71, + 2153, 71, 2154, 2160, 2161, 71, 71, 2165, 71, 71, + 2155, 71, 2159, 71, 2157, 71, 2163, 2162, 2167, 2158, + 71, 2164, 71, 71, 2172, 71, 71, 2168, 2174, 2166, + + 71, 71, 71, 2169, 2173, 71, 71, 2177, 2170, 71, + 2178, 71, 71, 2176, 71, 71, 71, 2182, 2171, 71, + 2175, 2184, 2180, 2187, 2185, 71, 71, 2189, 71, 71, + 2186, 2179, 2181, 71, 71, 71, 71, 2195, 71, 2190, + 2183, 2191, 71, 71, 71, 2194, 2188, 2196, 2193, 71, + 2200, 2192, 2197, 2198, 2201, 71, 71, 71, 71, 2202, + 71, 71, 2205, 2199, 2206, 71, 2207, 2204, 71, 71, + 71, 71, 2213, 71, 2208, 71, 71, 2203, 71, 71, + 71, 71, 2220, 71, 2215, 2211, 71, 2212, 2209, 71, + 2210, 2214, 2216, 71, 2217, 2219, 2218, 2960, 2221, 2224, + + 71, 2223, 71, 2225, 2226, 71, 2222, 71, 71, 2229, + 2227, 2230, 71, 2228, 71, 71, 71, 71, 2231, 71, + 71, 2233, 71, 71, 2237, 71, 2232, 71, 2234, 2238, + 2239, 2240, 71, 2236, 71, 71, 2235, 71, 71, 2241, + 2245, 71, 2244, 71, 2242, 71, 71, 71, 71, 71, + 2247, 71, 2254, 2251, 71, 71, 2246, 2243, 71, 2253, + 71, 2255, 2250, 71, 71, 71, 2248, 2249, 2259, 2258, + 71, 2252, 2261, 2260, 71, 71, 71, 2263, 2256, 2257, + 71, 71, 71, 2264, 71, 2266, 2267, 2268, 71, 2262, + 2270, 71, 71, 71, 2272, 71, 71, 71, 71, 71, + + 2269, 2271, 71, 2276, 71, 71, 71, 2265, 71, 2278, + 2279, 2274, 2280, 71, 2273, 2275, 2281, 71, 2282, 71, + 2283, 71, 2284, 71, 71, 71, 2286, 71, 2277, 2291, + 2285, 2289, 71, 71, 71, 71, 2290, 2288, 2294, 71, + 71, 71, 2287, 71, 71, 2297, 2298, 71, 71, 2293, + 71, 2292, 71, 2299, 71, 2304, 71, 2302, 2303, 2295, + 71, 2296, 71, 2301, 71, 2308, 71, 71, 2300, 2307, + 2309, 71, 2310, 71, 2305, 2311, 71, 71, 71, 2312, + 71, 2315, 2306, 2314, 71, 2316, 71, 71, 71, 71, + 2321, 71, 71, 2323, 71, 2313, 2324, 71, 2317, 2318, + + 71, 71, 71, 71, 71, 2320, 71, 2327, 2319, 71, + 71, 2322, 2325, 71, 2326, 2328, 2333, 71, 2330, 2334, + 71, 71, 71, 71, 2329, 71, 2331, 71, 2340, 2332, + 71, 71, 71, 71, 71, 2337, 71, 71, 71, 2339, + 2341, 2336, 71, 2349, 2391, 2342, 2335, 2338, 2343, 71, + 2344, 2348, 2347, 71, 2351, 71, 2345, 71, 2350, 2346, + 2352, 71, 71, 2353, 71, 2354, 71, 2355, 71, 71, + 71, 71, 71, 71, 71, 2356, 71, 71, 71, 2357, + 71, 2366, 71, 2363, 2367, 71, 2370, 71, 2358, 2360, + 2359, 2369, 71, 2362, 2361, 2365, 2364, 2372, 71, 71, + + 2368, 2371, 71, 71, 71, 71, 71, 71, 71, 71, + 2375, 2381, 71, 2382, 71, 2383, 71, 2373, 71, 2376, + 2374, 71, 71, 2377, 2378, 2379, 2380, 2386, 71, 2960, + 71, 71, 71, 2385, 2384, 2387, 2390, 2392, 71, 71, + 71, 2393, 2388, 2394, 71, 71, 71, 71, 2389, 2396, + 71, 2395, 71, 71, 71, 2400, 71, 71, 2398, 71, + 2404, 2405, 71, 71, 2397, 2408, 71, 2399, 2406, 71, + 71, 71, 2401, 2402, 2409, 2411, 2403, 2407, 2410, 2412, + 71, 71, 2413, 71, 2416, 71, 71, 71, 71, 2420, + 71, 71, 2419, 2422, 71, 71, 2418, 71, 2417, 71, + + 2423, 2414, 71, 2415, 2425, 71, 71, 2426, 71, 2424, + 2421, 2428, 71, 71, 71, 2429, 71, 2431, 2433, 71, + 71, 2427, 71, 2432, 2435, 71, 2430, 2436, 71, 71, + 71, 2434, 71, 2437, 2438, 2439, 71, 2440, 71, 71, + 71, 71, 71, 71, 2960, 2442, 2443, 2445, 2446, 2448, + 71, 2441, 2449, 71, 2444, 2447, 71, 71, 71, 2452, + 2454, 71, 2451, 2450, 71, 71, 71, 71, 2456, 2455, + 71, 2459, 71, 2460, 71, 2458, 2453, 71, 2462, 71, + 2457, 71, 2464, 2668, 2463, 2960, 71, 2465, 71, 71, + 2461, 2466, 2468, 71, 2467, 71, 71, 2469, 71, 71, + + 2470, 71, 71, 71, 71, 2471, 71, 2474, 71, 2473, + 71, 2476, 71, 2477, 2472, 2475, 2478, 2479, 71, 71, + 71, 71, 71, 2480, 71, 2485, 2481, 71, 71, 2483, + 2484, 2486, 2482, 71, 2490, 71, 71, 71, 71, 71, + 2494, 71, 71, 71, 71, 71, 2487, 2492, 2488, 2498, + 2499, 71, 2489, 2501, 2493, 2491, 2495, 2496, 2502, 71, + 2503, 2504, 71, 2497, 71, 71, 71, 71, 71, 2500, + 71, 71, 2506, 2505, 71, 2509, 71, 2507, 71, 2512, + 2513, 71, 71, 2508, 2514, 71, 2515, 71, 2510, 71, + 71, 2511, 71, 2516, 2520, 2517, 2518, 71, 71, 2521, + + 71, 2526, 2519, 71, 2523, 2524, 71, 2525, 71, 71, + 71, 71, 2522, 2530, 71, 71, 2531, 2532, 71, 71, + 2534, 71, 2527, 71, 71, 71, 2538, 71, 2528, 2539, + 71, 2529, 71, 71, 2533, 2541, 2535, 2540, 71, 2537, + 2542, 71, 2536, 71, 71, 71, 2547, 2550, 71, 71, + 2543, 2546, 71, 2549, 71, 71, 71, 71, 2544, 2551, + 2553, 71, 71, 2545, 2552, 2555, 71, 71, 71, 2548, + 71, 2558, 2562, 71, 71, 71, 2565, 71, 2556, 2557, + 2554, 2566, 71, 2564, 2561, 2559, 2568, 71, 2560, 71, + 2569, 71, 2570, 2563, 71, 2571, 2567, 71, 2572, 71, + + 71, 71, 71, 71, 71, 2574, 71, 2580, 71, 71, + 71, 71, 2577, 2581, 2960, 2573, 2583, 71, 2584, 2585, + 71, 2575, 2587, 71, 2578, 71, 2579, 2582, 2576, 71, + 2586, 71, 71, 71, 2592, 71, 71, 71, 2588, 71, + 2589, 2590, 2596, 2593, 71, 2594, 71, 2597, 71, 71, + 71, 2591, 2595, 71, 2600, 2599, 71, 2598, 2601, 71, + 2602, 71, 2604, 71, 71, 71, 2609, 71, 2603, 71, + 71, 71, 71, 2607, 2643, 2605, 2612, 71, 71, 2610, + 71, 2606, 2613, 71, 2614, 2608, 71, 2615, 71, 2617, + 2611, 2616, 2618, 2619, 71, 2620, 71, 2621, 71, 71, + + 2623, 71, 71, 2626, 71, 71, 71, 2625, 2622, 71, + 2627, 2628, 2629, 71, 71, 71, 71, 2634, 71, 71, + 2624, 2632, 2630, 71, 2636, 71, 71, 71, 2640, 71, + 71, 71, 71, 2633, 71, 2631, 71, 71, 2637, 2644, + 71, 2638, 2648, 2635, 2641, 2642, 71, 2639, 2647, 71, + 2645, 2650, 71, 2652, 71, 2646, 2653, 71, 71, 2655, + 71, 71, 71, 71, 71, 71, 2660, 71, 2651, 71, + 2659, 71, 2649, 71, 2664, 71, 71, 2656, 2657, 2654, + 2658, 2666, 71, 2661, 2669, 71, 71, 2670, 71, 2665, + 2663, 2667, 2662, 2672, 71, 71, 2671, 71, 71, 2677, + + 71, 71, 71, 2681, 71, 71, 2674, 2675, 71, 71, + 2683, 2682, 71, 2673, 2679, 71, 2686, 2676, 71, 2678, + 71, 2680, 71, 2688, 2684, 2687, 71, 2689, 71, 71, + 71, 71, 71, 71, 2691, 2685, 2690, 2692, 2694, 2697, + 71, 2698, 71, 71, 71, 71, 2742, 2693, 2695, 2696, + 2701, 71, 2702, 71, 2700, 71, 71, 71, 71, 71, + 2703, 71, 2699, 2705, 2706, 71, 2707, 71, 2708, 71, + 2704, 71, 2710, 71, 71, 71, 2709, 71, 2711, 2712, + 71, 2715, 71, 2713, 2716, 71, 2720, 71, 71, 2717, + 71, 2719, 2723, 71, 71, 2722, 2714, 2718, 2724, 71, + + 71, 71, 71, 2727, 71, 2725, 71, 2721, 2726, 71, + 2729, 2730, 71, 2728, 71, 71, 71, 71, 71, 2731, + 2734, 71, 71, 2736, 2732, 71, 2733, 71, 2735, 2737, + 71, 71, 71, 71, 2749, 71, 71, 2738, 2746, 2960, + 71, 71, 2739, 2750, 71, 2740, 2764, 2747, 2741, 2743, + 2744, 71, 2745, 2748, 2762, 2751, 2752, 71, 2753, 71, + 2754, 2755, 71, 71, 2756, 2757, 2760, 71, 2758, 2759, + 71, 71, 2761, 71, 2765, 71, 71, 71, 71, 71, + 71, 2768, 71, 71, 2763, 2767, 71, 2773, 2769, 2774, + 71, 71, 2772, 2775, 71, 2770, 71, 71, 2780, 71, + + 2771, 2766, 2777, 2781, 71, 2778, 2776, 2782, 2779, 71, + 71, 71, 71, 71, 71, 71, 2786, 2787, 2789, 71, + 2790, 2791, 71, 2960, 2783, 2784, 2792, 71, 2793, 71, + 2785, 2794, 71, 2788, 2795, 71, 2796, 71, 2797, 71, + 2798, 71, 71, 2800, 71, 71, 71, 71, 2803, 71, + 71, 2799, 71, 71, 2807, 71, 2809, 71, 71, 71, + 71, 2804, 2811, 2805, 2806, 2801, 2802, 71, 2813, 71, + 2808, 71, 2816, 71, 2815, 71, 2810, 71, 71, 71, + 71, 71, 2818, 71, 2823, 71, 2812, 2814, 71, 2817, + 2824, 71, 2819, 2825, 71, 71, 2821, 2820, 2822, 71, + + 71, 71, 2830, 2828, 2827, 71, 71, 71, 2826, 2834, + 71, 2833, 71, 2836, 71, 71, 2832, 71, 71, 71, + 2829, 71, 71, 71, 2831, 2835, 71, 2837, 2847, 71, + 71, 71, 71, 2931, 2838, 2839, 71, 2840, 2842, 71, + 2843, 2848, 2844, 2841, 2845, 71, 2846, 2849, 71, 71, + 2850, 2851, 71, 2852, 71, 2853, 71, 71, 71, 2854, + 2855, 2856, 71, 2857, 71, 2860, 71, 2863, 71, 71, + 2858, 71, 2865, 71, 71, 71, 71, 2859, 2861, 2868, + 71, 71, 2869, 71, 2870, 2872, 2862, 71, 2864, 2866, + 2873, 71, 71, 2867, 71, 71, 71, 2877, 71, 71, + + 71, 2874, 2871, 2880, 71, 2875, 71, 71, 71, 71, + 71, 2882, 71, 2876, 2879, 2878, 71, 2887, 71, 71, + 71, 2884, 2885, 2888, 2881, 2892, 2883, 2891, 71, 2886, + 2893, 71, 2894, 71, 2889, 71, 71, 71, 2890, 71, + 2895, 2899, 2896, 71, 2897, 2901, 71, 71, 2900, 71, + 71, 71, 2898, 2902, 71, 71, 2907, 71, 2904, 71, + 71, 2910, 71, 2911, 71, 71, 71, 71, 71, 2903, + 2914, 71, 2909, 2905, 2906, 2912, 2908, 71, 2913, 71, + 2918, 71, 2919, 71, 2917, 71, 2915, 2916, 71, 2922, + 71, 2924, 71, 2925, 2920, 71, 71, 71, 2929, 71, + + 2926, 71, 71, 2927, 2923, 71, 2930, 2932, 71, 2921, + 71, 71, 2933, 71, 2938, 71, 2928, 2934, 2936, 71, + 71, 2935, 71, 71, 71, 2940, 71, 2941, 71, 2944, + 2937, 2945, 71, 71, 71, 2948, 2949, 71, 2939, 71, + 2951, 71, 2942, 2943, 71, 2946, 2950, 2952, 71, 71, + 71, 2953, 2947, 71, 2954, 2955, 71, 2958, 71, 2959, + 71, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, + 2960, 2960, 2956, 2960, 2960, 2957, 43, 43, 43, 43, + 43, 43, 43, 48, 48, 48, 48, 48, 48, 48, + 53, 53, 53, 53, 53, 53, 53, 59, 59, 59, + + 59, 59, 59, 59, 64, 64, 64, 64, 64, 64, + 64, 74, 74, 2960, 74, 74, 74, 74, 141, 141, + 2960, 2960, 2960, 141, 141, 143, 143, 2960, 2960, 143, + 2960, 143, 145, 2960, 2960, 2960, 2960, 2960, 145, 148, + 148, 2960, 2960, 2960, 148, 148, 150, 2960, 2960, 2960, + 2960, 2960, 150, 152, 152, 2960, 152, 152, 152, 152, + 75, 75, 2960, 75, 75, 75, 75, 13, 2960, 2960, + 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, + 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, + 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, + + 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960 } ; -static const flex_int16_t yy_chk[5726] = +static const flex_int16_t yy_chk[5809] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2024,628 +2047,637 @@ static const flex_int16_t yy_chk[5726] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 2918, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 2966, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, 47, 47, 11, 12, 12, 12, 12, 12, 12, 21, 23, 23, 21, 21, 24, 12, 21, 81, 23, 24, - 34, 21, 23, 24, 12, 23, 24, 979, 24, 24, + 34, 21, 23, 24, 12, 23, 24, 999, 24, 24, 21, 26, 26, 27, 27, 90, 28, 81, 32, 32, 28, 34, 27, 28, 33, 33, 26, 32, 36, 33, 28, 35, 28, 32, 90, 42, 35, 32, 52, 84, 35, 52, 36, 37, 37, 33, 35, 38, 37, 35, - 42, 69, 38, 63, 63, 38, 35, 84, 37, 40, - 72, 37, 38, 40, 72, 69, 38, 38, 39, 39, + 42, 69, 38, 63, 63, 38, 35, 84, 37, 37, + 40, 37, 38, 80, 40, 69, 38, 38, 39, 39, - 102, 39, 78, 40, 41, 41, 78, 40, 40, 41, - 39, 149, 58, 41, 58, 58, 39, 58, 66, 102, + 126, 39, 41, 41, 40, 80, 126, 41, 40, 40, + 39, 41, 58, 89, 58, 58, 39, 58, 66, 86, 66, 66, 68, 66, 68, 68, 71, 68, 71, 71, - 66, 71, 85, 74, 80, 74, 74, 71, 74, 77, - 82, 85, 77, 82, 74, 74, 80, 83, 86, 88, - 83, 89, 87, 91, 93, 92, 98, 95, 87, 91, - 96, 98, 86, 83, 87, 94, 87, 88, 88, 92, - 159, 99, 91, 89, 93, 95, 94, 94, 96, 97, - 105, 159, 101, 97, 94, 99, 100, 106, 101, 100, - 103, 104, 100, 107, 104, 103, 108, 107, 104, 105, - - 109, 106, 110, 108, 105, 100, 100, 101, 111, 110, - 112, 113, 114, 109, 104, 103, 114, 115, 116, 117, - 119, 111, 121, 116, 118, 118, 122, 116, 120, 113, - 112, 124, 120, 127, 127, 115, 125, 121, 126, 117, - 119, 120, 125, 123, 124, 122, 123, 120, 128, 129, - 126, 127, 130, 131, 127, 134, 132, 123, 133, 135, - 133, 123, 137, 136, 135, 129, 128, 134, 138, 133, - 139, 130, 132, 138, 131, 136, 141, 141, 147, 143, - 137, 133, 143, 145, 139, 145, 145, 154, 145, 148, - 148, 150, 154, 150, 150, 151, 150, 151, 151, 153, - - 151, 156, 153, 155, 160, 157, 158, 151, 161, 155, - 162, 163, 160, 164, 158, 165, 163, 167, 155, 156, - 157, 158, 166, 191, 165, 162, 168, 161, 166, 166, - 170, 168, 178, 164, 169, 169, 170, 172, 171, 191, - 171, 172, 167, 171, 173, 173, 172, 174, 175, 176, - 177, 172, 178, 175, 176, 179, 182, 172, 172, 180, - 171, 179, 177, 180, 181, 183, 174, 184, 185, 181, - 182, 186, 187, 189, 190, 192, 186, 187, 189, 184, - 183, 192, 184, 196, 179, 194, 185, 188, 188, 193, - 193, 194, 195, 188, 190, 197, 198, 194, 195, 199, - - 200, 197, 198, 196, 201, 188, 200, 188, 202, 201, - 203, 198, 204, 205, 202, 206, 203, 207, 208, 204, - 199, 206, 209, 210, 208, 211, 205, 212, 214, 215, - 213, 210, 212, 216, 218, 217, 220, 207, 211, 213, - 217, 221, 219, 214, 209, 215, 219, 221, 222, 223, - 224, 225, 218, 216, 227, 223, 225, 226, 220, 226, - 230, 227, 228, 229, 232, 231, 222, 222, 228, 229, - 224, 231, 233, 234, 234, 236, 232, 235, 235, 230, - 239, 236, 237, 238, 240, 238, 233, 242, 237, 240, - 243, 244, 241, 246, 260, 245, 260, 257, 243, 236, - - 245, 247, 238, 239, 241, 249, 242, 247, 248, 251, - 249, 244, 250, 252, 248, 251, 246, 250, 253, 254, - 255, 256, 257, 259, 258, 263, 259, 267, 252, 256, - 258, 266, 253, 146, 255, 261, 261, 254, 262, 264, - 264, 262, 267, 263, 265, 265, 268, 266, 269, 268, - 270, 271, 269, 272, 273, 275, 274, 271, 274, 270, - 273, 275, 276, 277, 277, 278, 276, 272, 279, 280, - 278, 282, 281, 283, 279, 284, 284, 285, 286, 288, - 285, 287, 290, 276, 144, 287, 283, 289, 289, 280, - 281, 291, 282, 292, 291, 293, 286, 288, 295, 294, - - 290, 293, 294, 299, 297, 292, 301, 298, 299, 301, - 295, 291, 296, 297, 300, 302, 142, 300, 308, 300, - 306, 296, 303, 306, 296, 298, 140, 307, 302, 296, - 296, 296, 296, 308, 303, 300, 304, 305, 304, 304, - 309, 310, 305, 305, 307, 311, 311, 307, 312, 309, - 310, 313, 313, 312, 314, 315, 316, 317, 318, 319, - 315, 320, 321, 327, 329, 322, 323, 320, 316, 314, - 322, 70, 323, 329, 319, 324, 317, 327, 318, 325, - 324, 331, 321, 326, 325, 336, 326, 331, 326, 328, - 325, 332, 328, 330, 330, 335, 332, 337, 333, 338, - - 422, 333, 339, 342, 345, 328, 336, 333, 328, 344, - 328, 333, 337, 345, 338, 335, 339, 342, 349, 333, - 334, 334, 422, 334, 344, 341, 346, 347, 341, 348, - 354, 346, 346, 347, 350, 352, 334, 349, 355, 334, - 353, 334, 351, 334, 341, 343, 353, 343, 343, 350, - 348, 351, 356, 358, 352, 359, 354, 343, 355, 343, - 343, 343, 357, 360, 343, 361, 356, 363, 357, 362, - 366, 364, 357, 367, 362, 359, 358, 364, 365, 365, - 361, 368, 363, 360, 370, 367, 369, 371, 372, 375, - 366, 374, 369, 372, 376, 368, 373, 373, 377, 373, - - 378, 383, 378, 371, 379, 375, 381, 381, 379, 370, - 376, 374, 377, 380, 382, 384, 383, 380, 385, 387, - 378, 386, 389, 393, 64, 388, 390, 389, 387, 391, - 390, 384, 380, 382, 388, 386, 385, 392, 391, 387, - 394, 387, 396, 392, 393, 395, 394, 396, 397, 395, - 398, 398, 399, 400, 400, 401, 402, 403, 403, 405, - 401, 404, 406, 405, 407, 399, 408, 404, 397, 402, - 409, 408, 410, 410, 411, 409, 412, 406, 414, 413, - 415, 410, 417, 415, 416, 407, 411, 420, 416, 425, - 414, 418, 418, 419, 417, 426, 412, 413, 419, 421, - - 421, 424, 424, 426, 427, 428, 429, 433, 420, 431, - 425, 432, 437, 427, 434, 435, 436, 437, 429, 438, - 434, 433, 436, 441, 435, 428, 439, 431, 444, 431, - 440, 432, 442, 438, 439, 442, 440, 439, 443, 446, - 445, 450, 444, 441, 443, 445, 447, 448, 449, 451, - 452, 448, 453, 449, 451, 454, 450, 456, 494, 457, - 458, 446, 443, 459, 458, 460, 452, 447, 454, 59, - 463, 453, 455, 455, 457, 461, 494, 456, 455, 461, - 455, 460, 459, 465, 462, 463, 455, 466, 455, 462, - 464, 455, 455, 462, 467, 464, 466, 468, 455, 465, - - 467, 469, 470, 471, 469, 467, 472, 472, 473, 474, - 474, 475, 476, 468, 477, 478, 479, 480, 481, 486, - 482, 483, 480, 471, 476, 470, 475, 481, 486, 477, - 489, 484, 490, 473, 478, 488, 483, 484, 479, 482, - 487, 488, 489, 491, 487, 492, 493, 490, 495, 497, - 496, 497, 495, 499, 499, 501, 498, 503, 505, 492, - 500, 493, 491, 496, 498, 502, 500, 501, 506, 503, - 504, 502, 505, 504, 507, 508, 509, 510, 508, 507, - 593, 511, 593, 506, 512, 509, 511, 511, 513, 513, - 514, 514, 509, 510, 515, 509, 519, 512, 516, 516, - - 515, 517, 517, 518, 520, 521, 522, 520, 523, 518, - 521, 524, 526, 525, 524, 527, 523, 519, 525, 528, - 529, 531, 532, 528, 530, 522, 529, 532, 530, 533, - 534, 536, 535, 538, 527, 526, 534, 535, 537, 531, - 540, 537, 539, 539, 544, 536, 537, 541, 542, 533, - 537, 538, 541, 542, 543, 546, 547, 548, 540, 544, - 548, 546, 549, 553, 550, 547, 549, 551, 543, 550, - 551, 552, 554, 555, 556, 558, 552, 557, 561, 553, - 555, 564, 557, 559, 559, 560, 562, 556, 549, 563, - 554, 570, 54, 564, 560, 558, 570, 561, 563, 565, - - 566, 567, 562, 571, 567, 565, 566, 568, 568, 569, - 568, 572, 569, 573, 576, 574, 575, 576, 577, 573, - 574, 571, 575, 577, 578, 572, 579, 580, 581, 578, - 578, 582, 583, 584, 588, 586, 585, 582, 586, 579, - 580, 585, 584, 587, 592, 589, 588, 581, 581, 587, - 589, 583, 590, 586, 591, 591, 594, 590, 590, 595, - 596, 595, 597, 598, 599, 600, 601, 602, 603, 592, - 608, 602, 601, 604, 605, 594, 606, 603, 596, 607, - 597, 598, 608, 599, 609, 600, 610, 611, 604, 605, - 612, 613, 610, 614, 606, 616, 615, 618, 607, 609, - - 615, 611, 612, 617, 619, 620, 621, 622, 622, 624, - 613, 626, 614, 616, 623, 618, 625, 628, 623, 617, - 621, 627, 619, 619, 620, 626, 627, 625, 624, 629, - 630, 631, 632, 628, 633, 634, 636, 632, 631, 635, - 634, 633, 637, 630, 635, 639, 638, 640, 629, 637, - 641, 645, 642, 647, 636, 638, 640, 642, 643, 639, - 644, 643, 641, 646, 644, 645, 648, 649, 647, 650, - 650, 655, 646, 651, 651, 652, 652, 653, 656, 657, - 648, 658, 651, 659, 656, 658, 653, 660, 649, 661, - 655, 662, 663, 665, 664, 659, 666, 662, 667, 657, - - 663, 664, 670, 673, 668, 676, 678, 661, 701, 668, - 701, 665, 660, 668, 676, 683, 668, 670, 667, 677, - 673, 666, 678, 668, 679, 677, 668, 682, 679, 680, - 680, 681, 681, 683, 684, 685, 686, 691, 682, 688, - 689, 690, 686, 692, 688, 694, 692, 53, 684, 693, - 693, 696, 694, 695, 695, 685, 687, 687, 687, 690, - 687, 689, 691, 687, 697, 697, 696, 698, 687, 702, - 699, 700, 698, 699, 687, 687, 700, 703, 704, 705, - 707, 702, 704, 706, 708, 708, 709, 712, 707, 710, - 711, 711, 713, 714, 715, 802, 703, 717, 717, 705, - - 715, 709, 706, 710, 713, 712, 716, 718, 802, 720, - 721, 716, 718, 718, 720, 714, 721, 722, 725, 723, - 724, 725, 726, 722, 723, 727, 724, 730, 726, 728, - 728, 729, 729, 727, 731, 730, 732, 733, 734, 735, - 735, 732, 736, 738, 733, 737, 739, 741, 748, 738, - 742, 736, 731, 737, 744, 743, 741, 734, 745, 742, - 743, 745, 746, 744, 747, 739, 750, 746, 749, 749, - 751, 752, 753, 748, 754, 757, 757, 754, 747, 758, - 752, 750, 756, 759, 756, 754, 760, 763, 759, 751, - 761, 762, 764, 765, 766, 767, 753, 768, 770, 767, - - 758, 769, 765, 773, 770, 771, 772, 760, 779, 763, - 761, 762, 764, 774, 771, 768, 776, 766, 772, 775, - 769, 777, 773, 778, 778, 775, 777, 774, 779, 780, - 776, 781, 782, 783, 784, 785, 787, 786, 780, 789, - 782, 788, 787, 790, 791, 789, 792, 794, 795, 797, - 791, 781, 792, 783, 785, 788, 784, 786, 793, 796, - 795, 799, 793, 790, 796, 801, 794, 799, 795, 803, - 797, 798, 798, 800, 804, 803, 800, 805, 805, 806, - 807, 808, 808, 801, 809, 807, 810, 811, 811, 812, - 810, 814, 813, 817, 804, 815, 814, 806, 820, 809, - - 821, 818, 823, 823, 824, 825, 826, 826, 824, 827, - 830, 812, 813, 829, 815, 818, 868, 817, 820, 828, - 825, 821, 822, 828, 830, 822, 832, 822, 829, 868, - 831, 822, 834, 822, 827, 831, 833, 836, 822, 839, - 832, 833, 833, 822, 835, 837, 834, 840, 835, 838, - 837, 841, 836, 839, 838, 842, 843, 844, 845, 845, - 837, 842, 843, 844, 846, 841, 847, 848, 840, 846, - 850, 849, 847, 852, 853, 855, 856, 856, 857, 853, - 854, 859, 863, 857, 860, 852, 863, 855, 850, 848, - 849, 851, 851, 858, 854, 859, 861, 851, 865, 851, - - 867, 858, 869, 860, 865, 851, 862, 862, 869, 866, - 851, 851, 866, 870, 871, 861, 872, 851, 870, 867, - 873, 874, 875, 876, 877, 872, 878, 879, 875, 873, - 880, 878, 876, 871, 881, 886, 882, 874, 48, 885, - 883, 884, 889, 877, 880, 885, 891, 879, 882, 883, - 884, 887, 886, 892, 881, 893, 894, 887, 889, 895, - 891, 896, 897, 898, 901, 907, 902, 897, 898, 901, - 894, 903, 903, 892, 893, 902, 896, 895, 904, 905, - 908, 907, 911, 912, 904, 908, 908, 909, 909, 913, - 910, 909, 905, 910, 915, 914, 911, 917, 916, 918, - - 920, 921, 923, 912, 916, 918, 921, 913, 914, 915, - 919, 922, 926, 919, 924, 925, 922, 917, 923, 924, - 925, 920, 928, 929, 926, 930, 931, 933, 928, 932, - 932, 930, 931, 934, 935, 937, 933, 935, 938, 929, - 936, 936, 939, 940, 942, 941, 940, 944, 943, 949, - 942, 934, 944, 937, 943, 945, 946, 938, 941, 947, - 945, 946, 939, 950, 951, 947, 952, 949, 953, 953, - 951, 952, 954, 955, 956, 957, 958, 959, 957, 958, - 960, 954, 955, 950, 961, 962, 965, 963, 959, 964, - 967, 967, 956, 963, 966, 964, 961, 968, 960, 966, - - 969, 965, 971, 970, 962, 972, 971, 974, 973, 975, - 977, 978, 978, 980, 969, 970, 968, 973, 981, 982, - 983, 984, 986, 972, 1027, 983, 974, 980, 1027, 977, - 984, 982, 987, 981, 975, 985, 985, 988, 987, 989, - 992, 991, 986, 988, 989, 990, 991, 990, 993, 995, - 994, 996, 997, 998, 992, 994, 999, 1001, 1001, 997, - 1002, 1003, 993, 1004, 995, 1005, 1006, 43, 998, 1012, - 996, 1005, 1009, 1009, 1002, 999, 1007, 1010, 1004, 1003, - 1011, 1007, 1010, 1012, 1014, 1013, 1006, 1011, 1013, 1015, - 1007, 1016, 1007, 1017, 1018, 1007, 1016, 1019, 1015, 1018, - - 1020, 1023, 1014, 1022, 1022, 1024, 1023, 1025, 1019, 1026, - 1024, 1028, 1017, 1029, 1026, 1030, 1031, 1032, 1033, 1020, - 1028, 1036, 1035, 1037, 1034, 1038, 1039, 1025, 1029, 1032, - 1030, 1034, 1039, 1033, 1035, 1031, 1040, 1041, 1042, 1043, - 1036, 1045, 1046, 1038, 1037, 1047, 1048, 1045, 1043, 1049, - 1050, 1040, 1052, 1047, 1049, 1051, 1046, 1041, 1042, 1053, - 1051, 1051, 1050, 1054, 1055, 1055, 1048, 1057, 1059, 1058, - 1061, 1052, 1062, 1053, 1059, 1061, 1054, 1056, 1058, 14, - 1057, 1062, 1056, 1060, 1060, 1056, 1056, 1063, 1067, 1064, - 1056, 1070, 1065, 1063, 1064, 1071, 1056, 1065, 1066, 1066, - - 1056, 1068, 1068, 1069, 1073, 1072, 1069, 1074, 1069, 1067, - 1076, 1070, 1074, 1071, 1072, 1075, 1077, 1078, 1081, 1083, - 1079, 1083, 1077, 1078, 1073, 1079, 1080, 1081, 1076, 1075, - 1080, 1084, 1081, 1086, 1081, 1087, 1081, 1086, 1081, 1082, - 1082, 1088, 1084, 1089, 1091, 1095, 1092, 1093, 1090, 1094, - 1087, 1092, 1089, 1090, 1090, 1096, 1098, 1097, 1094, 1088, - 1101, 1093, 1099, 1100, 1095, 1097, 1091, 1099, 1102, 1101, - 1098, 1103, 1106, 1104, 1096, 1105, 1105, 1100, 1104, 1107, - 1107, 1108, 1110, 1108, 1111, 1110, 1102, 1106, 1112, 1111, - 1113, 1114, 1114, 1115, 1116, 1116, 1103, 1117, 1117, 1113, - - 1118, 1119, 1120, 1121, 1121, 1118, 1122, 1112, 1123, 1124, - 1125, 1123, 1126, 1115, 1127, 1125, 1127, 1128, 1131, 13, - 1132, 1126, 1119, 1120, 1130, 1132, 1122, 1130, 1139, 1124, - 1134, 1133, 1135, 1131, 1136, 1128, 1133, 1135, 1134, 1136, - 1137, 1137, 1138, 1140, 1141, 1142, 1139, 1138, 1144, 1140, - 1145, 1141, 1146, 1147, 1144, 1148, 1145, 1146, 1142, 1147, - 1149, 1150, 1151, 1151, 1148, 1152, 1154, 1155, 1156, 1157, - 1158, 1160, 1150, 1161, 1156, 1157, 1158, 1160, 1162, 1149, - 1163, 1164, 1165, 1166, 1166, 1152, 1154, 1161, 1167, 1168, - 1155, 1169, 1163, 1161, 1170, 1164, 1171, 1171, 1162, 1170, - - 1165, 1172, 1173, 1175, 1178, 1176, 1180, 1173, 1167, 1169, - 1176, 1176, 1177, 1178, 1168, 1179, 1181, 1182, 1190, 1185, - 1180, 1183, 1175, 1179, 1172, 1184, 1183, 1184, 1186, 1183, - 1177, 1181, 1182, 1185, 1186, 1182, 1187, 1188, 1189, 1197, - 1187, 1191, 1192, 1193, 1190, 1194, 1195, 1192, 1188, 1198, - 1194, 1199, 1201, 1197, 1200, 1200, 1201, 1189, 1202, 1191, - 1203, 1193, 1204, 1205, 1206, 1208, 1195, 1198, 1204, 1199, - 1207, 1209, 1210, 1211, 1212, 1205, 1202, 1213, 1211, 1203, - 1208, 1212, 1213, 1206, 1207, 1214, 1209, 1215, 1216, 1216, - 1217, 1210, 1218, 1219, 1220, 1221, 1215, 0, 1218, 1220, - - 1222, 1221, 1229, 1214, 1230, 1217, 1222, 1223, 1223, 1224, - 1224, 1226, 1226, 1227, 1219, 1228, 1231, 1227, 1230, 1232, - 1229, 1233, 1233, 1234, 1228, 1235, 1232, 1236, 1237, 1238, - 1239, 1231, 1236, 1235, 1240, 1239, 1239, 1241, 1245, 1240, - 1240, 1243, 1237, 1234, 1242, 1242, 1244, 1245, 1238, 1246, - 1247, 1248, 1249, 1250, 1246, 1252, 1251, 1241, 1253, 1250, - 1243, 1251, 1255, 1254, 1253, 1244, 1256, 1257, 1255, 1247, - 1249, 1248, 1256, 1258, 1259, 1260, 1261, 1262, 1264, 1264, - 1263, 1252, 1254, 0, 1265, 1266, 1257, 1265, 1267, 1267, - 1261, 1268, 1258, 1259, 1260, 1263, 1268, 1266, 1262, 1269, - - 1270, 1271, 1272, 1269, 1275, 1273, 1276, 1273, 1277, 1275, - 1271, 1273, 1284, 1270, 1278, 1272, 1279, 1279, 1280, 1285, - 1281, 1276, 1282, 1280, 1273, 1281, 1282, 1283, 1277, 1286, - 1278, 1283, 1284, 1287, 1288, 1288, 1290, 1285, 1292, 1287, - 1293, 1294, 1294, 1296, 1295, 1293, 1298, 1298, 1300, 1286, - 1295, 1300, 1301, 1301, 1290, 1302, 1303, 1305, 1306, 1292, - 1305, 1307, 1309, 1296, 1308, 1308, 1310, 1311, 1312, 1313, - 1307, 1302, 1303, 1312, 1314, 1314, 1315, 1309, 1306, 1317, - 1316, 1318, 1318, 1313, 1319, 1320, 1311, 1310, 1321, 1325, - 1322, 1323, 1323, 1321, 1315, 1316, 1324, 1327, 1319, 1328, - - 1324, 1326, 1326, 1320, 1317, 1322, 1330, 1329, 1331, 1325, - 1328, 1329, 1334, 1331, 1333, 1333, 1336, 1335, 1337, 1327, - 1338, 1339, 1339, 1340, 1341, 1330, 1342, 1345, 1340, 1343, - 1334, 1335, 1337, 1349, 1344, 1336, 1336, 1352, 1343, 1344, - 1346, 1354, 1346, 1347, 1341, 1338, 1342, 1345, 1347, 1348, - 1350, 1352, 1358, 1349, 1362, 1348, 1350, 1353, 1353, 1355, - 1354, 1357, 1359, 1359, 1361, 1355, 1357, 1360, 1360, 1363, - 1364, 1366, 1362, 1364, 1365, 1365, 1358, 1367, 1361, 1373, - 1369, 1371, 1368, 1366, 1363, 1368, 1369, 1370, 1368, 1372, - 1371, 1383, 1370, 1374, 1372, 1375, 1374, 1367, 1376, 1381, - - 1368, 1375, 1382, 1376, 1373, 1377, 1377, 1378, 1378, 1379, - 1383, 1380, 1381, 1384, 1385, 1379, 1380, 1385, 1386, 1387, - 1382, 1388, 1389, 1390, 1386, 1387, 1388, 1391, 1389, 1392, - 1392, 1393, 1391, 1384, 1394, 1395, 1393, 1396, 1399, 1397, - 1398, 1401, 1402, 1400, 1403, 1404, 1390, 1401, 1405, 1413, - 1399, 1408, 1394, 1397, 1398, 1395, 1400, 1396, 1409, 1404, - 1407, 1407, 1402, 1409, 1403, 1410, 1410, 1411, 1414, 1405, - 1412, 1408, 1415, 1413, 1416, 1419, 1417, 1421, 1418, 1423, - 0, 1415, 1411, 1417, 1412, 1424, 1414, 1418, 1424, 1416, - 1418, 1419, 1421, 1425, 1425, 1426, 1426, 1421, 1427, 1428, - - 1429, 1430, 1430, 1429, 1423, 1431, 1432, 1433, 1434, 1435, - 1427, 1436, 1433, 1434, 1437, 1438, 1441, 1428, 1431, 1443, - 1439, 1440, 1441, 1437, 1444, 1432, 1445, 1436, 1435, 1439, - 1440, 1446, 1439, 1447, 1438, 1442, 1442, 1444, 1448, 1443, - 1450, 1451, 1452, 1452, 1445, 1446, 1453, 1454, 1455, 1447, - 1448, 1456, 1456, 1455, 1458, 1457, 1454, 1459, 1460, 1451, - 1463, 1465, 1453, 1461, 1457, 1450, 1456, 1457, 1461, 1461, - 1468, 1464, 1458, 1472, 1463, 1468, 1460, 1464, 1459, 1465, - 1466, 1466, 1467, 1469, 1470, 1473, 1474, 1475, 1467, 1469, - 1470, 1481, 1474, 1472, 1476, 1477, 1479, 1476, 1482, 1473, - - 1475, 1477, 1484, 1476, 1479, 1483, 1485, 1486, 1487, 1488, - 1481, 1484, 1490, 1483, 1489, 1489, 1492, 1482, 1490, 1485, - 1486, 1491, 1487, 1488, 1493, 1494, 1495, 1491, 1496, 1492, - 1498, 1497, 1499, 1500, 1502, 1502, 1489, 1497, 1503, 0, - 1509, 1496, 1504, 1494, 1493, 1495, 1504, 1513, 1499, 1505, - 1506, 1500, 1498, 1508, 1505, 1506, 1507, 1511, 1503, 1512, - 1512, 1507, 1508, 1509, 1514, 1515, 1513, 1516, 1516, 1517, - 1518, 1521, 1511, 1519, 1520, 1522, 1514, 1518, 1525, 1524, - 1532, 1523, 1526, 1517, 1515, 1519, 1520, 1523, 1526, 1532, - 1521, 1524, 1527, 1527, 1528, 1522, 1525, 1528, 1529, 1529, - - 1531, 1533, 1534, 1534, 1535, 1531, 1536, 1533, 1536, 1537, - 1538, 1539, 1537, 1540, 1541, 1542, 1535, 1543, 1546, 1547, - 1542, 1545, 1544, 1546, 1548, 1549, 1543, 1552, 1547, 1551, - 1538, 1540, 1541, 1539, 1544, 1551, 1545, 1550, 1550, 1553, - 1549, 1547, 1555, 1554, 1548, 1556, 1561, 1556, 1552, 1557, - 1558, 1558, 1559, 1559, 1560, 1560, 1562, 1562, 1553, 1554, - 1563, 1563, 1555, 1557, 1564, 1557, 1561, 1565, 1566, 1566, - 1567, 1568, 1569, 1571, 1567, 1569, 1572, 1568, 1573, 1571, - 1574, 1576, 1576, 1575, 1573, 1564, 1575, 1578, 1565, 1577, - 1577, 1580, 1581, 1578, 1572, 1579, 1582, 1583, 1585, 1586, - - 1589, 1593, 1582, 1585, 1585, 1574, 1592, 1579, 1579, 1579, - 1588, 1580, 1581, 1586, 1579, 1589, 1587, 1583, 1587, 1590, - 1591, 1588, 1593, 1594, 1594, 1590, 1592, 1595, 1597, 1591, - 1596, 1596, 1598, 1599, 1599, 1600, 1600, 1601, 1604, 1604, - 1605, 1606, 1608, 1609, 1611, 1611, 1610, 1612, 1597, 1614, - 1606, 1608, 1610, 1595, 1598, 1613, 1614, 1601, 1615, 1616, - 1617, 1617, 1618, 1619, 1609, 1605, 1621, 1615, 1612, 1622, - 1613, 1621, 1623, 1624, 1630, 1622, 1625, 1626, 1631, 1619, - 1624, 1629, 1625, 1626, 1628, 1616, 1627, 1627, 1618, 1628, - 1629, 1632, 1623, 1633, 1630, 1634, 1633, 1631, 1635, 1636, - - 1636, 1637, 1638, 1632, 1639, 1640, 1642, 1637, 1643, 1640, - 0, 1646, 1647, 1634, 1644, 1648, 1647, 1650, 1650, 1639, - 1654, 1648, 1638, 1649, 1635, 1640, 1642, 1643, 1652, 1644, - 1646, 1651, 1649, 1653, 1653, 1651, 1655, 1656, 1657, 1652, - 1658, 1654, 1659, 1657, 1652, 1660, 1661, 1662, 1663, 1663, - 1655, 1660, 1662, 1664, 1664, 1665, 1656, 1667, 1668, 1665, - 1658, 1661, 1659, 1669, 1670, 1670, 1667, 1671, 1671, 1668, - 1672, 1673, 1674, 1675, 1668, 1672, 1672, 1673, 1674, 1676, - 1677, 1678, 1680, 1669, 1676, 1681, 1682, 1678, 1683, 1681, - 1684, 1686, 1677, 1685, 1680, 1687, 1684, 1686, 1682, 1675, - - 1689, 1690, 1693, 1691, 1697, 1693, 1700, 1687, 1691, 1694, - 1694, 1700, 1689, 1683, 0, 1685, 1695, 1695, 1696, 1696, - 1690, 1698, 1699, 1701, 1697, 1702, 1704, 1698, 1699, 1701, - 1706, 1704, 1707, 1706, 1702, 1708, 1708, 1710, 1711, 1714, - 1712, 1713, 1713, 1718, 1707, 1712, 1715, 1716, 1714, 1710, - 1711, 1715, 1716, 1717, 1717, 1719, 1720, 1721, 1722, 1725, - 1723, 1724, 1722, 1718, 1719, 1723, 1728, 1724, 1727, 1727, - 1729, 1730, 1730, 1725, 1720, 1732, 1721, 1731, 1733, 1729, - 1727, 1735, 1740, 1734, 1728, 1740, 1731, 1732, 1734, 1738, - 1738, 1741, 1742, 0, 1735, 1744, 1746, 1745, 1747, 1733, - - 1748, 1748, 1746, 1749, 1754, 1749, 1751, 1741, 1742, 1753, - 1744, 1745, 1750, 1750, 1751, 1747, 1753, 1755, 1755, 1756, - 1757, 1758, 1759, 1760, 1754, 1761, 1763, 1762, 1756, 1765, - 1768, 1766, 1763, 1758, 1759, 1760, 1767, 1767, 1769, 1772, - 0, 1757, 1762, 1766, 1770, 1763, 1776, 1770, 1768, 1765, - 1771, 1761, 1774, 1780, 1775, 1771, 1775, 1774, 1769, 1772, - 1777, 1778, 1780, 1782, 1776, 1777, 1783, 1784, 1778, 1785, - 1786, 1785, 1788, 1789, 1788, 1783, 1790, 1790, 1791, 1784, - 1792, 1782, 1793, 1794, 1793, 1792, 1795, 1789, 1794, 1786, - 1796, 1795, 1797, 1798, 1800, 1799, 1803, 1801, 1866, 1798, - - 1799, 1808, 1804, 1807, 1791, 1801, 1866, 1800, 1796, 1805, - 1805, 1809, 1797, 1806, 1806, 1803, 1804, 1809, 1807, 1810, - 1811, 1808, 1811, 1812, 1810, 1813, 1813, 1817, 1814, 1815, - 1815, 1812, 1816, 1816, 1818, 1819, 1817, 1819, 1820, 1812, - 1814, 1822, 1821, 1818, 1823, 1825, 1818, 1821, 1821, 1826, - 1822, 1829, 1830, 1827, 1826, 1833, 1823, 1825, 1827, 1820, - 1831, 1832, 1832, 1834, 1829, 1836, 1835, 1853, 1837, 1831, - 1841, 1842, 1830, 1833, 1839, 1840, 1842, 1850, 1852, 1836, - 1843, 1834, 1835, 1837, 1844, 1843, 1839, 1840, 1847, 1849, - 1841, 1851, 1853, 1844, 1847, 1849, 1852, 1855, 1855, 1854, - - 1850, 1856, 1857, 1857, 1858, 1859, 1851, 1847, 1854, 1859, - 1856, 1860, 1861, 1862, 1863, 1864, 1860, 1867, 1862, 1862, - 1863, 1864, 1875, 1858, 1865, 1861, 1872, 1865, 1870, 1870, - 1871, 1871, 1873, 1873, 1875, 1872, 1876, 1867, 1874, 1874, - 1877, 1885, 1878, 1879, 1879, 1871, 1877, 1878, 1880, 1880, - 1881, 1882, 1888, 1890, 1876, 1881, 1871, 1882, 1884, 1886, - 1889, 1885, 1884, 1886, 1891, 1889, 1892, 1893, 1894, 1895, - 1895, 1892, 1897, 1899, 1896, 1898, 1890, 1888, 1896, 1891, - 1898, 1900, 1901, 1902, 1894, 1893, 1904, 1897, 1902, 1903, - 1905, 1905, 1907, 1900, 1908, 1909, 1910, 1911, 1912, 1899, - - 1907, 1901, 1903, 1913, 1904, 1915, 1914, 1917, 1918, 1918, - 1920, 1921, 1919, 1908, 1909, 1919, 1922, 1912, 1914, 1910, - 1926, 1911, 1917, 1920, 1913, 1921, 1915, 1923, 1923, 1922, - 1924, 1924, 1925, 1925, 1927, 1926, 1928, 1928, 1931, 1929, - 1930, 1930, 1934, 1931, 1933, 1935, 1936, 1927, 1929, 1933, - 1939, 1929, 1937, 1937, 1938, 1938, 1940, 1940, 1936, 1941, - 1942, 1942, 1934, 1943, 0, 1935, 1944, 1945, 1945, 1939, - 1947, 1944, 1946, 1946, 1948, 1949, 1950, 1941, 1943, 1954, - 1952, 1953, 1953, 1948, 1947, 1952, 1955, 1955, 1956, 1949, - 1957, 1958, 1959, 1959, 1958, 1950, 1957, 1961, 1954, 1960, - - 1960, 1963, 1962, 1964, 1964, 1966, 1956, 1967, 1959, 1968, - 1969, 1970, 1970, 1971, 1969, 1976, 1961, 1962, 1972, 1973, - 1963, 1975, 1975, 1978, 1968, 1966, 1979, 1980, 1980, 1977, - 1967, 1981, 1971, 1972, 1973, 1976, 1977, 1978, 1983, 1982, - 1981, 1982, 1985, 1986, 1987, 1988, 1989, 1990, 1986, 1987, - 1991, 1992, 1979, 1998, 1985, 1991, 1994, 1995, 1983, 1989, - 1996, 1994, 1995, 1997, 2002, 1999, 2003, 2000, 1990, 1997, - 1988, 1999, 2000, 2001, 1998, 1996, 2005, 1992, 2001, 2003, - 2004, 2006, 2007, 2004, 2008, 2005, 2009, 2014, 2010, 2002, - 2006, 2007, 2011, 2008, 2010, 2012, 2016, 2018, 2011, 2012, - - 2009, 2017, 2017, 2018, 2020, 2016, 2022, 2014, 2019, 2019, - 2025, 2023, 2024, 2024, 2026, 2029, 2028, 2019, 2030, 2035, - 2031, 2050, 2022, 2026, 2020, 2025, 2020, 2023, 2028, 2036, - 2034, 2029, 2031, 2030, 2033, 2034, 2078, 2033, 2078, 2035, - 2050, 2036, 2037, 2037, 2038, 2038, 2040, 2040, 2041, 2042, - 2043, 2041, 2044, 2046, 2042, 0, 2043, 2048, 2044, 2045, - 2045, 2047, 2047, 2049, 2051, 2051, 2053, 2046, 2054, 2048, - 2053, 2054, 2055, 2055, 2056, 2057, 2058, 2049, 2059, 2056, - 2060, 2060, 2059, 2063, 2057, 2061, 2064, 2065, 2063, 2066, - 2067, 2068, 2069, 2070, 2067, 2071, 2058, 2069, 2061, 2070, - - 2072, 2071, 2076, 2066, 2074, 2075, 2064, 2065, 2076, 2077, - 2075, 2068, 2081, 2082, 2082, 2084, 2083, 2077, 2072, 2083, - 2074, 2085, 2085, 2087, 2088, 2089, 2081, 2087, 2090, 2090, - 2088, 2091, 2094, 2094, 2096, 2098, 2103, 2089, 2099, 2102, - 2091, 2084, 2104, 2105, 2102, 2106, 2106, 2104, 2105, 2098, - 2108, 2108, 2096, 2110, 2099, 2111, 2111, 2112, 2113, 2110, - 2114, 2120, 2103, 2116, 2117, 2114, 2118, 2118, 2121, 2122, - 2120, 2123, 2126, 2112, 2121, 2127, 2117, 2125, 2125, 2133, - 2113, 2133, 2116, 2129, 2129, 2131, 2123, 2122, 2130, 2130, - 2131, 2126, 2132, 2127, 2134, 2135, 2136, 2132, 2137, 2138, - - 2138, 2139, 2139, 2137, 2140, 2140, 2141, 2141, 2134, 2135, - 2142, 2143, 2144, 2145, 2145, 2147, 2136, 2144, 2146, 2146, - 2148, 2149, 2142, 2150, 2151, 2151, 2152, 2147, 2156, 2143, - 2153, 2153, 2148, 2154, 2154, 2155, 2157, 2158, 2159, 2150, - 2156, 2149, 2160, 2157, 2161, 2152, 2155, 2160, 2162, 2158, - 2163, 2163, 2164, 2165, 2166, 2172, 2167, 2168, 2159, 2169, - 2175, 2164, 2170, 2170, 2161, 2173, 2171, 2176, 2162, 2167, - 2172, 2177, 2179, 2169, 2166, 2171, 2182, 2182, 2175, 2165, - 2173, 2168, 2178, 2180, 2189, 2178, 2179, 2181, 2180, 2176, - 2183, 2183, 2181, 2190, 2177, 2184, 2184, 2186, 2186, 2188, - - 2188, 2191, 2189, 2193, 2190, 2195, 2194, 2197, 2196, 2198, - 2200, 2200, 2199, 2202, 2202, 2203, 2197, 2204, 2205, 2205, - 2191, 2209, 2207, 2193, 2194, 2210, 2204, 2195, 2196, 2198, - 2199, 2207, 2208, 2208, 2211, 2212, 2213, 2203, 2214, 2209, - 2216, 2211, 2215, 2210, 2217, 2217, 2218, 2218, 2220, 2219, - 2212, 2222, 2221, 2224, 2213, 2219, 2214, 2223, 2215, 2216, - 2225, 0, 2223, 2226, 2228, 2228, 2220, 2221, 2226, 2227, - 2222, 2227, 2229, 2224, 2229, 2230, 2230, 2232, 2234, 2235, - 2225, 2236, 2237, 2238, 2239, 2247, 2240, 2234, 2238, 2243, - 2264, 2244, 2246, 2236, 2244, 2264, 2232, 2249, 2235, 2245, - - 2245, 2249, 2237, 2247, 2239, 2240, 2251, 2246, 2252, 2243, - 2248, 2248, 2252, 2253, 2253, 2254, 2256, 2257, 2258, 2258, - 2260, 2251, 2261, 2261, 2262, 2263, 2263, 2265, 2254, 2266, - 2266, 2272, 2260, 2271, 2271, 2274, 2256, 2257, 2275, 2265, - 2273, 2273, 2279, 2262, 0, 2276, 2277, 2284, 2274, 2278, - 2278, 2275, 2284, 2272, 2276, 2277, 2285, 2279, 2281, 2281, - 2286, 2285, 2287, 2288, 2289, 2291, 2290, 2287, 0, 2293, - 2296, 2288, 2294, 2291, 2286, 2290, 2295, 2294, 2297, 2297, - 2301, 2295, 2299, 2289, 2293, 2296, 2298, 2298, 2300, 2299, - 2302, 2303, 2306, 2300, 2304, 2305, 2305, 2303, 2301, 2304, - - 2307, 2308, 2308, 2309, 2309, 2307, 2312, 2306, 2302, 2313, - 2313, 2314, 2315, 0, 2314, 2316, 2317, 2315, 2315, 2312, - 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2319, 2318, 2320, - 2323, 2324, 2325, 2330, 2321, 2327, 2324, 2334, 2323, 2328, - 2327, 2322, 2328, 2332, 2325, 2330, 2333, 2335, 2332, 2336, - 2337, 2333, 2338, 2338, 2339, 2334, 2342, 2343, 2336, 2337, - 2335, 2344, 2346, 2339, 2345, 2345, 2350, 2347, 2348, 2349, - 2349, 2352, 2354, 2357, 2355, 2342, 2347, 2343, 2355, 2388, - 2344, 2346, 2388, 2348, 2358, 2350, 2352, 2356, 2356, 2359, - 2358, 2360, 2354, 2361, 2361, 2359, 2362, 2360, 2357, 2365, - - 2363, 2366, 2368, 2369, 2362, 2363, 2368, 2370, 2365, 2372, - 2372, 2373, 2373, 2380, 2366, 2374, 2374, 2369, 2376, 2376, - 2378, 2378, 2370, 2381, 2383, 2384, 2384, 2389, 2381, 2381, - 2386, 2386, 2391, 2380, 2387, 2387, 2393, 2394, 2394, 2397, - 2389, 2395, 2395, 2400, 2383, 2396, 2396, 2398, 2398, 2399, - 2391, 2401, 2402, 2404, 2397, 2408, 2393, 2404, 2402, 2403, - 2403, 2400, 2399, 2407, 2409, 2401, 2410, 2411, 2407, 2407, - 2412, 2413, 2418, 2411, 2420, 2414, 2412, 2418, 2408, 2414, - 2415, 2415, 2420, 2423, 2409, 2421, 2410, 2424, 2421, 2425, - 2424, 2427, 2426, 2428, 2430, 2430, 2413, 2426, 2429, 2431, - - 2434, 0, 2432, 2435, 2435, 2443, 2425, 2425, 2423, 2427, - 2432, 2433, 2429, 2428, 2436, 2436, 2433, 2433, 2431, 2434, - 2437, 2437, 2438, 2438, 2439, 2439, 2440, 2441, 2442, 2444, - 2445, 2443, 2441, 2446, 2448, 2448, 2449, 2450, 2444, 2449, - 2452, 2452, 2440, 2462, 2453, 2454, 2454, 2455, 2442, 2458, - 2445, 2453, 2455, 2446, 2459, 2450, 2457, 2457, 2458, 2460, - 2465, 2462, 2464, 2459, 2463, 2463, 2464, 2466, 2460, 2465, - 2467, 2468, 2469, 2474, 2474, 2467, 2467, 2475, 2477, 2478, - 2481, 2469, 2466, 2482, 2468, 2486, 2483, 2477, 2484, 2488, - 2503, 2478, 2482, 2490, 2484, 2475, 2491, 2486, 2490, 2492, - - 2492, 2491, 2493, 2495, 2502, 2481, 2483, 2510, 2495, 2503, - 2488, 2493, 2496, 2496, 2498, 2498, 2496, 2499, 2499, 2500, - 2500, 2501, 2504, 2506, 2502, 2510, 2507, 2504, 2508, 2506, - 2501, 2507, 2511, 2508, 2509, 2509, 2512, 2513, 2514, 2515, - 2518, 2512, 2516, 2516, 2514, 2519, 2520, 2522, 2522, 2524, - 2525, 2532, 2526, 2511, 2528, 2513, 2526, 2529, 2527, 2518, - 2519, 2530, 2524, 2525, 2515, 2534, 2520, 2527, 2531, 2530, - 2528, 2533, 2533, 2531, 2536, 2536, 2529, 2532, 2537, 2537, - 2539, 2541, 2541, 2543, 2534, 2546, 2544, 2545, 2548, 2548, - 2546, 2549, 2550, 2551, 2553, 2553, 2554, 2557, 2560, 2543, - - 2556, 2539, 2544, 2545, 2564, 2556, 2558, 2558, 2559, 2559, - 2554, 2549, 2551, 2561, 2561, 2550, 2562, 2563, 2560, 2557, - 2566, 2568, 2565, 2567, 2564, 2576, 2563, 2562, 2565, 2569, - 2569, 2570, 2575, 2561, 2570, 2567, 2571, 2571, 2581, 2566, - 2577, 2568, 2578, 2578, 2575, 2576, 2577, 2579, 2580, 2585, - 2579, 2591, 2583, 2584, 2580, 2586, 2581, 2583, 2584, 2587, - 2592, 2586, 2588, 2588, 2590, 2590, 2594, 2594, 2585, 2592, - 2591, 2595, 2595, 2596, 2597, 2598, 2587, 2587, 2596, 2607, - 2598, 2599, 2599, 2600, 2600, 2601, 2601, 2602, 2597, 2604, - 2604, 2609, 2602, 2610, 2611, 2612, 2612, 2615, 2607, 2614, - - 2614, 2616, 2620, 2617, 2618, 2618, 2619, 2620, 2623, 2623, - 2627, 2615, 2617, 2609, 2626, 2610, 2611, 2625, 2625, 2626, - 2628, 2616, 2629, 2630, 2627, 2619, 2628, 2631, 2631, 2634, - 2632, 2630, 2635, 2636, 2629, 2632, 2637, 2638, 2636, 2640, - 2641, 2642, 2643, 2638, 2645, 2644, 2651, 2640, 2637, 2634, - 2646, 2647, 2635, 2648, 2655, 2655, 2652, 0, 2648, 2641, - 2645, 2642, 2643, 2644, 2656, 2656, 2651, 2646, 2646, 2652, - 2657, 2670, 2647, 2677, 2657, 2661, 2661, 2663, 2663, 2664, - 2664, 2667, 2664, 2665, 2665, 2667, 2665, 2666, 2666, 2670, - 2666, 2669, 2669, 2671, 2673, 2674, 2674, 2678, 2677, 2673, - - 2680, 2679, 2681, 2683, 2678, 2679, 2684, 2671, 2688, 2680, - 2685, 2685, 2686, 2686, 2693, 2684, 2695, 2681, 2687, 2687, - 2689, 2683, 2690, 2688, 2691, 2689, 2692, 2694, 2696, 2691, - 2691, 2690, 2692, 2696, 2690, 2697, 2698, 2695, 2846, 2693, - 2697, 2700, 2694, 2699, 2699, 2846, 2700, 2703, 2703, 2706, - 2706, 2707, 2707, 2708, 2708, 2698, 2709, 2709, 2710, 2710, - 2711, 2711, 2712, 2712, 2714, 2715, 2715, 2716, 2720, 2718, - 2719, 2719, 2721, 2714, 2722, 2723, 2723, 2724, 2725, 2725, - 2728, 2729, 2730, 2720, 2729, 2721, 2722, 2716, 2718, 2731, - 2731, 2732, 2724, 2734, 2735, 2738, 2734, 2736, 2728, 2737, - - 2735, 2739, 2740, 2751, 2737, 2742, 2751, 2756, 2730, 2732, - 2760, 2736, 2753, 2753, 2738, 2754, 2754, 2757, 2740, 2739, - 2742, 2758, 2759, 2762, 2760, 2758, 2757, 2763, 2764, 2765, - 2756, 2765, 2766, 2764, 2767, 2767, 2768, 2769, 2763, 2770, - 2772, 2774, 2759, 2771, 2775, 2773, 2762, 2766, 2779, 2768, - 2780, 2780, 2778, 2874, 2781, 2874, 2769, 2770, 2786, 2771, - 2773, 2787, 2774, 2781, 2775, 2772, 2778, 2791, 2779, 2782, - 2782, 2783, 2783, 2784, 2784, 2785, 2785, 2786, 2789, 2788, - 2790, 2787, 2788, 2789, 2792, 2790, 2794, 2793, 2795, 2796, - 2796, 2797, 2791, 2793, 2798, 2798, 2800, 2802, 2807, 2792, - - 2794, 2805, 2805, 2806, 2806, 2808, 2807, 2809, 2795, 2811, - 2797, 2800, 2810, 2809, 2812, 2802, 2813, 2816, 2810, 2814, - 2814, 2819, 2818, 2811, 2808, 2819, 2821, 2812, 2822, 2823, - 2824, 2825, 2826, 2822, 2827, 2813, 2818, 2816, 2830, 2827, - 2828, 2831, 2833, 2824, 2825, 2828, 2821, 2833, 2823, 2832, - 2832, 2826, 2834, 2835, 2835, 2839, 2830, 2836, 2834, 2837, - 2831, 2838, 2836, 2840, 2837, 2841, 2838, 2842, 2842, 2840, - 2841, 2844, 2845, 2847, 2839, 2844, 2848, 2849, 2850, 2857, - 2851, 2852, 2852, 2849, 2854, 2854, 2858, 2855, 2859, 2856, - 2864, 2845, 2847, 2851, 2856, 2848, 2855, 2850, 2857, 2855, - - 2862, 2859, 2860, 2860, 2861, 2858, 2865, 2865, 2866, 2861, - 2867, 2867, 2869, 2862, 2868, 2868, 2864, 2869, 2870, 2871, - 2872, 2872, 2878, 2873, 2876, 2870, 2877, 2866, 2873, 2875, - 2875, 2876, 2879, 2877, 2880, 2882, 2882, 2879, 2871, 2883, - 2885, 2878, 2886, 2887, 2888, 2885, 2892, 2886, 2889, 2889, - 2891, 2891, 2893, 2880, 2894, 2894, 2895, 2895, 2883, 2896, - 2898, 2898, 2887, 2888, 2906, 2892, 2896, 2899, 2899, 2900, - 2902, 2893, 2905, 2907, 0, 2902, 2900, 2905, 2908, 2908, - 2909, 2909, 0, 2906, 0, 0, 0, 0, 0, 0, - 0, 0, 2907, 2913, 2913, 2913, 2913, 2913, 2913, 2913, - - 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2915, 2915, 2915, - 2915, 2915, 2915, 2915, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2919, 2919, - 0, 2919, 2919, 2919, 2919, 2920, 2920, 0, 0, 0, - 2920, 2920, 2921, 2921, 0, 0, 2921, 0, 2921, 2922, - 0, 0, 0, 0, 0, 2922, 2923, 2923, 0, 0, - 0, 2923, 2923, 2924, 0, 0, 0, 0, 0, 2924, - 2925, 2925, 0, 2925, 2925, 2925, 2925, 2926, 2926, 0, - 2926, 2926, 2926, 2926, 2912, 2912, 2912, 2912, 2912, 2912, - 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, - - 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, - 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, - 2912, 2912, 2912, 2912, 2912 + 66, 71, 72, 86, 127, 89, 72, 71, 74, 77, + 74, 74, 77, 74, 78, 88, 127, 85, 78, 74, + 74, 82, 83, 87, 82, 83, 85, 92, 93, 87, + 91, 94, 99, 88, 88, 87, 91, 87, 83, 95, + 96, 92, 94, 94, 161, 102, 99, 97, 93, 91, + 94, 97, 161, 105, 98, 106, 101, 95, 96, 98, + 100, 150, 101, 100, 102, 103, 100, 112, 104, 106, + + 103, 104, 105, 109, 107, 104, 108, 105, 107, 100, + 100, 101, 110, 108, 111, 113, 109, 112, 114, 110, + 103, 104, 114, 115, 117, 116, 119, 111, 118, 118, + 116, 122, 120, 113, 116, 121, 120, 123, 132, 125, + 124, 115, 129, 124, 117, 120, 119, 128, 128, 129, + 121, 120, 125, 130, 124, 131, 123, 122, 124, 132, + 129, 133, 134, 135, 134, 128, 136, 137, 128, 130, + 138, 136, 140, 134, 131, 135, 139, 133, 148, 137, + 157, 139, 142, 142, 144, 134, 140, 144, 138, 146, + 154, 146, 146, 154, 146, 149, 149, 151, 157, 151, + + 151, 152, 151, 152, 152, 155, 152, 158, 156, 159, + 155, 162, 163, 152, 156, 160, 164, 159, 165, 166, + 168, 164, 158, 156, 159, 167, 160, 163, 166, 169, + 162, 167, 167, 171, 169, 170, 170, 175, 165, 171, + 173, 172, 179, 172, 173, 168, 172, 174, 174, 173, + 176, 147, 177, 178, 173, 176, 175, 177, 180, 183, + 173, 173, 179, 172, 180, 178, 181, 182, 184, 185, + 181, 186, 182, 183, 187, 188, 189, 189, 191, 187, + 188, 185, 189, 184, 185, 190, 192, 180, 197, 186, + 190, 193, 194, 194, 189, 195, 189, 193, 191, 196, + + 198, 195, 192, 199, 200, 196, 198, 195, 197, 199, + 201, 206, 202, 203, 204, 205, 201, 202, 199, 203, + 204, 207, 205, 208, 206, 200, 209, 207, 210, 211, + 213, 212, 209, 214, 215, 213, 216, 211, 217, 220, + 218, 222, 214, 208, 212, 218, 218, 221, 219, 215, + 210, 221, 216, 219, 223, 224, 225, 220, 217, 226, + 223, 227, 225, 222, 229, 228, 227, 228, 230, 233, + 231, 232, 234, 224, 224, 230, 231, 232, 234, 226, + 235, 236, 242, 229, 237, 237, 238, 238, 233, 243, + 239, 240, 235, 245, 243, 236, 239, 240, 241, 244, + + 241, 246, 247, 248, 249, 242, 255, 250, 248, 246, + 251, 244, 245, 250, 239, 252, 251, 241, 253, 254, + 252, 255, 247, 253, 256, 254, 257, 249, 258, 259, + 260, 262, 266, 261, 262, 264, 264, 259, 256, 261, + 269, 263, 258, 263, 257, 265, 267, 267, 265, 270, + 266, 268, 268, 275, 271, 260, 269, 271, 272, 273, + 274, 285, 272, 276, 270, 278, 274, 275, 273, 276, + 277, 278, 277, 279, 280, 280, 281, 279, 282, 283, + 284, 281, 285, 286, 282, 287, 287, 288, 289, 290, + 288, 291, 293, 290, 279, 295, 286, 296, 284, 283, + + 292, 292, 294, 296, 298, 294, 289, 295, 297, 291, + 293, 297, 300, 301, 302, 303, 298, 305, 303, 302, + 303, 300, 294, 299, 304, 306, 307, 304, 307, 307, + 305, 301, 299, 308, 310, 299, 303, 306, 308, 308, + 299, 299, 299, 299, 309, 311, 312, 309, 313, 314, + 314, 310, 317, 315, 310, 312, 319, 313, 315, 318, + 311, 316, 316, 320, 318, 321, 322, 317, 319, 323, + 326, 324, 324, 327, 324, 323, 335, 335, 327, 329, + 328, 322, 320, 324, 329, 321, 328, 330, 331, 332, + 326, 331, 330, 331, 333, 334, 336, 333, 330, 337, + + 337, 338, 336, 332, 334, 339, 338, 343, 339, 341, + 333, 342, 373, 333, 339, 333, 344, 347, 339, 345, + 347, 348, 343, 350, 373, 351, 339, 340, 340, 341, + 340, 344, 342, 345, 351, 348, 347, 354, 350, 352, + 355, 353, 356, 340, 352, 352, 340, 353, 340, 358, + 340, 349, 357, 349, 349, 360, 359, 356, 354, 355, + 361, 357, 359, 349, 362, 349, 349, 349, 358, 363, + 349, 364, 365, 366, 367, 363, 369, 368, 362, 363, + 361, 360, 368, 372, 370, 371, 371, 374, 376, 367, + 370, 369, 365, 366, 364, 377, 375, 379, 379, 378, + + 379, 374, 375, 372, 378, 380, 381, 382, 387, 387, + 383, 377, 384, 376, 384, 385, 386, 388, 389, 385, + 386, 390, 381, 382, 383, 380, 391, 392, 145, 393, + 394, 399, 384, 389, 397, 386, 388, 390, 393, 394, + 395, 392, 396, 397, 391, 395, 396, 398, 400, 393, + 403, 393, 399, 398, 400, 401, 402, 404, 404, 401, + 405, 402, 406, 406, 407, 408, 409, 409, 410, 407, + 403, 411, 412, 405, 410, 411, 413, 414, 408, 415, + 416, 416, 414, 417, 415, 418, 419, 412, 420, 416, + 421, 423, 422, 421, 426, 417, 422, 413, 424, 424, + + 420, 425, 428, 423, 419, 418, 425, 427, 427, 430, + 430, 431, 432, 433, 434, 426, 435, 437, 438, 439, + 432, 440, 433, 442, 428, 450, 443, 440, 435, 442, + 441, 443, 431, 439, 434, 437, 444, 437, 438, 441, + 445, 446, 447, 448, 446, 450, 449, 452, 445, 453, + 444, 445, 449, 452, 451, 454, 447, 451, 448, 455, + 454, 456, 457, 453, 458, 459, 457, 460, 461, 458, + 462, 452, 460, 463, 466, 468, 469, 467, 476, 468, + 459, 455, 456, 470, 461, 473, 463, 476, 143, 462, + 464, 464, 467, 471, 466, 469, 464, 471, 464, 470, + + 473, 475, 472, 474, 464, 478, 464, 472, 474, 464, + 464, 472, 477, 480, 481, 483, 464, 475, 477, 479, + 485, 478, 479, 477, 482, 482, 484, 484, 487, 486, + 488, 489, 490, 491, 481, 485, 480, 490, 492, 493, + 483, 486, 491, 487, 494, 501, 496, 497, 499, 488, + 494, 497, 498, 489, 493, 496, 500, 492, 498, 502, + 499, 503, 504, 505, 501, 506, 507, 505, 507, 508, + 511, 500, 513, 502, 509, 509, 503, 508, 506, 510, + 504, 512, 511, 514, 513, 510, 514, 512, 515, 516, + 517, 518, 519, 520, 518, 517, 638, 522, 523, 523, + + 521, 519, 515, 529, 516, 521, 521, 638, 519, 520, + 522, 519, 524, 524, 525, 526, 526, 527, 527, 528, + 525, 532, 531, 530, 529, 528, 530, 531, 533, 534, + 535, 536, 534, 537, 538, 535, 533, 539, 538, 541, + 532, 540, 542, 539, 543, 540, 545, 542, 546, 544, + 548, 545, 537, 547, 536, 544, 547, 541, 549, 549, + 550, 547, 546, 553, 543, 547, 551, 552, 548, 554, + 556, 551, 552, 557, 563, 559, 556, 553, 550, 559, + 558, 560, 557, 558, 554, 561, 560, 562, 561, 564, + 563, 565, 562, 566, 567, 568, 569, 569, 565, 567, + + 570, 559, 571, 572, 573, 574, 566, 564, 575, 570, + 576, 695, 581, 573, 575, 568, 576, 574, 582, 572, + 577, 571, 695, 577, 578, 578, 579, 578, 580, 579, + 581, 583, 582, 580, 584, 585, 591, 583, 589, 584, + 586, 585, 587, 586, 588, 590, 592, 587, 593, 588, + 588, 589, 592, 594, 595, 591, 591, 596, 590, 595, + 597, 597, 594, 598, 601, 599, 600, 593, 599, 602, + 598, 605, 600, 603, 602, 607, 601, 596, 603, 603, + 604, 604, 606, 599, 606, 608, 609, 608, 610, 611, + 612, 613, 614, 615, 607, 617, 605, 615, 614, 616, + + 618, 619, 620, 622, 609, 621, 610, 611, 616, 612, + 617, 613, 624, 625, 623, 618, 626, 621, 622, 619, + 623, 620, 627, 628, 629, 625, 624, 628, 630, 631, + 632, 633, 634, 635, 635, 626, 636, 637, 639, 641, + 636, 627, 629, 642, 630, 141, 634, 631, 632, 632, + 633, 643, 639, 640, 644, 641, 637, 649, 640, 646, + 645, 644, 642, 647, 643, 645, 646, 648, 647, 650, + 651, 652, 648, 653, 654, 649, 650, 656, 655, 651, + 656, 658, 653, 655, 657, 652, 654, 659, 657, 660, + 662, 661, 663, 663, 666, 658, 659, 664, 664, 665, + + 665, 668, 669, 666, 660, 661, 664, 670, 669, 671, + 672, 662, 673, 671, 674, 675, 676, 678, 677, 679, + 668, 675, 672, 680, 676, 677, 714, 670, 714, 681, + 683, 689, 674, 686, 681, 678, 690, 673, 681, 691, + 689, 681, 690, 680, 679, 683, 693, 693, 681, 692, + 686, 681, 696, 692, 697, 691, 694, 694, 698, 699, + 704, 701, 709, 702, 703, 699, 701, 717, 697, 705, + 696, 717, 705, 706, 706, 708, 708, 709, 698, 700, + 700, 700, 703, 700, 702, 704, 700, 707, 710, 710, + 711, 700, 716, 712, 707, 711, 712, 700, 700, 713, + + 715, 718, 720, 719, 713, 721, 721, 725, 722, 727, + 720, 716, 715, 723, 724, 724, 726, 749, 728, 730, + 730, 718, 719, 722, 728, 725, 749, 723, 726, 729, + 731, 727, 733, 734, 729, 731, 731, 733, 735, 734, + 736, 737, 739, 738, 735, 736, 738, 737, 739, 740, + 741, 741, 742, 742, 743, 744, 745, 740, 746, 747, + 750, 745, 743, 748, 748, 746, 751, 752, 750, 756, + 754, 755, 751, 744, 756, 757, 759, 760, 747, 754, + 755, 759, 758, 761, 757, 758, 752, 762, 763, 764, + 766, 760, 765, 765, 764, 764, 762, 767, 768, 769, + + 770, 763, 772, 770, 772, 766, 774, 768, 761, 773, + 773, 770, 775, 776, 779, 777, 767, 775, 778, 780, + 781, 782, 783, 769, 784, 786, 783, 774, 785, 781, + 789, 786, 787, 788, 776, 777, 779, 790, 778, 780, + 791, 787, 784, 792, 782, 788, 791, 785, 793, 789, + 795, 790, 796, 793, 794, 794, 797, 792, 798, 799, + 800, 796, 801, 802, 804, 803, 798, 805, 806, 807, + 795, 803, 810, 805, 808, 807, 797, 813, 804, 799, + 808, 801, 800, 802, 811, 809, 818, 812, 806, 809, + 817, 810, 812, 814, 814, 815, 811, 816, 813, 818, + + 816, 815, 820, 819, 811, 821, 821, 822, 817, 819, + 823, 824, 824, 825, 826, 823, 827, 827, 826, 828, + 829, 830, 820, 831, 833, 822, 830, 836, 825, 834, + 837, 839, 839, 840, 841, 842, 842, 840, 845, 843, + 829, 828, 831, 834, 846, 70, 844, 836, 833, 841, + 844, 837, 838, 845, 847, 838, 848, 838, 846, 847, + 849, 838, 850, 838, 843, 849, 849, 851, 838, 852, + 848, 851, 853, 838, 854, 855, 850, 853, 856, 854, + 857, 865, 858, 864, 852, 859, 860, 853, 858, 855, + 866, 859, 860, 862, 857, 861, 861, 863, 862, 856, + + 865, 868, 869, 863, 870, 864, 873, 869, 866, 867, + 867, 873, 871, 868, 874, 867, 875, 867, 870, 872, + 872, 876, 874, 867, 871, 877, 878, 878, 867, 867, + 875, 881, 879, 883, 884, 867, 879, 881, 882, 885, + 876, 882, 887, 886, 877, 885, 888, 884, 886, 889, + 890, 891, 883, 892, 893, 888, 895, 891, 889, 894, + 896, 887, 892, 897, 894, 898, 890, 902, 907, 899, + 900, 905, 908, 893, 896, 901, 895, 898, 899, 900, + 903, 901, 907, 897, 902, 909, 903, 905, 910, 911, + 912, 913, 908, 914, 917, 921, 913, 918, 914, 917, + + 919, 919, 910, 920, 909, 912, 918, 911, 921, 920, + 923, 924, 928, 927, 925, 925, 924, 924, 925, 926, + 929, 930, 926, 932, 931, 933, 923, 927, 935, 932, + 934, 940, 928, 937, 930, 936, 934, 941, 929, 931, + 936, 939, 941, 935, 939, 933, 942, 937, 943, 944, + 945, 942, 940, 946, 944, 945, 948, 949, 952, 952, + 950, 951, 948, 953, 943, 946, 950, 951, 954, 956, + 956, 955, 953, 949, 955, 957, 958, 959, 960, 961, + 964, 960, 962, 963, 967, 964, 954, 969, 962, 963, + 967, 965, 961, 957, 966, 958, 965, 959, 970, 966, + + 971, 974, 972, 973, 973, 969, 971, 972, 975, 976, + 974, 977, 978, 979, 977, 978, 980, 975, 970, 981, + 982, 985, 983, 984, 979, 986, 988, 976, 983, 984, + 986, 981, 987, 987, 980, 989, 985, 991, 990, 982, + 992, 991, 993, 994, 995, 988, 997, 998, 998, 989, + 990, 993, 1000, 1001, 1003, 1002, 1005, 1005, 992, 1003, + 1006, 1004, 994, 1021, 1021, 997, 1000, 1002, 1001, 995, + 1004, 1007, 1008, 1010, 1009, 1010, 1011, 1007, 1008, 1009, + 1006, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1014, + 1019, 64, 1022, 1023, 1017, 1024, 1012, 1013, 1025, 1026, + + 1015, 1031, 1027, 1018, 1025, 1016, 1022, 1027, 1031, 1019, + 1024, 1023, 1029, 1029, 1032, 1030, 1027, 1034, 1027, 1026, + 1030, 1027, 1033, 1035, 1036, 1033, 1037, 1039, 1032, 1036, + 1040, 1038, 1035, 1042, 1042, 1034, 1038, 1043, 1039, 1044, + 1045, 1046, 1043, 1047, 1044, 1037, 1046, 1047, 1048, 1040, + 1049, 1050, 1051, 1053, 1054, 1052, 1056, 1048, 1055, 1057, + 1045, 1054, 1060, 1058, 1061, 1049, 1050, 1052, 1053, 1062, + 1055, 1051, 1059, 1063, 1066, 1056, 1068, 1060, 1059, 1065, + 1057, 1058, 1063, 1067, 1061, 1065, 1070, 1069, 1066, 1062, + 1072, 1067, 1069, 1073, 1071, 1074, 1068, 1078, 1070, 1071, + + 1071, 1075, 1075, 1077, 59, 1079, 1078, 1073, 1074, 1072, + 1076, 1079, 1080, 1080, 1083, 1076, 1077, 1081, 1076, 1076, + 1083, 1082, 1081, 1076, 1086, 1086, 1084, 1085, 1087, 1076, + 1082, 1084, 1085, 1076, 1088, 1088, 1089, 1090, 1091, 1089, + 1093, 1089, 1092, 1094, 1095, 1096, 1097, 1098, 1094, 1087, + 1099, 1092, 1097, 1098, 1108, 1099, 1091, 1090, 1095, 1101, + 1093, 1100, 1103, 1096, 1103, 1100, 1102, 1102, 1101, 1104, + 1106, 1107, 1108, 1101, 1106, 1101, 1109, 1101, 1110, 1101, + 1104, 1111, 1112, 1110, 1110, 1109, 1107, 1112, 1113, 1114, + 1115, 1116, 1117, 1118, 1119, 1119, 1120, 1121, 1114, 1118, + + 1122, 1123, 1113, 1111, 1120, 1122, 1117, 1124, 1125, 1115, + 1116, 1121, 1126, 1127, 1129, 1123, 1124, 1135, 1127, 1128, + 1128, 1130, 1130, 1131, 1133, 1131, 1125, 1133, 1134, 1129, + 1136, 1137, 1137, 1134, 1138, 1142, 1135, 1126, 1143, 1136, + 1139, 1139, 1140, 1140, 1141, 1144, 1144, 1145, 1146, 1141, + 1147, 1146, 1148, 1149, 1138, 1151, 1142, 1148, 1150, 1143, + 1150, 1153, 1149, 1154, 1153, 1162, 1155, 1145, 1157, 1156, + 1147, 1155, 1158, 1151, 1156, 1159, 1157, 1158, 1154, 1161, + 1159, 1160, 1160, 1162, 1161, 1163, 1164, 1165, 1167, 1168, + 1170, 1163, 1169, 1164, 1167, 1168, 1170, 1169, 1171, 1172, + + 1165, 1173, 1174, 1174, 1175, 1177, 1178, 1171, 1179, 1180, + 1181, 1183, 1173, 1184, 1179, 1180, 1181, 1183, 1172, 1185, + 1186, 1187, 1188, 1190, 1175, 1177, 1191, 1184, 1192, 1178, + 1189, 1189, 1186, 1184, 1195, 1187, 1193, 1194, 1194, 1185, + 1188, 1193, 1196, 1190, 1198, 54, 1192, 1196, 1199, 1200, + 1201, 1191, 1202, 1199, 1199, 1203, 1204, 1195, 1205, 1201, + 1202, 1212, 1207, 1198, 1207, 1208, 1209, 1200, 1213, 1203, + 1206, 1204, 1209, 1205, 1211, 1206, 1205, 1210, 1206, 1208, + 1212, 1210, 1214, 1215, 1216, 1211, 1217, 1218, 1215, 1220, + 1221, 1217, 1222, 1224, 1213, 1223, 1223, 1224, 1225, 1226, + + 1214, 1228, 1216, 1220, 1229, 1227, 1230, 1218, 1221, 1231, + 1222, 1227, 1232, 1228, 1233, 1242, 1225, 1234, 1226, 1235, + 1230, 1237, 1234, 1229, 1231, 1236, 1235, 1232, 1238, 1240, + 1236, 1239, 1239, 1233, 1241, 1244, 1242, 1238, 1243, 1237, + 1241, 1244, 1245, 1243, 1240, 1246, 1246, 1251, 1245, 1247, + 1247, 1249, 1249, 1250, 1252, 1253, 1251, 1250, 1254, 1255, + 1256, 1256, 1257, 1258, 1260, 1259, 1255, 1261, 1266, 1253, + 1259, 1258, 1252, 1254, 1262, 1264, 1265, 1265, 1260, 1262, + 1262, 1267, 1257, 1263, 1268, 1269, 1261, 1266, 1263, 1263, + 1269, 1270, 1271, 1268, 1274, 1264, 1272, 1273, 1275, 1274, + + 1267, 1276, 1277, 1273, 1280, 1278, 1281, 1276, 1282, 1279, + 1270, 1278, 1271, 1283, 1272, 1279, 1284, 1285, 1286, 1287, + 1287, 1277, 1289, 1280, 1275, 1281, 1288, 1282, 1293, 1288, + 1284, 1294, 1283, 1286, 1289, 1290, 1290, 1291, 1285, 1292, + 1294, 1293, 1291, 1292, 1295, 1296, 1299, 1296, 1298, 1300, + 1301, 1296, 1305, 1298, 1302, 1302, 1304, 1295, 1303, 1306, + 1307, 1299, 1304, 1303, 1296, 1307, 1301, 1305, 1310, 1300, + 1308, 1309, 1306, 1311, 1308, 1309, 1312, 1313, 1314, 1314, + 1316, 1318, 1319, 1313, 1320, 1320, 1321, 1319, 1310, 1322, + 1328, 1311, 1321, 1324, 1324, 1329, 1312, 1326, 1316, 1332, + + 1326, 1333, 1318, 1327, 1327, 1331, 1328, 1335, 1331, 1322, + 1333, 1329, 1334, 1334, 1336, 1337, 1338, 1339, 1341, 1332, + 1343, 1338, 1335, 1340, 1340, 1342, 1344, 1344, 1345, 1346, + 1353, 1339, 1347, 1348, 1337, 1336, 1341, 1347, 1349, 1349, + 1342, 1351, 1345, 1352, 1352, 1343, 1350, 1346, 1348, 1354, + 1350, 1355, 1353, 1356, 1357, 1355, 1359, 1359, 1360, 1357, + 1354, 1351, 1362, 1361, 1363, 1364, 1365, 1365, 1366, 1367, + 1369, 1368, 1356, 1366, 1371, 1370, 1360, 1361, 1363, 1369, + 1370, 1362, 1362, 1372, 1375, 1372, 1378, 1373, 1380, 1367, + 1364, 1368, 1373, 1374, 1371, 1376, 1379, 1379, 1383, 1374, + + 1378, 1376, 1381, 1383, 1375, 1384, 1387, 1380, 1381, 1385, + 1385, 1386, 1386, 1388, 1390, 1389, 1392, 1390, 1391, 1391, + 1387, 1393, 1399, 1400, 1403, 1403, 1400, 1395, 1392, 1384, + 1389, 1388, 1394, 1395, 1396, 1394, 1397, 1398, 1394, 1396, + 1401, 1393, 1398, 1402, 1407, 1397, 1401, 1399, 1402, 1405, + 1394, 1404, 1404, 1406, 1408, 1405, 1409, 1407, 1406, 1410, + 1411, 1412, 1413, 1411, 1414, 1415, 1416, 1412, 1413, 1414, + 1420, 1415, 1408, 1417, 1421, 1409, 1418, 1418, 1417, 1410, + 1419, 1422, 1423, 1424, 1427, 1419, 1425, 1426, 1420, 1416, + 1427, 1428, 1429, 1430, 1421, 1431, 1423, 1424, 1425, 1434, + + 1426, 1422, 1433, 1433, 1435, 1436, 1436, 1430, 1437, 1435, + 1438, 1428, 1429, 1439, 1440, 1442, 1431, 1441, 1443, 1434, + 1445, 1449, 1444, 1437, 1438, 1443, 1441, 1447, 1451, 1451, + 1442, 1444, 1440, 1453, 1444, 1450, 1445, 1439, 1450, 1452, + 1452, 1454, 1447, 1456, 1456, 1453, 1449, 1447, 1455, 1457, + 1458, 1455, 1459, 1460, 1461, 1462, 1463, 1459, 1460, 1454, + 1464, 1466, 1457, 1465, 1469, 1463, 1468, 1468, 1467, 1458, + 1466, 1462, 1465, 1461, 1467, 1465, 1470, 1471, 1472, 1464, + 1473, 1474, 1476, 1477, 1469, 1478, 1478, 1479, 1480, 1470, + 1482, 1482, 1472, 1474, 1481, 1471, 1473, 1480, 1484, 1481, + + 1483, 1477, 1485, 1479, 1486, 1482, 1489, 1476, 1487, 1483, + 1490, 1491, 1483, 1487, 1487, 1493, 1484, 1494, 53, 1492, + 1489, 1493, 1486, 1485, 1492, 1490, 1495, 1495, 1496, 1501, + 1502, 1497, 1498, 1491, 1496, 1494, 1497, 1499, 1498, 1503, + 1504, 1510, 1506, 1499, 1502, 1503, 1508, 1505, 1506, 1501, + 1505, 1511, 1513, 1504, 1508, 1512, 1505, 1522, 1514, 1515, + 1510, 1513, 1516, 1512, 1517, 1518, 1518, 1519, 1520, 1521, + 1511, 1514, 1515, 1519, 1520, 1523, 1516, 1522, 1517, 1524, + 1526, 1525, 1521, 1527, 1528, 1529, 1526, 1518, 1531, 1531, + 1532, 1533, 1534, 1523, 1525, 1533, 1535, 1534, 1524, 1536, + + 1528, 1535, 1537, 1529, 1536, 1527, 1538, 1540, 1541, 1541, + 1532, 1537, 1542, 1543, 1544, 1545, 1545, 1547, 1546, 1554, + 1550, 1551, 1540, 1548, 1547, 1543, 1549, 1561, 1552, 1538, + 1553, 1542, 1546, 1544, 1552, 1548, 1561, 1554, 1549, 1550, + 1555, 1551, 1553, 1556, 1556, 1557, 1555, 1560, 1557, 1558, + 1558, 1562, 1560, 1563, 1563, 1564, 1565, 1562, 1565, 1566, + 1567, 1568, 1566, 1569, 1570, 1571, 1572, 1564, 1575, 1576, + 1571, 1574, 1573, 1575, 1577, 1572, 1581, 1578, 1576, 1580, + 1567, 1569, 1570, 1568, 1573, 1580, 1574, 1579, 1579, 1582, + 1583, 1576, 1578, 1584, 1577, 1586, 1585, 1581, 1585, 1587, + + 1587, 1588, 1588, 1589, 1589, 1590, 1583, 1593, 1582, 1586, + 1594, 1586, 1601, 1584, 1591, 1591, 1592, 1592, 1595, 1595, + 1596, 1597, 1603, 1598, 1596, 1590, 1598, 1597, 1593, 1600, + 1601, 1594, 1602, 1604, 1609, 1600, 1604, 1607, 1602, 1605, + 1605, 1606, 1606, 1607, 1608, 1610, 1611, 1603, 1612, 1616, + 1615, 1616, 1611, 1621, 1609, 1614, 1608, 1608, 1608, 1617, + 1614, 1614, 1618, 1608, 1615, 1610, 1619, 1620, 1612, 1622, + 1617, 1624, 1619, 1621, 1623, 1623, 1620, 1618, 1625, 1625, + 1626, 1627, 1628, 1628, 1629, 1629, 1630, 1633, 1633, 1634, + 1622, 1638, 1635, 1637, 1640, 1640, 1641, 1624, 1639, 1645, + + 1626, 1635, 1637, 1627, 1639, 1642, 1630, 1644, 1643, 1646, + 1646, 1647, 1638, 1648, 1634, 1643, 1644, 1641, 1650, 1652, + 1642, 1651, 1654, 1650, 1653, 1645, 1655, 1651, 1654, 1648, + 1657, 1653, 1655, 1656, 1656, 1657, 1658, 1647, 1659, 1652, + 1660, 1661, 1663, 1662, 1664, 1658, 1662, 1665, 1665, 1666, + 1668, 1667, 1669, 1661, 1671, 1666, 1669, 1672, 1659, 1660, + 1663, 1673, 1674, 1674, 1675, 1668, 1673, 1676, 1678, 1679, + 1664, 1667, 1669, 1679, 1671, 1680, 1681, 1682, 1682, 1672, + 1683, 1680, 1676, 1675, 1683, 1681, 1684, 1678, 1685, 1685, + 1686, 1687, 1692, 1688, 1689, 1690, 1691, 1684, 1692, 1689, + + 1697, 1694, 1684, 1693, 1697, 1687, 1694, 1695, 1695, 1696, + 1696, 1686, 1688, 1699, 1700, 1690, 1691, 1701, 1693, 1702, + 1702, 1704, 1699, 1703, 1703, 1700, 1704, 1704, 1705, 1706, + 1700, 1707, 1709, 1708, 1705, 1706, 1710, 1701, 1708, 1712, + 1714, 1713, 1710, 1715, 1709, 1713, 1719, 1716, 1717, 1718, + 1721, 1712, 1714, 1716, 1722, 1718, 1723, 1707, 1719, 1729, + 1725, 1723, 1721, 1725, 1726, 1726, 1727, 1727, 1715, 1730, + 1717, 1728, 1728, 1722, 1731, 1730, 1732, 1733, 1734, 1729, + 1731, 1732, 1738, 1733, 1736, 1738, 1739, 1734, 1742, 1736, + 1740, 1740, 1743, 1746, 1744, 1745, 1745, 1750, 1739, 1744, + + 1742, 1747, 1746, 1748, 1743, 1751, 1747, 1752, 1748, 1749, + 1749, 1753, 1754, 1755, 1751, 1756, 1754, 1750, 1755, 1757, + 1760, 1756, 1759, 1759, 1764, 1752, 1761, 1762, 1762, 1765, + 1753, 1763, 1766, 1757, 1759, 1761, 1764, 1766, 1760, 1767, + 1763, 1770, 1770, 1772, 1773, 1774, 1772, 1776, 1778, 1777, + 1765, 1779, 1767, 1786, 1778, 1780, 1780, 1781, 1783, 1781, + 1773, 1774, 1776, 1777, 1782, 1782, 1783, 1785, 1779, 1787, + 1787, 1788, 1789, 1786, 1785, 1790, 1791, 1792, 1793, 1794, + 1788, 1797, 1800, 1798, 1795, 1799, 1799, 1790, 1791, 1792, + 1795, 1801, 1803, 1789, 1794, 1798, 1802, 1803, 1804, 1802, + + 1800, 1797, 1806, 1795, 1793, 1808, 1807, 1806, 1807, 1809, + 1810, 1801, 1812, 1814, 1809, 1815, 1816, 1810, 1804, 1818, + 1817, 1812, 1817, 1808, 1815, 1820, 1821, 1820, 1816, 1822, + 1822, 1814, 1823, 1825, 1824, 1825, 1826, 1827, 1818, 1824, + 1821, 1826, 1827, 1828, 1829, 1830, 1832, 1831, 1833, 1835, + 1839, 1830, 1831, 1836, 1837, 1837, 1833, 1840, 1823, 1832, + 1841, 1828, 1838, 1838, 1829, 1839, 1841, 1836, 1835, 1842, + 1843, 1844, 1843, 1846, 1842, 1845, 1845, 1840, 1851, 1844, + 1847, 1847, 1848, 1848, 1849, 1846, 1850, 1844, 1853, 1855, + 1854, 1850, 1854, 1849, 1858, 1860, 1851, 1853, 1856, 1857, + + 1853, 1865, 1864, 1856, 1856, 1868, 1858, 1860, 1857, 1861, + 1855, 1862, 1869, 1866, 1861, 1864, 1862, 1867, 1867, 1870, + 1871, 1865, 1866, 1868, 1872, 1874, 1875, 1876, 1877, 1885, + 1869, 1878, 1879, 1877, 1871, 1870, 1878, 1874, 1875, 1872, + 1882, 1879, 1884, 1886, 1887, 1888, 1882, 1876, 1884, 1890, + 1890, 1889, 1885, 1893, 1891, 1892, 1892, 1894, 1886, 1882, + 1889, 1894, 1887, 1891, 1895, 1896, 1902, 48, 1897, 1895, + 1888, 1898, 1893, 1897, 1897, 1899, 1900, 1898, 1896, 1900, + 1901, 1899, 1905, 1905, 1906, 1906, 1902, 1907, 1901, 1908, + 1908, 1909, 1909, 1910, 1911, 1912, 1907, 1913, 1923, 1906, + + 1920, 1912, 1913, 1914, 1914, 1910, 1915, 1915, 1916, 1917, + 1906, 1924, 1911, 1916, 1919, 1917, 1924, 1921, 1919, 1925, + 1920, 1921, 1926, 1923, 1927, 1928, 1930, 1930, 1929, 1927, + 1931, 1932, 1934, 1933, 1931, 1935, 1936, 1926, 1933, 1938, + 1937, 1939, 1925, 1928, 1929, 1937, 1932, 1935, 1940, 1940, + 1943, 1944, 1938, 1942, 1945, 1936, 1946, 1947, 1934, 1939, + 1948, 1942, 1949, 1950, 1952, 1953, 1953, 43, 1954, 1943, + 1944, 1954, 1955, 1956, 1949, 1957, 1947, 1945, 1961, 1952, + 1946, 1948, 1958, 1958, 1950, 1955, 1962, 1956, 1957, 1959, + 1959, 1960, 1960, 1961, 1963, 1963, 1964, 1965, 1965, 1962, + + 1969, 1966, 1968, 1970, 1971, 1964, 1966, 1968, 1964, 1972, + 1972, 1973, 1973, 1974, 1975, 1975, 1971, 1976, 1977, 1977, + 1969, 1978, 1979, 1970, 1980, 1980, 1982, 1979, 1981, 1981, + 1983, 1984, 1974, 1985, 1989, 1976, 1978, 1987, 1991, 1983, + 1982, 14, 1987, 1988, 1988, 1984, 1990, 1990, 1992, 1994, + 1994, 1996, 1985, 1989, 1992, 1993, 1991, 1997, 1993, 1995, + 1995, 1998, 1999, 1999, 2001, 1994, 2002, 2003, 2006, 2004, + 1996, 2007, 1997, 2004, 2005, 2005, 2008, 2010, 2010, 2011, + 1998, 2012, 2003, 2013, 2001, 2014, 2007, 2006, 2012, 2002, + 2015, 2008, 2016, 2017, 2017, 2018, 2019, 2013, 2019, 2011, + + 2020, 2022, 2023, 2014, 2018, 2024, 2025, 2023, 2015, 2026, + 2024, 2027, 2028, 2022, 2029, 2033, 2031, 2028, 2016, 2032, + 2020, 2031, 2026, 2034, 2032, 2035, 2039, 2036, 2042, 2034, + 2033, 2025, 2027, 2036, 2037, 2040, 2038, 2042, 2043, 2037, + 2029, 2038, 2041, 2044, 2045, 2041, 2035, 2043, 2040, 2046, + 2047, 2039, 2044, 2045, 2048, 2049, 2047, 2051, 2053, 2049, + 2048, 2054, 2054, 2046, 2055, 2056, 2056, 2053, 2057, 2059, + 2055, 2060, 2061, 2061, 2056, 2063, 2062, 2051, 2066, 2070, + 2065, 2067, 2070, 2068, 2063, 2059, 2072, 2060, 2057, 2073, + 2057, 2062, 2065, 2071, 2066, 2068, 2067, 13, 2071, 2074, + + 2074, 2073, 2075, 2075, 2077, 2077, 2072, 2078, 2079, 2080, + 2078, 2081, 2083, 2079, 2087, 2080, 2085, 2081, 2082, 2082, + 2084, 2084, 2086, 2088, 2088, 2090, 2083, 2091, 2085, 2090, + 2091, 2092, 2092, 2087, 2093, 2094, 2086, 2095, 2096, 2093, + 2097, 2097, 2096, 2098, 2094, 2100, 2101, 2102, 2103, 2104, + 2100, 2105, 2107, 2104, 2106, 2108, 2098, 2095, 2107, 2106, + 2109, 2108, 2103, 2111, 2112, 2114, 2101, 2102, 2113, 2112, + 2115, 2105, 2115, 2114, 2113, 2118, 2119, 2119, 2109, 2111, + 2120, 2121, 2124, 2120, 2122, 2122, 2124, 2125, 2126, 2118, + 2127, 2127, 2128, 2125, 2131, 2131, 2133, 2135, 2139, 2136, + + 2126, 2128, 2140, 2139, 2141, 2142, 2149, 2121, 2150, 2141, + 2142, 2135, 2143, 2143, 2133, 2136, 2145, 2145, 2147, 2148, + 2148, 2151, 2149, 2153, 2147, 2154, 2151, 2157, 2140, 2158, + 2150, 2155, 2155, 2159, 2160, 2158, 2157, 2154, 2162, 2162, + 2163, 2173, 2153, 2164, 2166, 2166, 2167, 2167, 2168, 2160, + 2169, 2159, 2171, 2168, 2170, 2173, 2172, 2171, 2172, 2163, + 2174, 2164, 2175, 2170, 2176, 2177, 2177, 2181, 2169, 2176, + 2178, 2178, 2179, 2179, 2174, 2180, 2180, 2182, 2183, 2181, + 2184, 2184, 2175, 2183, 2185, 2185, 2186, 2187, 2188, 2189, + 2190, 2190, 2191, 2192, 2192, 2182, 2193, 2193, 2186, 2187, + + 2196, 2194, 2195, 2197, 2198, 2189, 2200, 2196, 2188, 2201, + 2203, 2191, 2194, 2199, 2195, 2197, 2202, 2202, 2199, 2203, + 2204, 2205, 2206, 2207, 2198, 2208, 2200, 2209, 2209, 2201, + 2211, 2210, 2214, 2212, 2215, 2206, 2216, 2218, 2219, 2208, + 2210, 2205, 2266, 2219, 2266, 2211, 2204, 2207, 2212, 2217, + 2214, 2218, 2217, 2220, 2221, 2221, 2215, 2228, 2220, 2216, + 2222, 2222, 2223, 2223, 2225, 2225, 2227, 2227, 2229, 2230, + 2232, 2233, 2234, 2235, 2236, 2228, 2237, 2238, 2242, 2229, + 2239, 2239, 2243, 2236, 2241, 2241, 2244, 2244, 2230, 2233, + 2232, 2243, 2246, 2235, 2234, 2238, 2237, 2247, 2247, 2248, + + 2242, 2246, 2249, 2250, 2251, 2252, 2253, 2255, 2261, 2254, + 2250, 2256, 2256, 2257, 2257, 2258, 2259, 2248, 2260, 2251, + 2249, 2258, 2263, 2252, 2253, 2254, 2255, 2261, 2264, 0, + 2262, 2265, 2271, 2260, 2259, 2262, 2265, 2267, 2267, 2268, + 2273, 2268, 2263, 2269, 2269, 2274, 2275, 2276, 2264, 2273, + 2277, 2271, 2278, 2285, 2279, 2277, 2282, 2283, 2275, 2286, + 2283, 2284, 2284, 2290, 2274, 2287, 2287, 2276, 2285, 2293, + 2288, 2291, 2278, 2279, 2288, 2291, 2282, 2286, 2290, 2292, + 2292, 2295, 2293, 2296, 2297, 2297, 2299, 2300, 2301, 2302, + 2302, 2303, 2301, 2304, 2304, 2305, 2300, 2306, 2299, 2313, + + 2305, 2295, 2315, 2296, 2307, 2307, 2312, 2312, 2317, 2306, + 2303, 2314, 2314, 2316, 2318, 2315, 2320, 2317, 2319, 2319, + 2327, 2313, 2325, 2318, 2322, 2322, 2316, 2325, 2326, 2329, + 2328, 2320, 2330, 2326, 2327, 2328, 2331, 2329, 2332, 2334, + 2337, 2342, 2335, 2336, 0, 2331, 2332, 2335, 2336, 2338, + 2338, 2330, 2339, 2339, 2334, 2337, 2340, 2341, 2343, 2342, + 2344, 2604, 2341, 2340, 2345, 2347, 2344, 2346, 2346, 2345, + 2348, 2349, 2349, 2350, 2350, 2348, 2343, 2353, 2354, 2354, + 2347, 2355, 2356, 2604, 2355, 0, 2357, 2356, 2356, 2358, + 2353, 2357, 2359, 2360, 2358, 2361, 2362, 2360, 2359, 2363, + + 2361, 2364, 2365, 2366, 2371, 2362, 2368, 2365, 2375, 2364, + 2369, 2368, 2373, 2369, 2363, 2366, 2371, 2373, 2374, 2376, + 2377, 2378, 2380, 2374, 2379, 2379, 2375, 2383, 2384, 2377, + 2378, 2380, 2376, 2385, 2386, 2386, 2387, 2391, 2388, 2389, + 2390, 2390, 2393, 2395, 2398, 2396, 2383, 2388, 2384, 2396, + 2397, 2397, 2385, 2399, 2389, 2387, 2391, 2393, 2400, 2399, + 2401, 2402, 2402, 2395, 2400, 2403, 2401, 2404, 2406, 2398, + 2407, 2409, 2404, 2403, 2410, 2409, 2411, 2406, 2413, 2413, + 2414, 2414, 2423, 2407, 2415, 2415, 2417, 2417, 2410, 2418, + 2419, 2411, 2426, 2418, 2424, 2419, 2421, 2421, 2431, 2424, + + 2424, 2431, 2423, 2427, 2427, 2429, 2429, 2430, 2430, 2432, + 2434, 2436, 2426, 2437, 2437, 2438, 2438, 2439, 2439, 2440, + 2441, 2441, 2432, 2442, 2443, 2444, 2445, 2451, 2434, 2446, + 2446, 2436, 2445, 2447, 2440, 2450, 2442, 2447, 2452, 2444, + 2450, 2450, 2443, 2453, 2456, 2454, 2455, 2458, 2458, 2457, + 2451, 2454, 2455, 2457, 2461, 2466, 2463, 2464, 2452, 2461, + 2464, 2468, 2467, 2453, 2463, 2467, 2469, 2470, 2471, 2456, + 2472, 2469, 2473, 2473, 2474, 2475, 2476, 2477, 2468, 2468, + 2466, 2476, 2476, 2475, 2472, 2470, 2478, 2478, 2471, 2479, + 2479, 2480, 2480, 2474, 2481, 2481, 2477, 2482, 2482, 2483, + + 2484, 2485, 2486, 2487, 2488, 2484, 2489, 2491, 2491, 2493, + 2492, 2496, 2487, 2492, 0, 2483, 2495, 2495, 2496, 2497, + 2497, 2485, 2500, 2500, 2488, 2498, 2489, 2493, 2486, 2501, + 2498, 2502, 2503, 2505, 2506, 2506, 2508, 2509, 2501, 2507, + 2502, 2503, 2510, 2507, 2511, 2508, 2512, 2510, 2510, 2516, + 2520, 2505, 2509, 2522, 2516, 2512, 2526, 2511, 2517, 2517, + 2519, 2519, 2522, 2523, 2527, 2528, 2529, 2531, 2520, 2533, + 2571, 2535, 2529, 2527, 2571, 2523, 2535, 2536, 2538, 2531, + 2547, 2526, 2536, 2537, 2537, 2528, 2540, 2538, 2541, 2541, + 2533, 2540, 2541, 2543, 2543, 2544, 2544, 2545, 2545, 2546, + + 2547, 2548, 2549, 2551, 2555, 2552, 2553, 2549, 2546, 2551, + 2552, 2553, 2554, 2554, 2556, 2558, 2557, 2559, 2560, 2563, + 2548, 2557, 2555, 2559, 2561, 2561, 2564, 2565, 2567, 2567, + 2572, 2569, 2570, 2558, 2573, 2556, 2574, 2576, 2563, 2572, + 2575, 2564, 2576, 2560, 2569, 2570, 2577, 2565, 2575, 2579, + 2573, 2578, 2578, 2581, 2581, 2574, 2582, 2582, 2584, 2586, + 2586, 2588, 2589, 2594, 2590, 2591, 2593, 2593, 2579, 2595, + 2591, 2596, 2577, 2598, 2598, 2599, 2607, 2588, 2589, 2584, + 2590, 2600, 2600, 2594, 2605, 2605, 2603, 2606, 2606, 2599, + 2596, 2603, 2595, 2608, 2608, 2609, 2607, 2611, 2610, 2612, + + 2613, 2615, 2614, 2616, 2616, 2612, 2609, 2610, 2617, 2618, + 2618, 2617, 2622, 2608, 2614, 2623, 2624, 2611, 2628, 2613, + 2626, 2615, 2624, 2626, 2622, 2625, 2625, 2627, 2632, 2630, + 2693, 2634, 2631, 2627, 2630, 2623, 2628, 2631, 2633, 2635, + 2635, 2637, 2637, 2638, 2633, 2639, 2693, 2632, 2634, 2634, + 2641, 2641, 2642, 2642, 2639, 2643, 2644, 2656, 2645, 2654, + 2643, 2657, 2638, 2645, 2646, 2646, 2647, 2647, 2648, 2648, + 2644, 2649, 2651, 2651, 2658, 2662, 2649, 2663, 2654, 2656, + 2659, 2659, 2664, 2657, 2661, 2661, 2665, 2665, 2667, 2662, + 2668, 2664, 2671, 2671, 2675, 2668, 2658, 2663, 2673, 2673, + + 2674, 2677, 2678, 2676, 2682, 2674, 2683, 2667, 2675, 2676, + 2678, 2679, 2679, 2677, 2680, 2684, 2685, 2686, 2689, 2680, + 2684, 2688, 2690, 2686, 2682, 2691, 2683, 2699, 2685, 2688, + 2692, 2695, 2694, 2696, 2703, 2703, 2718, 2689, 2696, 0, + 2700, 2721, 2690, 2704, 2704, 2691, 2721, 2699, 2692, 2694, + 2694, 2705, 2695, 2700, 2718, 2705, 2709, 2709, 2711, 2711, + 2712, 2712, 2715, 2712, 2713, 2713, 2715, 2713, 2714, 2714, + 2719, 2714, 2717, 2717, 2722, 2722, 2725, 2727, 2726, 2728, + 2729, 2727, 2731, 2732, 2719, 2726, 2733, 2733, 2728, 2734, + 2734, 2736, 2732, 2735, 2735, 2729, 2738, 2737, 2739, 2741, + + 2731, 2725, 2737, 2739, 2739, 2738, 2736, 2740, 2738, 2743, + 2742, 2744, 2745, 2740, 2746, 2748, 2744, 2745, 2747, 2747, + 2748, 2751, 2751, 0, 2741, 2742, 2754, 2754, 2755, 2755, + 2743, 2756, 2756, 2746, 2757, 2757, 2758, 2758, 2759, 2759, + 2760, 2760, 2762, 2763, 2763, 2764, 2768, 2766, 2767, 2767, + 2769, 2762, 2770, 2771, 2771, 2772, 2773, 2773, 2776, 2777, + 2778, 2768, 2777, 2769, 2770, 2764, 2766, 2779, 2779, 2780, + 2772, 2782, 2783, 2786, 2782, 2784, 2776, 2785, 2783, 2787, + 2788, 2799, 2785, 2790, 2799, 2804, 2778, 2780, 2808, 2784, + 2801, 2801, 2786, 2802, 2802, 2805, 2788, 2787, 2790, 2806, + + 2807, 2810, 2808, 2806, 2805, 2811, 2812, 2813, 2804, 2813, + 2814, 2812, 2815, 2815, 2816, 2817, 2811, 2818, 2820, 2822, + 2807, 2819, 2823, 2821, 2810, 2814, 2827, 2816, 2828, 2828, + 2826, 2922, 2829, 2922, 2817, 2818, 2834, 2819, 2821, 2835, + 2822, 2829, 2823, 2820, 2826, 2839, 2827, 2830, 2830, 2831, + 2831, 2832, 2832, 2833, 2833, 2834, 2837, 2836, 2838, 2835, + 2836, 2837, 2840, 2838, 2842, 2841, 2843, 2844, 2844, 2845, + 2839, 2841, 2846, 2846, 2848, 2850, 2855, 2840, 2842, 2853, + 2853, 2854, 2854, 2856, 2855, 2857, 2843, 2859, 2845, 2848, + 2858, 2857, 2860, 2850, 2861, 2864, 2858, 2862, 2862, 2867, + + 2866, 2859, 2856, 2867, 2869, 2860, 2870, 2871, 2872, 2873, + 2874, 2870, 2875, 2861, 2866, 2864, 2878, 2875, 2876, 2879, + 2881, 2872, 2873, 2876, 2869, 2881, 2871, 2880, 2880, 2874, + 2882, 2883, 2883, 2887, 2878, 2884, 2882, 2885, 2879, 2886, + 2884, 2888, 2885, 2889, 2886, 2890, 2890, 2888, 2889, 2892, + 2893, 2894, 2887, 2892, 2895, 2896, 2897, 2898, 2894, 2899, + 2900, 2900, 2897, 2902, 2902, 2904, 2903, 2905, 2906, 2893, + 2904, 2907, 2899, 2895, 2896, 2903, 2898, 2909, 2903, 2908, + 2908, 2910, 2909, 2912, 2907, 2914, 2905, 2906, 2913, 2913, + 2915, 2915, 2916, 2916, 2910, 2917, 2918, 2919, 2920, 2920, + + 2917, 2921, 2926, 2918, 2914, 2924, 2921, 2923, 2923, 2912, + 2925, 2928, 2924, 2927, 2930, 2930, 2919, 2925, 2927, 2931, + 2933, 2926, 2934, 2935, 2936, 2933, 2940, 2934, 2937, 2937, + 2928, 2939, 2939, 2941, 2942, 2942, 2943, 2943, 2931, 2944, + 2946, 2946, 2935, 2936, 2948, 2940, 2944, 2947, 2947, 2950, + 2953, 2948, 2941, 2954, 2950, 2953, 2955, 2956, 2956, 2957, + 2957, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2954, 0, 0, 2955, 2961, 2961, 2961, 2961, + 2961, 2961, 2961, 2962, 2962, 2962, 2962, 2962, 2962, 2962, + 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2964, 2964, 2964, + + 2964, 2964, 2964, 2964, 2965, 2965, 2965, 2965, 2965, 2965, + 2965, 2967, 2967, 0, 2967, 2967, 2967, 2967, 2968, 2968, + 0, 0, 0, 2968, 2968, 2969, 2969, 0, 0, 2969, + 0, 2969, 2970, 0, 0, 0, 0, 0, 2970, 2971, + 2971, 0, 0, 0, 2971, 2971, 2972, 0, 0, 0, + 0, 0, 2972, 2973, 2973, 0, 2973, 2973, 2973, 2973, + 2974, 2974, 0, 2974, 2974, 2974, 2974, 2960, 2960, 2960, + 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, + 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, + 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, + + 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960 } ; static yy_state_type yy_last_accepting_state; @@ -2844,7 +2876,7 @@ static void config_end_include(void) } #endif -#line 2845 "" +#line 2878 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2853,9 +2885,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2854 "" +#line 2887 "" -#line 2856 "" +#line 2889 "" #define INITIAL 0 #define quotedstring 1 @@ -3077,7 +3109,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3078 "" +#line 3111 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3110,13 +3142,13 @@ YY_DECL while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2913 ) + if ( yy_current_state >= 2961 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 5685 ); + while ( yy_base[yy_current_state] != 5768 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3701,857 +3733,887 @@ YY_RULE_SETUP case 112: YY_RULE_SETUP #line 319 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(0, VAR_RPZ) } YY_BREAK case 113: YY_RULE_SETUP #line 320 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_TAGS) } YY_BREAK case 114: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } YY_BREAK case 115: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } YY_BREAK case 116: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_RPZ_LOG) } YY_BREAK case 117: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_RPZ_LOG_NAME) } YY_BREAK case 118: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 119: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 120: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 121: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 122: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 123: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 124: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 125: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 126: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 127: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 128: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 129: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 130: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 131: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 132: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 133: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 134: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 135: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 136: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 137: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 138: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 139: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 140: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 141: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 142: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 143: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 144: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 145: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 146: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 147: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 148: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 149: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 150: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 151: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 152: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 153: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 154: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 155: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 156: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 157: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 158: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 159: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 160: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 161: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 162: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 163: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 164: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 165: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 166: YY_RULE_SETUP -#line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 373 "./util/configlexer.lex" +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 167: YY_RULE_SETUP -#line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +#line 374 "./util/configlexer.lex" +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 168: YY_RULE_SETUP -#line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +#line 375 "./util/configlexer.lex" +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 169: YY_RULE_SETUP -#line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +#line 376 "./util/configlexer.lex" +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 170: YY_RULE_SETUP -#line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +#line 377 "./util/configlexer.lex" +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 171: YY_RULE_SETUP -#line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +#line 378 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 172: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 173: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 174: YY_RULE_SETUP #line 382 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 175: YY_RULE_SETUP #line 383 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 176: YY_RULE_SETUP #line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 177: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 178: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 179: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 180: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 181: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 182: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 183: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 184: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 185: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 186: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 187: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 188: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 189: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 190: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 191: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 192: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 193: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 194: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 195: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 196: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 197: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 198: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 199: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 200: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 201: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 202: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 203: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 204: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 205: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 206: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 207: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 208: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 209: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 210: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 211: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 212: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 213: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 214: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 215: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 216: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 217: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 218: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 219: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 220: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 221: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 222: YY_RULE_SETUP -#line 431 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 430 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 223: YY_RULE_SETUP -#line 433 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } +#line 431 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 224: YY_RULE_SETUP -#line 435 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } +#line 432 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 225: YY_RULE_SETUP -#line 437 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } +#line 433 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 226: YY_RULE_SETUP -#line 439 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } +#line 434 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 227: YY_RULE_SETUP -#line 441 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 435 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 228: YY_RULE_SETUP -#line 442 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 437 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 229: YY_RULE_SETUP -#line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +#line 439 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 230: YY_RULE_SETUP -#line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +#line 441 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 231: YY_RULE_SETUP -#line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +#line 443 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 232: YY_RULE_SETUP -#line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +#line 445 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 233: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 234: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 235: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 236: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 237: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 238: YY_RULE_SETUP #line 452 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 239: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 240: YY_RULE_SETUP #line 454 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 241: YY_RULE_SETUP #line 455 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 242: YY_RULE_SETUP #line 456 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 243: YY_RULE_SETUP #line 457 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 244: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 245: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 246: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 247: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 248: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 249: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 250: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 251: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 252: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 253: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 254: YY_RULE_SETUP -#line 469 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 468 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 255: YY_RULE_SETUP -#line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 469 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 256: YY_RULE_SETUP -#line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 470 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 257: YY_RULE_SETUP -#line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +#line 471 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 258: YY_RULE_SETUP -#line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +#line 472 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 259: YY_RULE_SETUP -#line 475 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +#line 473 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 260: YY_RULE_SETUP -#line 476 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +#line 475 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 261: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 262: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 263: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 264: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 265: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 266: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 267: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 268: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 269: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 270: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 271: YY_RULE_SETUP #line 487 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 272: YY_RULE_SETUP #line 488 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 273: YY_RULE_SETUP #line 489 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 274: -/* rule 274 can match eol */ YY_RULE_SETUP #line 490 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK -/* Quoted strings. Strip leading and ending quotes */ case 275: YY_RULE_SETUP +#line 491 "./util/configlexer.lex" +{ YDVAR(0, VAR_IPSET) } + YY_BREAK +case 276: +YY_RULE_SETUP +#line 492 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSET_NAME_V4) } + YY_BREAK +case 277: +YY_RULE_SETUP #line 493 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSET_NAME_V6) } + YY_BREAK +case 278: +YY_RULE_SETUP +#line 494 "./util/configlexer.lex" +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } + YY_BREAK +case 279: +YY_RULE_SETUP +#line 495 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 280: +/* rule 280 can match eol */ +YY_RULE_SETUP +#line 496 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++; } + YY_BREAK +/* Quoted strings. Strip leading and ending quotes */ +case 281: +YY_RULE_SETUP +#line 499 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 494 "./util/configlexer.lex" +#line 500 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 276: +case 282: YY_RULE_SETUP -#line 499 "./util/configlexer.lex" +#line 505 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 277: -/* rule 277 can match eol */ +case 283: +/* rule 283 can match eol */ YY_RULE_SETUP -#line 500 "./util/configlexer.lex" +#line 506 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 278: +case 284: YY_RULE_SETUP -#line 502 "./util/configlexer.lex" +#line 508 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4564,34 +4626,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 279: +case 285: YY_RULE_SETUP -#line 514 "./util/configlexer.lex" +#line 520 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 515 "./util/configlexer.lex" +#line 521 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 280: +case 286: YY_RULE_SETUP -#line 520 "./util/configlexer.lex" +#line 526 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 281: -/* rule 281 can match eol */ +case 287: +/* rule 287 can match eol */ YY_RULE_SETUP -#line 521 "./util/configlexer.lex" +#line 527 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 282: +case 288: YY_RULE_SETUP -#line 523 "./util/configlexer.lex" +#line 529 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4604,38 +4666,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 283: +case 289: YY_RULE_SETUP -#line 535 "./util/configlexer.lex" +#line 541 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 537 "./util/configlexer.lex" +#line 543 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 284: +case 290: YY_RULE_SETUP -#line 541 "./util/configlexer.lex" +#line 547 "./util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 285: -/* rule 285 can match eol */ +case 291: +/* rule 291 can match eol */ YY_RULE_SETUP -#line 542 "./util/configlexer.lex" +#line 548 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 286: +case 292: YY_RULE_SETUP -#line 543 "./util/configlexer.lex" +#line 549 "./util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 287: +case 293: YY_RULE_SETUP -#line 544 "./util/configlexer.lex" +#line 550 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4643,27 +4705,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 549 "./util/configlexer.lex" +#line 555 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 288: +case 294: YY_RULE_SETUP -#line 553 "./util/configlexer.lex" +#line 559 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 289: -/* rule 289 can match eol */ +case 295: +/* rule 295 can match eol */ YY_RULE_SETUP -#line 554 "./util/configlexer.lex" +#line 560 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 290: +case 296: YY_RULE_SETUP -#line 556 "./util/configlexer.lex" +#line 562 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4673,7 +4735,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 562 "./util/configlexer.lex" +#line 568 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4685,33 +4747,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 291: +case 297: YY_RULE_SETUP -#line 573 "./util/configlexer.lex" +#line 579 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 292: +case 298: YY_RULE_SETUP -#line 577 "./util/configlexer.lex" +#line 583 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 293: +case 299: YY_RULE_SETUP -#line 581 "./util/configlexer.lex" +#line 587 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 294: +case 300: YY_RULE_SETUP -#line 585 "./util/configlexer.lex" +#line 591 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4712 "" +#line 4775 "" case YY_END_OF_BUFFER: { @@ -5006,7 +5068,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 >= 2913 ) + if ( yy_current_state >= 2961 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5034,11 +5096,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 >= 2913 ) + if ( yy_current_state >= 2961 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 2912); + yy_is_jam = (yy_current_state == 2960); return yy_is_jam ? 0 : yy_current_state; } @@ -5677,6 +5739,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 585 "./util/configlexer.lex" +#line 591 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index a86ddf55d..8d9d1d525 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -316,6 +316,12 @@ forward-no-cache{COLON} { YDVAR(1, VAR_FORWARD_NO_CACHE) } forward-ssl-upstream{COLON} { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } forward-tls-upstream{COLON} { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } auth-zone{COLON} { YDVAR(0, VAR_AUTH_ZONE) } +rpz{COLON} { YDVAR(0, VAR_RPZ) } +tags{COLON} { YDVAR(1, VAR_TAGS) } +rpz-action-override{COLON} { YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } +rpz-cname-override{COLON} { YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } +rpz-log{COLON} { YDVAR(1, VAR_RPZ_LOG) } +rpz-log-name{COLON} { YDVAR(1, VAR_RPZ_LOG_NAME) } zonefile{COLON} { YDVAR(1, VAR_ZONEFILE) } master{COLON} { YDVAR(1, VAR_MASTER) } url{COLON} { YDVAR(1, VAR_URL) } diff --git a/util/configparser.c b/util/configparser.c index fda5d0ab6..b59e42b17 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1,9 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, - Inc. + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -41,14 +40,11 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ - /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.4.1" +#define YYBISON_VERSION "3.0.4" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -65,8 +61,8 @@ -/* First part of user prologue. */ -#line 38 "./util/configparser.y" +/* Copy the first part of user declarations. */ +#line 38 "./util/configparser.y" /* yacc.c:339 */ #include "config.h" @@ -95,17 +91,13 @@ extern struct config_parser_state* cfg_parser; #endif -#line 99 "util/configparser.c" +#line 95 "util/configparser.c" /* yacc.c:339 */ # ifndef YY_NULLPTR -# if defined __cplusplus -# if 201103L <= __cplusplus -# define YY_NULLPTR nullptr -# else -# define YY_NULLPTR 0 -# endif +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULLPTR nullptr # else -# define YY_NULLPTR ((void*)0) +# define YY_NULLPTR 0 # endif # endif @@ -117,8 +109,8 @@ extern struct config_parser_state* cfg_parser; # define YYERROR_VERBOSE 0 #endif -/* Use api.header.include to #include this header - instead of duplicating it here. */ +/* In a future release of Bison, this section will be replaced + by #include "configparser.h". */ #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED /* Debug traces. */ @@ -397,10 +389,16 @@ extern int yydebug; VAR_STREAM_WAIT_SIZE = 518, VAR_TLS_CIPHERS = 519, VAR_TLS_CIPHERSUITES = 520, - VAR_TLS_SESSION_TICKET_KEYS = 521, - VAR_IPSET = 522, - VAR_IPSET_NAME_V4 = 523, - VAR_IPSET_NAME_V6 = 524 + VAR_IPSET = 521, + VAR_IPSET_NAME_V4 = 522, + VAR_IPSET_NAME_V6 = 523, + VAR_TLS_SESSION_TICKET_KEYS = 524, + VAR_RPZ = 525, + VAR_TAGS = 526, + VAR_RPZ_ACTION_OVERRIDE = 527, + VAR_RPZ_CNAME_OVERRIDE = 528, + VAR_RPZ_LOG = 529, + VAR_RPZ_LOG_NAME = 530 }; #endif /* Tokens. */ @@ -667,22 +665,29 @@ extern int yydebug; #define VAR_STREAM_WAIT_SIZE 518 #define VAR_TLS_CIPHERS 519 #define VAR_TLS_CIPHERSUITES 520 -#define VAR_TLS_SESSION_TICKET_KEYS 521 -#define VAR_IPSET 522 -#define VAR_IPSET_NAME_V4 523 -#define VAR_IPSET_NAME_V6 524 +#define VAR_IPSET 521 +#define VAR_IPSET_NAME_V4 522 +#define VAR_IPSET_NAME_V6 523 +#define VAR_TLS_SESSION_TICKET_KEYS 524 +#define VAR_RPZ 525 +#define VAR_TAGS 526 +#define VAR_RPZ_ACTION_OVERRIDE 527 +#define VAR_RPZ_CNAME_OVERRIDE 528 +#define VAR_RPZ_LOG 529 +#define VAR_RPZ_LOG_NAME 530 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + union YYSTYPE { -#line 66 "./util/configparser.y" +#line 66 "./util/configparser.y" /* yacc.c:355 */ char* str; -#line 684 "util/configparser.c" - +#line 689 "util/configparser.c" /* yacc.c:355 */ }; + typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -695,7 +700,9 @@ int yyparse (void); #endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ +/* Copy the second part of user declarations. */ +#line 706 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -716,13 +723,13 @@ typedef signed char yytype_int8; #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else -typedef unsigned short yytype_uint16; +typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else -typedef short yytype_int16; +typedef short int yytype_int16; #endif #ifndef YYSIZE_T @@ -734,7 +741,7 @@ typedef short yytype_int16; # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned +# define YYSIZE_T unsigned int # endif #endif @@ -770,6 +777,15 @@ typedef short yytype_int16; # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) #endif +#if !defined _Noreturn \ + && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) +# if defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# endif +#endif + /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) @@ -777,7 +793,7 @@ typedef short yytype_int16; # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ @@ -797,8 +813,6 @@ typedef short yytype_int16; #endif -#define YY_ASSERT(E) ((void) (0 && (E))) - #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -930,27 +944,27 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 543 +#define YYLAST 586 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 270 +#define YYNTOKENS 276 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 291 +#define YYNNTS 299 /* YYNRULES -- Number of rules. */ -#define YYNRULES 557 +#define YYNRULES 576 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 833 +#define YYNSTATES 857 +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned + by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 524 +#define YYMAXUTOK 530 -/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex. */ + as returned by yylex, without out-of-bounds checking. */ static const yytype_uint16 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1005,69 +1019,72 @@ static const yytype_uint16 yytranslate[] = 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269 + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 173, 173, 173, 174, 174, 175, 175, 176, 176, - 176, 177, 177, 178, 178, 182, 187, 188, 189, 189, - 189, 190, 190, 191, 191, 192, 192, 193, 193, 193, - 194, 194, 195, 195, 195, 196, 196, 196, 197, 197, - 198, 198, 199, 199, 200, 200, 201, 201, 202, 202, - 203, 203, 204, 204, 205, 205, 205, 206, 206, 206, - 207, 207, 207, 208, 208, 209, 209, 210, 210, 211, - 211, 212, 212, 212, 213, 213, 214, 214, 215, 215, - 215, 216, 216, 217, 217, 218, 218, 219, 219, 219, - 220, 220, 221, 221, 222, 222, 223, 223, 224, 224, - 225, 225, 225, 226, 226, 227, 227, 227, 228, 228, - 228, 229, 229, 229, 230, 230, 230, 230, 231, 232, - 232, 232, 233, 233, 233, 234, 234, 235, 235, 236, - 236, 236, 237, 237, 238, 238, 238, 239, 239, 240, - 240, 241, 242, 242, 243, 243, 244, 244, 245, 246, - 246, 247, 247, 248, 248, 249, 249, 250, 250, 251, - 251, 251, 252, 252, 253, 253, 254, 254, 255, 255, - 256, 256, 257, 257, 257, 258, 258, 258, 259, 259, - 259, 260, 260, 261, 262, 262, 263, 263, 264, 264, - 265, 265, 266, 266, 266, 267, 267, 267, 268, 268, - 268, 269, 269, 270, 270, 271, 271, 273, 285, 286, - 287, 287, 287, 287, 287, 288, 288, 290, 302, 303, - 304, 304, 304, 304, 305, 305, 307, 321, 322, 323, - 323, 323, 323, 324, 324, 324, 326, 342, 343, 344, - 344, 344, 344, 345, 345, 345, 346, 348, 357, 366, - 377, 386, 395, 404, 415, 424, 436, 450, 465, 476, - 493, 510, 527, 544, 559, 574, 587, 602, 611, 620, - 629, 638, 647, 656, 665, 674, 683, 692, 701, 710, - 719, 732, 741, 754, 763, 772, 781, 788, 795, 804, - 811, 820, 828, 835, 842, 850, 859, 868, 882, 891, - 900, 909, 918, 927, 936, 943, 950, 976, 984, 991, - 998, 1005, 1012, 1020, 1028, 1036, 1043, 1054, 1065, 1072, - 1081, 1090, 1099, 1106, 1113, 1121, 1129, 1139, 1149, 1159, - 1167, 1180, 1191, 1199, 1212, 1221, 1230, 1239, 1249, 1259, - 1267, 1280, 1289, 1297, 1306, 1314, 1327, 1336, 1343, 1353, - 1363, 1373, 1383, 1393, 1403, 1413, 1423, 1430, 1437, 1444, - 1453, 1462, 1471, 1480, 1487, 1497, 1517, 1524, 1542, 1555, - 1568, 1577, 1586, 1595, 1604, 1614, 1624, 1635, 1644, 1653, - 1662, 1671, 1684, 1697, 1706, 1713, 1722, 1731, 1740, 1749, - 1757, 1770, 1778, 1819, 1826, 1841, 1851, 1861, 1868, 1875, - 1882, 1891, 1899, 1913, 1934, 1955, 1967, 1979, 1991, 2000, - 2021, 2031, 2040, 2048, 2056, 2069, 2082, 2097, 2112, 2121, - 2130, 2136, 2145, 2154, 2164, 2174, 2187, 2200, 2212, 2226, - 2238, 2252, 2262, 2269, 2276, 2285, 2294, 2304, 2314, 2324, - 2331, 2338, 2347, 2356, 2366, 2376, 2383, 2390, 2397, 2405, - 2415, 2425, 2435, 2445, 2484, 2494, 2502, 2510, 2525, 2534, - 2539, 2540, 2541, 2541, 2541, 2542, 2542, 2542, 2543, 2543, - 2545, 2555, 2564, 2571, 2578, 2585, 2592, 2599, 2606, 2611, - 2612, 2613, 2613, 2614, 2614, 2615, 2615, 2616, 2617, 2618, - 2619, 2620, 2621, 2623, 2632, 2639, 2648, 2657, 2664, 2671, - 2681, 2691, 2701, 2711, 2721, 2731, 2736, 2737, 2738, 2740, - 2746, 2756, 2763, 2772, 2780, 2785, 2786, 2788, 2788, 2788, - 2789, 2789, 2790, 2791, 2792, 2793, 2794, 2796, 2806, 2815, - 2822, 2831, 2838, 2847, 2855, 2868, 2876, 2889, 2894, 2895, - 2896, 2896, 2897, 2897, 2897, 2899, 2914, 2929, 2941, 2956, - 2969, 2980, 2985, 2986, 2987, 2987, 2989, 3004 + 0, 174, 174, 174, 175, 175, 176, 176, 177, 177, + 177, 178, 178, 179, 179, 180, 184, 189, 190, 191, + 191, 191, 192, 192, 193, 193, 194, 194, 195, 195, + 195, 196, 196, 197, 197, 197, 198, 198, 198, 199, + 199, 200, 200, 201, 201, 202, 202, 203, 203, 204, + 204, 205, 205, 206, 206, 207, 207, 207, 208, 208, + 208, 209, 209, 209, 210, 210, 211, 211, 212, 212, + 213, 213, 214, 214, 214, 215, 215, 216, 216, 217, + 217, 217, 218, 218, 219, 219, 220, 220, 221, 221, + 221, 222, 222, 223, 223, 224, 224, 225, 225, 226, + 226, 227, 227, 227, 228, 228, 229, 229, 229, 230, + 230, 230, 231, 231, 231, 232, 232, 232, 232, 233, + 234, 234, 234, 235, 235, 235, 236, 236, 237, 237, + 238, 238, 238, 239, 239, 240, 240, 240, 241, 241, + 242, 242, 243, 244, 244, 245, 245, 246, 246, 247, + 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, + 253, 253, 253, 254, 254, 255, 255, 256, 256, 257, + 257, 258, 258, 259, 259, 259, 260, 260, 260, 261, + 261, 261, 262, 262, 263, 264, 264, 265, 265, 266, + 266, 267, 267, 268, 268, 268, 269, 269, 269, 270, + 270, 270, 271, 271, 272, 272, 273, 273, 275, 287, + 288, 289, 289, 289, 289, 289, 290, 290, 292, 304, + 305, 306, 306, 306, 306, 307, 307, 309, 323, 324, + 325, 325, 325, 325, 326, 326, 326, 328, 345, 346, + 347, 347, 347, 347, 348, 348, 348, 349, 352, 371, + 388, 396, 406, 414, 431, 432, 433, 433, 433, 433, + 433, 434, 434, 434, 435, 435, 437, 446, 455, 466, + 475, 484, 493, 504, 513, 525, 539, 554, 565, 582, + 599, 616, 633, 648, 663, 676, 691, 700, 709, 718, + 727, 736, 745, 754, 763, 772, 781, 790, 799, 808, + 821, 830, 843, 852, 861, 870, 877, 884, 893, 900, + 909, 917, 924, 931, 939, 948, 957, 971, 980, 989, + 998, 1007, 1016, 1025, 1032, 1039, 1065, 1073, 1080, 1087, + 1094, 1101, 1109, 1117, 1125, 1132, 1143, 1154, 1161, 1170, + 1179, 1188, 1195, 1202, 1210, 1218, 1228, 1238, 1248, 1256, + 1269, 1280, 1288, 1301, 1310, 1319, 1328, 1338, 1348, 1356, + 1369, 1378, 1386, 1395, 1403, 1416, 1425, 1432, 1442, 1452, + 1462, 1472, 1482, 1492, 1502, 1512, 1519, 1526, 1533, 1542, + 1551, 1560, 1569, 1576, 1586, 1606, 1613, 1631, 1644, 1657, + 1666, 1675, 1684, 1693, 1703, 1713, 1724, 1733, 1742, 1751, + 1760, 1773, 1786, 1795, 1802, 1811, 1820, 1829, 1838, 1846, + 1859, 1867, 1908, 1915, 1930, 1940, 1950, 1957, 1964, 1971, + 1980, 1988, 2002, 2023, 2044, 2056, 2068, 2080, 2089, 2110, + 2120, 2129, 2137, 2145, 2158, 2171, 2186, 2201, 2210, 2219, + 2225, 2234, 2243, 2253, 2263, 2276, 2289, 2301, 2315, 2327, + 2341, 2351, 2358, 2365, 2374, 2383, 2393, 2403, 2413, 2420, + 2427, 2436, 2445, 2455, 2465, 2472, 2479, 2486, 2494, 2504, + 2514, 2524, 2534, 2573, 2583, 2591, 2599, 2614, 2623, 2628, + 2629, 2630, 2630, 2630, 2631, 2631, 2631, 2632, 2632, 2634, + 2644, 2653, 2660, 2667, 2674, 2681, 2688, 2695, 2700, 2701, + 2702, 2702, 2703, 2703, 2704, 2704, 2705, 2706, 2707, 2708, + 2709, 2710, 2712, 2721, 2728, 2737, 2746, 2753, 2760, 2770, + 2780, 2790, 2800, 2810, 2820, 2825, 2826, 2827, 2829, 2835, + 2845, 2852, 2861, 2869, 2874, 2875, 2877, 2877, 2877, 2878, + 2878, 2879, 2880, 2881, 2882, 2883, 2885, 2895, 2904, 2911, + 2920, 2927, 2936, 2944, 2957, 2965, 2978, 2983, 2984, 2985, + 2985, 2986, 2986, 2986, 2988, 3003, 3018, 3030, 3045, 3058, + 3069, 3074, 3075, 3076, 3076, 3078, 3093 }; #endif @@ -1174,12 +1191,16 @@ static const char *const yytname[] = "VAR_STUB_NO_CACHE", "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", "VAR_UNKNOWN_SERVER_TIME_LIMIT", "VAR_LOG_TAG_QUERYREPLY", "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES", - "VAR_TLS_SESSION_TICKET_KEYS", "VAR_IPSET", "VAR_IPSET_NAME_V4", - "VAR_IPSET_NAME_V6", "$accept", "toplevelvars", "toplevelvar", + "VAR_IPSET", "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", + "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS", + "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", + "VAR_RPZ_LOG_NAME", "$accept", "toplevelvars", "toplevelvar", "serverstart", "contents_server", "content_server", "stubstart", "contents_stub", "content_stub", "forwardstart", "contents_forward", "content_forward", "viewstart", "contents_view", "content_view", - "authstart", "contents_auth", "content_auth", "server_num_threads", + "authstart", "contents_auth", "content_auth", "rpz_tag", + "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", + "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", @@ -1328,14 +1349,15 @@ static const yytype_uint16 yytoknum[] = 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 524 + 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530 }; # endif -#define YYPACT_NINF -262 +#define YYPACT_NINF -261 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-262))) + (!!((Yystate) == (-261))) #define YYTABLE_NINF -1 @@ -1346,90 +1368,92 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -262, 0, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, 256, -42, -37, -38, - -41, -44, -136, -102, -191, -177, -261, 2, 3, 28, - 29, 30, 33, 35, 36, 37, 38, 39, 55, 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, 86, 87, 90, 92, - 93, 94, 95, 96, 97, 98, 99, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 198, 199, 200, 201, 202, 204, 205, - 207, 209, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 226, 227, 228, 229, - 230, 231, 232, 234, 235, 236, 237, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 289, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, 290, 291, 292, 296, - 297, 298, 340, -262, -262, -262, -262, -262, -262, -262, - -262, 341, 342, 343, 344, 345, 346, -262, -262, -262, - -262, -262, -262, -262, 347, 348, 352, 356, 357, 382, - 383, -262, -262, -262, -262, -262, -262, -262, -262, 384, - 386, 397, 398, 399, 400, 401, 402, -262, -262, -262, - -262, -262, -262, -262, -262, -262, 403, 404, 405, 406, - 407, 408, 409, 448, -262, -262, -262, -262, -262, -262, - -262, -262, -262, 450, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, 481, -262, - -262, 482, 483, 484, 485, 486, 488, 489, 490, 491, - 492, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, 493, 494, 497, 500, 503, -262, -262, -262, - -262, -262, -262, 504, 513, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, 514, 515, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, 516, 517, 518, -262, -262, -262, - -262, -262, -262, -262, -262, -262, 519, 520, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, 521, 522, 523, - 524, 525, 526, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, 527, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, 528, -262, -262, 529, 530, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, 531, 532, 533, -262, -262, -262, -262, -262, - -262, -262, -262 + -261, 0, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, 259, -42, + -37, -38, -6, -41, -67, -136, -102, -168, -191, -260, + 2, 3, 26, 28, 29, 30, 33, 51, 52, 53, + 55, 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, 86, 87, + 90, 92, 93, 94, 95, 96, 97, 98, 99, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 196, 197, 198, 199, + 200, 201, 202, 204, 205, 207, 209, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 227, 234, 235, 236, + 237, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 257, 258, + 292, 293, 294, 295, 299, 300, 301, 343, 344, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, 345, + 346, 347, 348, 349, 350, 351, -261, -261, -261, -261, + -261, -261, -261, -261, 355, 359, 360, 385, 386, 387, + -261, -261, -261, -261, -261, -261, -261, 389, 400, 401, + 402, 403, 404, 405, -261, -261, -261, -261, -261, -261, + -261, -261, 406, 407, 408, 409, 410, 411, 412, 451, + -261, -261, -261, -261, -261, -261, -261, -261, -261, 453, + 467, 468, 469, 470, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, 471, 472, 473, 474, 475, + 476, 477, 484, -261, -261, -261, -261, -261, -261, -261, + -261, -261, 485, 486, 487, 488, 489, 491, 492, 493, + 494, 495, 496, 497, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, 500, -261, -261, + 503, 506, 507, 515, 516, 517, 519, 520, 521, 522, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, 523, 524, 525, 526, 527, -261, -261, -261, -261, + -261, -261, 528, 529, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, 530, 531, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, 532, 533, 534, -261, -261, -261, -261, + -261, -261, -261, -261, -261, 535, 536, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, 537, 538, 539, 540, + 541, 542, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, 543, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + 544, -261, -261, 545, 546, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, 547, 548, 549, -261, + -261, -261, -261, -261, -261, -261, -261 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1437,10 +1461,10 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 15, 207, 217, 459, 505, 478, 226, - 514, 537, 236, 551, 3, 17, 209, 219, 228, 238, - 461, 480, 507, 516, 539, 553, 4, 5, 6, 10, - 14, 8, 9, 7, 11, 12, 13, 0, 0, 0, + 2, 0, 1, 16, 208, 218, 478, 524, 497, 227, + 533, 556, 237, 570, 253, 3, 18, 210, 220, 229, + 239, 255, 480, 499, 526, 535, 558, 572, 4, 5, + 6, 10, 14, 15, 8, 9, 7, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1459,138 +1483,140 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 18, 19, 81, - 84, 93, 178, 179, 20, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 32, 72, 21, 85, 86, - 43, 65, 80, 22, 23, 25, 26, 24, 27, 28, - 29, 30, 31, 116, 190, 117, 119, 120, 121, 192, - 197, 193, 204, 205, 206, 174, 82, 71, 97, 114, - 115, 202, 199, 118, 33, 34, 35, 36, 37, 73, - 87, 88, 103, 59, 69, 60, 182, 183, 98, 53, - 54, 181, 55, 56, 107, 111, 125, 134, 159, 203, - 108, 66, 38, 39, 40, 95, 126, 127, 128, 41, - 42, 44, 45, 47, 48, 46, 132, 49, 50, 51, - 57, 76, 112, 90, 133, 83, 155, 91, 92, 109, - 110, 200, 96, 52, 74, 77, 58, 61, 99, 100, - 75, 156, 101, 62, 63, 64, 191, 113, 169, 170, - 171, 172, 180, 102, 70, 104, 105, 106, 157, 67, - 68, 89, 78, 79, 94, 122, 123, 201, 124, 129, - 130, 131, 160, 161, 163, 165, 166, 164, 167, 175, - 135, 136, 139, 140, 137, 138, 141, 142, 144, 143, - 194, 196, 195, 158, 168, 184, 186, 185, 187, 188, - 189, 162, 173, 176, 177, 198, 0, 0, 0, 0, - 0, 0, 0, 208, 210, 211, 212, 214, 215, 216, - 213, 0, 0, 0, 0, 0, 0, 218, 220, 221, - 222, 223, 224, 225, 0, 0, 0, 0, 0, 0, - 0, 227, 229, 230, 233, 234, 231, 235, 232, 0, - 0, 0, 0, 0, 0, 0, 0, 237, 239, 240, - 241, 242, 246, 243, 244, 245, 0, 0, 0, 0, - 0, 0, 0, 0, 460, 462, 464, 463, 469, 465, - 466, 467, 468, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 479, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 506, - 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 515, 517, 518, 519, 521, 522, 520, 523, 524, - 525, 526, 0, 0, 0, 0, 0, 538, 540, 541, - 542, 543, 544, 0, 0, 552, 554, 555, 248, 247, - 254, 267, 265, 273, 274, 277, 275, 276, 278, 279, - 280, 281, 282, 304, 305, 306, 307, 308, 332, 333, - 334, 339, 340, 270, 341, 342, 345, 343, 344, 347, - 348, 349, 363, 319, 320, 322, 323, 350, 366, 313, - 315, 367, 373, 374, 375, 271, 331, 389, 390, 314, - 384, 297, 266, 309, 364, 370, 351, 0, 0, 393, - 272, 249, 296, 355, 250, 268, 269, 310, 311, 391, - 353, 357, 358, 251, 394, 335, 362, 298, 318, 368, - 369, 372, 383, 312, 387, 385, 386, 324, 330, 359, - 360, 325, 326, 352, 377, 299, 300, 303, 283, 285, - 286, 287, 288, 289, 395, 396, 398, 336, 337, 338, - 346, 399, 400, 401, 0, 0, 0, 354, 327, 510, - 410, 414, 412, 411, 415, 413, 0, 0, 418, 419, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 356, 371, 388, 423, 424, 328, 402, 0, 0, 0, - 0, 0, 0, 378, 379, 380, 381, 382, 511, 321, - 316, 376, 295, 252, 253, 317, 425, 427, 426, 428, - 429, 430, 284, 291, 420, 422, 421, 290, 0, 302, - 361, 397, 301, 329, 292, 293, 294, 431, 432, 433, - 437, 436, 434, 435, 438, 439, 440, 441, 443, 442, - 452, 0, 456, 457, 0, 0, 458, 444, 450, 445, - 446, 447, 449, 451, 448, 470, 472, 471, 474, 475, - 476, 477, 473, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 509, 527, 528, 529, 532, - 530, 531, 533, 534, 535, 536, 545, 546, 547, 548, - 549, 556, 557, 365, 392, 409, 512, 513, 416, 417, - 403, 404, 0, 0, 0, 408, 550, 453, 454, 455, - 407, 405, 406 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 19, 20, 82, 85, 94, 179, 180, 21, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 33, 73, + 22, 86, 87, 44, 66, 81, 23, 24, 26, 27, + 25, 28, 29, 30, 31, 32, 117, 191, 118, 120, + 121, 122, 193, 198, 194, 205, 206, 207, 175, 83, + 72, 98, 115, 116, 203, 200, 119, 34, 35, 36, + 37, 38, 74, 88, 89, 104, 60, 70, 61, 183, + 184, 99, 54, 55, 182, 56, 57, 108, 112, 126, + 135, 160, 204, 109, 67, 39, 40, 41, 96, 127, + 128, 129, 42, 43, 45, 46, 48, 49, 47, 133, + 50, 51, 52, 58, 77, 113, 91, 134, 84, 156, + 92, 93, 110, 111, 201, 97, 53, 75, 78, 59, + 62, 100, 101, 76, 157, 102, 63, 64, 65, 192, + 114, 170, 171, 172, 173, 181, 103, 71, 105, 106, + 107, 158, 68, 69, 90, 79, 80, 95, 123, 124, + 202, 125, 130, 131, 132, 161, 162, 164, 166, 167, + 165, 168, 176, 136, 137, 140, 141, 138, 139, 142, + 143, 145, 144, 195, 197, 196, 159, 169, 185, 187, + 186, 188, 189, 190, 163, 174, 177, 178, 199, 0, + 0, 0, 0, 0, 0, 0, 209, 211, 212, 213, + 215, 216, 217, 214, 0, 0, 0, 0, 0, 0, + 219, 221, 222, 223, 224, 225, 226, 0, 0, 0, + 0, 0, 0, 0, 228, 230, 231, 234, 235, 232, + 236, 233, 0, 0, 0, 0, 0, 0, 0, 0, + 238, 240, 241, 242, 243, 247, 244, 245, 246, 0, + 0, 0, 0, 0, 258, 262, 263, 264, 265, 254, + 256, 257, 259, 260, 261, 0, 0, 0, 0, 0, + 0, 0, 0, 479, 481, 483, 482, 488, 484, 485, + 486, 487, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 498, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 0, 525, 527, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 534, 536, 537, 538, 540, 541, 539, 542, 543, 544, + 545, 0, 0, 0, 0, 0, 557, 559, 560, 561, + 562, 563, 0, 0, 571, 573, 574, 267, 266, 273, + 286, 284, 292, 293, 296, 294, 295, 297, 298, 299, + 300, 301, 323, 324, 325, 326, 327, 351, 352, 353, + 358, 359, 289, 360, 361, 364, 362, 363, 366, 367, + 368, 382, 338, 339, 341, 342, 369, 385, 332, 334, + 386, 392, 393, 394, 290, 350, 408, 409, 333, 403, + 316, 285, 328, 383, 389, 370, 0, 0, 412, 291, + 268, 315, 374, 269, 287, 288, 329, 330, 410, 372, + 376, 377, 270, 413, 354, 381, 317, 337, 387, 388, + 391, 402, 331, 406, 404, 405, 343, 349, 378, 379, + 344, 345, 371, 396, 318, 319, 322, 302, 304, 305, + 306, 307, 308, 414, 415, 417, 355, 356, 357, 365, + 418, 419, 420, 0, 0, 0, 373, 346, 529, 429, + 433, 431, 430, 434, 432, 0, 0, 437, 438, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 375, + 390, 407, 442, 443, 347, 421, 0, 0, 0, 0, + 0, 0, 397, 398, 399, 400, 401, 530, 340, 335, + 395, 314, 271, 272, 336, 444, 446, 445, 447, 448, + 449, 303, 310, 439, 441, 440, 309, 0, 321, 380, + 416, 320, 348, 311, 312, 313, 450, 451, 452, 456, + 455, 453, 454, 457, 458, 459, 460, 462, 461, 471, + 0, 475, 476, 0, 0, 477, 463, 469, 464, 465, + 466, 468, 470, 467, 248, 249, 250, 251, 252, 489, + 491, 490, 493, 494, 495, 496, 492, 512, 513, 514, + 515, 516, 517, 518, 519, 520, 521, 522, 523, 528, + 546, 547, 548, 551, 549, 550, 552, 553, 554, 555, + 564, 565, 566, 567, 568, 575, 576, 384, 411, 428, + 531, 532, 435, 436, 422, 423, 0, 0, 0, 427, + 569, 472, 473, 474, 426, 424, 425 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262 + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -23, 550, 551, 552, 553, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 14, 15, 26, 226, 16, 27, 423, 17, - 28, 437, 18, 29, 451, 19, 30, 467, 227, 228, - 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 424, 425, 426, 427, 428, 429, 430, 438, - 439, 440, 441, 442, 443, 468, 469, 470, 471, 472, - 473, 474, 475, 452, 453, 454, 455, 456, 457, 458, - 20, 31, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 21, 32, 505, 506, 507, 508, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 22, 33, 519, 520, - 411, 412, 413, 414, 23, 34, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 24, 35, 547, - 548, 549, 550, 551, 552, 415, 25, 36, 555, 556, - 557 + -1, 1, 15, 16, 28, 229, 17, 29, 426, 18, + 30, 440, 19, 31, 454, 20, 32, 470, 484, 485, + 486, 487, 488, 21, 33, 489, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 427, 428, 429, 430, 431, 432, 433, 441, 442, 443, + 444, 445, 446, 471, 472, 473, 474, 475, 476, 477, + 478, 455, 456, 457, 458, 459, 460, 461, 22, 34, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 23, + 35, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 24, 36, 538, 539, 414, 415, + 416, 417, 25, 37, 550, 551, 552, 553, 554, 555, + 556, 557, 558, 559, 560, 26, 38, 566, 567, 568, + 569, 570, 571, 418, 27, 39, 574, 575, 576 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1598,72 +1624,76 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 416, 459, 417, 418, 444, 431, 553, 554, 518, - 0, 3, 558, 559, 432, 433, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 521, 522, - 523, 524, 525, 526, 527, 528, 529, 530, 560, 561, - 562, 445, 446, 563, 4, 564, 565, 566, 567, 568, - 5, 476, 477, 478, 479, 480, 481, 482, 483, 542, - 543, 544, 545, 546, 419, 569, 447, 570, 571, 572, - 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, - 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, - 593, 594, 595, 596, 6, 420, 597, 598, 421, 434, - 599, 435, 600, 601, 602, 603, 604, 605, 606, 607, - 7, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 618, 619, 620, 621, 622, 623, 448, 449, 624, - 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, - 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, - 645, 8, 646, 647, 648, 649, 650, 651, 652, 653, - 654, 655, 656, 657, 658, 659, 450, 660, 661, 662, - 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, - 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, - 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, - 693, 460, 9, 461, 462, 463, 464, 465, 694, 695, - 696, 697, 698, 466, 699, 700, 422, 701, 10, 702, - 436, 703, 704, 705, 706, 707, 708, 709, 710, 711, - 712, 713, 714, 715, 716, 11, 717, 718, 719, 720, - 721, 722, 723, 12, 724, 725, 726, 727, 728, 729, - 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, - 740, 741, 742, 743, 744, 745, 0, 13, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 2, 419, 462, 420, 421, 447, 434, 572, 573, 537, + 490, 3, 577, 578, 435, 436, 512, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 495, 496, + 497, 498, 499, 500, 501, 502, 579, 462, 580, 581, + 582, 448, 449, 583, 4, 561, 562, 563, 564, 565, + 5, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 584, 585, 586, 422, 587, 450, 588, 589, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 6, 423, 615, 616, 424, 437, + 617, 438, 618, 619, 620, 621, 622, 623, 624, 625, + 7, 626, 627, 628, 629, 630, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 451, 452, 642, + 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, + 663, 8, 664, 665, 666, 667, 668, 669, 670, 671, + 672, 673, 674, 675, 676, 677, 453, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 9, 464, 465, 466, 713, 714, 715, 716, + 717, 718, 719, 469, 720, 721, 425, 722, 10, 723, + 439, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 479, 480, 481, 482, 483, 11, 463, 733, 464, 465, + 466, 467, 468, 12, 734, 735, 736, 737, 469, 738, + 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 13, 755, 756, 0, + 14, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 746, - 747, 748, 749, 68, 69, 70, 750, 751, 752, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 757, 758, 759, 760, 71, 72, 73, 761, + 762, 763, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 753, 754, 755, 756, 757, 758, 759, 760, 761, 112, - 113, 114, 762, 115, 116, 117, 763, 764, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 112, 113, 114, 764, 765, 766, 767, 768, 769, 770, + 771, 772, 115, 116, 117, 773, 118, 119, 120, 774, + 775, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 765, 766, 767, 142, 768, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 769, 770, 771, - 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 140, 141, 142, 143, 144, 776, 777, 778, 145, 779, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, + 790, 791, 792, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 782, 191, - 783, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 784, 785, 786, 787, 788, 789, - 790, 791, 792, 793, 794, 205, 206, 207, 208, 209, - 210, 795, 796, 797, 798, 799, 800, 211, 801, 802, - 803, 804, 805, 806, 807, 212, 213, 808, 214, 215, - 809, 216, 217, 810, 811, 218, 219, 220, 221, 222, - 223, 224, 225, 812, 813, 814, 815, 816, 817, 818, - 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, - 829, 830, 831, 832 + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 793, 194, 794, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 208, 209, + 210, 211, 212, 213, 806, 807, 808, 809, 810, 811, + 214, 812, 813, 814, 815, 816, 817, 818, 215, 216, + 819, 217, 218, 820, 219, 220, 821, 822, 221, 222, + 223, 224, 225, 226, 227, 823, 824, 825, 228, 826, + 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, + 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 491, 492, 493, 494 }; static const yytype_int16 yycheck[] = { - 0, 43, 43, 45, 46, 43, 43, 268, 269, 111, - -1, 11, 10, 10, 51, 52, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 10, 10, - 10, 79, 80, 10, 44, 10, 10, 10, 10, 10, - 50, 95, 96, 97, 98, 99, 100, 101, 102, 236, - 237, 238, 239, 240, 106, 10, 104, 10, 10, 10, + 0, 43, 43, 45, 46, 43, 43, 267, 268, 111, + 33, 11, 10, 10, 51, 52, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 95, 96, + 97, 98, 99, 100, 101, 102, 10, 43, 10, 10, + 10, 79, 80, 10, 44, 236, 237, 238, 239, 240, + 50, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 10, 10, 10, 106, 10, 104, 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, 94, 137, 10, 10, 140, 136, @@ -1677,103 +1707,109 @@ static const yytype_int16 yycheck[] = 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, 242, 202, 244, 245, 246, 247, 248, 10, 10, + 10, 10, 202, 244, 245, 246, 10, 10, 10, 10, 10, 10, 10, 254, 10, 10, 258, 10, 218, 10, 257, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 235, 10, 10, 10, 10, - 10, 10, 10, 243, 10, 10, 10, 10, 10, 10, + 271, 272, 273, 274, 275, 235, 242, 10, 244, 245, + 246, 247, 248, 243, 10, 10, 10, 10, 254, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, -1, 267, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 10, - 10, 10, 10, 47, 48, 49, 10, 10, 10, 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, 88, 89, 90, 91, 92, 93, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 103, - 104, 105, 10, 107, 108, 109, 10, 10, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 10, 10, 10, 139, 10, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 266, 10, 10, -1, + 270, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 10, 10, 10, 10, 47, 48, 49, 10, + 10, 10, 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, 88, 89, 90, + 91, 92, 93, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 103, 104, 105, 10, 107, 108, 109, 10, + 10, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 10, 10, 10, 139, 10, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 10, 203, 10, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 229, 230, + 231, 232, 233, 234, 10, 10, 10, 10, 10, 10, + 241, 10, 10, 10, 10, 10, 10, 10, 249, 250, + 10, 252, 253, 10, 255, 256, 10, 10, 259, 260, + 261, 262, 263, 264, 265, 10, 10, 10, 269, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 10, 203, - 10, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 229, 230, 231, 232, 233, - 234, 10, 10, 10, 10, 10, 10, 241, 10, 10, - 10, 10, 10, 10, 10, 249, 250, 10, 252, 253, - 10, 255, 256, 10, 10, 259, 260, 261, 262, 263, - 264, 265, 266, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33, 33, 33, 33 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 271, 0, 11, 44, 50, 94, 110, 151, 202, - 218, 235, 243, 267, 272, 273, 276, 279, 282, 285, - 500, 511, 526, 534, 547, 556, 274, 277, 280, 283, - 286, 501, 512, 527, 535, 548, 557, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 47, 48, - 49, 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, 88, 89, 90, 91, - 92, 93, 103, 104, 105, 107, 108, 109, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 139, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 203, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 229, 230, 231, 232, 233, - 234, 241, 249, 250, 252, 253, 255, 256, 259, 260, - 261, 262, 263, 264, 265, 266, 275, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 530, 531, 532, 533, 555, 43, 45, 46, 106, - 137, 140, 258, 278, 472, 473, 474, 475, 476, 477, - 478, 43, 51, 52, 136, 138, 257, 281, 479, 480, - 481, 482, 483, 484, 43, 79, 80, 104, 165, 166, - 204, 284, 493, 494, 495, 496, 497, 498, 499, 43, - 242, 244, 245, 246, 247, 248, 254, 287, 485, 486, - 487, 488, 489, 490, 491, 492, 95, 96, 97, 98, - 99, 100, 101, 102, 502, 503, 504, 505, 506, 507, - 508, 509, 510, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 524, 525, 111, 528, - 529, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 236, 237, 238, 239, 240, 549, 550, 551, - 552, 553, 554, 268, 269, 558, 559, 560, 10, 10, + 0, 277, 0, 11, 44, 50, 94, 110, 151, 202, + 218, 235, 243, 266, 270, 278, 279, 282, 285, 288, + 291, 299, 514, 525, 540, 548, 561, 570, 280, 283, + 286, 289, 292, 300, 515, 526, 541, 549, 562, 571, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 47, 48, 49, 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, 88, + 89, 90, 91, 92, 93, 103, 104, 105, 107, 108, + 109, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 139, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 203, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 229, 230, + 231, 232, 233, 234, 241, 249, 250, 252, 253, 255, + 256, 259, 260, 261, 262, 263, 264, 265, 269, 281, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 544, 545, 546, 547, 569, 43, + 45, 46, 106, 137, 140, 258, 284, 486, 487, 488, + 489, 490, 491, 492, 43, 51, 52, 136, 138, 257, + 287, 493, 494, 495, 496, 497, 498, 43, 79, 80, + 104, 165, 166, 204, 290, 507, 508, 509, 510, 511, + 512, 513, 43, 242, 244, 245, 246, 247, 248, 254, + 293, 499, 500, 501, 502, 503, 504, 505, 506, 271, + 272, 273, 274, 275, 294, 295, 296, 297, 298, 301, + 499, 500, 501, 502, 503, 95, 96, 97, 98, 99, + 100, 101, 102, 516, 517, 518, 519, 520, 521, 522, + 523, 524, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 111, 542, 543, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 236, 237, 238, 239, 240, 563, 564, 565, 566, + 567, 568, 267, 268, 572, 573, 574, 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, @@ -1801,75 +1837,77 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 270, 271, 271, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 273, 274, 274, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 276, 277, 277, - 278, 278, 278, 278, 278, 278, 278, 279, 280, 280, - 281, 281, 281, 281, 281, 281, 282, 283, 283, 284, - 284, 284, 284, 284, 284, 284, 285, 286, 286, 287, - 287, 287, 287, 287, 287, 287, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 501, 502, 502, 502, 502, 502, 502, 502, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 512, 513, 513, 513, 513, 513, 513, 513, 513, 513, - 513, 513, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 524, 525, 526, 527, 527, 528, 529, - 530, 531, 532, 533, 534, 535, 535, 536, 536, 536, - 536, 536, 536, 536, 536, 536, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 548, - 549, 549, 549, 549, 549, 550, 551, 552, 553, 554, - 555, 556, 557, 557, 558, 558, 559, 560 + 0, 276, 277, 277, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 279, 280, 280, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 282, 283, + 283, 284, 284, 284, 284, 284, 284, 284, 285, 286, + 286, 287, 287, 287, 287, 287, 287, 288, 289, 289, + 290, 290, 290, 290, 290, 290, 290, 291, 292, 292, + 293, 293, 293, 293, 293, 293, 293, 293, 294, 295, + 296, 297, 298, 299, 300, 300, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 515, 516, 516, 516, 516, 516, 516, 516, 516, 517, + 518, 519, 520, 521, 522, 523, 524, 525, 526, 526, + 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, + 527, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 549, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 562, 563, + 563, 563, 563, 563, 564, 565, 566, 567, 568, 569, + 570, 571, 571, 572, 572, 573, 574 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, + 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1888,11 +1926,13 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, @@ -1904,26 +1944,26 @@ static const yytype_uint8 yyr2[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 3, 4, 4, 4, 3, 3, - 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, + 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, + 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 3, 3, 2, 2, 2, 1, - 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 2, 0, 1, 2, - 2, 2, 3, 3, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 3, 3, 3, 2, 2, 2, 1, 2, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 3, 1, 2, 0, 1, 1, 2, 2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 2, 0, 1, 2, 2, + 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, + 1, 2, 0, 1, 1, 2, 2 }; @@ -1939,22 +1979,22 @@ static const yytype_uint8 yyr2[] = #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ - do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ - while (0) +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (0) /* Error token number */ #define YYTERROR 1 @@ -1994,37 +2034,37 @@ do { \ } while (0) -/*-----------------------------------. -| Print this symbol's value on YYO. | -`-----------------------------------*/ +/*----------------------------------------. +| Print this symbol's value on YYOUTPUT. | +`----------------------------------------*/ static void -yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) { - FILE *yyoutput = yyo; - YYUSE (yyoutput); + FILE *yyo = yyoutput; + YYUSE (yyo); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyo, yytoknum[yytype], *yyvaluep); + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif YYUSE (yytype); } -/*---------------------------. -| Print this symbol on YYO. | -`---------------------------*/ +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ static void -yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) { - YYFPRINTF (yyo, "%s %s (", + YYFPRINTF (yyoutput, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyo, yytype, yyvaluep); - YYFPRINTF (yyo, ")"); + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. @@ -2058,7 +2098,7 @@ do { \ static void yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) { - unsigned long yylno = yyrline[yyrule]; + unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", @@ -2069,7 +2109,7 @@ yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[yyssp[yyi + 1 - yynrhs]], - &yyvsp[(yyi + 1) - (yynrhs)] + &(yyvsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } @@ -2173,10 +2213,7 @@ yytnamerr (char *yyres, const char *yystr) case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - else - goto append; - - append: + /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; @@ -2194,7 +2231,7 @@ yytnamerr (char *yyres, const char *yystr) if (! yyres) return yystrlen (yystr); - return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres); + return yystpcpy (yyres, yystr) - yyres; } # endif @@ -2272,10 +2309,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; + yysize = yysize1; } } } @@ -2287,7 +2324,6 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, case N: \ yyformat = S; \ break - default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -2299,10 +2335,9 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, { YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; + yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -2428,33 +2463,23 @@ yyparse (void) yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; - /*------------------------------------------------------------. -| yynewstate -- push a new state, which is found in yystate. | +| yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ -yynewstate: + yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - -/*--------------------------------------------------------------------. -| yynewstate -- set current state (the top of the stack) to yystate. | -`--------------------------------------------------------------------*/ -yysetstate: - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - YY_ASSERT (0 <= yystate && yystate < YYNSTATES); - *yyssp = (yytype_int16) yystate; + yysetstate: + *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) -#if !defined yyoverflow && !defined YYSTACK_RELOCATE - goto yyexhaustedlab; -#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1); + YYSIZE_T yysize = yyssp - yyss + 1; -# if defined yyoverflow +#ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into @@ -2470,10 +2495,14 @@ yyparse (void) &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); + yyss = yyss1; yyvs = yyvs1; } -# else /* defined YYSTACK_RELOCATE */ +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -2489,33 +2518,35 @@ yyparse (void) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif +#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long) yystacksize)); + (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } -#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; - /*-----------. | yybackup. | `-----------*/ yybackup: + /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -2573,6 +2604,7 @@ yyparse (void) YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + goto yynewstate; @@ -2587,7 +2619,7 @@ yyparse (void) /*-----------------------------. -| yyreduce -- do a reduction. | +| yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -2607,16 +2639,16 @@ yyparse (void) YY_REDUCE_PRINT (yyn); switch (yyn) { - case 15: -#line 183 "./util/configparser.y" + case 16: +#line 185 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2616 "util/configparser.c" +#line 2648 "util/configparser.c" /* yacc.c:1646 */ break; - case 207: -#line 274 "./util/configparser.y" + case 208: +#line 276 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2627,11 +2659,11 @@ yyparse (void) } else yyerror("out of memory"); } -#line 2631 "util/configparser.c" +#line 2663 "util/configparser.c" /* yacc.c:1646 */ break; - case 217: -#line 291 "./util/configparser.y" + case 218: +#line 293 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2642,11 +2674,11 @@ yyparse (void) } else yyerror("out of memory"); } -#line 2646 "util/configparser.c" +#line 2678 "util/configparser.c" /* yacc.c:1646 */ break; - case 226: -#line 308 "./util/configparser.y" + case 227: +#line 310 "./util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2659,11 +2691,11 @@ yyparse (void) } else yyerror("out of memory"); } -#line 2663 "util/configparser.c" +#line 2695 "util/configparser.c" /* yacc.c:1646 */ break; - case 236: -#line 327 "./util/configparser.y" + case 237: +#line 329 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2675,14 +2707,107 @@ yyparse (void) s->for_downstream = 1; s->for_upstream = 1; s->fallback_enabled = 0; + s->isrpz = 0; + } else + yyerror("out of memory"); + } +#line 2715 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 248: +#line 353 "./util/configparser.y" /* yacc.c:1646 */ + { + uint8_t* bitlist; + size_t len = 0; + OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str))); + bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), + &len); + free((yyvsp[0].str)); + if(!bitlist) { + yyerror("could not parse tags, (define-tag them first)"); + } + if(bitlist) { + cfg_parser->cfg->auths->rpz_taglist = bitlist; + cfg_parser->cfg->auths->rpz_taglistlen = len; + + } + } +#line 2736 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 249: +#line 372 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && + strcmp((yyvsp[0].str), "passthru")!=0 && strcmp((yyvsp[0].str), "drop")!=0 && + strcmp((yyvsp[0].str), "cname")!=0 && strcmp((yyvsp[0].str), "disabled")!=0) { + yyerror("rpz-action-override action: expected nxdomain, " + "nodata, passthru, drop, cname or disabled"); + free((yyvsp[0].str)); + cfg_parser->cfg->auths->rpz_action_override = NULL; + } + else { + cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); + } + } +#line 2755 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 250: +#line 389 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); + free(cfg_parser->cfg->auths->rpz_cname); + cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); + } +#line 2765 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 251: +#line 397 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 2777 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 252: +#line 407 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); + free(cfg_parser->cfg->auths->rpz_log_name); + cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); + } +#line 2787 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 253: +#line 415 "./util/configparser.y" /* yacc.c:1646 */ + { + struct config_auth* s; + OUTYY(("\nP(rpz:)\n")); + s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); + if(s) { + s->next = cfg_parser->cfg->auths; + cfg_parser->cfg->auths = s; + /* defaults for RPZ auth zone */ + s->for_downstream = 0; + s->for_upstream = 0; + s->fallback_enabled = 0; + s->isrpz = 1; } else yyerror("out of memory"); } -#line 2682 "util/configparser.c" +#line 2807 "util/configparser.c" /* yacc.c:1646 */ break; - case 247: -#line 349 "./util/configparser.y" + case 266: +#line 438 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2690,11 +2815,11 @@ yyparse (void) else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2694 "util/configparser.c" +#line 2819 "util/configparser.c" /* yacc.c:1646 */ break; - case 248: -#line 358 "./util/configparser.y" + case 267: +#line 447 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2702,11 +2827,11 @@ yyparse (void) else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2706 "util/configparser.c" +#line 2831 "util/configparser.c" /* yacc.c:1646 */ break; - case 249: -#line 367 "./util/configparser.y" + case 268: +#line 456 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2716,11 +2841,11 @@ yyparse (void) else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2720 "util/configparser.c" +#line 2845 "util/configparser.c" /* yacc.c:1646 */ break; - case 250: -#line 378 "./util/configparser.y" + case 269: +#line 467 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2728,11 +2853,11 @@ yyparse (void) else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2732 "util/configparser.c" +#line 2857 "util/configparser.c" /* yacc.c:1646 */ break; - case 251: -#line 387 "./util/configparser.y" + case 270: +#line 476 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2740,11 +2865,11 @@ yyparse (void) else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2744 "util/configparser.c" +#line 2869 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: -#line 396 "./util/configparser.y" + case 271: +#line 485 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2752,11 +2877,11 @@ yyparse (void) else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2756 "util/configparser.c" +#line 2881 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: -#line 405 "./util/configparser.y" + case 272: +#line 494 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2766,11 +2891,11 @@ yyparse (void) else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2770 "util/configparser.c" +#line 2895 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 416 "./util/configparser.y" + case 273: +#line 505 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2778,11 +2903,11 @@ yyparse (void) else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2782 "util/configparser.c" +#line 2907 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 425 "./util/configparser.y" + case 274: +#line 514 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2793,11 +2918,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 2797 "util/configparser.c" +#line 2922 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 437 "./util/configparser.y" + case 275: +#line 526 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2809,11 +2934,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 2813 "util/configparser.c" +#line 2938 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 451 "./util/configparser.y" + case 276: +#line 540 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2827,11 +2952,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 2831 "util/configparser.c" +#line 2956 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: -#line 466 "./util/configparser.y" + case 277: +#line 555 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2841,11 +2966,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 2845 "util/configparser.c" +#line 2970 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: -#line 477 "./util/configparser.y" + case 278: +#line 566 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2861,11 +2986,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 2865 "util/configparser.c" +#line 2990 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: -#line 494 "./util/configparser.y" + case 279: +#line 583 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2881,11 +3006,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 2885 "util/configparser.c" +#line 3010 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: -#line 511 "./util/configparser.y" + case 280: +#line 600 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2901,11 +3026,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 2905 "util/configparser.c" +#line 3030 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: -#line 528 "./util/configparser.y" + case 281: +#line 617 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2921,11 +3046,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 2925 "util/configparser.c" +#line 3050 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: -#line 545 "./util/configparser.y" + case 282: +#line 634 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -2939,11 +3064,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 2943 "util/configparser.c" +#line 3068 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 560 "./util/configparser.y" + case 283: +#line 649 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -2957,11 +3082,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 2961 "util/configparser.c" +#line 3086 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 575 "./util/configparser.y" + case 284: +#line 664 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -2973,11 +3098,11 @@ yyparse (void) else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2977 "util/configparser.c" +#line 3102 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 588 "./util/configparser.y" + case 285: +#line 677 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -2991,11 +3116,11 @@ yyparse (void) cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2995 "util/configparser.c" +#line 3120 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 603 "./util/configparser.y" + case 286: +#line 692 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3003,11 +3128,11 @@ yyparse (void) else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3007 "util/configparser.c" +#line 3132 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 612 "./util/configparser.y" + case 287: +#line 701 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3015,11 +3140,11 @@ yyparse (void) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3019 "util/configparser.c" +#line 3144 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 621 "./util/configparser.y" + case 288: +#line 710 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3027,11 +3152,11 @@ yyparse (void) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3031 "util/configparser.c" +#line 3156 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 630 "./util/configparser.y" + case 289: +#line 719 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3039,11 +3164,11 @@ yyparse (void) else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3043 "util/configparser.c" +#line 3168 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 639 "./util/configparser.y" + case 290: +#line 728 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3051,11 +3176,11 @@ yyparse (void) else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3055 "util/configparser.c" +#line 3180 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 648 "./util/configparser.y" + case 291: +#line 737 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3063,11 +3188,11 @@ yyparse (void) else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3067 "util/configparser.c" +#line 3192 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 657 "./util/configparser.y" + case 292: +#line 746 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3075,11 +3200,11 @@ yyparse (void) else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3079 "util/configparser.c" +#line 3204 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 666 "./util/configparser.y" + case 293: +#line 755 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3087,11 +3212,11 @@ yyparse (void) else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3091 "util/configparser.c" +#line 3216 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 675 "./util/configparser.y" + case 294: +#line 764 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3099,11 +3224,11 @@ yyparse (void) else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3103 "util/configparser.c" +#line 3228 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 684 "./util/configparser.y" + case 295: +#line 773 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3111,11 +3236,11 @@ yyparse (void) else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3115 "util/configparser.c" +#line 3240 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 693 "./util/configparser.y" + case 296: +#line 782 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3123,11 +3248,11 @@ yyparse (void) else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3127 "util/configparser.c" +#line 3252 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 702 "./util/configparser.y" + case 297: +#line 791 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3135,11 +3260,11 @@ yyparse (void) else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3139 "util/configparser.c" +#line 3264 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 711 "./util/configparser.y" + case 298: +#line 800 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3147,11 +3272,11 @@ yyparse (void) else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3151 "util/configparser.c" +#line 3276 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 720 "./util/configparser.y" + case 299: +#line 809 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3163,11 +3288,11 @@ yyparse (void) else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3167 "util/configparser.c" +#line 3292 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 733 "./util/configparser.y" + case 300: +#line 822 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3175,11 +3300,11 @@ yyparse (void) else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3179 "util/configparser.c" +#line 3304 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 742 "./util/configparser.y" + case 301: +#line 831 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3191,11 +3316,11 @@ yyparse (void) else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3195 "util/configparser.c" +#line 3320 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 755 "./util/configparser.y" + case 302: +#line 844 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3203,11 +3328,11 @@ yyparse (void) else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3207 "util/configparser.c" +#line 3332 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 764 "./util/configparser.y" + case 303: +#line 853 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3215,11 +3340,11 @@ yyparse (void) else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3219 "util/configparser.c" +#line 3344 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 773 "./util/configparser.y" + case 304: +#line 862 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3227,31 +3352,31 @@ yyparse (void) else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3231 "util/configparser.c" +#line 3356 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 782 "./util/configparser.y" + case 305: +#line 871 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3241 "util/configparser.c" +#line 3366 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 789 "./util/configparser.y" + case 306: +#line 878 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3251 "util/configparser.c" +#line 3376 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 796 "./util/configparser.y" + case 307: +#line 885 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3259,21 +3384,21 @@ yyparse (void) else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3263 "util/configparser.c" +#line 3388 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 805 "./util/configparser.y" + case 308: +#line 894 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3273 "util/configparser.c" +#line 3398 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 812 "./util/configparser.y" + case 309: +#line 901 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3281,53 +3406,53 @@ yyparse (void) else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3285 "util/configparser.c" +#line 3410 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 821 "./util/configparser.y" + case 310: +#line 910 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3296 "util/configparser.c" +#line 3421 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 829 "./util/configparser.y" + case 311: +#line 918 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 3306 "util/configparser.c" +#line 3431 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 836 "./util/configparser.y" + case 312: +#line 925 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 3316 "util/configparser.c" +#line 3441 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 843 "./util/configparser.y" + case 313: +#line 932 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3327 "util/configparser.c" +#line 3452 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 851 "./util/configparser.y" + case 314: +#line 940 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3335,11 +3460,11 @@ yyparse (void) else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3339 "util/configparser.c" +#line 3464 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 860 "./util/configparser.y" + case 315: +#line 949 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3347,11 +3472,11 @@ yyparse (void) else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3351 "util/configparser.c" +#line 3476 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 869 "./util/configparser.y" + case 316: +#line 958 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3364,11 +3489,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3368 "util/configparser.c" +#line 3493 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 883 "./util/configparser.y" + case 317: +#line 972 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3376,11 +3501,11 @@ yyparse (void) else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3380 "util/configparser.c" +#line 3505 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 892 "./util/configparser.y" + case 318: +#line 981 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3388,11 +3513,11 @@ yyparse (void) else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3392 "util/configparser.c" +#line 3517 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 901 "./util/configparser.y" + case 319: +#line 990 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3400,11 +3525,11 @@ yyparse (void) else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3404 "util/configparser.c" +#line 3529 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 910 "./util/configparser.y" + case 320: +#line 999 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3412,11 +3537,11 @@ yyparse (void) else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3416 "util/configparser.c" +#line 3541 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 919 "./util/configparser.y" + case 321: +#line 1008 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3424,11 +3549,11 @@ yyparse (void) else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3428 "util/configparser.c" +#line 3553 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 928 "./util/configparser.y" + case 322: +#line 1017 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3436,31 +3561,31 @@ yyparse (void) else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3440 "util/configparser.c" +#line 3565 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 937 "./util/configparser.y" + case 323: +#line 1026 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3450 "util/configparser.c" +#line 3575 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 944 "./util/configparser.y" + case 324: +#line 1033 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3460 "util/configparser.c" +#line 3585 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 951 "./util/configparser.y" + case 325: +#line 1040 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3485,105 +3610,105 @@ yyparse (void) } } } -#line 3489 "util/configparser.c" +#line 3614 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 977 "./util/configparser.y" + case 326: +#line 1066 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3500 "util/configparser.c" +#line 3625 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 985 "./util/configparser.y" + case 327: +#line 1074 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3510 "util/configparser.c" +#line 3635 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 992 "./util/configparser.y" + case 328: +#line 1081 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3520 "util/configparser.c" +#line 3645 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 999 "./util/configparser.y" + case 329: +#line 1088 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3530 "util/configparser.c" +#line 3655 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 1006 "./util/configparser.y" + case 330: +#line 1095 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3540 "util/configparser.c" +#line 3665 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 1013 "./util/configparser.y" + case 331: +#line 1102 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3551 "util/configparser.c" +#line 3676 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 1021 "./util/configparser.y" + case 332: +#line 1110 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3562 "util/configparser.c" +#line 3687 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 1029 "./util/configparser.y" + case 333: +#line 1118 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3573 "util/configparser.c" +#line 3698 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 1037 "./util/configparser.y" + case 334: +#line 1126 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3583 "util/configparser.c" +#line 3708 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 1044 "./util/configparser.y" + case 335: +#line 1133 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3593,11 +3718,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3597 "util/configparser.c" +#line 3722 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1055 "./util/configparser.y" + case 336: +#line 1144 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3607,21 +3732,21 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3611 "util/configparser.c" +#line 3736 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1066 "./util/configparser.y" + case 337: +#line 1155 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3621 "util/configparser.c" +#line 3746 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1073 "./util/configparser.y" + case 338: +#line 1162 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3629,11 +3754,11 @@ yyparse (void) else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3633 "util/configparser.c" +#line 3758 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1082 "./util/configparser.y" + case 339: +#line 1171 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3641,11 +3766,11 @@ yyparse (void) else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3645 "util/configparser.c" +#line 3770 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1091 "./util/configparser.y" + case 340: +#line 1180 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3653,53 +3778,53 @@ yyparse (void) else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3657 "util/configparser.c" +#line 3782 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1100 "./util/configparser.y" + case 341: +#line 1189 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3667 "util/configparser.c" +#line 3792 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1107 "./util/configparser.y" + case 342: +#line 1196 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3677 "util/configparser.c" +#line 3802 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1114 "./util/configparser.y" + case 343: +#line 1203 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3688 "util/configparser.c" +#line 3813 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1122 "./util/configparser.y" + case 344: +#line 1211 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3699 "util/configparser.c" +#line 3824 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1130 "./util/configparser.y" + case 345: +#line 1219 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3708,11 +3833,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3712 "util/configparser.c" +#line 3837 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1140 "./util/configparser.y" + case 346: +#line 1229 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3721,11 +3846,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3725 "util/configparser.c" +#line 3850 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1150 "./util/configparser.y" + case 347: +#line 1239 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3734,22 +3859,22 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3738 "util/configparser.c" +#line 3863 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1160 "./util/configparser.y" + case 348: +#line 1249 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3749 "util/configparser.c" +#line 3874 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1168 "./util/configparser.y" + case 349: +#line 1257 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3761,11 +3886,11 @@ yyparse (void) else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3765 "util/configparser.c" +#line 3890 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1181 "./util/configparser.y" + case 350: +#line 1270 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3775,22 +3900,22 @@ yyparse (void) else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3779 "util/configparser.c" +#line 3904 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1192 "./util/configparser.y" + case 351: +#line 1281 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3790 "util/configparser.c" +#line 3915 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1200 "./util/configparser.y" + case 352: +#line 1289 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3802,11 +3927,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 3806 "util/configparser.c" +#line 3931 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1213 "./util/configparser.y" + case 353: +#line 1302 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3814,11 +3939,11 @@ yyparse (void) else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3818 "util/configparser.c" +#line 3943 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1222 "./util/configparser.y" + case 354: +#line 1311 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3826,11 +3951,11 @@ yyparse (void) else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3830 "util/configparser.c" +#line 3955 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1231 "./util/configparser.y" + case 355: +#line 1320 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3838,11 +3963,11 @@ yyparse (void) else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3842 "util/configparser.c" +#line 3967 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1240 "./util/configparser.y" + case 356: +#line 1329 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3851,11 +3976,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3855 "util/configparser.c" +#line 3980 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1250 "./util/configparser.y" + case 357: +#line 1339 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3864,22 +3989,22 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3868 "util/configparser.c" +#line 3993 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1260 "./util/configparser.y" + case 358: +#line 1349 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3879 "util/configparser.c" +#line 4004 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1268 "./util/configparser.y" + case 359: +#line 1357 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3891,11 +4016,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 3895 "util/configparser.c" +#line 4020 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1281 "./util/configparser.y" + case 360: +#line 1370 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3903,22 +4028,22 @@ yyparse (void) else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3907 "util/configparser.c" +#line 4032 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1290 "./util/configparser.y" + case 361: +#line 1379 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3918 "util/configparser.c" +#line 4043 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1298 "./util/configparser.y" + case 362: +#line 1387 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3926,22 +4051,22 @@ yyparse (void) else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3930 "util/configparser.c" +#line 4055 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1307 "./util/configparser.y" + case 363: +#line 1396 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3941 "util/configparser.c" +#line 4066 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1315 "./util/configparser.y" + case 364: +#line 1404 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3953,11 +4078,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 3957 "util/configparser.c" +#line 4082 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1328 "./util/configparser.y" + case 365: +#line 1417 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3965,21 +4090,21 @@ yyparse (void) else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3969 "util/configparser.c" +#line 4094 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1337 "./util/configparser.y" + case 366: +#line 1426 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 3979 "util/configparser.c" +#line 4104 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1344 "./util/configparser.y" + case 367: +#line 1433 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3988,11 +4113,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3992 "util/configparser.c" +#line 4117 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1354 "./util/configparser.y" + case 368: +#line 1443 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4001,11 +4126,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4005 "util/configparser.c" +#line 4130 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1364 "./util/configparser.y" + case 369: +#line 1453 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4014,11 +4139,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4018 "util/configparser.c" +#line 4143 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1374 "./util/configparser.y" + case 370: +#line 1463 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4027,11 +4152,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4031 "util/configparser.c" +#line 4156 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1384 "./util/configparser.y" + case 371: +#line 1473 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4040,11 +4165,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4044 "util/configparser.c" +#line 4169 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1394 "./util/configparser.y" + case 372: +#line 1483 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4053,11 +4178,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4057 "util/configparser.c" +#line 4182 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1404 "./util/configparser.y" + case 373: +#line 1493 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4066,11 +4191,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4070 "util/configparser.c" +#line 4195 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1414 "./util/configparser.y" + case 374: +#line 1503 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4079,41 +4204,41 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4083 "util/configparser.c" +#line 4208 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1424 "./util/configparser.y" + case 375: +#line 1513 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4093 "util/configparser.c" +#line 4218 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1431 "./util/configparser.y" + case 376: +#line 1520 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4103 "util/configparser.c" +#line 4228 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1438 "./util/configparser.y" + case 377: +#line 1527 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4113 "util/configparser.c" +#line 4238 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1445 "./util/configparser.y" + case 378: +#line 1534 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4121,11 +4246,11 @@ yyparse (void) else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4125 "util/configparser.c" +#line 4250 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1454 "./util/configparser.y" + case 379: +#line 1543 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4133,11 +4258,11 @@ yyparse (void) else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4137 "util/configparser.c" +#line 4262 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1463 "./util/configparser.y" + case 380: +#line 1552 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4145,11 +4270,11 @@ yyparse (void) else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4149 "util/configparser.c" +#line 4274 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1472 "./util/configparser.y" + case 381: +#line 1561 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4157,21 +4282,21 @@ yyparse (void) else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4161 "util/configparser.c" +#line 4286 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1481 "./util/configparser.y" + case 382: +#line 1570 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4171 "util/configparser.c" +#line 4296 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1488 "./util/configparser.y" + case 383: +#line 1577 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4180,11 +4305,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4184 "util/configparser.c" +#line 4309 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1498 "./util/configparser.y" + case 384: +#line 1587 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4203,21 +4328,21 @@ yyparse (void) fatal_exit("out of memory adding acl"); } } -#line 4207 "util/configparser.c" +#line 4332 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1518 "./util/configparser.y" + case 385: +#line 1607 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4217 "util/configparser.c" +#line 4342 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1525 "./util/configparser.y" + case 386: +#line 1614 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4234,11 +4359,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4238 "util/configparser.c" +#line 4363 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1543 "./util/configparser.y" + case 387: +#line 1632 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4250,11 +4375,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4254 "util/configparser.c" +#line 4379 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1556 "./util/configparser.y" + case 388: +#line 1645 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4266,11 +4391,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4270 "util/configparser.c" +#line 4395 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1569 "./util/configparser.y" + case 389: +#line 1658 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4278,11 +4403,11 @@ yyparse (void) else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4282 "util/configparser.c" +#line 4407 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1578 "./util/configparser.y" + case 390: +#line 1667 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4290,11 +4415,11 @@ yyparse (void) else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4294 "util/configparser.c" +#line 4419 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 1587 "./util/configparser.y" + case 391: +#line 1676 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4302,11 +4427,11 @@ yyparse (void) else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4306 "util/configparser.c" +#line 4431 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 1596 "./util/configparser.y" + case 392: +#line 1685 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4314,11 +4439,11 @@ yyparse (void) else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4318 "util/configparser.c" +#line 4443 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 1605 "./util/configparser.y" + case 393: +#line 1694 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4327,11 +4452,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4331 "util/configparser.c" +#line 4456 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 1615 "./util/configparser.y" + case 394: +#line 1704 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4340,11 +4465,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4344 "util/configparser.c" +#line 4469 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 1625 "./util/configparser.y" + case 395: +#line 1714 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4354,11 +4479,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4358 "util/configparser.c" +#line 4483 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 1636 "./util/configparser.y" + case 396: +#line 1725 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4366,11 +4491,11 @@ yyparse (void) else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4370 "util/configparser.c" +#line 4495 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 1645 "./util/configparser.y" + case 397: +#line 1734 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4378,11 +4503,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4382 "util/configparser.c" +#line 4507 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 1654 "./util/configparser.y" + case 398: +#line 1743 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4390,11 +4515,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4394 "util/configparser.c" +#line 4519 "util/configparser.c" /* yacc.c:1646 */ break; - case 380: -#line 1663 "./util/configparser.y" + case 399: +#line 1752 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4402,11 +4527,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4406 "util/configparser.c" +#line 4531 "util/configparser.c" /* yacc.c:1646 */ break; - case 381: -#line 1672 "./util/configparser.y" + case 400: +#line 1761 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4418,11 +4543,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 4422 "util/configparser.c" +#line 4547 "util/configparser.c" /* yacc.c:1646 */ break; - case 382: -#line 1685 "./util/configparser.y" + case 401: +#line 1774 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4434,11 +4559,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 4438 "util/configparser.c" +#line 4563 "util/configparser.c" /* yacc.c:1646 */ break; - case 383: -#line 1698 "./util/configparser.y" + case 402: +#line 1787 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4446,21 +4571,21 @@ yyparse (void) else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4450 "util/configparser.c" +#line 4575 "util/configparser.c" /* yacc.c:1646 */ break; - case 384: -#line 1707 "./util/configparser.y" + case 403: +#line 1796 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4460 "util/configparser.c" +#line 4585 "util/configparser.c" /* yacc.c:1646 */ break; - case 385: -#line 1714 "./util/configparser.y" + case 404: +#line 1803 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4468,11 +4593,11 @@ yyparse (void) else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4472 "util/configparser.c" +#line 4597 "util/configparser.c" /* yacc.c:1646 */ break; - case 386: -#line 1723 "./util/configparser.y" + case 405: +#line 1812 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4480,11 +4605,11 @@ yyparse (void) else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4484 "util/configparser.c" +#line 4609 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 1732 "./util/configparser.y" + case 406: +#line 1821 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4492,11 +4617,11 @@ yyparse (void) else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4496 "util/configparser.c" +#line 4621 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 1741 "./util/configparser.y" + case 407: +#line 1830 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4505,22 +4630,22 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4509 "util/configparser.c" +#line 4634 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 1750 "./util/configparser.y" + case 408: +#line 1839 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4520 "util/configparser.c" +#line 4645 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 1758 "./util/configparser.y" + case 409: +#line 1847 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4532,22 +4657,22 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4536 "util/configparser.c" +#line 4661 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 1771 "./util/configparser.y" + case 410: +#line 1860 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4547 "util/configparser.c" +#line 4672 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 1779 "./util/configparser.y" + case 411: +#line 1868 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4587,21 +4712,21 @@ yyparse (void) fatal_exit("out of memory adding local-zone"); } } -#line 4591 "util/configparser.c" +#line 4716 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 1820 "./util/configparser.y" + case 412: +#line 1909 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 4601 "util/configparser.c" +#line 4726 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 1827 "./util/configparser.y" + case 413: +#line 1916 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4615,11 +4740,11 @@ yyparse (void) yyerror("local-data-ptr could not be reversed"); } } -#line 4619 "util/configparser.c" +#line 4744 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 1842 "./util/configparser.y" + case 414: +#line 1931 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4628,11 +4753,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4632 "util/configparser.c" +#line 4757 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 1852 "./util/configparser.y" + case 415: +#line 1941 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4641,41 +4766,41 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4645 "util/configparser.c" +#line 4770 "util/configparser.c" /* yacc.c:1646 */ break; - case 397: -#line 1862 "./util/configparser.y" + case 416: +#line 1951 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4655 "util/configparser.c" +#line 4780 "util/configparser.c" /* yacc.c:1646 */ break; - case 398: -#line 1869 "./util/configparser.y" + case 417: +#line 1958 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4665 "util/configparser.c" +#line 4790 "util/configparser.c" /* yacc.c:1646 */ break; - case 399: -#line 1876 "./util/configparser.y" + case 418: +#line 1965 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4675 "util/configparser.c" +#line 4800 "util/configparser.c" /* yacc.c:1646 */ break; - case 400: -#line 1883 "./util/configparser.y" + case 419: +#line 1972 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4683,22 +4808,22 @@ yyparse (void) else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4687 "util/configparser.c" +#line 4812 "util/configparser.c" /* yacc.c:1646 */ break; - case 401: -#line 1892 "./util/configparser.y" + case 420: +#line 1981 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 4698 "util/configparser.c" +#line 4823 "util/configparser.c" /* yacc.c:1646 */ break; - case 402: -#line 1900 "./util/configparser.y" + case 421: +#line 1989 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4711,11 +4836,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4715 "util/configparser.c" +#line 4840 "util/configparser.c" /* yacc.c:1646 */ break; - case 403: -#line 1914 "./util/configparser.y" + case 422: +#line 2003 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4735,11 +4860,11 @@ yyparse (void) } } } -#line 4739 "util/configparser.c" +#line 4864 "util/configparser.c" /* yacc.c:1646 */ break; - case 404: -#line 1935 "./util/configparser.y" + case 423: +#line 2024 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4759,11 +4884,11 @@ yyparse (void) } } } -#line 4763 "util/configparser.c" +#line 4888 "util/configparser.c" /* yacc.c:1646 */ break; - case 405: -#line 1956 "./util/configparser.y" + case 424: +#line 2045 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -4774,11 +4899,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 4778 "util/configparser.c" +#line 4903 "util/configparser.c" /* yacc.c:1646 */ break; - case 406: -#line 1968 "./util/configparser.y" + case 425: +#line 2057 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -4789,11 +4914,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 4793 "util/configparser.c" +#line 4918 "util/configparser.c" /* yacc.c:1646 */ break; - case 407: -#line 1980 "./util/configparser.y" + case 426: +#line 2069 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -4804,11 +4929,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 4808 "util/configparser.c" +#line 4933 "util/configparser.c" /* yacc.c:1646 */ break; - case 408: -#line 1992 "./util/configparser.y" + case 427: +#line 2081 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4816,11 +4941,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 4820 "util/configparser.c" +#line 4945 "util/configparser.c" /* yacc.c:1646 */ break; - case 409: -#line 2001 "./util/configparser.y" + case 428: +#line 2090 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4840,11 +4965,11 @@ yyparse (void) } } } -#line 4844 "util/configparser.c" +#line 4969 "util/configparser.c" /* yacc.c:1646 */ break; - case 410: -#line 2022 "./util/configparser.y" + case 429: +#line 2111 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4852,11 +4977,11 @@ yyparse (void) else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4856 "util/configparser.c" +#line 4981 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 2032 "./util/configparser.y" + case 430: +#line 2121 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4864,33 +4989,33 @@ yyparse (void) else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4868 "util/configparser.c" +#line 4993 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 2041 "./util/configparser.y" + case 431: +#line 2130 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4879 "util/configparser.c" +#line 5004 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 2049 "./util/configparser.y" + case 432: +#line 2138 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4890 "util/configparser.c" +#line 5015 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 2057 "./util/configparser.y" + case 433: +#line 2146 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4902,11 +5027,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4906 "util/configparser.c" +#line 5031 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 2070 "./util/configparser.y" + case 434: +#line 2159 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4918,11 +5043,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4922 "util/configparser.c" +#line 5047 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 2083 "./util/configparser.y" + case 435: +#line 2172 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4936,11 +5061,11 @@ yyparse (void) "ratelimit-for-domain"); } } -#line 4940 "util/configparser.c" +#line 5065 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 2098 "./util/configparser.y" + case 436: +#line 2187 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4954,11 +5079,11 @@ yyparse (void) "ratelimit-below-domain"); } } -#line 4958 "util/configparser.c" +#line 5083 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 2113 "./util/configparser.y" + case 437: +#line 2202 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4966,11 +5091,11 @@ yyparse (void) else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4970 "util/configparser.c" +#line 5095 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 2122 "./util/configparser.y" + case 438: +#line 2211 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4978,20 +5103,20 @@ yyparse (void) else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4982 "util/configparser.c" +#line 5107 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 2131 "./util/configparser.y" + case 439: +#line 2220 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 4991 "util/configparser.c" +#line 5116 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 2137 "./util/configparser.y" + case 440: +#line 2226 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -4999,11 +5124,11 @@ yyparse (void) else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5003 "util/configparser.c" +#line 5128 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 2146 "./util/configparser.y" + case 441: +#line 2235 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5011,11 +5136,11 @@ yyparse (void) else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5015 "util/configparser.c" +#line 5140 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 2155 "./util/configparser.y" + case 442: +#line 2244 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5024,11 +5149,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5028 "util/configparser.c" +#line 5153 "util/configparser.c" /* yacc.c:1646 */ break; - case 424: -#line 2165 "./util/configparser.y" + case 443: +#line 2254 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5037,11 +5162,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5041 "util/configparser.c" +#line 5166 "util/configparser.c" /* yacc.c:1646 */ break; - case 425: -#line 2175 "./util/configparser.y" + case 444: +#line 2264 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5053,11 +5178,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 5057 "util/configparser.c" +#line 5182 "util/configparser.c" /* yacc.c:1646 */ break; - case 426: -#line 2188 "./util/configparser.y" + case 445: +#line 2277 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5069,11 +5194,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 5073 "util/configparser.c" +#line 5198 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2201 "./util/configparser.y" + case 446: +#line 2290 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5084,11 +5209,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 5088 "util/configparser.c" +#line 5213 "util/configparser.c" /* yacc.c:1646 */ break; - case 428: -#line 2213 "./util/configparser.y" + case 447: +#line 2302 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5101,11 +5226,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 5105 "util/configparser.c" +#line 5230 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2227 "./util/configparser.y" + case 448: +#line 2316 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5116,11 +5241,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 5120 "util/configparser.c" +#line 5245 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2239 "./util/configparser.y" + case 449: +#line 2328 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5133,11 +5258,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 5137 "util/configparser.c" +#line 5262 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2253 "./util/configparser.y" + case 450: +#line 2342 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5146,31 +5271,31 @@ yyparse (void) free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5150 "util/configparser.c" +#line 5275 "util/configparser.c" /* yacc.c:1646 */ break; - case 432: -#line 2263 "./util/configparser.y" + case 451: +#line 2352 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5160 "util/configparser.c" +#line 5285 "util/configparser.c" /* yacc.c:1646 */ break; - case 433: -#line 2270 "./util/configparser.y" + case 452: +#line 2359 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5170 "util/configparser.c" +#line 5295 "util/configparser.c" /* yacc.c:1646 */ break; - case 434: -#line 2277 "./util/configparser.y" + case 453: +#line 2366 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5178,11 +5303,11 @@ yyparse (void) else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5182 "util/configparser.c" +#line 5307 "util/configparser.c" /* yacc.c:1646 */ break; - case 435: -#line 2286 "./util/configparser.y" + case 454: +#line 2375 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5190,11 +5315,11 @@ yyparse (void) else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5194 "util/configparser.c" +#line 5319 "util/configparser.c" /* yacc.c:1646 */ break; - case 436: -#line 2295 "./util/configparser.y" + case 455: +#line 2384 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5203,11 +5328,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5207 "util/configparser.c" +#line 5332 "util/configparser.c" /* yacc.c:1646 */ break; - case 437: -#line 2305 "./util/configparser.y" + case 456: +#line 2394 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5216,11 +5341,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5220 "util/configparser.c" +#line 5345 "util/configparser.c" /* yacc.c:1646 */ break; - case 438: -#line 2315 "./util/configparser.y" + case 457: +#line 2404 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5229,31 +5354,31 @@ yyparse (void) free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5233 "util/configparser.c" +#line 5358 "util/configparser.c" /* yacc.c:1646 */ break; - case 439: -#line 2325 "./util/configparser.y" + case 458: +#line 2414 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5243 "util/configparser.c" +#line 5368 "util/configparser.c" /* yacc.c:1646 */ break; - case 440: -#line 2332 "./util/configparser.y" + case 459: +#line 2421 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5253 "util/configparser.c" +#line 5378 "util/configparser.c" /* yacc.c:1646 */ break; - case 441: -#line 2339 "./util/configparser.y" + case 460: +#line 2428 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5261,11 +5386,11 @@ yyparse (void) else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5265 "util/configparser.c" +#line 5390 "util/configparser.c" /* yacc.c:1646 */ break; - case 442: -#line 2348 "./util/configparser.y" + case 461: +#line 2437 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5273,11 +5398,11 @@ yyparse (void) else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5277 "util/configparser.c" +#line 5402 "util/configparser.c" /* yacc.c:1646 */ break; - case 443: -#line 2357 "./util/configparser.y" + case 462: +#line 2446 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5286,11 +5411,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5290 "util/configparser.c" +#line 5415 "util/configparser.c" /* yacc.c:1646 */ break; - case 444: -#line 2367 "./util/configparser.y" + case 463: +#line 2456 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5299,52 +5424,52 @@ yyparse (void) free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5303 "util/configparser.c" +#line 5428 "util/configparser.c" /* yacc.c:1646 */ break; - case 445: -#line 2377 "./util/configparser.y" + case 464: +#line 2466 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5313 "util/configparser.c" +#line 5438 "util/configparser.c" /* yacc.c:1646 */ break; - case 446: -#line 2384 "./util/configparser.y" + case 465: +#line 2473 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5323 "util/configparser.c" +#line 5448 "util/configparser.c" /* yacc.c:1646 */ break; - case 447: -#line 2391 "./util/configparser.y" + case 466: +#line 2480 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5333 "util/configparser.c" +#line 5458 "util/configparser.c" /* yacc.c:1646 */ break; - case 448: -#line 2398 "./util/configparser.y" + case 467: +#line 2487 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5344 "util/configparser.c" +#line 5469 "util/configparser.c" /* yacc.c:1646 */ break; - case 449: -#line 2406 "./util/configparser.y" + case 468: +#line 2495 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5353,11 +5478,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5357 "util/configparser.c" +#line 5482 "util/configparser.c" /* yacc.c:1646 */ break; - case 450: -#line 2416 "./util/configparser.y" + case 469: +#line 2505 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5366,11 +5491,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5370 "util/configparser.c" +#line 5495 "util/configparser.c" /* yacc.c:1646 */ break; - case 451: -#line 2426 "./util/configparser.y" + case 470: +#line 2515 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5379,11 +5504,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5383 "util/configparser.c" +#line 5508 "util/configparser.c" /* yacc.c:1646 */ break; - case 452: -#line 2436 "./util/configparser.y" + case 471: +#line 2525 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5392,11 +5517,11 @@ yyparse (void) free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5396 "util/configparser.c" +#line 5521 "util/configparser.c" /* yacc.c:1646 */ break; - case 453: -#line 2446 "./util/configparser.y" + case 472: +#line 2535 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5434,11 +5559,11 @@ yyparse (void) fatal_exit("out of memory adding local-zone"); } } -#line 5438 "util/configparser.c" +#line 5563 "util/configparser.c" /* yacc.c:1646 */ break; - case 454: -#line 2485 "./util/configparser.y" + case 473: +#line 2574 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5447,33 +5572,33 @@ yyparse (void) fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5451 "util/configparser.c" +#line 5576 "util/configparser.c" /* yacc.c:1646 */ break; - case 455: -#line 2495 "./util/configparser.y" + case 474: +#line 2584 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5462 "util/configparser.c" +#line 5587 "util/configparser.c" /* yacc.c:1646 */ break; - case 456: -#line 2503 "./util/configparser.y" + case 475: +#line 2592 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 5473 "util/configparser.c" +#line 5598 "util/configparser.c" /* yacc.c:1646 */ break; - case 457: -#line 2511 "./util/configparser.y" + case 476: +#line 2600 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5487,11 +5612,11 @@ yyparse (void) yyerror("local-data-ptr could not be reversed"); } } -#line 5491 "util/configparser.c" +#line 5616 "util/configparser.c" /* yacc.c:1646 */ break; - case 458: -#line 2526 "./util/configparser.y" + case 477: +#line 2615 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5499,19 +5624,19 @@ yyparse (void) else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5503 "util/configparser.c" +#line 5628 "util/configparser.c" /* yacc.c:1646 */ break; - case 459: -#line 2535 "./util/configparser.y" + case 478: +#line 2624 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5511 "util/configparser.c" +#line 5636 "util/configparser.c" /* yacc.c:1646 */ break; - case 470: -#line 2546 "./util/configparser.y" + case 489: +#line 2635 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5520,11 +5645,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5524 "util/configparser.c" +#line 5649 "util/configparser.c" /* yacc.c:1646 */ break; - case 471: -#line 2556 "./util/configparser.y" + case 490: +#line 2645 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5532,79 +5657,79 @@ yyparse (void) else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5536 "util/configparser.c" +#line 5661 "util/configparser.c" /* yacc.c:1646 */ break; - case 472: -#line 2565 "./util/configparser.y" + case 491: +#line 2654 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5546 "util/configparser.c" +#line 5671 "util/configparser.c" /* yacc.c:1646 */ break; - case 473: -#line 2572 "./util/configparser.y" + case 492: +#line 2661 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5556 "util/configparser.c" +#line 5681 "util/configparser.c" /* yacc.c:1646 */ break; - case 474: -#line 2579 "./util/configparser.y" + case 493: +#line 2668 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 5566 "util/configparser.c" +#line 5691 "util/configparser.c" /* yacc.c:1646 */ break; - case 475: -#line 2586 "./util/configparser.y" + case 494: +#line 2675 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 5576 "util/configparser.c" +#line 5701 "util/configparser.c" /* yacc.c:1646 */ break; - case 476: -#line 2593 "./util/configparser.y" + case 495: +#line 2682 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 5586 "util/configparser.c" +#line 5711 "util/configparser.c" /* yacc.c:1646 */ break; - case 477: -#line 2600 "./util/configparser.y" + case 496: +#line 2689 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 5596 "util/configparser.c" +#line 5721 "util/configparser.c" /* yacc.c:1646 */ break; - case 478: -#line 2607 "./util/configparser.y" + case 497: +#line 2696 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5604 "util/configparser.c" +#line 5729 "util/configparser.c" /* yacc.c:1646 */ break; - case 493: -#line 2624 "./util/configparser.y" + case 512: +#line 2713 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5612,21 +5737,21 @@ yyparse (void) else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5616 "util/configparser.c" +#line 5741 "util/configparser.c" /* yacc.c:1646 */ break; - case 494: -#line 2633 "./util/configparser.y" + case 513: +#line 2722 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 5626 "util/configparser.c" +#line 5751 "util/configparser.c" /* yacc.c:1646 */ break; - case 495: -#line 2640 "./util/configparser.y" + case 514: +#line 2729 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5634,11 +5759,11 @@ yyparse (void) else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5638 "util/configparser.c" +#line 5763 "util/configparser.c" /* yacc.c:1646 */ break; - case 496: -#line 2649 "./util/configparser.y" + case 515: +#line 2738 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5646,31 +5771,31 @@ yyparse (void) else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5650 "util/configparser.c" +#line 5775 "util/configparser.c" /* yacc.c:1646 */ break; - case 497: -#line 2658 "./util/configparser.y" + case 516: +#line 2747 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 5660 "util/configparser.c" +#line 5785 "util/configparser.c" /* yacc.c:1646 */ break; - case 498: -#line 2665 "./util/configparser.y" + case 517: +#line 2754 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 5670 "util/configparser.c" +#line 5795 "util/configparser.c" /* yacc.c:1646 */ break; - case 499: -#line 2672 "./util/configparser.y" + case 518: +#line 2761 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5679,11 +5804,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5683 "util/configparser.c" +#line 5808 "util/configparser.c" /* yacc.c:1646 */ break; - case 500: -#line 2682 "./util/configparser.y" + case 519: +#line 2771 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5692,11 +5817,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5696 "util/configparser.c" +#line 5821 "util/configparser.c" /* yacc.c:1646 */ break; - case 501: -#line 2692 "./util/configparser.y" + case 520: +#line 2781 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5705,11 +5830,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5709 "util/configparser.c" +#line 5834 "util/configparser.c" /* yacc.c:1646 */ break; - case 502: -#line 2702 "./util/configparser.y" + case 521: +#line 2791 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5718,11 +5843,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5722 "util/configparser.c" +#line 5847 "util/configparser.c" /* yacc.c:1646 */ break; - case 503: -#line 2712 "./util/configparser.y" + case 522: +#line 2801 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5731,11 +5856,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5735 "util/configparser.c" +#line 5860 "util/configparser.c" /* yacc.c:1646 */ break; - case 504: -#line 2722 "./util/configparser.y" + case 523: +#line 2811 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5744,29 +5869,29 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5748 "util/configparser.c" +#line 5873 "util/configparser.c" /* yacc.c:1646 */ break; - case 505: -#line 2732 "./util/configparser.y" + case 524: +#line 2821 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 5756 "util/configparser.c" +#line 5881 "util/configparser.c" /* yacc.c:1646 */ break; - case 509: -#line 2741 "./util/configparser.y" + case 528: +#line 2830 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5766 "util/configparser.c" +#line 5891 "util/configparser.c" /* yacc.c:1646 */ break; - case 510: -#line 2747 "./util/configparser.y" + case 529: +#line 2836 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5775,21 +5900,21 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5779 "util/configparser.c" +#line 5904 "util/configparser.c" /* yacc.c:1646 */ break; - case 511: -#line 2757 "./util/configparser.y" + case 530: +#line 2846 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 5789 "util/configparser.c" +#line 5914 "util/configparser.c" /* yacc.c:1646 */ break; - case 512: -#line 2764 "./util/configparser.y" + case 531: +#line 2853 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5797,30 +5922,30 @@ yyparse (void) (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5801 "util/configparser.c" +#line 5926 "util/configparser.c" /* yacc.c:1646 */ break; - case 513: -#line 2773 "./util/configparser.y" + case 532: +#line 2862 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5812 "util/configparser.c" +#line 5937 "util/configparser.c" /* yacc.c:1646 */ break; - case 514: -#line 2781 "./util/configparser.y" + case 533: +#line 2870 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5820 "util/configparser.c" +#line 5945 "util/configparser.c" /* yacc.c:1646 */ break; - case 527: -#line 2797 "./util/configparser.y" + case 546: +#line 2886 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5828,11 +5953,11 @@ yyparse (void) else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5832 "util/configparser.c" +#line 5957 "util/configparser.c" /* yacc.c:1646 */ break; - case 528: -#line 2807 "./util/configparser.y" + case 547: +#line 2896 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5840,21 +5965,21 @@ yyparse (void) else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5844 "util/configparser.c" +#line 5969 "util/configparser.c" /* yacc.c:1646 */ break; - case 529: -#line 2816 "./util/configparser.y" + case 548: +#line 2905 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 5854 "util/configparser.c" +#line 5979 "util/configparser.c" /* yacc.c:1646 */ break; - case 530: -#line 2823 "./util/configparser.y" + case 549: +#line 2912 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5862,21 +5987,21 @@ yyparse (void) if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 5866 "util/configparser.c" +#line 5991 "util/configparser.c" /* yacc.c:1646 */ break; - case 531: -#line 2832 "./util/configparser.y" + case 550: +#line 2921 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 5876 "util/configparser.c" +#line 6001 "util/configparser.c" /* yacc.c:1646 */ break; - case 532: -#line 2839 "./util/configparser.y" + case 551: +#line 2928 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5884,22 +6009,22 @@ yyparse (void) if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 5888 "util/configparser.c" +#line 6013 "util/configparser.c" /* yacc.c:1646 */ break; - case 533: -#line 2848 "./util/configparser.y" + case 552: +#line 2937 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5899 "util/configparser.c" +#line 6024 "util/configparser.c" /* yacc.c:1646 */ break; - case 534: -#line 2856 "./util/configparser.y" + case 553: +#line 2945 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5911,22 +6036,22 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5915 "util/configparser.c" +#line 6040 "util/configparser.c" /* yacc.c:1646 */ break; - case 535: -#line 2869 "./util/configparser.y" + case 554: +#line 2958 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5926 "util/configparser.c" +#line 6051 "util/configparser.c" /* yacc.c:1646 */ break; - case 536: -#line 2877 "./util/configparser.y" + case 555: +#line 2966 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5938,19 +6063,19 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5942 "util/configparser.c" +#line 6067 "util/configparser.c" /* yacc.c:1646 */ break; - case 537: -#line 2890 "./util/configparser.y" + case 556: +#line 2979 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 5950 "util/configparser.c" +#line 6075 "util/configparser.c" /* yacc.c:1646 */ break; - case 545: -#line 2900 "./util/configparser.y" + case 564: +#line 2989 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5964,11 +6089,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 5968 "util/configparser.c" +#line 6093 "util/configparser.c" /* yacc.c:1646 */ break; - case 546: -#line 2915 "./util/configparser.y" + case 565: +#line 3004 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -5982,11 +6107,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 5986 "util/configparser.c" +#line 6111 "util/configparser.c" /* yacc.c:1646 */ break; - case 547: -#line 2930 "./util/configparser.y" + case 566: +#line 3019 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -5997,11 +6122,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 6001 "util/configparser.c" +#line 6126 "util/configparser.c" /* yacc.c:1646 */ break; - case 548: -#line 2942 "./util/configparser.y" + case 567: +#line 3031 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6015,11 +6140,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 6019 "util/configparser.c" +#line 6144 "util/configparser.c" /* yacc.c:1646 */ break; - case 549: -#line 2957 "./util/configparser.y" + case 568: +#line 3046 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6031,11 +6156,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 6035 "util/configparser.c" +#line 6160 "util/configparser.c" /* yacc.c:1646 */ break; - case 550: -#line 2970 "./util/configparser.y" + case 569: +#line 3059 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6045,19 +6170,19 @@ yyparse (void) fatal_exit("out of memory adding tcp connection limit"); } } -#line 6049 "util/configparser.c" +#line 6174 "util/configparser.c" /* yacc.c:1646 */ break; - case 551: -#line 2981 "./util/configparser.y" + case 570: +#line 3070 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(ipset:)\n")); } -#line 6057 "util/configparser.c" +#line 6182 "util/configparser.c" /* yacc.c:1646 */ break; - case 556: -#line 2990 "./util/configparser.y" + case 575: +#line 3079 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6071,11 +6196,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 6075 "util/configparser.c" +#line 6200 "util/configparser.c" /* yacc.c:1646 */ break; - case 557: -#line 3005 "./util/configparser.y" + case 576: +#line 3094 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6089,12 +6214,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 6093 "util/configparser.c" +#line 6218 "util/configparser.c" /* yacc.c:1646 */ break; -#line 6097 "util/configparser.c" - +#line 6222 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6119,13 +6243,14 @@ yyparse (void) /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - { - const int yylhs = yyr1[yyn] - YYNTOKENS; - const int yyi = yypgoto[yylhs] + *yyssp; - yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp - ? yytable[yyi] - : yydefgoto[yylhs]); - } + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; @@ -6208,10 +6333,12 @@ yyparse (void) | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - /* Pacify compilers when the user code never invokes YYERROR and the - label yyerrorlab therefore never appears in user code. */ - if (0) - YYERROR; + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -6273,7 +6400,6 @@ yyparse (void) yyresult = 0; goto yyreturn; - /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -6281,7 +6407,6 @@ yyparse (void) yyresult = 1; goto yyreturn; - #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -6292,10 +6417,6 @@ yyparse (void) /* Fall through. */ #endif - -/*-----------------------------------------------------. -| yyreturn -- parsing is finished, return the result. | -`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -6325,7 +6446,7 @@ yyparse (void) #endif return yyresult; } -#line 3019 "./util/configparser.y" +#line 3108 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 86ee8e58a..9d661aee1 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -1,9 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, - Inc. + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -31,9 +30,6 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ - #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED /* Debug traces. */ @@ -312,10 +308,16 @@ extern int yydebug; VAR_STREAM_WAIT_SIZE = 518, VAR_TLS_CIPHERS = 519, VAR_TLS_CIPHERSUITES = 520, - VAR_TLS_SESSION_TICKET_KEYS = 521, - VAR_IPSET = 522, - VAR_IPSET_NAME_V4 = 523, - VAR_IPSET_NAME_V6 = 524 + VAR_IPSET = 521, + VAR_IPSET_NAME_V4 = 522, + VAR_IPSET_NAME_V6 = 523, + VAR_TLS_SESSION_TICKET_KEYS = 524, + VAR_RPZ = 525, + VAR_TAGS = 526, + VAR_RPZ_ACTION_OVERRIDE = 527, + VAR_RPZ_CNAME_OVERRIDE = 528, + VAR_RPZ_LOG = 529, + VAR_RPZ_LOG_NAME = 530 }; #endif /* Tokens. */ @@ -582,22 +584,29 @@ extern int yydebug; #define VAR_STREAM_WAIT_SIZE 518 #define VAR_TLS_CIPHERS 519 #define VAR_TLS_CIPHERSUITES 520 -#define VAR_TLS_SESSION_TICKET_KEYS 521 -#define VAR_IPSET 522 -#define VAR_IPSET_NAME_V4 523 -#define VAR_IPSET_NAME_V6 524 +#define VAR_IPSET 521 +#define VAR_IPSET_NAME_V4 522 +#define VAR_IPSET_NAME_V6 523 +#define VAR_TLS_SESSION_TICKET_KEYS 524 +#define VAR_RPZ 525 +#define VAR_TAGS 526 +#define VAR_RPZ_ACTION_OVERRIDE 527 +#define VAR_RPZ_CNAME_OVERRIDE 528 +#define VAR_RPZ_LOG 529 +#define VAR_RPZ_LOG_NAME 530 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + union YYSTYPE { -#line 66 "./util/configparser.y" +#line 66 "./util/configparser.y" /* yacc.c:1909 */ char* str; -#line 599 "util/configparser.h" - +#line 608 "util/configparser.h" /* yacc.c:1909 */ }; + typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 diff --git a/util/configparser.y b/util/configparser.y index 8be6bd3e8..8671a7cd3 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -166,8 +166,9 @@ extern struct config_parser_state* cfg_parser; %token VAR_FORWARD_NO_CACHE VAR_STUB_NO_CACHE VAR_LOG_SERVFAIL VAR_DENY_ANY %token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES -%token VAR_TLS_SESSION_TICKET_KEYS %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6 +%token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE +%token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -175,7 +176,8 @@ toplevelvar: serverstart contents_server | stubstart contents_stub | forwardstart contents_forward | pythonstart contents_py | rcstart contents_rc | dtstart contents_dt | viewstart contents_view | dnscstart contents_dnsc | cachedbstart contents_cachedb | - ipsetstart contents_ipset | authstart contents_auth + ipsetstart contents_ipset | authstart contents_auth | + rpzstart contents_rpz ; /* server: declaration */ @@ -335,6 +337,7 @@ authstart: VAR_AUTH_ZONE s->for_downstream = 1; s->for_upstream = 1; s->fallback_enabled = 0; + s->isrpz = 0; } else yyerror("out of memory"); } @@ -345,6 +348,92 @@ content_auth: auth_name | auth_zonefile | auth_master | auth_url | auth_for_downstream | auth_for_upstream | auth_fallback_enabled | auth_allow_notify ; + +rpz_tag: VAR_TAGS STRING_ARG + { + uint8_t* bitlist; + size_t len = 0; + OUTYY(("P(server_local_zone_tag:%s)\n", $2)); + bitlist = config_parse_taglist(cfg_parser->cfg, $2, + &len); + free($2); + if(!bitlist) { + yyerror("could not parse tags, (define-tag them first)"); + } + if(bitlist) { + cfg_parser->cfg->auths->rpz_taglist = bitlist; + cfg_parser->cfg->auths->rpz_taglistlen = len; + + } + } + ; + +rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG + { + OUTYY(("P(rpz_action_override:%s)\n", $2)); + if(strcmp($2, "nxdomain")!=0 && strcmp($2, "nodata")!=0 && + strcmp($2, "passthru")!=0 && strcmp($2, "drop")!=0 && + strcmp($2, "cname")!=0 && strcmp($2, "disabled")!=0) { + yyerror("rpz-action-override action: expected nxdomain, " + "nodata, passthru, drop, cname or disabled"); + free($2); + cfg_parser->cfg->auths->rpz_action_override = NULL; + } + else { + cfg_parser->cfg->auths->rpz_action_override = $2; + } + } + ; + +rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG + { + OUTYY(("P(rpz_cname_override:%s)\n", $2)); + free(cfg_parser->cfg->auths->rpz_cname); + cfg_parser->cfg->auths->rpz_cname = $2; + } + ; + +rpz_log: VAR_RPZ_LOG STRING_ARG + { + OUTYY(("P(rpz_log:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->rpz_log = (strcmp($2, "yes")==0); + free($2); + } + ; + +rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG + { + OUTYY(("P(rpz_log_name:%s)\n", $2)); + free(cfg_parser->cfg->auths->rpz_log_name); + cfg_parser->cfg->auths->rpz_log_name = $2; + } + ; + +rpzstart: VAR_RPZ + { + struct config_auth* s; + OUTYY(("\nP(rpz:)\n")); + s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); + if(s) { + s->next = cfg_parser->cfg->auths; + cfg_parser->cfg->auths = s; + /* defaults for RPZ auth zone */ + s->for_downstream = 0; + s->for_upstream = 0; + s->fallback_enabled = 0; + s->isrpz = 1; + } else + yyerror("out of memory"); + } + ; +contents_rpz: contents_rpz content_rpz + | ; +content_rpz: auth_name | auth_zonefile | rpz_tag | auth_master | auth_url | + auth_allow_notify | rpz_action_override | rpz_cname_override | + rpz_log | rpz_log_name + ; server_num_threads: VAR_NUM_THREADS STRING_ARG { OUTYY(("P(server_num_threads:%s)\n", $2)); diff --git a/util/data/dname.c b/util/data/dname.c index 9f25e1efe..c8f09ddbc 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -558,6 +558,34 @@ dname_lab_startswith(uint8_t* label, char* prefix, char** endptr) return 1; } +int +dname_has_label(uint8_t* dname, size_t dnamelen, uint8_t* label) +{ + size_t len; + + /* 1 byte needed for the label length */ + if(dnamelen < 1) + return 0; + + len = *dname; + while(len <= dnamelen) { + if(!(*dname)) { + if(*dname == *label) + return 1; /* empty label match */ + /* termination label found, stop iterating */ + return 0; + } + if(*dname == *label && *label && + memlowercmp(dname+1, label+1, *dname) == 0) + return 1; + len += *dname; + dname += *dname; + dname++; + len++; + } + return 0; +} + int dname_buffer_write(sldns_buffer* pkt, uint8_t* dname) { diff --git a/util/data/dname.h b/util/data/dname.h index 53a33c689..e37c11822 100644 --- a/util/data/dname.h +++ b/util/data/dname.h @@ -196,6 +196,15 @@ int dname_lab_cmp(uint8_t* d1, int labs1, uint8_t* d2, int labs2, int* mlabs); */ int dname_lab_startswith(uint8_t* label, char* prefix, char** endptr); +/** + * Check if dname contains label + * @param dname: dname + * @param dnamelen: length of dname + * @param label: label to be checked for presence in dname + * @return: 1 if dname has this label, 0 otherwise + */ +int dname_has_label(uint8_t* dname, size_t dnamelen, uint8_t* label); + /** * See if domain name d1 is a strict subdomain of d2. * That is a subdomain, but not equal. diff --git a/util/data/packed_rrset.c b/util/data/packed_rrset.c index 7b9d5494d..7f3feb1d0 100644 --- a/util/data/packed_rrset.c +++ b/util/data/packed_rrset.c @@ -386,3 +386,19 @@ packed_rrset_copy_alloc(struct ub_packed_rrset_key* key, packed_rrset_ttl_add(dd, now); return dk; } + +int +packed_rrset_find_rr(struct packed_rrset_data* d, uint8_t* rdata, size_t len, + size_t* index) +{ + size_t i; + for(i=0; icount; i++) { + if(d->rr_len[i] != len) + continue; + if(memcmp(d->rr_data[i], rdata, len) == 0) { + *index = i; + return 1; + } + } + return 0; +} diff --git a/util/data/packed_rrset.h b/util/data/packed_rrset.h index 3a5335ddf..729877bab 100644 --- a/util/data/packed_rrset.h +++ b/util/data/packed_rrset.h @@ -446,4 +446,17 @@ struct ub_packed_rrset_key* packed_rrset_copy_alloc( struct ub_packed_rrset_key* key, struct alloc_cache* alloc, time_t now); +/** + * Find RR index in packed rrset + * Raw comparison, does not canonicalize RDATA + * @param d: packed rrset + * @param rdata: RDATA of RR to find + * @param len: length of rdata + * @param index: pointer to int to store index of found RR + * @return 1 if RR found, 0 otherwise + */ +int +packed_rrset_find_rr(struct packed_rrset_data* d, uint8_t* rdata, size_t len, + size_t* index); + #endif /* UTIL_DATA_PACKED_RRSET_H */ diff --git a/util/net_help.c b/util/net_help.c index 10c4acc47..c1ff25d63 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -284,6 +284,113 @@ int netblockstrtoaddr(const char* str, int port, struct sockaddr_storage* addr, return 1; } +/* RPZ format address dname to network byte order address */ +static int ipdnametoaddr(uint8_t* dname, size_t dnamelen, + struct sockaddr_storage* addr, socklen_t* addrlen, int* af) +{ + uint8_t* ia; + size_t dnamelabs = dname_count_labels(dname); + uint8_t lablen; + char* e = NULL; + int z = 0; + size_t len = 0; + int i; + *af = AF_INET; + + /* need 1 byte for label length */ + if(dnamelen < 1) + return 0; + + if(dnamelabs > 6 || + dname_has_label(dname, dnamelen, (uint8_t*)"\002zz")) { + *af = AF_INET6; + } + len = *dname; + lablen = *dname++; + i = (*af == AF_INET) ? 3 : 15; + if(*af == AF_INET6) { + struct sockaddr_in6* sa = (struct sockaddr_in6*)addr; + *addrlen = (socklen_t)sizeof(struct sockaddr_in6); + memset(sa, 0, *addrlen); + sa->sin6_family = AF_INET6; + ia = (uint8_t*)&sa->sin6_addr; + } else { /* ip4 */ + struct sockaddr_in* sa = (struct sockaddr_in*)addr; + *addrlen = (socklen_t)sizeof(struct sockaddr_in); + memset(sa, 0, *addrlen); + sa->sin_family = AF_INET; + ia = (uint8_t*)&sa->sin_addr; + } + while(lablen && i >= 0 && len <= dnamelen) { + char buff[LDNS_MAX_LABELLEN+1]; + uint16_t chunk; /* big enough to not overflow on IPv6 hextet */ + if((*af == AF_INET && (lablen > 3 || dnamelabs > 6)) || + (*af == AF_INET6 && (lablen > 4 || dnamelabs > 10))) { + return 0; + } + if(memcmp(dname, "zz", 2) == 0 && *af == AF_INET6) { + /* Add one or more 0 labels. Address is initialised at + * 0, so just skip the zero part. */ + int zl = 11 - dnamelabs; + if(z || zl < 0) + return 0; + z = 1; + i -= (zl*2); + } else { + memcpy(buff, dname, lablen); + buff[lablen] = '\0'; + chunk = strtol(buff, &e, (*af == AF_INET) ? 10 : 16); + if(!e || *e != '\0' || (*af == AF_INET && chunk > 255)) + return 0; + if(*af == AF_INET) { + log_assert(i < 4 && i >= 0); + ia[i] = (uint8_t)chunk; + i--; + } else { + log_assert(i < 16 && i >= 1); + /* ia in network byte order */ + ia[i-1] = (uint8_t)(chunk >> 8); + ia[i] = (uint8_t)(chunk & 0x00FF); + i -= 2; + } + } + dname += lablen; + lablen = *dname++; + len += lablen; + } + if(i != -1) + /* input too short */ + return 0; + return 1; +} + +int netblockdnametoaddr(uint8_t* dname, size_t dnamelen, + struct sockaddr_storage* addr, socklen_t* addrlen, int* net, int* af) +{ + char buff[3 /* 3 digit netblock */ + 1]; + size_t nlablen; + if(dnamelen < 1 || *dname > 3) + /* netblock invalid */ + return 0; + nlablen = *dname; + + if(dnamelen < 1 + nlablen) + return 0; + + memcpy(buff, dname+1, nlablen); + buff[nlablen] = '\0'; + *net = atoi(buff); + if(*net == 0 && strcmp(buff, "0") != 0) + return 0; + dname += nlablen; + dname++; + if(!ipdnametoaddr(dname, dnamelen-1-nlablen, addr, addrlen, af)) + return 0; + if((*af == AF_INET6 && *net > 128) || (*af == AF_INET && *net > 32)) + return 0; + return 1; +} + int authextstrtoaddr(char* str, struct sockaddr_storage* addr, socklen_t* addrlen, char** auth_name) { diff --git a/util/net_help.h b/util/net_help.h index 79e2a8349..7a33a7203 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -471,4 +471,19 @@ int tls_session_ticket_key_cb(void *s, unsigned char* key_name,unsigned char* iv /** Free memory used for TLS session ticket keys */ void listen_sslctx_delete_ticket_keys(void); +/** + * RPZ format netblock to network byte order address and netblock + * example RPZ netblock format dnames: + * - 24.10.100.51.198.rpz-ip -> 198.51.100.10/24 + * - 32.10.zz.db8.2001.rpz-ip -> 2001:db8:0:0:0:0:0:10/32 + * @param dname: the dname containing RPZ format netblock + * @param dnamelen: length of dname + * @param addr: where to store sockaddr. + * @param addrlen: length of stored sockaddr is returned. + * @param net: where to store netmask + * @param af: where to store address family. + * @return 0 on error. + */ +int netblockdnametoaddr(uint8_t* dname, size_t dnamelen, + struct sockaddr_storage* addr, socklen_t* addrlen, int* net, int* af); #endif /* NET_HELP_H */ diff --git a/util/storage/dnstree.c b/util/storage/dnstree.c index 190369d85..f883044af 100644 --- a/util/storage/dnstree.c +++ b/util/storage/dnstree.c @@ -104,11 +104,12 @@ int addr_tree_insert(rbtree_type* tree, struct addr_tree_node* node, return rbtree_insert(tree, &node->node) != NULL; } -void addr_tree_init_parents(rbtree_type* tree) +void addr_tree_init_parents_node(struct addr_tree_node* node) { - struct addr_tree_node* node, *prev = NULL, *p; + struct addr_tree_node* prev = NULL, *p; int m; - RBTREE_FOR(node, struct addr_tree_node*, tree) { + for(; (rbnode_type*)node != RBTREE_NULL; + node = (struct addr_tree_node*)rbtree_next((rbnode_type*)node)) { node->parent = NULL; if(!prev || prev->addrlen != node->addrlen) { prev = node; @@ -130,6 +131,12 @@ void addr_tree_init_parents(rbtree_type* tree) } } +void addr_tree_init_parents(rbtree_type* tree) +{ + addr_tree_init_parents_node( + (struct addr_tree_node*)rbtree_first(tree)); +} + void name_tree_init_parents(rbtree_type* tree) { struct name_tree_node* node, *prev = NULL, *p; diff --git a/util/storage/dnstree.h b/util/storage/dnstree.h index 782644b63..d54602fd7 100644 --- a/util/storage/dnstree.h +++ b/util/storage/dnstree.h @@ -173,6 +173,13 @@ int addr_tree_insert(rbtree_type* tree, struct addr_tree_node* node, */ void addr_tree_init_parents(rbtree_type* tree); +/** + * Initialize parent pointers in partial addr tree. + * Reinitialize pointer for part of tree, used after node deletion + * @param node: node to start parent pointer initialization for. + */ +void addr_tree_init_parents_node(struct addr_tree_node* node); + /** * Lookup closest encloser in addr tree. * @param tree: addr tree