summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaMont Jones <lamont@debian.org>2008-05-15 17:19:35 -0600
committerLaMont Jones <lamont@debian.org>2008-05-15 17:19:35 -0600
commit9116158c3091065ed0ddcb569209119ed98b4fed (patch)
treebc186f98afc84adcf396966561da35c8586d664a
parentabd0f5d555ec9d919c33dd7f65ff8de625fb077a (diff)
downloadbind9-9116158c3091065ed0ddcb569209119ed98b4fed.tar.gz
9.5.0rc1
-rw-r--r--CHANGES133
-rw-r--r--FAQ21
-rw-r--r--FAQ.xml37
-rw-r--r--README16
-rw-r--r--bin/dig/dig.c97
-rw-r--r--bin/dig/dighost.c25
-rw-r--r--bin/dig/host.18
-rw-r--r--bin/dig/host.docbook7
-rw-r--r--bin/dig/host.html14
-rw-r--r--bin/dig/include/dig/dig.h31
-rw-r--r--bin/named/Makefile.in4
-rw-r--r--bin/named/bind9.xsl379
-rw-r--r--bin/named/bind9.xsl.h699
-rw-r--r--bin/named/client.c159
-rw-r--r--bin/named/config.c5
-rwxr-xr-xbin/named/convertxsl.pl60
-rw-r--r--bin/named/include/named/client.h11
-rw-r--r--bin/named/include/named/server.h57
-rw-r--r--bin/named/include/named/statschannel.h8
-rw-r--r--bin/named/main.c11
-rw-r--r--bin/named/query.c74
-rw-r--r--bin/named/server.c151
-rw-r--r--bin/named/statschannel.c638
-rw-r--r--bin/named/unix/os.c108
-rw-r--r--bin/named/update.c141
-rw-r--r--bin/named/xfrout.c87
-rw-r--r--bin/named/zoneconf.c37
-rwxr-xr-xbin/tests/system/ifconfig.sh10
-rw-r--r--bin/tests/system/ixfr/ns1/.exists0
-rw-r--r--bin/tests/system/rrsetorder/clean.sh5
-rw-r--r--bin/tests/system/rrsetorder/dig.out.cyclic.good14
-rw-r--r--bin/tests/system/rrsetorder/dig.out.cyclic.good24
-rw-r--r--bin/tests/system/rrsetorder/dig.out.cyclic.good34
-rw-r--r--bin/tests/system/rrsetorder/dig.out.cyclic.good44
-rw-r--r--bin/tests/system/rrsetorder/tests.sh247
-rw-r--r--config.h.in11
-rw-r--r--config.h.win3212
-rwxr-xr-xconfigure166
-rw-r--r--configure.in32
-rwxr-xr-xcontrib/query-loc-0.3.0/install-sh251
-rw-r--r--contrib/query-loc-0.4.0/ADDRESSES (renamed from contrib/query-loc-0.3.0/ADDRESSES)6
-rw-r--r--contrib/query-loc-0.4.0/ALGO (renamed from contrib/query-loc-0.3.0/ALGO)0
-rw-r--r--contrib/query-loc-0.4.0/INSTALL (renamed from contrib/query-loc-0.3.0/INSTALL)2
-rw-r--r--contrib/query-loc-0.4.0/Makefile.in (renamed from contrib/query-loc-0.3.0/Makefile.in)6
-rw-r--r--contrib/query-loc-0.4.0/README (renamed from contrib/query-loc-0.3.0/README)7
-rw-r--r--contrib/query-loc-0.4.0/USAGE (renamed from contrib/query-loc-0.3.0/USAGE)3
-rw-r--r--contrib/query-loc-0.4.0/config.h.in (renamed from contrib/query-loc-0.3.0/config.h.in)2
-rwxr-xr-xcontrib/query-loc-0.4.0/configure (renamed from contrib/query-loc-0.3.0/configure)0
-rw-r--r--contrib/query-loc-0.4.0/configure.in (renamed from contrib/query-loc-0.3.0/configure.in)2
-rwxr-xr-xcontrib/query-loc-0.4.0/install-sh323
-rw-r--r--contrib/query-loc-0.4.0/loc.c (renamed from contrib/query-loc-0.3.0/loc.c)74
-rw-r--r--contrib/query-loc-0.4.0/loc.h (renamed from contrib/query-loc-0.3.0/loc.h)4
-rw-r--r--contrib/query-loc-0.4.0/loc_ntoa.c (renamed from contrib/query-loc-0.3.0/loc_ntoa.c)0
-rw-r--r--contrib/query-loc-0.4.0/query-loc.1 (renamed from contrib/query-loc-0.3.0/query-loc.1)4
-rw-r--r--contrib/query-loc-0.4.0/query-loc.c (renamed from contrib/query-loc-0.3.0/query-loc.c)2
-rwxr-xr-xcontrib/query-loc-0.4.0/reconf8
-rw-r--r--doc/arm/Bv9ARM-book.xml1468
-rw-r--r--doc/arm/Bv9ARM.ch01.html52
-rw-r--r--doc/arm/Bv9ARM.ch02.html22
-rw-r--r--doc/arm/Bv9ARM.ch03.html26
-rw-r--r--doc/arm/Bv9ARM.ch04.html70
-rw-r--r--doc/arm/Bv9ARM.ch05.html6
-rw-r--r--doc/arm/Bv9ARM.ch06.html1552
-rw-r--r--doc/arm/Bv9ARM.ch07.html14
-rw-r--r--doc/arm/Bv9ARM.ch08.html18
-rw-r--r--doc/arm/Bv9ARM.ch09.html180
-rw-r--r--doc/arm/Bv9ARM.html152
-rwxr-xr-xdoc/arm/Bv9ARM.pdf13952
-rw-r--r--doc/arm/man.dig.html20
-rw-r--r--doc/arm/man.dnssec-keygen.html14
-rw-r--r--doc/arm/man.dnssec-signzone.html12
-rw-r--r--doc/arm/man.host.html12
-rw-r--r--doc/arm/man.named-checkconf.html12
-rw-r--r--doc/arm/man.named-checkzone.html12
-rw-r--r--doc/arm/man.named.html16
-rw-r--r--doc/arm/man.rndc-confgen.html12
-rw-r--r--doc/arm/man.rndc.conf.html12
-rw-r--r--doc/arm/man.rndc.html12
-rw-r--r--doc/misc/migration14
-rw-r--r--doc/misc/options33
-rw-r--r--lib/bind/api6
-rw-r--r--lib/bind/bsd/Makefile.in6
-rw-r--r--lib/bind/bsd/strerror.c6
-rw-r--r--lib/bind/bsd/strtoul.c10
-rw-r--r--lib/bind/config.h.in7
-rwxr-xr-xlib/bind/configure711
-rw-r--r--lib/bind/configure.in214
-rw-r--r--lib/bind/dst/Makefile.in6
-rw-r--r--lib/bind/include/arpa/nameser.h5
-rw-r--r--lib/bind/include/isc/misc.h3
-rw-r--r--lib/bind/include/netdb.h4
-rw-r--r--lib/bind/include/resolv.h6
-rw-r--r--lib/bind/inet/Makefile.in6
-rw-r--r--lib/bind/irs/Makefile.in6
-rw-r--r--lib/bind/irs/getnetgrent.c6
-rw-r--r--lib/bind/irs/getnetgrent_r.c81
-rw-r--r--lib/bind/irs/irp.c5
-rw-r--r--lib/bind/isc/Makefile.in6
-rw-r--r--lib/bind/isc/ctl_clnt.c5
-rw-r--r--lib/bind/isc/ctl_srvr.c5
-rw-r--r--lib/bind/isc/logging.c12
-rw-r--r--lib/bind/nameser/Makefile.in6
-rw-r--r--lib/bind/port_after.h.in109
-rw-r--r--lib/bind/port_before.h.in31
-rw-r--r--lib/bind/resolv/Makefile.in6
-rw-r--r--lib/bind/resolv/res_debug.c55
-rw-r--r--lib/bind/resolv/res_mkquery.c66
-rw-r--r--lib/bind/resolv/res_query.c14
-rw-r--r--lib/bind9/api2
-rw-r--r--lib/bind9/check.c134
-rw-r--r--lib/dns/acache.c48
-rw-r--r--lib/dns/acl.c4
-rw-r--r--lib/dns/adb.c5598
-rw-r--r--lib/dns/api4
-rw-r--r--lib/dns/cache.c1502
-rw-r--r--lib/dns/db.c30
-rw-r--r--lib/dns/dispatch.c362
-rw-r--r--lib/dns/dst_api.c5
-rw-r--r--lib/dns/gssapi_link.c8
-rw-r--r--lib/dns/gssapictx.c53
-rw-r--r--lib/dns/include/dns/adb.h13
-rw-r--r--lib/dns/include/dns/db.h30
-rw-r--r--lib/dns/include/dns/dispatch.h29
-rw-r--r--lib/dns/include/dns/message.h16
-rw-r--r--lib/dns/include/dns/peer.h15
-rw-r--r--lib/dns/include/dns/rdatalist.h25
-rw-r--r--lib/dns/include/dns/resolver.h11
-rw-r--r--lib/dns/include/dns/stats.h273
-rw-r--r--lib/dns/include/dns/types.h4
-rw-r--r--lib/dns/include/dns/view.h70
-rw-r--r--lib/dns/include/dns/zone.h66
-rw-r--r--lib/dns/masterdump.c20
-rw-r--r--lib/dns/message.c61
-rw-r--r--lib/dns/name.c25
-rw-r--r--lib/dns/peer.c61
-rw-r--r--lib/dns/rbt.c17
-rw-r--r--lib/dns/rbtdb.c12724
-rw-r--r--lib/dns/rdata/generic/txt_16.c6
-rw-r--r--lib/dns/rdata/in_1/naptr_35.c12
-rw-r--r--lib/dns/rdatalist.c14
-rw-r--r--lib/dns/rdataslab.c18
-rw-r--r--lib/dns/resolver.c316
-rw-r--r--lib/dns/rootns.c48
-rw-r--r--lib/dns/sdb.c3
-rw-r--r--lib/dns/sdlz.c11
-rw-r--r--lib/dns/spnego.c195
-rw-r--r--lib/dns/stats.c452
-rw-r--r--lib/dns/tkey.c8
-rw-r--r--lib/dns/validator.c34
-rw-r--r--lib/dns/view.c83
-rw-r--r--lib/dns/win32/libdns.def34
-rw-r--r--lib/dns/zone.c232
-rw-r--r--lib/isc/api4
-rw-r--r--lib/isc/include/isc/mem.h142
-rw-r--r--lib/isc/mem.c292
-rw-r--r--lib/isc/print.c93
-rw-r--r--lib/isc/pthreads/mutex.c76
-rw-r--r--lib/isc/task.c32
-rw-r--r--lib/isc/unix/socket.c19
-rw-r--r--lib/isc/unix/time.c8
-rw-r--r--lib/isc/win32/include/isc/platform.h13
-rw-r--r--lib/isc/win32/interfaceiter.c234
-rw-r--r--lib/isc/win32/libisc.def4
-rw-r--r--lib/isc/win32/net.c63
-rw-r--r--lib/isc/win32/socket.c37
-rw-r--r--lib/isccfg/api2
-rw-r--r--lib/isccfg/namedconf.c117
-rw-r--r--make/rules.in6
-rw-r--r--version6
169 files changed, 27186 insertions, 19945 deletions
diff --git a/CHANGES b/CHANGES
index 2e3e8dba..837eb455 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,129 @@
+ --- 9.5.0rc1 released ---
+
+2368. [port] Linux: use libcap for capability management if
+ possible. [RT# 18026]
+
+2367. [bug] Improve counting of dns_resstatscounter_retry
+ [RT #18030]
+
+2366. [bug] Adb shutdown race. [RT #18021]
+
+2365. [bug] Fix a bug that caused dns_acl_isany() to return
+ spurious results. [RT #18000]
+
+2364. [bug] named could trigger a assertion when serving a
+ malformed signed zone. [RT #17828]
+
+2363. [port] sunos: pre-set "lt_cv_sys_max_cmd_len=4096;".
+ [RT #17513]
+
+2362. [cleanup] Make "rrset-order fixed" a compile-time option.
+ settable by "./configure --enable-fixed-rrset".
+ Disabled by default. [RT #17977]
+
+2361. [bug] "recursion" statistics counter could be counted
+ multiple times for a single query. [RT #17990]
+
+ --- 9.5.0b3 released ---
+
+2360. [bug] Fix a condition where we release a database version
+ (which may acquire a lock) while holding the lock.
+
+2359. [bug] Fix NSID bug. [RT #17942]
+
+2358. [doc] Update host's default query description. [RT #17934]
+
+2356. [bug] Builtin mutex profiler was not scalable enough.
+ [RT #17436]
+
+2355. [func] Extend the number statistics counters available.
+ [RT #17590]
+
+2354. [bug] Failed to initialise sone rdatasetheader_t elements.
+ [RT #17927]
+
+2353. [func] Add support for Name Server ID (RFC 5001).
+ 'dig +nsid' requests NSID from server.
+ 'request-nsid yes;' causes recursive server to send
+ NSID requests to upstream servers. Server responds
+ to NSID requests with the string configured by
+ 'server-id' option. [RT #17091]
+
+2352. [bug] Various GSS_API fixups. [RT #17729]
+
+2351. [bug] convertxsl.pl generated very long lines. [RT #17906]
+
+2350. [port] win32: IPv6 support. [RT #17797]
+
+2347. [bug] Delete now traverses the RB tree in the canonical
+ order. [RT #17451]
+
+2346. [func] Memory statistics now cover all active memory contexts
+ in increased detail. [RT #17580]
+
+2345. [bug] named-checkconf failed to detect when forwarders
+ were set at both the options/view level and in
+ a root zone. [RT #17671]
+
+2344. [bug] Improve "logging{ file ...; };" documentation.
+ [RT #17888]
+
+2343. [bug] (Seemingly) duplicate IPv6 entries could be
+ created in ADB. [RT #17837]
+
+2341. [bug] libbind: add missing -I../include for off source
+ tree builds. [RT #17606]
+
+2340. [port] openbsd: interface configuration. [RT #17700]
+
+2339. [port] tru64: support for libbind. [RT #17589]
+
+2338. [bug] check_ds() could be called with a non DS rdataset.
+ [RT #17598]
+
+2337. [bug] BUILD_LDFLAGS was not being correctly set. [RT #17614]
+
+2335. [port] sunos: libbind and *printf() support for long long.
+ [RT #17513]
+
+2334. [bug] Bad REQUIRES in fromstruct_in_naptr(), off by one
+ bug in fromstruct_txt(). [RT #17609]
+
+2333. [bug] Fix off by one error in isc_time_nowplusinterval().
+ [RT #17608]
+
+2332. [contrib] query-loc-0.4.0. [RT #17602]
+
+2331. [bug] Failure to regenerate any signatures was not being
+ reported nor being past back to the UPDATE client.
+ [RT #17570]
+
+2330. [bug] Remove potential race condition when handling
+ over memory events. [RT #17572]
+
+ WARNING: API CHANGE: over memory callback
+ function now needs to call isc_mem_waterack().
+ See <isc/mem.h> for details.
+
+2329. [bug] Clearer help text for dig's '-x' and '-i' options.
+
+2328. [maint] Add AAAA addresses for A.ROOT-SERVERS.NET,
+ F.ROOT-SERVERS.NET, H.ROOT-SERVERS.NET,
+ J.ROOT-SERVERS.NET, K.ROOT-SERVERS.NET and
+ M.ROOT-SERVERS.NET.
+
+2327. [bug] It was possible to dereference a NULL pointer in
+ rbtdb.c. Implement deadnode processing in zones as
+ we do for caches. [RT #17312]
+
+2326. [bug] It was possible to trigger a INSIST in the acache
+ processing.
+
+2325. [port] Linux: use capset() function if available. [RT #17557]
+
--- 9.5.0b2 released ---
-2324. [bug] Fix IPv6 matching against "any;" [RT #17533]
+2324. [bug] Fix IPv6 matching against "any;". [RT #17533]
2323. [port] tru64: namespace clash. [RT #17547]
@@ -133,7 +256,7 @@
2275. [func] Add support to dig to perform IXFR queries over UDP.
[RT #17235]
-2274. [func] Log zone transfer statistics. [RT #17161]
+2274. [func] Log zone transfer statistics. [RT #17336]
2273. [bug] Adjust log level to WARNING when saving inconsistant
stub/slave master and journal files. [RT# 17279]
@@ -189,7 +312,7 @@
2256. [bug] win32: Correctly register the installation location of
bindevt.dll. [RT #17159]
-2255. [bug] L.ROOT-SERVERS.NET is now 199.7.83.42.
+2255. [maint] L.ROOT-SERVERS.NET is now 199.7.83.42.
2254. [bug] timer.c:dispatch() failed to lock timer->lock
when reading timer->idle allowing it to see
@@ -2284,7 +2407,7 @@
1568. [bug] nsupdate now reports that the update failed in
interactive mode. [RT# 10236]
-1567. [bug] B.ROOT-SERVERS.NET is now 192.228.79.201.
+1567. [maint] B.ROOT-SERVERS.NET is now 192.228.79.201.
1566. [port] Support for the cmsg framework on Solaris and HP/UX.
This also solved the problem that match-destinations
@@ -2787,7 +2910,7 @@
1398. [doc] ARM: notify-also should have been also-notify.
[RT #4345]
-1397. [bug] J.ROOT-SERVERS.NET is now 192.58.128.30.
+1397. [maint] J.ROOT-SERVERS.NET is now 192.58.128.30.
1396. [func] dnssec-signzone: adjust the default signing time by
1 hour to allow for clock skew.
diff --git a/FAQ b/FAQ
index 90b3ca04..e6b2ff27 100644
--- a/FAQ
+++ b/FAQ
@@ -1,6 +1,6 @@
Frequently Asked Questions about BIND 9
-Copyright © 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+Copyright © 2004-2008 Internet Systems Consortium, Inc. ("ISC")
Copyright © 2000-2003 Internet Software Consortium.
@@ -594,7 +594,12 @@ Q: I get the error message "named: capset failed: Operation not permitted"
when starting named.
A: The capability module, part of "Linux Security Modules/LSM", has not
- been loaded into the kernel. See insmod(8).
+ been loaded into the kernel. See insmod(8), modprobe(8).
+
+ The relevant modules can be loaded by running:
+
+ modprobe commoncap
+ modprobe capability
Q: I'm running BIND on Red Hat Enterprise Linux or Fedora Core -
@@ -699,6 +704,18 @@ A: Red Hat Security Enhanced Linux (SELinux) policy security protections :
See these man-pages for more information : selinux(8), named_selinux
(8), chcon(1), setsebool(8)
+Q: Listening on individual IPv6 interfaces does not work.
+
+A: This is usually due to "/proc/net/if_inet6" not being available in the
+ chroot file system. Mount another instance of "proc" in the chroot file
+ system.
+
+ This can be be made permanent by adding a second instance to /etc/
+ fstab.
+
+ proc /proc proc defaults 0 0
+ proc /var/named/proc proc defaults 0 0
+
4.3. Windows
Q: Zone transfers from my BIND 9 master to my Windows 2000 slave fail.
diff --git a/FAQ.xml b/FAQ.xml
index f2b8e3f2..9729ba5b 100644
--- a/FAQ.xml
+++ b/FAQ.xml
@@ -1,7 +1,7 @@
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" []>
<!--
- - Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -17,7 +17,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: FAQ.xml,v 1.30 2007/11/02 00:25:41 marka Exp $ -->
+<!-- $Id: FAQ.xml,v 1.30.26.3 2008/02/25 05:08:10 marka Exp $ -->
<article class="faq">
<title>Frequently Asked Questions about BIND 9</title>
@@ -27,6 +27,7 @@
<year>2005</year>
<year>2006</year>
<year>2007</year>
+ <year>2008</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
@@ -1064,7 +1065,13 @@ client: UDP client handler shutting down due to fatal receive error: unexpected
<answer>
<para>
The capability module, part of "Linux Security Modules/LSM",
- has not been loaded into the kernel. See insmod(8).
+ has not been loaded into the kernel. See insmod(8), modprobe(8).
+ </para>
+ <para>
+ The relevant modules can be loaded by running:
+<programlisting>
+modprobe commoncap
+modprobe capability</programlisting>
</para>
</answer>
</qandaentry>
@@ -1233,6 +1240,30 @@ named_cache_t: for files modifiable by named - $ROOTDIR/var/{tmp,named/{slaves,d
</para>
</answer>
</qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>
+ Listening on individual IPv6 interfaces does not work.
+ </para>
+ </question>
+ <answer>
+ <para>
+ This is usually due to "/proc/net/if_inet6" not being available
+ in the chroot file system. Mount another instance of "proc"
+ in the chroot file system.
+ </para>
+ <para>
+ This can be be made permanent by adding a second instance to
+ /etc/fstab.
+ <informalexample>
+ <programlisting>
+proc /proc proc defaults 0 0
+proc /var/named/proc proc defaults 0 0</programlisting>
+ </informalexample>
+ </para>
+ </answer>
+ </qandaentry>
</qandadiv> <!-- Linux -->
diff --git a/README b/README
index da800c59..b89fa896 100644
--- a/README
+++ b/README
@@ -54,12 +54,16 @@ BIND 9.5.0
Experimental http server and statistics support for named via xml.
+ More detailed statistics counters including those supported in BIND 8.
+
Faster ACL processing.
- Use Doxygen to generate internal documention.
+ Use Doxygen to generate internal documentation.
Efficient LRU cache-cleaning mechanism.
+ NSID support (RFC 5001).
+
BIND 9.4.0
BIND 9.4.0 has a number of new features over 9.3,
@@ -429,8 +433,6 @@ Building
-DDIG_SIGCHASE_BU=1)
Disable dropping queries from particular well known ports.
-DNS_CLIENT_DROPPORT=0
- Disable support for "rrset-order fixed".
- -DDNS_RDATASET_FIXED=0
LDFLAGS
Linker flags. Defaults to empty string.
@@ -466,6 +468,11 @@ Building
on the configure command line. The default is operating
system dependent.
+ Support for the "fixed" rrset-order option can be enabled
+ or disabled by specifying "--enable-fixed-rrset" or
+ "--disable-fixed-rrset" on the configure command line.
+ The default is "disabled", to reduce memory footprint.
+
If your operating system has integrated support for IPv6, it
will be used automatically. If you have installed KAME IPv6
separately, use "--with-kame[=PATH]" to specify its location.
@@ -508,6 +515,9 @@ Building
on your system, and some require Perl; see bin/tests/system/README
for details.
+ SunOS 4 requires "printf" to be installed to make the shared
+ libraries. sh-utils-1.16 provides a "printf" which compiles
+ on SunOS 4.
Documentation
diff --git a/bin/dig/dig.c b/bin/dig/dig.c
index f4b43890..9866fa1a 100644
--- a/bin/dig/dig.c
+++ b/bin/dig/dig.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dig.c,v 1.218 2007/12/03 00:21:48 marka Exp $ */
+/* $Id: dig.c,v 1.218.12.3 2008/04/03 02:12:21 marka Exp $ */
/*! \file */
@@ -50,7 +50,7 @@
#define ADD_STRING(b, s) { \
if (strlen(s) >= isc_buffer_availablelength(b)) \
- return (ISC_R_NOSPACE); \
+ return (ISC_R_NOSPACE); \
else \
isc_buffer_putstr(b, s); \
}
@@ -144,8 +144,8 @@ help(void) {
" q-type is one of (a,any,mx,ns,soa,hinfo,axfr,txt,...) [default:a]\n"
" (Use ixfr=version for type ixfr)\n"
" q-opt is one of:\n"
-" -x dot-notation (shortcut for in-addr lookups)\n"
-" -i (IP6.INT reverse IPv6 lookups)\n"
+" -x dot-notation (shortcut for reverse lookups)\n"
+" -i (use IP6.INT for IPv6 reverse lookups)\n"
" -f filename (batch mode)\n"
" -b address[#port] (bind to source address/port)\n"
" -p port (specify port number)\n"
@@ -194,6 +194,7 @@ help(void) {
" +[no]identify (ID responders in short answers)\n"
" +[no]trace (Trace delegation down from root)\n"
" +[no]dnssec (Request DNSSEC records)\n"
+" +[no]nsid (Request Name Server ID)\n"
#ifdef DIG_SIGCHASE
" +[no]sigchase (Chase DNSSEC signatures)\n"
" +trusted-key=#### (Trusted Key when chasing DNSSEC sigs)\n"
@@ -383,7 +384,7 @@ printrdataset(dns_name_t *owner_name, dns_rdataset_t *rdataset,
else if (nottl || noclass)
result = dns_master_stylecreate(&style, styleflags,
24, 24, 32, 40, 80, 8, mctx);
- else
+ else
result = dns_master_stylecreate(&style, styleflags,
24, 32, 40, 48, 80, 8, mctx);
check_result(result, "dns_master_stylecreate");
@@ -392,7 +393,7 @@ printrdataset(dns_name_t *owner_name, dns_rdataset_t *rdataset,
if (style != NULL)
dns_master_styledestroy(&style, mctx);
-
+
return(result);
}
#endif
@@ -429,7 +430,7 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {
else if (nottl || noclass)
result = dns_master_stylecreate(&style, styleflags,
24, 24, 32, 40, 80, 8, mctx);
- else
+ else
result = dns_master_stylecreate(&style, styleflags,
24, 32, 40, 48, 80, 8, mctx);
check_result(result, "dns_master_stylecreate");
@@ -638,7 +639,7 @@ printgreeting(int argc, char **argv, dig_lookup_t *lookup) {
strncat(lookup->cmdline, append, remaining);
}
if (first) {
- snprintf(append, sizeof(append),
+ snprintf(append, sizeof(append),
";; global options: %s %s\n",
short_form ? "short_form" : "",
printcmd ? "printcmd" : "");
@@ -716,7 +717,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
FULLCHECK2("aaonly", "aaflag");
lookup->aaonly = state;
break;
- case 'd':
+ case 'd':
switch (cmd[2]) {
case 'd': /* additional */
FULLCHECK("additional");
@@ -801,13 +802,13 @@ plus_option(char *option, isc_boolean_t is_batchfile,
FULLCHECK("defname");
usesearch = state;
break;
- case 'n': /* dnssec */
+ case 'n': /* dnssec */
FULLCHECK("dnssec");
if (state && lookup->edns == -1)
lookup->edns = 0;
lookup->dnssec = state;
break;
- case 'o': /* domain */
+ case 'o': /* domain */
FULLCHECK("domain");
if (value == NULL)
goto need_value;
@@ -860,28 +861,40 @@ plus_option(char *option, isc_boolean_t is_batchfile,
goto invalid_option;
ndots = parse_uint(value, "ndots", MAXNDOTS);
break;
- case 's': /* nssearch */
- FULLCHECK("nssearch");
- lookup->ns_search_only = state;
- if (state) {
- lookup->trace_root = ISC_TRUE;
- lookup->recurse = ISC_TRUE;
- lookup->identify = ISC_TRUE;
- lookup->stats = ISC_FALSE;
- lookup->comments = ISC_FALSE;
- lookup->section_additional = ISC_FALSE;
- lookup->section_authority = ISC_FALSE;
- lookup->section_question = ISC_FALSE;
- lookup->rdtype = dns_rdatatype_ns;
- lookup->rdtypeset = ISC_TRUE;
- short_form = ISC_TRUE;
+ case 's':
+ switch (cmd[2]) {
+ case 'i': /* nsid */
+ FULLCHECK("nsid");
+ if (state && lookup->edns == -1)
+ lookup->edns = 0;
+ lookup->nsid = state;
+ break;
+ case 's': /* nssearch */
+ FULLCHECK("nssearch");
+ lookup->ns_search_only = state;
+ if (state) {
+ lookup->trace_root = ISC_TRUE;
+ lookup->recurse = ISC_TRUE;
+ lookup->identify = ISC_TRUE;
+ lookup->stats = ISC_FALSE;
+ lookup->comments = ISC_FALSE;
+ lookup->section_additional = ISC_FALSE;
+ lookup->section_authority = ISC_FALSE;
+ lookup->section_question = ISC_FALSE;
+ lookup->rdtype = dns_rdatatype_ns;
+ lookup->rdtypeset = ISC_TRUE;
+ short_form = ISC_TRUE;
+ }
+ break;
+ default:
+ goto invalid_option;
}
break;
default:
goto invalid_option;
}
break;
- case 'q':
+ case 'q':
switch (cmd[1]) {
case 'r': /* qr */
FULLCHECK("qr");
@@ -957,11 +970,11 @@ plus_option(char *option, isc_boolean_t is_batchfile,
break;
#ifdef DIG_SIGCHASE
case 'i': /* sigchase */
- FULLCHECK("sigchase");
+ FULLCHECK("sigchase");
lookup->sigchase = state;
if (lookup->sigchase)
lookup->dnssec = ISC_TRUE;
- break;
+ break;
#endif
case 't': /* stats */
FULLCHECK("stats");
@@ -989,7 +1002,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
timeout = 1;
break;
#if DIG_SIGCHASE_TD
- case 'o': /* topdown */
+ case 'o': /* topdown */
FULLCHECK("topdown");
lookup->do_topdown = state;
break;
@@ -1024,7 +1037,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
#ifdef DIG_SIGCHASE
case 'u': /* trusted-key */
FULLCHECK("trusted-key");
- if (value == NULL)
+ if (value == NULL)
goto need_value;
if (!state)
goto invalid_option;
@@ -1158,7 +1171,7 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
hash = strchr(value, '#');
if (hash != NULL) {
srcport = (in_port_t)
- parse_uint(hash + 1,
+ parse_uint(hash + 1,
"port number", MAXPORT);
*hash = '\0';
} else
@@ -1211,7 +1224,7 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
(*lookup) = clone_lookup(default_lookup,
ISC_TRUE);
*need_clone = ISC_TRUE;
- strncpy((*lookup)->textname, value,
+ strncpy((*lookup)->textname, value,
sizeof((*lookup)->textname));
(*lookup)->textname[sizeof((*lookup)->textname)-1]=0;
(*lookup)->trace_root = ISC_TF((*lookup)->trace ||
@@ -1250,7 +1263,7 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
(*lookup)->rdtypeset = ISC_TRUE;
(*lookup)->ixfr_serial =
parse_uint(&value[5], "serial number",
- MAXSERIAL);
+ MAXSERIAL);
(*lookup)->section_question = plusquest;
(*lookup)->comments = pluscomm;
(*lookup)->tcp_mode = ISC_TRUE;
@@ -1277,7 +1290,7 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
if (ptr2 == NULL)
usage();
ptr3 = next_token(&value,":"); /* secret or NULL */
- if (ptr3 != NULL) {
+ if (ptr3 != NULL) {
if (strcasecmp(ptr, "hmac-md5") == 0) {
hmacname = DNS_TSIG_HMACMD5_NAME;
digestbits = 0;
@@ -1426,7 +1439,7 @@ getaddresses(dig_lookup_t *lookup, const char *host) {
char tmp[ISC_NETADDR_FORMATSIZE];
result = bind9_getaddresses(host, 0, sockaddrs,
- DIG_MAX_ADDRESSES, &count);
+ DIG_MAX_ADDRESSES, &count);
if (result != ISC_R_SUCCESS)
fatal("couldn't get address for '%s': %s",
host, isc_result_totext(result));
@@ -1488,7 +1501,7 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only,
if (homedir != NULL) {
unsigned int n;
n = snprintf(rcfile, sizeof(rcfile), "%s/.digrc",
- homedir);
+ homedir);
if (n < sizeof(rcfile))
batchfp = fopen(rcfile, "r");
}
@@ -1568,7 +1581,7 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only,
tr.base = rv[0];
tr.length = strlen(rv[0]);
result = dns_rdatatype_fromtext(&rdtype,
- (isc_textregion_t *)&tr);
+ (isc_textregion_t *)&tr);
if (result == ISC_R_SUCCESS &&
rdtype == dns_rdatatype_ixfr) {
result = DNS_R_UNKNOWN;
@@ -1589,8 +1602,8 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only,
lookup->rdtypeset = ISC_TRUE;
lookup->ixfr_serial =
parse_uint(&rv[0][5],
- "serial number",
- MAXSERIAL);
+ "serial number",
+ MAXSERIAL);
lookup->section_question =
plusquest;
lookup->comments = pluscomm;
@@ -1626,7 +1639,7 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only,
lookup = clone_lookup(default_lookup,
ISC_TRUE);
need_clone = ISC_TRUE;
- strncpy(lookup->textname, rv[0],
+ strncpy(lookup->textname, rv[0],
sizeof(lookup->textname));
lookup->textname[sizeof(lookup->textname)-1]=0;
lookup->trace_root = ISC_TF(lookup->trace ||
diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c
index e83736d5..5419fc7a 100644
--- a/bin/dig/dighost.c
+++ b/bin/dig/dighost.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dighost.c,v 1.304.12.4 2008/01/17 23:46:35 tbox Exp $ */
+/* $Id: dighost.c,v 1.304.12.5 2008/04/03 02:12:21 marka Exp $ */
/*! \file
* \note
@@ -724,6 +724,7 @@ make_empty_lookup(void) {
looknew->servfail_stops = ISC_TRUE;
looknew->besteffort = ISC_TRUE;
looknew->dnssec = ISC_FALSE;
+ looknew->nsid = ISC_FALSE;
#ifdef DIG_SIGCHASE
looknew->sigchase = ISC_FALSE;
#if DIG_SIGCHASE_TD
@@ -803,6 +804,7 @@ clone_lookup(dig_lookup_t *lookold, isc_boolean_t servers) {
looknew->servfail_stops = lookold->servfail_stops;
looknew->besteffort = lookold->besteffort;
looknew->dnssec = lookold->dnssec;
+ looknew->nsid = lookold->nsid;
#ifdef DIG_SIGCHASE
looknew->sigchase = lookold->sigchase;
#if DIG_SIGCHASE_TD
@@ -1155,11 +1157,11 @@ setup_libs(void) {
/*%
* Add EDNS0 option record to a message. Currently, the only supported
- * options are UDP buffer size and the DO bit.
+ * options are UDP buffer size, the DO bit, and NSID request.
*/
static void
add_opt(dns_message_t *msg, isc_uint16_t udpsize, isc_uint16_t edns,
- isc_boolean_t dnssec)
+ isc_boolean_t dnssec, isc_boolean_t nsid)
{
dns_rdataset_t *rdataset = NULL;
dns_rdatalist_t *rdatalist = NULL;
@@ -1182,8 +1184,19 @@ add_opt(dns_message_t *msg, isc_uint16_t udpsize, isc_uint16_t edns,
rdatalist->ttl = edns << 16;
if (dnssec)
rdatalist->ttl |= DNS_MESSAGEEXTFLAG_DO;
- rdata->data = NULL;
- rdata->length = 0;
+ if (nsid) {
+ unsigned char data[4];
+ isc_buffer_t buf;
+
+ isc_buffer_init(&buf, data, sizeof(data));
+ isc_buffer_putuint16(&buf, DNS_OPT_NSID);
+ isc_buffer_putuint16(&buf, 0);
+ rdata->data = data;
+ rdata->length = sizeof(data);
+ } else {
+ rdata->data = NULL;
+ rdata->length = 0;
+ }
ISC_LIST_INIT(rdatalist->rdata);
ISC_LIST_APPEND(rdatalist->rdata, rdata, link);
dns_rdatalist_tordataset(rdatalist, rdataset);
@@ -1998,7 +2011,7 @@ setup_lookup(dig_lookup_t *lookup) {
if (lookup->edns < 0)
lookup->edns = 0;
add_opt(lookup->sendmsg, lookup->udpsize,
- lookup->edns, lookup->dnssec);
+ lookup->edns, lookup->dnssec, lookup->nsid);
}
result = dns_message_rendersection(lookup->sendmsg,
diff --git a/bin/dig/host.1 b/bin/dig/host.1
index 97d2a27e..d985a95a 100644
--- a/bin/dig/host.1
+++ b/bin/dig/host.1
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000-2002 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and distribute this software for any
@@ -13,7 +13,7 @@
.\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
.\" PERFORMANCE OF THIS SOFTWARE.
.\"
-.\" $Id: host.1,v 1.28 2007/05/09 03:33:50 marka Exp $
+.\" $Id: host.1,v 1.28.164.2 2008/04/06 01:41:39 tbox Exp $
.\"
.hy 0
.ad l
@@ -154,7 +154,7 @@ option is used to select the query type.
\fItype\fR
can be any recognized query type: CNAME, NS, SOA, SIG, KEY, AXFR, etc. When no query type is specified,
\fBhost\fR
-automatically selects an appropriate query type. By default it looks for A records, but if the
+automatically selects an appropriate query type. By default it looks for A, AAAA, and MX records, but if the
\fB\-C\fR
option was given, queries will be made for SOA records, and if
\fIname\fR
@@ -213,7 +213,7 @@ runs.
\fBdig\fR(1),
\fBnamed\fR(8).
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000\-2002 Internet Software Consortium.
.br
diff --git a/bin/dig/host.docbook b/bin/dig/host.docbook
index ffdec1bc..c2951283 100644
--- a/bin/dig/host.docbook
+++ b/bin/dig/host.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2002 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: host.docbook,v 1.16 2007/06/18 23:47:17 tbox Exp $ -->
+<!-- $Id: host.docbook,v 1.16.130.2 2008/04/05 23:46:39 tbox Exp $ -->
<refentry id="man.host">
<refentryinfo>
@@ -41,6 +41,7 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
+ <year>2008</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
@@ -199,7 +200,7 @@
NS, SOA, SIG, KEY, AXFR, etc. When no query type is specified,
<command>host</command> automatically selects an appropriate
query
- type. By default it looks for A records, but if the
+ type. By default it looks for A, AAAA, and MX records, but if the
<option>-C</option> option was given, queries will be made for SOA
records, and if <parameter>name</parameter> is a
dotted-decimal IPv4
diff --git a/bin/dig/host.html b/bin/dig/host.html
index 3caafc1a..1d1c1898 100644
--- a/bin/dig/host.html
+++ b/bin/dig/host.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2002 Internet Software Consortium.
-
- Permission to use, copy, modify, and distribute this software for any
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: host.html,v 1.27 2007/05/09 03:33:50 marka Exp $ -->
+<!-- $Id: host.html,v 1.27.164.2 2008/04/06 01:41:39 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -32,7 +32,7 @@
<div class="cmdsynopsis"><p><code class="command">host</code> [<code class="option">-aCdlnrsTwv</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-N <em class="replaceable"><code>ndots</code></em></code>] [<code class="option">-R <em class="replaceable"><code>number</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-W <em class="replaceable"><code>wait</code></em></code>] [<code class="option">-m <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-4</code>] [<code class="option">-6</code>] {name} [server]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543428"></a><h2>DESCRIPTION</h2>
+<a name="id2543431"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">host</strong></span>
is a simple utility for performing DNS lookups.
It is normally used to convert names to IP addresses and vice versa.
@@ -148,7 +148,7 @@
NS, SOA, SIG, KEY, AXFR, etc. When no query type is specified,
<span><strong class="command">host</strong></span> automatically selects an appropriate
query
- type. By default it looks for A records, but if the
+ type. By default it looks for A, AAAA, and MX records, but if the
<code class="option">-C</code> option was given, queries will be made for SOA
records, and if <em class="parameter"><code>name</code></em> is a
dotted-decimal IPv4
@@ -184,7 +184,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543725"></a><h2>IDN SUPPORT</h2>
+<a name="id2543797"></a><h2>IDN SUPPORT</h2>
<p>
If <span><strong class="command">host</strong></span> has been built with IDN (internationalized
domain name) support, it can accept and display non-ASCII domain names.
@@ -198,12 +198,12 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543748"></a><h2>FILES</h2>
+<a name="id2543819"></a><h2>FILES</h2>
<p><code class="filename">/etc/resolv.conf</code>
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543828"></a><h2>SEE ALSO</h2>
+<a name="id2543831"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dig</span>(1)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>.
</p>
diff --git a/bin/dig/include/dig/dig.h b/bin/dig/include/dig/dig.h
index 4c4608df..262a4e5b 100644
--- a/bin/dig/include/dig/dig.h
+++ b/bin/dig/include/dig/dig.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dig.h,v 1.105 2007/06/18 23:47:17 tbox Exp $ */
+/* $Id: dig.h,v 1.105.130.2 2008/04/03 06:08:26 tbox Exp $ */
#ifndef DIG_H
#define DIG_H
@@ -102,7 +102,7 @@ typedef struct dig_searchlist dig_searchlist_t;
/*% The dig_lookup structure */
struct dig_lookup {
isc_boolean_t
- pending, /*%< Pending a successful answer */
+ pending, /*%< Pending a successful answer */
waiting_connect,
doing_xfr,
ns_search_only, /*%< dig +nssearch, host -C */
@@ -129,27 +129,28 @@ struct dig_lookup {
need_search,
done_as_is,
besteffort,
- dnssec;
+ dnssec,
+ nsid; /*% Name Server ID (RFC 5001) */
#ifdef DIG_SIGCHASE
isc_boolean_t sigchase;
#if DIG_SIGCHASE_TD
- isc_boolean_t do_topdown,
- trace_root_sigchase,
- rdtype_sigchaseset,
- rdclass_sigchaseset;
+ isc_boolean_t do_topdown,
+ trace_root_sigchase,
+ rdtype_sigchaseset,
+ rdclass_sigchaseset;
/* Name we are going to validate RRset */
- char textnamesigchase[MXNAME];
+ char textnamesigchase[MXNAME];
#endif
#endif
-
+
char textname[MXNAME]; /*% Name we're going to be looking up */
char cmdline[MXNAME];
dns_rdatatype_t rdtype;
dns_rdatatype_t qrdtype;
#if DIG_SIGCHASE_TD
- dns_rdatatype_t rdtype_sigchase;
- dns_rdatatype_t qrdtype_sigchase;
- dns_rdataclass_t rdclass_sigchase;
+ dns_rdatatype_t rdtype_sigchase;
+ dns_rdatatype_t qrdtype_sigchase;
+ dns_rdataclass_t rdclass_sigchase;
#endif
dns_rdataclass_t rdclass;
isc_boolean_t rdtypeset;
@@ -231,7 +232,7 @@ struct dig_searchlist {
};
#ifdef DIG_SIGCHASE
struct dig_message {
- dns_message_t *msg;
+ dns_message_t *msg;
ISC_LINK(dig_message_t) link;
};
#endif
@@ -249,7 +250,7 @@ extern dig_searchlistlist_t search_list;
extern unsigned int extrabytes;
extern isc_boolean_t check_ra, have_ipv4, have_ipv6, specified_source,
- usesearch, showsearch, qr;
+ usesearch, showsearch, qr;
extern in_port_t port;
extern unsigned int timeout;
extern isc_mem_t *mctx;
diff --git a/bin/named/Makefile.in b/bin/named/Makefile.in
index 6655cb19..5f61cdf3 100644
--- a/bin/named/Makefile.in
+++ b/bin/named/Makefile.in
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.96.130.3 2008/01/22 22:51:26 marka Exp $
+# $Id: Makefile.in,v 1.96.130.4 2008/03/31 05:06:47 marka Exp $
srcdir = @srcdir@
VPATH = @srcdir@
@@ -134,7 +134,7 @@ bind9.xsl.h: bind9.xsl convertxsl.pl
${PERL} ${srcdir}/convertxsl.pl < ${srcdir}/bind9.xsl > bind9.xsl.h
depend: bind9.xsl.h
-server.@O@: bind9.xsl.h
+statschannel.@O@: bind9.xsl.h
installdirs:
$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${sbindir}
diff --git a/bin/named/bind9.xsl b/bin/named/bind9.xsl
index 25f72738..edc10ece 100644
--- a/bin/named/bind9.xsl
+++ b/bin/named/bind9.xsl
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- - Copyright (C) 2006, 2007 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2006-2008 Internet Systems Consortium, Inc. ("ISC")
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
@@ -15,7 +15,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: bind9.xsl,v 1.13 2007/06/18 23:47:18 tbox Exp $ -->
+<!-- $Id: bind9.xsl,v 1.13.130.4 2008/04/09 22:49:37 jinmei Exp $ -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
@@ -55,6 +55,11 @@ tr.lrow {
color: #ffffff;
}
+td, th {
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
.header {
background-color: teal;
color: #ffffff;
@@ -99,21 +104,293 @@ tr.lrow {
<br/>
<table>
- <tr class="rowh"><th colspan="2">Server statistics</th></tr>
- <xsl:for-each select="server/counters/*">
+ <tr class="rowh"><th colspan="2">Incoming Requests</th></tr>
+ <xsl:for-each select="server/requests/opcode">
<tr class="lrow">
- <td><xsl:value-of select="name()"/></td>
- <td><xsl:value-of select="."/></td>
+ <td><xsl:value-of select="name"/></td>
+ <td><xsl:value-of select="counter"/></td>
</tr>
</xsl:for-each>
</table>
- <br/>
+ <br/>
+
+ <table>
+ <tr class="rowh"><th colspan="2">Incoming Queries</th></tr>
+ <xsl:for-each select="server/queries-in/rdtype">
+ <tr class="lrow">
+ <td><xsl:value-of select="name"/></td>
+ <td><xsl:value-of select="counter"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+
+ <br/>
+
+ <xsl:for-each select="views/view">
+ <table>
+ <tr class="rowh">
+ <th colspan="2">Outgoing Queries from View <xsl:value-of select="name"/></th>
+ </tr>
+ <xsl:for-each select="rdtype">
+ <tr class="lrow">
+ <td><xsl:value-of select="name"/></td>
+ <td><xsl:value-of select="counter"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <br/>
+ </xsl:for-each>
+
+ <br/>
+
+ <table>
+ <tr class="rowh"><th colspan="10">Server Statistics</th></tr>
+ <tr class="rowh">
+ <!-- The ordering of the following items must be consistent
+ with dns_nsstatscounter_xxx -->
+ <th>Requestv4</th>
+ <th>Requestv6</th>
+ <th>ReqEdns0</th>
+ <th>ReqBadEDNSVer</th>
+ <th>ReqTSIG</th>
+ <th>ReqSIG0</th>
+ <th>ReqBadSIG</th>
+ <th>ReqTCP</th>
+ <th>AuthQryRej</th>
+ <th>RecQryRej</th>
+ </tr>
+ <tr class="lrow">
+ <td><xsl:value-of select="server/nsstats/Requestv4"/></td>
+ <td><xsl:value-of select="server/nsstats/Requestv6"/></td>
+ <td><xsl:value-of select="server/nsstats/ReqEdns0"/></td>
+ <td><xsl:value-of select="server/nsstats/ReqBadEDNSVer"/></td>
+ <td><xsl:value-of select="server/nsstats/ReqTSIG"/></td>
+ <td><xsl:value-of select="server/nsstats/ReqSIG0"/></td>
+ <td><xsl:value-of select="server/nsstats/ReqBadSIG"/></td>
+ <td><xsl:value-of select="server/nsstats/ReqTCP"/></td>
+ <td><xsl:value-of select="server/nsstats/AuthQryRej"/></td>
+ <td><xsl:value-of select="server/nsstats/RecQryRej"/></td>
+ </tr>
+ <tr class="rowh">
+ <th>XfrRej</th>
+ <th>UpdateRej</th>
+ <th>Response</th>
+ <th>RespTruncated</th>
+ <th>RespEDNS0</th>
+ <th>RespTSIG</th>
+ <th>RespSIG0</th>
+ <th>QrySuccess</th>
+ <th>QryAuthAns</th>
+ <th>QryNoauthAns</th>
+ </tr>
+ <tr class="lrow">
+ <td><xsl:value-of select="server/nsstats/XfrRej"/></td>
+ <td><xsl:value-of select="server/nsstats/UpdateRej"/></td>
+ <td><xsl:value-of select="server/nsstats/Response"/></td>
+ <td><xsl:value-of select="server/nsstats/TruncatedResp"/></td>
+ <td><xsl:value-of select="server/nsstats/RespEDNS0"/></td>
+ <td><xsl:value-of select="server/nsstats/RespTSIG"/></td>
+ <td><xsl:value-of select="server/nsstats/RespSIG0"/></td>
+ <td><xsl:value-of select="server/nsstats/QrySuccess"/></td>
+ <td><xsl:value-of select="server/nsstats/QryAuthAns"/></td>
+ <td><xsl:value-of select="server/nsstats/QryNoauthAns"/></td>
+ </tr>
+ <tr class="rowh">
+ <th>QryReferral</th>
+ <th>QryNxrrset</th>
+ <th>QrySERVFAIL</th>
+ <th>QryFORMERR</th>
+ <th>QryNXDOMAIN</th>
+ <th>QryRecursion</th>
+ <th>QryDuplicate</th>
+ <th>QryDropped</th>
+ <th>QryFailure</th>
+ <th>XfrReqDone</th>
+ </tr>
+ <tr class="lrow">
+ <td><xsl:value-of select="server/nsstats/QryReferral"/></td>
+ <td><xsl:value-of select="server/nsstats/QryNxrrset"/></td>
+ <td><xsl:value-of select="server/nsstats/QrySERVFAIL"/></td>
+ <td><xsl:value-of select="server/nsstats/QryFORMERR"/></td>
+ <td><xsl:value-of select="server/nsstats/QryNXDOMAIN"/></td>
+ <td><xsl:value-of select="server/nsstats/QryRecursion"/></td>
+ <td><xsl:value-of select="server/nsstats/QryDuplicate"/></td>
+ <td><xsl:value-of select="server/nsstats/QryDropped"/></td>
+ <td><xsl:value-of select="server/nsstats/QryFailure"/></td>
+ <td><xsl:value-of select="server/nsstats/XfrReqDone"/></td>
+ </tr>
+ <tr class="rowh">
+ <th>UpdateReqFwd</th>
+ <th>UpdateRespFwd</th>
+ <th>UpdateFwdFail</th>
+ <th>UpdateDone</th>
+ <th>UpdateFail</th>
+ <th>UpdateBadPrereq</th>
+ <th>RespMismatch</th>
+ <th />
+ <th />
+ <th />
+ </tr>
+ <tr class="lrow">
+ <td><xsl:value-of select="server/nsstats/UpdateReqFwd"/></td>
+ <td><xsl:value-of select="server/nsstats/UpdateRespFwd"/></td>
+ <td><xsl:value-of select="server/nsstats/UpdateFwdFail"/></td>
+ <td><xsl:value-of select="server/nsstats/UpdateDone"/></td>
+ <td><xsl:value-of select="server/nsstats/UpdateFail"/></td>
+ <td><xsl:value-of select="server/nsstats/UpdateBadPrereq"/></td>
+ <td><xsl:value-of select="server/resstats/Mismatch"/></td>
+ <td />
+ <td />
+ <td />
+ </tr>
+ </table>
+
+ <br/>
+
+ <table>
+ <tr class="rowh"><th colspan="10">Zone Maintenance Statistics</th></tr>
+ <tr class="rowh">
+ <!-- The ordering of the following items must be consistent
+ with dns_zonestatscounter_xxx -->
+ <th>NotifyOutv4</th>
+ <th>NotifyOutv6</th>
+ <th>NotifyInv4</th>
+ <th>NotifyInv6</th>
+ <th>NotifyRej</th>
+ <th>SOAOutv4</th>
+ <th>SOAOutv6</th>
+ <th>AXFRReqv4</th>
+ <th>AXFRReqv6</th>
+ <th>IXFRReqv4</th>
+ </tr>
+ <tr class="lrow">
+ <td><xsl:value-of select="server/zonestats/NotifyOutv4"/></td>
+ <td><xsl:value-of select="server/zonestats/NotifyOutv6"/></td>
+ <td><xsl:value-of select="server/zonestats/NotifyInv4"/></td>
+ <td><xsl:value-of select="server/zonestats/NotifyInv6"/></td>
+ <td><xsl:value-of select="server/zonestats/NotifyRej"/></td>
+ <td><xsl:value-of select="server/zonestats/SOAOutv4"/></td>
+ <td><xsl:value-of select="server/zonestats/SOAOutv6"/></td>
+ <td><xsl:value-of select="server/zonestats/AXFRReqv4"/></td>
+ <td><xsl:value-of select="server/zonestats/AXFRReqv6"/></td>
+ <td><xsl:value-of select="server/zonestats/IXFRReqv4"/></td>
+ </tr>
+ <tr class="rowh">
+ <th>IXFRReqv6</th>
+ <th>XfrSuccess</th>
+ <th>XfrFail</th>
+ <th/>
+ <th/>
+ <th/>
+ <th/>
+ <th/>
+ <th/>
+ <th/>
+ </tr>
+ <tr class="lrow">
+ <td><xsl:value-of select="server/zonestats/IXFRReqv6"/></td>
+ <td><xsl:value-of select="server/zonestats/XfrSuccess"/></td>
+ <td><xsl:value-of select="server/zonestats/XfrFail"/></td>
+ <td/>
+ <td/>
+ <td/>
+ <td/>
+ <td/>
+ <td/>
+ <td/>
+ </tr>
+ </table>
+
+ <br/>
+
+ <xsl:for-each select="views/view">
+ <table>
+ <tr class="rowh">
+ <th colspan="10">Resolver Statistics for View <xsl:value-of select="name"/></th>
+ </tr>
+ <tr class="rowh">
+ <!-- The ordering of the following items must be consistent
+ with dns_resstatscounter_xxx -->
+ <th>Queryv4</th>
+ <th>Queryv6</th>
+ <th>Responsev4</th>
+ <th>Responsev6</th>
+ <th>NXDOMAIN</th>
+ <th>SERVFAIL</th>
+ <th>FORMERR</th>
+ <th>OtherError</th>
+ <th>EDNS0Fail</th>
+ <!-- this counter is not applicable to per-view stat,
+ but keep it for generating the description table used in
+ the statschannel.c.
+ <th>Mismatch</th> -->
+ <th>Truncated</th>
+ </tr>
+ <tr class="lrow">
+ <td><xsl:value-of select="resstats/Queryv4"/></td>
+ <td><xsl:value-of select="resstats/Queryv6"/></td>
+ <td><xsl:value-of select="resstats/Responsev4"/></td>
+ <td><xsl:value-of select="resstats/Responsev6"/></td>
+ <td><xsl:value-of select="resstats/NXDOMAIN"/></td>
+ <td><xsl:value-of select="resstats/SERVFAIL"/></td>
+ <td><xsl:value-of select="resstats/FORMERR"/></td>
+ <td><xsl:value-of select="resstats/OtherError"/></td>
+ <td><xsl:value-of select="resstats/EDNS0Fail"/></td>
+ <!-- <td><xsl:value-of select="resstats/Mismatch"/></td> -->
+ <td><xsl:value-of select="resstats/Truncated"/></td>
+ </tr>
+ <tr class="rowh">
+ <th>Lame</th>
+ <th>Retry</th>
+ <th>GlueFetchv4</th>
+ <th>GlueFetchv6</th>
+ <th>GlueFetchv4Fail</th>
+ <th>GlueFetchv6Fail</th>
+ <th>ValAttempt</th>
+ <th>ValOk</th>
+ <th>ValNegOk</th>
+ <th>ValFail</th>
+ </tr>
+ <tr class="lrow">
+ <td><xsl:value-of select="resstats/Lame"/></td>
+ <td><xsl:value-of select="resstats/Retry"/></td>
+ <td><xsl:value-of select="resstats/GlueFetchv4"/></td>
+ <td><xsl:value-of select="resstats/GlueFetchv6"/></td>
+ <td><xsl:value-of select="resstats/GlueFetchv4Fail"/></td>
+ <td><xsl:value-of select="resstats/GlueFetchv6Fail"/></td>
+ <td><xsl:value-of select="resstats/ValAttempt"/></td>
+ <td><xsl:value-of select="resstats/ValOk"/></td>
+ <td><xsl:value-of select="resstats/ValNegOk"/></td>
+ <td><xsl:value-of select="resstats/ValFail"/></td>
+ </tr>
+ </table>
+ <br/>
+ </xsl:for-each>
+
+ <br/>
+
+ <xsl:for-each select="views/view">
+ <table>
+ <tr class="rowh">
+ <th colspan="2">Cache DB RRsets for View <xsl:value-of select="name"/></th>
+ </tr>
+ <xsl:for-each select="cache/rrset">
+ <tr class="lrow">
+ <td><xsl:value-of select="name"/></td>
+ <td><xsl:value-of select="counter"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <br/>
+ </xsl:for-each>
+
+ <br/>
<xsl:for-each select="views/view">
<table>
<tr class="rowh">
- <th colspan="11">Zones for View <xsl:value-of select="name"/></th>
+ <th colspan="10">Zones for View <xsl:value-of select="name"/></th>
</tr>
<tr class="rowh">
<th>Name</th>
@@ -123,10 +400,9 @@ tr.lrow {
<th>Referral</th>
<th>NXRRSET</th>
<th>NXDOMAIN</th>
- <th>Recursion</th>
<th>Failure</th>
- <th>Duplicate</th>
- <th>Dropped</th>
+ <th>XfrReqDone</th>
+ <th>XfrRej</th>
</tr>
<xsl:for-each select="zones/zone">
<tr class="lrow">
@@ -140,28 +416,25 @@ tr.lrow {
<xsl:value-of select="serial"/>
</td>
<td>
- <xsl:value-of select="counters/success"/>
- </td>
- <td>
- <xsl:value-of select="counters/referral"/>
+ <xsl:value-of select="counters/QrySuccess"/>
</td>
<td>
- <xsl:value-of select="counters/nxrrset"/>
+ <xsl:value-of select="counters/QryReferral"/>
</td>
<td>
- <xsl:value-of select="counters/nxdomain"/>
+ <xsl:value-of select="counters/QryNxrrset"/>
</td>
<td>
- <xsl:value-of select="counters/recursion"/>
+ <xsl:value-of select="counters/QryNXDOMAIN"/>
</td>
<td>
- <xsl:value-of select="counters/failure"/>
+ <xsl:value-of select="counters/QryFailure"/>
</td>
<td>
- <xsl:value-of select="counters/duplicate"/>
+ <xsl:value-of select="counters/XfrReqDone"/>
</td>
<td>
- <xsl:value-of select="counters/dropped"/>
+ <xsl:value-of select="counters/XfrRej"/>
</td>
</tr>
</xsl:for-each>
@@ -274,6 +547,70 @@ tr.lrow {
</tr>
</xsl:for-each>
</table>
+ <br />
+ <table>
+ <tr class="rowh">
+ <th colspan="4">Memory Usage Summary</th>
+ </tr>
+ <xsl:for-each select="memory/summary/*">
+ <tr class="lrow">
+ <td><xsl:value-of select="name()"/></td>
+ <td><xsl:value-of select="."/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <br />
+ <table>
+ <tr class="rowh">
+ <th colspan="10">Memory Contexts</th>
+ </tr>
+ <tr class="rowh">
+ <th>ID</th>
+ <th>Name</th>
+ <th>References</th>
+ <th>TotalUse</th>
+ <th>InUse</th>
+ <th>MaxUse</th>
+ <th>BlockSize</th>
+ <th>Pools</th>
+ <th>HiWater</th>
+ <th>LoWater</th>
+ </tr>
+ <xsl:for-each select="memory/contexts/context">
+ <tr class="lrow">
+ <td>
+ <xsl:value-of select="id"/>
+ </td>
+ <td>
+ <xsl:value-of select="name"/>
+ </td>
+ <td>
+ <xsl:value-of select="references"/>
+ </td>
+ <td>
+ <xsl:value-of select="total"/>
+ </td>
+ <td>
+ <xsl:value-of select="inuse"/>
+ </td>
+ <td>
+ <xsl:value-of select="maxinuse"/>
+ </td>
+ <td>
+ <xsl:value-of select="blocksize"/>
+ </td>
+ <td>
+ <xsl:value-of select="pools"/>
+ </td>
+ <td>
+ <xsl:value-of select="hiwater"/>
+ </td>
+ <td>
+ <xsl:value-of select="lowater"/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
</body>
</html>
diff --git a/bin/named/bind9.xsl.h b/bin/named/bind9.xsl.h
index 3d4cabd1..80788f8c 100644
--- a/bin/named/bind9.xsl.h
+++ b/bin/named/bind9.xsl.h
@@ -1,5 +1,698 @@
/*
- * Generated by convertxsl.pl 1.9 2007/09/14 06:14:44 marka Exp
- * From bind9.xsl 1.13 2007/06/18 23:47:18 tbox Exp
+ * Generated by convertxsl.pl 1.9.60.4 2008/04/03 10:51:01 marka Exp
+ * From bind9.xsl 1.13.130.4 2008/04/09 22:49:37 jinmei Exp
*/
-static char msg[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!-- - Copyright (C) 2006, 2007 Internet Systems Consortium, Inc. (\"ISC\") - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED \"AS IS\" AND ISC DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE.--><!-- \045Id: bind9.xsl,v 1.13 2007/06/18 23:47:18 tbox Exp \045 --><xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns=\"http://www.w3.org/1999/xhtml\"><xsl:template match=\"isc/bind/statistics\"><html><head><style type=\"text/css\">body { font-family: sans-serif; background-color: #ffffff; color: #000000;}table { border-collapse: collapse;}tr.rowh { text-align: center; border: 1px solid #000000; background-color: #8080ff; color: #ffffff;}tr.row { text-align: right; border: 1px solid #000000; background-color: teal; color: #ffffff;}tr.lrow { text-align: left; border: 1px solid #000000; background-color: teal; color: #ffffff;}.header { background-color: teal; color: #ffffff; padding: 4px;}.content { background-color: #ffffff; color: #000000; padding: 4px;}.item { padding: 4px; align: right;}.value { padding: 4px; font-weight: bold;} </style><title>BIND 9 Statistics</title></head><body><div class=\"header\">Bind 9 Configuration and Statistics</div><br/><table><tr class=\"rowh\"><th colspan=\"2\">Times</th></tr><tr class=\"lrow\"><td>boot-time</td><td><xsl:value-of select=\"server/boot-time\"/></td></tr><tr class=\"lrow\"><td>current-time</td><td><xsl:value-of select=\"server/current-time\"/></td></tr></table><br/><table><tr class=\"rowh\"><th colspan=\"2\">Server statistics</th></tr><xsl:for-each select=\"server/counters/*\"><tr class=\"lrow\"><td><xsl:value-of select=\"name()\"/></td><td><xsl:value-of select=\".\"/></td></tr></xsl:for-each></table><br/><xsl:for-each select=\"views/view\"><table><tr class=\"rowh\"><th colspan=\"11\">Zones for View <xsl:value-of select=\"name\"/></th></tr><tr class=\"rowh\"><th>Name</th><th>Class</th><th>Serial</th><th>Success</th><th>Referral</th><th>NXRRSET</th><th>NXDOMAIN</th><th>Recursion</th><th>Failure</th><th>Duplicate</th><th>Dropped</th></tr><xsl:for-each select=\"zones/zone\"><tr class=\"lrow\"><td><xsl:value-of select=\"name\"/></td><td><xsl:value-of select=\"rdataclass\"/></td><td><xsl:value-of select=\"serial\"/></td><td><xsl:value-of select=\"counters/success\"/></td><td><xsl:value-of select=\"counters/referral\"/></td><td><xsl:value-of select=\"counters/nxrrset\"/></td><td><xsl:value-of select=\"counters/nxdomain\"/></td><td><xsl:value-of select=\"counters/recursion\"/></td><td><xsl:value-of select=\"counters/failure\"/></td><td><xsl:value-of select=\"counters/duplicate\"/></td><td><xsl:value-of select=\"counters/dropped\"/></td></tr></xsl:for-each></table><br/></xsl:for-each><br/><table><tr class=\"rowh\"><th colspan=\"7\">Network Status</th></tr><tr class=\"rowh\"><th>ID</th><th>Name</th><th>Type</th><th>References</th><th>LocalAddress</th><th>PeerAddress</th><th>State</th></tr><xsl:for-each select=\"socketmgr/sockets/socket\"><tr class=\"lrow\"><td><xsl:value-of select=\"id\"/></td><td><xsl:value-of select=\"name\"/></td><td><xsl:value-of select=\"type\"/></td><td><xsl:value-of select=\"references\"/></td><td><xsl:value-of select=\"local-address\"/></td><td><xsl:value-of select=\"peer-address\"/></td><td><xsl:for-each select=\"states\"><xsl:value-of select=\".\"/></xsl:for-each></td></tr></xsl:for-each></table><br/><table><tr class=\"rowh\"><th colspan=\"2\">Task Manager Configuration</th></tr><tr class=\"lrow\"><td>Thread-Model</td><td><xsl:value-of select=\"taskmgr/thread-model/type\"/></td></tr><tr class=\"lrow\"><td>Worker Threads</td><td><xsl:value-of select=\"taskmgr/thread-model/worker-threads\"/></td></tr><tr class=\"lrow\"><td>Default Quantum</td><td><xsl:value-of select=\"taskmgr/thread-model/default-quantum\"/></td></tr><tr class=\"lrow\"><td>Tasks Running</td><td><xsl:value-of select=\"taskmgr/thread-model/tasks-running\"/></td></tr></table><br/><table><tr class=\"rowh\"><th colspan=\"5\">Tasks</th></tr><tr class=\"rowh\"><th>ID</th><th>Name</th><th>References</th><th>State</th><th>Quantum</th></tr><xsl:for-each select=\"taskmgr/tasks/task\"><tr class=\"lrow\"><td><xsl:value-of select=\"id\"/></td><td><xsl:value-of select=\"name\"/></td><td><xsl:value-of select=\"references\"/></td><td><xsl:value-of select=\"state\"/></td><td><xsl:value-of select=\"quantum\"/></td></tr></xsl:for-each></table></body></html></xsl:template></xsl:stylesheet>\n";
+static char xslmsg[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<!--\n"
+ " - Copyright (C) 2006-2008 Internet Systems Consortium, Inc. (\"ISC\")\n"
+ " -\n"
+ " - Permission to use, copy, modify, and/or distribute this software for any\n"
+ " - purpose with or without fee is hereby granted, provided that the above\n"
+ " - copyright notice and this permission notice appear in all copies.\n"
+ " -\n"
+ " - THE SOFTWARE IS PROVIDED \"AS IS\" AND ISC DISCLAIMS ALL WARRANTIES WITH\n"
+ " - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n"
+ " - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,\n"
+ " - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n"
+ " - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE\n"
+ " - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n"
+ " - PERFORMANCE OF THIS SOFTWARE.\n"
+ "-->\n"
+ "\n"
+ "<!-- \045Id: bind9.xsl,v 1.13.130.4 2008/04/09 22:49:37 jinmei Exp \045 -->\n"
+ "\n"
+ "<xsl:stylesheet version=\"1.0\"\n"
+ " xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\n"
+ " xmlns=\"http://www.w3.org/1999/xhtml\">\n"
+ " <xsl:template match=\"isc/bind/statistics\">\n"
+ " <html>\n"
+ " <head>\n"
+ " <style type=\"text/css\">\n"
+ "body {\n"
+ " font-family: sans-serif;\n"
+ " background-color: #ffffff;\n"
+ " color: #000000;\n"
+ "}\n"
+ "\n"
+ "table {\n"
+ " border-collapse: collapse;\n"
+ "}\n"
+ "\n"
+ "tr.rowh {\n"
+ " text-align: center;\n"
+ " border: 1px solid #000000;\n"
+ " background-color: #8080ff;\n"
+ " color: #ffffff;\n"
+ "}\n"
+ "\n"
+ "tr.row {\n"
+ " text-align: right;\n"
+ " border: 1px solid #000000;\n"
+ " background-color: teal;\n"
+ " color: #ffffff;\n"
+ "}\n"
+ "\n"
+ "tr.lrow {\n"
+ " text-align: left;\n"
+ " border: 1px solid #000000;\n"
+ " background-color: teal;\n"
+ " color: #ffffff;\n"
+ "}\n"
+ "\n"
+ "td, th {\n"
+ " padding-right: 5px;\n"
+ " padding-left: 5px;\n"
+ "}\n"
+ "\n"
+ ".header {\n"
+ " background-color: teal;\n"
+ " color: #ffffff;\n"
+ " padding: 4px;\n"
+ "}\n"
+ "\n"
+ ".content {\n"
+ " background-color: #ffffff;\n"
+ " color: #000000;\n"
+ " padding: 4px;\n"
+ "}\n"
+ "\n"
+ ".item {\n"
+ " padding: 4px;\n"
+ " align: right;\n"
+ "}\n"
+ "\n"
+ ".value {\n"
+ " padding: 4px;\n"
+ " font-weight: bold;\n"
+ "}\n"
+ " </style>\n"
+ " <title>BIND 9 Statistics</title>\n"
+ " </head>\n"
+ " <body>\n"
+ " <div class=\"header\">Bind 9 Configuration and Statistics</div>\n"
+ "\n"
+ " <br/>\n"
+ "\n"
+ " <table>\n"
+ " <tr class=\"rowh\"><th colspan=\"2\">Times</th></tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td>boot-time</td>\n"
+ " <td><xsl:value-of select=\"server/boot-time\"/></td>\n"
+ " </tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td>current-time</td>\n"
+ " <td><xsl:value-of select=\"server/current-time\"/></td>\n"
+ " </tr>\n"
+ " </table>\n"
+ "\n"
+ " <br/>\n"
+ "\n"
+ " <table>\n"
+ " <tr class=\"rowh\"><th colspan=\"2\">Incoming Requests</th></tr>\n"
+ " <xsl:for-each select=\"server/requests/opcode\">\n"
+ " <tr class=\"lrow\">\n"
+ " <td><xsl:value-of select=\"name\"/></td>\n"
+ " <td><xsl:value-of select=\"counter\"/></td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ "\n"
+ " <br/>\n"
+ "\n"
+ " <table>\n"
+ " <tr class=\"rowh\"><th colspan=\"2\">Incoming Queries</th></tr>\n"
+ " <xsl:for-each select=\"server/queries-in/rdtype\">\n"
+ " <tr class=\"lrow\">\n"
+ " <td><xsl:value-of select=\"name\"/></td>\n"
+ " <td><xsl:value-of select=\"counter\"/></td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ "\n"
+ " <br/>\n"
+ "\n"
+ " <xsl:for-each select=\"views/view\">\n"
+ " <table>\n"
+ " <tr class=\"rowh\">\n"
+ " <th colspan=\"2\">Outgoing Queries from View <xsl:value-of select=\"name\"/></th>\n"
+ " </tr>\n"
+ " <xsl:for-each select=\"rdtype\">\n"
+ " <tr class=\"lrow\">\n"
+ " <td><xsl:value-of select=\"name\"/></td>\n"
+ " <td><xsl:value-of select=\"counter\"/></td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <br/>\n"
+ " </xsl:for-each>\n"
+ "\n"
+ " <br/>\n"
+ "\n"
+ " <table>\n"
+ " <tr class=\"rowh\"><th colspan=\"10\">Server Statistics</th></tr>\n"
+ " <tr class=\"rowh\">\n"
+ " <!-- The ordering of the following items must be consistent\n"
+ " with dns_nsstatscounter_xxx -->\n"
+ " <th>Requestv4</th>\n"
+ " <th>Requestv6</th>\n"
+ " <th>ReqEdns0</th>\n"
+ " <th>ReqBadEDNSVer</th>\n"
+ " <th>ReqTSIG</th>\n"
+ " <th>ReqSIG0</th>\n"
+ " <th>ReqBadSIG</th>\n"
+ " <th>ReqTCP</th>\n"
+ " <th>AuthQryRej</th>\n"
+ " <th>RecQryRej</th>\n"
+ " </tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td><xsl:value-of select=\"server/nsstats/Requestv4\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/Requestv6\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/ReqEdns0\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/ReqBadEDNSVer\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/ReqTSIG\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/ReqSIG0\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/ReqBadSIG\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/ReqTCP\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/AuthQryRej\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/RecQryRej\"/></td>\n"
+ " </tr>\n"
+ " <tr class=\"rowh\">\n"
+ " <th>XfrRej</th>\n"
+ " <th>UpdateRej</th>\n"
+ " <th>Response</th>\n"
+ " <th>RespTruncated</th>\n"
+ " <th>RespEDNS0</th>\n"
+ " <th>RespTSIG</th>\n"
+ " <th>RespSIG0</th>\n"
+ " <th>QrySuccess</th>\n"
+ " <th>QryAuthAns</th>\n"
+ " <th>QryNoauthAns</th>\n"
+ " </tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td><xsl:value-of select=\"server/nsstats/XfrRej\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/UpdateRej\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/Response\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/TruncatedResp\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/RespEDNS0\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/RespTSIG\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/RespSIG0\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/QrySuccess\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/QryAuthAns\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/QryNoauthAns\"/></td>\n"
+ " </tr>\n"
+ " <tr class=\"rowh\">\n"
+ " <th>QryReferral</th>\n"
+ " <th>QryNxrrset</th>\n"
+ " <th>QrySERVFAIL</th>\n"
+ " <th>QryFORMERR</th>\n"
+ " <th>QryNXDOMAIN</th>\n"
+ " <th>QryRecursion</th>\n"
+ " <th>QryDuplicate</th>\n"
+ " <th>QryDropped</th>\n"
+ " <th>QryFailure</th>\n"
+ " <th>XfrReqDone</th>\n"
+ " </tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td><xsl:value-of select=\"server/nsstats/QryReferral\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/QryNxrrset\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/QrySERVFAIL\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/QryFORMERR\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/QryNXDOMAIN\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/QryRecursion\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/QryDuplicate\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/QryDropped\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/QryFailure\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/XfrReqDone\"/></td>\n"
+ " </tr>\n"
+ " <tr class=\"rowh\">\n"
+ " <th>UpdateReqFwd</th>\n"
+ " <th>UpdateRespFwd</th>\n"
+ " <th>UpdateFwdFail</th>\n"
+ " <th>UpdateDone</th>\n"
+ " <th>UpdateFail</th>\n"
+ " <th>UpdateBadPrereq</th>\n"
+ " <th>RespMismatch</th>\n"
+ " <th />\n"
+ " <th />\n"
+ " <th />\n"
+ " </tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td><xsl:value-of select=\"server/nsstats/UpdateReqFwd\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/UpdateRespFwd\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/UpdateFwdFail\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/UpdateDone\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/UpdateFail\"/></td>\n"
+ " <td><xsl:value-of select=\"server/nsstats/UpdateBadPrereq\"/></td>\n"
+ " <td><xsl:value-of select=\"server/resstats/Mismatch\"/></td>\n"
+ " <td />\n"
+ " <td />\n"
+ " <td />\n"
+ " </tr>\n"
+ " </table>\n"
+ "\n"
+ " <br/>\n"
+ "\n"
+ " <table>\n"
+ " <tr class=\"rowh\"><th colspan=\"10\">Zone Maintenance Statistics</th></tr>\n"
+ " <tr class=\"rowh\">\n"
+ " <!-- The ordering of the following items must be consistent\n"
+ " with dns_zonestatscounter_xxx -->\n"
+ " <th>NotifyOutv4</th>\n"
+ " <th>NotifyOutv6</th>\n"
+ " <th>NotifyInv4</th>\n"
+ " <th>NotifyInv6</th>\n"
+ " <th>NotifyRej</th>\n"
+ " <th>SOAOutv4</th>\n"
+ " <th>SOAOutv6</th>\n"
+ " <th>AXFRReqv4</th>\n"
+ " <th>AXFRReqv6</th>\n"
+ " <th>IXFRReqv4</th>\n"
+ " </tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td><xsl:value-of select=\"server/zonestats/NotifyOutv4\"/></td>\n"
+ " <td><xsl:value-of select=\"server/zonestats/NotifyOutv6\"/></td>\n"
+ " <td><xsl:value-of select=\"server/zonestats/NotifyInv4\"/></td>\n"
+ " <td><xsl:value-of select=\"server/zonestats/NotifyInv6\"/></td>\n"
+ " <td><xsl:value-of select=\"server/zonestats/NotifyRej\"/></td>\n"
+ " <td><xsl:value-of select=\"server/zonestats/SOAOutv4\"/></td>\n"
+ " <td><xsl:value-of select=\"server/zonestats/SOAOutv6\"/></td>\n"
+ " <td><xsl:value-of select=\"server/zonestats/AXFRReqv4\"/></td>\n"
+ " <td><xsl:value-of select=\"server/zonestats/AXFRReqv6\"/></td>\n"
+ " <td><xsl:value-of select=\"server/zonestats/IXFRReqv4\"/></td>\n"
+ " </tr>\n"
+ " <tr class=\"rowh\">\n"
+ " <th>IXFRReqv6</th>\n"
+ " <th>XfrSuccess</th>\n"
+ " <th>XfrFail</th>\n"
+ " <th/>\n"
+ " <th/>\n"
+ " <th/>\n"
+ " <th/>\n"
+ " <th/>\n"
+ " <th/>\n"
+ " <th/>\n"
+ " </tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td><xsl:value-of select=\"server/zonestats/IXFRReqv6\"/></td>\n"
+ " <td><xsl:value-of select=\"server/zonestats/XfrSuccess\"/></td>\n"
+ " <td><xsl:value-of select=\"server/zonestats/XfrFail\"/></td>\n"
+ " <td/>\n"
+ " <td/>\n"
+ " <td/>\n"
+ " <td/>\n"
+ " <td/>\n"
+ " <td/>\n"
+ " <td/>\n"
+ " </tr>\n"
+ " </table>\n"
+ "\n"
+ " <br/>\n"
+ "\n"
+ " <xsl:for-each select=\"views/view\">\n"
+ " <table>\n"
+ " <tr class=\"rowh\">\n"
+ " <th colspan=\"10\">Resolver Statistics for View <xsl:value-of select=\"name\"/></th>\n"
+ " </tr>\n"
+ " <tr class=\"rowh\">\n"
+ " <!-- The ordering of the following items must be consistent\n"
+ " with dns_resstatscounter_xxx -->\n"
+ " <th>Queryv4</th>\n"
+ " <th>Queryv6</th>\n"
+ " <th>Responsev4</th>\n"
+ " <th>Responsev6</th>\n"
+ " <th>NXDOMAIN</th>\n"
+ " <th>SERVFAIL</th>\n"
+ " <th>FORMERR</th>\n"
+ " <th>OtherError</th>\n"
+ " <th>EDNS0Fail</th>\n"
+ " <!-- this counter is not applicable to per-view stat,\n"
+ " but keep it for generating the description table used in\n"
+ " the statschannel.c.\n"
+ " <th>Mismatch</th> -->\n"
+ " <th>Truncated</th>\n"
+ " </tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td><xsl:value-of select=\"resstats/Queryv4\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/Queryv6\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/Responsev4\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/Responsev6\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/NXDOMAIN\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/SERVFAIL\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/FORMERR\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/OtherError\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/EDNS0Fail\"/></td>\n"
+ " <!-- <td><xsl:value-of select=\"resstats/Mismatch\"/></td> -->\n"
+ " <td><xsl:value-of select=\"resstats/Truncated\"/></td>\n"
+ " </tr>\n"
+ " <tr class=\"rowh\">\n"
+ " <th>Lame</th>\n"
+ " <th>Retry</th>\n"
+ " <th>GlueFetchv4</th>\n"
+ " <th>GlueFetchv6</th>\n"
+ " <th>GlueFetchv4Fail</th>\n"
+ " <th>GlueFetchv6Fail</th>\n"
+ " <th>ValAttempt</th>\n"
+ " <th>ValOk</th>\n"
+ " <th>ValNegOk</th>\n"
+ " <th>ValFail</th>\n"
+ " </tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td><xsl:value-of select=\"resstats/Lame\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/Retry\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/GlueFetchv4\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/GlueFetchv6\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/GlueFetchv4Fail\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/GlueFetchv6Fail\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/ValAttempt\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/ValOk\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/ValNegOk\"/></td>\n"
+ " <td><xsl:value-of select=\"resstats/ValFail\"/></td>\n"
+ " </tr>\n"
+ " </table>\n"
+ " <br/>\n"
+ " </xsl:for-each>\n"
+ "\n"
+ " <br/>\n"
+ "\n"
+ " <xsl:for-each select=\"views/view\">\n"
+ " <table>\n"
+ " <tr class=\"rowh\">\n"
+ " <th colspan=\"2\">Cache DB RRsets for View <xsl:value-of select=\"name\"/></th>\n"
+ " </tr>\n"
+ " <xsl:for-each select=\"cache/rrset\">\n"
+ " <tr class=\"lrow\">\n"
+ " <td><xsl:value-of select=\"name\"/></td>\n"
+ " <td><xsl:value-of select=\"counter\"/></td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <br/>\n"
+ " </xsl:for-each>\n"
+ "\n"
+ " <br/>\n"
+ "\n"
+ " <xsl:for-each select=\"views/view\">\n"
+ " <table>\n"
+ " <tr class=\"rowh\">\n"
+ " <th colspan=\"10\">Zones for View <xsl:value-of select=\"name\"/></th>\n"
+ " </tr>\n"
+ " <tr class=\"rowh\">\n"
+ " <th>Name</th>\n"
+ " <th>Class</th>\n"
+ " <th>Serial</th>\n"
+ " <th>Success</th>\n"
+ " <th>Referral</th>\n"
+ " <th>NXRRSET</th>\n"
+ " <th>NXDOMAIN</th>\n"
+ " <th>Failure</th>\n"
+ " <th>XfrReqDone</th>\n"
+ " <th>XfrRej</th>\n"
+ " </tr>\n"
+ " <xsl:for-each select=\"zones/zone\">\n"
+ " <tr class=\"lrow\">\n"
+ " <td>\n"
+ " <xsl:value-of select=\"name\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"rdataclass\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"serial\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"counters/QrySuccess\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"counters/QryReferral\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"counters/QryNxrrset\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"counters/QryNXDOMAIN\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"counters/QryFailure\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"counters/XfrReqDone\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"counters/XfrRej\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <br/>\n"
+ " </xsl:for-each>\n"
+ "\n"
+ " <br/>\n"
+ "\n"
+ " <table>\n"
+ " <tr class=\"rowh\">\n"
+ " <th colspan=\"7\">Network Status</th>\n"
+ " </tr>\n"
+ " <tr class=\"rowh\">\n"
+ " <th>ID</th>\n"
+ " <th>Name</th>\n"
+ " <th>Type</th>\n"
+ " <th>References</th>\n"
+ " <th>LocalAddress</th>\n"
+ " <th>PeerAddress</th>\n"
+ " <th>State</th>\n"
+ " </tr>\n"
+ " <xsl:for-each select=\"socketmgr/sockets/socket\">\n"
+ " <tr class=\"lrow\">\n"
+ " <td>\n"
+ " <xsl:value-of select=\"id\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"name\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"type\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"references\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"local-address\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"peer-address\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:for-each select=\"states\">\n"
+ " <xsl:value-of select=\".\"/>\n"
+ " </xsl:for-each>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <br/>\n"
+ " <table>\n"
+ " <tr class=\"rowh\">\n"
+ " <th colspan=\"2\">Task Manager Configuration</th>\n"
+ " </tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td>Thread-Model</td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"taskmgr/thread-model/type\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td>Worker Threads</td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"taskmgr/thread-model/worker-threads\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td>Default Quantum</td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"taskmgr/thread-model/default-quantum\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " <tr class=\"lrow\">\n"
+ " <td>Tasks Running</td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"taskmgr/thread-model/tasks-running\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </table>\n"
+ " <br/>\n"
+ " <table>\n"
+ " <tr class=\"rowh\">\n"
+ " <th colspan=\"5\">Tasks</th>\n"
+ " </tr>\n"
+ " <tr class=\"rowh\">\n"
+ " <th>ID</th>\n"
+ " <th>Name</th>\n"
+ " <th>References</th>\n"
+ " <th>State</th>\n"
+ " <th>Quantum</th>\n"
+ " </tr>\n"
+ " <xsl:for-each select=\"taskmgr/tasks/task\">\n"
+ " <tr class=\"lrow\">\n"
+ " <td>\n"
+ " <xsl:value-of select=\"id\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"name\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"references\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"state\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"quantum\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <br />\n"
+ " <table>\n"
+ " <tr class=\"rowh\">\n"
+ " <th colspan=\"4\">Memory Usage Summary</th>\n"
+ " </tr>\n"
+ " <xsl:for-each select=\"memory/summary/*\">\n"
+ " <tr class=\"lrow\">\n"
+ " <td><xsl:value-of select=\"name()\"/></td>\n"
+ " <td><xsl:value-of select=\".\"/></td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <br />\n"
+ " <table>\n"
+ " <tr class=\"rowh\">\n"
+ " <th colspan=\"10\">Memory Contexts</th>\n"
+ " </tr>\n"
+ " <tr class=\"rowh\">\n"
+ " <th>ID</th>\n"
+ " <th>Name</th>\n"
+ " <th>References</th>\n"
+ " <th>TotalUse</th>\n"
+ " <th>InUse</th>\n"
+ " <th>MaxUse</th>\n"
+ " <th>BlockSize</th>\n"
+ " <th>Pools</th>\n"
+ " <th>HiWater</th>\n"
+ " <th>LoWater</th>\n"
+ " </tr>\n"
+ " <xsl:for-each select=\"memory/contexts/context\">\n"
+ " <tr class=\"lrow\">\n"
+ " <td>\n"
+ " <xsl:value-of select=\"id\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"name\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"references\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"total\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"inuse\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"maxinuse\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"blocksize\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"pools\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"hiwater\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"lowater\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ "\n"
+ " </body>\n"
+ " </html>\n"
+ " </xsl:template>\n"
+ "</xsl:stylesheet>\n";
+#ifdef HAVE_LIBXML2
+static const char *nsstats_xmldesc[] = { "Requestv4",
+ "Requestv6",
+ "ReqEdns0",
+ "ReqBadEDNSVer",
+ "ReqTSIG",
+ "ReqSIG0",
+ "ReqBadSIG",
+ "ReqTCP",
+ "AuthQryRej",
+ "RecQryRej",
+ "XfrRej",
+ "UpdateRej",
+ "Response",
+ "TruncatedResp",
+ "RespEDNS0",
+ "RespTSIG",
+ "RespSIG0",
+ "QrySuccess",
+ "QryAuthAns",
+ "QryNoauthAns",
+ "QryReferral",
+ "QryNxrrset",
+ "QrySERVFAIL",
+ "QryFORMERR",
+ "QryNXDOMAIN",
+ "QryRecursion",
+ "QryDuplicate",
+ "QryDropped",
+ "QryFailure",
+ "XfrReqDone",
+ "UpdateReqFwd",
+ "UpdateRespFwd",
+ "UpdateFwdFail",
+ "UpdateDone",
+ "UpdateFail",
+ "UpdateBadPrereq"
+};
+static const char *zonestats_xmldesc[] = { "NotifyOutv4",
+ "NotifyOutv6",
+ "NotifyInv4",
+ "NotifyInv6",
+ "NotifyRej",
+ "SOAOutv4",
+ "SOAOutv6",
+ "AXFRReqv4",
+ "AXFRReqv6",
+ "IXFRReqv4",
+ "IXFRReqv6",
+ "XfrSuccess",
+ "XfrFail"
+};
+static const char *resstats_xmldesc[] = { "Queryv4",
+ "Queryv6",
+ "Responsev4",
+ "Responsev6",
+ "NXDOMAIN",
+ "SERVFAIL",
+ "FORMERR",
+ "OtherError",
+ "EDNS0Fail",
+ "Mismatch",
+ "Truncated",
+ "Lame",
+ "Retry",
+ "GlueFetchv4",
+ "GlueFetchv6",
+ "GlueFetchv4Fail",
+ "GlueFetchv6Fail",
+ "ValAttempt",
+ "ValOk",
+ "ValNegOk",
+ "ValFail"
+};
+#endif
diff --git a/bin/named/client.c b/bin/named/client.c
index df98201c..0f076d81 100644
--- a/bin/named/client.c
+++ b/bin/named/client.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: client.c,v 1.250 2007/11/26 04:47:17 marka Exp $ */
+/* $Id: client.c,v 1.250.16.5 2008/04/03 06:20:33 tbox Exp $ */
#include <config.h>
@@ -41,6 +41,7 @@
#include <dns/rdatalist.h>
#include <dns/rdataset.h>
#include <dns/resolver.h>
+#include <dns/stats.h>
#include <dns/tsig.h>
#include <dns/view.h>
#include <dns/zone.h>
@@ -48,6 +49,7 @@
#include <named/interfacemgr.h>
#include <named/log.h>
#include <named/notify.h>
+#include <named/os.h>
#include <named/server.h>
#include <named/update.h>
@@ -132,7 +134,7 @@ struct ns_clientmgr {
#define MANAGER_MAGIC ISC_MAGIC('N', 'S', 'C', 'm')
#define VALID_MANAGER(m) ISC_MAGIC_VALID(m, MANAGER_MAGIC)
-/*!
+/*!
* Client object states. Ordering is significant: higher-numbered
* states are generally "more active", meaning that the client can
* have more dynamically allocated data, outstanding events, etc.
@@ -286,7 +288,7 @@ exit_check(ns_client_t *client) {
*
* Keep the view attached until any outstanding updates complete.
*/
- if (client->nupdates == 0 &&
+ if (client->nupdates == 0 &&
client->newstate == NS_CLIENTSTATE_FREED && client->view != NULL)
dns_view_detach(&client->view);
@@ -834,7 +836,7 @@ client_sendpkg(ns_client_t *client, isc_buffer_t *buffer) {
isc_buffer_usedregion(buffer, &r);
CTRACE("sendto");
-
+
result = isc_socket_sendto2(socket, &r, client->task,
address, pktinfo,
client->sendevent, sockflags);
@@ -906,6 +908,7 @@ ns_client_send(ns_client_t *client) {
unsigned char sendbuf[SEND_BUFFER_SIZE];
unsigned int dnssec_opts;
unsigned int preferred_glue;
+ isc_boolean_t opt_included = ISC_FALSE;
REQUIRE(NS_CLIENT_VALID(client));
@@ -943,11 +946,10 @@ ns_client_send(ns_client_t *client) {
result = dns_message_renderbegin(client->message, &cctx, &buffer);
if (result != ISC_R_SUCCESS)
goto done;
+
if (client->opt != NULL) {
result = dns_message_setopt(client->message, client->opt);
- /*
- * XXXRTH dns_message_setopt() should probably do this...
- */
+ opt_included = ISC_TRUE;
client->opt = NULL;
if (result != ISC_R_SUCCESS)
goto done;
@@ -1003,6 +1005,26 @@ ns_client_send(ns_client_t *client) {
result = client_sendpkg(client, &tcpbuffer);
} else
result = client_sendpkg(client, &buffer);
+
+ /* update statistics (XXXJT: is it okay to access message->xxxkey?) */
+ dns_generalstats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_response);
+ if (opt_included) {
+ dns_generalstats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_edns0out);
+ }
+ if (client->message->tsigkey != NULL) {
+ dns_generalstats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_tsigout);
+ }
+ if (client->message->sig0key != NULL) {
+ dns_generalstats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_sig0out);
+ }
+ if ((client->message->flags & DNS_MESSAGEFLAG_TC) != 0)
+ dns_generalstats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_truncatedresp);
+
if (result == ISC_R_SUCCESS)
return;
@@ -1108,8 +1130,8 @@ ns_client_error(ns_client_t *client, isc_result_t result) {
/*
* FORMERR loop avoidance: If we sent a FORMERR message
* with the same ID to the same client less than two
- * seconds ago, assume that we are in an infinite error
- * packet dialog with a server for some protocol whose
+ * seconds ago, assume that we are in an infinite error
+ * packet dialog with a server for some protocol whose
* error responses look enough like DNS queries to
* elicit a FORMERR response. Drop a packet to break
* the loop.
@@ -1179,11 +1201,46 @@ client_addopt(ns_client_t *client) {
*/
rdatalist->ttl = (client->extflags & DNS_MESSAGEEXTFLAG_REPLYPRESERVE);
- /*
- * No EDNS options in the default case.
- */
- rdata->data = NULL;
- rdata->length = 0;
+ /* Set EDNS options if applicable */
+ if (client->attributes & NS_CLIENTATTR_WANTNSID &&
+ (ns_g_server->server_id != NULL ||
+ ns_g_server->server_usehostname)) {
+ /*
+ * Space required for NSID data:
+ * 2 bytes for opt code
+ * + 2 bytes for NSID length
+ * + NSID itself
+ */
+ char nsid[BUFSIZ];
+ isc_buffer_t *buffer = NULL;
+
+ if (ns_g_server->server_usehostname) {
+ isc_result_t result;
+ result = ns_os_gethostname(nsid, sizeof(nsid));
+ if (result != ISC_R_SUCCESS) {
+ goto no_nsid;
+ }
+ } else {
+ strncpy(nsid, ns_g_server->server_id, sizeof(nsid));
+ }
+
+ rdata->length = strlen(nsid) + 4;
+ result = isc_buffer_allocate(client->mctx, &buffer,
+ rdata->length);
+ if (result != ISC_R_SUCCESS)
+ goto no_nsid;
+
+ isc_buffer_putuint16(buffer, DNS_OPT_NSID);
+ isc_buffer_putuint16(buffer, strlen(nsid));
+ isc_buffer_putstr(buffer, nsid);
+ rdata->data = buffer->base;
+ dns_message_takebuffer(client->message, &buffer);
+ } else {
+no_nsid:
+ rdata->data = NULL;
+ rdata->length = 0;
+ }
+
rdata->rdclass = rdatalist->rdclass;
rdata->type = rdatalist->type;
rdata->flags = 0;
@@ -1284,6 +1341,7 @@ client_request(isc_task_t *task, isc_event_t *event) {
isc_buffer_t tbuffer;
dns_view_t *view;
dns_rdataset_t *opt;
+ dns_name_t *signame;
isc_boolean_t ra; /* Recursion available. */
isc_netaddr_t netaddr;
isc_netaddr_t destaddr;
@@ -1291,6 +1349,8 @@ client_request(isc_task_t *task, isc_event_t *event) {
dns_messageid_t id;
unsigned int flags;
isc_boolean_t notimp;
+ dns_rdata_t rdata;
+ isc_uint16_t optcode;
REQUIRE(event != NULL);
client = event->ev_arg;
@@ -1440,6 +1500,20 @@ client_request(isc_task_t *task, isc_event_t *event) {
}
/*
+ * Update some statistics counters. Don't count responses.
+ */
+ if (isc_sockaddr_pf(&client->peeraddr) == PF_INET) {
+ dns_generalstats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_requestv4);
+ } else {
+ dns_generalstats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_requestv6);
+ }
+ if (TCP_CLIENT(client))
+ dns_generalstats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_tcp);
+
+ /*
* Hash the incoming request here as it is after
* dns_dispatch_importrecv().
*/
@@ -1460,6 +1534,8 @@ client_request(isc_task_t *task, isc_event_t *event) {
goto cleanup;
}
+ dns_opcodestats_increment(ns_g_server->opcodestats,
+ client->message->opcode);
switch (client->message->opcode) {
case dns_opcode_query:
case dns_opcode_update:
@@ -1507,12 +1583,35 @@ client_request(isc_task_t *task, isc_event_t *event) {
*/
client->ednsversion = (opt->ttl & 0x00FF0000) >> 16;
if (client->ednsversion > 0) {
+ dns_generalstats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_badednsver);
result = client_addopt(client);
if (result == ISC_R_SUCCESS)
result = DNS_R_BADVERS;
ns_client_error(client, result);
goto cleanup;
}
+
+ /* Check for NSID request */
+ result = dns_rdataset_first(opt);
+ if (result == ISC_R_SUCCESS) {
+ dns_rdata_init(&rdata);
+ dns_rdataset_current(opt, &rdata);
+ if (rdata.length >= 2) {
+ isc_buffer_t nsidbuf;
+ isc_buffer_init(&nsidbuf,
+ rdata.data, rdata.length);
+ isc_buffer_add(&nsidbuf, rdata.length);
+ optcode = isc_buffer_getuint16(&nsidbuf);
+ if (optcode == DNS_OPT_NSID)
+ client->attributes |=
+ NS_CLIENTATTR_WANTNSID;
+ }
+ }
+
+ dns_generalstats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_edns0in);
+
/*
* Create an OPT for our reply.
*/
@@ -1542,7 +1641,7 @@ client_request(isc_task_t *task, isc_event_t *event) {
* For IPv6 UDP queries, we get this from the pktinfo structure (if
* supported).
* If all the attempts fail (this can happen due to memory shortage,
- * etc), we regard this as an error for safety.
+ * etc), we regard this as an error for safety.
*/
if ((client->interface->flags & NS_INTERFACEFLAG_ANYADDR) == 0)
isc_netaddr_fromsockaddr(&destaddr, &client->interface->addr);
@@ -1657,6 +1756,17 @@ client_request(isc_task_t *task, isc_event_t *event) {
client->signer = NULL;
dns_name_init(&client->signername, NULL);
result = dns_message_signer(client->message, &client->signername);
+ if (result != ISC_R_NOTFOUND) {
+ signame = NULL;
+ if (dns_message_gettsig(client->message, &signame) != NULL) {
+ dns_generalstats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_tsigin);
+ } else {
+ dns_generalstats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_sig0in);
+ }
+
+ }
if (result == ISC_R_SUCCESS) {
ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(3),
@@ -1673,15 +1783,17 @@ client_request(isc_task_t *task, isc_event_t *event) {
} else {
char tsigrcode[64];
isc_buffer_t b;
- dns_name_t *name = NULL;
dns_rcode_t status;
isc_result_t tresult;
/* There is a signature, but it is bad. */
- if (dns_message_gettsig(client->message, &name) != NULL) {
+ dns_generalstats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_invalidsig);
+ signame = NULL;
+ if (dns_message_gettsig(client->message, &signame) != NULL) {
char namebuf[DNS_NAME_FORMATSIZE];
char cnamebuf[DNS_NAME_FORMATSIZE];
- dns_name_format(name, namebuf, sizeof(namebuf));
+ dns_name_format(signame, namebuf, sizeof(namebuf));
status = client->message->tsigstatus;
isc_buffer_init(&b, tsigrcode, sizeof(tsigrcode) - 1);
tresult = dns_tsigrcode_totext(status, &b);
@@ -1851,6 +1963,7 @@ get_clientmctx(ns_clientmgr_t *manager, isc_mem_t **mctxp) {
result = isc_mem_create(0, 0, &clientmctx);
if (result != ISC_R_SUCCESS)
return (result);
+ isc_mem_setname(clientmctx, "client", NULL);
manager->mctxpool[manager->nextmctx] = clientmctx;
}
@@ -2490,12 +2603,12 @@ ns_client_checkaclsilent(ns_client_t *client, isc_sockaddr_t *sockaddr,
goto deny;
}
-
+
if (sockaddr == NULL)
isc_netaddr_fromsockaddr(&netaddr, &client->peeraddr);
else
isc_netaddr_fromsockaddr(&netaddr, sockaddr);
-
+
result = dns_acl_match(&netaddr, client->signer, acl,
&ns_g_server->aclenv,
&match, NULL);
@@ -2521,7 +2634,7 @@ ns_client_checkacl(ns_client_t *client, isc_sockaddr_t *sockaddr,
isc_result_t result =
ns_client_checkaclsilent(client, sockaddr, acl, default_allow);
- if (result == ISC_R_SUCCESS)
+ if (result == ISC_R_SUCCESS)
ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(3),
"%s approved", opname);
@@ -2577,7 +2690,7 @@ ns_client_log(ns_client_t *client, isc_logcategory_t *category,
void
ns_client_aclmsg(const char *msg, dns_name_t *name, dns_rdatatype_t type,
- dns_rdataclass_t rdclass, char *buf, size_t len)
+ dns_rdataclass_t rdclass, char *buf, size_t len)
{
char namebuf[DNS_NAME_FORMATSIZE];
char typebuf[DNS_RDATATYPE_FORMATSIZE];
diff --git a/bin/named/config.c b/bin/named/config.c
index efc67966..ac1074b4 100644
--- a/bin/named/config.c
+++ b/bin/named/config.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: config.c,v 1.82.38.2 2008/01/22 23:27:35 tbox Exp $ */
+/* $Id: config.c,v 1.82.38.4 2008/05/01 18:32:31 jinmei Exp $ */
/*! \file */
@@ -99,6 +99,7 @@ options {\n\
use-ixfr true;\n\
edns-udp-size 4096;\n\
max-udp-size 4096;\n\
+ request-nsid false;\n\
\n\
/* view */\n\
allow-notify {none;};\n\
@@ -123,7 +124,7 @@ options {\n\
query-source-v6 address *;\n\
notify-source *;\n\
notify-source-v6 *;\n\
- cleaning-interval 60;\n\
+ cleaning-interval 0; /* now meaningless */\n\
min-roots 2;\n\
lame-ttl 600;\n\
max-ncache-ttl 10800; /* 3 hours */\n\
diff --git a/bin/named/convertxsl.pl b/bin/named/convertxsl.pl
index b6ea4bd9..3ac071a9 100755
--- a/bin/named/convertxsl.pl
+++ b/bin/named/convertxsl.pl
@@ -1,6 +1,6 @@
#!/usr/bin/env perl
#
-# Copyright (C) 2006, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2006-2008 Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -14,19 +14,19 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: convertxsl.pl,v 1.9 2007/09/14 06:14:44 marka Exp $
+# $Id: convertxsl.pl,v 1.9.60.4 2008/04/03 10:51:01 marka Exp $
use strict;
use warnings;
-my $rev = '$Id: convertxsl.pl,v 1.9 2007/09/14 06:14:44 marka Exp $';
+my $rev = '$Id: convertxsl.pl,v 1.9.60.4 2008/04/03 10:51:01 marka Exp $';
$rev =~ s/\$//g;
$rev =~ s/,v//g;
$rev =~ s/Id: //;
my $xsl = "unknown";
-
my $lines = '';
+my (@nsstatsdesc, @zonestatsdesc, @resstatsdesc);
while (<>) {
chomp;
@@ -34,7 +34,23 @@ while (<>) {
$xsl = $_ if (/<!-- .Id:.* -->/);
# convert Id string to a form not recognisable by cvs.
$_ =~ s/<!-- .Id:(.*). -->/<!-- \\045Id: $1\\045 -->/;
- $lines .= $_;
+ if (/server\/nsstats\/(\w+)\"/) {
+ push(@nsstatsdesc, $1);
+ } elsif (/server\/zonestats\/(\w+)\"/) {
+ push(@zonestatsdesc, $1);
+ } elsif (/\"resstats\/(\w+)\"/) {
+ push(@resstatsdesc, $1);
+ }
+ s/[\ \t]+/ /g;
+ s/\>\ \</\>\</g;
+ s/\"/\\\"/g;
+ s/^/\t\"/;
+ s/$/\\n\"/;
+ if ($lines eq "") {
+ $lines .= $_;
+ } else {
+ $lines .= "\n" . $_;
+ }
}
$xsl =~ s/\$//g;
@@ -42,12 +58,34 @@ $xsl =~ s/<!-- Id: //;
$xsl =~ s/ -->.*//;
$xsl =~ s/,v//;
-$lines =~ s/[\ \t]+/ /g;
-$lines =~ s/\>\ \</\>\</g;
-$lines =~ s/\"/\\\"/g;
-
print "/*\n * Generated by $rev \n * From $xsl\n */\n";
-print 'static char msg[] = "';
+print 'static char xslmsg[] =',"\n";
print $lines;
-print '\\n";', "\n";
+print ';', "\n";
+
+print '#ifdef HAVE_LIBXML2', "\n";
+print "static const char *nsstats_xmldesc[] = {";
+while (my $desc = shift(@nsstatsdesc)) {
+ print "\t\"$desc\"";
+ print "," if (@nsstatsdesc);
+ print "\n";
+}
+print "};\n";
+
+print "static const char *zonestats_xmldesc[] = {";
+while (my $desc = shift(@zonestatsdesc)) {
+ print "\t\"$desc\"";
+ print "," if (@zonestatsdesc);
+ print "\n";
+}
+print "};\n";
+
+print "static const char *resstats_xmldesc[] = {";
+while (my $desc = shift(@resstatsdesc)) {
+ print "\t\"$desc\"";
+ print "," if (@resstatsdesc);
+ print "\n";
+}
+print "};\n";
+print '#endif', "\n";
diff --git a/bin/named/include/named/client.h b/bin/named/include/named/client.h
index 44c800d1..58df59d1 100644
--- a/bin/named/include/named/client.h
+++ b/bin/named/include/named/client.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: client.h,v 1.82 2007/06/18 23:47:19 tbox Exp $ */
+/* $Id: client.h,v 1.82.128.2 2008/04/03 06:08:26 tbox Exp $ */
#ifndef NAMED_CLIENT_H
#define NAMED_CLIENT_H 1
@@ -24,7 +24,7 @@
***** Module Info
*****/
-/*! \file
+/*! \file
* \brief
* This module defines two objects, ns_client_t and ns_clientmgr_t.
*
@@ -159,6 +159,7 @@ struct ns_client {
#define NS_CLIENTATTR_PKTINFO 0x04 /*%< pktinfo is valid */
#define NS_CLIENTATTR_MULTICAST 0x08 /*%< recv'd from multicast */
#define NS_CLIENTATTR_WANTDNSSEC 0x10 /*%< include dnssec records */
+#define NS_CLIENTATTR_WANTNSID 0x20 /*%< include nameserver ID */
extern unsigned int ns_client_requests;
@@ -358,8 +359,8 @@ ns_client_qnamereplace(ns_client_t *client, dns_name_t *name);
isc_boolean_t
ns_client_isself(dns_view_t *myview, dns_tsigkey_t *mykey,
- isc_sockaddr_t *srcaddr, isc_sockaddr_t *destaddr,
- dns_rdataclass_t rdclass, void *arg);
+ isc_sockaddr_t *srcaddr, isc_sockaddr_t *destaddr,
+ dns_rdataclass_t rdclass, void *arg);
/*%
* Isself callback.
*/
diff --git a/bin/named/include/named/server.h b/bin/named/include/named/server.h
index 362f9721..f1b23edb 100644
--- a/bin/named/include/named/server.h
+++ b/bin/named/include/named/server.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: server.h,v 1.88.10.3 2008/01/24 02:29:56 jinmei Exp $ */
+/* $Id: server.h,v 1.88.10.4 2008/04/03 06:10:19 marka Exp $ */
#ifndef NAMED_SERVER_H
#define NAMED_SERVER_H 1
@@ -91,7 +91,11 @@ struct ns_server {
isc_boolean_t flushonshutdown;
isc_boolean_t log_queries; /*%< For BIND 8 compatibility */
- dns_stats_t * querystats; /*%< Query statistics counters */
+ dns_stats_t * nsstats; /*%< Server statistics */
+ dns_stats_t * rcvquerystats; /*% Incoming query statistics */
+ dns_stats_t * opcodestats; /*%< Incoming message statistics */
+ dns_stats_t * zonestats; /*% Zone management statistics */
+ dns_stats_t * resolverstats; /*% Resolver statistics */
ns_controls_t * controls; /*%< Control channels */
unsigned int dispatchgen;
@@ -105,6 +109,55 @@ struct ns_server {
#define NS_SERVER_MAGIC ISC_MAGIC('S','V','E','R')
#define NS_SERVER_VALID(s) ISC_MAGIC_VALID(s, NS_SERVER_MAGIC)
+/*%
+ * Server statistics counters. Used as dns_statscounter_t values.
+ */
+enum {
+ dns_nsstatscounter_requestv4 = 0,
+ dns_nsstatscounter_requestv6 = 1,
+ dns_nsstatscounter_edns0in = 2,
+ dns_nsstatscounter_badednsver = 3,
+ dns_nsstatscounter_tsigin = 4,
+ dns_nsstatscounter_sig0in = 5,
+ dns_nsstatscounter_invalidsig = 6,
+ dns_nsstatscounter_tcp = 7,
+
+ dns_nsstatscounter_authrej = 8,
+ dns_nsstatscounter_recurserej = 9,
+ dns_nsstatscounter_xfrrej = 10,
+ dns_nsstatscounter_updaterej = 11,
+
+ dns_nsstatscounter_response = 12,
+ dns_nsstatscounter_truncatedresp = 13,
+ dns_nsstatscounter_edns0out = 14,
+ dns_nsstatscounter_tsigout = 15,
+ dns_nsstatscounter_sig0out = 16,
+
+ dns_nsstatscounter_success = 17,
+ dns_nsstatscounter_authans = 18,
+ dns_nsstatscounter_nonauthans = 19,
+ dns_nsstatscounter_referral = 20,
+ dns_nsstatscounter_nxrrset = 21,
+ dns_nsstatscounter_servfail = 22,
+ dns_nsstatscounter_formerr = 23,
+ dns_nsstatscounter_nxdomain = 24,
+ dns_nsstatscounter_recursion = 25,
+ dns_nsstatscounter_duplicate = 26,
+ dns_nsstatscounter_dropped = 27,
+ dns_nsstatscounter_failure = 28,
+
+ dns_nsstatscounter_xfrdone = 29,
+
+ dns_nsstatscounter_updatereqfwd = 30,
+ dns_nsstatscounter_updaterespfwd = 31,
+ dns_nsstatscounter_updatefwdfail = 32,
+ dns_nsstatscounter_updatedone = 33,
+ dns_nsstatscounter_updatefail = 34,
+ dns_nsstatscounter_updatebadprereq = 35,
+
+ dns_nsstatscounter_max = 36
+};
+
void
ns_server_create(isc_mem_t *mctx, ns_server_t **serverp);
/*%<
diff --git a/bin/named/include/named/statschannel.h b/bin/named/include/named/statschannel.h
index 9b51dfdf..da89423d 100644
--- a/bin/named/include/named/statschannel.h
+++ b/bin/named/include/named/statschannel.h
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: statschannel.h,v 1.2.2.1 2008/01/17 00:24:31 jinmei Exp $ */
+/* $Id: statschannel.h,v 1.2.2.2 2008/04/03 06:10:19 marka Exp $ */
#ifndef NAMED_STATSCHANNEL_H
#define NAMED_STATSCHANNEL_H 1
@@ -52,4 +52,10 @@ ns_statschannels_shutdown(ns_server_t *server);
* Initiate shutdown of all the statistics channel listeners.
*/
+isc_result_t
+ns_stats_dump(ns_server_t *server, FILE *fp);
+/*%<
+ * Dump statistics counters managed by the server to the file fp.
+ */
+
#endif /* NAMED_STATSCHANNEL_H */
diff --git a/bin/named/main.c b/bin/named/main.c
index f2a3e74a..cd6e9f74 100644
--- a/bin/named/main.c
+++ b/bin/named/main.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: main.c,v 1.158 2007/09/26 03:22:43 marka Exp $ */
+/* $Id: main.c,v 1.158.48.2 2008/04/03 23:46:30 tbox Exp $ */
/*! \file */
@@ -356,7 +356,7 @@ parse_command_line(int argc, char *argv[]) {
isc_commandline_errprint = ISC_FALSE;
while ((ch = isc_commandline_parse(argc, argv,
- "46c:C:d:fgi:lm:n:N:p:P:st:u:vx:")) != -1) {
+ "46c:C:d:fgi:lm:n:N:p:P:st:u:vx:")) != -1) {
switch (ch) {
case '4':
if (disable4)
@@ -667,7 +667,7 @@ setup(void) {
sizeof(absolute_conffile));
if (result != ISC_R_SUCCESS)
ns_main_earlyfatal("could not construct absolute path of "
- "configuration file: %s",
+ "configuration file: %s",
isc_result_totext(result));
ns_g_conffile = absolute_conffile;
}
@@ -767,7 +767,7 @@ ns_smf_get_instance(char **ins_name, int debug, isc_mem_t *mctx) {
if (debug)
UNEXPECTED_ERROR(__FILE__, __LINE__,
"scf_handle_create() failed: %s",
- scf_strerror(scf_error()));
+ scf_strerror(scf_error()));
return (ISC_R_FAILURE);
}
@@ -867,6 +867,7 @@ main(int argc, char *argv[]) {
if (result != ISC_R_SUCCESS)
ns_main_earlyfatal("isc_mem_create() failed: %s",
isc_result_totext(result));
+ isc_mem_setname(ns_g_mctx, "main", NULL);
setup();
diff --git a/bin/named/query.c b/bin/named/query.c
index 843b5540..eb6e580c 100644
--- a/bin/named/query.c
+++ b/bin/named/query.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: query.c,v 1.298.48.4 2008/01/24 02:29:56 jinmei Exp $ */
+/* $Id: query.c,v 1.298.48.7 2008/04/29 00:56:50 marka Exp $ */
/*! \file */
@@ -128,35 +128,37 @@ static inline void
inc_stats(ns_client_t *client, dns_statscounter_t counter) {
dns_zone_t *zone = client->query.authzone;
- REQUIRE(counter < DNS_STATS_NCOUNTERS);
-
- dns_stats_incrementcounter(ns_g_server->querystats, counter);
+ dns_generalstats_increment(ns_g_server->nsstats, counter);
if (zone != NULL) {
- dns_stats_t *zonestats = dns_zone_getstats(zone);
+ dns_stats_t *zonestats = dns_zone_getrequeststats(zone);
if (zonestats != NULL)
- dns_stats_incrementcounter(zonestats, counter);
+ dns_generalstats_increment(zonestats, counter);
}
}
static void
query_send(ns_client_t *client) {
dns_statscounter_t counter;
+ if ((client->message->flags & DNS_MESSAGEFLAG_AA) == 0)
+ inc_stats(client, dns_nsstatscounter_nonauthans);
+ else
+ inc_stats(client, dns_nsstatscounter_authans);
if (client->message->rcode == dns_rcode_noerror) {
if (ISC_LIST_EMPTY(client->message->sections[DNS_SECTION_ANSWER])) {
if (client->query.isreferral) {
- counter = dns_statscounter_referral;
+ counter = dns_nsstatscounter_referral;
} else {
- counter = dns_statscounter_nxrrset;
+ counter = dns_nsstatscounter_nxrrset;
}
} else {
- counter = dns_statscounter_success;
+ counter = dns_nsstatscounter_success;
}
} else if (client->message->rcode == dns_rcode_nxdomain) {
- counter = dns_statscounter_nxdomain;
+ counter = dns_nsstatscounter_nxdomain;
} else {
/* We end up here in case of YXDOMAIN, and maybe others */
- counter = dns_statscounter_failure;
+ counter = dns_nsstatscounter_failure;
}
inc_stats(client, counter);
ns_client_send(client);
@@ -164,18 +166,28 @@ query_send(ns_client_t *client) {
static void
query_error(ns_client_t *client, isc_result_t result) {
- inc_stats(client, dns_statscounter_failure);
+ switch (result) {
+ case DNS_R_SERVFAIL:
+ inc_stats(client, dns_nsstatscounter_servfail);
+ break;
+ case DNS_R_FORMERR:
+ inc_stats(client, dns_nsstatscounter_formerr);
+ break;
+ default:
+ inc_stats(client, dns_nsstatscounter_failure);
+ break;
+ }
ns_client_error(client, result);
}
static void
query_next(ns_client_t *client, isc_result_t result) {
if (result == DNS_R_DUPLICATE)
- inc_stats(client, dns_statscounter_duplicate);
+ inc_stats(client, dns_nsstatscounter_duplicate);
else if (result == DNS_R_DROP)
- inc_stats(client, dns_statscounter_dropped);
+ inc_stats(client, dns_nsstatscounter_dropped);
else
- inc_stats(client, dns_statscounter_failure);
+ inc_stats(client, dns_nsstatscounter_failure);
ns_client_next(client, result);
}
@@ -2758,6 +2770,13 @@ query_addwildcardproof(ns_client_t *client, dns_db_t *db,
&olabels);
(void)dns_name_fullcompare(name, &nsec.next, &order,
&nlabels);
+ /*
+ * Check for a pathological condition created when
+ * serving some malformed signed zones and bail out.
+ */
+ if (dns_name_countlabels(name) == nlabels)
+ goto cleanup;
+
if (olabels > nlabels)
dns_name_split(name, olabels, NULL, wname);
else
@@ -2925,13 +2944,14 @@ query_resume(isc_task_t *task, isc_event_t *event) {
static isc_result_t
query_recurse(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qdomain,
- dns_rdataset_t *nameservers)
+ dns_rdataset_t *nameservers, isc_boolean_t resuming)
{
isc_result_t result;
dns_rdataset_t *rdataset, *sigrdataset;
isc_sockaddr_t *peeraddr;
- inc_stats(client, dns_statscounter_recursion);
+ if (!resuming)
+ inc_stats(client, dns_nsstatscounter_recursion);
/*
* We are about to recurse, which means that this client will
@@ -3336,6 +3356,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
unsigned int options;
isc_boolean_t empty_wild;
dns_rdataset_t *noqname;
+ isc_boolean_t resuming;
CTRACE("query_find");
@@ -3361,6 +3382,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
need_wildcardproof = ISC_FALSE;
empty_wild = ISC_FALSE;
options = 0;
+ resuming = ISC_FALSE;
if (event != NULL) {
/*
@@ -3403,6 +3425,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
}
result = event->result;
+ resuming = ISC_TRUE;
goto resume;
}
@@ -3490,6 +3513,11 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
}
if (result != ISC_R_SUCCESS) {
if (result == DNS_R_REFUSED) {
+ if (WANTRECURSION(client)) {
+ inc_stats(client,
+ dns_nsstatscounter_recurserej);
+ } else
+ inc_stats(client, dns_nsstatscounter_authrej);
if (!PARTIALANSWER(client))
QUERY_ERROR(DNS_R_REFUSED);
} else
@@ -3603,7 +3631,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
*/
if (RECURSIONOK(client)) {
result = query_recurse(client, qtype,
- NULL, NULL);
+ NULL, NULL, resuming);
if (result == ISC_R_SUCCESS)
client->query.attributes |=
NS_QUERYATTR_RECURSING;
@@ -3774,10 +3802,12 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
*/
if (dns_rdatatype_atparent(type))
result = query_recurse(client, qtype,
- NULL, NULL);
+ NULL, NULL,
+ resuming);
else
result = query_recurse(client, qtype,
- fname, rdataset);
+ fname, rdataset,
+ resuming);
if (result == ISC_R_SUCCESS)
client->query.attributes |=
NS_QUERYATTR_RECURSING;
@@ -4221,7 +4251,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
result = query_recurse(client,
qtype,
NULL,
- NULL);
+ NULL,
+ resuming);
if (result == ISC_R_SUCCESS)
client->query.attributes |=
NS_QUERYATTR_RECURSING;
@@ -4531,6 +4562,7 @@ ns_query_start(ns_client_t *client) {
rdataset = ISC_LIST_HEAD(client->query.qname->list);
INSIST(rdataset != NULL);
qtype = rdataset->type;
+ dns_rdatatypestats_increment(ns_g_server->rcvquerystats, qtype);
if (dns_rdatatype_ismeta(qtype)) {
switch (qtype) {
case dns_rdatatype_any:
diff --git a/bin/named/server.c b/bin/named/server.c
index 08973564..d0037d92 100644
--- a/bin/named/server.c
+++ b/bin/named/server.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: server.c,v 1.495.10.6 2008/01/24 02:29:56 jinmei Exp $ */
+/* $Id: server.c,v 1.495.10.10 2008/04/03 06:20:33 tbox Exp $ */
/*! \file */
@@ -730,6 +730,11 @@ configure_peer(const cfg_obj_t *cpeer, isc_mem_t *mctx, dns_peer_t **peerp) {
CHECK(dns_peer_setrequestixfr(peer, cfg_obj_asboolean(obj)));
obj = NULL;
+ (void)cfg_map_get(cpeer, "request-nsid", &obj);
+ if (obj != NULL)
+ CHECK(dns_peer_setrequestnsid(peer, cfg_obj_asboolean(obj)));
+
+ obj = NULL;
(void)cfg_map_get(cpeer, "edns", &obj);
if (obj != NULL)
CHECK(dns_peer_setsupportedns(peer, cfg_obj_asboolean(obj)));
@@ -937,6 +942,24 @@ check_dbtype(dns_zone_t **zonep, unsigned int dbtypec, const char **dbargv,
isc_mem_free(mctx, argv);
}
+static isc_result_t
+setquerystats(dns_zone_t *zone, isc_mem_t *mctx, isc_boolean_t on) {
+ isc_result_t result;
+ dns_stats_t *zoneqrystats;
+
+ zoneqrystats = NULL;
+ if (on) {
+ result = dns_generalstats_create(mctx, &zoneqrystats,
+ dns_nsstatscounter_max);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ }
+ dns_zone_setrequeststats(zone, zoneqrystats);
+ if (zoneqrystats != NULL)
+ dns_stats_detach(&zoneqrystats);
+
+ return (ISC_R_SUCCESS);
+}
/*
* Configure 'view' according to 'vconfig', taking defaults from 'config'
@@ -993,6 +1016,8 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
isc_boolean_t empty_zones_enable;
const cfg_obj_t *disablelist = NULL;
isc_uint32_t nqports, qports_updateinterval;
+ dns_stats_t *resstats = NULL;
+ dns_stats_t *resquerystats = NULL;
REQUIRE(DNS_VIEW_VALID(view));
@@ -1042,6 +1067,7 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
CHECK(isc_mem_create(0, 0, &cmctx));
CHECK(dns_acache_create(&view->acache, cmctx, ns_g_taskmgr,
ns_g_timermgr));
+ isc_mem_setname(cmctx, "acache", NULL);
isc_mem_detach(&cmctx);
}
if (view->acache != NULL) {
@@ -1136,6 +1162,8 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
* Configure the view's cache. Try to reuse an existing
* cache if possible, otherwise create a new cache.
* Note that the ADB is not preserved in either case.
+ * When a matching view is found, the associated statistics are
+ * also retrieved and reused.
*
* XXX Determining when it is safe to reuse a cache is
* tricky. When the view's configuration changes, the cached
@@ -1157,11 +1185,14 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
"reusing existing cache");
reused_cache = ISC_TRUE;
dns_cache_attach(pview->cache, &cache);
+ dns_view_getresstats(pview, &resstats);
+ dns_view_getresquerystats(pview, &resquerystats);
dns_view_detach(&pview);
} else {
CHECK(isc_mem_create(0, 0, &cmctx));
CHECK(dns_cache_create(cmctx, ns_g_taskmgr, ns_g_timermgr,
view->rdclass, "rbt", 0, NULL, &cache));
+ isc_mem_setname(cmctx, "cache", NULL);
}
dns_view_setcache(view, cache);
@@ -1337,6 +1368,15 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
* 60));
}
+ if (resstats == NULL) {
+ CHECK(dns_generalstats_create(mctx, &resstats,
+ dns_resstatscounter_max));
+ }
+ dns_view_setresstats(view, resstats);
+ if (resquerystats == NULL)
+ CHECK(dns_rdatatypestats_create(mctx, &resquerystats));
+ dns_view_setresquerystats(view, resquerystats);
+
/*
* Set the ADB cache size to 1/8th of the max-cache-size.
*/
@@ -1655,6 +1695,11 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
view->provideixfr = cfg_obj_asboolean(obj);
obj = NULL;
+ result = ns_config_get(maps, "request-nsid", &obj);
+ INSIST(result == ISC_R_SUCCESS);
+ view->requestnsid = cfg_obj_asboolean(obj);
+
+ obj = NULL;
result = ns_config_get(maps, "max-clients-per-query", &obj);
INSIST(result == ISC_R_SUCCESS);
max_clients_per_query = cfg_obj_asuint32(obj);
@@ -1823,6 +1868,7 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
const char *empty_dbtype[4] =
{ "_builtin", "empty", NULL, NULL };
int empty_dbtypec = 4;
+ isc_boolean_t zonestats_on;
dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
@@ -1857,6 +1903,11 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
} else
empty_dbtype[3] = ".";
+ obj = NULL;
+ result = ns_config_get(maps, "zone-statistics", &obj);
+ INSIST(result == ISC_R_SUCCESS);
+ zonestats_on = cfg_obj_asboolean(obj);
+
logit = ISC_TRUE;
for (empty = empty_zones[empty_zone].zone;
empty != NULL;
@@ -1881,6 +1932,7 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
*/
(void)dns_view_findzone(view, name, &zone);
if (zone != NULL) {
+ CHECK(setquerystats(zone, mctx, zonestats_on));
dns_zone_detach(&zone);
continue;
}
@@ -1931,6 +1983,8 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
if (zone != NULL) {
dns_zone_setview(zone, view);
CHECK(dns_view_addzone(view, zone));
+ CHECK(setquerystats(zone, mctx,
+ zonestats_on));
dns_zone_detach(&zone);
continue;
}
@@ -1942,6 +1996,7 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
CHECK(dns_zonemgr_managezone(ns_g_server->zonemgr, zone));
dns_zone_setclass(zone, view->rdclass);
dns_zone_settype(zone, dns_zone_master);
+ dns_zone_setstats(zone, ns_g_server->zonestats);
CHECK(dns_zone_setdbtype(zone, empty_dbtypec,
empty_dbtype));
if (view->queryacl != NULL)
@@ -1952,6 +2007,7 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
dns_zone_setnotifytype(zone, dns_notifytype_no);
dns_zone_setoption(zone, DNS_ZONEOPT_NOCHECKNS,
ISC_TRUE);
+ CHECK(setquerystats(zone, mctx, zonestats_on));
CHECK(dns_view_addzone(view, zone));
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_INFO,
@@ -1970,6 +2026,10 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
dns_dispatch_detach(&dispatch4);
if (dispatch6 != NULL)
dns_dispatch_detach(&dispatch6);
+ if (resstats != NULL)
+ dns_stats_detach(&resstats);
+ if (resquerystats != NULL)
+ dns_stats_detach(&resquerystats);
if (order != NULL)
dns_order_detach(&order);
if (cmctx != NULL)
@@ -2418,6 +2478,7 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
if (view->acache != NULL)
dns_zone_setacache(zone, view->acache);
CHECK(dns_zonemgr_managezone(ns_g_server->zonemgr, zone));
+ dns_zone_setstats(zone, ns_g_server->zonestats);
}
/*
@@ -3461,8 +3522,12 @@ load_configuration(const char *filename, ns_server_t *server,
result = ns_config_get(maps, "server-id", &obj);
server->server_usehostname = ISC_FALSE;
if (result == ISC_R_SUCCESS && cfg_obj_isboolean(obj)) {
- server->server_usehostname = ISC_TRUE;
+ /* The parser translates "hostname" to ISC_TRUE */
+ server->server_usehostname = cfg_obj_asboolean(obj);
+ result = setstring(server, &server->server_id, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
} else if (result == ISC_R_SUCCESS) {
+ /* Found a quoted string */
CHECKM(setoptstring(server, &server->server_id, obj), "strdup");
} else {
result = setstring(server, &server->server_id, NULL);
@@ -3595,6 +3660,8 @@ run_server(isc_task_t *task, isc_event_t *event) {
&ns_g_dispatchmgr),
"creating dispatch manager");
+ dns_dispatchmgr_setstats(ns_g_dispatchmgr, server->resolverstats);
+
CHECKFATAL(ns_interfacemgr_create(ns_g_mctx, ns_g_taskmgr,
ns_g_socketmgr, ns_g_dispatchmgr,
&server->interfacemgr),
@@ -3783,7 +3850,11 @@ ns_server_create(isc_mem_t *mctx, ns_server_t **serverp) {
server->statsfile = isc_mem_strdup(server->mctx, "named.stats");
CHECKFATAL(server->statsfile == NULL ? ISC_R_NOMEMORY : ISC_R_SUCCESS,
"isc_mem_strdup");
- server->querystats = NULL;
+ server->nsstats = NULL;
+ server->rcvquerystats = NULL;
+ server->opcodestats = NULL;
+ server->zonestats = NULL;
+ server->resolverstats = NULL;
server->dumpfile = isc_mem_strdup(server->mctx, "named_dump.db");
CHECKFATAL(server->dumpfile == NULL ? ISC_R_NOMEMORY : ISC_R_SUCCESS,
@@ -3800,8 +3871,24 @@ ns_server_create(isc_mem_t *mctx, ns_server_t **serverp) {
server->server_usehostname = ISC_FALSE;
server->server_id = NULL;
- CHECKFATAL(dns_stats_create(ns_g_mctx, &server->querystats),
- "dns_stats_create");
+ CHECKFATAL(dns_generalstats_create(ns_g_mctx, &server->nsstats,
+ dns_nsstatscounter_max),
+ "dns_stats_create (server)");
+
+ CHECKFATAL(dns_rdatatypestats_create(ns_g_mctx,
+ &server->rcvquerystats),
+ "dns_stats_create (rcvquery)");
+
+ CHECKFATAL(dns_opcodestats_create(ns_g_mctx, &server->opcodestats),
+ "dns_stats_create (opcode)");
+
+ CHECKFATAL(dns_generalstats_create(ns_g_mctx, &server->zonestats,
+ dns_zonestatscounter_max),
+ "dns_stats_create (zone)");
+
+ CHECKFATAL(dns_generalstats_create(ns_g_mctx, &server->resolverstats,
+ dns_resstatscounter_max),
+ "dns_stats_create (resolver)");
server->flushonshutdown = ISC_FALSE;
server->log_queries = ISC_FALSE;
@@ -3825,7 +3912,11 @@ ns_server_destroy(ns_server_t **serverp) {
ns_controls_destroy(&server->controls);
- dns_stats_destroy(server->mctx, &server->querystats);
+ dns_stats_detach(&server->nsstats);
+ dns_stats_detach(&server->rcvquerystats);
+ dns_stats_detach(&server->opcodestats);
+ dns_stats_detach(&server->zonestats);
+ dns_stats_detach(&server->resolverstats);
isc_mem_free(server->mctx, server->statsfile);
isc_mem_free(server->mctx, server->dumpfile);
@@ -4389,60 +4480,14 @@ ns_listenelt_fromconfig(const cfg_obj_t *listener, const cfg_obj_t *config,
isc_result_t
ns_server_dumpstats(ns_server_t *server) {
isc_result_t result;
- dns_zone_t *zone, *next;
- isc_stdtime_t now;
FILE *fp = NULL;
- int i;
- int ncounters;
- isc_uint64_t counters[DNS_STATS_NCOUNTERS];
-
- isc_stdtime_get(&now);
CHECKMF(isc_stdio_open(server->statsfile, "a", &fp),
"could not open statistics dump file", server->statsfile);
- ncounters = DNS_STATS_NCOUNTERS;
- fprintf(fp, "+++ Statistics Dump +++ (%lu)\n", (unsigned long)now);
-
- dns_stats_copy(server->querystats, counters);
- for (i = 0; i < ncounters; i++)
- fprintf(fp, "%s %" ISC_PRINT_QUADFORMAT "u\n",
- dns_statscounter_names[i], counters[i]);
-
- zone = NULL;
- for (result = dns_zone_first(server->zonemgr, &zone);
- result == ISC_R_SUCCESS;
- next = NULL, result = dns_zone_next(zone, &next), zone = next)
- {
- dns_stats_t *zonestats = dns_zone_getstats(zone);
- if (zonestats != NULL) {
- char zonename[DNS_NAME_FORMATSIZE];
- dns_view_t *view;
- char *viewname;
-
- dns_stats_copy(zonestats, counters);
- dns_name_format(dns_zone_getorigin(zone),
- zonename, sizeof(zonename));
- view = dns_zone_getview(zone);
- viewname = view->name;
- for (i = 0; i < ncounters; i++) {
- fprintf(fp, "%s %" ISC_PRINT_QUADFORMAT
- "u %s",
- dns_statscounter_names[i],
- counters[i],
- zonename);
- if (strcmp(viewname, "_default") != 0)
- fprintf(fp, " %s", viewname);
- fprintf(fp, "\n");
- }
- }
- }
- if (result == ISC_R_NOMORE)
- result = ISC_R_SUCCESS;
+ result = ns_stats_dump(server, fp);
CHECK(result);
- fprintf(fp, "--- Statistics Dump --- (%lu)\n", (unsigned long)now);
-
cleanup:
if (fp != NULL)
(void)isc_stdio_close(fp);
diff --git a/bin/named/statschannel.c b/bin/named/statschannel.c
index 3b4bd831..e5b7c338 100644
--- a/bin/named/statschannel.c
+++ b/bin/named/statschannel.c
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: statschannel.c,v 1.2.2.4 2008/01/24 02:29:56 jinmei Exp $ */
+/* $Id: statschannel.c,v 1.2.2.9 2008/04/09 22:53:06 tbox Exp $ */
/*! \file */
@@ -23,17 +23,25 @@
#include <isc/buffer.h>
#include <isc/httpd.h>
#include <isc/mem.h>
+#include <isc/once.h>
#include <isc/print.h>
#include <isc/socket.h>
#include <isc/task.h>
+#include <dns/db.h>
+#include <dns/opcode.h>
+#include <dns/rdataclass.h>
+#include <dns/rdatatype.h>
#include <dns/stats.h>
#include <dns/view.h>
+#include <dns/zt.h>
#include <named/log.h>
#include <named/server.h>
#include <named/statschannel.h>
+#include "bind9.xsl.h"
+
struct ns_statschannel {
/* Unlocked */
isc_httpdmgr_t *httpdmgr;
@@ -51,6 +59,190 @@ struct ns_statschannel {
ISC_LINK(struct ns_statschannel) link;
};
+typedef enum { statsformat_file, statsformat_xml } statsformat_t;
+
+typedef struct
+stats_dumparg {
+ statsformat_t type;
+ void *arg; /* type dependent argument */
+ const char **desc; /* used for general statistics */
+ int ncounters; /* used for general statistics */
+} stats_dumparg_t;
+
+static isc_once_t once = ISC_ONCE_INIT;
+
+static void
+generalstat_dump(dns_statscounter_t counter, isc_uint64_t val, void *arg) {
+ stats_dumparg_t *dumparg = arg;
+ FILE *fp;
+#ifdef HAVE_LIBXML2
+ xmlTextWriterPtr writer;
+#endif
+
+ REQUIRE(counter < dumparg->ncounters);
+
+ switch (dumparg->type) {
+ case statsformat_file:
+ fp = dumparg->arg;
+ fprintf(fp, "%20" ISC_PRINT_QUADFORMAT "u %s\n", val,
+ dumparg->desc[counter]);
+ break;
+ case statsformat_xml:
+#ifdef HAVE_LIBXML2
+ writer = dumparg->arg;
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR
+ dumparg->desc[counter]);
+ xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ val);
+ xmlTextWriterEndElement(writer);
+#endif
+ break;
+ }
+}
+
+static void
+rdtypestat_dump(dns_rdatastatstype_t type, isc_uint64_t val, void *arg) {
+ char typebuf[64];
+ const char *typestr;
+ stats_dumparg_t *dumparg = arg;
+ FILE *fp;
+#ifdef HAVE_LIBXML2
+ xmlTextWriterPtr writer;
+#endif
+
+ if ((DNS_RDATASTATSTYPE_ATTR(type) & DNS_RDATASTATSTYPE_ATTR_OTHERTYPE)
+ == 0) {
+ dns_rdatatype_format(DNS_RDATASTATSTYPE_BASE(type), typebuf,
+ sizeof(typebuf));
+ typestr = typebuf;
+ } else
+ typestr = "Others";
+
+ switch (dumparg->type) {
+ case statsformat_file:
+ fp = dumparg->arg;
+ fprintf(fp, "%20" ISC_PRINT_QUADFORMAT "u %s\n", val, typestr);
+ break;
+ case statsformat_xml:
+#ifdef HAVE_LIBXML2
+ writer = dumparg->arg;
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "rdtype");
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "name");
+ xmlTextWriterWriteString(writer, ISC_XMLCHAR typestr);
+ xmlTextWriterEndElement(writer); /* name */
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "counter");
+ xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ val);
+ xmlTextWriterEndElement(writer); /* counter */
+
+ xmlTextWriterEndElement(writer); /* rdtype */
+#endif
+ break;
+ }
+}
+
+static void
+rdatasetstats_dump(dns_rdatastatstype_t type, isc_uint64_t val, void *arg) {
+ stats_dumparg_t *dumparg = arg;
+ FILE *fp;
+ char typebuf[64];
+ const char *typestr;
+ isc_boolean_t nxrrset = ISC_FALSE;
+#ifdef HAVE_LIBXML2
+ xmlTextWriterPtr writer;
+#endif
+
+ if ((DNS_RDATASTATSTYPE_ATTR(type) & DNS_RDATASTATSTYPE_ATTR_NXDOMAIN)
+ != 0) {
+ typestr = "NXDOMAIN";
+ } else if ((DNS_RDATASTATSTYPE_ATTR(type) &
+ DNS_RDATASTATSTYPE_ATTR_OTHERTYPE) != 0) {
+ typestr = "Others";
+ } else {
+ dns_rdatatype_format(DNS_RDATASTATSTYPE_BASE(type), typebuf,
+ sizeof(typebuf));
+ typestr = typebuf;
+ }
+
+ if ((DNS_RDATASTATSTYPE_ATTR(type) & DNS_RDATASTATSTYPE_ATTR_NXRRSET)
+ != 0)
+ nxrrset = ISC_TRUE;
+
+ switch (dumparg->type) {
+ case statsformat_file:
+ fp = dumparg->arg;
+ fprintf(fp, "%20" ISC_PRINT_QUADFORMAT "u %s%s\n", val,
+ nxrrset ? "!" : "", typestr);
+ break;
+ case statsformat_xml:
+#ifdef HAVE_LIBXML2
+ writer = dumparg->arg;
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "rrset");
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "name");
+ xmlTextWriterWriteFormatString(writer, "%s%s",
+ nxrrset ? "!" : "", typestr);
+ xmlTextWriterEndElement(writer); /* name */
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "counter");
+ xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ val);
+ xmlTextWriterEndElement(writer); /* counter */
+
+ xmlTextWriterEndElement(writer); /* rrset */
+#endif
+ break;
+ }
+}
+
+static void
+opcodestat_dump(dns_opcode_t code, isc_uint64_t val, void *arg) {
+ FILE *fp = arg;
+ isc_buffer_t b;
+ char codebuf[64];
+ stats_dumparg_t *dumparg = arg;
+#ifdef HAVE_LIBXML2
+ xmlTextWriterPtr writer;
+#endif
+
+ isc_buffer_init(&b, codebuf, sizeof(codebuf) - 1);
+ dns_opcode_totext(code, &b);
+ codebuf[isc_buffer_usedlength(&b)] = '\0';
+
+ switch (dumparg->type) {
+ case statsformat_file:
+ fp = dumparg->arg;
+ fprintf(fp, "%20" ISC_PRINT_QUADFORMAT "u %s\n", val, codebuf);
+ break;
+ case statsformat_xml:
+#ifdef HAVE_LIBXML2
+ writer = dumparg->arg;
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "opcode");
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "name");
+ xmlTextWriterWriteString(writer, ISC_XMLCHAR codebuf);
+ xmlTextWriterEndElement(writer); /* name */
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "counter");
+ xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ val);
+ xmlTextWriterEndElement(writer); /* counter */
+
+ xmlTextWriterEndElement(writer); /* opcode */
+#endif
+ break;
+ }
+}
+
#ifdef HAVE_LIBXML2
/* XXXMLG below here sucks. */
@@ -58,8 +250,50 @@ struct ns_statschannel {
#define TRY(a) do { result = (a); INSIST(result == ISC_R_SUCCESS); } while(0);
#define TRY0(a) do { xmlrc = (a); INSIST(xmlrc >= 0); } while(0);
-#define NODES 8
-#define SPACES 3
+static isc_result_t
+zone_xmlrender(dns_zone_t *zone, void *arg) {
+ char buf[1024 + 32]; /* sufficiently large for zone name and class */
+ dns_rdataclass_t rdclass;
+ isc_uint32_t serial;
+ xmlTextWriterPtr writer = arg;
+ stats_dumparg_t dumparg;
+ dns_stats_t *zonestats;
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "zone");
+
+ dns_zone_name(zone, buf, sizeof(buf));
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "name");
+ xmlTextWriterWriteString(writer, ISC_XMLCHAR buf);
+ xmlTextWriterEndElement(writer);
+
+ rdclass = dns_zone_getclass(zone);
+ dns_rdataclass_format(rdclass, buf, sizeof(buf));
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "rdataclass");
+ xmlTextWriterWriteString(writer, ISC_XMLCHAR buf);
+ xmlTextWriterEndElement(writer);
+
+ serial = dns_zone_getserial(zone);
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "serial");
+ xmlTextWriterWriteFormatString(writer, "%u", serial);
+ xmlTextWriterEndElement(writer);
+
+ dumparg.type = statsformat_xml;
+ dumparg.arg = writer;
+ dumparg.desc = nsstats_xmldesc;
+ dumparg.ncounters = dns_nsstatscounter_max;
+
+ zonestats = dns_zone_getrequeststats(zone);
+ if (zonestats != NULL) {
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters");
+ dns_generalstats_dump(zonestats, generalstat_dump,
+ &dumparg, DNS_STATSDUMP_VERBOSE);
+ xmlTextWriterEndElement(writer); /* counters */
+ }
+
+ xmlTextWriterEndElement(writer); /* zone */
+
+ return (ISC_R_SUCCESS);
+}
static void
generatexml(ns_server_t *server, int *buflen, xmlChar **buf) {
@@ -70,8 +304,8 @@ generatexml(ns_server_t *server, int *buflen, xmlChar **buf) {
xmlDocPtr doc;
int xmlrc;
dns_view_t *view;
- int i;
- isc_uint64_t counters[DNS_STATS_NCOUNTERS];
+ stats_dumparg_t dumparg;
+ dns_stats_t *cachestats;
isc_time_now(&now);
isc_time_formatISO8601(&ns_g_boottime, boottime, sizeof boottime);
@@ -90,6 +324,10 @@ generatexml(ns_server_t *server, int *buflen, xmlChar **buf) {
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "version",
ISC_XMLCHAR "1.0"));
+ /* Set common fields for statistics dump */
+ dumparg.type = statsformat_xml;
+ dumparg.arg = writer;
+
/*
* Start by rendering the views we know of here. For each view we
* know of, call its rendering function.
@@ -97,7 +335,43 @@ generatexml(ns_server_t *server, int *buflen, xmlChar **buf) {
view = ISC_LIST_HEAD(server->viewlist);
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "views"));
while (view != NULL) {
- dns_view_xmlrender(view, writer, ISC_XML_RENDERALL);
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "view");
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "name");
+ xmlTextWriterWriteString(writer, ISC_XMLCHAR view->name);
+ xmlTextWriterEndElement(writer);
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "zones");
+ dns_zt_apply(view->zonetable, ISC_FALSE, zone_xmlrender,
+ writer);
+ xmlTextWriterEndElement(writer);
+
+ if (view->resquerystats != NULL) {
+ dns_rdatatypestats_dump(view->resquerystats,
+ rdtypestat_dump, &dumparg, 0);
+ }
+
+ if (view->resstats != NULL) {
+ xmlTextWriterStartElement(writer,
+ ISC_XMLCHAR "resstats");
+ dumparg.ncounters = dns_resstatscounter_max;
+ dumparg.desc = resstats_xmldesc; /* auto-generated */
+ dns_generalstats_dump(view->resstats, generalstat_dump,
+ &dumparg, DNS_STATSDUMP_VERBOSE);
+ xmlTextWriterEndElement(writer); /* resstats */
+ }
+
+ cachestats = dns_db_getrrsetstats(view->cachedb);
+ if (cachestats != NULL) {
+ xmlTextWriterStartElement(writer,
+ ISC_XMLCHAR "cache");
+ dns_rdatasetstats_dump(cachestats, rdatasetstats_dump,
+ &dumparg, 0);
+ xmlTextWriterEndElement(writer); /* cache */
+ }
+
+ xmlTextWriterEndElement(writer); /* view */
+
view = ISC_LIST_NEXT(view, link);
}
TRY0(xmlTextWriterEndElement(writer)); /* views */
@@ -117,21 +391,42 @@ generatexml(ns_server_t *server, int *buflen, xmlChar **buf) {
xmlTextWriterStartElement(writer, ISC_XMLCHAR "current-time");
xmlTextWriterWriteString(writer, ISC_XMLCHAR nowstr);
xmlTextWriterEndElement(writer);
- TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
- dns_stats_copy(server->querystats, counters);
- for (i = 0; i < DNS_STATS_NCOUNTERS; i++) {
- xmlTextWriterStartElement(writer,
- ISC_XMLCHAR dns_statscounter_names[i]);
- xmlTextWriterWriteFormatString(writer,
- "%" ISC_PRINT_QUADFORMAT "u",
- counters[i]);
- xmlTextWriterEndElement(writer);
- }
- xmlTextWriterEndElement(writer); /* counters */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "requests"));
+ dns_opcodestats_dump(server->opcodestats, opcodestat_dump, &dumparg,
+ 0);
+ xmlTextWriterEndElement(writer); /* requests */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "queries-in"));
+ dns_rdatatypestats_dump(server->rcvquerystats, rdtypestat_dump,
+ &dumparg, 0);
+ xmlTextWriterEndElement(writer); /* queries-in */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "nsstats"));
+ dumparg.desc = nsstats_xmldesc; /* auto-generated in bind9.xsl.h */
+ dumparg.ncounters = dns_nsstatscounter_max;
+ dns_generalstats_dump(server->nsstats, generalstat_dump, &dumparg,
+ DNS_STATSDUMP_VERBOSE);
+ xmlTextWriterEndElement(writer); /* nsstats */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "zonestats"));
+ dumparg.desc = zonestats_xmldesc; /* auto-generated in bind9.xsl.h */
+ dumparg.ncounters = dns_zonestatscounter_max;
+ dns_generalstats_dump(server->zonestats, generalstat_dump, &dumparg,
+ DNS_STATSDUMP_VERBOSE);
+ xmlTextWriterEndElement(writer); /* zonestats */
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "resstats");
+ dumparg.ncounters = dns_resstatscounter_max;
+ dumparg.desc = resstats_xmldesc;
+ dns_generalstats_dump(server->resolverstats, generalstat_dump,
+ &dumparg, DNS_STATSDUMP_VERBOSE);
+ xmlTextWriterEndElement(writer); /* resstats */
+
xmlTextWriterEndElement(writer); /* server */
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "memory"));
- isc_mem_renderxml(server->mctx, writer);
+ isc_mem_renderxml(writer);
TRY0(xmlTextWriterEndElement(writer)); /* memory */
TRY0(xmlTextWriterEndElement(writer)); /* statistics */
@@ -187,8 +482,6 @@ render_xsl(const char *url, const char *querystring, void *args,
isc_buffer_t *b, isc_httpdfree_t **freecb,
void **freecb_args)
{
-#include "bind9.xsl.h"
-
UNUSED(url);
UNUSED(querystring);
UNUSED(args);
@@ -196,8 +489,8 @@ render_xsl(const char *url, const char *querystring, void *args,
*retcode = 200;
*retmsg = "OK";
*mimetype = "text/xslt+xml";
- isc_buffer_reinit(b, msg, strlen(msg));
- isc_buffer_add(b, strlen(msg));
+ isc_buffer_reinit(b, xslmsg, strlen(xslmsg));
+ isc_buffer_add(b, strlen(xslmsg));
*freecb = NULL;
*freecb_args = NULL;
@@ -249,7 +542,7 @@ destroy_listener(void *arg) {
REQUIRE(listener != NULL);
REQUIRE(!ISC_LINK_LINKED(listener, link));
- /* We don't to have acquire the lock here since it's already unlinked */
+ /* We don't have to acquire the lock here since it's already unlinked */
dns_acl_detach(&listener->acl);
DESTROYLOCK(&listener->lock);
@@ -533,3 +826,302 @@ ns_statschannels_shutdown(ns_server_t *server) {
shutdown_listener(listener);
}
}
+
+/*%
+ * Statistics descriptions. These could be statistically initialized at
+ * compile time, but we configure them run time in the init_desc() function
+ * below so that they'll be less susceptible to counter name changes.
+ * Note that bind9.xsl must still be updated consistently with the counter
+ * numbering.
+ */
+static const char *nsstats_desc[dns_nsstatscounter_max];
+static const char *resstats_desc[dns_resstatscounter_max];
+static const char *zonestats_desc[dns_zonestatscounter_max];
+
+static inline void
+set_desc(int counter, int maxcounter, const char *desc, const char **descs) {
+ REQUIRE(counter < maxcounter);
+ REQUIRE(descs[counter] == NULL);
+
+ descs[counter] = desc;
+}
+
+static void
+init_desc() {
+ int i;
+
+ /* Initialize name server statistics */
+ memset(nsstats_desc, 0,
+ dns_nsstatscounter_max * sizeof(nsstats_desc[0]));
+ set_desc(dns_nsstatscounter_requestv4, dns_nsstatscounter_max,
+ "IPv4 requests received", nsstats_desc);
+ set_desc(dns_nsstatscounter_requestv6, dns_nsstatscounter_max,
+ "IPv6 requests received", nsstats_desc);
+ set_desc(dns_nsstatscounter_edns0in, dns_nsstatscounter_max,
+ "requests with EDNS(0) received", nsstats_desc);
+ set_desc(dns_nsstatscounter_badednsver, dns_nsstatscounter_max,
+ "requests with unsupported EDNS version received",
+ nsstats_desc);
+ set_desc(dns_nsstatscounter_tsigin, dns_nsstatscounter_max,
+ "requests with TSIG received", nsstats_desc);
+ set_desc(dns_nsstatscounter_sig0in, dns_nsstatscounter_max,
+ "requests with SIG(0) received", nsstats_desc);
+ set_desc(dns_nsstatscounter_invalidsig, dns_nsstatscounter_max,
+ "requests with invalid signature", nsstats_desc);
+ set_desc(dns_nsstatscounter_tcp, dns_nsstatscounter_max,
+ "TCP requests received", nsstats_desc);
+ set_desc(dns_nsstatscounter_authrej, dns_nsstatscounter_max,
+ "auth queries rejected", nsstats_desc);
+ set_desc(dns_nsstatscounter_recurserej, dns_nsstatscounter_max,
+ "recursive queries rejected", nsstats_desc);
+ set_desc(dns_nsstatscounter_xfrrej, dns_nsstatscounter_max,
+ "transfer requests rejected", nsstats_desc);
+ set_desc(dns_nsstatscounter_updaterej, dns_nsstatscounter_max,
+ "update requests rejected", nsstats_desc);
+ set_desc(dns_nsstatscounter_response, dns_nsstatscounter_max,
+ "responses sent", nsstats_desc);
+ set_desc(dns_nsstatscounter_truncatedresp, dns_nsstatscounter_max,
+ "truncated responses sent", nsstats_desc);
+ set_desc(dns_nsstatscounter_edns0out, dns_nsstatscounter_max,
+ "responses with EDNS(0) sent", nsstats_desc);
+ set_desc(dns_nsstatscounter_tsigout, dns_nsstatscounter_max,
+ "responses with TSIG sent", nsstats_desc);
+ set_desc(dns_nsstatscounter_sig0out, dns_nsstatscounter_max,
+ "responses with SIG(0) sent", nsstats_desc);
+ set_desc(dns_nsstatscounter_success, dns_nsstatscounter_max,
+ "queries resulted in successful answer", nsstats_desc);
+ set_desc(dns_nsstatscounter_authans, dns_nsstatscounter_max,
+ "queries resulted in authoritative answer", nsstats_desc);
+ set_desc(dns_nsstatscounter_nonauthans, dns_nsstatscounter_max,
+ "queries resulted in non authoritative answer", nsstats_desc);
+ set_desc(dns_nsstatscounter_referral, dns_nsstatscounter_max,
+ "queries resulted in referral answer", nsstats_desc);
+ set_desc(dns_nsstatscounter_nxrrset, dns_nsstatscounter_max,
+ "queries resulted in nxrrset", nsstats_desc);
+ set_desc(dns_nsstatscounter_servfail, dns_nsstatscounter_max,
+ "queries resulted in SERVFAIL", nsstats_desc);
+ set_desc(dns_nsstatscounter_formerr, dns_nsstatscounter_max,
+ "queries resulted in FORMERR", nsstats_desc);
+ set_desc(dns_nsstatscounter_nxdomain, dns_nsstatscounter_max,
+ "queries resulted in NXDOMAIN", nsstats_desc);
+ set_desc(dns_nsstatscounter_recursion, dns_nsstatscounter_max,
+ "queries caused recursion", nsstats_desc);
+ set_desc(dns_nsstatscounter_duplicate, dns_nsstatscounter_max,
+ "duplicate queries received", nsstats_desc);
+ set_desc(dns_nsstatscounter_dropped, dns_nsstatscounter_max,
+ "queries dropped", nsstats_desc);
+ set_desc(dns_nsstatscounter_failure, dns_nsstatscounter_max,
+ "other query failures", nsstats_desc);
+ set_desc(dns_nsstatscounter_xfrdone, dns_nsstatscounter_max,
+ "requested transfers completed", nsstats_desc);
+ set_desc(dns_nsstatscounter_updatereqfwd, dns_nsstatscounter_max,
+ "update requests forwarded", nsstats_desc);
+ set_desc(dns_nsstatscounter_updaterespfwd, dns_nsstatscounter_max,
+ "update responses forwarded", nsstats_desc);
+ set_desc(dns_nsstatscounter_updatefwdfail, dns_nsstatscounter_max,
+ "update forward failed", nsstats_desc);
+ set_desc(dns_nsstatscounter_updatedone, dns_nsstatscounter_max,
+ "updates completed", nsstats_desc);
+ set_desc(dns_nsstatscounter_updatefail, dns_nsstatscounter_max,
+ "updates failed", nsstats_desc);
+ set_desc(dns_nsstatscounter_updatebadprereq, dns_nsstatscounter_max,
+ "updates rejected due to prerequisite failure", nsstats_desc);
+
+ /* Initialize resolver statistics */
+ memset(resstats_desc, 0,
+ dns_resstatscounter_max * sizeof(resstats_desc[0]));
+ set_desc(dns_resstatscounter_queryv4, dns_resstatscounter_max,
+ "IPv4 queries sent", resstats_desc);
+ set_desc(dns_resstatscounter_queryv6, dns_resstatscounter_max,
+ "IPv6 queries sent", resstats_desc);
+ set_desc(dns_resstatscounter_responsev4, dns_resstatscounter_max,
+ "IPv4 responses received", resstats_desc);
+ set_desc(dns_resstatscounter_responsev6, dns_resstatscounter_max,
+ "IPv6 responses received", resstats_desc);
+ set_desc(dns_resstatscounter_nxdomain, dns_resstatscounter_max,
+ "NXDOMAIN received", resstats_desc);
+ set_desc(dns_resstatscounter_servfail, dns_resstatscounter_max,
+ "SERVFAIL received", resstats_desc);
+ set_desc(dns_resstatscounter_formerr, dns_resstatscounter_max,
+ "FORMERR received", resstats_desc);
+ set_desc(dns_resstatscounter_othererror, dns_resstatscounter_max,
+ "other errors received", resstats_desc);
+ set_desc(dns_resstatscounter_edns0fail, dns_resstatscounter_max,
+ "EDNS(0) query failures", resstats_desc);
+ set_desc(dns_resstatscounter_mismatch, dns_resstatscounter_max,
+ "mismatch responses received", resstats_desc);
+ set_desc(dns_resstatscounter_truncated, dns_resstatscounter_max,
+ "truncated responses received", resstats_desc);
+ set_desc(dns_resstatscounter_lame, dns_resstatscounter_max,
+ "lame delegations received", resstats_desc);
+ set_desc(dns_resstatscounter_retry, dns_resstatscounter_max,
+ "query retries", resstats_desc);
+ set_desc(dns_resstatscounter_gluefetchv4, dns_resstatscounter_max,
+ "IPv4 NS address fetches", resstats_desc);
+ set_desc(dns_resstatscounter_gluefetchv6, dns_resstatscounter_max,
+ "IPv6 NS address fetches", resstats_desc);
+ set_desc(dns_resstatscounter_gluefetchv4fail, dns_resstatscounter_max,
+ "IPv4 NS address fetch failed", resstats_desc);
+ set_desc(dns_resstatscounter_gluefetchv6fail, dns_resstatscounter_max,
+ "IPv6 NS address fetch failed", resstats_desc);
+ set_desc(dns_resstatscounter_val, dns_resstatscounter_max,
+ "DNSSEC validation attempted", resstats_desc);
+ set_desc(dns_resstatscounter_valsuccess, dns_resstatscounter_max,
+ "DNSSEC validation succeeded", resstats_desc);
+ set_desc(dns_resstatscounter_valnegsuccess, dns_resstatscounter_max,
+ "DNSSEC NX validation succeeded", resstats_desc);
+ set_desc(dns_resstatscounter_valfail, dns_resstatscounter_max,
+ "DNSSEC validation failed", resstats_desc);
+
+ /* Initialize zone statistics */
+ memset(zonestats_desc, 0,
+ dns_zonestatscounter_max * sizeof(zonestats_desc[0]));
+ set_desc(dns_zonestatscounter_notifyoutv4, dns_zonestatscounter_max,
+ "IPv4 notifies sent", zonestats_desc);
+ set_desc(dns_zonestatscounter_notifyoutv6, dns_zonestatscounter_max,
+ "IPv6 notifies sent", zonestats_desc);
+ set_desc(dns_zonestatscounter_notifyinv4, dns_zonestatscounter_max,
+ "IPv4 notifies received", zonestats_desc);
+ set_desc(dns_zonestatscounter_notifyinv6, dns_zonestatscounter_max,
+ "IPv6 notifies received", zonestats_desc);
+ set_desc(dns_zonestatscounter_notifyrej, dns_zonestatscounter_max,
+ "notifies rejected", zonestats_desc);
+ set_desc(dns_zonestatscounter_soaoutv4, dns_zonestatscounter_max,
+ "IPv4 SOA queries sent", zonestats_desc);
+ set_desc(dns_zonestatscounter_soaoutv6, dns_zonestatscounter_max,
+ "IPv6 SOA queries sent", zonestats_desc);
+ set_desc(dns_zonestatscounter_axfrreqv4, dns_zonestatscounter_max,
+ "IPv4 AXFR requested", zonestats_desc);
+ set_desc(dns_zonestatscounter_axfrreqv6, dns_zonestatscounter_max,
+ "IPv6 AXFR requested", zonestats_desc);
+ set_desc(dns_zonestatscounter_ixfrreqv4, dns_zonestatscounter_max,
+ "IPv4 IXFR requested", zonestats_desc);
+ set_desc(dns_zonestatscounter_ixfrreqv6, dns_zonestatscounter_max,
+ "IPv6 IXFR requested", zonestats_desc);
+ set_desc(dns_zonestatscounter_xfrsuccess, dns_zonestatscounter_max,
+ "transfer requests succeeded", zonestats_desc);
+ set_desc(dns_zonestatscounter_xfrfail, dns_zonestatscounter_max,
+ "transfer requests failed", zonestats_desc);
+
+ /* Sanity check */
+ for (i = 0; i < dns_nsstatscounter_max; i++)
+ INSIST(nsstats_desc[i] != NULL);
+ for (i = 0; i < dns_resstatscounter_max; i++)
+ INSIST(resstats_desc[i] != NULL);
+ for (i = 0; i < dns_zonestatscounter_max; i++)
+ INSIST(zonestats_desc[i] != NULL);
+}
+
+isc_result_t
+ns_stats_dump(ns_server_t *server, FILE *fp) {
+ isc_stdtime_t now;
+ isc_result_t result;
+ dns_view_t *view;
+ dns_zone_t *zone, *next;
+ stats_dumparg_t dumparg;
+
+ RUNTIME_CHECK(isc_once_do(&once, init_desc) == ISC_R_SUCCESS);
+
+ /* Set common fields */
+ dumparg.type = statsformat_file;
+ dumparg.arg = fp;
+
+ isc_stdtime_get(&now);
+ fprintf(fp, "+++ Statistics Dump +++ (%lu)\n", (unsigned long)now);
+
+ fprintf(fp, "++ Incoming Requests ++\n");
+ dns_opcodestats_dump(server->opcodestats, opcodestat_dump, &dumparg, 0);
+
+ fprintf(fp, "++ Incoming Queries ++\n");
+ dns_rdatatypestats_dump(server->rcvquerystats, rdtypestat_dump,
+ &dumparg, 0);
+
+ fprintf(fp, "++ Outgoing Queries ++\n");
+ for (view = ISC_LIST_HEAD(server->viewlist);
+ view != NULL;
+ view = ISC_LIST_NEXT(view, link)) {
+ if (view->resquerystats == NULL)
+ continue;
+ if (strcmp(view->name, "_default") == 0)
+ fprintf(fp, "[View: default]\n");
+ else
+ fprintf(fp, "[View: %s]\n", view->name);
+ dns_rdatatypestats_dump(view->resquerystats, rdtypestat_dump,
+ &dumparg, 0);
+ }
+
+ fprintf(fp, "++ Name Server Statistics ++\n");
+ dumparg.desc = nsstats_desc;
+ dumparg.ncounters = dns_nsstatscounter_max;
+ dns_generalstats_dump(server->nsstats, generalstat_dump, &dumparg, 0);
+ fprintf(fp, "++ Zone Maintenance Statistics ++\n");
+ dumparg.desc = zonestats_desc;
+ dumparg.ncounters = dns_zonestatscounter_max;
+ dns_generalstats_dump(server->zonestats, generalstat_dump, &dumparg, 0);
+
+ fprintf(fp, "++ Resolver Statistics ++\n");
+ fprintf(fp, "[Common]\n");
+ dumparg.desc = resstats_desc;
+ dumparg.ncounters = dns_resstatscounter_max;
+ dns_generalstats_dump(server->resolverstats, generalstat_dump, &dumparg,
+ 0);
+ for (view = ISC_LIST_HEAD(server->viewlist);
+ view != NULL;
+ view = ISC_LIST_NEXT(view, link)) {
+ if (view->resstats == NULL)
+ continue;
+ if (strcmp(view->name, "_default") == 0)
+ fprintf(fp, "[View: default]\n");
+ else
+ fprintf(fp, "[View: %s]\n", view->name);
+ dns_generalstats_dump(view->resstats, generalstat_dump,
+ &dumparg, 0);
+ }
+
+ fprintf(fp, "++ Cache DB RRsets ++\n");
+ for (view = ISC_LIST_HEAD(server->viewlist);
+ view != NULL;
+ view = ISC_LIST_NEXT(view, link)) {
+ dns_stats_t *cachestats;
+
+ cachestats = dns_db_getrrsetstats(view->cachedb);
+ if (cachestats == NULL)
+ continue;
+ if (strcmp(view->name, "_default") == 0)
+ fprintf(fp, "[View: default]\n");
+ else
+ fprintf(fp, "[View: %s]\n", view->name);
+ dns_rdatasetstats_dump(cachestats, rdatasetstats_dump, &dumparg,
+ 0);
+ }
+
+ fprintf(fp, "++ Per Zone Query Statistics ++\n");
+ zone = NULL;
+ for (result = dns_zone_first(server->zonemgr, &zone);
+ result == ISC_R_SUCCESS;
+ next = NULL, result = dns_zone_next(zone, &next), zone = next)
+ {
+ dns_stats_t *zonestats = dns_zone_getrequeststats(zone);
+ if (zonestats != NULL) {
+ char zonename[DNS_NAME_FORMATSIZE];
+
+ dns_name_format(dns_zone_getorigin(zone),
+ zonename, sizeof(zonename));
+ view = dns_zone_getview(zone);
+
+ fprintf(fp, "[%s", zonename);
+ if (strcmp(view->name, "_default") != 0)
+ fprintf(fp, " (view: %s)", view->name);
+ fprintf(fp, "]\n");
+
+ dumparg.desc = nsstats_desc;
+ dumparg.ncounters = dns_nsstatscounter_max;
+ dns_generalstats_dump(zonestats, generalstat_dump,
+ &dumparg, 0);
+ }
+ }
+
+ fprintf(fp, "--- Statistics Dump --- (%lu)\n", (unsigned long)now);
+
+ return (ISC_R_SUCCESS); /* this function currently always succeeds */
+}
diff --git a/bin/named/unix/os.c b/bin/named/unix/os.c
index b12470d6..16a4272a 100644
--- a/bin/named/unix/os.c
+++ b/bin/named/unix/os.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: os.c,v 1.79.128.3 2008/01/17 23:46:36 tbox Exp $ */
+/* $Id: os.c,v 1.79.128.5 2008/05/06 01:32:51 each Exp $ */
/*! \file */
@@ -69,7 +69,7 @@ static int devnullfd = -1;
/*
* Linux defines:
* (T) HAVE_LINUXTHREADS
- * (C) HAVE_LINUX_CAPABILITY_H
+ * (C) HAVE_SYS_CAPABILITY_H (or HAVE_LINUX_CAPABILITY_H)
* (P) HAVE_SYS_PRCTL_H
* The possible cases are:
* none: setuid() normally
@@ -116,6 +116,9 @@ static int dfd[2] = { -1, -1 };
static isc_boolean_t non_root = ISC_FALSE;
static isc_boolean_t non_root_caps = ISC_FALSE;
+#ifdef HAVE_SYS_CAPABILITY_H
+#include <sys/capability.h>
+#else
/*%
* We define _LINUX_FS_H to prevent it from being included. We don't need
* anything from it, and the files it includes cause warnings with 2.2
@@ -123,9 +126,15 @@ static isc_boolean_t non_root_caps = ISC_FALSE;
* and <string.h>) on 2.3 kernels.
*/
#define _LINUX_FS_H
-
-#include <sys/syscall.h> /* Required for syscall(). */
-#include <linux/capability.h> /* Required for _LINUX_CAPABILITY_VERSION. */
+#include <linux/capability.h>
+#include <syscall.h>
+#ifndef SYS_capset
+#ifndef __NR_capset
+#include <asm/unistd.h> /* Slackware 4.0 needs this. */
+#endif /* __NR_capset */
+#define SYS_capset __NR_capset
+#endif /* SYS_capset */
+#endif /* HAVE_SYS_CAPABILITY_H */
#ifdef HAVE_SYS_PRCTL_H
#include <sys/prctl.h> /* Required for prctl(). */
@@ -142,22 +151,24 @@ static isc_boolean_t non_root_caps = ISC_FALSE;
#endif /* HAVE_SYS_PRCTL_H */
-#ifndef SYS_capset
-#ifndef __NR_capset
-#include <asm/unistd.h> /* Slackware 4.0 needs this. */
-#endif
-#define SYS_capset __NR_capset
-#endif
+#ifdef HAVE_LIBCAP
+#define SETCAPS_FUNC "cap_set_proc "
+#else
+typedef unsigned int cap_t;
+#define SETCAPS_FUNC "syscall(capset) "
+#endif /* HAVE_LIBCAP */
static void
-linux_setcaps(unsigned int caps) {
+linux_setcaps(cap_t caps) {
+#ifndef HAVE_LIBCAP
struct __user_cap_header_struct caphead;
struct __user_cap_data_struct cap;
+#endif
char strbuf[ISC_STRERRORSIZE];
if ((getuid() != 0 && !non_root_caps) || non_root)
return;
-
+#ifndef HAVE_LIBCAP
memset(&caphead, 0, sizeof(caphead));
caphead.version = _LINUX_CAPABILITY_VERSION;
caphead.pid = 0;
@@ -165,36 +176,74 @@ linux_setcaps(unsigned int caps) {
cap.effective = caps;
cap.permitted = caps;
cap.inheritable = 0;
+#endif
+#ifdef HAVE_LIBCAP
+ if (cap_set_proc(caps) < 0) {
+#else
if (syscall(SYS_capset, &caphead, &cap) < 0) {
+#endif
isc__strerror(errno, strbuf, sizeof(strbuf));
- ns_main_earlyfatal("capset failed: %s:"
+ ns_main_earlyfatal(SETCAPS_FUNC "failed: %s:"
" please ensure that the capset kernel"
" module is loaded. see insmod(8)",
strbuf);
}
}
+#ifdef HAVE_LIBCAP
+#define SET_CAP(flag) \
+ do { \
+ capval = (flag); \
+ err = cap_set_flag(caps, CAP_EFFECTIVE, 1, &capval, CAP_SET); \
+ if (err == -1) { \
+ isc__strerror(errno, strbuf, sizeof(strbuf)); \
+ ns_main_earlyfatal("cap_set_proc failed: %s", strbuf); \
+ } \
+ \
+ err = cap_set_flag(caps, CAP_PERMITTED, 1, &capval, CAP_SET); \
+ if (err == -1) { \
+ isc__strerror(errno, strbuf, sizeof(strbuf)); \
+ ns_main_earlyfatal("cap_set_proc failed: %s", strbuf); \
+ } \
+ } while (0)
+#define INIT_CAP \
+ do { \
+ caps = cap_init(); \
+ if (caps == NULL) { \
+ isc__strerror(errno, strbuf, sizeof(strbuf)); \
+ ns_main_earlyfatal("cap_init failed: %s", strbuf); \
+ } \
+ } while (0)
+#else
+#define SET_CAP(flag) { caps |= (1 << (flag)); }
+#define INIT_CAP { caps = 0; }
+#endif /* HAVE_LIBCAP */
+
static void
linux_initialprivs(void) {
- unsigned int caps;
+ cap_t caps;
+#ifdef HAVE_LIBCAP
+ cap_value_t capval;
+ char strbuf[ISC_STRERRORSIZE];
+ int err;
+#endif
/*%
* We don't need most privileges, so we drop them right away.
* Later on linux_minprivs() will be called, which will drop our
* capabilities to the minimum needed to run the server.
*/
-
- caps = 0;
+ INIT_CAP;
/*
* We need to be able to bind() to privileged ports, notably port 53!
*/
- caps |= (1 << CAP_NET_BIND_SERVICE);
+ SET_CAP(CAP_NET_BIND_SERVICE);
/*
* We need chroot() initially too.
*/
- caps |= (1 << CAP_SYS_CHROOT);
+ SET_CAP(CAP_SYS_CHROOT);
#if defined(HAVE_SYS_PRCTL_H) || !defined(HAVE_LINUXTHREADS)
/*
@@ -203,19 +252,19 @@ linux_initialprivs(void) {
* tried) or we're not using threads. If either of these is
* true, we want the setuid capability.
*/
- caps |= (1 << CAP_SETUID);
+ SET_CAP(CAP_SETUID);
#endif
/*
* Since we call initgroups, we need this.
*/
- caps |= (1 << CAP_SETGID);
+ SET_CAP(CAP_SETGID);
/*
* Without this, we run into problems reading a configuration file
* owned by a non-root user and non-world-readable on startup.
*/
- caps |= (1 << CAP_DAC_READ_SEARCH);
+ SET_CAP(CAP_DAC_READ_SEARCH);
/*
* XXX We might want to add CAP_SYS_RESOURCE, though it's not
@@ -224,15 +273,21 @@ linux_initialprivs(void) {
* of files, the stack size, data size, and core dump size to
* support named.conf options, this is now being added to test.
*/
- caps |= (1 << CAP_SYS_RESOURCE);
+ SET_CAP(CAP_SYS_RESOURCE);
linux_setcaps(caps);
}
static void
linux_minprivs(void) {
- unsigned int caps;
+ cap_t caps;
+#ifdef HAVE_LIBCAP
+ cap_value_t capval;
+ char strbuf[ISC_STRERRORSIZE];
+ int err;
+#endif
+ INIT_CAP;
/*%
* Drop all privileges except the ability to bind() to privileged
* ports.
@@ -241,8 +296,7 @@ linux_minprivs(void) {
* chroot() could be used to escape from the chrooted area.
*/
- caps = 0;
- caps |= (1 << CAP_NET_BIND_SERVICE);
+ SET_CAP(CAP_NET_BIND_SERVICE);
/*
* XXX We might want to add CAP_SYS_RESOURCE, though it's not
@@ -251,7 +305,7 @@ linux_minprivs(void) {
* of files, the stack size, data size, and core dump size to
* support named.conf options, this is now being added to test.
*/
- caps |= (1 << CAP_SYS_RESOURCE);
+ SET_CAP(CAP_SYS_RESOURCE);
linux_setcaps(caps);
}
diff --git a/bin/named/update.c b/bin/named/update.c
index 4b2a06ce..0c6e44bb 100644
--- a/bin/named/update.c
+++ b/bin/named/update.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: update.c,v 1.138.2.2 2008/01/17 23:46:36 tbox Exp $ */
+/* $Id: update.c,v 1.138.2.4 2008/04/03 06:10:19 marka Exp $ */
#include <config.h>
@@ -41,12 +41,14 @@
#include <dns/rdatatype.h>
#include <dns/soa.h>
#include <dns/ssu.h>
+#include <dns/stats.h>
#include <dns/view.h>
#include <dns/zone.h>
#include <dns/zt.h>
#include <named/client.h>
#include <named/log.h>
+#include <named/server.h>
#include <named/update.h>
/*! \file
@@ -117,6 +119,11 @@
msg, isc_result_totext(result)); \
if (result != ISC_R_SUCCESS) goto failure; \
} while (0)
+#define PREREQFAILC(code, msg) \
+ do { \
+ inc_stats(zone, dns_nsstatscounter_updatebadprereq); \
+ FAILC(code, msg); \
+ } while (0)
#define FAILN(code, name, msg) \
do { \
@@ -138,6 +145,11 @@
} \
if (result != ISC_R_SUCCESS) goto failure; \
} while (0)
+#define PREREQFAILN(code, name, msg) \
+ do { \
+ inc_stats(zone, dns_nsstatscounter_updatebadprereq); \
+ FAILN(code, name, msg); \
+ } while (0)
#define FAILNT(code, name, type, msg) \
do { \
@@ -162,6 +174,12 @@
} \
if (result != ISC_R_SUCCESS) goto failure; \
} while (0)
+#define PREREQFAILNT(code, name, type, msg) \
+ do { \
+ inc_stats(zone, dns_nsstatscounter_updatebadprereq); \
+ FAILNT(code, name, type, msg); \
+ } while (0)
+
/*%
* Fail unconditionally and log as a server error.
* The test against ISC_R_SUCCESS is there to keep the Solaris compiler
@@ -241,6 +259,20 @@ update_log(ns_client_t *client, dns_zone_t *zone,
}
/*%
+ * Increment updated-related statistics counters.
+ */
+static inline void
+inc_stats(dns_zone_t *zone, dns_statscounter_t counter) {
+ dns_generalstats_increment(ns_g_server->nsstats, counter);
+
+ if (zone != NULL) {
+ dns_stats_t *zonestats = dns_zone_getrequeststats(zone);
+ if (zonestats != NULL)
+ dns_generalstats_increment(zonestats, counter);
+ }
+}
+
+/*%
* Override the default acl logging when checking whether a client
* can update the zone or whether we can forward the request to the
* master based on IP address.
@@ -1653,10 +1685,11 @@ ksk_sanity(dns_db_t *db, dns_dbversion_t *ver) {
* Add RRSIG records for an RRset, recording the change in "diff".
*/
static isc_result_t
-add_sigs(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
- dns_rdatatype_t type, dns_diff_t *diff, dst_key_t **keys,
- unsigned int nkeys, isc_mem_t *mctx, isc_stdtime_t inception,
- isc_stdtime_t expire, isc_boolean_t check_ksk)
+add_sigs(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *ver, dns_name_t *name, dns_rdatatype_t type,
+ dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys,
+ isc_mem_t *mctx, isc_stdtime_t inception, isc_stdtime_t expire,
+ isc_boolean_t check_ksk)
{
isc_result_t result;
dns_dbnode_t *node = NULL;
@@ -1665,6 +1698,7 @@ add_sigs(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
isc_buffer_t buffer;
unsigned char data[1024]; /* XXX */
unsigned int i;
+ isc_boolean_t added_sig = ISC_FALSE;
dns_rdataset_init(&rdataset);
isc_buffer_init(&buffer, data, sizeof(data));
@@ -1694,6 +1728,13 @@ add_sigs(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
CHECK(update_one_rr(db, ver, diff, DNS_DIFFOP_ADD, name,
rdataset.ttl, &sig_rdata));
dns_rdata_reset(&sig_rdata);
+ added_sig = ISC_TRUE;
+ }
+ if (!added_sig) {
+ update_log(client, zone, ISC_LOG_ERROR,
+ "found no private keys, "
+ "unable to generate any signatures");
+ result = ISC_R_NOTFOUND;
}
failure:
@@ -1825,9 +1866,9 @@ update_signatures(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
*/
CHECK(rrset_exists(db, newver, name, type, 0, &flag));
if (flag) {
- CHECK(add_sigs(db, newver, name, type,
- &sig_diff, zone_keys, nkeys,
- client->mctx, inception,
+ CHECK(add_sigs(client, zone, db, newver, name,
+ type, &sig_diff, zone_keys,
+ nkeys, client->mctx, inception,
expire, check_ksk));
}
skip:
@@ -2011,10 +2052,10 @@ update_signatures(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
dns_rdatatype_rrsig, dns_rdatatype_nsec,
NULL, &sig_diff));
} else if (t->op == DNS_DIFFOP_ADD) {
- CHECK(add_sigs(db, newver, &t->name, dns_rdatatype_nsec,
- &sig_diff, zone_keys, nkeys,
- client->mctx, inception, expire,
- check_ksk));
+ CHECK(add_sigs(client, zone, db, newver, &t->name,
+ dns_rdatatype_nsec, &sig_diff,
+ zone_keys, nkeys, client->mctx,
+ inception, expire, check_ksk));
} else {
INSIST(0);
}
@@ -2167,6 +2208,10 @@ ns_update_start(ns_client_t *client, isc_result_t sigresult) {
return;
failure:
+ if (result == DNS_R_REFUSED) {
+ INSIST(dns_zone_gettype(zone) == dns_zone_slave);
+ inc_stats(zone, dns_nsstatscounter_updaterej);
+ }
/*
* We failed without having sent an update event to the zone.
* We are still in the client task context, so we can
@@ -2371,54 +2416,59 @@ update_action(isc_task_t *task, isc_event_t *event) {
&name, &rdata, &covers, &ttl, &update_class);
if (ttl != 0)
- FAILC(DNS_R_FORMERR, "prerequisite TTL is not zero");
+ PREREQFAILC(DNS_R_FORMERR,
+ "prerequisite TTL is not zero");
if (! dns_name_issubdomain(name, zonename))
- FAILN(DNS_R_NOTZONE, name,
- "prerequisite name is out of zone");
+ PREREQFAILN(DNS_R_NOTZONE, name,
+ "prerequisite name is out of zone");
if (update_class == dns_rdataclass_any) {
if (rdata.length != 0)
- FAILC(DNS_R_FORMERR,
+ PREREQFAILC(DNS_R_FORMERR,
"class ANY prerequisite "
"RDATA is not empty");
if (rdata.type == dns_rdatatype_any) {
CHECK(name_exists(db, ver, name, &flag));
if (! flag) {
- FAILN(DNS_R_NXDOMAIN, name,
- "'name in use' prerequisite "
- "not satisfied");
+ PREREQFAILN(DNS_R_NXDOMAIN, name,
+ "'name in use' "
+ "prerequisite not "
+ "satisfied");
}
} else {
CHECK(rrset_exists(db, ver, name,
rdata.type, covers, &flag));
if (! flag) {
/* RRset does not exist. */
- FAILNT(DNS_R_NXRRSET, name, rdata.type,
+ PREREQFAILNT(DNS_R_NXRRSET, name, rdata.type,
"'rrset exists (value independent)' "
"prerequisite not satisfied");
}
}
} else if (update_class == dns_rdataclass_none) {
if (rdata.length != 0)
- FAILC(DNS_R_FORMERR,
- "class NONE prerequisite "
- "RDATA is not empty");
+ PREREQFAILC(DNS_R_FORMERR,
+ "class NONE prerequisite "
+ "RDATA is not empty");
if (rdata.type == dns_rdatatype_any) {
CHECK(name_exists(db, ver, name, &flag));
if (flag) {
- FAILN(DNS_R_YXDOMAIN, name,
- "'name not in use' prerequisite "
- "not satisfied");
+ PREREQFAILN(DNS_R_YXDOMAIN, name,
+ "'name not in use' "
+ "prerequisite not "
+ "satisfied");
}
} else {
CHECK(rrset_exists(db, ver, name,
rdata.type, covers, &flag));
if (flag) {
/* RRset exists. */
- FAILNT(DNS_R_YXRRSET, name, rdata.type,
- "'rrset does not exist' "
- "prerequisite not satisfied");
+ PREREQFAILNT(DNS_R_YXRRSET, name,
+ rdata.type,
+ "'rrset does not exist' "
+ "prerequisite not "
+ "satisfied");
}
}
} else if (update_class == zoneclass) {
@@ -2431,7 +2481,7 @@ update_action(isc_task_t *task, isc_event_t *event) {
FAIL(ISC_R_UNEXPECTED);
}
} else {
- FAILC(DNS_R_FORMERR, "malformed prerequisite");
+ PREREQFAILC(DNS_R_FORMERR, "malformed prerequisite");
}
}
if (result != ISC_R_NOMORE)
@@ -2880,6 +2930,9 @@ update_action(isc_task_t *task, isc_event_t *event) {
goto common;
failure:
+ if (result == DNS_R_REFUSED)
+ inc_stats(zone, dns_nsstatscounter_updaterej);
+
/*
* The reason for failure should have been logged at this point.
*/
@@ -2902,11 +2955,10 @@ update_action(isc_task_t *task, isc_event_t *event) {
if (ssutable != NULL)
dns_ssutable_detach(&ssutable);
- if (zone != NULL)
- dns_zone_detach(&zone);
-
isc_task_detach(&task);
uev->result = result;
+ if (zone != NULL)
+ INSIST(uev->zone == zone); /* we use this later */
uev->ev_type = DNS_EVENT_UPDATEDONE;
uev->ev_action = updatedone_action;
isc_task_send(client->task, &event);
@@ -2924,6 +2976,19 @@ updatedone_action(isc_task_t *task, isc_event_t *event) {
INSIST(task == client->task);
INSIST(client->nupdates > 0);
+ switch (uev->result) {
+ case ISC_R_SUCCESS:
+ inc_stats(uev->zone, dns_nsstatscounter_updatedone);
+ break;
+ case DNS_R_REFUSED:
+ inc_stats(uev->zone, dns_nsstatscounter_updaterej);
+ break;
+ default:
+ inc_stats(uev->zone, dns_nsstatscounter_updatefail);
+ break;
+ }
+ if (uev->zone != NULL)
+ dns_zone_detach(&uev->zone);
client->nupdates--;
respond(client, uev->result);
isc_event_free(&event);
@@ -2952,17 +3017,21 @@ static void
forward_callback(void *arg, isc_result_t result, dns_message_t *answer) {
update_event_t *uev = arg;
ns_client_t *client = uev->ev_arg;
+ dns_zone_t *zone = uev->zone;
if (result != ISC_R_SUCCESS) {
INSIST(answer == NULL);
uev->ev_type = DNS_EVENT_UPDATEDONE;
uev->ev_action = forward_fail;
+ inc_stats(zone, dns_nsstatscounter_updatefwdfail);
} else {
uev->ev_type = DNS_EVENT_UPDATEDONE;
uev->ev_action = forward_done;
uev->answer = answer;
+ inc_stats(zone, dns_nsstatscounter_updaterespfwd);
}
isc_task_send(client->task, ISC_EVENT_PTR(&uev));
+ dns_zone_detach(&zone);
}
static void
@@ -2993,8 +3062,10 @@ forward_action(isc_task_t *task, isc_event_t *event) {
uev->ev_type = DNS_EVENT_UPDATEDONE;
uev->ev_action = forward_fail;
isc_task_send(client->task, &event);
- }
- dns_zone_detach(&zone);
+ inc_stats(zone, dns_nsstatscounter_updatefwdfail);
+ dns_zone_detach(&zone);
+ } else
+ inc_stats(zone, dns_nsstatscounter_updatereqfwd);
isc_task_detach(&task);
}
diff --git a/bin/named/xfrout.c b/bin/named/xfrout.c
index 6cc8f706..fb531cc7 100644
--- a/bin/named/xfrout.c
+++ b/bin/named/xfrout.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: xfrout.c,v 1.126 2007/06/18 23:47:19 tbox Exp $ */
+/* $Id: xfrout.c,v 1.126.128.2 2008/04/03 06:20:33 tbox Exp $ */
#include <config.h>
@@ -40,6 +40,7 @@
#include <dns/rdatasetiter.h>
#include <dns/result.h>
#include <dns/soa.h>
+#include <dns/stats.h>
#include <dns/timer.h>
#include <dns/tsig.h>
#include <dns/view.h>
@@ -51,7 +52,7 @@
#include <named/server.h>
#include <named/xfrout.h>
-/*! \file
+/*! \file
* \brief
* Outgoing AXFR and IXFR.
*/
@@ -86,7 +87,7 @@
ns_client_log(client, DNS_LOGCATEGORY_XFER_OUT, \
NS_LOGMODULE_XFER_OUT, ISC_LOG_INFO, \
"bad zone transfer request: %s (%s)", \
- msg, isc_result_totext(code)); \
+ msg, isc_result_totext(code)); \
if (result != ISC_R_SUCCESS) goto failure; \
} while (0)
@@ -100,12 +101,12 @@
ns_client_log(client, DNS_LOGCATEGORY_XFER_OUT, \
NS_LOGMODULE_XFER_OUT, ISC_LOG_INFO, \
"bad zone transfer request: '%s/%s': %s (%s)", \
- _buf1, _buf2, msg, isc_result_totext(code)); \
+ _buf1, _buf2, msg, isc_result_totext(code)); \
if (result != ISC_R_SUCCESS) goto failure; \
} while (0)
#define CHECK(op) \
- do { result = (op); \
+ do { result = (op); \
if (result != ISC_R_SUCCESS) goto failure; \
} while (0)
@@ -121,12 +122,12 @@ typedef struct db_rr_iterator db_rr_iterator_t;
struct db_rr_iterator {
isc_result_t result;
dns_db_t *db;
- dns_dbiterator_t *dbit;
+ dns_dbiterator_t *dbit;
dns_dbversion_t *ver;
isc_stdtime_t now;
dns_dbnode_t *node;
dns_fixedname_t fixedname;
- dns_rdatasetiter_t *rdatasetit;
+ dns_rdatasetiter_t *rdatasetit;
dns_rdataset_t rdataset;
dns_rdata_t rdata;
};
@@ -148,6 +149,16 @@ db_rr_iterator_current(db_rr_iterator_t *it, dns_name_t **name,
static void
db_rr_iterator_destroy(db_rr_iterator_t *it);
+static inline void
+inc_stats(dns_zone_t *zone, dns_statscounter_t counter) {
+ dns_generalstats_increment(ns_g_server->nsstats, counter);
+ if (zone != NULL) {
+ dns_stats_t *zonestats = dns_zone_getrequeststats(zone);
+ if (zonestats != NULL)
+ dns_generalstats_increment(zonestats, counter);
+ }
+}
+
static isc_result_t
db_rr_iterator_init(db_rr_iterator_t *it, dns_db_t *db, dns_dbversion_t *ver,
isc_stdtime_t now)
@@ -326,7 +337,7 @@ log_rr(dns_name_t *name, dns_rdata_t *rdata, isc_uint32_t ttl) {
INSIST(buf.used >= 1 &&
((char *) buf.base)[buf.used - 1] == '\n');
buf.used--;
-
+
isc_log_write(XFROUT_RR_LOGARGS, "%.*s",
(int)isc_buffer_usedlength(&buf),
(char *)isc_buffer_base(&buf));
@@ -818,6 +829,7 @@ typedef struct {
dns_name_t *qname; /* Question name of request */
dns_rdatatype_t qtype; /* dns_rdatatype_{a,i}xfr */
dns_rdataclass_t qclass;
+ dns_zone_t *zone; /* (necessary for stats) */
dns_db_t *db;
dns_dbversion_t *ver;
isc_quota_t *quota;
@@ -841,7 +853,7 @@ typedef struct {
static isc_result_t
xfrout_ctx_create(isc_mem_t *mctx, ns_client_t *client,
unsigned int id, dns_name_t *qname, dns_rdatatype_t qtype,
- dns_rdataclass_t qclass,
+ dns_rdataclass_t qclass, dns_zone_t *zone,
dns_db_t *db, dns_dbversion_t *ver, isc_quota_t *quota,
rrstream_t *stream, dns_tsigkey_t *tsigkey,
isc_buffer_t *lasttsig,
@@ -969,7 +981,7 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
/*
* Normal zone table does not have a match. Try the DLZ database
*/
- if (client->view->dlzdatabase != NULL) {
+ if (client->view->dlzdatabase != NULL) {
result = dns_dlzallowzonexfr(client->view,
question_name, &client->peeraddr,
&db);
@@ -1006,7 +1018,7 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
} else {
/*
- * not DLZ and not in normal zone table, we are
+ * not DLZ and not in normal zone table, we are
* not authoritative
*/
FAILQ(DNS_R_NOTAUTH, "non-authoritative zone",
@@ -1210,26 +1222,28 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
#ifdef DLZ
if (is_dlz)
- CHECK(xfrout_ctx_create(mctx, client, request->id, question_name,
- reqtype, question_class, db, ver, quota,
- stream, dns_message_gettsigkey(request),
- tsigbuf,
- 3600,
- 3600,
- (format == dns_many_answers) ?
- ISC_TRUE : ISC_FALSE,
- &xfr));
- else
+ CHECK(xfrout_ctx_create(mctx, client, request->id, question_name,
+ reqtype, question_class, zone, db, ver,
+ quota, stream,
+ dns_message_gettsigkey(request),
+ tsigbuf,
+ 3600,
+ 3600,
+ (format == dns_many_answers) ?
+ ISC_TRUE : ISC_FALSE,
+ &xfr));
+ else
#endif
- CHECK(xfrout_ctx_create(mctx, client, request->id, question_name,
- reqtype, question_class, db, ver, quota,
- stream, dns_message_gettsigkey(request),
- tsigbuf,
- dns_zone_getmaxxfrout(zone),
- dns_zone_getidleout(zone),
- (format == dns_many_answers) ?
- ISC_TRUE : ISC_FALSE,
- &xfr));
+ CHECK(xfrout_ctx_create(mctx, client, request->id, question_name,
+ reqtype, question_class, zone, db, ver,
+ quota, stream,
+ dns_message_gettsigkey(request),
+ tsigbuf,
+ dns_zone_getmaxxfrout(zone),
+ dns_zone_getidleout(zone),
+ (format == dns_many_answers) ?
+ ISC_TRUE : ISC_FALSE,
+ &xfr));
xfr->mnemonic = mnemonic;
stream = NULL;
@@ -1261,6 +1275,8 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
result = ISC_R_SUCCESS;
failure:
+ if (result == DNS_R_REFUSED)
+ inc_stats(zone, dns_nsstatscounter_xfrrej);
if (quota != NULL)
isc_quota_detach(&quota);
if (current_soa_tuple != NULL)
@@ -1291,7 +1307,7 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
static isc_result_t
xfrout_ctx_create(isc_mem_t *mctx, ns_client_t *client, unsigned int id,
dns_name_t *qname, dns_rdatatype_t qtype,
- dns_rdataclass_t qclass,
+ dns_rdataclass_t qclass, dns_zone_t *zone,
dns_db_t *db, dns_dbversion_t *ver, isc_quota_t *quota,
rrstream_t *stream, dns_tsigkey_t *tsigkey,
isc_buffer_t *lasttsig, unsigned int maxtime,
@@ -1314,8 +1330,10 @@ xfrout_ctx_create(isc_mem_t *mctx, ns_client_t *client, unsigned int id,
xfr->qname = qname;
xfr->qtype = qtype;
xfr->qclass = qclass;
+ xfr->zone = NULL;
xfr->db = NULL;
xfr->ver = NULL;
+ dns_zone_attach(zone, &xfr->zone);
dns_db_attach(db, &xfr->db);
dns_db_attachversion(db, ver, &xfr->ver);
xfr->end_of_stream = ISC_FALSE;
@@ -1663,7 +1681,7 @@ sendstream(xfrout_ctx_t *xfr) {
* iterators before returning from the event handler.
*/
xfr->stream->methods->pause(xfr->stream);
-
+
if (result == ISC_R_SUCCESS)
return;
@@ -1691,6 +1709,8 @@ xfrout_ctx_destroy(xfrout_ctx_t **xfrp) {
isc_quota_detach(&xfr->quota);
if (xfr->ver != NULL)
dns_db_closeversion(xfr->db, &xfr->ver, ISC_FALSE);
+ if (xfr->zone != NULL)
+ dns_zone_detach(&xfr->zone);
if (xfr->db != NULL)
dns_db_detach(&xfr->db);
@@ -1724,6 +1744,7 @@ xfrout_senddone(isc_task_t *task, isc_event_t *event) {
sendstream(xfr);
} else {
/* End of zone transfer stream. */
+ inc_stats(xfr->zone, dns_nsstatscounter_xfrdone);
xfrout_log(xfr, ISC_LOG_INFO, "%s ended", xfr->mnemonic);
ns_client_next(xfr->client, ISC_R_SUCCESS);
xfrout_ctx_destroy(&xfr);
diff --git a/bin/named/zoneconf.c b/bin/named/zoneconf.c
index 4f53a8f1..2ee22bd0 100644
--- a/bin/named/zoneconf.c
+++ b/bin/named/zoneconf.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zoneconf.c,v 1.139 2007/09/18 00:22:30 marka Exp $ */
+/* $Id: zoneconf.c,v 1.139.56.2 2008/04/03 06:20:33 tbox Exp $ */
/*% */
@@ -34,6 +34,7 @@
#include <dns/name.h>
#include <dns/rdatatype.h>
#include <dns/ssu.h>
+#include <dns/stats.h>
#include <dns/view.h>
#include <dns/zone.h>
@@ -60,7 +61,7 @@
static isc_result_t
configure_zone_acl(const cfg_obj_t *zconfig, const cfg_obj_t *vconfig,
const cfg_obj_t *config, const char *aclname,
- cfg_aclconfctx_t *actx, dns_zone_t *zone,
+ cfg_aclconfctx_t *actx, dns_zone_t *zone,
void (*setzacl)(dns_zone_t *, dns_acl_t *),
void (*clearzacl)(dns_zone_t *))
{
@@ -272,11 +273,11 @@ strtoargvsub(isc_mem_t *mctx, char *s, unsigned int *argcp,
char ***argvp, unsigned int n)
{
isc_result_t result;
-
+
/* Discard leading whitespace. */
while (*s == ' ' || *s == '\t')
s++;
-
+
if (*s == '\0') {
/* We have reached the end of the string. */
*argcp = n;
@@ -361,6 +362,8 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
isc_boolean_t warn = ISC_FALSE, ignore = ISC_FALSE;
isc_boolean_t ixfrdiff;
dns_masterformat_t masterformat;
+ dns_stats_t *zoneqrystats;
+ isc_boolean_t zonestats_on;
i = 0;
if (zconfig != NULL) {
@@ -488,7 +491,15 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
obj = NULL;
result = ns_config_get(maps, "zone-statistics", &obj);
INSIST(result == ISC_R_SUCCESS);
- RETERR(dns_zone_setstatistics(zone, cfg_obj_asboolean(obj)));
+ zonestats_on = cfg_obj_asboolean(obj);
+ zoneqrystats = NULL;
+ if (zonestats_on) {
+ RETERR(dns_generalstats_create(mctx, &zoneqrystats,
+ dns_nsstatscounter_max));
+ }
+ dns_zone_setrequeststats(zone, zoneqrystats);
+ if (zoneqrystats != NULL)
+ dns_stats_detach(&zoneqrystats);
/*
* Configure master functionality. This applies
@@ -628,7 +639,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
obj = NULL;
result = ns_config_get(maps, "check-sibling", &obj);
INSIST(result == ISC_R_SUCCESS);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKSIBLING,
+ dns_zone_setoption(zone, DNS_ZONEOPT_CHECKSIBLING,
cfg_obj_asboolean(obj));
obj = NULL;
@@ -647,7 +658,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
"allow-update", ac, zone,
dns_zone_setupdateacl,
dns_zone_clearupdateacl));
-
+
updateacl = dns_zone_getupdateacl(zone);
if (updateacl != NULL && dns_acl_isinsecure(updateacl))
isc_log_write(ns_g_lctx, DNS_LOGCATEGORY_SECURITY,
@@ -655,7 +666,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
"zone '%s' allows updates by IP "
"address, which is insecure",
zname);
-
+
RETERR(configure_zone_ssutable(zoptions, zone));
obj = NULL;
@@ -703,7 +714,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
obj = NULL;
result = ns_config_get(maps, "check-integrity", &obj);
INSIST(obj != NULL);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKINTEGRITY,
+ dns_zone_setoption(zone, DNS_ZONEOPT_CHECKINTEGRITY,
cfg_obj_asboolean(obj));
obj = NULL;
@@ -739,7 +750,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
obj = NULL;
result = ns_config_get(maps, "update-check-ksk", &obj);
INSIST(result == ISC_R_SUCCESS);
- dns_zone_setoption(zone, DNS_ZONEOPT_UPDATECHECKKSK,
+ dns_zone_setoption(zone, DNS_ZONEOPT_UPDATECHECKKSK,
cfg_obj_asboolean(obj));
}
@@ -753,7 +764,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
"allow-update", ac, zone,
dns_zone_setupdateacl,
dns_zone_clearupdateacl));
-
+
updateacl = dns_zone_getupdateacl(zone);
if (updateacl != NULL && dns_acl_isinsecure(updateacl))
isc_log_write(ns_g_lctx, DNS_LOGCATEGORY_SECURITY,
@@ -761,7 +772,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
"zone '%s' allows updates by IP "
"address, which is insecure",
zname);
-
+
RETERR(configure_zone_ssutable(zoptions, zone));
obj = NULL;
diff --git a/bin/tests/system/ifconfig.sh b/bin/tests/system/ifconfig.sh
index 2e041015..0cecbf16 100755
--- a/bin/tests/system/ifconfig.sh
+++ b/bin/tests/system/ifconfig.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2000-2003 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: ifconfig.sh,v 1.51 2007/06/19 23:47:00 tbox Exp $
+# $Id: ifconfig.sh,v 1.51.128.2 2008/03/03 23:46:26 tbox Exp $
#
# Set up interface aliases for bind9 system tests.
@@ -85,6 +85,9 @@ case "$1" in
*-unknown-netbsd*)
ifconfig lo0 10.53.0.$ns alias netmask 255.255.255.0
;;
+ *-unknown-openbsd*)
+ ifconfig lo0 10.53.0.$ns alias netmask 255.255.255.0
+ ;;
*-*-bsdi[3-5].*)
ifconfig lo0 add 10.53.0.$ns netmask 255.255.255.0
;;
@@ -145,6 +148,9 @@ case "$1" in
*-unknown-netbsd*)
ifconfig lo0 10.53.0.$ns delete
;;
+ *-unknown-openbsd*)
+ ifconfig lo0 10.53.0.$ns delete
+ ;;
*-*-bsdi[3-5].*)
ifconfig lo0 remove 10.53.0.$ns
;;
diff --git a/bin/tests/system/ixfr/ns1/.exists b/bin/tests/system/ixfr/ns1/.exists
deleted file mode 100644
index e69de29b..00000000
--- a/bin/tests/system/ixfr/ns1/.exists
+++ /dev/null
diff --git a/bin/tests/system/rrsetorder/clean.sh b/bin/tests/system/rrsetorder/clean.sh
index 0cb15620..dd2dc114 100644
--- a/bin/tests/system/rrsetorder/clean.sh
+++ b/bin/tests/system/rrsetorder/clean.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (C) 2006, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2006-2008 Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -14,9 +14,10 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: clean.sh,v 1.6 2007/09/26 03:22:44 marka Exp $
+# $Id: clean.sh,v 1.6.46.2 2008/04/24 23:46:29 tbox Exp $
rm -f dig.out.cyclic dig.out.fixed dig.out.random
+rm -f dig.out.0 dig.out.1 dig.out.2 dig.out.3
rm -f ns2/root.bk
rm -f ns?/named.run ns?/named.core
rm -f */named.memstats
diff --git a/bin/tests/system/rrsetorder/dig.out.cyclic.good1 b/bin/tests/system/rrsetorder/dig.out.cyclic.good1
deleted file mode 100644
index d2ca6fc3..00000000
--- a/bin/tests/system/rrsetorder/dig.out.cyclic.good1
+++ /dev/null
@@ -1,4 +0,0 @@
-1.2.3.1
-1.2.3.4
-1.2.3.3
-1.2.3.2
diff --git a/bin/tests/system/rrsetorder/dig.out.cyclic.good2 b/bin/tests/system/rrsetorder/dig.out.cyclic.good2
deleted file mode 100644
index c25c7560..00000000
--- a/bin/tests/system/rrsetorder/dig.out.cyclic.good2
+++ /dev/null
@@ -1,4 +0,0 @@
-1.2.3.4
-1.2.3.3
-1.2.3.2
-1.2.3.1
diff --git a/bin/tests/system/rrsetorder/dig.out.cyclic.good3 b/bin/tests/system/rrsetorder/dig.out.cyclic.good3
deleted file mode 100644
index e8deb671..00000000
--- a/bin/tests/system/rrsetorder/dig.out.cyclic.good3
+++ /dev/null
@@ -1,4 +0,0 @@
-1.2.3.3
-1.2.3.2
-1.2.3.1
-1.2.3.4
diff --git a/bin/tests/system/rrsetorder/dig.out.cyclic.good4 b/bin/tests/system/rrsetorder/dig.out.cyclic.good4
deleted file mode 100644
index 3b276939..00000000
--- a/bin/tests/system/rrsetorder/dig.out.cyclic.good4
+++ /dev/null
@@ -1,4 +0,0 @@
-1.2.3.2
-1.2.3.1
-1.2.3.4
-1.2.3.3
diff --git a/bin/tests/system/rrsetorder/tests.sh b/bin/tests/system/rrsetorder/tests.sh
index de9136e9..cf38a703 100644
--- a/bin/tests/system/rrsetorder/tests.sh
+++ b/bin/tests/system/rrsetorder/tests.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (C) 2006, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2006-2008 Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -14,54 +14,60 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: tests.sh,v 1.5 2007/06/19 23:47:05 tbox Exp $
+# $Id: tests.sh,v 1.5.128.2 2008/04/24 23:46:29 tbox Exp $
SYSTEMTESTTOP=..
. $SYSTEMTESTTOP/conf.sh
status=0
+if grep -q "^#define DNS_RDATASET_FIXED" $TOP/config.h; then
+ test_fixed=true
+else
+ echo "I: Order 'fixed' disabled at compile time"
+ test_fixed=false
+fi
+
#
#
#
-echo "I: Checking order fixed (master)"
-ret=0
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
-do
-$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
- -p 5300 @10.53.0.1 fixed.example > dig.out.fixed || ret=1
-cmp -s dig.out.fixed dig.out.fixed.good || ret=1
-done
-if [ $ret != 0 ]; then echo "I:failed"; fi
-status=`expr $status + $ret`
+if $test_fixed; then
+ echo "I: Checking order fixed (master)"
+ ret=0
+ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ do
+ $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
+ -p 5300 @10.53.0.1 fixed.example > dig.out.fixed || ret=1
+ cmp -s dig.out.fixed dig.out.fixed.good || ret=1
+ done
+ if [ $ret != 0 ]; then echo "I:failed"; fi
+ status=`expr $status + $ret`
+fi
#
#
#
echo "I: Checking order cyclic (master)"
ret=0
-match1=0
-match2=0
-match3=0
-match4=0
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+matches=0
+for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
do
-$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
- -p 5300 @10.53.0.1 cyclic.example > dig.out.cyclic || ret=1
-cmp -s dig.out.cyclic dig.out.cyclic.good1 || \
-cmp -s dig.out.cyclic dig.out.cyclic.good2 || \
-cmp -s dig.out.cyclic dig.out.cyclic.good3 || \
-cmp -s dig.out.cyclic dig.out.cyclic.good4 || \
-ret=1
-
-cmp -s dig.out.cyclic dig.out.cyclic.good1 && match1=1
-cmp -s dig.out.cyclic dig.out.cyclic.good2 && match2=1
-cmp -s dig.out.cyclic dig.out.cyclic.good3 && match3=1
-cmp -s dig.out.cyclic dig.out.cyclic.good4 && match4=1
-
+ j=`expr $i % 4`
+ $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
+ -p 5300 @10.53.0.1 cyclic.example > dig.out.cyclic || ret=1
+ if [ $i -le 4 ]; then
+ cp dig.out.cyclic dig.out.$j
+ else
+ cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1`
+ fi
done
-match=`expr $match1 + $match2 + $match3 + $match4`
-if [ $match != 4 ]; then ret=1; fi
+cmp -s dig.out.0 dig.out.1 && ret=1
+cmp -s dig.out.0 dig.out.2 && ret=1
+cmp -s dig.out.0 dig.out.3 && ret=1
+cmp -s dig.out.1 dig.out.2 && ret=1
+cmp -s dig.out.1 dig.out.3 && ret=1
+cmp -s dig.out.2 dig.out.3 && ret=1
+if [ $matches -ne 16 ]; then ret=1; fi
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
@@ -96,44 +102,43 @@ status=`expr $status + $ret`
#
#
#
-echo "I: Checking order fixed (slave)"
-ret=0
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
-do
-$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
- -p 5300 @10.53.0.2 fixed.example > dig.out.fixed || ret=1
-cmp -s dig.out.fixed dig.out.fixed.good || ret=1
-done
-if [ $ret != 0 ]; then echo "I:failed"; fi
-status=`expr $status + $ret`
+if $test_fixed; then
+ echo "I: Checking order fixed (slave)"
+ ret=0
+ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ do
+ $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
+ -p 5300 @10.53.0.2 fixed.example > dig.out.fixed || ret=1
+ cmp -s dig.out.fixed dig.out.fixed.good || ret=1
+ done
+ if [ $ret != 0 ]; then echo "I:failed"; fi
+ status=`expr $status + $ret`
+fi
#
#
#
echo "I: Checking order cyclic (slave)"
ret=0
-match1=0
-match2=0
-match3=0
-match4=0
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+matches=0
+for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
do
-$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
- -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1
-cmp -s dig.out.cyclic dig.out.cyclic.good1 || \
-cmp -s dig.out.cyclic dig.out.cyclic.good2 || \
-cmp -s dig.out.cyclic dig.out.cyclic.good3 || \
-cmp -s dig.out.cyclic dig.out.cyclic.good4 || \
-ret=1
-
-cmp -s dig.out.cyclic dig.out.cyclic.good1 && match1=1
-cmp -s dig.out.cyclic dig.out.cyclic.good2 && match2=1
-cmp -s dig.out.cyclic dig.out.cyclic.good3 && match3=1
-cmp -s dig.out.cyclic dig.out.cyclic.good4 && match4=1
-
+ j=`expr $i % 4`
+ $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
+ -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1
+ if [ $i -le 4 ]; then
+ cp dig.out.cyclic dig.out.$j
+ else
+ cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1`
+ fi
done
-match=`expr $match1 + $match2 + $match3 + $match4`
-if [ $match != 4 ]; then ret=1; fi
+cmp -s dig.out.0 dig.out.1 && ret=1
+cmp -s dig.out.0 dig.out.2 && ret=1
+cmp -s dig.out.0 dig.out.3 && ret=1
+cmp -s dig.out.1 dig.out.2 && ret=1
+cmp -s dig.out.1 dig.out.3 && ret=1
+cmp -s dig.out.2 dig.out.3 && ret=1
+if [ $matches -ne 16 ]; then ret=1; fi
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
@@ -184,44 +189,43 @@ echo "I: Re-starting slave"
#
#
#
-echo "I: Checking order fixed (slave loaded from disk)"
-ret=0
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
-do
-$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
- -p 5300 @10.53.0.2 fixed.example > dig.out.fixed || ret=1
-cmp -s dig.out.fixed dig.out.fixed.good || ret=1
-done
-if [ $ret != 0 ]; then echo "I:failed"; fi
-status=`expr $status + $ret`
+if $test_fixed; then
+ echo "I: Checking order fixed (slave loaded from disk)"
+ ret=0
+ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ do
+ $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
+ -p 5300 @10.53.0.2 fixed.example > dig.out.fixed || ret=1
+ cmp -s dig.out.fixed dig.out.fixed.good || ret=1
+ done
+ if [ $ret != 0 ]; then echo "I:failed"; fi
+ status=`expr $status + $ret`
+fi
#
#
#
echo "I: Checking order cyclic (slave loaded from disk)"
ret=0
-match1=0
-match2=0
-match3=0
-match4=0
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+matches=0
+for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
do
-$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
- -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1
-cmp -s dig.out.cyclic dig.out.cyclic.good1 || \
-cmp -s dig.out.cyclic dig.out.cyclic.good2 || \
-cmp -s dig.out.cyclic dig.out.cyclic.good3 || \
-cmp -s dig.out.cyclic dig.out.cyclic.good4 || \
-ret=1
-
-cmp -s dig.out.cyclic dig.out.cyclic.good1 && match1=1
-cmp -s dig.out.cyclic dig.out.cyclic.good2 && match2=1
-cmp -s dig.out.cyclic dig.out.cyclic.good3 && match3=1
-cmp -s dig.out.cyclic dig.out.cyclic.good4 && match4=1
-
+ j=`expr $i % 4`
+ $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
+ -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1
+ if [ $i -le 4 ]; then
+ cp dig.out.cyclic dig.out.$j
+ else
+ cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1`
+ fi
done
-match=`expr $match1 + $match2 + $match3 + $match4`
-if [ $match != 4 ]; then ret=1; fi
+cmp -s dig.out.0 dig.out.1 && ret=1
+cmp -s dig.out.0 dig.out.2 && ret=1
+cmp -s dig.out.0 dig.out.3 && ret=1
+cmp -s dig.out.1 dig.out.2 && ret=1
+cmp -s dig.out.1 dig.out.3 && ret=1
+cmp -s dig.out.2 dig.out.3 && ret=1
+if [ $matches -ne 16 ]; then ret=1; fi
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
@@ -256,44 +260,43 @@ status=`expr $status + $ret`
#
#
#
-echo "I: Checking order fixed (cache)"
-ret=0
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
-do
-$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
- -p 5300 @10.53.0.3 fixed.example > dig.out.fixed || ret=1
-cmp -s dig.out.fixed dig.out.fixed.good || ret=1
-done
-if [ $ret != 0 ]; then echo "I:failed"; fi
-status=`expr $status + $ret`
+if $test_fixed; then
+ echo "I: Checking order fixed (cache)"
+ ret=0
+ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ do
+ $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
+ -p 5300 @10.53.0.3 fixed.example > dig.out.fixed || ret=1
+ cmp -s dig.out.fixed dig.out.fixed.good || ret=1
+ done
+ if [ $ret != 0 ]; then echo "I:failed"; fi
+ status=`expr $status + $ret`
+fi
#
#
#
echo "I: Checking order cyclic (cache)"
ret=0
-match1=0
-match2=0
-match3=0
-match4=0
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+matches=0
+for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
do
-$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
- -p 5300 @10.53.0.3 cyclic.example > dig.out.cyclic || ret=1
-cmp -s dig.out.cyclic dig.out.cyclic.good1 || \
-cmp -s dig.out.cyclic dig.out.cyclic.good2 || \
-cmp -s dig.out.cyclic dig.out.cyclic.good3 || \
-cmp -s dig.out.cyclic dig.out.cyclic.good4 || \
-ret=1
-
-cmp -s dig.out.cyclic dig.out.cyclic.good1 && match1=1
-cmp -s dig.out.cyclic dig.out.cyclic.good2 && match2=1
-cmp -s dig.out.cyclic dig.out.cyclic.good3 && match3=1
-cmp -s dig.out.cyclic dig.out.cyclic.good4 && match4=1
-
+ j=`expr $i % 4`
+ $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
+ -p 5300 @10.53.0.3 cyclic.example > dig.out.cyclic || ret=1
+ if [ $i -le 4 ]; then
+ cp dig.out.cyclic dig.out.$j
+ else
+ cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1`
+ fi
done
-match=`expr $match1 + $match2 + $match3 + $match4`
-if [ $match != 4 ]; then ret=1; fi
+cmp -s dig.out.0 dig.out.1 && ret=1
+cmp -s dig.out.0 dig.out.2 && ret=1
+cmp -s dig.out.0 dig.out.3 && ret=1
+cmp -s dig.out.1 dig.out.2 && ret=1
+cmp -s dig.out.1 dig.out.3 && ret=1
+cmp -s dig.out.2 dig.out.3 && ret=1
+if [ $matches -ne 16 ]; then ret=1; fi
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
diff --git a/config.h.in b/config.h.in
index fdbe1923..e0fbcfc9 100644
--- a/config.h.in
+++ b/config.h.in
@@ -16,7 +16,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: config.h.in,v 1.90.60.4 2008/01/24 02:41:47 marka Exp $ */
+/* $Id: config.h.in,v 1.90.60.8 2008/05/06 01:32:51 each Exp $ */
/*! \file */
@@ -157,6 +157,9 @@ int sigwait(const unsigned int *set, int *sig);
/* Define if you cannot bind() before connect() for TCP sockets. */
#undef BROKEN_TCP_BIND_BEFORE_CONNECT
+/* Define to enable "rrset-order fixed" syntax. */
+#undef DNS_RDATASET_FIXED
+
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
@@ -175,6 +178,9 @@ int sigwait(const unsigned int *set, int *sig);
/* Define to 1 if you have the `c' library (-lc). */
#undef HAVE_LIBC
+/* Define to 1 if you have the `cap' library (-lcap). */
+#undef HAVE_LIBCAP
+
/* Define to 1 if you have the `c_r' library (-lc_r). */
#undef HAVE_LIBC_R
@@ -223,6 +229,9 @@ int sigwait(const unsigned int *set, int *sig);
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
+/* Define to 1 if you have the <sys/capability.h> header file. */
+#undef HAVE_SYS_CAPABILITY_H
+
/* Define to 1 if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H
diff --git a/config.h.win32 b/config.h.win32
index 31226de5..7e77ba93 100644
--- a/config.h.win32
+++ b/config.h.win32
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2006, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2006-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: config.h.win32,v 1.16 2007/06/19 23:46:59 tbox Exp $ */
+/* $Id: config.h.win32,v 1.16.130.2 2008/04/02 23:46:28 tbox Exp $ */
/*
* win32 configuration file
@@ -123,9 +123,7 @@
/* Define if you have DH_generate_parameters(). */
#define HAVE_DH_GENERATE_PARAMETERS
-#define ISC_PLATFORM_NEEDSTRLCAT
-
-#define ISC_PLATFORM_NEEDSTRLCPY
+#define WANT_IPV6
#define S_IFMT _S_IFMT /* file type mask */
#define S_IFDIR _S_IFDIR /* directory */
@@ -146,7 +144,7 @@
/* open() under unix allows setting of read/write permissions
* at the owner, group and other levels. These don't exist in NT
- * We'll just map them all to the NT equivalent
+ * We'll just map them all to the NT equivalent
*/
#define S_IRUSR _S_IREAD /* Owner read permission */
@@ -196,7 +194,7 @@ typedef long off_t;
*/
#include <versions.h>
-/* We actually are using the CryptAPI and not a device */
+/* We actually are using the CryptAPI and not a device */
#define PATH_RANDOMDEV "CryptAPI"
#include <stddef.h>
diff --git a/configure b/configure
index 3401f47f..7e616d0b 100755
--- a/configure
+++ b/configure
@@ -14,7 +14,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
#
-# $Id: configure,v 1.418.60.4 2008/01/24 02:41:48 marka Exp $
+# $Id: configure,v 1.418.60.8 2008/05/06 01:33:33 each Exp $
#
# Portions Copyright (C) 1996-2001 Nominum, Inc.
#
@@ -29,7 +29,7 @@
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-# From configure.in Revision: 1.432.60.5 .
+# From configure.in Revision: 1.432.60.9 .
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.61.
#
@@ -1638,6 +1638,8 @@ Optional Features:
--disable-linux-caps disable linux capabilities
--enable-atomic enable machine specific atomic operations
[default=autodetect]
+ --enable-fixed-rrset enable fixed rrset ordering
+ [default=no]
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@@ -9045,6 +9047,14 @@ esac
#
# GNU libtool support
#
+case $host in
+sunos*)
+ # Just set the maximum command line length for sunos as it otherwise
+ # takes a exceptionally long time to work it out. Required for libtool.
+ lt_cv_sys_max_cmd_len=4096;
+ ;;
+esac
+
# Check whether --with-libtool was given.
if test "${with_libtool+set}" = set; then
@@ -9581,7 +9591,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 9584 "configure"' > conftest.$ac_ext
+ echo '#line 9594 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -11703,11 +11713,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:11706: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:11716: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:11710: \$? = $ac_status" >&5
+ echo "$as_me:11720: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -11946,11 +11956,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:11949: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:11959: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:11953: \$? = $ac_status" >&5
+ echo "$as_me:11963: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -12006,11 +12016,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:12009: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:12019: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:12013: \$? = $ac_status" >&5
+ echo "$as_me:12023: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -14154,7 +14164,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 14157 "configure"
+#line 14167 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -14252,7 +14262,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 14255 "configure"
+#line 14265 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -16445,11 +16455,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:16448: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16458: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:16452: \$? = $ac_status" >&5
+ echo "$as_me:16462: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -16505,11 +16515,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:16508: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16518: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:16512: \$? = $ac_status" >&5
+ echo "$as_me:16522: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -17833,7 +17843,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 17836 "configure"
+#line 17846 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -17931,7 +17941,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 17934 "configure"
+#line 17944 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -18768,11 +18778,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:18771: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:18781: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:18775: \$? = $ac_status" >&5
+ echo "$as_me:18785: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -18828,11 +18838,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:18831: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:18841: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:18835: \$? = $ac_status" >&5
+ echo "$as_me:18845: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -20862,11 +20872,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:20865: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:20875: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:20869: \$? = $ac_status" >&5
+ echo "$as_me:20879: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -21105,11 +21115,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:21108: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:21118: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:21112: \$? = $ac_status" >&5
+ echo "$as_me:21122: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -21165,11 +21175,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:21168: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:21178: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:21172: \$? = $ac_status" >&5
+ echo "$as_me:21182: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -23313,7 +23323,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 23316 "configure"
+#line 23326 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -23411,7 +23421,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 23414 "configure"
+#line 23424 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -27490,7 +27500,8 @@ fi
case "$enable_linux_caps" in
yes|'')
-for ac_header in linux/capability.h
+
+for ac_header in linux/capability.h sys/capability.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -27629,6 +27640,77 @@ fi
done
+
+{ echo "$as_me:$LINENO: checking for cap_set_proc in -lcap" >&5
+echo $ECHO_N "checking for cap_set_proc in -lcap... $ECHO_C" >&6; }
+if test "${ac_cv_lib_cap_cap_set_proc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcap $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cap_set_proc ();
+int
+main ()
+{
+return cap_set_proc ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_lib_cap_cap_set_proc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_cap_cap_set_proc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_cap_cap_set_proc" >&5
+echo "${ECHO_T}$ac_cv_lib_cap_cap_set_proc" >&6; }
+if test $ac_cv_lib_cap_cap_set_proc = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBCAP 1
+_ACEOF
+
+ LIBS="-lcap $LIBS"
+
+fi
+
;;
no)
;;
@@ -29213,6 +29295,30 @@ ISC_ARCH_DIR=$arch
#
+# Activate "rrset-order fixed" or not?
+#
+# Check whether --enable-fixed-rrset was given.
+if test "${enable_fixed_rrset+set}" = set; then
+ enableval=$enable_fixed_rrset; enable_fixed="$enableval"
+else
+ enable_fixed="no"
+fi
+
+case "$enable_fixed" in
+ yes)
+
+cat >>confdefs.h <<\_ACEOF
+#define DNS_RDATASET_FIXED 1
+_ACEOF
+
+ ;;
+ no)
+ ;;
+ *)
+ ;;
+esac
+
+#
# The following sets up how non-blocking i/o is established.
# Sunos, cygwin and solaris 2.x (x<5) require special handling.
#
diff --git a/configure.in b/configure.in
index 1e991c55..4ffa8d7b 100644
--- a/configure.in
+++ b/configure.in
@@ -18,7 +18,7 @@ AC_DIVERT_PUSH(1)dnl
esyscmd([sed "s/^/# /" COPYRIGHT])dnl
AC_DIVERT_POP()dnl
-AC_REVISION($Revision: 1.432.60.5 $)
+AC_REVISION($Revision: 1.432.60.9 $)
AC_INIT(lib/dns/name.c)
AC_PREREQ(2.59)
@@ -1097,6 +1097,14 @@ AC_SUBST(PURIFY)
#
# GNU libtool support
#
+case $host in
+sunos*)
+ # Just set the maximum command line length for sunos as it otherwise
+ # takes a exceptionally long time to work it out. Required for libtool.
+ lt_cv_sys_max_cmd_len=4096;
+ ;;
+esac
+
AC_ARG_WITH(libtool,
[ --with-libtool use GNU libtool (following indented options supported)],
use_libtool="$withval", use_libtool="no")
@@ -1875,7 +1883,8 @@ AC_ARG_ENABLE(linux-caps,
[ --disable-linux-caps disable linux capabilities])
case "$enable_linux_caps" in
yes|'')
- AC_CHECK_HEADERS(linux/capability.h)
+ AC_CHECK_HEADERS(linux/capability.h sys/capability.h)
+ AC_CHECK_LIB(cap, cap_set_proc)
;;
no)
;;
@@ -2254,6 +2263,25 @@ ISC_ARCH_DIR=$arch
AC_SUBST(ISC_ARCH_DIR)
#
+# Activate "rrset-order fixed" or not?
+#
+AC_ARG_ENABLE(fixed-rrset,
+ [ --enable-fixed-rrset enable fixed rrset ordering
+ [[default=no]]],
+ enable_fixed="$enableval",
+ enable_fixed="no")
+case "$enable_fixed" in
+ yes)
+ AC_DEFINE(DNS_RDATASET_FIXED, 1,
+ [Define to enable "rrset-order fixed" syntax.])
+ ;;
+ no)
+ ;;
+ *)
+ ;;
+esac
+
+#
# The following sets up how non-blocking i/o is established.
# Sunos, cygwin and solaris 2.x (x<5) require special handling.
#
diff --git a/contrib/query-loc-0.3.0/install-sh b/contrib/query-loc-0.3.0/install-sh
deleted file mode 100755
index e9de2384..00000000
--- a/contrib/query-loc-0.3.0/install-sh
+++ /dev/null
@@ -1,251 +0,0 @@
-#!/bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission. M.I.T. makes no representations about the
-# suitability of this software for any purpose. It is provided "as is"
-# without express or implied warranty.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd="$stripprog"
- shift
- continue;;
-
- -t=*) transformarg=`echo $1 | sed 's/-t=//'`
- shift
- continue;;
-
- -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- # this colon is to work around a 386BSD /bin/sh bug
- :
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "install: no input file specified"
- exit 1
-else
- true
-fi
-
-if [ x"$dir_arg" != x ]; then
- dst=$src
- src=""
-
- if [ -d $dst ]; then
- instcmd=:
- chmodcmd=""
- else
- instcmd=mkdir
- fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad
-# if $src (and thus $dsttmp) contains '*'.
-
- if [ -f $src -o -d $src ]
- then
- true
- else
- echo "install: $src does not exist"
- exit 1
- fi
-
- if [ x"$dst" = x ]
- then
- echo "install: no destination specified"
- exit 1
- else
- true
- fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
- if [ -d $dst ]
- then
- dst="$dst"/`basename $src`
- else
- true
- fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-# this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
- pathcomp="${pathcomp}${1}"
- shift
-
- if [ ! -d "${pathcomp}" ] ;
- then
- $mkdirprog "${pathcomp}"
- else
- true
- fi
-
- pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
- $doit $instcmd $dst &&
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
- if [ x"$transformarg" = x ]
- then
- dstfile=`basename $dst`
- else
- dstfile=`basename $dst $transformbasename |
- sed $transformarg`$transformbasename
- fi
-
-# don't allow the sed command to completely eliminate the filename
-
- if [ x"$dstfile" = x ]
- then
- dstfile=`basename $dst`
- else
- true
- fi
-
-# Make a temp file name in the proper directory.
-
- dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
- $doit $instcmd $src $dsttmp &&
-
- trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing. If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
- $doit $rmcmd -f $dstdir/$dstfile &&
- $doit $mvcmd $dsttmp $dstdir/$dstfile
-
-fi &&
-
-
-exit 0
diff --git a/contrib/query-loc-0.3.0/ADDRESSES b/contrib/query-loc-0.4.0/ADDRESSES
index 370fde06..522967eb 100644
--- a/contrib/query-loc-0.3.0/ADDRESSES
+++ b/contrib/query-loc-0.4.0/ADDRESSES
@@ -1,12 +1,10 @@
The following machines, at least today seem to have LOC
records:
-*.cpod.fr (for instance www.cpod.fr)
+147.210.73.0/24 (note the two /25 have different LOC, inherited differently)
130.104.3.*
-195.202.193.*
Melanie.Tolna.Net
204.92.254.*
-mail.vitts.com
alink.net
caida.org
ckdhr.com
@@ -15,4 +13,4 @@ nikhef.nl
yahoo.com
nic.af
-$Id: ADDRESSES,v 1.1 2005/04/01 05:34:59 marka Exp $
+$Id: ADDRESSES,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $
diff --git a/contrib/query-loc-0.3.0/ALGO b/contrib/query-loc-0.4.0/ALGO
index 4695dc14..4695dc14 100644
--- a/contrib/query-loc-0.3.0/ALGO
+++ b/contrib/query-loc-0.4.0/ALGO
diff --git a/contrib/query-loc-0.3.0/INSTALL b/contrib/query-loc-0.4.0/INSTALL
index 5f31e7bd..3b398fb4 100644
--- a/contrib/query-loc-0.3.0/INSTALL
+++ b/contrib/query-loc-0.4.0/INSTALL
@@ -6,4 +6,4 @@ which I provide, if not found.
Tested on Linux (i386 and Alpha), Solaris (Sparc) and Digital Unix (Alpha).
-$Id: INSTALL,v 1.1 2005/04/01 05:34:59 marka Exp $
+$Id: INSTALL,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $
diff --git a/contrib/query-loc-0.3.0/Makefile.in b/contrib/query-loc-0.4.0/Makefile.in
index 82075c30..e7fc6cff 100644
--- a/contrib/query-loc-0.3.0/Makefile.in
+++ b/contrib/query-loc-0.4.0/Makefile.in
@@ -1,11 +1,11 @@
-# $Id: Makefile.in,v 1.1 2005/04/01 05:34:59 marka Exp $
+# $Id: Makefile.in,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $
CC=@CC@
CFLAGS=@CFLAGS@
LIBS=@LIBS@
DESTDIR=@prefix@
BINDIR=@prefix@/bin
MANDIR=@prefix@/share/man/man1
-DISTRIB= README INSTALL ALGO USAGE ADDRESSES Makefile.in configure configure.in config.h.in install-sh loc.h loc.c query-loc.c loc_ntoa.c query-loc.1
+DISTRIB= README INSTALL ALGO USAGE ADDRESSES Makefile.in configure configure.in config.h.in install-sh loc.h loc.c query-loc.c loc_ntoa.c query-loc.1 reconf
OBJS=query-loc.o loc.o @LOC_NTOA@
VERSION=`grep VERSION loc.h | cut -d ' ' -f 3 | sed s/\"//g`
@@ -23,6 +23,8 @@ clean:
distclean: clean
rm -f config.h config.cache config.log config.status Makefile
+dist: distrib
+
distrib: clean
./reconf
@(echo Query-Loc is version ${VERSION}; \
diff --git a/contrib/query-loc-0.3.0/README b/contrib/query-loc-0.4.0/README
index fc49c739..360091c7 100644
--- a/contrib/query-loc-0.3.0/README
+++ b/contrib/query-loc-0.4.0/README
@@ -9,12 +9,13 @@
It is under the General Public Licence (GPL, which
you can fetch from <http://www.gnu.org/copyleft/gpl.html>.
- Copyright Stéphane Bortzmeyer <bortzmeyer@debian.org>, 1998.
+ Copyright Stéphane Bortzmeyer <bortzmeyer@sources.org>, 1998-2007.
Thanks to Paul Vixie for the RFC and its encouragements. Thanks
to Björn Augustsson for the xtraceroute program
- <http://www.dtek.chalmers.se/~d3august/xt/>.
+ <http://www.dtek.chalmers.se/~d3august/xt/>. Thanks to Roland
+ Dirlewanger for extensive patching.
-$Id: README,v 1.1 2005/04/01 05:34:59 marka Exp $
+$Id: README,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $
diff --git a/contrib/query-loc-0.3.0/USAGE b/contrib/query-loc-0.4.0/USAGE
index 233d6ca1..d3ee4c06 100644
--- a/contrib/query-loc-0.3.0/USAGE
+++ b/contrib/query-loc-0.4.0/USAGE
@@ -3,6 +3,5 @@ query-loc [-v] [-d nnn] host-name-or-address
Examples of hosts with LOCation info (quite uncommon, if you know more,
please tell me):
-- Everything in the 193.105.79.0 network, such as www.humanite.presse.fr
-- Everything in the 192.88.144 network, such as www.kei.com
+See the ADDRESSES file
diff --git a/contrib/query-loc-0.3.0/config.h.in b/contrib/query-loc-0.4.0/config.h.in
index d90187ce..e41250c9 100644
--- a/contrib/query-loc-0.3.0/config.h.in
+++ b/contrib/query-loc-0.4.0/config.h.in
@@ -1,5 +1,5 @@
/* config.h.in. Generated from configure.in by autoheader. */
-/* $Id: config.h.in,v 1.1 2005/04/01 05:35:00 marka Exp $ */
+/* $Id: config.h.in,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $ */
/* Define to 1 if you have the <inttypes.h> header file. */
diff --git a/contrib/query-loc-0.3.0/configure b/contrib/query-loc-0.4.0/configure
index d77cf76c..d77cf76c 100755
--- a/contrib/query-loc-0.3.0/configure
+++ b/contrib/query-loc-0.4.0/configure
diff --git a/contrib/query-loc-0.3.0/configure.in b/contrib/query-loc-0.4.0/configure.in
index f25a6a25..10966c50 100644
--- a/contrib/query-loc-0.3.0/configure.in
+++ b/contrib/query-loc-0.4.0/configure.in
@@ -1,5 +1,5 @@
dnl Process this file with autoconf to produce a configure script.
-AC_RELEASE("$Id: configure.in,v 1.1 2005/04/01 05:35:00 marka Exp $")
+AC_RELEASE("$Id: configure.in,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $")
AC_INIT(query-loc.c)
dnl Checks for programs.
diff --git a/contrib/query-loc-0.4.0/install-sh b/contrib/query-loc-0.4.0/install-sh
new file mode 100755
index 00000000..1a835340
--- /dev/null
+++ b/contrib/query-loc-0.4.0/install-sh
@@ -0,0 +1,323 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2005-02-02.21
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+chmodcmd="$chmodprog 0755"
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+-c (ignored)
+-d create directories instead of installing files.
+-g GROUP $chgrpprog installed files to GROUP.
+-m MODE $chmodprog installed files to MODE.
+-o USER $chownprog installed files to USER.
+-s $stripprog installed files.
+-t DIRECTORY install into DIRECTORY.
+-T report an error if DSTFILE is a directory.
+--help display this help and exit.
+--version display version info and exit.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test -n "$1"; do
+ case $1 in
+ -c) shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd=$stripprog
+ shift
+ continue;;
+
+ -t) dstarg=$2
+ shift
+ shift
+ continue;;
+
+ -T) no_target_directory=true
+ shift
+ continue;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ *) # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ test -n "$dir_arg$dstarg" && break
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dstarg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dstarg"
+ shift # fnord
+ fi
+ shift # arg
+ dstarg=$arg
+ done
+ break;;
+ esac
+done
+
+if test -z "$1"; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call `install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+for src
+do
+ # Protect names starting with `-'.
+ case $src in
+ -*) src=./$src ;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ src=
+
+ if test -d "$dst"; then
+ mkdircmd=:
+ chmodcmd=
+ else
+ mkdircmd=$mkdirprog
+ fi
+ else
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dstarg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+
+ dst=$dstarg
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst ;;
+ esac
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dstarg: Is a directory" >&2
+ exit 1
+ fi
+ dst=$dst/`basename "$src"`
+ fi
+ fi
+
+ # This sed command emulates the dirname command.
+ dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+
+ # Make sure that the destination directory exists.
+
+ # Skip lots of stat calls in the usual case.
+ if test ! -d "$dstdir"; then
+ defaultIFS='
+ '
+ IFS="${IFS-$defaultIFS}"
+
+ oIFS=$IFS
+ # Some sh's can't handle IFS=/ for some reason.
+ IFS='%'
+ set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+ shift
+ IFS=$oIFS
+
+ pathcomp=
+
+ while test $# -ne 0 ; do
+ pathcomp=$pathcomp$1
+ shift
+ if test ! -d "$pathcomp"; then
+ $mkdirprog "$pathcomp"
+ # mkdir can fail with a `File exist' error in case several
+ # install-sh are creating the directory concurrently. This
+ # is OK.
+ test -d "$pathcomp" || exit
+ fi
+ pathcomp=$pathcomp/
+ done
+ fi
+
+ if test -n "$dir_arg"; then
+ $doit $mkdircmd "$dst" \
+ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+
+ else
+ dstfile=`basename "$dst"`
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+ trap '(exit $?); exit' 1 2 13 15
+
+ # Copy the file name to the temp name.
+ $doit $cpprog "$src" "$dsttmp" &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+
+ # Now rename the file to the real destination.
+ { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
+ || {
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ if test -f "$dstdir/$dstfile"; then
+ $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+ || {
+ echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+ (exit 1); exit 1
+ }
+ else
+ :
+ fi
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+ }
+ }
+ fi || { (exit 1); exit 1; }
+done
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+ (exit 0); exit 0
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/contrib/query-loc-0.3.0/loc.c b/contrib/query-loc-0.4.0/loc.c
index 502ed11b..7d62089c 100644
--- a/contrib/query-loc-0.3.0/loc.c
+++ b/contrib/query-loc-0.4.0/loc.c
@@ -1,6 +1,6 @@
#include "loc.h"
-/* $Id: loc.c,v 1.1 2005/04/01 05:35:00 marka Exp $ */
+/* $Id: loc.c,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $ */
/* Global variables */
@@ -175,20 +175,24 @@ getlocbyaddr (addr, mask)
if (IN_CLASSA (a))
{
netaddr.s_addr = htonl (a & IN_CLASSA_NET);
+ themask.s_addr = htonl(IN_CLASSA_NET);
}
else if (IN_CLASSB (a))
{
netaddr.s_addr = htonl (a & IN_CLASSB_NET);
+ themask.s_addr = htonl(IN_CLASSB_NET);
}
else if (IN_CLASSC (a))
{
netaddr.s_addr = htonl (a & IN_CLASSC_NET);
+ themask.s_addr = htonl(IN_CLASSC_NET);
}
else
{
/* Error */
+ return NULL;
}
- return getlocbynet (in_addr_arpa (inet_ntoa (netaddr)), addr, mask);
+ return getlocbynet (in_addr_arpa (inet_ntoa (netaddr)), addr, &themask);
}
else
{
@@ -209,10 +213,49 @@ getlocbynet (name, addr, mask)
struct in_addr *mask;
{
char *network;
- char *result, *result_int;
+ char *result;
struct list_in_addr *list;
+ struct in_addr newmask;
+ u_int32_t a;
+ char newname[4 * 4 + sizeof (ARPA_ROOT) + 2];
+
if (debug >= 2)
- printf ("Testing network %s\n", name);
+ printf ("Testing network %s with mask %s\n", name, inet_ntoa(*mask));
+
+ /* Check if this network has an A RR */
+ list = findA (name);
+ if (list != NULL)
+ {
+ /* Yes, it does. This A record will be used as the
+ * new mask for recursion if it is longer than
+ * the actual mask. */
+ if (mask != NULL && mask->s_addr < list->addr.s_addr)
+ {
+ /* compute the new arguments for recursion
+ * - compute the new network by applying the new mask
+ * to the address and get the in_addr_arpa representation
+ * of it.
+ * - the address remains unchanged
+ * - the new mask is the one given in the A record
+ */
+ a = ntohl(addr.s_addr); /* start from host address */
+ a &= ntohl(list->addr.s_addr); /* apply new mask */
+ newname[sizeof newname - 1] = 0;
+ strncpy(
+ newname,
+ in_addr_arpa(inet_ntoa(inet_makeaddr(a, 0))),
+ sizeof newname);
+ newmask = inet_makeaddr(ntohl(list->addr.s_addr), 0);
+ result = getlocbynet (newname, addr, &newmask);
+ if (result != NULL)
+ {
+ return result;
+ }
+ }
+ /* couldn't find a LOC. Fall through and try with name */
+ }
+
+ /* Check if this network has a name */
network = findRR (name, T_PTR);
if (network == NULL)
{
@@ -222,26 +265,7 @@ getlocbynet (name, addr, mask)
}
else
{
- result = getlocbyname (network, TRUE);
- list = findA (network);
- if (list == NULL)
- {
- return result;
- }
- else if ((mask != NULL) &&
- ((mask->s_addr) == (list->addr.s_addr)))
- {
- /* Already checked */
- return result;
- }
- else
- {
- result_int = getlocbyaddr (addr, &list->addr);
- if (result_int == NULL)
- return result;
- else
- return result_int;
- }
+ return getlocbyname (network, TRUE);
}
}
@@ -414,7 +438,7 @@ int responseLen; /* buffer length */
if (dn_expand (response.buf, /* Start of the packet */
endOfMsg, /* End of the packet */
cp, /* Position in the packet */
- (u_char *) ptrList[ptrNum], /* Result */
+ (char *) ptrList[ptrNum], /* Result */
MAXDNAME) /* size of ptrList buffer */
< 0)
{ /* Negative: error */
diff --git a/contrib/query-loc-0.3.0/loc.h b/contrib/query-loc-0.4.0/loc.h
index f794acbe..73901653 100644
--- a/contrib/query-loc-0.3.0/loc.h
+++ b/contrib/query-loc-0.4.0/loc.h
@@ -1,6 +1,6 @@
-/* $Id: loc.h,v 1.1 2005/04/01 05:35:00 marka Exp $ */
+/* $Id: loc.h,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $ */
-#define VERSION "0.3.0"
+#define VERSION "0.4.0"
#include "config.h"
diff --git a/contrib/query-loc-0.3.0/loc_ntoa.c b/contrib/query-loc-0.4.0/loc_ntoa.c
index 21eada3e..21eada3e 100644
--- a/contrib/query-loc-0.3.0/loc_ntoa.c
+++ b/contrib/query-loc-0.4.0/loc_ntoa.c
diff --git a/contrib/query-loc-0.3.0/query-loc.1 b/contrib/query-loc-0.4.0/query-loc.1
index 97eb4362..87b1c0e9 100644
--- a/contrib/query-loc-0.3.0/query-loc.1
+++ b/contrib/query-loc-0.4.0/query-loc.1
@@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
-.TH QUERY-LOC SECTION "January 11, 2005"
+.TH QUERY-LOC 1 "January 11, 2005"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@@ -52,4 +52,4 @@ Very few hosts have location information.
This manual page was written by Stephane Bortzmeyer
<bortzmeyer@debian.org>.
-.\" $Id: query-loc.1,v 1.1 2005/04/01 05:35:01 marka Exp $
+.\" $Id: query-loc.1,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $
diff --git a/contrib/query-loc-0.3.0/query-loc.c b/contrib/query-loc-0.4.0/query-loc.c
index 6af57d42..4af15b5f 100644
--- a/contrib/query-loc-0.3.0/query-loc.c
+++ b/contrib/query-loc-0.4.0/query-loc.c
@@ -1,6 +1,6 @@
#include "loc.h"
-/* $Id: query-loc.c,v 1.1 2005/04/01 05:35:01 marka Exp $ */
+/* $Id: query-loc.c,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $ */
/* Global variables */
char *progname;
diff --git a/contrib/query-loc-0.4.0/reconf b/contrib/query-loc-0.4.0/reconf
new file mode 100755
index 00000000..0a3c822f
--- /dev/null
+++ b/contrib/query-loc-0.4.0/reconf
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# $Id: reconf,v 1.1.2.1 2008/02/15 02:16:03 marka Exp $
+
+autoreconf
+# We do not use automake but we need its install-sh file. We do not
+# care about the exit code.
+automake --add-missing || true
diff --git a/doc/arm/Bv9ARM-book.xml b/doc/arm/Bv9ARM-book.xml
index cb7674b7..d332c569 100644
--- a/doc/arm/Bv9ARM-book.xml
+++ b/doc/arm/Bv9ARM-book.xml
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- File: $Id: Bv9ARM-book.xml,v 1.340.24.3 2008/01/18 02:18:45 jinmei Exp $ -->
+<!-- File: $Id: Bv9ARM-book.xml,v 1.340.24.9 2008/05/05 22:38:15 each Exp $ -->
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<title>BIND 9 Administrator Reference Manual</title>
@@ -67,7 +67,7 @@
</para>
<para>
- This version of the manual corresponds to BIND version 9.4.
+ This version of the manual corresponds to BIND version 9.5.
</para>
</sect1>
@@ -6858,11 +6858,14 @@ query-source-v6 address * port *;
<term><command>cleaning-interval</command></term>
<listitem>
<para>
- The server will remove expired resource records
+ This interval is effectively obsolete. Previously,
+ the server would remove expired resource records
from the cache every <command>cleaning-interval</command> minutes.
- The default is 60 minutes. The maximum value is 28 days
- (40320 minutes).
- If set to 0, no periodic cleaning will occur.
+ <acronym>BIND</acronym> 9 now manages cache
+ memory in a more sophisticated manner and does not
+ rely on the periodic cleaning any more.
+ Specifying this option therefore has no effect on
+ the server's behavior.
</para>
</listitem>
</varlistentry>
@@ -7144,8 +7147,13 @@ query-source-v6 address * port *;
</entry>
<entry colname="2">
<para>
- Records are returned in a round-robin
- order.
+ Records are returned in a cyclic round-robin order.
+ </para>
+ <para>
+ If <acronym>BIND</acronym> is configured with the
+ "--enable-fixed-rrset" option at compile time, then
+ the initial ordering of the RRset will match the
+ one specified in the zone file.
</para>
</entry>
</row>
@@ -7176,9 +7184,11 @@ query-source-v6 address * port *;
<note>
<simpara>
- The <command>rrset-order</command> statement
- is not yet fully implemented in <acronym>BIND</acronym> 9.
- BIND 9 currently does not fully support "fixed" ordering.
+ In this release of <acronym>BIND</acronym> 9, the
+ <command>rrset-order</command> statement does not support
+ "fixed" ordering by default. Fixed ordering can be enabled
+ at compile time by specifying "--enable-fixed-rrset" on
+ the "configure" command line.
</simpara>
</note>
</sect3>
@@ -7467,9 +7477,10 @@ query-source-v6 address * port *;
<term><command>server-id</command></term>
<listitem>
<para>
- The ID of the server should report via a query of
- the name <filename>ID.SERVER</filename>
- with type <command>TXT</command>, class <command>CHAOS</command>.
+ The ID the server should report when receiving a Name
+ Server Identifier (NSID) query, or a query of the name
+ <filename>ID.SERVER</filename> with type
+ <command>TXT</command>, class <command>CHAOS</command>.
The primary purpose of such queries is to
identify which of a group of anycast servers is actually
answering your queries. Specifying <command>server-id none;</command>
@@ -7605,162 +7616,6 @@ query-source-v6 address * port *;
</varlistentry>
</variablelist>
</sect3>
-
- <sect3 id="statsfile">
- <title>The Statistics File</title>
-
- <para>
- The statistics file generated by <acronym>BIND</acronym> 9
- is similar, but not identical, to that
- generated by <acronym>BIND</acronym> 8.
- </para>
- <para>
- The statistics dump begins with a line, like:
- </para>
- <para>
- <command>+++ Statistics Dump +++ (973798949)</command>
- </para>
- <para>
- The number in parentheses is a standard
- Unix-style timestamp, measured as seconds since January 1, 1970.
- Following
- that line are a series of lines containing a counter type, the
- value of the
- counter, optionally a zone name, and optionally a view name.
- The lines without view and zone listed are global statistics for
- the entire server.
- Lines with a zone and view name for the given view and zone (the
- view name is
- omitted for the default view).
- </para>
- <para>
- The statistics dump ends with the line where the
- number is identical to the number in the beginning line; for example:
- </para>
- <para>
- <command>--- Statistics Dump --- (973798949)</command>
- </para>
- <para>
- The following statistics counters are maintained:
- </para>
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="3.350in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para><command>success</command></para>
- </entry>
- <entry colname="2">
- <para>
- The number of
- successful queries made to the server or zone. A
- successful query
- is defined as query which returns a NOERROR response
- with at least
- one answer RR.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>referral</command></para>
- </entry>
- <entry colname="2">
- <para>
- The number of queries which resulted
- in referral responses.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>nxrrset</command></para>
- </entry>
- <entry colname="2">
- <para>
- The number of queries which resulted in
- NOERROR responses with no data.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>nxdomain</command></para>
- </entry>
- <entry colname="2">
- <para>
- The number
- of queries which resulted in NXDOMAIN responses.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>failure</command></para>
- </entry>
- <entry colname="2">
- <para>
- The number of queries which resulted in a
- failure response other than those above.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>recursion</command></para>
- </entry>
- <entry colname="2">
- <para>
- The number of queries which caused the server
- to perform recursion in order to find the final answer.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>duplicate</command></para>
- </entry>
- <entry colname="2">
- <para>
- The number of queries which the server attempted to
- recurse but discover a existing query with the same
- IP address, port, query id, name, type and class
- already being processed.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>dropped</command></para>
- </entry>
- <entry colname="2">
- <para>
- The number of queries for which the server
- discovered a excessive number of existing
- recursive queries for the same name, type and
- class and were subsequently dropped.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>
- Each query received by the server will cause exactly one of
- <command>success</command>,
- <command>referral</command>,
- <command>nxrrset</command>,
- <command>nxdomain</command>, or
- <command>failure</command>
- to be incremented, and may additionally cause the
- <command>recursion</command> counter to be
- incremented.
- </para>
-
- </sect3>
<sect3 id="acache">
<title>Additional Section Caching</title>
@@ -7879,7 +7734,7 @@ query-source-v6 address * port *;
</sect2>
- <sect2>
+ <sect2 id="statschannels">
<title><command>statistics-channels</command> Statement Grammar</title>
<programlisting><command>statistics-channels</command> {
@@ -10758,7 +10613,7 @@ $GENERATE 1-127 $ CNAME $.0</programlisting>
is equivalent to
</para>
-<programlisting>0.0.0.192.IN-ADDR.ARPA NS SERVER1.EXAMPLE.
+<programlisting>0.0.0.192.IN-ADDR.ARPA. NS SERVER1.EXAMPLE.
0.0.0.192.IN-ADDR.ARPA. NS SERVER2.EXAMPLE.
1.0.0.192.IN-ADDR.ARPA. CNAME 1.0.0.0.192.IN-ADDR.ARPA.
2.0.0.192.IN-ADDR.ARPA. CNAME 2.0.0.0.192.IN-ADDR.ARPA.
@@ -10937,6 +10792,1275 @@ $GENERATE 1-127 $ CNAME $.0</programlisting>
</para>
</sect2>
</sect1>
+
+ <sect1>
+ <title>BIND9 Statistics</title>
+ <para>
+ <acronym>BIND</acronym> 9 maintains lots of statistics
+ information and provides several interfaces for users to
+ get access to the statistics.
+ The available statistics include all statistics counters
+ that were available in <acronym>BIND</acronym> 8 and
+ are meaningful in <acronym>BIND</acronym> 9,
+ and other information that is considered useful.
+ </para>
+
+ <para>
+ The statistics information is categorized into the following
+ sections.
+ </para>
+
+ <informaltable frame="all">
+ <tgroup cols="2">
+ <colspec colname="1" colnum="1" colsep="0" colwidth="3.300in"/>
+ <colspec colname="2" colnum="2" colsep="0" colwidth="2.625in"/>
+ <tbody>
+
+ <row rowsep="0">
+ <entry colname="1">
+ <para>Incoming Requests</para>
+ </entry>
+ <entry colname="2">
+ <para>
+ The number of incoming DNS requests for each OPCODE.
+ </para>
+ </entry>
+ </row>
+
+ <row rowsep="0">
+ <entry colname="1">
+ <para>Incoming Queries</para>
+ </entry>
+ <entry colname="2">
+ <para>
+ The number of incoming queries for each RR type.
+ </para>
+ </entry>
+ </row>
+
+ <row rowsep="0">
+ <entry colname="1">
+ <para>Outgoing Queries</para>
+ </entry>
+ <entry colname="2">
+ <para>
+ The number of outgoing queries for each RR
+ type sent from the internal resolver.
+ Maintained per view.
+ </para>
+ </entry>
+ </row>
+
+ <row rowsep="0">
+ <entry colname="1">
+ <para>Name Server Statistics</para>
+ </entry>
+ <entry colname="2">
+ <para>
+ Statistics counters about incoming request processing.
+ </para>
+ </entry>
+ </row>
+
+ <row rowsep="0">
+ <entry colname="1">
+ <para>Zone Maintenance Statistics</para>
+ </entry>
+ <entry colname="2">
+ <para>
+ Statistics counters regarding zone maintenance
+ operations such as zone transfers.
+ </para>
+ </entry>
+ </row>
+
+ <row rowsep="0">
+ <entry colname="1">
+ <para>Resolver Statistics</para>
+ </entry>
+ <entry colname="2">
+ <para>
+ Statistics counters about name resolution
+ performed in the internal resolver.
+ Maintained per view.
+ </para>
+ </entry>
+ </row>
+
+ <row rowsep="0">
+ <entry colname="1">
+ <para>Cache DB RRsets</para>
+ </entry>
+ <entry colname="2">
+ <para>
+ The number of RRsets per RR type (positive
+ or negative) and nonexistent names stored in the
+ cache database.
+ Maintained per view.
+ </para>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para>
+ A subset of Name Server Statistics is collected and shown
+ per zone for which the server has the authority when
+ <command>zone-statistics</command> is set to
+ <userinput>yes</userinput>.
+ These statistics counters are shown with their zone and view
+ names.
+ In some cases the view names are omitted for the default view.
+ </para>
+
+ <para>
+ There are currently two user interfaces to get access to the
+ statistics.
+ One is in the plain text format dumped to the file specified
+ by the <command>statistics-file</command> configuration option.
+ The other is remotely accessible via a statistics channel
+ when the <command>statistics-channels</command> statement
+ is specified in the configuration file
+ (see <xref linkend="statschannels"/>.)
+ </para>
+
+ <sect3 id="statsfile">
+ <title>The Statistics File</title>
+ <para>
+ The text format statistics dump begins with a line, like:
+ </para>
+ <para>
+ <command>+++ Statistics Dump +++ (973798949)</command>
+ </para>
+ <para>
+ The number in parentheses is a standard
+ Unix-style timestamp, measured as seconds since January 1, 1970.
+
+ Following
+ that line is a set of statistics information, which is categorized
+ as described above.
+ Each section begins with a line, like:
+ </para>
+
+ <para>
+ <command>++ Name Server Statistics ++</command>
+ </para>
+
+ <para>
+ Each section consists of lines, each containing the statistics
+ counter value followed by its textual description.
+ See below for available counters.
+ For brevity, counters that have a value of 0 are not shown
+ in the statistics file.
+ </para>
+
+ <para>
+ The statistics dump ends with the line where the
+ number is identical to the number in the beginning line; for example:
+ </para>
+ <para>
+ <command>--- Statistics Dump --- (973798949)</command>
+ </para>
+ </sect3>
+
+ <sect2>
+ <title>Statistics Counters</title>
+ <para>
+ The following tables summarize statistics counters that
+ <acronym>BIND</acronym> 9 provides.
+ For each row of the tables, the leftmost column is the
+ abbreviated symbol name of that counter.
+ These symbols are shown in the statistics information
+ accessed via an HTTP statistics channel.
+ The rightmost column gives the description of the counter,
+ which is also shown in the statistics file
+ (but, in this document, possibly with slight modification
+ for better readability).
+ Additional notes may also be provided in this column.
+ When a middle column exists between these two columns,
+ it gives the corresponding counter name of the
+ <acronym>BIND</acronym> 8 statistics, if applicable.
+ </para>
+
+ <sect3>
+ <title>Name Server Statistics Counters</title>
+
+ <informaltable colsep="0" rowsep="0">
+ <tgroup cols="3" colsep="0" rowsep="0" tgroupstyle="4Level-table">
+ <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
+ <colspec colname="2" colnum="2" colsep="0" colwidth="1.150in"/>
+ <colspec colname="3" colnum="3" colsep="0" colwidth="3.350in"/>
+ <tbody>
+ <row>
+ <entry colname="1">
+ <para>
+ <emphasis>Symbol</emphasis>
+ </para>
+ </entry>
+ <entry colname="2">
+ <para>
+ <emphasis>BIND8 Symbol</emphasis>
+ </para>
+ </entry>
+ <entry colname="3">
+ <para>
+ <emphasis>Description</emphasis>
+ </para>
+ </entry>
+ </row>
+
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>Requestv4</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RQ</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ IPv4 requests received.
+ Note: this also counts non query requests.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>Requestv6</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RQ</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ IPv6 requests received.
+ Note: this also counts non query requests.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>ReqEdns0</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Requests with EDNS(0) received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>ReqBadEDNSVer</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Requests with unsupported EDNS version received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>ReqTSIG</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Requests with TSIG received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>ReqSIG0</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Requests with SIG(0) received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>ReqBadSIG</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Requests with invalid (TSIG or SIG(0)) signature.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>ReqTCP</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RTCP</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ TCP requests received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>AuthQryRej</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RUQ</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Authoritative (non recursive) queries rejected.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>RecQryRej</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RURQ</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Recursive queries rejected.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>XfrRej</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RUXFR</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Zone transfer requests rejected.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>UpdateRej</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RUUpd</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Dynamic update requests rejected.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>Response</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>SAns</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Responses sent.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>RespTruncated</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Truncated responses sent.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>RespEDNS0</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Responses with EDNS(0) sent.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>RespTSIG</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Responses with TSIG sent.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>RespSIG0</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Responses with SIG(0) sent.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>QrySuccess</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Queries resulted in a successful answer.
+ This means the query which returns a NOERROR response
+ with at least one answer RR.
+ This corresponds to the
+ <command>success</command> counter
+ of previous versions of
+ <acronym>BIND</acronym> 9.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>QryAuthAns</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Queries resulted in authoritative answer.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>QryNoauthAns</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>SNaAns</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Queries resulted in non authoritative answer.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>QryReferral</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Queries resulted in referral answer.
+ This corresponds to the
+ <command>referral</command> counter
+ of previous versions of
+ <acronym>BIND</acronym> 9.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>QryNxrrset</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Queries resulted in NOERROR responses with no data.
+ This corresponds to the
+ <command>nxrrset</command> counter
+ of previous versions of
+ <acronym>BIND</acronym> 9.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>QrySERVFAIL</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>SFail</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Queries resulted in SERVFAIL.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>QryFORMERR</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>SFErr</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Queries resulted in FORMERR.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>QryNXDOMAIN</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>SNXD</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Queries resulted in NXDOMAIN.
+ This corresponds to the
+ <command>nxdomain</command> counter
+ of previous versions of
+ <acronym>BIND</acronym> 9.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>QryRecursion</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RFwdQ</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Queries which caused the server
+ to perform recursion in order to find the final answer.
+ This corresponds to the
+ <command>recursion</command> counter
+ of previous versions of
+ <acronym>BIND</acronym> 9.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>QryDuplicate</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RDupQ</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Queries which the server attempted to
+ recurse but discovered an existing query with the same
+ IP address, port, query ID, name, type and class
+ already being processed.
+ This corresponds to the
+ <command>duplicate</command> counter
+ of previous versions of
+ <acronym>BIND</acronym> 9.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>QryDropped</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Queries for which the server
+ discovered an excessive number of existing
+ recursive queries for the same name, type and
+ class and were subsequently dropped.
+ This corresponds to the
+ <command>dropped</command> counter
+ of previous versions of
+ <acronym>BIND</acronym> 9.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>QryFailure</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Other query failures.
+ This corresponds to the
+ <command>failure</command> counter
+ of previous versions of
+ <acronym>BIND</acronym> 9.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>XfrReqDone</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Requested zone transfers completed.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>UpdateReqFwd</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Update requests forwarded.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>UpdateRespFwd</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Update responses forwarded.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>UpdateFwdFail</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Dynamic update forward failed.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>UpdateDone</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Dynamic updates completed.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>UpdateFail</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Dynamic updates failed.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>UpdateBadPrereq</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Dynamic updates rejected due to prerequisite failure.
+ </para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </sect3>
+
+ <sect3>
+ <title>Zone Maintenance Statistics Counters</title>
+
+ <informaltable colsep="0" rowsep="0">
+ <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="4Level-table">
+ <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
+ <colspec colname="2" colnum="2" colsep="0" colwidth="3.350in"/>
+ <tbody>
+ <row>
+ <entry colname="1">
+ <para>
+ <emphasis>Symbol</emphasis>
+ </para>
+ </entry>
+ <entry colname="2">
+ <para>
+ <emphasis>Description</emphasis>
+ </para>
+ </entry>
+ </row>
+
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>NotifyOutv4</command></para>
+ </entry>
+ <entry colname="2">
+ <para>
+ IPv4 notifies sent.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>NotifyOutv6</command></para>
+ </entry>
+ <entry colname="2">
+ <para>
+ IPv6 notifies sent.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>NotifyInv4</command></para>
+ </entry>
+ <entry colname="2">
+ <para>
+ IPv4 notifies received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>NotifyInv6</command></para>
+ </entry>
+ <entry colname="2">
+ <para>
+ IPv6 notifies received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>NotifyRej</command></para>
+ </entry>
+ <entry colname="2">
+ <para>
+ Incoming notifies rejected.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>SOAOutv4</command></para>
+ </entry>
+ <entry colname="2">
+ <para>
+ IPv4 SOA queries sent.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>SOAOutv6</command></para>
+ </entry>
+ <entry colname="2">
+ <para>
+ IPv6 SOA queries sent.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>AXFRReqv4</command></para>
+ </entry>
+ <entry colname="2">
+ <para>
+ IPv4 AXFR requested.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>AXFRReqv6</command></para>
+ </entry>
+ <entry colname="2">
+ <para>
+ IPv6 AXFR requested.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>IXFRReqv4</command></para>
+ </entry>
+ <entry colname="2">
+ <para>
+ IPv4 IXFR requested.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>IXFRReqv6</command></para>
+ </entry>
+ <entry colname="2">
+ <para>
+ IPv6 IXFR requested.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>XfrSuccess</command></para>
+ </entry>
+ <entry colname="2">
+ <para>
+ Zone transfer requests succeeded.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>XfrFail</command></para>
+ </entry>
+ <entry colname="2">
+ <para>
+ Zone transfer requests failed.
+ </para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </sect3>
+
+ <sect3>
+ <title>Resolver Statistics Counters</title>
+
+ <informaltable colsep="0" rowsep="0">
+ <tgroup cols="3" colsep="0" rowsep="0" tgroupstyle="4Level-table">
+ <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
+ <colspec colname="2" colnum="2" colsep="0" colwidth="1.150in"/>
+ <colspec colname="3" colnum="3" colsep="0" colwidth="3.350in"/>
+ <tbody>
+ <row>
+ <entry colname="1">
+ <para>
+ <emphasis>Symbol</emphasis>
+ </para>
+ </entry>
+ <entry colname="2">
+ <para>
+ <emphasis>BIND8 Symbol</emphasis>
+ </para>
+ </entry>
+ <entry colname="3">
+ <para>
+ <emphasis>Description</emphasis>
+ </para>
+ </entry>
+ </row>
+
+
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>Queryv4</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>SFwdQ</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ IPv4 queries sent.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>Queryv6</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>SFwdQ</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ IPv6 queries sent.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>Responsev4</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RR</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ IPv4 responses received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>Responsev6</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RR</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ IPv6 responses received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>NXDOMAIN</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RNXD</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ NXDOMAIN received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>SERVFAIL</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RFail</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ SERVFAIL received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>FORMERR</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RFErr</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ FORMERR received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>OtherError</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RErr</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Other errors received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>EDNS0Fail</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ EDNS(0) query failures.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>Mismatch</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RDupR</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Mismatch responses received.
+ When shown via an HTTP statistics channel,
+ this counter is shown in the
+ Name Server Statistics section for brevity.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>Truncated</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Truncated responses received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>Lame</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>RLame</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Lame delegations received.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>Retry</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>SDupQ</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Query retries performed.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>GlueFetchv4</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>SSysQ</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ IPv4 NS address fetches invoked.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>GlueFetchv6</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command>SSysQ</command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ IPv6 NS address fetches invoked.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>GlueFetchv4Fail</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ IPv4 NS address fetch failed.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>GlueFetchv6Fail</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ IPv6 NS address fetch failed.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>ValAttempt</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ DNSSEC validation attempted.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>ValOk</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ DNSSEC validation succeeded.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>ValNegOk</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ DNSSEC validation on negative information succeeded.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>ValFail</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ DNSSEC validation failed.
+ </para>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </sect3>
+
+ <sect3>
+ <title>Compatibility with <emphasis>BIND</emphasis> 8 Counters</title>
+ <para>
+ Most statistics counters that were available
+ in <command>BIND</command> 8 are also supported in
+ <command>BIND</command> 9 as shown in the above tables.
+ Here are notes about other counters that do not appear
+ in these tables.
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term><command>RFwdR,SFwdR</command></term>
+ <listitem>
+ <para>
+ These counters are not supported
+ because <command>BIND</command> 9 does not adopt
+ the notion of <emphasis>forwarding</emphasis>
+ as <command>BIND</command> 8 did.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>RAXFR</command></term>
+ <listitem>
+ <para>
+ This counter is accessible in the Incoming Queries section.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>RIQ</command></term>
+ <listitem>
+ <para>
+ This counter is accessible in the Incoming Requests section.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>ROpts</command></term>
+ <listitem>
+ <para>
+ This counter is not supported
+ because <command>BIND</command> 9 does not care
+ about IP options in the first place.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>SErr</command></term>
+ <listitem>
+ <para>
+ This counter could be implemented, but is not yet
+ supported.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect3>
+ </sect2>
+ </sect1>
+
</chapter>
<chapter id="Bv9ARM.ch07">
<title><acronym>BIND</acronym> 9 Security Considerations</title>
diff --git a/doc/arm/Bv9ARM.ch01.html b/doc/arm/Bv9ARM.ch01.html
index a41798b5..cf83c2e8 100644
--- a/doc/arm/Bv9ARM.ch01.html
+++ b/doc/arm/Bv9ARM.ch01.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch01.html,v 1.38.18.1 2008/01/18 01:44:53 marka Exp $ -->
+<!-- $Id: Bv9ARM.ch01.html,v 1.38.18.3 2008/04/09 23:37:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -45,17 +45,17 @@
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564109">Scope of Document</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564133">Organization of This Document</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2563474">Conventions Used in This Document</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564816">The Domain Name System (<acronym class="acronym">DNS</acronym>)</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2563405">Scope of Document</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564385">Organization of This Document</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564524">Conventions Used in This Document</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564637">The Domain Name System (<acronym class="acronym">DNS</acronym>)</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564837">DNS Fundamentals</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564871">Domains and Domain Names</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567208">Zones</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567285">Authoritative Name Servers</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567526">Caching Name Servers</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567588">Name Servers in Multiple Roles</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564659">DNS Fundamentals</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564693">Domains and Domain Names</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564845">Zones</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567243">Authoritative Name Servers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567416">Caching Name Servers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567546">Name Servers in Multiple Roles</a></span></dt>
</dl></dd>
</dl>
</div>
@@ -71,7 +71,7 @@
</p>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2564109"></a>Scope of Document</h2></div></div></div>
+<a name="id2563405"></a>Scope of Document</h2></div></div></div>
<p>
The Berkeley Internet Name Domain
(<acronym class="acronym">BIND</acronym>) implements a
@@ -82,12 +82,12 @@
system administrators.
</p>
<p>
- This version of the manual corresponds to BIND version 9.4.
+ This version of the manual corresponds to BIND version 9.5.
</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2564133"></a>Organization of This Document</h2></div></div></div>
+<a name="id2564385"></a>Organization of This Document</h2></div></div></div>
<p>
In this document, <span class="emphasis"><em>Section 1</em></span> introduces
the basic <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym> concepts. <span class="emphasis"><em>Section 2</em></span>
@@ -116,7 +116,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2563474"></a>Conventions Used in This Document</h2></div></div></div>
+<a name="id2564524"></a>Conventions Used in This Document</h2></div></div></div>
<p>
In this document, we use the following general typographic
conventions:
@@ -243,7 +243,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2564816"></a>The Domain Name System (<acronym class="acronym">DNS</acronym>)</h2></div></div></div>
+<a name="id2564637"></a>The Domain Name System (<acronym class="acronym">DNS</acronym>)</h2></div></div></div>
<p>
The purpose of this document is to explain the installation
and upkeep of the <acronym class="acronym">BIND</acronym> (Berkeley Internet
@@ -253,7 +253,7 @@
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2564837"></a>DNS Fundamentals</h3></div></div></div>
+<a name="id2564659"></a>DNS Fundamentals</h3></div></div></div>
<p>
The Domain Name System (DNS) is a hierarchical, distributed
database. It stores information for mapping Internet host names to
@@ -273,7 +273,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2564871"></a>Domains and Domain Names</h3></div></div></div>
+<a name="id2564693"></a>Domains and Domain Names</h3></div></div></div>
<p>
The data stored in the DNS is identified by <span class="emphasis"><em>domain names</em></span> that are organized as a tree according to
organizational or administrative boundaries. Each node of the tree,
@@ -319,7 +319,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2567208"></a>Zones</h3></div></div></div>
+<a name="id2564845"></a>Zones</h3></div></div></div>
<p>
To properly operate a name server, it is important to understand
the difference between a <span class="emphasis"><em>zone</em></span>
@@ -372,7 +372,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2567285"></a>Authoritative Name Servers</h3></div></div></div>
+<a name="id2567243"></a>Authoritative Name Servers</h3></div></div></div>
<p>
Each zone is served by at least
one <span class="emphasis"><em>authoritative name server</em></span>,
@@ -389,7 +389,7 @@
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2567308"></a>The Primary Master</h4></div></div></div>
+<a name="id2567267"></a>The Primary Master</h4></div></div></div>
<p>
The authoritative server where the master copy of the zone
data is maintained is called the
@@ -409,7 +409,7 @@
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2567338"></a>Slave Servers</h4></div></div></div>
+<a name="id2567297"></a>Slave Servers</h4></div></div></div>
<p>
The other authoritative servers, the <span class="emphasis"><em>slave</em></span>
servers (also known as <span class="emphasis"><em>secondary</em></span> servers)
@@ -425,7 +425,7 @@
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2567360"></a>Stealth Servers</h4></div></div></div>
+<a name="id2567386"></a>Stealth Servers</h4></div></div></div>
<p>
Usually all of the zone's authoritative servers are listed in
NS records in the parent zone. These NS records constitute
@@ -460,7 +460,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2567526"></a>Caching Name Servers</h3></div></div></div>
+<a name="id2567416"></a>Caching Name Servers</h3></div></div></div>
<p>
The resolver libraries provided by most operating systems are
<span class="emphasis"><em>stub resolvers</em></span>, meaning that they are not
@@ -487,7 +487,7 @@
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2567561"></a>Forwarding</h4></div></div></div>
+<a name="id2567520"></a>Forwarding</h4></div></div></div>
<p>
Even a caching name server does not necessarily perform
the complete recursive lookup itself. Instead, it can
@@ -514,7 +514,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2567588"></a>Name Servers in Multiple Roles</h3></div></div></div>
+<a name="id2567546"></a>Name Servers in Multiple Roles</h3></div></div></div>
<p>
The <acronym class="acronym">BIND</acronym> name server can
simultaneously act as
diff --git a/doc/arm/Bv9ARM.ch02.html b/doc/arm/Bv9ARM.ch02.html
index c8a87f31..0905f90d 100644
--- a/doc/arm/Bv9ARM.ch02.html
+++ b/doc/arm/Bv9ARM.ch02.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch02.html,v 1.35.18.1 2008/01/18 01:44:53 marka Exp $ -->
+<!-- $Id: Bv9ARM.ch02.html,v 1.35.18.2 2008/03/15 01:41:35 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -45,16 +45,16 @@
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567622">Hardware requirements</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567649">CPU Requirements</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567661">Memory Requirements</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567688">Name Server Intensive Environment Issues</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567699">Supported Operating Systems</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567580">Hardware requirements</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567607">CPU Requirements</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567620">Memory Requirements</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567851">Name Server Intensive Environment Issues</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567862">Supported Operating Systems</a></span></dt>
</dl>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2567622"></a>Hardware requirements</h2></div></div></div>
+<a name="id2567580"></a>Hardware requirements</h2></div></div></div>
<p>
<acronym class="acronym">DNS</acronym> hardware requirements have
traditionally been quite modest.
@@ -73,7 +73,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2567649"></a>CPU Requirements</h2></div></div></div>
+<a name="id2567607"></a>CPU Requirements</h2></div></div></div>
<p>
CPU requirements for <acronym class="acronym">BIND</acronym> 9 range from
i486-class machines
@@ -84,7 +84,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2567661"></a>Memory Requirements</h2></div></div></div>
+<a name="id2567620"></a>Memory Requirements</h2></div></div></div>
<p>
The memory of the server has to be large enough to fit the
cache and zones loaded off disk. The <span><strong class="command">max-cache-size</strong></span>
@@ -107,7 +107,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2567688"></a>Name Server Intensive Environment Issues</h2></div></div></div>
+<a name="id2567851"></a>Name Server Intensive Environment Issues</h2></div></div></div>
<p>
For name server intensive environments, there are two alternative
configurations that may be used. The first is where clients and
@@ -124,7 +124,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2567699"></a>Supported Operating Systems</h2></div></div></div>
+<a name="id2567862"></a>Supported Operating Systems</h2></div></div></div>
<p>
ISC <acronym class="acronym">BIND</acronym> 9 compiles and runs on a large
number
diff --git a/doc/arm/Bv9ARM.ch03.html b/doc/arm/Bv9ARM.ch03.html
index 74c963b5..699f93d6 100644
--- a/doc/arm/Bv9ARM.ch03.html
+++ b/doc/arm/Bv9ARM.ch03.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch03.html,v 1.67.18.1 2008/01/18 01:44:53 marka Exp $ -->
+<!-- $Id: Bv9ARM.ch03.html,v 1.67.18.2 2008/03/15 01:41:35 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -47,14 +47,14 @@
<dl>
<dt><span class="sect1"><a href="Bv9ARM.ch03.html#sample_configuration">Sample Configurations</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2568004">A Caching-only Name Server</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2568020">An Authoritative-only Name Server</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2567894">A Caching-only Name Server</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2567910">An Authoritative-only Name Server</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568042">Load Balancing</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568465">Name Server Operations</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568001">Load Balancing</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568423">Name Server Operations</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2568470">Tools for Use With the Name Server Daemon</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2570184">Signals</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2568428">Tools for Use With the Name Server Daemon</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2570142">Signals</a></span></dt>
</dl></dd>
</dl>
</div>
@@ -68,7 +68,7 @@
<a name="sample_configuration"></a>Sample Configurations</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2568004"></a>A Caching-only Name Server</h3></div></div></div>
+<a name="id2567894"></a>A Caching-only Name Server</h3></div></div></div>
<p>
The following sample configuration is appropriate for a caching-only
name server for use by clients internal to a corporation. All
@@ -95,7 +95,7 @@ zone "0.0.127.in-addr.arpa" {
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2568020"></a>An Authoritative-only Name Server</h3></div></div></div>
+<a name="id2567910"></a>An Authoritative-only Name Server</h3></div></div></div>
<p>
This sample configuration is for an authoritative-only server
that is the master server for "<code class="filename">example.com</code>"
@@ -137,7 +137,7 @@ zone "eng.example.com" {
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2568042"></a>Load Balancing</h2></div></div></div>
+<a name="id2568001"></a>Load Balancing</h2></div></div></div>
<p>
A primitive form of load balancing can be achieved in
the <acronym class="acronym">DNS</acronym> by using multiple records
@@ -280,10 +280,10 @@ zone "eng.example.com" {
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2568465"></a>Name Server Operations</h2></div></div></div>
+<a name="id2568423"></a>Name Server Operations</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2568470"></a>Tools for Use With the Name Server Daemon</h3></div></div></div>
+<a name="id2568428"></a>Tools for Use With the Name Server Daemon</h3></div></div></div>
<p>
This section describes several indispensable diagnostic,
administrative and monitoring tools available to the system
@@ -739,7 +739,7 @@ controls {
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2570184"></a>Signals</h3></div></div></div>
+<a name="id2570142"></a>Signals</h3></div></div></div>
<p>
Certain UNIX signals cause the name server to take specific
actions, as described in the following table. These signals can
diff --git a/doc/arm/Bv9ARM.ch04.html b/doc/arm/Bv9ARM.ch04.html
index 73c4c43e..a5d213ba 100644
--- a/doc/arm/Bv9ARM.ch04.html
+++ b/doc/arm/Bv9ARM.ch04.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch04.html,v 1.81.18.1 2008/01/18 01:44:53 marka Exp $ -->
+<!-- $Id: Bv9ARM.ch04.html,v 1.81.18.2 2008/03/15 01:41:35 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -49,29 +49,29 @@
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#dynamic_update">Dynamic Update</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch04.html#journal">The journal file</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#incremental_zone_transfers">Incremental Zone Transfers (IXFR)</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2570658">Split DNS</a></span></dt>
-<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2570676">Example split DNS setup</a></span></dt></dl></dd>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2570616">Split DNS</a></span></dt>
+<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2570634">Example split DNS setup</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#tsig">TSIG</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571111">Generate Shared Keys for Each Pair of Hosts</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571185">Copying the Shared Secret to Both Machines</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571195">Informing the Servers of the Key's Existence</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571235">Instructing the Server to Use the Key</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571429">TSIG Key Based Access Control</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571474">Errors</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571069">Generate Shared Keys for Each Pair of Hosts</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571143">Copying the Shared Secret to Both Machines</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571154">Informing the Servers of the Key's Existence</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571193">Instructing the Server to Use the Key</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571319">TSIG Key Based Access Control</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571432">Errors</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571488">TKEY</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571673">SIG(0)</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571446">TKEY</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571563">SIG(0)</a></span></dt>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#DNSSEC">DNSSEC</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571741">Generating Keys</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571811">Signing the Zone</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571890">Configuring Servers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571700">Generating Keys</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571769">Signing the Zone</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571848">Configuring Servers</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2572033">IPv6 Support in <acronym class="acronym">BIND</acronym> 9</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571923">IPv6 Support in <acronym class="acronym">BIND</acronym> 9</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572231">Address Lookups Using AAAA Records</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572252">Address to Name Lookups Using Nibble Format</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572189">Address Lookups Using AAAA Records</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572211">Address to Name Lookups Using Nibble Format</a></span></dt>
</dl></dd>
</dl>
</div>
@@ -210,7 +210,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2570658"></a>Split DNS</h2></div></div></div>
+<a name="id2570616"></a>Split DNS</h2></div></div></div>
<p>
Setting up different views, or visibility, of the DNS space to
internal and external resolvers is usually referred to as a
@@ -240,7 +240,7 @@
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2570676"></a>Example split DNS setup</h3></div></div></div>
+<a name="id2570634"></a>Example split DNS setup</h3></div></div></div>
<p>
Let's say a company named <span class="emphasis"><em>Example, Inc.</em></span>
(<code class="literal">example.com</code>)
@@ -486,7 +486,7 @@ nameserver 172.16.72.4
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571111"></a>Generate Shared Keys for Each Pair of Hosts</h3></div></div></div>
+<a name="id2571069"></a>Generate Shared Keys for Each Pair of Hosts</h3></div></div></div>
<p>
A shared secret is generated to be shared between <span class="emphasis"><em>host1</em></span> and <span class="emphasis"><em>host2</em></span>.
An arbitrary key name is chosen: "host1-host2.". The key name must
@@ -494,7 +494,7 @@ nameserver 172.16.72.4
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2571128"></a>Automatic Generation</h4></div></div></div>
+<a name="id2571086"></a>Automatic Generation</h4></div></div></div>
<p>
The following command will generate a 128-bit (16 byte) HMAC-MD5
key as described above. Longer keys are better, but shorter keys
@@ -519,7 +519,7 @@ nameserver 172.16.72.4
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2571166"></a>Manual Generation</h4></div></div></div>
+<a name="id2571125"></a>Manual Generation</h4></div></div></div>
<p>
The shared secret is simply a random sequence of bits, encoded
in base-64. Most ASCII strings are valid base-64 strings (assuming
@@ -534,7 +534,7 @@ nameserver 172.16.72.4
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571185"></a>Copying the Shared Secret to Both Machines</h3></div></div></div>
+<a name="id2571143"></a>Copying the Shared Secret to Both Machines</h3></div></div></div>
<p>
This is beyond the scope of DNS. A secure transport mechanism
should be used. This could be secure FTP, ssh, telephone, etc.
@@ -542,7 +542,7 @@ nameserver 172.16.72.4
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571195"></a>Informing the Servers of the Key's Existence</h3></div></div></div>
+<a name="id2571154"></a>Informing the Servers of the Key's Existence</h3></div></div></div>
<p>
Imagine <span class="emphasis"><em>host1</em></span> and <span class="emphasis"><em>host 2</em></span>
are
@@ -571,7 +571,7 @@ key host1-host2. {
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571235"></a>Instructing the Server to Use the Key</h3></div></div></div>
+<a name="id2571193"></a>Instructing the Server to Use the Key</h3></div></div></div>
<p>
Since keys are shared between two hosts only, the server must
be told when keys are to be used. The following is added to the <code class="filename">named.conf</code> file
@@ -603,7 +603,7 @@ server 10.1.2.3 {
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571429"></a>TSIG Key Based Access Control</h3></div></div></div>
+<a name="id2571319"></a>TSIG Key Based Access Control</h3></div></div></div>
<p>
<acronym class="acronym">BIND</acronym> allows IP addresses and ranges
to be specified in ACL
@@ -631,7 +631,7 @@ allow-update { key host1-host2. ;};
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571474"></a>Errors</h3></div></div></div>
+<a name="id2571432"></a>Errors</h3></div></div></div>
<p>
The processing of TSIG signed messages can result in
several errors. If a signed message is sent to a non-TSIG aware
@@ -657,7 +657,7 @@ allow-update { key host1-host2. ;};
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2571488"></a>TKEY</h2></div></div></div>
+<a name="id2571446"></a>TKEY</h2></div></div></div>
<p><span><strong class="command">TKEY</strong></span>
is a mechanism for automatically generating a shared secret
between two hosts. There are several "modes" of
@@ -693,7 +693,7 @@ allow-update { key host1-host2. ;};
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2571673"></a>SIG(0)</h2></div></div></div>
+<a name="id2571563"></a>SIG(0)</h2></div></div></div>
<p>
<acronym class="acronym">BIND</acronym> 9 partially supports DNSSEC SIG(0)
transaction signatures as specified in RFC 2535 and RFC2931.
@@ -754,7 +754,7 @@ allow-update { key host1-host2. ;};
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571741"></a>Generating Keys</h3></div></div></div>
+<a name="id2571700"></a>Generating Keys</h3></div></div></div>
<p>
The <span><strong class="command">dnssec-keygen</strong></span> program is used to
generate keys.
@@ -805,7 +805,7 @@ allow-update { key host1-host2. ;};
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571811"></a>Signing the Zone</h3></div></div></div>
+<a name="id2571769"></a>Signing the Zone</h3></div></div></div>
<p>
The <span><strong class="command">dnssec-signzone</strong></span> program is used
to
@@ -849,7 +849,7 @@ allow-update { key host1-host2. ;};
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571890"></a>Configuring Servers</h3></div></div></div>
+<a name="id2571848"></a>Configuring Servers</h3></div></div></div>
<p>
To enable <span><strong class="command">named</strong></span> to respond appropriately
to DNS requests from DNSSEC aware clients,
@@ -937,7 +937,7 @@ options {
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2572033"></a>IPv6 Support in <acronym class="acronym">BIND</acronym> 9</h2></div></div></div>
+<a name="id2571923"></a>IPv6 Support in <acronym class="acronym">BIND</acronym> 9</h2></div></div></div>
<p>
<acronym class="acronym">BIND</acronym> 9 fully supports all currently
defined forms of IPv6
@@ -976,7 +976,7 @@ options {
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2572231"></a>Address Lookups Using AAAA Records</h3></div></div></div>
+<a name="id2572189"></a>Address Lookups Using AAAA Records</h3></div></div></div>
<p>
The IPv6 AAAA record is a parallel to the IPv4 A record,
and, unlike the deprecated A6 record, specifies the entire
@@ -995,7 +995,7 @@ host 3600 IN AAAA 2001:db8::1
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2572252"></a>Address to Name Lookups Using Nibble Format</h3></div></div></div>
+<a name="id2572211"></a>Address to Name Lookups Using Nibble Format</h3></div></div></div>
<p>
When looking up an address in nibble format, the address
components are simply reversed, just as in IPv4, and
diff --git a/doc/arm/Bv9ARM.ch05.html b/doc/arm/Bv9ARM.ch05.html
index 49890d3c..42a64ec0 100644
--- a/doc/arm/Bv9ARM.ch05.html
+++ b/doc/arm/Bv9ARM.ch05.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch05.html,v 1.66.18.1 2008/01/18 01:44:53 marka Exp $ -->
+<!-- $Id: Bv9ARM.ch05.html,v 1.66.18.2 2008/03/15 01:41:35 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -45,13 +45,13 @@
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch05.html#id2572285">The Lightweight Resolver Library</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch05.html#id2572244">The Lightweight Resolver Library</a></span></dt>
<dt><span class="sect1"><a href="Bv9ARM.ch05.html#lwresd">Running a Resolver Daemon</a></span></dt>
</dl>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2572285"></a>The Lightweight Resolver Library</h2></div></div></div>
+<a name="id2572244"></a>The Lightweight Resolver Library</h2></div></div></div>
<p>
Traditionally applications have been linked with a stub resolver
library that sends recursive DNS queries to a local caching name
diff --git a/doc/arm/Bv9ARM.ch06.html b/doc/arm/Bv9ARM.ch06.html
index ca3e742e..a7f0d1ee 100644
--- a/doc/arm/Bv9ARM.ch06.html
+++ b/doc/arm/Bv9ARM.ch06.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch06.html,v 1.168.18.4 2008/01/18 09:37:04 marka Exp $ -->
+<!-- $Id: Bv9ARM.ch06.html,v 1.168.18.10 2008/05/06 01:41:46 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -48,57 +48,59 @@
<dt><span class="sect1"><a href="Bv9ARM.ch06.html#configuration_file_elements">Configuration File Elements</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#address_match_lists">Address Match Lists</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2573587">Comment Syntax</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2573477">Comment Syntax</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch06.html#Configuration_File_Grammar">Configuration File Grammar</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574157"><span><strong class="command">acl</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574116"><span><strong class="command">acl</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#acl"><span><strong class="command">acl</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574347"><span><strong class="command">controls</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574306"><span><strong class="command">controls</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#controls_statement_definition_and_usage"><span><strong class="command">controls</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574776"><span><strong class="command">include</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574793"><span><strong class="command">include</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574734"><span><strong class="command">include</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574752"><span><strong class="command">include</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574817"><span><strong class="command">key</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574840"><span><strong class="command">key</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574999"><span><strong class="command">logging</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575193"><span><strong class="command">logging</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574775"><span><strong class="command">key</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574798"><span><strong class="command">key</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575026"><span><strong class="command">logging</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575152"><span><strong class="command">logging</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576505"><span><strong class="command">lwres</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576579"><span><strong class="command">lwres</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576643"><span><strong class="command">masters</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576686"><span><strong class="command">masters</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576464"><span><strong class="command">lwres</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576537"><span><strong class="command">lwres</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576601"><span><strong class="command">masters</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576645"><span><strong class="command">masters</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576701"><span><strong class="command">options</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576660"><span><strong class="command">options</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#options"><span><strong class="command">options</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585163"><span><strong class="command">statistics-channels</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585181"><span><strong class="command">statistics-channels</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#statschannels"><span><strong class="command">statistics-channels</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2584781"><span><strong class="command">statistics-channels</strong></span> Statement Definition and
Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#server_statement_grammar"><span><strong class="command">server</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#server_statement_definition_and_usage"><span><strong class="command">server</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585865"><span><strong class="command">trusted-keys</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585916"><span><strong class="command">trusted-keys</strong></span> Statement Definition
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585533"><span><strong class="command">trusted-keys</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585585"><span><strong class="command">trusted-keys</strong></span> Statement Definition
and Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#view_statement_grammar"><span><strong class="command">view</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585998"><span><strong class="command">view</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585667"><span><strong class="command">view</strong></span> Statement Definition and Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#zone_statement_grammar"><span><strong class="command">zone</strong></span>
Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2587559"><span><strong class="command">zone</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2587159"><span><strong class="command">zone</strong></span> Statement Definition and Usage</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2589906">Zone File</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2589437">Zone File</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#types_of_resource_records_and_when_to_use_them">Types of Resource Records and When to Use Them</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2591927">Discussion of MX Records</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2591459">Discussion of MX Records</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#Setting_TTLs">Setting TTLs</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2592547">Inverse Mapping in IPv4</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2592674">Other Zone File Directives</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2592862"><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2592147">Inverse Mapping in IPv4</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2592342">Other Zone File Directives</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2592599"><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#zonefile_format">Additional File Formats</a></span></dt>
</dl></dd>
+<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2593067">BIND9 Statistics</a></span></dt>
+<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2593348">Statistics Counters</a></span></dt></dl></dd>
</dl>
</div>
<p>
@@ -432,7 +434,7 @@
<a name="address_match_lists"></a>Address Match Lists</h3></div></div></div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2573365"></a>Syntax</h4></div></div></div>
+<a name="id2573323"></a>Syntax</h4></div></div></div>
<pre class="programlisting"><code class="varname">address_match_list</code> = address_match_list_element ;
[<span class="optional"> address_match_list_element; ... </span>]
<code class="varname">address_match_list_element</code> = [<span class="optional"> ! </span>] (ip_address [<span class="optional">/length</span>] |
@@ -441,7 +443,7 @@
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2573393"></a>Definition and Usage</h4></div></div></div>
+<a name="id2573351"></a>Definition and Usage</h4></div></div></div>
<p>
Address match lists are primarily used to determine access
control for various server operations. They are also used in
@@ -525,7 +527,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2573587"></a>Comment Syntax</h3></div></div></div>
+<a name="id2573477"></a>Comment Syntax</h3></div></div></div>
<p>
The <acronym class="acronym">BIND</acronym> 9 comment syntax allows for
comments to appear
@@ -535,7 +537,7 @@
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2573602"></a>Syntax</h4></div></div></div>
+<a name="id2573492"></a>Syntax</h4></div></div></div>
<p>
</p>
<pre class="programlisting">/* This is a <acronym class="acronym">BIND</acronym> comment as in C */</pre>
@@ -550,7 +552,7 @@
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2573632"></a>Definition and Usage</h4></div></div></div>
+<a name="id2573590"></a>Definition and Usage</h4></div></div></div>
<p>
Comments may appear anywhere that whitespace may appear in
a <acronym class="acronym">BIND</acronym> configuration file.
@@ -795,7 +797,7 @@
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2574157"></a><span><strong class="command">acl</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2574116"></a><span><strong class="command">acl</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting"><span><strong class="command">acl</strong></span> acl-name {
address_match_list
};
@@ -877,7 +879,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2574347"></a><span><strong class="command">controls</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2574306"></a><span><strong class="command">controls</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting"><span><strong class="command">controls</strong></span> {
[ inet ( ip_addr | * ) [ port ip_port ] allow { <em class="replaceable"><code> address_match_list </code></em> }
keys { <em class="replaceable"><code>key_list</code></em> }; ]
@@ -999,12 +1001,12 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2574776"></a><span><strong class="command">include</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2574734"></a><span><strong class="command">include</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting"><span><strong class="command">include</strong></span> <em class="replaceable"><code>filename</code></em>;</pre>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2574793"></a><span><strong class="command">include</strong></span> Statement Definition and
+<a name="id2574752"></a><span><strong class="command">include</strong></span> Statement Definition and
Usage</h3></div></div></div>
<p>
The <span><strong class="command">include</strong></span> statement inserts the
@@ -1019,7 +1021,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2574817"></a><span><strong class="command">key</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2574775"></a><span><strong class="command">key</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting"><span><strong class="command">key</strong></span> <em class="replaceable"><code>key_id</code></em> {
algorithm <em class="replaceable"><code>string</code></em>;
secret <em class="replaceable"><code>string</code></em>;
@@ -1028,7 +1030,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2574840"></a><span><strong class="command">key</strong></span> Statement Definition and Usage</h3></div></div></div>
+<a name="id2574798"></a><span><strong class="command">key</strong></span> Statement Definition and Usage</h3></div></div></div>
<p>
The <span><strong class="command">key</strong></span> statement defines a shared
secret key for use with TSIG (see <a href="Bv9ARM.ch04.html#tsig" title="TSIG">the section called &#8220;TSIG&#8221;</a>)
@@ -1075,7 +1077,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2574999"></a><span><strong class="command">logging</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2575026"></a><span><strong class="command">logging</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting"><span><strong class="command">logging</strong></span> {
[ <span><strong class="command">channel</strong></span> <em class="replaceable"><code>channel_name</code></em> {
( <span><strong class="command">file</strong></span> <em class="replaceable"><code>path name</code></em>
@@ -1099,7 +1101,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2575193"></a><span><strong class="command">logging</strong></span> Statement Definition and
+<a name="id2575152"></a><span><strong class="command">logging</strong></span> Statement Definition and
Usage</h3></div></div></div>
<p>
The <span><strong class="command">logging</strong></span> statement configures a
@@ -1133,7 +1135,7 @@
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2575245"></a>The <span><strong class="command">channel</strong></span> Phrase</h4></div></div></div>
+<a name="id2575204"></a>The <span><strong class="command">channel</strong></span> Phrase</h4></div></div></div>
<p>
All log output goes to one or more <span class="emphasis"><em>channels</em></span>;
you can make as many of them as you want.
@@ -1689,7 +1691,7 @@ category notify { null; };
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2576505"></a><span><strong class="command">lwres</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2576464"></a><span><strong class="command">lwres</strong></span> Statement Grammar</h3></div></div></div>
<p>
This is the grammar of the <span><strong class="command">lwres</strong></span>
statement in the <code class="filename">named.conf</code> file:
@@ -1704,7 +1706,7 @@ category notify { null; };
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2576579"></a><span><strong class="command">lwres</strong></span> Statement Definition and Usage</h3></div></div></div>
+<a name="id2576537"></a><span><strong class="command">lwres</strong></span> Statement Definition and Usage</h3></div></div></div>
<p>
The <span><strong class="command">lwres</strong></span> statement configures the
name
@@ -1755,14 +1757,14 @@ category notify { null; };
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2576643"></a><span><strong class="command">masters</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2576601"></a><span><strong class="command">masters</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting">
<span><strong class="command">masters</strong></span> <em class="replaceable"><code>name</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] { ( <em class="replaceable"><code>masters_list</code></em> | <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">key <em class="replaceable"><code>key</code></em></span>] ) ; [<span class="optional">...</span>] };
</pre>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2576686"></a><span><strong class="command">masters</strong></span> Statement Definition and
+<a name="id2576645"></a><span><strong class="command">masters</strong></span> Statement Definition and
Usage</h3></div></div></div>
<p><span><strong class="command">masters</strong></span>
lists allow for a common set of masters to be easily used by
@@ -1771,7 +1773,7 @@ category notify { null; };
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2576701"></a><span><strong class="command">options</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2576660"></a><span><strong class="command">options</strong></span> Statement Grammar</h3></div></div></div>
<p>
This is the grammar of the <span><strong class="command">options</strong></span>
statement in the <code class="filename">named.conf</code> file:
@@ -2886,7 +2888,7 @@ options {
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2580914"></a>Forwarding</h4></div></div></div>
+<a name="id2580872"></a>Forwarding</h4></div></div></div>
<p>
The forwarding facility can be used to create a large site-wide
cache on a few servers, reducing traffic over links to external
@@ -2930,7 +2932,7 @@ options {
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2580972"></a>Dual-stack Servers</h4></div></div></div>
+<a name="id2580931"></a>Dual-stack Servers</h4></div></div></div>
<p>
Dual-stack servers are used as servers of last resort to work
around
@@ -3126,7 +3128,7 @@ options {
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2581537"></a>Interfaces</h4></div></div></div>
+<a name="id2581495"></a>Interfaces</h4></div></div></div>
<p>
The interfaces and ports that the server will answer queries
from may be specified using the <span><strong class="command">listen-on</strong></span> option. <span><strong class="command">listen-on</strong></span> takes
@@ -3510,7 +3512,7 @@ query-source-v6 address * port *;
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2582571"></a>Bad UDP Port Lists</h4></div></div></div>
+<a name="id2582530"></a>Bad UDP Port Lists</h4></div></div></div>
<p><span><strong class="command">avoid-v4-udp-ports</strong></span>
and <span><strong class="command">avoid-v6-udp-ports</strong></span> specify a list
of IPv4 and IPv6 UDP ports that will not be used as system
@@ -3524,7 +3526,7 @@ query-source-v6 address * port *;
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2582586"></a>Operating System Resource Limits</h4></div></div></div>
+<a name="id2582545"></a>Operating System Resource Limits</h4></div></div></div>
<p>
The server's usage of many system resources can be limited.
Scaled values are allowed when specifying resource limits. For
@@ -3583,7 +3585,7 @@ query-source-v6 address * port *;
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2582770"></a>Server Resource Limits</h4></div></div></div>
+<a name="id2582660"></a>Server Resource Limits</h4></div></div></div>
<p>
The following options set limits on the server's
resource consumption that are enforced internally by the
@@ -3659,15 +3661,18 @@ query-source-v6 address * port *;
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2582903"></a>Periodic Task Intervals</h4></div></div></div>
+<a name="id2582861"></a>Periodic Task Intervals</h4></div></div></div>
<div class="variablelist"><dl>
<dt><span class="term"><span><strong class="command">cleaning-interval</strong></span></span></dt>
<dd><p>
- The server will remove expired resource records
+ This interval is effectively obsolete. Previously,
+ the server would remove expired resource records
from the cache every <span><strong class="command">cleaning-interval</strong></span> minutes.
- The default is 60 minutes. The maximum value is 28 days
- (40320 minutes).
- If set to 0, no periodic cleaning will occur.
+ <acronym class="acronym">BIND</acronym> 9 now manages cache
+ memory in a more sophisticated manner and does not
+ rely on the periodic cleaning any more.
+ Specifying this option therefore has no effect on
+ the server's behavior.
</p></dd>
<dt><span class="term"><span><strong class="command">heartbeat-interval</strong></span></span></dt>
<dd><p>
@@ -3924,8 +3929,13 @@ query-source-v6 address * port *;
</td>
<td>
<p>
- Records are returned in a round-robin
- order.
+ Records are returned in a cyclic round-robin order.
+ </p>
+ <p>
+ If <acronym class="acronym">BIND</acronym> is configured with the
+ "--enable-fixed-rrset" option at compile time, then
+ the initial ordering of the RRset will match the
+ one specified in the zone file.
</p>
</td>
</tr>
@@ -3953,9 +3963,11 @@ query-source-v6 address * port *;
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
- The <span><strong class="command">rrset-order</strong></span> statement
- is not yet fully implemented in <acronym class="acronym">BIND</acronym> 9.
- BIND 9 currently does not fully support "fixed" ordering.
+ In this release of <acronym class="acronym">BIND</acronym> 9, the
+ <span><strong class="command">rrset-order</strong></span> statement does not support
+ "fixed" ordering by default. Fixed ordering can be enabled
+ at compile time by specifying "--enable-fixed-rrset" on
+ the "configure" command line.
</p>
</div>
</div>
@@ -4178,9 +4190,10 @@ query-source-v6 address * port *;
</p></dd>
<dt><span class="term"><span><strong class="command">server-id</strong></span></span></dt>
<dd><p>
- The ID of the server should report via a query of
- the name <code class="filename">ID.SERVER</code>
- with type <span><strong class="command">TXT</strong></span>, class <span><strong class="command">CHAOS</strong></span>.
+ The ID the server should report when receiving a Name
+ Server Identifier (NSID) query, or a query of the name
+ <code class="filename">ID.SERVER</code> with type
+ <span><strong class="command">TXT</strong></span>, class <span><strong class="command">CHAOS</strong></span>.
The primary purpose of such queries is to
identify which of a group of anycast servers is actually
answering your queries. Specifying <span><strong class="command">server-id none;</strong></span>
@@ -4300,159 +4313,6 @@ query-source-v6 address * port *;
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="statsfile"></a>The Statistics File</h4></div></div></div>
-<p>
- The statistics file generated by <acronym class="acronym">BIND</acronym> 9
- is similar, but not identical, to that
- generated by <acronym class="acronym">BIND</acronym> 8.
- </p>
-<p>
- The statistics dump begins with a line, like:
- </p>
-<p>
- <span><strong class="command">+++ Statistics Dump +++ (973798949)</strong></span>
- </p>
-<p>
- The number in parentheses is a standard
- Unix-style timestamp, measured as seconds since January 1, 1970.
- Following
- that line are a series of lines containing a counter type, the
- value of the
- counter, optionally a zone name, and optionally a view name.
- The lines without view and zone listed are global statistics for
- the entire server.
- Lines with a zone and view name for the given view and zone (the
- view name is
- omitted for the default view).
- </p>
-<p>
- The statistics dump ends with the line where the
- number is identical to the number in the beginning line; for example:
- </p>
-<p>
- <span><strong class="command">--- Statistics Dump --- (973798949)</strong></span>
- </p>
-<p>
- The following statistics counters are maintained:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col>
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p><span><strong class="command">success</strong></span></p>
- </td>
-<td>
- <p>
- The number of
- successful queries made to the server or zone. A
- successful query
- is defined as query which returns a NOERROR response
- with at least
- one answer RR.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span><strong class="command">referral</strong></span></p>
- </td>
-<td>
- <p>
- The number of queries which resulted
- in referral responses.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span><strong class="command">nxrrset</strong></span></p>
- </td>
-<td>
- <p>
- The number of queries which resulted in
- NOERROR responses with no data.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span><strong class="command">nxdomain</strong></span></p>
- </td>
-<td>
- <p>
- The number
- of queries which resulted in NXDOMAIN responses.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span><strong class="command">failure</strong></span></p>
- </td>
-<td>
- <p>
- The number of queries which resulted in a
- failure response other than those above.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span><strong class="command">recursion</strong></span></p>
- </td>
-<td>
- <p>
- The number of queries which caused the server
- to perform recursion in order to find the final answer.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span><strong class="command">duplicate</strong></span></p>
- </td>
-<td>
- <p>
- The number of queries which the server attempted to
- recurse but discover a existing query with the same
- IP address, port, query id, name, type and class
- already being processed.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span><strong class="command">dropped</strong></span></p>
- </td>
-<td>
- <p>
- The number of queries for which the server
- discovered a excessive number of existing
- recursive queries for the same name, type and
- class and were subsequently dropped.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- Each query received by the server will cause exactly one of
- <span><strong class="command">success</strong></span>,
- <span><strong class="command">referral</strong></span>,
- <span><strong class="command">nxrrset</strong></span>,
- <span><strong class="command">nxdomain</strong></span>, or
- <span><strong class="command">failure</strong></span>
- to be incremented, and may additionally cause the
- <span><strong class="command">recursion</strong></span> counter to be
- incremented.
- </p>
-</div>
-<div class="sect3" lang="en">
-<div class="titlepage"><div><div><h4 class="title">
<a name="acache"></a>Additional Section Caching</h4></div></div></div>
<p>
The additional section cache, also called <span><strong class="command">acache</strong></span>,
@@ -4545,7 +4405,7 @@ query-source-v6 address * port *;
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2585163"></a><span><strong class="command">statistics-channels</strong></span> Statement Grammar</h3></div></div></div>
+<a name="statschannels"></a><span><strong class="command">statistics-channels</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting"><span><strong class="command">statistics-channels</strong></span> {
[ inet ( ip_addr | * ) [ port ip_port ] [allow { <em class="replaceable"><code> address_match_list </code></em> } ]; ]
[ inet ...; ]
@@ -4554,7 +4414,7 @@ query-source-v6 address * port *;
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2585181"></a><span><strong class="command">statistics-channels</strong></span> Statement Definition and
+<a name="id2584781"></a><span><strong class="command">statistics-channels</strong></span> Statement Definition and
Usage</h3></div></div></div>
<p>
The <span><strong class="command">statistics-channels</strong></span> statement
@@ -4799,7 +4659,7 @@ query-source-v6 address * port *;
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2585865"></a><span><strong class="command">trusted-keys</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2585533"></a><span><strong class="command">trusted-keys</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting"><span><strong class="command">trusted-keys</strong></span> {
<em class="replaceable"><code>string</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>string</code></em> ;
[<span class="optional"> <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>string</code></em> ; [<span class="optional">...</span>]</span>]
@@ -4808,7 +4668,7 @@ query-source-v6 address * port *;
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2585916"></a><span><strong class="command">trusted-keys</strong></span> Statement Definition
+<a name="id2585585"></a><span><strong class="command">trusted-keys</strong></span> Statement Definition
and Usage</h3></div></div></div>
<p>
The <span><strong class="command">trusted-keys</strong></span> statement defines
@@ -4851,7 +4711,7 @@ query-source-v6 address * port *;
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2585998"></a><span><strong class="command">view</strong></span> Statement Definition and Usage</h3></div></div></div>
+<a name="id2585667"></a><span><strong class="command">view</strong></span> Statement Definition and Usage</h3></div></div></div>
<p>
The <span><strong class="command">view</strong></span> statement is a powerful
feature
@@ -5110,10 +4970,10 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2587559"></a><span><strong class="command">zone</strong></span> Statement Definition and Usage</h3></div></div></div>
+<a name="id2587159"></a><span><strong class="command">zone</strong></span> Statement Definition and Usage</h3></div></div></div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2587566"></a>Zone Types</h4></div></div></div>
+<a name="id2587166"></a>Zone Types</h4></div></div></div>
<div class="informaltable"><table border="1">
<colgroup>
<col>
@@ -5322,7 +5182,7 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2588054"></a>Class</h4></div></div></div>
+<a name="id2587722"></a>Class</h4></div></div></div>
<p>
The zone's name may optionally be followed by a class. If
a class is not specified, class <code class="literal">IN</code> (for <code class="varname">Internet</code>),
@@ -5344,7 +5204,7 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2588087"></a>Zone Options</h4></div></div></div>
+<a name="id2587755"></a>Zone Options</h4></div></div></div>
<div class="variablelist"><dl>
<dt><span class="term"><span><strong class="command">allow-notify</strong></span></span></dt>
<dd><p>
@@ -5845,7 +5705,7 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2589906"></a>Zone File</h2></div></div></div>
+<a name="id2589437"></a>Zone File</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="types_of_resource_records_and_when_to_use_them"></a>Types of Resource Records and When to Use Them</h3></div></div></div>
@@ -5858,7 +5718,7 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2589924"></a>Resource Records</h4></div></div></div>
+<a name="id2589456"></a>Resource Records</h4></div></div></div>
<p>
A domain name identifies a node. Each node has a set of
resource information, which may be empty. The set of resource
@@ -6509,7 +6369,7 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2591270"></a>Textual expression of RRs</h4></div></div></div>
+<a name="id2590870"></a>Textual expression of RRs</h4></div></div></div>
<p>
RRs are represented in binary form in the packets of the DNS
protocol, and are usually represented in highly encoded form
@@ -6712,7 +6572,7 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2591927"></a>Discussion of MX Records</h3></div></div></div>
+<a name="id2591459"></a>Discussion of MX Records</h3></div></div></div>
<p>
As described above, domain servers store information as a
series of resource records, each of which contains a particular
@@ -6970,7 +6830,7 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2592547"></a>Inverse Mapping in IPv4</h3></div></div></div>
+<a name="id2592147"></a>Inverse Mapping in IPv4</h3></div></div></div>
<p>
Reverse name resolution (that is, translation from IP address
to name) is achieved by means of the <span class="emphasis"><em>in-addr.arpa</em></span> domain
@@ -7031,7 +6891,7 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2592674"></a>Other Zone File Directives</h3></div></div></div>
+<a name="id2592342"></a>Other Zone File Directives</h3></div></div></div>
<p>
The Master File Format was initially defined in RFC 1035 and
has subsequently been extended. While the Master File Format
@@ -7046,7 +6906,7 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2592696"></a>The <span><strong class="command">$ORIGIN</strong></span> Directive</h4></div></div></div>
+<a name="id2592433"></a>The <span><strong class="command">$ORIGIN</strong></span> Directive</h4></div></div></div>
<p>
Syntax: <span><strong class="command">$ORIGIN</strong></span>
<em class="replaceable"><code>domain-name</code></em>
@@ -7074,7 +6934,7 @@ WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2592757"></a>The <span><strong class="command">$INCLUDE</strong></span> Directive</h4></div></div></div>
+<a name="id2592493"></a>The <span><strong class="command">$INCLUDE</strong></span> Directive</h4></div></div></div>
<p>
Syntax: <span><strong class="command">$INCLUDE</strong></span>
<em class="replaceable"><code>filename</code></em>
@@ -7110,7 +6970,7 @@ WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2592826"></a>The <span><strong class="command">$TTL</strong></span> Directive</h4></div></div></div>
+<a name="id2592563"></a>The <span><strong class="command">$TTL</strong></span> Directive</h4></div></div></div>
<p>
Syntax: <span><strong class="command">$TTL</strong></span>
<em class="replaceable"><code>default-ttl</code></em>
@@ -7129,7 +6989,7 @@ WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2592862"></a><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</h3></div></div></div>
+<a name="id2592599"></a><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</h3></div></div></div>
<p>
Syntax: <span><strong class="command">$GENERATE</strong></span>
<em class="replaceable"><code>range</code></em>
@@ -7154,7 +7014,7 @@ $GENERATE 1-127 $ CNAME $.0</pre>
<p>
is equivalent to
</p>
-<pre class="programlisting">0.0.0.192.IN-ADDR.ARPA NS SERVER1.EXAMPLE.
+<pre class="programlisting">0.0.0.192.IN-ADDR.ARPA. NS SERVER1.EXAMPLE.
0.0.0.192.IN-ADDR.ARPA. NS SERVER2.EXAMPLE.
1.0.0.192.IN-ADDR.ARPA. CNAME 1.0.0.0.192.IN-ADDR.ARPA.
2.0.0.192.IN-ADDR.ARPA. CNAME 2.0.0.0.192.IN-ADDR.ARPA.
@@ -7332,6 +7192,1224 @@ $GENERATE 1-127 $ CNAME $.0</pre>
</p>
</div>
</div>
+<div class="sect1" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="id2593067"></a>BIND9 Statistics</h2></div></div></div>
+<p>
+ <acronym class="acronym">BIND</acronym> 9 maintains lots of statistics
+ information and provides several interfaces for users to
+ get access to the statistics.
+ The available statistics include all statistics counters
+ that were available in <acronym class="acronym">BIND</acronym> 8 and
+ are meaningful in <acronym class="acronym">BIND</acronym> 9,
+ and other information that is considered useful.
+ </p>
+<p>
+ The statistics information is categorized into the following
+ sections.
+ </p>
+<div class="informaltable"><table border="1">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td>
+ <p>Incoming Requests</p>
+ </td>
+<td>
+ <p>
+ The number of incoming DNS requests for each OPCODE.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>Incoming Queries</p>
+ </td>
+<td>
+ <p>
+ The number of incoming queries for each RR type.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>Outgoing Queries</p>
+ </td>
+<td>
+ <p>
+ The number of outgoing queries for each RR
+ type sent from the internal resolver.
+ Maintained per view.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>Name Server Statistics</p>
+ </td>
+<td>
+ <p>
+ Statistics counters about incoming request processing.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>Zone Maintenance Statistics</p>
+ </td>
+<td>
+ <p>
+ Statistics counters regarding zone maintenance
+ operations such as zone transfers.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>Resolver Statistics</p>
+ </td>
+<td>
+ <p>
+ Statistics counters about name resolution
+ performed in the internal resolver.
+ Maintained per view.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>Cache DB RRsets</p>
+ </td>
+<td>
+ <p>
+ The number of RRsets per RR type (positive
+ or negative) and nonexistent names stored in the
+ cache database.
+ Maintained per view.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ A subset of Name Server Statistics is collected and shown
+ per zone for which the server has the authority when
+ <span><strong class="command">zone-statistics</strong></span> is set to
+ <strong class="userinput"><code>yes</code></strong>.
+ These statistics counters are shown with their zone and view
+ names.
+ In some cases the view names are omitted for the default view.
+ </p>
+<p>
+ There are currently two user interfaces to get access to the
+ statistics.
+ One is in the plain text format dumped to the file specified
+ by the <span><strong class="command">statistics-file</strong></span> configuration option.
+ The other is remotely accessible via a statistics channel
+ when the <span><strong class="command">statistics-channels</strong></span> statement
+ is specified in the configuration file
+ (see <a href="Bv9ARM.ch06.html#statschannels" title="statistics-channels Statement Grammar">the section called &#8220;<span><strong class="command">statistics-channels</strong></span> Statement Grammar&#8221;</a>.)
+ </p>
+<div class="sect3" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="statsfile"></a>The Statistics File</h4></div></div></div>
+<p>
+ The text format statistics dump begins with a line, like:
+ </p>
+<p>
+ <span><strong class="command">+++ Statistics Dump +++ (973798949)</strong></span>
+ </p>
+<p>
+ The number in parentheses is a standard
+ Unix-style timestamp, measured as seconds since January 1, 1970.
+
+ Following
+ that line is a set of statistics information, which is categorized
+ as described above.
+ Each section begins with a line, like:
+ </p>
+<p>
+ <span><strong class="command">++ Name Server Statistics ++</strong></span>
+ </p>
+<p>
+ Each section consists of lines, each containing the statistics
+ counter value followed by its textual description.
+ See below for available counters.
+ For brevity, counters that have a value of 0 are not shown
+ in the statistics file.
+ </p>
+<p>
+ The statistics dump ends with the line where the
+ number is identical to the number in the beginning line; for example:
+ </p>
+<p>
+ <span><strong class="command">--- Statistics Dump --- (973798949)</strong></span>
+ </p>
+</div>
+<div class="sect2" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id2593348"></a>Statistics Counters</h3></div></div></div>
+<p>
+ The following tables summarize statistics counters that
+ <acronym class="acronym">BIND</acronym> 9 provides.
+ For each row of the tables, the leftmost column is the
+ abbreviated symbol name of that counter.
+ These symbols are shown in the statistics information
+ accessed via an HTTP statistics channel.
+ The rightmost column gives the description of the counter,
+ which is also shown in the statistics file
+ (but, in this document, possibly with slight modification
+ for better readability).
+ Additional notes may also be provided in this column.
+ When a middle column exists between these two columns,
+ it gives the corresponding counter name of the
+ <acronym class="acronym">BIND</acronym> 8 statistics, if applicable.
+ </p>
+<div class="sect3" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="id2593364"></a>Name Server Statistics Counters</h4></div></div></div>
+<div class="informaltable"><table border="1">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td>
+ <p>
+ <span class="emphasis"><em>Symbol</em></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="emphasis"><em>BIND8 Symbol</em></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="emphasis"><em>Description</em></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">Requestv4</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RQ</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv4 requests received.
+ Note: this also counts non query requests.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">Requestv6</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RQ</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv6 requests received.
+ Note: this also counts non query requests.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">ReqEdns0</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Requests with EDNS(0) received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">ReqBadEDNSVer</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Requests with unsupported EDNS version received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">ReqTSIG</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Requests with TSIG received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">ReqSIG0</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Requests with SIG(0) received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">ReqBadSIG</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Requests with invalid (TSIG or SIG(0)) signature.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">ReqTCP</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RTCP</strong></span></p>
+ </td>
+<td>
+ <p>
+ TCP requests received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">AuthQryRej</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RUQ</strong></span></p>
+ </td>
+<td>
+ <p>
+ Authoritative (non recursive) queries rejected.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">RecQryRej</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RURQ</strong></span></p>
+ </td>
+<td>
+ <p>
+ Recursive queries rejected.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">XfrRej</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RUXFR</strong></span></p>
+ </td>
+<td>
+ <p>
+ Zone transfer requests rejected.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">UpdateRej</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RUUpd</strong></span></p>
+ </td>
+<td>
+ <p>
+ Dynamic update requests rejected.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">Response</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">SAns</strong></span></p>
+ </td>
+<td>
+ <p>
+ Responses sent.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">RespTruncated</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Truncated responses sent.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">RespEDNS0</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Responses with EDNS(0) sent.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">RespTSIG</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Responses with TSIG sent.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">RespSIG0</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Responses with SIG(0) sent.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">QrySuccess</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Queries resulted in a successful answer.
+ This means the query which returns a NOERROR response
+ with at least one answer RR.
+ This corresponds to the
+ <span><strong class="command">success</strong></span> counter
+ of previous versions of
+ <acronym class="acronym">BIND</acronym> 9.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">QryAuthAns</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Queries resulted in authoritative answer.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">QryNoauthAns</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">SNaAns</strong></span></p>
+ </td>
+<td>
+ <p>
+ Queries resulted in non authoritative answer.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">QryReferral</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Queries resulted in referral answer.
+ This corresponds to the
+ <span><strong class="command">referral</strong></span> counter
+ of previous versions of
+ <acronym class="acronym">BIND</acronym> 9.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">QryNxrrset</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Queries resulted in NOERROR responses with no data.
+ This corresponds to the
+ <span><strong class="command">nxrrset</strong></span> counter
+ of previous versions of
+ <acronym class="acronym">BIND</acronym> 9.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">QrySERVFAIL</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">SFail</strong></span></p>
+ </td>
+<td>
+ <p>
+ Queries resulted in SERVFAIL.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">QryFORMERR</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">SFErr</strong></span></p>
+ </td>
+<td>
+ <p>
+ Queries resulted in FORMERR.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">QryNXDOMAIN</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">SNXD</strong></span></p>
+ </td>
+<td>
+ <p>
+ Queries resulted in NXDOMAIN.
+ This corresponds to the
+ <span><strong class="command">nxdomain</strong></span> counter
+ of previous versions of
+ <acronym class="acronym">BIND</acronym> 9.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">QryRecursion</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RFwdQ</strong></span></p>
+ </td>
+<td>
+ <p>
+ Queries which caused the server
+ to perform recursion in order to find the final answer.
+ This corresponds to the
+ <span><strong class="command">recursion</strong></span> counter
+ of previous versions of
+ <acronym class="acronym">BIND</acronym> 9.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">QryDuplicate</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RDupQ</strong></span></p>
+ </td>
+<td>
+ <p>
+ Queries which the server attempted to
+ recurse but discovered an existing query with the same
+ IP address, port, query ID, name, type and class
+ already being processed.
+ This corresponds to the
+ <span><strong class="command">duplicate</strong></span> counter
+ of previous versions of
+ <acronym class="acronym">BIND</acronym> 9.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">QryDropped</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Queries for which the server
+ discovered an excessive number of existing
+ recursive queries for the same name, type and
+ class and were subsequently dropped.
+ This corresponds to the
+ <span><strong class="command">dropped</strong></span> counter
+ of previous versions of
+ <acronym class="acronym">BIND</acronym> 9.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">QryFailure</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Other query failures.
+ This corresponds to the
+ <span><strong class="command">failure</strong></span> counter
+ of previous versions of
+ <acronym class="acronym">BIND</acronym> 9.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">XfrReqDone</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Requested zone transfers completed.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">UpdateReqFwd</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Update requests forwarded.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">UpdateRespFwd</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Update responses forwarded.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">UpdateFwdFail</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Dynamic update forward failed.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">UpdateDone</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Dynamic updates completed.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">UpdateFail</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Dynamic updates failed.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">UpdateBadPrereq</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Dynamic updates rejected due to prerequisite failure.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="sect3" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="id2594955"></a>Zone Maintenance Statistics Counters</h4></div></div></div>
+<div class="informaltable"><table border="1">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td>
+ <p>
+ <span class="emphasis"><em>Symbol</em></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="emphasis"><em>Description</em></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">NotifyOutv4</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv4 notifies sent.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">NotifyOutv6</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv6 notifies sent.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">NotifyInv4</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv4 notifies received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">NotifyInv6</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv6 notifies received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">NotifyRej</strong></span></p>
+ </td>
+<td>
+ <p>
+ Incoming notifies rejected.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">SOAOutv4</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv4 SOA queries sent.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">SOAOutv6</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv6 SOA queries sent.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">AXFRReqv4</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv4 AXFR requested.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">AXFRReqv6</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv6 AXFR requested.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">IXFRReqv4</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv4 IXFR requested.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">IXFRReqv6</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv6 IXFR requested.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">XfrSuccess</strong></span></p>
+ </td>
+<td>
+ <p>
+ Zone transfer requests succeeded.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">XfrFail</strong></span></p>
+ </td>
+<td>
+ <p>
+ Zone transfer requests failed.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="sect3" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="id2595338"></a>Resolver Statistics Counters</h4></div></div></div>
+<div class="informaltable"><table border="1">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td>
+ <p>
+ <span class="emphasis"><em>Symbol</em></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="emphasis"><em>BIND8 Symbol</em></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="emphasis"><em>Description</em></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">Queryv4</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">SFwdQ</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv4 queries sent.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">Queryv6</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">SFwdQ</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv6 queries sent.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">Responsev4</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RR</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv4 responses received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">Responsev6</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RR</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv6 responses received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">NXDOMAIN</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RNXD</strong></span></p>
+ </td>
+<td>
+ <p>
+ NXDOMAIN received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">SERVFAIL</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RFail</strong></span></p>
+ </td>
+<td>
+ <p>
+ SERVFAIL received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">FORMERR</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RFErr</strong></span></p>
+ </td>
+<td>
+ <p>
+ FORMERR received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">OtherError</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RErr</strong></span></p>
+ </td>
+<td>
+ <p>
+ Other errors received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">EDNS0Fail</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ EDNS(0) query failures.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">Mismatch</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RDupR</strong></span></p>
+ </td>
+<td>
+ <p>
+ Mismatch responses received.
+ When shown via an HTTP statistics channel,
+ this counter is shown in the
+ Name Server Statistics section for brevity.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">Truncated</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Truncated responses received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">Lame</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">RLame</strong></span></p>
+ </td>
+<td>
+ <p>
+ Lame delegations received.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">Retry</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">SDupQ</strong></span></p>
+ </td>
+<td>
+ <p>
+ Query retries performed.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">GlueFetchv4</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">SSysQ</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv4 NS address fetches invoked.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">GlueFetchv6</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command">SSysQ</strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv6 NS address fetches invoked.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">GlueFetchv4Fail</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv4 NS address fetch failed.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">GlueFetchv6Fail</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ IPv6 NS address fetch failed.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">ValAttempt</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ DNSSEC validation attempted.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">ValOk</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ DNSSEC validation succeeded.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">ValNegOk</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ DNSSEC validation on negative information succeeded.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p><span><strong class="command">ValFail</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ DNSSEC validation failed.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="sect3" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="id2596328"></a>Compatibility with <span class="emphasis"><em>BIND</em></span> 8 Counters</h4></div></div></div>
+<p>
+ Most statistics counters that were available
+ in <span><strong class="command">BIND</strong></span> 8 are also supported in
+ <span><strong class="command">BIND</strong></span> 9 as shown in the above tables.
+ Here are notes about other counters that do not appear
+ in these tables.
+ </p>
+<div class="variablelist"><dl>
+<dt><span class="term"><span><strong class="command">RFwdR,SFwdR</strong></span></span></dt>
+<dd><p>
+ These counters are not supported
+ because <span><strong class="command">BIND</strong></span> 9 does not adopt
+ the notion of <span class="emphasis"><em>forwarding</em></span>
+ as <span><strong class="command">BIND</strong></span> 8 did.
+ </p></dd>
+<dt><span class="term"><span><strong class="command">RAXFR</strong></span></span></dt>
+<dd><p>
+ This counter is accessible in the Incoming Queries section.
+ </p></dd>
+<dt><span class="term"><span><strong class="command">RIQ</strong></span></span></dt>
+<dd><p>
+ This counter is accessible in the Incoming Requests section.
+ </p></dd>
+<dt><span class="term"><span><strong class="command">ROpts</strong></span></span></dt>
+<dd><p>
+ This counter is not supported
+ because <span><strong class="command">BIND</strong></span> 9 does not care
+ about IP options in the first place.
+ </p></dd>
+<dt><span class="term"><span><strong class="command">SErr</strong></span></span></dt>
+<dd><p>
+ This counter could be implemented, but is not yet
+ supported.
+ </p></dd>
+</dl></div>
+</div>
+</div>
+</div>
</div>
<div class="navfooter">
<hr>
diff --git a/doc/arm/Bv9ARM.ch07.html b/doc/arm/Bv9ARM.ch07.html
index ceb1193e..1e27757a 100644
--- a/doc/arm/Bv9ARM.ch07.html
+++ b/doc/arm/Bv9ARM.ch07.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch07.html,v 1.152.18.4 2008/01/18 09:37:04 marka Exp $ -->
+<!-- $Id: Bv9ARM.ch07.html,v 1.152.18.9 2008/05/06 01:41:46 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -46,10 +46,10 @@
<p><b>Table of Contents</b></p>
<dl>
<dt><span class="sect1"><a href="Bv9ARM.ch07.html#Access_Control_Lists">Access Control Lists</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch07.html#id2593546"><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span></a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch07.html#id2596516"><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span></a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2593691">The <span><strong class="command">chroot</strong></span> Environment</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2593751">Using the <span><strong class="command">setuid</strong></span> Function</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2596593">The <span><strong class="command">chroot</strong></span> Environment</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2596652">Using the <span><strong class="command">setuid</strong></span> Function</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch07.html#dynamic_update_security">Dynamic Update Security</a></span></dt>
</dl>
@@ -119,7 +119,7 @@ zone "example.com" {
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2593546"></a><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span>
+<a name="id2596516"></a><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span>
</h2></div></div></div>
<p>
On UNIX servers, it is possible to run <acronym class="acronym">BIND</acronym> in a <span class="emphasis"><em>chrooted</em></span> environment
@@ -143,7 +143,7 @@ zone "example.com" {
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2593691"></a>The <span><strong class="command">chroot</strong></span> Environment</h3></div></div></div>
+<a name="id2596593"></a>The <span><strong class="command">chroot</strong></span> Environment</h3></div></div></div>
<p>
In order for a <span><strong class="command">chroot</strong></span> environment
to
@@ -171,7 +171,7 @@ zone "example.com" {
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2593751"></a>Using the <span><strong class="command">setuid</strong></span> Function</h3></div></div></div>
+<a name="id2596652"></a>Using the <span><strong class="command">setuid</strong></span> Function</h3></div></div></div>
<p>
Prior to running the <span><strong class="command">named</strong></span> daemon,
use
diff --git a/doc/arm/Bv9ARM.ch08.html b/doc/arm/Bv9ARM.ch08.html
index 806f82df..5fd71b22 100644
--- a/doc/arm/Bv9ARM.ch08.html
+++ b/doc/arm/Bv9ARM.ch08.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch08.html,v 1.153.18.4 2008/01/18 09:37:04 marka Exp $ -->
+<!-- $Id: Bv9ARM.ch08.html,v 1.153.18.9 2008/05/06 01:41:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -45,18 +45,18 @@
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2593831">Common Problems</a></span></dt>
-<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch08.html#id2593836">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2593848">Incrementing and Changing the Serial Number</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2593865">Where Can I Get Help?</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2596732">Common Problems</a></span></dt>
+<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch08.html#id2596738">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2596749">Incrementing and Changing the Serial Number</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2596766">Where Can I Get Help?</a></span></dt>
</dl>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2593831"></a>Common Problems</h2></div></div></div>
+<a name="id2596732"></a>Common Problems</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2593836"></a>It's not working; how can I figure out what's wrong?</h3></div></div></div>
+<a name="id2596738"></a>It's not working; how can I figure out what's wrong?</h3></div></div></div>
<p>
The best solution to solving installation and
configuration issues is to take preventative measures by setting
@@ -68,7 +68,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2593848"></a>Incrementing and Changing the Serial Number</h2></div></div></div>
+<a name="id2596749"></a>Incrementing and Changing the Serial Number</h2></div></div></div>
<p>
Zone serial numbers are just numbers &#8212; they aren't
date related. A lot of people set them to a number that
@@ -95,7 +95,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2593865"></a>Where Can I Get Help?</h2></div></div></div>
+<a name="id2596766"></a>Where Can I Get Help?</h2></div></div></div>
<p>
The Internet Systems Consortium
(<acronym class="acronym">ISC</acronym>) offers a wide range
diff --git a/doc/arm/Bv9ARM.ch09.html b/doc/arm/Bv9ARM.ch09.html
index 4cbc5746..721127f8 100644
--- a/doc/arm/Bv9ARM.ch09.html
+++ b/doc/arm/Bv9ARM.ch09.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch09.html,v 1.154.18.4 2008/01/18 09:37:04 marka Exp $ -->
+<!-- $Id: Bv9ARM.ch09.html,v 1.154.18.9 2008/05/06 01:41:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -45,21 +45,21 @@
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2593927">Acknowledgments</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2596828">Acknowledgments</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch09.html#historical_dns_information">A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></a></span></dt></dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2594099">General <acronym class="acronym">DNS</acronym> Reference Information</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2597137">General <acronym class="acronym">DNS</acronym> Reference Information</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch09.html#ipv6addresses">IPv6 addresses (AAAA)</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch09.html#bibliography">Bibliography (and Suggested Reading)</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch09.html#rfcs">Request for Comments (RFCs)</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch09.html#internet_drafts">Internet Drafts</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2597447">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2600348">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
</dl></dd>
</dl>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2593927"></a>Acknowledgments</h2></div></div></div>
+<a name="id2596828"></a>Acknowledgments</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="historical_dns_information"></a>A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym>
@@ -164,7 +164,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2594099"></a>General <acronym class="acronym">DNS</acronym> Reference Information</h2></div></div></div>
+<a name="id2597137"></a>General <acronym class="acronym">DNS</acronym> Reference Information</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="ipv6addresses"></a>IPv6 addresses (AAAA)</h3></div></div></div>
@@ -252,17 +252,17 @@
</p>
<div class="bibliography">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2594286"></a>Bibliography</h4></div></div></div>
+<a name="id2597324"></a>Bibliography</h4></div></div></div>
<div class="bibliodiv">
<h3 class="title">Standards</h3>
<div class="biblioentry">
-<a name="id2594297"></a><p>[<abbr class="abbrev">RFC974</abbr>] <span class="author"><span class="firstname">C.</span> <span class="surname">Partridge</span>. </span><span class="title"><i>Mail Routing and the Domain System</i>. </span><span class="pubdate">January 1986. </span></p>
+<a name="id2597335"></a><p>[<abbr class="abbrev">RFC974</abbr>] <span class="author"><span class="firstname">C.</span> <span class="surname">Partridge</span>. </span><span class="title"><i>Mail Routing and the Domain System</i>. </span><span class="pubdate">January 1986. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594321"></a><p>[<abbr class="abbrev">RFC1034</abbr>] <span class="author"><span class="firstname">P.V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>Domain Names &#8212; Concepts and Facilities</i>. </span><span class="pubdate">November 1987. </span></p>
+<a name="id2597427"></a><p>[<abbr class="abbrev">RFC1034</abbr>] <span class="author"><span class="firstname">P.V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>Domain Names &#8212; Concepts and Facilities</i>. </span><span class="pubdate">November 1987. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594412"></a><p>[<abbr class="abbrev">RFC1035</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>Domain Names &#8212; Implementation and
+<a name="id2597450"></a><p>[<abbr class="abbrev">RFC1035</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>Domain Names &#8212; Implementation and
Specification</i>. </span><span class="pubdate">November 1987. </span></p>
</div>
</div>
@@ -270,42 +270,42 @@
<h3 class="title">
<a name="proposed_standards"></a>Proposed Standards</h3>
<div class="biblioentry">
-<a name="id2594449"></a><p>[<abbr class="abbrev">RFC2181</abbr>] <span class="author"><span class="firstname">R., R. Bush</span> <span class="surname">Elz</span>. </span><span class="title"><i>Clarifications to the <acronym class="acronym">DNS</acronym>
+<a name="id2597486"></a><p>[<abbr class="abbrev">RFC2181</abbr>] <span class="author"><span class="firstname">R., R. Bush</span> <span class="surname">Elz</span>. </span><span class="title"><i>Clarifications to the <acronym class="acronym">DNS</acronym>
Specification</i>. </span><span class="pubdate">July 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594475"></a><p>[<abbr class="abbrev">RFC2308</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Andrews</span>. </span><span class="title"><i>Negative Caching of <acronym class="acronym">DNS</acronym>
+<a name="id2597513"></a><p>[<abbr class="abbrev">RFC2308</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Andrews</span>. </span><span class="title"><i>Negative Caching of <acronym class="acronym">DNS</acronym>
Queries</i>. </span><span class="pubdate">March 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594501"></a><p>[<abbr class="abbrev">RFC1995</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Ohta</span>. </span><span class="title"><i>Incremental Zone Transfer in <acronym class="acronym">DNS</acronym></i>. </span><span class="pubdate">August 1996. </span></p>
+<a name="id2597539"></a><p>[<abbr class="abbrev">RFC1995</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Ohta</span>. </span><span class="title"><i>Incremental Zone Transfer in <acronym class="acronym">DNS</acronym></i>. </span><span class="pubdate">August 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594525"></a><p>[<abbr class="abbrev">RFC1996</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>A Mechanism for Prompt Notification of Zone Changes</i>. </span><span class="pubdate">August 1996. </span></p>
+<a name="id2597563"></a><p>[<abbr class="abbrev">RFC1996</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>A Mechanism for Prompt Notification of Zone Changes</i>. </span><span class="pubdate">August 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594549"></a><p>[<abbr class="abbrev">RFC2136</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">Y.</span> <span class="surname">Rekhter</span>, and <span class="firstname">J.</span> <span class="surname">Bound</span>. </span><span class="title"><i>Dynamic Updates in the Domain Name System</i>. </span><span class="pubdate">April 1997. </span></p>
+<a name="id2597587"></a><p>[<abbr class="abbrev">RFC2136</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">Y.</span> <span class="surname">Rekhter</span>, and <span class="firstname">J.</span> <span class="surname">Bound</span>. </span><span class="title"><i>Dynamic Updates in the Domain Name System</i>. </span><span class="pubdate">April 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594604"></a><p>[<abbr class="abbrev">RFC2671</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Extension Mechanisms for DNS (EDNS0)</i>. </span><span class="pubdate">August 1997. </span></p>
+<a name="id2597642"></a><p>[<abbr class="abbrev">RFC2671</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Extension Mechanisms for DNS (EDNS0)</i>. </span><span class="pubdate">August 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594631"></a><p>[<abbr class="abbrev">RFC2672</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="title"><i>Non-Terminal DNS Name Redirection</i>. </span><span class="pubdate">August 1999. </span></p>
+<a name="id2597669"></a><p>[<abbr class="abbrev">RFC2672</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="title"><i>Non-Terminal DNS Name Redirection</i>. </span><span class="pubdate">August 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594658"></a><p>[<abbr class="abbrev">RFC2845</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>, <span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, and <span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Secret Key Transaction Authentication for <acronym class="acronym">DNS</acronym> (TSIG)</i>. </span><span class="pubdate">May 2000. </span></p>
+<a name="id2597696"></a><p>[<abbr class="abbrev">RFC2845</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>, <span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, and <span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Secret Key Transaction Authentication for <acronym class="acronym">DNS</acronym> (TSIG)</i>. </span><span class="pubdate">May 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594788"></a><p>[<abbr class="abbrev">RFC2930</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Secret Key Establishment for DNS (TKEY RR)</i>. </span><span class="pubdate">September 2000. </span></p>
+<a name="id2597757"></a><p>[<abbr class="abbrev">RFC2930</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Secret Key Establishment for DNS (TKEY RR)</i>. </span><span class="pubdate">September 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594818"></a><p>[<abbr class="abbrev">RFC2931</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>DNS Request and Transaction Signatures (SIG(0)s)</i>. </span><span class="pubdate">September 2000. </span></p>
+<a name="id2597787"></a><p>[<abbr class="abbrev">RFC2931</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>DNS Request and Transaction Signatures (SIG(0)s)</i>. </span><span class="pubdate">September 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594848"></a><p>[<abbr class="abbrev">RFC3007</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Secure Domain Name System (DNS) Dynamic Update</i>. </span><span class="pubdate">November 2000. </span></p>
+<a name="id2597817"></a><p>[<abbr class="abbrev">RFC3007</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Secure Domain Name System (DNS) Dynamic Update</i>. </span><span class="pubdate">November 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594874"></a><p>[<abbr class="abbrev">RFC3645</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Kwan</span>, <span class="firstname">P.</span> <span class="surname">Garg</span>, <span class="firstname">J.</span> <span class="surname">Gilroy</span>, <span class="firstname">L.</span> <span class="surname">Esibov</span>, <span class="firstname">J.</span> <span class="surname">Westhead</span>, and <span class="firstname">R.</span> <span class="surname">Hall</span>. </span><span class="title"><i>Generic Security Service Algorithm for Secret
+<a name="id2597844"></a><p>[<abbr class="abbrev">RFC3645</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Kwan</span>, <span class="firstname">P.</span> <span class="surname">Garg</span>, <span class="firstname">J.</span> <span class="surname">Gilroy</span>, <span class="firstname">L.</span> <span class="surname">Esibov</span>, <span class="firstname">J.</span> <span class="surname">Westhead</span>, and <span class="firstname">R.</span> <span class="surname">Hall</span>. </span><span class="title"><i>Generic Security Service Algorithm for Secret
Key Transaction Authentication for DNS
(GSS-TSIG)</i>. </span><span class="pubdate">October 2003. </span></p>
</div>
@@ -314,19 +314,19 @@
<h3 class="title">
<acronym class="acronym">DNS</acronym> Security Proposed Standards</h3>
<div class="biblioentry">
-<a name="id2594956"></a><p>[<abbr class="abbrev">RFC3225</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Conrad</span>. </span><span class="title"><i>Indicating Resolver Support of DNSSEC</i>. </span><span class="pubdate">December 2001. </span></p>
+<a name="id2597926"></a><p>[<abbr class="abbrev">RFC3225</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Conrad</span>. </span><span class="title"><i>Indicating Resolver Support of DNSSEC</i>. </span><span class="pubdate">December 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2594983"></a><p>[<abbr class="abbrev">RFC3833</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Atkins</span> and <span class="firstname">R.</span> <span class="surname">Austein</span>. </span><span class="title"><i>Threat Analysis of the Domain Name System (DNS)</i>. </span><span class="pubdate">August 2004. </span></p>
+<a name="id2597953"></a><p>[<abbr class="abbrev">RFC3833</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Atkins</span> and <span class="firstname">R.</span> <span class="surname">Austein</span>. </span><span class="title"><i>Threat Analysis of the Domain Name System (DNS)</i>. </span><span class="pubdate">August 2004. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595019"></a><p>[<abbr class="abbrev">RFC4033</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>DNS Security Introduction and Requirements</i>. </span><span class="pubdate">March 2005. </span></p>
+<a name="id2597989"></a><p>[<abbr class="abbrev">RFC4033</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>DNS Security Introduction and Requirements</i>. </span><span class="pubdate">March 2005. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595084"></a><p>[<abbr class="abbrev">RFC4044</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Resource Records for the DNS Security Extensions</i>. </span><span class="pubdate">March 2005. </span></p>
+<a name="id2598054"></a><p>[<abbr class="abbrev">RFC4044</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Resource Records for the DNS Security Extensions</i>. </span><span class="pubdate">March 2005. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595149"></a><p>[<abbr class="abbrev">RFC4035</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Protocol Modifications for the DNS
+<a name="id2598119"></a><p>[<abbr class="abbrev">RFC4035</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Protocol Modifications for the DNS
Security Extensions</i>. </span><span class="pubdate">March 2005. </span></p>
</div>
</div>
@@ -334,146 +334,146 @@
<h3 class="title">Other Important RFCs About <acronym class="acronym">DNS</acronym>
Implementation</h3>
<div class="biblioentry">
-<a name="id2595223"></a><p>[<abbr class="abbrev">RFC1535</abbr>] <span class="author"><span class="firstname">E.</span> <span class="surname">Gavron</span>. </span><span class="title"><i>A Security Problem and Proposed Correction With Widely
+<a name="id2598193"></a><p>[<abbr class="abbrev">RFC1535</abbr>] <span class="author"><span class="firstname">E.</span> <span class="surname">Gavron</span>. </span><span class="title"><i>A Security Problem and Proposed Correction With Widely
Deployed <acronym class="acronym">DNS</acronym> Software.</i>. </span><span class="pubdate">October 1993. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595249"></a><p>[<abbr class="abbrev">RFC1536</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Kumar</span>, <span class="firstname">J.</span> <span class="surname">Postel</span>, <span class="firstname">C.</span> <span class="surname">Neuman</span>, <span class="firstname">P.</span> <span class="surname">Danzig</span>, and <span class="firstname">S.</span> <span class="surname">Miller</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Implementation
+<a name="id2598218"></a><p>[<abbr class="abbrev">RFC1536</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Kumar</span>, <span class="firstname">J.</span> <span class="surname">Postel</span>, <span class="firstname">C.</span> <span class="surname">Neuman</span>, <span class="firstname">P.</span> <span class="surname">Danzig</span>, and <span class="firstname">S.</span> <span class="surname">Miller</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Implementation
Errors and Suggested Fixes</i>. </span><span class="pubdate">October 1993. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595317"></a><p>[<abbr class="abbrev">RFC1982</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Elz</span> and <span class="firstname">R.</span> <span class="surname">Bush</span>. </span><span class="title"><i>Serial Number Arithmetic</i>. </span><span class="pubdate">August 1996. </span></p>
+<a name="id2598286"></a><p>[<abbr class="abbrev">RFC1982</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Elz</span> and <span class="firstname">R.</span> <span class="surname">Bush</span>. </span><span class="title"><i>Serial Number Arithmetic</i>. </span><span class="pubdate">August 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595352"></a><p>[<abbr class="abbrev">RFC4074</abbr>] <span class="authorgroup"><span class="firstname">Y.</span> <span class="surname">Morishita</span> and <span class="firstname">T.</span> <span class="surname">Jinmei</span>. </span><span class="title"><i>Common Misbehaviour Against <acronym class="acronym">DNS</acronym>
+<a name="id2598322"></a><p>[<abbr class="abbrev">RFC4074</abbr>] <span class="authorgroup"><span class="firstname">Y.</span> <span class="surname">Morishita</span> and <span class="firstname">T.</span> <span class="surname">Jinmei</span>. </span><span class="title"><i>Common Misbehaviour Against <acronym class="acronym">DNS</acronym>
Queries for IPv6 Addresses</i>. </span><span class="pubdate">May 2005. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">Resource Record Types</h3>
<div class="biblioentry">
-<a name="id2595398"></a><p>[<abbr class="abbrev">RFC1183</abbr>] <span class="authorgroup"><span class="firstname">C.F.</span> <span class="surname">Everhart</span>, <span class="firstname">L. A.</span> <span class="surname">Mamakos</span>, <span class="firstname">R.</span> <span class="surname">Ullmann</span>, and <span class="firstname">P.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>New <acronym class="acronym">DNS</acronym> RR Definitions</i>. </span><span class="pubdate">October 1990. </span></p>
+<a name="id2598368"></a><p>[<abbr class="abbrev">RFC1183</abbr>] <span class="authorgroup"><span class="firstname">C.F.</span> <span class="surname">Everhart</span>, <span class="firstname">L. A.</span> <span class="surname">Mamakos</span>, <span class="firstname">R.</span> <span class="surname">Ullmann</span>, and <span class="firstname">P.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>New <acronym class="acronym">DNS</acronym> RR Definitions</i>. </span><span class="pubdate">October 1990. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595456"></a><p>[<abbr class="abbrev">RFC1706</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">R.</span> <span class="surname">Colella</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> NSAP Resource Records</i>. </span><span class="pubdate">October 1994. </span></p>
+<a name="id2598425"></a><p>[<abbr class="abbrev">RFC1706</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">R.</span> <span class="surname">Colella</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> NSAP Resource Records</i>. </span><span class="pubdate">October 1994. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595493"></a><p>[<abbr class="abbrev">RFC2168</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Daniel</span> and <span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="title"><i>Resolution of Uniform Resource Identifiers using
+<a name="id2598462"></a><p>[<abbr class="abbrev">RFC2168</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Daniel</span> and <span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="title"><i>Resolution of Uniform Resource Identifiers using
the Domain Name System</i>. </span><span class="pubdate">June 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595528"></a><p>[<abbr class="abbrev">RFC1876</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Davis</span>, <span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">T.</span>, and <span class="firstname">I.</span> <span class="surname">Dickinson</span>. </span><span class="title"><i>A Means for Expressing Location Information in the
+<a name="id2598498"></a><p>[<abbr class="abbrev">RFC1876</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Davis</span>, <span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">T.</span>, and <span class="firstname">I.</span> <span class="surname">Dickinson</span>. </span><span class="title"><i>A Means for Expressing Location Information in the
Domain
Name System</i>. </span><span class="pubdate">January 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595582"></a><p>[<abbr class="abbrev">RFC2052</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>A <acronym class="acronym">DNS</acronym> RR for Specifying the
+<a name="id2598620"></a><p>[<abbr class="abbrev">RFC2052</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>A <acronym class="acronym">DNS</acronym> RR for Specifying the
Location of
Services.</i>. </span><span class="pubdate">October 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595621"></a><p>[<abbr class="abbrev">RFC2163</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Allocchio</span>. </span><span class="title"><i>Using the Internet <acronym class="acronym">DNS</acronym> to
+<a name="id2598659"></a><p>[<abbr class="abbrev">RFC2163</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Allocchio</span>. </span><span class="title"><i>Using the Internet <acronym class="acronym">DNS</acronym> to
Distribute MIXER
Conformant Global Address Mapping</i>. </span><span class="pubdate">January 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595646"></a><p>[<abbr class="abbrev">RFC2230</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Atkinson</span>. </span><span class="title"><i>Key Exchange Delegation Record for the <acronym class="acronym">DNS</acronym></i>. </span><span class="pubdate">October 1997. </span></p>
+<a name="id2598684"></a><p>[<abbr class="abbrev">RFC2230</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Atkinson</span>. </span><span class="title"><i>Key Exchange Delegation Record for the <acronym class="acronym">DNS</acronym></i>. </span><span class="pubdate">October 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595672"></a><p>[<abbr class="abbrev">RFC2536</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>DSA KEYs and SIGs in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2598710"></a><p>[<abbr class="abbrev">RFC2536</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>DSA KEYs and SIGs in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595699"></a><p>[<abbr class="abbrev">RFC2537</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>RSA/MD5 KEYs and SIGs in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2598737"></a><p>[<abbr class="abbrev">RFC2537</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>RSA/MD5 KEYs and SIGs in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595794"></a><p>[<abbr class="abbrev">RFC2538</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Storing Certificates in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2598763"></a><p>[<abbr class="abbrev">RFC2538</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Storing Certificates in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595833"></a><p>[<abbr class="abbrev">RFC2539</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Storage of Diffie-Hellman Keys in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2598803"></a><p>[<abbr class="abbrev">RFC2539</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Storage of Diffie-Hellman Keys in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595863"></a><p>[<abbr class="abbrev">RFC2540</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Detached Domain Name System (DNS) Information</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2598833"></a><p>[<abbr class="abbrev">RFC2540</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Detached Domain Name System (DNS) Information</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595893"></a><p>[<abbr class="abbrev">RFC2782</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span>. </span><span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="author"><span class="firstname">L.</span> <span class="surname">Esibov</span>. </span><span class="title"><i>A DNS RR for specifying the location of services (DNS SRV)</i>. </span><span class="pubdate">February 2000. </span></p>
+<a name="id2598862"></a><p>[<abbr class="abbrev">RFC2782</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span>. </span><span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="author"><span class="firstname">L.</span> <span class="surname">Esibov</span>. </span><span class="title"><i>A DNS RR for specifying the location of services (DNS SRV)</i>. </span><span class="pubdate">February 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595936"></a><p>[<abbr class="abbrev">RFC2915</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="author"><span class="firstname">R.</span> <span class="surname">Daniel</span>. </span><span class="title"><i>The Naming Authority Pointer (NAPTR) DNS Resource Record</i>. </span><span class="pubdate">September 2000. </span></p>
+<a name="id2598905"></a><p>[<abbr class="abbrev">RFC2915</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="author"><span class="firstname">R.</span> <span class="surname">Daniel</span>. </span><span class="title"><i>The Naming Authority Pointer (NAPTR) DNS Resource Record</i>. </span><span class="pubdate">September 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595969"></a><p>[<abbr class="abbrev">RFC3110</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>RSA/SHA-1 SIGs and RSA KEYs in the Domain Name System (DNS)</i>. </span><span class="pubdate">May 2001. </span></p>
+<a name="id2598938"></a><p>[<abbr class="abbrev">RFC3110</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>RSA/SHA-1 SIGs and RSA KEYs in the Domain Name System (DNS)</i>. </span><span class="pubdate">May 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2595995"></a><p>[<abbr class="abbrev">RFC3123</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Koch</span>. </span><span class="title"><i>A DNS RR Type for Lists of Address Prefixes (APL RR)</i>. </span><span class="pubdate">June 2001. </span></p>
+<a name="id2598965"></a><p>[<abbr class="abbrev">RFC3123</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Koch</span>. </span><span class="title"><i>A DNS RR Type for Lists of Address Prefixes (APL RR)</i>. </span><span class="pubdate">June 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596019"></a><p>[<abbr class="abbrev">RFC3596</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">C.</span> <span class="surname">Huitema</span>, <span class="firstname">V.</span> <span class="surname">Ksinant</span>, and <span class="firstname">M.</span> <span class="surname">Souissi</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Extensions to support IP
+<a name="id2598988"></a><p>[<abbr class="abbrev">RFC3596</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">C.</span> <span class="surname">Huitema</span>, <span class="firstname">V.</span> <span class="surname">Ksinant</span>, and <span class="firstname">M.</span> <span class="surname">Souissi</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Extensions to support IP
version 6</i>. </span><span class="pubdate">October 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596076"></a><p>[<abbr class="abbrev">RFC3597</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gustafsson</span>. </span><span class="title"><i>Handling of Unknown DNS Resource Record (RR) Types</i>. </span><span class="pubdate">September 2003. </span></p>
+<a name="id2599046"></a><p>[<abbr class="abbrev">RFC3597</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gustafsson</span>. </span><span class="title"><i>Handling of Unknown DNS Resource Record (RR) Types</i>. </span><span class="pubdate">September 2003. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">
<acronym class="acronym">DNS</acronym> and the Internet</h3>
<div class="biblioentry">
-<a name="id2596108"></a><p>[<abbr class="abbrev">RFC1101</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Encoding of Network Names
+<a name="id2599078"></a><p>[<abbr class="abbrev">RFC1101</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Encoding of Network Names
and Other Types</i>. </span><span class="pubdate">April 1989. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596134"></a><p>[<abbr class="abbrev">RFC1123</abbr>] <span class="author"><span class="surname">Braden</span>. </span><span class="title"><i>Requirements for Internet Hosts - Application and
+<a name="id2599104"></a><p>[<abbr class="abbrev">RFC1123</abbr>] <span class="author"><span class="surname">Braden</span>. </span><span class="title"><i>Requirements for Internet Hosts - Application and
Support</i>. </span><span class="pubdate">October 1989. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596156"></a><p>[<abbr class="abbrev">RFC1591</abbr>] <span class="author"><span class="firstname">J.</span> <span class="surname">Postel</span>. </span><span class="title"><i>Domain Name System Structure and Delegation</i>. </span><span class="pubdate">March 1994. </span></p>
+<a name="id2599126"></a><p>[<abbr class="abbrev">RFC1591</abbr>] <span class="author"><span class="firstname">J.</span> <span class="surname">Postel</span>. </span><span class="title"><i>Domain Name System Structure and Delegation</i>. </span><span class="pubdate">March 1994. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596180"></a><p>[<abbr class="abbrev">RFC2317</abbr>] <span class="authorgroup"><span class="firstname">H.</span> <span class="surname">Eidnes</span>, <span class="firstname">G.</span> <span class="surname">de Groot</span>, and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Classless IN-ADDR.ARPA Delegation</i>. </span><span class="pubdate">March 1998. </span></p>
+<a name="id2599149"></a><p>[<abbr class="abbrev">RFC2317</abbr>] <span class="authorgroup"><span class="firstname">H.</span> <span class="surname">Eidnes</span>, <span class="firstname">G.</span> <span class="surname">de Groot</span>, and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Classless IN-ADDR.ARPA Delegation</i>. </span><span class="pubdate">March 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596226"></a><p>[<abbr class="abbrev">RFC2826</abbr>] <span class="authorgroup"><span class="surname">Internet Architecture Board</span>. </span><span class="title"><i>IAB Technical Comment on the Unique DNS Root</i>. </span><span class="pubdate">May 2000. </span></p>
+<a name="id2599195"></a><p>[<abbr class="abbrev">RFC2826</abbr>] <span class="authorgroup"><span class="surname">Internet Architecture Board</span>. </span><span class="title"><i>IAB Technical Comment on the Unique DNS Root</i>. </span><span class="pubdate">May 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596249"></a><p>[<abbr class="abbrev">RFC2929</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, <span class="firstname">E.</span> <span class="surname">Brunner-Williams</span>, and <span class="firstname">B.</span> <span class="surname">Manning</span>. </span><span class="title"><i>Domain Name System (DNS) IANA Considerations</i>. </span><span class="pubdate">September 2000. </span></p>
+<a name="id2599219"></a><p>[<abbr class="abbrev">RFC2929</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, <span class="firstname">E.</span> <span class="surname">Brunner-Williams</span>, and <span class="firstname">B.</span> <span class="surname">Manning</span>. </span><span class="title"><i>Domain Name System (DNS) IANA Considerations</i>. </span><span class="pubdate">September 2000. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">
<acronym class="acronym">DNS</acronym> Operations</h3>
<div class="biblioentry">
-<a name="id2596307"></a><p>[<abbr class="abbrev">RFC1033</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Lottor</span>. </span><span class="title"><i>Domain administrators operations guide.</i>. </span><span class="pubdate">November 1987. </span></p>
+<a name="id2599276"></a><p>[<abbr class="abbrev">RFC1033</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Lottor</span>. </span><span class="title"><i>Domain administrators operations guide.</i>. </span><span class="pubdate">November 1987. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596330"></a><p>[<abbr class="abbrev">RFC1537</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Beertema</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Data File
+<a name="id2599300"></a><p>[<abbr class="abbrev">RFC1537</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Beertema</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Data File
Configuration Errors</i>. </span><span class="pubdate">October 1993. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596357"></a><p>[<abbr class="abbrev">RFC1912</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Barr</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Operational and
+<a name="id2599326"></a><p>[<abbr class="abbrev">RFC1912</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Barr</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Operational and
Configuration Errors</i>. </span><span class="pubdate">February 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596384"></a><p>[<abbr class="abbrev">RFC2010</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Operational Criteria for Root Name Servers.</i>. </span><span class="pubdate">October 1996. </span></p>
+<a name="id2599353"></a><p>[<abbr class="abbrev">RFC2010</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Operational Criteria for Root Name Servers.</i>. </span><span class="pubdate">October 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596420"></a><p>[<abbr class="abbrev">RFC2219</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Hamilton</span> and <span class="firstname">R.</span> <span class="surname">Wright</span>. </span><span class="title"><i>Use of <acronym class="acronym">DNS</acronym> Aliases for
+<a name="id2599389"></a><p>[<abbr class="abbrev">RFC2219</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Hamilton</span> and <span class="firstname">R.</span> <span class="surname">Wright</span>. </span><span class="title"><i>Use of <acronym class="acronym">DNS</acronym> Aliases for
Network Services.</i>. </span><span class="pubdate">October 1997. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">Internationalized Domain Names</h3>
<div class="biblioentry">
-<a name="id2596466"></a><p>[<abbr class="abbrev">RFC2825</abbr>] <span class="authorgroup"><span class="surname">IAB</span> and <span class="firstname">R.</span> <span class="surname">Daigle</span>. </span><span class="title"><i>A Tangled Web: Issues of I18N, Domain Names,
+<a name="id2599435"></a><p>[<abbr class="abbrev">RFC2825</abbr>] <span class="authorgroup"><span class="surname">IAB</span> and <span class="firstname">R.</span> <span class="surname">Daigle</span>. </span><span class="title"><i>A Tangled Web: Issues of I18N, Domain Names,
and the Other Internet protocols</i>. </span><span class="pubdate">May 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596498"></a><p>[<abbr class="abbrev">RFC3490</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Faltstrom</span>, <span class="firstname">P.</span> <span class="surname">Hoffman</span>, and <span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="title"><i>Internationalizing Domain Names in Applications (IDNA)</i>. </span><span class="pubdate">March 2003. </span></p>
+<a name="id2599467"></a><p>[<abbr class="abbrev">RFC3490</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Faltstrom</span>, <span class="firstname">P.</span> <span class="surname">Hoffman</span>, and <span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="title"><i>Internationalizing Domain Names in Applications (IDNA)</i>. </span><span class="pubdate">March 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596544"></a><p>[<abbr class="abbrev">RFC3491</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Hoffman</span> and <span class="firstname">M.</span> <span class="surname">Blanchet</span>. </span><span class="title"><i>Nameprep: A Stringprep Profile for Internationalized Domain Names</i>. </span><span class="pubdate">March 2003. </span></p>
+<a name="id2599513"></a><p>[<abbr class="abbrev">RFC3491</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Hoffman</span> and <span class="firstname">M.</span> <span class="surname">Blanchet</span>. </span><span class="title"><i>Nameprep: A Stringprep Profile for Internationalized Domain Names</i>. </span><span class="pubdate">March 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596579"></a><p>[<abbr class="abbrev">RFC3492</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="title"><i>Punycode: A Bootstring encoding of Unicode
+<a name="id2599548"></a><p>[<abbr class="abbrev">RFC3492</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="title"><i>Punycode: A Bootstring encoding of Unicode
for Internationalized Domain Names in
Applications (IDNA)</i>. </span><span class="pubdate">March 2003. </span></p>
</div>
@@ -489,47 +489,47 @@
</p>
</div>
<div class="biblioentry">
-<a name="id2596624"></a><p>[<abbr class="abbrev">RFC1464</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Rosenbaum</span>. </span><span class="title"><i>Using the Domain Name System To Store Arbitrary String
+<a name="id2599593"></a><p>[<abbr class="abbrev">RFC1464</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Rosenbaum</span>. </span><span class="title"><i>Using the Domain Name System To Store Arbitrary String
Attributes</i>. </span><span class="pubdate">May 1993. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596646"></a><p>[<abbr class="abbrev">RFC1713</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Romao</span>. </span><span class="title"><i>Tools for <acronym class="acronym">DNS</acronym> Debugging</i>. </span><span class="pubdate">November 1994. </span></p>
+<a name="id2599616"></a><p>[<abbr class="abbrev">RFC1713</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Romao</span>. </span><span class="title"><i>Tools for <acronym class="acronym">DNS</acronym> Debugging</i>. </span><span class="pubdate">November 1994. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596672"></a><p>[<abbr class="abbrev">RFC1794</abbr>] <span class="author"><span class="firstname">T.</span> <span class="surname">Brisco</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Support for Load
+<a name="id2599641"></a><p>[<abbr class="abbrev">RFC1794</abbr>] <span class="author"><span class="firstname">T.</span> <span class="surname">Brisco</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Support for Load
Balancing</i>. </span><span class="pubdate">April 1995. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596697"></a><p>[<abbr class="abbrev">RFC2240</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="title"><i>A Legal Basis for Domain Name Allocation</i>. </span><span class="pubdate">November 1997. </span></p>
+<a name="id2599667"></a><p>[<abbr class="abbrev">RFC2240</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="title"><i>A Legal Basis for Domain Name Allocation</i>. </span><span class="pubdate">November 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596721"></a><p>[<abbr class="abbrev">RFC2345</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>, <span class="firstname">T.</span> <span class="surname">Wolf</span>, and <span class="firstname">G.</span> <span class="surname">Oglesby</span>. </span><span class="title"><i>Domain Names and Company Name Retrieval</i>. </span><span class="pubdate">May 1998. </span></p>
+<a name="id2599690"></a><p>[<abbr class="abbrev">RFC2345</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>, <span class="firstname">T.</span> <span class="surname">Wolf</span>, and <span class="firstname">G.</span> <span class="surname">Oglesby</span>. </span><span class="title"><i>Domain Names and Company Name Retrieval</i>. </span><span class="pubdate">May 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596835"></a><p>[<abbr class="abbrev">RFC2352</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="title"><i>A Convention For Using Legal Names as Domain Names</i>. </span><span class="pubdate">May 1998. </span></p>
+<a name="id2599736"></a><p>[<abbr class="abbrev">RFC2352</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="title"><i>A Convention For Using Legal Names as Domain Names</i>. </span><span class="pubdate">May 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596858"></a><p>[<abbr class="abbrev">RFC3071</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>. </span><span class="title"><i>Reflections on the DNS, RFC 1591, and Categories of Domains</i>. </span><span class="pubdate">February 2001. </span></p>
+<a name="id2599760"></a><p>[<abbr class="abbrev">RFC3071</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>. </span><span class="title"><i>Reflections on the DNS, RFC 1591, and Categories of Domains</i>. </span><span class="pubdate">February 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596885"></a><p>[<abbr class="abbrev">RFC3258</abbr>] <span class="authorgroup"><span class="firstname">T.</span> <span class="surname">Hardie</span>. </span><span class="title"><i>Distributing Authoritative Name Servers via
+<a name="id2599786"></a><p>[<abbr class="abbrev">RFC3258</abbr>] <span class="authorgroup"><span class="firstname">T.</span> <span class="surname">Hardie</span>. </span><span class="title"><i>Distributing Authoritative Name Servers via
Shared Unicast Addresses</i>. </span><span class="pubdate">April 2002. </span></p>
</div>
<div class="biblioentry">
-<a name="id2596910"></a><p>[<abbr class="abbrev">RFC3901</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Durand</span> and <span class="firstname">J.</span> <span class="surname">Ihren</span>. </span><span class="title"><i>DNS IPv6 Transport Operational Guidelines</i>. </span><span class="pubdate">September 2004. </span></p>
+<a name="id2599812"></a><p>[<abbr class="abbrev">RFC3901</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Durand</span> and <span class="firstname">J.</span> <span class="surname">Ihren</span>. </span><span class="title"><i>DNS IPv6 Transport Operational Guidelines</i>. </span><span class="pubdate">September 2004. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">Obsolete and Unimplemented Experimental RFC</h3>
<div class="biblioentry">
-<a name="id2596954"></a><p>[<abbr class="abbrev">RFC1712</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Farrell</span>, <span class="firstname">M.</span> <span class="surname">Schulze</span>, <span class="firstname">S.</span> <span class="surname">Pleitner</span>, and <span class="firstname">D.</span> <span class="surname">Baldoni</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Encoding of Geographical
+<a name="id2599856"></a><p>[<abbr class="abbrev">RFC1712</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Farrell</span>, <span class="firstname">M.</span> <span class="surname">Schulze</span>, <span class="firstname">S.</span> <span class="surname">Pleitner</span>, and <span class="firstname">D.</span> <span class="surname">Baldoni</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Encoding of Geographical
Location</i>. </span><span class="pubdate">November 1994. </span></p>
</div>
<div class="biblioentry">
-<a name="id2597012"></a><p>[<abbr class="abbrev">RFC2673</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="title"><i>Binary Labels in the Domain Name System</i>. </span><span class="pubdate">August 1999. </span></p>
+<a name="id2599913"></a><p>[<abbr class="abbrev">RFC2673</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="title"><i>Binary Labels in the Domain Name System</i>. </span><span class="pubdate">August 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2597038"></a><p>[<abbr class="abbrev">RFC2874</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span> and <span class="firstname">C.</span> <span class="surname">Huitema</span>. </span><span class="title"><i>DNS Extensions to Support IPv6 Address Aggregation
+<a name="id2599940"></a><p>[<abbr class="abbrev">RFC2874</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span> and <span class="firstname">C.</span> <span class="surname">Huitema</span>. </span><span class="title"><i>DNS Extensions to Support IPv6 Address Aggregation
and Renumbering</i>. </span><span class="pubdate">July 2000. </span></p>
</div>
</div>
@@ -543,39 +543,39 @@
</p>
</div>
<div class="biblioentry">
-<a name="id2597086"></a><p>[<abbr class="abbrev">RFC2065</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">C.</span> <span class="surname">Kaufman</span>. </span><span class="title"><i>Domain Name System Security Extensions</i>. </span><span class="pubdate">January 1997. </span></p>
+<a name="id2599988"></a><p>[<abbr class="abbrev">RFC2065</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">C.</span> <span class="surname">Kaufman</span>. </span><span class="title"><i>Domain Name System Security Extensions</i>. </span><span class="pubdate">January 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2597126"></a><p>[<abbr class="abbrev">RFC2137</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Secure Domain Name System Dynamic Update</i>. </span><span class="pubdate">April 1997. </span></p>
+<a name="id2600027"></a><p>[<abbr class="abbrev">RFC2137</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Secure Domain Name System Dynamic Update</i>. </span><span class="pubdate">April 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2597153"></a><p>[<abbr class="abbrev">RFC2535</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Domain Name System Security Extensions</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2600054"></a><p>[<abbr class="abbrev">RFC2535</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Domain Name System Security Extensions</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2597182"></a><p>[<abbr class="abbrev">RFC3008</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Domain Name System Security (DNSSEC)
+<a name="id2600084"></a><p>[<abbr class="abbrev">RFC3008</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Domain Name System Security (DNSSEC)
Signing Authority</i>. </span><span class="pubdate">November 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2597208"></a><p>[<abbr class="abbrev">RFC3090</abbr>] <span class="authorgroup"><span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="title"><i>DNS Security Extension Clarification on Zone Status</i>. </span><span class="pubdate">March 2001. </span></p>
+<a name="id2600109"></a><p>[<abbr class="abbrev">RFC3090</abbr>] <span class="authorgroup"><span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="title"><i>DNS Security Extension Clarification on Zone Status</i>. </span><span class="pubdate">March 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2597235"></a><p>[<abbr class="abbrev">RFC3445</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Massey</span> and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Limiting the Scope of the KEY Resource Record (RR)</i>. </span><span class="pubdate">December 2002. </span></p>
+<a name="id2600136"></a><p>[<abbr class="abbrev">RFC3445</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Massey</span> and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Limiting the Scope of the KEY Resource Record (RR)</i>. </span><span class="pubdate">December 2002. </span></p>
</div>
<div class="biblioentry">
-<a name="id2597271"></a><p>[<abbr class="abbrev">RFC3655</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Redefinition of DNS Authenticated Data (AD) bit</i>. </span><span class="pubdate">November 2003. </span></p>
+<a name="id2600172"></a><p>[<abbr class="abbrev">RFC3655</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Redefinition of DNS Authenticated Data (AD) bit</i>. </span><span class="pubdate">November 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2597307"></a><p>[<abbr class="abbrev">RFC3658</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Delegation Signer (DS) Resource Record (RR)</i>. </span><span class="pubdate">December 2003. </span></p>
+<a name="id2600209"></a><p>[<abbr class="abbrev">RFC3658</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Delegation Signer (DS) Resource Record (RR)</i>. </span><span class="pubdate">December 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2597334"></a><p>[<abbr class="abbrev">RFC3755</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Weiler</span>. </span><span class="title"><i>Legacy Resolver Compatibility for Delegation Signer (DS)</i>. </span><span class="pubdate">May 2004. </span></p>
+<a name="id2600235"></a><p>[<abbr class="abbrev">RFC3755</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Weiler</span>. </span><span class="title"><i>Legacy Resolver Compatibility for Delegation Signer (DS)</i>. </span><span class="pubdate">May 2004. </span></p>
</div>
<div class="biblioentry">
-<a name="id2597361"></a><p>[<abbr class="abbrev">RFC3757</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Kolkman</span>, <span class="firstname">J.</span> <span class="surname">Schlyter</span>, and <span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="title"><i>Domain Name System KEY (DNSKEY) Resource Record
+<a name="id2600262"></a><p>[<abbr class="abbrev">RFC3757</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Kolkman</span>, <span class="firstname">J.</span> <span class="surname">Schlyter</span>, and <span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="title"><i>Domain Name System KEY (DNSKEY) Resource Record
(RR) Secure Entry Point (SEP) Flag</i>. </span><span class="pubdate">April 2004. </span></p>
</div>
<div class="biblioentry">
-<a name="id2597405"></a><p>[<abbr class="abbrev">RFC3845</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Schlyter</span>. </span><span class="title"><i>DNS Security (DNSSEC) NextSECure (NSEC) RDATA Format</i>. </span><span class="pubdate">August 2004. </span></p>
+<a name="id2600307"></a><p>[<abbr class="abbrev">RFC3845</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Schlyter</span>. </span><span class="title"><i>DNS Security (DNSSEC) NextSECure (NSEC) RDATA Format</i>. </span><span class="pubdate">August 2004. </span></p>
</div>
</div>
</div>
@@ -596,14 +596,14 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2597447"></a>Other Documents About <acronym class="acronym">BIND</acronym>
+<a name="id2600348"></a>Other Documents About <acronym class="acronym">BIND</acronym>
</h3></div></div></div>
<p></p>
<div class="bibliography">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2597457"></a>Bibliography</h4></div></div></div>
+<a name="id2600358"></a>Bibliography</h4></div></div></div>
<div class="biblioentry">
-<a name="id2597459"></a><p><span class="authorgroup"><span class="firstname">Paul</span> <span class="surname">Albitz</span> and <span class="firstname">Cricket</span> <span class="surname">Liu</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></i>. </span><span class="copyright">Copyright © 1998 Sebastopol, CA: O'Reilly and Associates. </span></p>
+<a name="id2600360"></a><p><span class="authorgroup"><span class="firstname">Paul</span> <span class="surname">Albitz</span> and <span class="firstname">Cricket</span> <span class="surname">Liu</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></i>. </span><span class="copyright">Copyright © 1998 Sebastopol, CA: O'Reilly and Associates. </span></p>
</div>
</div>
</div>
diff --git a/doc/arm/Bv9ARM.html b/doc/arm/Bv9ARM.html
index 68d19277..292603cc 100644
--- a/doc/arm/Bv9ARM.html
+++ b/doc/arm/Bv9ARM.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.html,v 1.164.18.4 2008/01/18 09:37:04 marka Exp $ -->
+<!-- $Id: Bv9ARM.html,v 1.164.18.9 2008/05/06 01:41:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -40,7 +40,7 @@
<div class="titlepage">
<div>
<div><h1 class="title">
-<a name="id2563403"></a>BIND 9 Administrator Reference Manual</h1></div>
+<a name="id2563174"></a>BIND 9 Administrator Reference Manual</h1></div>
<div><p class="copyright">Copyright © 2004-2008 Internet Systems Consortium, Inc. ("ISC")</p></div>
<div><p class="copyright">Copyright © 2000-2003 Internet Software Consortium.</p></div>
</div>
@@ -51,39 +51,39 @@
<dl>
<dt><span class="chapter"><a href="Bv9ARM.ch01.html">1. Introduction</a></span></dt>
<dd><dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564109">Scope of Document</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564133">Organization of This Document</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2563474">Conventions Used in This Document</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564816">The Domain Name System (<acronym class="acronym">DNS</acronym>)</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2563405">Scope of Document</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564385">Organization of This Document</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564524">Conventions Used in This Document</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564637">The Domain Name System (<acronym class="acronym">DNS</acronym>)</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564837">DNS Fundamentals</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564871">Domains and Domain Names</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567208">Zones</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567285">Authoritative Name Servers</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567526">Caching Name Servers</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567588">Name Servers in Multiple Roles</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564659">DNS Fundamentals</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564693">Domains and Domain Names</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564845">Zones</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567243">Authoritative Name Servers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567416">Caching Name Servers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567546">Name Servers in Multiple Roles</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch02.html">2. <acronym class="acronym">BIND</acronym> Resource Requirements</a></span></dt>
<dd><dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567622">Hardware requirements</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567649">CPU Requirements</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567661">Memory Requirements</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567688">Name Server Intensive Environment Issues</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567699">Supported Operating Systems</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567580">Hardware requirements</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567607">CPU Requirements</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567620">Memory Requirements</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567851">Name Server Intensive Environment Issues</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567862">Supported Operating Systems</a></span></dt>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch03.html">3. Name Server Configuration</a></span></dt>
<dd><dl>
<dt><span class="sect1"><a href="Bv9ARM.ch03.html#sample_configuration">Sample Configurations</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2568004">A Caching-only Name Server</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2568020">An Authoritative-only Name Server</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2567894">A Caching-only Name Server</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2567910">An Authoritative-only Name Server</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568042">Load Balancing</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568465">Name Server Operations</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568001">Load Balancing</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568423">Name Server Operations</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2568470">Tools for Use With the Name Server Daemon</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2570184">Signals</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2568428">Tools for Use With the Name Server Daemon</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2570142">Signals</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch04.html">4. Advanced DNS Features</a></span></dt>
@@ -92,34 +92,34 @@
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#dynamic_update">Dynamic Update</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch04.html#journal">The journal file</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#incremental_zone_transfers">Incremental Zone Transfers (IXFR)</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2570658">Split DNS</a></span></dt>
-<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2570676">Example split DNS setup</a></span></dt></dl></dd>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2570616">Split DNS</a></span></dt>
+<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2570634">Example split DNS setup</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#tsig">TSIG</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571111">Generate Shared Keys for Each Pair of Hosts</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571185">Copying the Shared Secret to Both Machines</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571195">Informing the Servers of the Key's Existence</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571235">Instructing the Server to Use the Key</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571429">TSIG Key Based Access Control</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571474">Errors</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571069">Generate Shared Keys for Each Pair of Hosts</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571143">Copying the Shared Secret to Both Machines</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571154">Informing the Servers of the Key's Existence</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571193">Instructing the Server to Use the Key</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571319">TSIG Key Based Access Control</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571432">Errors</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571488">TKEY</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571673">SIG(0)</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571446">TKEY</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571563">SIG(0)</a></span></dt>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#DNSSEC">DNSSEC</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571741">Generating Keys</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571811">Signing the Zone</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571890">Configuring Servers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571700">Generating Keys</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571769">Signing the Zone</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571848">Configuring Servers</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2572033">IPv6 Support in <acronym class="acronym">BIND</acronym> 9</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571923">IPv6 Support in <acronym class="acronym">BIND</acronym> 9</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572231">Address Lookups Using AAAA Records</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572252">Address to Name Lookups Using Nibble Format</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572189">Address Lookups Using AAAA Records</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572211">Address to Name Lookups Using Nibble Format</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch05.html">5. The <acronym class="acronym">BIND</acronym> 9 Lightweight Resolver</a></span></dt>
<dd><dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch05.html#id2572285">The Lightweight Resolver Library</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch05.html#id2572244">The Lightweight Resolver Library</a></span></dt>
<dt><span class="sect1"><a href="Bv9ARM.ch05.html#lwresd">Running a Resolver Daemon</a></span></dt>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch06.html">6. <acronym class="acronym">BIND</acronym> 9 Configuration Reference</a></span></dt>
@@ -127,86 +127,88 @@
<dt><span class="sect1"><a href="Bv9ARM.ch06.html#configuration_file_elements">Configuration File Elements</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#address_match_lists">Address Match Lists</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2573587">Comment Syntax</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2573477">Comment Syntax</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch06.html#Configuration_File_Grammar">Configuration File Grammar</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574157"><span><strong class="command">acl</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574116"><span><strong class="command">acl</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#acl"><span><strong class="command">acl</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574347"><span><strong class="command">controls</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574306"><span><strong class="command">controls</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#controls_statement_definition_and_usage"><span><strong class="command">controls</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574776"><span><strong class="command">include</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574793"><span><strong class="command">include</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574734"><span><strong class="command">include</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574752"><span><strong class="command">include</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574817"><span><strong class="command">key</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574840"><span><strong class="command">key</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574999"><span><strong class="command">logging</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575193"><span><strong class="command">logging</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574775"><span><strong class="command">key</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574798"><span><strong class="command">key</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575026"><span><strong class="command">logging</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575152"><span><strong class="command">logging</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576505"><span><strong class="command">lwres</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576579"><span><strong class="command">lwres</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576643"><span><strong class="command">masters</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576686"><span><strong class="command">masters</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576464"><span><strong class="command">lwres</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576537"><span><strong class="command">lwres</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576601"><span><strong class="command">masters</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576645"><span><strong class="command">masters</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576701"><span><strong class="command">options</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576660"><span><strong class="command">options</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#options"><span><strong class="command">options</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585163"><span><strong class="command">statistics-channels</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585181"><span><strong class="command">statistics-channels</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#statschannels"><span><strong class="command">statistics-channels</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2584781"><span><strong class="command">statistics-channels</strong></span> Statement Definition and
Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#server_statement_grammar"><span><strong class="command">server</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#server_statement_definition_and_usage"><span><strong class="command">server</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585865"><span><strong class="command">trusted-keys</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585916"><span><strong class="command">trusted-keys</strong></span> Statement Definition
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585533"><span><strong class="command">trusted-keys</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585585"><span><strong class="command">trusted-keys</strong></span> Statement Definition
and Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#view_statement_grammar"><span><strong class="command">view</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585998"><span><strong class="command">view</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2585667"><span><strong class="command">view</strong></span> Statement Definition and Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#zone_statement_grammar"><span><strong class="command">zone</strong></span>
Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2587559"><span><strong class="command">zone</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2587159"><span><strong class="command">zone</strong></span> Statement Definition and Usage</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2589906">Zone File</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2589437">Zone File</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#types_of_resource_records_and_when_to_use_them">Types of Resource Records and When to Use Them</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2591927">Discussion of MX Records</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2591459">Discussion of MX Records</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#Setting_TTLs">Setting TTLs</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2592547">Inverse Mapping in IPv4</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2592674">Other Zone File Directives</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2592862"><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2592147">Inverse Mapping in IPv4</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2592342">Other Zone File Directives</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2592599"><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#zonefile_format">Additional File Formats</a></span></dt>
</dl></dd>
+<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2593067">BIND9 Statistics</a></span></dt>
+<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2593348">Statistics Counters</a></span></dt></dl></dd>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch07.html">7. <acronym class="acronym">BIND</acronym> 9 Security Considerations</a></span></dt>
<dd><dl>
<dt><span class="sect1"><a href="Bv9ARM.ch07.html#Access_Control_Lists">Access Control Lists</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch07.html#id2593546"><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span></a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch07.html#id2596516"><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span></a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2593691">The <span><strong class="command">chroot</strong></span> Environment</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2593751">Using the <span><strong class="command">setuid</strong></span> Function</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2596593">The <span><strong class="command">chroot</strong></span> Environment</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2596652">Using the <span><strong class="command">setuid</strong></span> Function</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch07.html#dynamic_update_security">Dynamic Update Security</a></span></dt>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch08.html">8. Troubleshooting</a></span></dt>
<dd><dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2593831">Common Problems</a></span></dt>
-<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch08.html#id2593836">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2593848">Incrementing and Changing the Serial Number</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2593865">Where Can I Get Help?</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2596732">Common Problems</a></span></dt>
+<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch08.html#id2596738">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2596749">Incrementing and Changing the Serial Number</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2596766">Where Can I Get Help?</a></span></dt>
</dl></dd>
<dt><span class="appendix"><a href="Bv9ARM.ch09.html">A. Appendices</a></span></dt>
<dd><dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2593927">Acknowledgments</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2596828">Acknowledgments</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch09.html#historical_dns_information">A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></a></span></dt></dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2594099">General <acronym class="acronym">DNS</acronym> Reference Information</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2597137">General <acronym class="acronym">DNS</acronym> Reference Information</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch09.html#ipv6addresses">IPv6 addresses (AAAA)</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch09.html#bibliography">Bibliography (and Suggested Reading)</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch09.html#rfcs">Request for Comments (RFCs)</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch09.html#internet_drafts">Internet Drafts</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2597447">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2600348">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="reference"><a href="Bv9ARM.ch10.html">I. Manual pages</a></span></dt>
diff --git a/doc/arm/Bv9ARM.pdf b/doc/arm/Bv9ARM.pdf
index f90da559..a443bc36 100755
--- a/doc/arm/Bv9ARM.pdf
+++ b/doc/arm/Bv9ARM.pdf
@@ -621,389 +621,437 @@ endobj
<< /S /GoTo /D (subsubsection.6.2.16.18) >>
endobj
420 0 obj
-(6.2.16.18 The Statistics File)
+(6.2.16.18 Additional Section Caching)
endobj
421 0 obj
-<< /S /GoTo /D (subsubsection.6.2.16.19) >>
+<< /S /GoTo /D (subsection.6.2.17) >>
endobj
424 0 obj
-(6.2.16.19 Additional Section Caching)
+(6.2.17 statistics-channels Statement Grammar)
endobj
425 0 obj
-<< /S /GoTo /D (subsection.6.2.17) >>
+<< /S /GoTo /D (subsection.6.2.18) >>
endobj
428 0 obj
-(6.2.17 server Statement Grammar)
+(6.2.18 statistics-channels Statement Definition and Usage)
endobj
429 0 obj
-<< /S /GoTo /D (subsection.6.2.18) >>
+<< /S /GoTo /D (subsection.6.2.19) >>
endobj
432 0 obj
-(6.2.18 server Statement Definition and Usage)
+(6.2.19 server Statement Grammar)
endobj
433 0 obj
-<< /S /GoTo /D (subsection.6.2.19) >>
+<< /S /GoTo /D (subsection.6.2.20) >>
endobj
436 0 obj
-(6.2.19 trusted-keys Statement Grammar)
+(6.2.20 server Statement Definition and Usage)
endobj
437 0 obj
-<< /S /GoTo /D (subsection.6.2.20) >>
+<< /S /GoTo /D (subsection.6.2.21) >>
endobj
440 0 obj
-(6.2.20 trusted-keys Statement Definition and Usage)
+(6.2.21 trusted-keys Statement Grammar)
endobj
441 0 obj
-<< /S /GoTo /D (subsection.6.2.21) >>
+<< /S /GoTo /D (subsection.6.2.22) >>
endobj
444 0 obj
-(6.2.21 view Statement Grammar)
+(6.2.22 trusted-keys Statement Definition and Usage)
endobj
445 0 obj
-<< /S /GoTo /D (subsection.6.2.22) >>
+<< /S /GoTo /D (subsection.6.2.23) >>
endobj
448 0 obj
-(6.2.22 view Statement Definition and Usage)
+(6.2.23 view Statement Grammar)
endobj
449 0 obj
-<< /S /GoTo /D (subsection.6.2.23) >>
+<< /S /GoTo /D (subsection.6.2.24) >>
endobj
452 0 obj
-(6.2.23 zone Statement Grammar)
+(6.2.24 view Statement Definition and Usage)
endobj
453 0 obj
-<< /S /GoTo /D (subsection.6.2.24) >>
+<< /S /GoTo /D (subsection.6.2.25) >>
endobj
456 0 obj
-(6.2.24 zone Statement Definition and Usage)
+(6.2.25 zone Statement Grammar)
endobj
457 0 obj
-<< /S /GoTo /D (subsubsection.6.2.24.1) >>
+<< /S /GoTo /D (subsection.6.2.26) >>
endobj
460 0 obj
-(6.2.24.1 Zone Types)
+(6.2.26 zone Statement Definition and Usage)
endobj
461 0 obj
-<< /S /GoTo /D (subsubsection.6.2.24.2) >>
+<< /S /GoTo /D (subsubsection.6.2.26.1) >>
endobj
464 0 obj
-(6.2.24.2 Class)
+(6.2.26.1 Zone Types)
endobj
465 0 obj
-<< /S /GoTo /D (subsubsection.6.2.24.3) >>
+<< /S /GoTo /D (subsubsection.6.2.26.2) >>
endobj
468 0 obj
-(6.2.24.3 Zone Options)
+(6.2.26.2 Class)
endobj
469 0 obj
-<< /S /GoTo /D (subsubsection.6.2.24.4) >>
+<< /S /GoTo /D (subsubsection.6.2.26.3) >>
endobj
472 0 obj
-(6.2.24.4 Dynamic Update Policies)
+(6.2.26.3 Zone Options)
endobj
473 0 obj
-<< /S /GoTo /D (section.6.3) >>
+<< /S /GoTo /D (subsubsection.6.2.26.4) >>
endobj
476 0 obj
-(6.3 Zone File)
+(6.2.26.4 Dynamic Update Policies)
endobj
477 0 obj
-<< /S /GoTo /D (subsection.6.3.1) >>
+<< /S /GoTo /D (section.6.3) >>
endobj
480 0 obj
-(6.3.1 Types of Resource Records and When to Use Them)
+(6.3 Zone File)
endobj
481 0 obj
-<< /S /GoTo /D (subsubsection.6.3.1.1) >>
+<< /S /GoTo /D (subsection.6.3.1) >>
endobj
484 0 obj
-(6.3.1.1 Resource Records)
+(6.3.1 Types of Resource Records and When to Use Them)
endobj
485 0 obj
-<< /S /GoTo /D (subsubsection.6.3.1.2) >>
+<< /S /GoTo /D (subsubsection.6.3.1.1) >>
endobj
488 0 obj
-(6.3.1.2 Textual expression of RRs)
+(6.3.1.1 Resource Records)
endobj
489 0 obj
-<< /S /GoTo /D (subsection.6.3.2) >>
+<< /S /GoTo /D (subsubsection.6.3.1.2) >>
endobj
492 0 obj
-(6.3.2 Discussion of MX Records)
+(6.3.1.2 Textual expression of RRs)
endobj
493 0 obj
-<< /S /GoTo /D (subsection.6.3.3) >>
+<< /S /GoTo /D (subsection.6.3.2) >>
endobj
496 0 obj
-(6.3.3 Setting TTLs)
+(6.3.2 Discussion of MX Records)
endobj
497 0 obj
-<< /S /GoTo /D (subsection.6.3.4) >>
+<< /S /GoTo /D (subsection.6.3.3) >>
endobj
500 0 obj
-(6.3.4 Inverse Mapping in IPv4)
+(6.3.3 Setting TTLs)
endobj
501 0 obj
-<< /S /GoTo /D (subsection.6.3.5) >>
+<< /S /GoTo /D (subsection.6.3.4) >>
endobj
504 0 obj
-(6.3.5 Other Zone File Directives)
+(6.3.4 Inverse Mapping in IPv4)
endobj
505 0 obj
-<< /S /GoTo /D (subsubsection.6.3.5.1) >>
+<< /S /GoTo /D (subsection.6.3.5) >>
endobj
508 0 obj
-(6.3.5.1 The \044ORIGIN Directive)
+(6.3.5 Other Zone File Directives)
endobj
509 0 obj
-<< /S /GoTo /D (subsubsection.6.3.5.2) >>
+<< /S /GoTo /D (subsubsection.6.3.5.1) >>
endobj
512 0 obj
-(6.3.5.2 The \044INCLUDE Directive)
+(6.3.5.1 The \044ORIGIN Directive)
endobj
513 0 obj
-<< /S /GoTo /D (subsubsection.6.3.5.3) >>
+<< /S /GoTo /D (subsubsection.6.3.5.2) >>
endobj
516 0 obj
-(6.3.5.3 The \044TTL Directive)
+(6.3.5.2 The \044INCLUDE Directive)
endobj
517 0 obj
-<< /S /GoTo /D (subsection.6.3.6) >>
+<< /S /GoTo /D (subsubsection.6.3.5.3) >>
endobj
520 0 obj
-(6.3.6 BIND Master File Extension: the \044GENERATE Directive)
+(6.3.5.3 The \044TTL Directive)
endobj
521 0 obj
-<< /S /GoTo /D (subsection.6.3.7) >>
+<< /S /GoTo /D (subsection.6.3.6) >>
endobj
524 0 obj
-(6.3.7 Additional File Formats)
+(6.3.6 BIND Master File Extension: the \044GENERATE Directive)
endobj
525 0 obj
-<< /S /GoTo /D (chapter.7) >>
+<< /S /GoTo /D (subsection.6.3.7) >>
endobj
528 0 obj
-(7 BIND 9 Security Considerations)
+(6.3.7 Additional File Formats)
endobj
529 0 obj
-<< /S /GoTo /D (section.7.1) >>
+<< /S /GoTo /D (section.6.4) >>
endobj
532 0 obj
-(7.1 Access Control Lists)
+(6.4 BIND9 Statistics)
endobj
533 0 obj
-<< /S /GoTo /D (section.7.2) >>
+<< /S /GoTo /D (subsubsection.6.4.0.1) >>
endobj
536 0 obj
-(7.2 Chroot and Setuid)
+(6.4.0.1 The Statistics File)
endobj
537 0 obj
-<< /S /GoTo /D (subsection.7.2.1) >>
+<< /S /GoTo /D (subsection.6.4.1) >>
endobj
540 0 obj
-(7.2.1 The chroot Environment)
+(6.4.1 Statistics Counters)
endobj
541 0 obj
-<< /S /GoTo /D (subsection.7.2.2) >>
+<< /S /GoTo /D (subsubsection.6.4.1.1) >>
endobj
544 0 obj
-(7.2.2 Using the setuid Function)
+(6.4.1.1 Name Server Statistics Counters)
endobj
545 0 obj
-<< /S /GoTo /D (section.7.3) >>
+<< /S /GoTo /D (subsubsection.6.4.1.2) >>
endobj
548 0 obj
-(7.3 Dynamic Update Security)
+(6.4.1.2 Zone Maintenance Statistics Counters)
endobj
549 0 obj
-<< /S /GoTo /D (chapter.8) >>
+<< /S /GoTo /D (subsubsection.6.4.1.3) >>
endobj
552 0 obj
-(8 Troubleshooting)
+(6.4.1.3 Resolver Statistics Counters)
endobj
553 0 obj
-<< /S /GoTo /D (section.8.1) >>
+<< /S /GoTo /D (subsubsection.6.4.1.4) >>
endobj
556 0 obj
-(8.1 Common Problems)
+(6.4.1.4 Compatibility with BIND 8 Counters)
endobj
557 0 obj
-<< /S /GoTo /D (subsection.8.1.1) >>
+<< /S /GoTo /D (chapter.7) >>
endobj
560 0 obj
-(8.1.1 It's not working; how can I figure out what's wrong?)
+(7 BIND 9 Security Considerations)
endobj
561 0 obj
-<< /S /GoTo /D (section.8.2) >>
+<< /S /GoTo /D (section.7.1) >>
endobj
564 0 obj
-(8.2 Incrementing and Changing the Serial Number)
+(7.1 Access Control Lists)
endobj
565 0 obj
-<< /S /GoTo /D (section.8.3) >>
+<< /S /GoTo /D (section.7.2) >>
endobj
568 0 obj
-(8.3 Where Can I Get Help?)
+(7.2 Chroot and Setuid)
endobj
569 0 obj
-<< /S /GoTo /D (appendix.A) >>
+<< /S /GoTo /D (subsection.7.2.1) >>
endobj
572 0 obj
-(A Appendices)
+(7.2.1 The chroot Environment)
endobj
573 0 obj
-<< /S /GoTo /D (section.A.1) >>
+<< /S /GoTo /D (subsection.7.2.2) >>
endobj
576 0 obj
-(A.1 Acknowledgments)
+(7.2.2 Using the setuid Function)
endobj
577 0 obj
-<< /S /GoTo /D (subsection.A.1.1) >>
+<< /S /GoTo /D (section.7.3) >>
endobj
580 0 obj
-(A.1.1 A Brief History of the DNS and BIND)
+(7.3 Dynamic Update Security)
endobj
581 0 obj
-<< /S /GoTo /D (section.A.2) >>
+<< /S /GoTo /D (chapter.8) >>
endobj
584 0 obj
-(A.2 General DNS Reference Information)
+(8 Troubleshooting)
endobj
585 0 obj
-<< /S /GoTo /D (subsection.A.2.1) >>
+<< /S /GoTo /D (section.8.1) >>
endobj
588 0 obj
-(A.2.1 IPv6 addresses \(AAAA\))
+(8.1 Common Problems)
endobj
589 0 obj
-<< /S /GoTo /D (section.A.3) >>
+<< /S /GoTo /D (subsection.8.1.1) >>
endobj
592 0 obj
-(A.3 Bibliography \(and Suggested Reading\))
+(8.1.1 It's not working; how can I figure out what's wrong?)
endobj
593 0 obj
-<< /S /GoTo /D (subsection.A.3.1) >>
+<< /S /GoTo /D (section.8.2) >>
endobj
596 0 obj
-(A.3.1 Request for Comments \(RFCs\))
+(8.2 Incrementing and Changing the Serial Number)
endobj
597 0 obj
-<< /S /GoTo /D (subsection.A.3.2) >>
+<< /S /GoTo /D (section.8.3) >>
endobj
600 0 obj
-(A.3.2 Internet Drafts)
+(8.3 Where Can I Get Help?)
endobj
601 0 obj
-<< /S /GoTo /D (subsection.A.3.3) >>
+<< /S /GoTo /D (appendix.A) >>
endobj
604 0 obj
-(A.3.3 Other Documents About BIND)
+(A Appendices)
endobj
605 0 obj
-<< /S /GoTo /D (appendix.B) >>
+<< /S /GoTo /D (section.A.1) >>
endobj
608 0 obj
-(B Manual pages)
+(A.1 Acknowledgments)
endobj
609 0 obj
-<< /S /GoTo /D (section.B.1) >>
+<< /S /GoTo /D (subsection.A.1.1) >>
endobj
612 0 obj
-(B.1 dig)
+(A.1.1 A Brief History of the DNS and BIND)
endobj
613 0 obj
-<< /S /GoTo /D (section.B.2) >>
+<< /S /GoTo /D (section.A.2) >>
endobj
616 0 obj
-(B.2 host)
+(A.2 General DNS Reference Information)
endobj
617 0 obj
-<< /S /GoTo /D (section.B.3) >>
+<< /S /GoTo /D (subsection.A.2.1) >>
endobj
620 0 obj
-(B.3 dnssec-keygen)
+(A.2.1 IPv6 addresses \(AAAA\))
endobj
621 0 obj
-<< /S /GoTo /D (section.B.4) >>
+<< /S /GoTo /D (section.A.3) >>
endobj
624 0 obj
-(B.4 dnssec-signzone)
+(A.3 Bibliography \(and Suggested Reading\))
endobj
625 0 obj
-<< /S /GoTo /D (section.B.5) >>
+<< /S /GoTo /D (subsection.A.3.1) >>
endobj
628 0 obj
-(B.5 named-checkconf)
+(A.3.1 Request for Comments \(RFCs\))
endobj
629 0 obj
-<< /S /GoTo /D (section.B.6) >>
+<< /S /GoTo /D (subsection.A.3.2) >>
endobj
632 0 obj
-(B.6 named-checkzone)
+(A.3.2 Internet Drafts)
endobj
633 0 obj
-<< /S /GoTo /D (section.B.7) >>
+<< /S /GoTo /D (subsection.A.3.3) >>
endobj
636 0 obj
-(B.7 named)
+(A.3.3 Other Documents About BIND)
endobj
637 0 obj
-<< /S /GoTo /D (section.B.8) >>
+<< /S /GoTo /D (appendix.B) >>
endobj
640 0 obj
-(B.8 rndc)
+(B Manual pages)
endobj
641 0 obj
-<< /S /GoTo /D (section.B.9) >>
+<< /S /GoTo /D (section.B.1) >>
endobj
644 0 obj
-(B.9 rndc.conf)
+(B.1 dig)
endobj
645 0 obj
-<< /S /GoTo /D (section.B.10) >>
+<< /S /GoTo /D (section.B.2) >>
endobj
648 0 obj
-(B.10 rndc-confgen)
+(B.2 host)
endobj
649 0 obj
-<< /S /GoTo /D [650 0 R /FitH ] >>
+<< /S /GoTo /D (section.B.3) >>
+endobj
+652 0 obj
+(B.3 dnssec-keygen)
+endobj
+653 0 obj
+<< /S /GoTo /D (section.B.4) >>
+endobj
+656 0 obj
+(B.4 dnssec-signzone)
+endobj
+657 0 obj
+<< /S /GoTo /D (section.B.5) >>
+endobj
+660 0 obj
+(B.5 named-checkconf)
+endobj
+661 0 obj
+<< /S /GoTo /D (section.B.6) >>
+endobj
+664 0 obj
+(B.6 named-checkzone)
+endobj
+665 0 obj
+<< /S /GoTo /D (section.B.7) >>
+endobj
+668 0 obj
+(B.7 named)
+endobj
+669 0 obj
+<< /S /GoTo /D (section.B.8) >>
+endobj
+672 0 obj
+(B.8 rndc)
+endobj
+673 0 obj
+<< /S /GoTo /D (section.B.9) >>
endobj
-653 0 obj <<
+676 0 obj
+(B.9 rndc.conf)
+endobj
+677 0 obj
+<< /S /GoTo /D (section.B.10) >>
+endobj
+680 0 obj
+(B.10 rndc-confgen)
+endobj
+681 0 obj
+<< /S /GoTo /D [682 0 R /FitH ] >>
+endobj
+685 0 obj <<
/Length 236
/Filter /FlateDecode
>>
stream
xÚÁJA †ïó9¶‡M'™d2s´T¥‚Beoâai·Rp·t­ïïÔÕ*êArÉÿ‘ü /A}È–ՓºsžŠvíèƒ ¨B)þP+!ÃlQ¡bJÕÂwìNì1úÈP©)&>áóÚÍ®˜€-A½bEM¦pæêÍÃd¾¼[L+V?ÉcºØt»~÷ršã~[÷í¶Ú~ÝNë a¤(±ø˘’å÷9·MÿÚ<Ÿ
endobj
-650 0 obj <<
+682 0 obj <<
/Type /Page
-/Contents 653 0 R
-/Resources 652 0 R
+/Contents 685 0 R
+/Resources 684 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 659 0 R
+/Parent 691 0 R
>> endobj
-651 0 obj <<
+683 0 obj <<
/Type /XObject
/Subtype /Form
/FormType 1
/PTEX.FileName (./isc-logo.pdf)
/PTEX.PageNumber 1
-/PTEX.InfoDict 660 0 R
+/PTEX.InfoDict 692 0 R
/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000]
/BBox [0.00000000 0.00000000 255.00000000 149.00000000]
/Resources <<
/ProcSet [ /PDF /Text ]
/ColorSpace <<
-/R15 661 0 R
-/R9 662 0 R
-/R11 663 0 R
-/R13 664 0 R
+/R15 693 0 R
+/R9 694 0 R
+/R11 695 0 R
+/R13 696 0 R
>>/ExtGState <<
-/R17 665 0 R
-/R8 666 0 R
->>/Font << /R19 667 0 R >>
+/R17 697 0 R
+/R8 698 0 R
+>>/Font << /R19 699 0 R >>
>>
-/Length 668 0 R
+/Length 700 0 R
/Filter /FlateDecode
>>
stream
@@ -1019,7 +1067,7 @@ xœu˜;“d9…ýû+®Ùe´R©— lG`XËkz#†10gwÙ~6ßÉ[53}+ˆ}tI%åóäÉT½ßs*{Ö?·¿××í'¿ûŸ?
FÑÞIca­Ç0Ú) ¹A¿+ÇÀº ¸|-Tuùa>‚s:½¯•~K“ÒÞV׋„OÒAŠI… ɪÁr2Q“°Ø¨Á>.z
ÏÆ狼eÇNdæÌdï"gK2cëÉ—GoOá8GëÏϦ:B Àht[
endobj
-660 0 obj
+692 0 obj
<<
/Producer (AFPL Ghostscript 8.51)
/CreationDate (D:20050606145621)
@@ -1029,46 +1077,46 @@ endobj
/Author (Douglas E. Appelt)
>>
endobj
-661 0 obj
-[/Separation/PANTONE#201805#20C/DeviceCMYK 669 0 R]
+693 0 obj
+[/Separation/PANTONE#201805#20C/DeviceCMYK 701 0 R]
endobj
-662 0 obj
-[/Separation/PANTONE#207506#20C/DeviceCMYK 670 0 R]
+694 0 obj
+[/Separation/PANTONE#207506#20C/DeviceCMYK 702 0 R]
endobj
-663 0 obj
-[/Separation/PANTONE#20301#20C/DeviceCMYK 671 0 R]
+695 0 obj
+[/Separation/PANTONE#20301#20C/DeviceCMYK 703 0 R]
endobj
-664 0 obj
-[/Separation/PANTONE#20871#20C/DeviceCMYK 672 0 R]
+696 0 obj
+[/Separation/PANTONE#20871#20C/DeviceCMYK 704 0 R]
endobj
-665 0 obj
+697 0 obj
<<
/Type /ExtGState
/SA true
>>
endobj
-666 0 obj
+698 0 obj
<<
/Type /ExtGState
/OPM 1
>>
endobj
-667 0 obj
+699 0 obj
<<
/BaseFont /NVXWCK#2BTrajanPro-Bold
-/FontDescriptor 673 0 R
+/FontDescriptor 705 0 R
/Type /Font
/FirstChar 67
/LastChar 136
/Widths [ 800 0 0 0 0 0 452 0 0 0 0 0 0 0 0 0 582 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 0 0 0 0 0 0 0 841 633 576 686 590 540 923 827 407 760]
-/Encoding 674 0 R
+/Encoding 706 0 R
/Subtype /Type1
>>
endobj
-668 0 obj
+700 0 obj
2362
endobj
-669 0 obj
+701 0 obj
<<
/Filter /FlateDecode
/FunctionType 4
@@ -1079,7 +1127,7 @@ endobj
stream
xœ«N)-P0PÈ-ÍQH­HÎP
endobj
-670 0 obj
+702 0 obj
<<
/Filter /FlateDecode
/FunctionType 4
@@ -1090,7 +1138,7 @@ endobj
stream
xœ«N)-P0PÈ-ÍQH­HÎP
endobj
-671 0 obj
+703 0 obj
<<
/Filter /FlateDecode
/FunctionType 4
@@ -1101,7 +1149,7 @@ endobj
stream
xœ«N)-P0TÈ-ÍQH­HÎP
endobj
-672 0 obj
+704 0 obj
<<
/Filter /FlateDecode
/FunctionType 4
@@ -1112,7 +1160,7 @@ endobj
stream
xœ«N)-P0Ð365³TÈ-ÍQH­HÎP€Š™X ‹™›#Ä ô -,ŒÀüZ
endobj
-673 0 obj
+705 0 obj
<<
/Type /FontDescriptor
/FontName /NVXWCK#2BTrajanPro-Bold
@@ -1125,17 +1173,17 @@ endobj
/StemV 138
/MissingWidth 500
/CharSet (/Msmall/C/Ysmall/Nsmall/Osmall/Esmall/Rsmall/S/Ssmall/I/Tsmall/Ismall/Usmall)
-/FontFile3 675 0 R
+/FontFile3 707 0 R
>>
endobj
-674 0 obj
+706 0 obj
<<
/Type /Encoding
/BaseEncoding /WinAnsiEncoding
/Differences [ 127/Nsmall/Tsmall/Esmall/Rsmall/Ysmall/Ssmall/Msmall/Osmall/Ismall/Usmall]
>>
endobj
-675 0 obj
+707 0 obj
<<
/Filter /FlateDecode
/Subtype /Type1C
@@ -1158,42 +1206,44 @@ x¸ \3§gA34–ITž-‹R8õ-ǵÛö2ªWuÉ~Á!"(0Š*FÂ͢ùĨ¸SˆˆoÊQPˆ0¦šåiFäݸVN^_!Ô‚–b
ȼLçÇ<;— *X³«¥×ÛGâ_Y1ETïƒ4ˆÒ-U…_>´üØ¢æ}õï÷v¼ §ádù#¹rÛŸå¥@ÔÁ\5l…hð<8Ús·
»O·Øèv61Bá5*È<6ÞÍ,‡bh‘˜¶ž\Î]Çé#¹#ØÔÍ1Oúñ°Ï¤5oÂ]цÆß4}h˜î0$å,6ü¼”A,¯?/å;Rôcy6Ò½UJ¿§Y½X^é¶ÙÉŸ‡‹º–2¸K|o½Ø”/Ȩ/ƒ( Â2Ð#žNMKðrˆ rœÛf9ËyZ¸Ú}$«Ö õ–©)  h`iÎGàAç÷´€H+Šˆ…Õ&*áX$žèìVŽhª”—›¾÷‡A1Ý£¤œÏ0‰÷—Hi éƒw~I(Áö2;à]¸L ™x4[¡OÜ,¾®ÆûÂQQ°”FdQ“ƒ¢¬„%\î¢Åâ:Ó;ÈÑ”ÌEb1ž’¡ˆÿ§=$¸¥?Iš¿CÐõ3¾C=VÐ'>·¯ôÌÒ+Ü~8 ç#;úÁ_£×á*qň+ô 8®‚ãÆpêŒ_YR”¾d%a ç¡H\eÄõãDf£Ñ¨­ŽR[kφG¸ù/WT®ò•A5”H¥ÛVoo8hnû)¼ÞÃDn…ñëqÌzfåhý&þcQbµXÇß‚çLŽúõ;{²Ðñðué¿ÊÛÙ†-©[SÄ-Û¼ÔyubÜñhüm´œ4^Ë™ ääšLÿQ‹¡endstream
endobj
-654 0 obj <<
-/D [650 0 R /XYZ 85.0394 794.5015 null]
+686 0 obj <<
+/D [682 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-655 0 obj <<
-/D [650 0 R /XYZ 85.0394 769.5949 null]
+687 0 obj <<
+/D [682 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-652 0 obj <<
-/Font << /F21 658 0 R >>
-/XObject << /Im1 651 0 R >>
+684 0 obj <<
+/Font << /F21 690 0 R >>
+/XObject << /Im1 683 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-678 0 obj <<
-/Length 994
+710 0 obj <<
+/Length 999
/Filter /FlateDecode
>>
stream
-xÚµVË’¢JÝû,5¢­©¯Z҈ʂ83³°»‰hÅ+8ý÷7¡ªDÐÛ›‰.*«ò˜yòd@4 ?¢&29åšÅud`bh›ý
-Qm]»ÀÒíÏ¡[?NùËk5ú~Õ Œ,Ìr À¦v|™ý*Ô˜"ËäV£ŠÂýí´›•"("6 Š±þ0SצњfkZÂòUv:d•Ø%e•íK±q‹CYœªü¼PØ ÁÀÂÀ¿(ÕýÄ­Ø’šÔÀK/‚F‘aš¦féZÏÏÕUèñ5üŽºÌ‚¾Z¼ú_êÒÿS]ÜêHZ“¶&»«n±«Þק±‡Y_bÔ×ÏĈSÓÖ,Ê€'ŸÉ§Àãkô­z¦8¶I³.g™öyYæÅApª
-±žËLÖ³yG„¡Üï‹m¾ëœ¬[aló²:åÏçJX½æršÊ›âwÅIýûCÇóéX”ÒýžW¯ÂR¸ú¤8K1w™ÄA‚ºëpßAÜ0hSÚk&ò=Ëø/§54d+Igñ'ßf[Åv])KF_?²V1eÍöPTù&ëÕßÖ{ìÉÚÙZ•Kÿúí­©ƒpšTß„ëJ wž•ÍÀàbŽ˜Îêb-ĵH:÷ä˜EÓôiÄéЉ剟ˆuGßý‰7»úæ:‰BÔ;a;áDºÂ˜€8þB‚ †Ì;aê{Òùä§saÅÞ̉'âJÂó•‘nIi­~$ é\Q¼C>tƒÕÄg½äþbøª–{L¢©X^ìÎÁ1²ô¡óè~ú£-´fg"®Û–bGvS? ½$AŠƒXCÉ×ûîA<AxÞ2Rz=Jêï<ÒžF±Ê*Ó'KÏõàAi{nÃQ=mÛ#Ñ
-½YàϼÐõº™¢&ró°Ðµ é¶\ d<b­’ëœ2²ûÉE‹h•v©D=Ú@-ô®(·WãrWA NkëË—^ ópÚz¦ŸÝš›7‰úôbª¿ˆî~x©|ýá5VÙƺ…˜mÓûo"jÃËbRÍ{õ†8Ì9e&½Ãü_®…dµendstream
+xÚµV]“¢:}÷Wð¨UC6|å‘AT¶\ÀÚÚÝGq†ªQ¼‚;5ÿþ6$Qï¼lÝò!ô±ûôI'„h~D3-dqÊ5›ÈÄÄÔÖ»Ö^À7‰ÁšŽãNëügðó7Ö6
+;IgÒÎdwÕ-·õûê8"Î0¿–]ëgaÄ©åh6eÀŒÏäS`ý}«že"ŽÒÅlÊYäÇ]QUE¹œêRŒ§*—õ¬AÞ!d(ç»rSl{+«ýF›¢ªÅó©–Ö¯…ì¦ê¦ømyTÿþÆát<”•t¿õ«°®Y)ORÌm.q Ùu8øŒ€„ nš´-í5ùžeü—ã
+6d#IZgù§ØäÅvU+KF_=—òNÑeít_ÖÅ:¿ª¿«÷p%k~8ä+YT!ý«··¶Âؤæ$\V¹‹¼j›sÄŒæR"6âŒÚ-$›ù²ÍâIö4âtè&r%HŸHâïÁØ‹YsrÝT!š™°Ýh¬=aŒÁ
+Ý`.Án
+CfIÜ( |é|
+²™°ê&cq$á¢e¤_RÖ¨ h6Sï¼p9¢éUò`¾UË=&ñDŒs?ñfàÙÆÐ}  ûÑÚ°³7[±#-»IE~š"ÅAŒ‘äë÷!ž <ë)½%õ0pCiOâDe•éÓ…ïnø 4N|¯å¨nÛèf B´ @029ç}=½8JýoK AeLwîNÏr\çïyŸfn“(Kc¨-Q˜.Ãvõ¬þ$‰ç²¶8ítnXa÷âÕ/S_•'·{ÐçM b§Š‡œôewÕèeAõwÊη'SäOÃ`êGžßÏ·‘ÛËÂ@Ô!¤¿å¢!“³¡àx™^攑Ý$HÏZÄˬO%¾¢ Ô"ÿ‚rw4ÎgêmmsøáÐqá'Ð<s·«gòÙ©¹ù’¨73Qó4ºûSùþú¦«lºa#æ8ôþ—ˆ:ðŲٙTû]½!}N™Eï0ÿýžfendstream
endobj
-677 0 obj <<
+709 0 obj <<
/Type /Page
-/Contents 678 0 R
-/Resources 676 0 R
+/Contents 710 0 R
+/Resources 708 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 659 0 R
+/Parent 691 0 R
>> endobj
-679 0 obj <<
-/D [677 0 R /XYZ 56.6929 794.5015 null]
+711 0 obj <<
+/D [709 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-676 0 obj <<
-/Font << /F23 682 0 R /F14 685 0 R >>
+708 0 obj <<
+/Font << /F23 714 0 R /F14 717 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-688 0 obj <<
+720 0 obj <<
/Length 2891
/Filter /FlateDecode
>>
@@ -1213,1307 +1263,1364 @@ W±ïëå*¯úoÞæ®x­]Δܫ!$j2È¢
M…­æ:h¾nêãô¨ýèá·oðÐkƒh—#öùlk…lMfR,`5("qP,Þ„b‰Ðø˜Ž~]í»=Ãמ,Åzž%húg°º
ÁîGÓäm2ƒÅREŽ7XD‚ ˆ \@pÁ,tûµDÀ'/œÕ½ÊýØø@Á_™'Hûd !E–•B*Åéö®ÒŒ‘@aaëêdz¿µÍ:ê°uõÕ¶HA‰©”!;2¬3ÁX$1Ò5–$LCK¢[ÎÂéÌù›ödŽ÷ÇršgľڀŠL% Ù¤a½ Ò"AP‡…r=|Ê?SRxÐRèWywqqvê:ûñÌ7ƒÊ'*SƒVZâï<Ž`¨ðwæ2ciìÈÛÕ÷ Ε[~©‘&Å3çë™SÿÀóøóp%ðö?ž­®Bendstream
endobj
-687 0 obj <<
+719 0 obj <<
/Type /Page
-/Contents 688 0 R
-/Resources 686 0 R
+/Contents 720 0 R
+/Resources 718 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 659 0 R
-/Annots [ 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R ]
+/Parent 691 0 R
+/Annots [ 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R ]
>> endobj
-691 0 obj <<
+723 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 688.709 539.579 697.2967]
/Subtype /Link
/A << /S /GoTo /D (chapter.1) >>
>> endobj
-692 0 obj <<
+724 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 676.5858 539.579 685.4425]
/Subtype /Link
/A << /S /GoTo /D (section.1.1) >>
>> endobj
-693 0 obj <<
+725 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 664.4876 539.579 673.3442]
/Subtype /Link
/A << /S /GoTo /D (section.1.2) >>
>> endobj
-694 0 obj <<
+726 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 652.3894 539.579 661.246]
/Subtype /Link
/A << /S /GoTo /D (section.1.3) >>
>> endobj
-695 0 obj <<
+727 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 640.1914 539.579 649.1477]
/Subtype /Link
/A << /S /GoTo /D (section.1.4) >>
>> endobj
-696 0 obj <<
+728 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 628.0932 539.579 637.0495]
/Subtype /Link
/A << /S /GoTo /D (subsection.1.4.1) >>
>> endobj
-697 0 obj <<
+729 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 615.995 539.579 624.9512]
/Subtype /Link
/A << /S /GoTo /D (subsection.1.4.2) >>
>> endobj
-698 0 obj <<
+730 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 603.8967 539.579 612.853]
/Subtype /Link
/A << /S /GoTo /D (subsection.1.4.3) >>
>> endobj
-699 0 obj <<
+731 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 591.7985 539.579 600.7547]
/Subtype /Link
/A << /S /GoTo /D (subsection.1.4.4) >>
>> endobj
-700 0 obj <<
+732 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 579.7002 539.579 588.6565]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.1.4.4.1) >>
>> endobj
-701 0 obj <<
+733 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 567.6019 539.579 576.5582]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.1.4.4.2) >>
>> endobj
-702 0 obj <<
+734 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 555.5037 539.579 564.46]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.1.4.4.3) >>
>> endobj
-703 0 obj <<
+735 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 543.4055 539.579 552.5112]
/Subtype /Link
/A << /S /GoTo /D (subsection.1.4.5) >>
>> endobj
-704 0 obj <<
+736 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 531.3072 539.579 540.413]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.1.4.5.1) >>
>> endobj
-705 0 obj <<
+737 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 519.209 539.579 528.3147]
/Subtype /Link
/A << /S /GoTo /D (subsection.1.4.6) >>
>> endobj
-706 0 obj <<
+738 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 496.7003 539.579 505.4125]
/Subtype /Link
/A << /S /GoTo /D (chapter.2) >>
>> endobj
-707 0 obj <<
+739 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 484.5772 539.579 493.5832]
/Subtype /Link
/A << /S /GoTo /D (section.2.1) >>
>> endobj
-708 0 obj <<
+740 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 472.4789 539.579 481.485]
/Subtype /Link
/A << /S /GoTo /D (section.2.2) >>
>> endobj
-709 0 obj <<
+741 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 460.3806 539.579 469.3867]
/Subtype /Link
/A << /S /GoTo /D (section.2.3) >>
>> endobj
-710 0 obj <<
+742 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 448.2824 539.579 457.2885]
/Subtype /Link
/A << /S /GoTo /D (section.2.4) >>
>> endobj
-711 0 obj <<
+743 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 436.1841 539.579 445.1902]
/Subtype /Link
/A << /S /GoTo /D (section.2.5) >>
>> endobj
-712 0 obj <<
+744 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 413.4314 539.579 422.288]
/Subtype /Link
/A << /S /GoTo /D (chapter.3) >>
>> endobj
-713 0 obj <<
+745 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 401.353 539.579 410.4588]
/Subtype /Link
/A << /S /GoTo /D (section.3.1) >>
>> endobj
-714 0 obj <<
+746 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 389.2548 539.579 398.3605]
/Subtype /Link
/A << /S /GoTo /D (subsection.3.1.1) >>
>> endobj
-715 0 obj <<
+747 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 377.1565 539.579 386.2623]
/Subtype /Link
/A << /S /GoTo /D (subsection.3.1.2) >>
>> endobj
-716 0 obj <<
+748 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 365.1579 539.579 374.164]
/Subtype /Link
/A << /S /GoTo /D (section.3.2) >>
>> endobj
-717 0 obj <<
+749 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 353.0597 539.579 362.0658]
/Subtype /Link
/A << /S /GoTo /D (section.3.3) >>
>> endobj
-718 0 obj <<
+750 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 340.9614 539.579 349.9675]
/Subtype /Link
/A << /S /GoTo /D (subsection.3.3.1) >>
>> endobj
-719 0 obj <<
+751 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 328.7635 539.579 337.8693]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.3.3.1.1) >>
>> endobj
-720 0 obj <<
+752 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 316.6653 539.579 325.771]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.3.3.1.2) >>
>> endobj
-721 0 obj <<
+753 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 304.567 539.579 313.6728]
/Subtype /Link
/A << /S /GoTo /D (subsection.3.3.2) >>
>> endobj
-722 0 obj <<
+754 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 281.9139 539.579 290.7706]
/Subtype /Link
/A << /S /GoTo /D (chapter.4) >>
>> endobj
-723 0 obj <<
+755 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 269.8356 539.579 278.9413]
/Subtype /Link
/A << /S /GoTo /D (section.4.1) >>
>> endobj
-724 0 obj <<
+756 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 257.7373 539.579 266.8431]
/Subtype /Link
/A << /S /GoTo /D (section.4.2) >>
>> endobj
-725 0 obj <<
+757 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 245.6391 539.579 254.7448]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.2.1) >>
>> endobj
-726 0 obj <<
+758 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 233.5408 539.579 242.4971]
/Subtype /Link
/A << /S /GoTo /D (section.4.3) >>
>> endobj
-727 0 obj <<
+759 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 221.4426 539.579 230.3988]
/Subtype /Link
/A << /S /GoTo /D (section.4.4) >>
>> endobj
-728 0 obj <<
+760 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 209.3443 539.579 218.3006]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.4.1) >>
>> endobj
-729 0 obj <<
+761 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 197.2461 539.579 206.2023]
/Subtype /Link
/A << /S /GoTo /D (section.4.5) >>
>> endobj
-730 0 obj <<
+762 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 185.1478 539.579 194.1041]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.5.1) >>
>> endobj
-731 0 obj <<
+763 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 173.0496 539.579 182.0058]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.4.5.1.1) >>
>> endobj
-732 0 obj <<
+764 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 161.051 539.579 170.0571]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.4.5.1.2) >>
>> endobj
-733 0 obj <<
+765 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 148.9527 539.579 157.9588]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.5.2) >>
>> endobj
-734 0 obj <<
+766 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 136.8545 539.579 145.8606]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.5.3) >>
>> endobj
-735 0 obj <<
+767 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 124.7562 539.579 133.7623]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.5.4) >>
>> endobj
-736 0 obj <<
+768 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 112.5583 539.579 121.5146]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.5.5) >>
>> endobj
-737 0 obj <<
+769 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 100.4601 539.579 109.4163]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.5.6) >>
>> endobj
-738 0 obj <<
+770 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 88.3618 539.579 97.3181]
/Subtype /Link
/A << /S /GoTo /D (section.4.6) >>
>> endobj
-739 0 obj <<
+771 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 76.2636 539.579 85.2199]
/Subtype /Link
/A << /S /GoTo /D (section.4.7) >>
>> endobj
-740 0 obj <<
+772 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 64.1653 539.579 73.1216]
/Subtype /Link
/A << /S /GoTo /D (section.4.8) >>
>> endobj
-689 0 obj <<
-/D [687 0 R /XYZ 85.0394 794.5015 null]
+721 0 obj <<
+/D [719 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-690 0 obj <<
-/D [687 0 R /XYZ 85.0394 711.9273 null]
+722 0 obj <<
+/D [719 0 R /XYZ 85.0394 711.9273 null]
>> endobj
-686 0 obj <<
-/Font << /F21 658 0 R /F23 682 0 R >>
+718 0 obj <<
+/Font << /F21 690 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-743 0 obj <<
-/Length 3151
+775 0 obj <<
+/Length 3169
/Filter /FlateDecode
>>
stream
-xÚí[w·Çßõ)ø(=ÅýòèkNÒÖvlõ¥iÖÔZæ ÉUI*®ûé‹å.€Y;ÚȵD:Çeîì çÿ#ƒ½± õÿ±‰ÒD;î&ÆI¢(S“ÙòŒN®ý{?œ±~›iØh
-·z~yö§×ÂLqšëÉ姉TŠpµÛ™%ÔZ6¹¼úåüÅÛ7—¯Þ\~¸øõò§³W—q¯Ð3£¢Ýå?Ï~ù•N®|
- ÷ÕÚß«×{qõsq`¬ Þ+ÒM©Ž¬ðž•óëUeû¹î^ü½YùW†ê1(1!«ÅÄ
-&ŒŸ{L¡ ¸ŒrrYÌ 0Ä8ZaœdâÀ8A½NŒlOÀŽ˜¨ƒ˜ÌW³ÅíU£DãØ¡ÉŽeü¨æÉ!ÃÅð$;Œ Ÿ?#6Fæ:€£}MÒ:ÍiôC‘sx|ùÖÇóÿà“5b*‹†#P* ’L%¨÷€‰¢DÐI™ƒ˜üVÍM}} rV\„°§Uߘóbž€!ÆÔã)Æê=ð$,4:ö!p:<â(úô:©Úbj’ NŒŸ–Ÿ CsˆážÃ2î 2‹æúº=“,S¨Œòœ:´ž£äQmS\Œ0ÄØbðdâÀèA½|˜ô›;–éCñs‰Îÿç,«?¬á¹,æbœ@­0N2q`œ ÞãQ&I9áÔ8@J{<Òö§-ïC£©ïªe˜õÎ>W«U[õóƒœTJ÷Û½û¼®6ž-øqÍjBz‹á†<P>1~q@. Ô{„G8‹íT»ƒxü@rݬs3I‰¶æ<’Ú£ªP1½¥ð@Cž|’ŽÂ“‹÷ÞW(a,aR‚
-uøhÕâ˺Î-ôq_Ÿ",cÓ®ô÷Œé.F b(A9åøi½¹80”Pï%­==”0þ (žéHæžÐèÒZŒ 0IJÉñ3örq`È Þ2JjOÈ>Rµ¬6ÛöúøüüX:}°¿ÒÇU½BŽ‹ù†?PCŒŸL?¨÷Àä„J§?ò¡ø¹OåssYÌ 0Ä8ZaœdâÀ8A½ND;á…ÝÕáCUÍM+õ&ÀÁú½<TÅŽkjr\Ì0ÄøbüdâÀøA½~˜!ÎjP§ôCñsŸVòQ×£ËbN€!Æ ÔJŽÏÅq‚zO­8UÄ) *’ë8Ï›fQW½¨o{:¦J¸#>ÚÓU 0Ä`€rÈñE½\ ¨÷w‚8Î-„¡_—yݬ¿TÝVv—KÊO— ÙˆÙ+e"l ÔQã½r.„ Ü{bÃújá`ë£Û»‚µl¼¼­ÓͶšývçŽ`âû»dé[ 1UÅ
-˜1oÅT
-¨‹¿ð(Fê=Q!1zØ}˜ŽŠî.´-—Žž¯«ÕæÓnR¡ ;aWŒ0Ä°€Â¨ñ¦4†ê=aÁ1b؇ؾ)­ÂâÂËwÝ‹wñ£ý-W,WÇÅBÈV1 Àcª¡Æ{Ò\ ¨÷ÄuÄP6(®cáíÍàNç¾n¶õ2Ý
-ívWJfñzËùŽ©×:eL@±¼À“&“7&/ê=ÊËœ!Z;9X¢¾øÇ>ò †é'Þ8Ä•
-¦bÍ¡ç·ýý•õÑÞ § –>Ŭ$; (Öø¡¯L(˜ëÄ WDš;Šî@y~;_l§áÑ&ЯÌWŸv"ˆgEü»YµëßƸGy¶LÌB±¾ÀxåñÕé\˜Ä¨÷¤1DÊ;=ˆÉiüjy³ýšž“ÕÑæ8Ž_Å$#
+xÚí[wÛ¸Çßý)ôh?Åýò˜ûɶM²±ûÒí>02#ëD]INÖýôEZàÈhãlli÷ìÚ‰9œñüÂ`@‚d#êÿe#¥‰vÜŒ“DQ¦F“Å MýÏÞœ°ö˜q8h z~qò—×ÂŒqšëÑÅç‘TŠpµ=™%ÔZ6º¸üíôÅûw¯Þ]œŸý~ñËÉ«‹xVè™QQŸòß'¿ýNG—>€_N(ΪÑ7ÿJ˜s|´8‘J%…3?9?ù5žütkšüM%\hžøU¸
+vch¸«Öîùk½¸Þ‰#¨ŸŠcõX‘†hJud…·¬œÏ¦ËÊæªl¾ùgµôߪĠĄ¬f 1b j1‰80bPÒÖEbDKÌ‹jù/Jùôf¹9/W_ËU=Æ0q¨¨ 2ò˜Í0Ä:q3ÌH"ŒÔ»a~ÈѾ<r_Õ„á-$Î#B=o?|Õ-7××ÕjÓüa¶l¾>ûîeó7pœ=ÞAæ‡
+%
+î½År¢­`
+‰80Pï¡¿U¢.0:~¿þöͪX,ŠzõȈc{{—Ñl\€!† TLÈa\q`¸ ÞÃ4„s¢¸ •¥®+ÞýÁˆµTzõQÅdÞÓ‚áŒÛö˜óM±)»iL¤Ëp{ìcγy†OPS¡†yJÄñ„z<ùÃ¥'þ8í/eÖ±§7 µ©Í¦¦³Ã ÂaÌì!ƒ¹n‰‘Ωc#ĉ؋̤ZnVÕ|àF8B™à{†!eÝ“††Ð‰9Îe"ðô4DèIÅàƒ{üX?÷宫`òÁø¹ÇZñÇ€Ë '!—Ùœ
+©Í¦¦³Ã ‰áÛòA`È`®1ÜsbX‡ŒÛ‹Ì¼šNë;É…Êø!Ï©}ë9JÔ݆1ÅÙè
+úlÄìå² 6zê¨á^9Âî½cÃújá`ë£ë§‚Õl¼¼)æãõ¦˜|¹óD0ñómYúƒDLU6ÀJ¡†g©80PïÚ«\¯bÈ„g“IÜ
+ý¢¾Á®/ªy]4Žûž»Äec 1, 0‰80,PïÊËM¯v¨‹·KßÀ~.<gcMÙqûbÀl<€!†H ïHJÅázïðŠ§ÄC7xüzSÖ/Ú>Ð >PAs¤"æ-›
+`ˆQuQÃRq`T Þ;*„ F÷»ÓPÑ<…¶†ââÌÑÓU±\ÞN*”aG,bâ²±
endobj
-742 0 obj <<
+774 0 obj <<
/Type /Page
-/Contents 743 0 R
-/Resources 741 0 R
+/Contents 775 0 R
+/Resources 773 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 659 0 R
-/Annots [ 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R ]
+/Parent 691 0 R
+/Annots [ 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R ]
>> endobj
-748 0 obj <<
+780 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 758.4766 511.2325 767.4329]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.8.1) >>
>> endobj
-749 0 obj <<
+781 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 746.445 511.2325 755.4012]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.8.2) >>
>> endobj
-750 0 obj <<
+782 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 734.5129 511.2325 743.3696]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.8.3) >>
>> endobj
-751 0 obj <<
+783 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 722.3816 511.2325 731.3379]
/Subtype /Link
/A << /S /GoTo /D (section.4.9) >>
>> endobj
-752 0 obj <<
+784 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 710.3499 511.2325 719.3062]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.1) >>
>> endobj
-753 0 obj <<
+785 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 698.3182 511.2325 707.2745]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.2) >>
>> endobj
-754 0 obj <<
+786 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 675.998 511.2325 684.7301]
/Subtype /Link
/A << /S /GoTo /D (chapter.5) >>
>> endobj
-755 0 obj <<
+787 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 663.9862 511.2325 672.9425]
/Subtype /Link
/A << /S /GoTo /D (section.5.1) >>
>> endobj
-756 0 obj <<
+788 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 651.9545 511.2325 660.9108]
/Subtype /Link
/A << /S /GoTo /D (section.5.2) >>
>> endobj
-757 0 obj <<
+789 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 629.6343 511.2325 638.4909]
/Subtype /Link
/A << /S /GoTo /D (chapter.6) >>
>> endobj
-758 0 obj <<
+790 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 617.6225 511.2325 626.7282]
/Subtype /Link
/A << /S /GoTo /D (section.6.1) >>
>> endobj
-759 0 obj <<
+791 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 605.5908 511.2325 614.5471]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.1.1) >>
>> endobj
-760 0 obj <<
+792 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 593.5591 511.2325 602.5154]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.1.1.1) >>
>> endobj
-761 0 obj <<
+793 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 581.5275 511.2325 590.4837]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.1.1.2) >>
>> endobj
-762 0 obj <<
+794 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 569.4958 511.2325 578.4521]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.1.2) >>
>> endobj
-763 0 obj <<
+795 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 557.4641 511.2325 566.4204]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.1.2.1) >>
>> endobj
-764 0 obj <<
+796 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 545.4324 511.2325 554.3887]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.1.2.2) >>
>> endobj
-765 0 obj <<
+797 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 533.4007 511.2325 542.5065]
/Subtype /Link
/A << /S /GoTo /D (section.6.2) >>
>> endobj
-766 0 obj <<
+798 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 521.3691 511.2325 530.3254]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.1) >>
>> endobj
-767 0 obj <<
+799 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 509.3374 511.2325 518.2937]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.2) >>
>> endobj
-768 0 obj <<
+800 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 497.3057 511.2325 506.262]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.3) >>
>> endobj
-769 0 obj <<
+801 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 485.274 511.2325 494.2303]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.4) >>
>> endobj
-770 0 obj <<
+802 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 473.2424 511.2325 482.1986]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.5) >>
>> endobj
-771 0 obj <<
+803 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 461.2107 511.2325 470.167]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.6) >>
>> endobj
-772 0 obj <<
+804 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 449.179 511.2325 458.1353]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.7) >>
>> endobj
-773 0 obj <<
+805 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 437.1473 511.2325 446.1036]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.8) >>
>> endobj
-774 0 obj <<
+806 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 425.1157 511.2325 434.0719]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.9) >>
>> endobj
-775 0 obj <<
+807 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 413.084 511.2325 422.0403]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.10) >>
>> endobj
-776 0 obj <<
+808 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 401.0523 511.2325 410.0086]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.10.1) >>
>> endobj
-777 0 obj <<
+809 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 389.0206 511.2325 398.1264]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.10.2) >>
>> endobj
-778 0 obj <<
+810 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 377.0886 511.2325 386.0947]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.11) >>
>> endobj
-779 0 obj <<
+811 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 365.0569 511.2325 374.063]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.12) >>
>> endobj
-780 0 obj <<
+812 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 353.0252 511.2325 362.0313]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.13) >>
>> endobj
-781 0 obj <<
+813 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 340.9936 511.2325 349.9997]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.14) >>
>> endobj
-782 0 obj <<
+814 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 328.9619 511.2325 337.968]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.15) >>
>> endobj
-783 0 obj <<
+815 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 316.8305 511.2325 325.9363]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.16) >>
>> endobj
-784 0 obj <<
+816 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 304.8985 511.2325 313.9046]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.1) >>
>> endobj
-785 0 obj <<
+817 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 292.7672 511.2325 301.873]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.2) >>
>> endobj
-786 0 obj <<
+818 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 280.7355 511.2325 289.6918]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.3) >>
>> endobj
-787 0 obj <<
+819 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 268.7038 511.2325 277.6601]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.4) >>
>> endobj
-788 0 obj <<
+820 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 256.6722 511.2325 265.6285]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.5) >>
>> endobj
-789 0 obj <<
+821 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 244.6405 511.2325 253.7462]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.6) >>
>> endobj
-790 0 obj <<
+822 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 232.6088 511.2325 241.5651]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.7) >>
>> endobj
-791 0 obj <<
+823 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 220.5771 511.2325 229.5334]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.8) >>
>> endobj
-792 0 obj <<
+824 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 208.5455 511.2325 217.5017]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.9) >>
>> endobj
-793 0 obj <<
+825 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 196.5138 511.2325 205.4701]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.10) >>
>> endobj
-794 0 obj <<
+826 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 184.4821 511.2325 193.4384]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.11) >>
>> endobj
-795 0 obj <<
+827 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 172.4504 511.2325 181.4067]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.12) >>
>> endobj
-796 0 obj <<
+828 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 160.4187 511.2325 169.375]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.13) >>
>> endobj
-797 0 obj <<
+829 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 148.3871 511.2325 157.3433]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.14) >>
>> endobj
-798 0 obj <<
+830 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 136.3554 511.2325 145.4611]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.15) >>
>> endobj
-799 0 obj <<
+831 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 124.3237 511.2325 133.28]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.16) >>
>> endobj
-800 0 obj <<
+832 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 112.292 511.2325 121.2483]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.17) >>
>> endobj
-801 0 obj <<
+833 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 100.2604 511.2325 109.2166]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.18) >>
>> endobj
-802 0 obj <<
+834 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 88.2287 511.2325 97.185]
/Subtype /Link
-/A << /S /GoTo /D (subsubsection.6.2.16.19) >>
+/A << /S /GoTo /D (subsection.6.2.17) >>
>> endobj
-803 0 obj <<
+835 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 76.197 511.2325 85.1533]
/Subtype /Link
-/A << /S /GoTo /D (subsection.6.2.17) >>
+/A << /S /GoTo /D (subsection.6.2.18) >>
>> endobj
-804 0 obj <<
+836 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 64.1653 511.2325 73.1216]
/Subtype /Link
-/A << /S /GoTo /D (subsection.6.2.18) >>
+/A << /S /GoTo /D (subsection.6.2.19) >>
>> endobj
-744 0 obj <<
-/D [742 0 R /XYZ 56.6929 794.5015 null]
+776 0 obj <<
+/D [774 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-741 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R >>
+773 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-807 0 obj <<
-/Length 3351
+839 0 obj <<
+/Length 3439
/Filter /FlateDecode
>>
stream
-xÚíKs7€ïú<¤j¥ƒ°x€ÝÖ^v”rd¯$W¶6É&ÇËâPáÃŽ÷×/†`š"¦%8~ÈJ‘’¦§›Ýß4ºÌõ¨ûõŒ"TXÙÓVE™ê &;´7r{¾Ãü1ûá }xÔáåÎߟ ݳļè]¾ç2„Ãz—Ã_w^ž]žœ]^ìý~ùÓÎÉe<)T̨¨ÏøÇί¿ÓÞÐéÿi‡aê}p?P¬å½ÉŽT‚()DøÍõÎÅοã Á_W¢©¢„!Êpø$\€OÂ8'Æjg²¤îoõG)wŠëâgàpÁˆ1T:õa‹Ùr¾(‡ûïÊs0<·2ÄrSøƒ/ýE9)«ÅÞ>Wt÷ù¬?™ôg{ûFÒ]²·¯èx‘Ö~ŠÜ­€+nHÁ)k}º¡Ù¨×¼9‡1 rûPp3f›ç_ÅÌlØHÙƒjo‰‘šZ³H §_”˜ãò7Jy5^Œ§Uó›~5lÞ¼ž÷GeýV<LN: .Ìb€¬…$aª½D(¢9³- ìN@ÞË 0¸tH«;R‰âÁ¤’Ï™_î Spw6L@ƒi-œL ;0˜Pí-L\]¦…‰˜îÎ2…-¾?v:¡ n͆bЬ… &a ª½…†9+ZhÄÐüoZ•ih¨¶ú® dÌcN=wÁÜ Ä`Z §í†)aª=ÂTXKŒ*d “ü"0Ý´bgØŠnÍ…
-"Ь…MóNhRv ÐàÚ™’Dkm{…ÑÄR&
-PíqPÖ•”ÊÚH÷ƒÀñx>X&Âýó B~Óðë¹öèÃ\B  BÈZŒBRv „àÚ[B %‚J ž‹r±W#?ª_¾Xq ·õe>?ÁÃÙü
-îßÜD˜Æ>眾zïæFl[‘èÅlF€ ÆŒÆHÂŒT{ˈr`XÙ¶"Ê3òrqUÎn7¿«%•qS– ã÷u»"${ÊãPðb6#@cFÉtO¨§ìÀAµÇzUII¤°¼e$¶/®¥L¬Ø® f2,ÆýðòüôùéYbÑNj"‰þ¸5¤öö­bu[th6.@à Ã%a† ª½ÅEp"d
-™¯øJ}z'ÁUÙ
- „„¨ö‚«sIÁLÛéhÂÁp¸Úõ¦ÓZžMg“þÂU®….¶MNt`.PÁc-@¦{‰?e‚Ǧv–¸§Dj7àPêë½µa›—‹r°œ›ŸŽ¦.? ËY¿Y÷ïô[8µ3à~þ›ožwå/Õí/p:ÌOZSkŸ²àDKåÅV5~½öy0”óytËb•×¦þ‚z1ž/V“Û5Ïü«.8<ûª‚ØUŠQ”°£ ÕiR”hKý’Ií-wéÛ2Éüˆyt5›N‰UHB%‡Õ+‰±Úኰÿ³\,ÇÃÔ© q¨Ø_ÁÿbCP³‰‚±Ó½÷#eF,ª½-#œ€JdÛuùd}¨˜ãÒæø2Â5uáIõ¾© §U³AYâé$ÄN®‚ç³¹‚W0²W ;0®Pí-WuOj(‹\…¥¾×ó8óžnA\b, ©oÞ™ÖÞ46ÆÏ–Õ Ùê.õSl;¡
-nφ
-bPÁ°bP%ìÀ BµÇá•Ib¹ô›#ãFµÎ­‰my«UñÄ; >ÍbÀÀ˜aÀ$ìÀ€ÙОꂄ­ç'ü«ÆwA—{Œ±ÝÙtù溜_¹ñ«ÎG]î‰g¸o³fgݲî›àéwljM]?¸Ñ[ù)òØëM'“°ïâU3L;ÏLêi)·­Mö¼œ{A9äzZ‹!Âͦ>˜ê8¤‹Âjý]˜Æoè[­­/þæ{åjêo?û0½s×Õ?›Ÿ®¦š7ƒ~Xlo^ê{ÔFÍ^@Ÿ³§Ëp†«~<í_=ŽþåR93h¼>ÉŽ6Ľæs$Þ ;°€£Úc¾Pš¸^Õ÷Ò«
-®N§Õ ‰X]ÌÇb.îÆ=ºêW£µÏƳq˜’<[NÞÔ3ÔÎŒGPÈG7e3
-Ê
-ÑY¹(@A…µ` (¤ì@PÀµ‡$Â&’
-æIàMy^Vå,TX1Èçå[?RWán›Óêíj!x5]Vاµþ}— ÄÀ€±±Ý›Rv`` ÚÛ¡‘~ïõA3™_§ˆÓWï ͇áÞšpÇÝo®ž;pÿÜ«;¼z»5 ¸1›‘VC #dÓ LuL… ÒòÀ‡hÇáøÍõx:šõo®>¶HÄÑáb9•õóöBBé]w×Ð"8"i#x. ˆ1#ƒA‘°£ÕÞ¦ ňº\„¼q^þ±t¡oï°!bâËÔÀÊù³£y„üiÔšÑeÙ@
-Íýñ¬ÿ¶ÆÀZ¾mLîÃLðj63@cFÍv¯µ¤ìÀ˜Aµ·Ìp]?QDfDà ¸«æx:X‚Ôqð&Îö6-ˆbO%{_e“
-QxTRÕŸ”ÃýÁU9x7˜Vo÷ê‡âm úd‚‚³ ‚A0†Œv¯P§ ÁBÕG‚„ Vß¹Ô·VÞ"ȧ"µÍAŸNPðq6A@#Ʊî¥ ÁBÕG‚8'”‹Ðði@k„­Ú–Ý_¡ì1È& b„Á3†”Ý C0ÂPõ‘0F -LèòLCجœw™Ù¶w_·lÜ€ † 8cÝ·4¦ ÁpCÕܬ!Œ…tæ¿ÌMØÎkɪÎJ<,€Õ߶¢·7"~}˜rlÅ
+xÚí[SGÇßùzت…zû~Ù}Ø€R1öbRÙÚ$²4SAÑâýôÛ£™î9B=Gô&W
+æÌ9:ÿßœ¾Îˆõ¨ÿÇzV*œì'‰¢Lõã=Úù÷Þì±æ˜ÃpÐ!<êÕåÞß^ ÓsÄi®{—ŸÀ¹,¡Ö²ÞåðÇýãwç—§ç—~¾üvïô2ž:fTTgüuïÇŸioèý»G‰pVõîü/”0çxo¼'• J
+þr½÷aï_ñ„àÝ•iêƒ(a‰²Ü$> à“0ΉuÆG§Ñ¿W}M8á´ú þpŒXK¥÷Q6/f·Å¬9 žUø¸µÖÍaýE1.&‹ƒC®èþIñ¥|R.Êé¤þK2¬_|?Cëè>98TôQ~Hç² îÉ­¸%šSÖftCŸÙ¨W¿¸€Š»Ch¸©ØæùWŠé8©80^Pï-/Ò¥(oya[yYÌ–óE1<ü¥ø<OP£,qÜvPófÖû3‡|L8~*Ûˆ 9Í&bĬif»‰Iăzo‰ŠHm1ü‹³½Îp%¾²’R˜ 0Ä
+a~ˆã%üOEÄJÌË?þ|SÌ}†äï°<B )Ìbh@‰08q`x Þ[@4'ÎÈ! ¼äøº?÷HÊ¿&$¾8'Ûp ÍÆb¸@ÁŒèÆ%† ê½ÅEQß q÷ëÉ»›ªÅ¨Ðá»2u ™Ëæb\@e0.q`\ Þ[.¼el YsqòyÒ—ƒ¦ßp3ô]Œúõûéu9(«VG*õle‰É–b²ÃÄ›î9ÚT˜ì¨wßGuVˆžÿ•ê¾0ºV ^—×þ•Rî«oAžtÇ5ÈÍ0ă2ÓÍX"Œ1Ô{;Öa’hi"dUÿ•qºÖm­X›~ª^óérvÀìþ LWÎï c~¸*š‘Íb6¡S|UŒý
+è½R\l—Ö
+ö"{!aÙ8
+ !BÁš¦{º+Bî=6ÊX")k)àM#pRÎË„Üoÿ(òQåì™õ˜ÃlB€!FÔÈÒnBq`„ Þ[B´Ç‚9  !ŠÅ¢œŒšVýò»r׿Ìç'd8›`ˆñÄøIÄñƒzoùñ ¦åG6üœMn‹Yè¾íßÜD˜Ê¦æœ½¿õs+vC‘˜ÅlF€!ÆTɲnFq`Œ Þ[F$'ÌQ #ïWŬ†áþàwµRÖÝ’Á¢¼­†+B²—Ü…,f3 1F J#‰80FPïmUPB
+”Êv/Ô¥âÀ@A½· PEu‘Šïù¦Öÿ5±Òu@bgZþñ:/!ÅÙ
+d»—rSq`x ÞÚžÔŽh-¶VÙ¬éUEÂÕ0T»ÄÊù¢Tû…ønùîwã2ž0Äp‚Šb8%âÀpB½Ç~‹TÆ°È¡kã¡ ¢ÚÂã,‰Ól1aÙ8
+,¯ËÅçZâ»rqUO·Ö'0¾- áæÚÕ4Db†ÊoP±÷™Ñâ©uº€ˆ)Ë"@¬Ib»wé¤â@€ØôΩFÍl³9¤2®Í+…c1XÎ"ÇÓɼ³~½Y¼3oáÔ>€‡å lF¼yÞU¾º÷³ÀÓayÚðš\ ͉º^¾4«^M5¸> Šy¬‡“Åj2lÚÌÂ|ç«åê=¹iç_u!áÙW0Ä®:((FQ"Œ&Ô{¤IQ"• 4¥và‡]ŽIÖ”Ïã«ÙtºH=NÅË}CßVmMLð:"”áVÁb±,‡©SY߀HÛö·}ÿ?ÄQ³‰†±×½Ë&F,ê=ÿ…7†Ë€l»™;¹¨ ˜çÒæøúÑCuÒú°ÓÉm½œ0Ô÷²
+-^NAìä*d>›+`ˆq•Å¸JÄq…zo¹ªn[t´å*ìý~·k¥×­Œög`,>pª«¬Qbh\M}½œ 껢¥y m'T!íÙPC *(+U" *Ô{l^™$œÚÀT¸»©ó~¶¶{k”ÞMY¦ 9ÍbÀ@Í0`q`ÀlxO‚¸cD«æy4¶]0ÆögÓåÇëb~åÛ¯ªu¥'žá¡ƒh€ vÖ"sÝK@ðtH:6½¦®nQ¦yÒŠƒãéxv뿯ÛiŸšq5˜—r7¶É¾¤bšs/)hˆ\Rk2bì$âÀB½Ç†ëj’ˆ†bñlñ×fÀ<™6+¹›Î~ñ×?êß®¦wõ‹A?lÓ®TÏ4Õw‘5…{º g¸êÇÓÞ5]ÈÑ?}=gö 5º!%Ùz·v˜Ü á˜Ú›A`bc®c½PŠÄjÁ›jq6ÔRU]ùØ•‹7p_õ'£µ^X*Ã.–óåøc5ù,´{Ýø&IÙÚG3LúV
+iµÚÆÝ®³•õ„äf_=À»z x1‰80rPﱳŜ&š5wpÕ½-W]Bu¥}5+‹æöÚoÊùb:û¼~Ïml~OÎ?Ük§ëµ MÙóA!&+hˆ °&‚B*Ü{("ÌJ¢¸ $𺈼)&Å,ô«¢Èŧ¦¥Ž5Î&ŸV;†WSdÚ½¬5§˜»l0€!ÔÆu/ý§âÀÀ@½·5Âp"esæQ=ƒ_Õˆ³÷·º¹è‡Ãð†ðl–Ÿ|‡îÈÿç²jÑÞìvýÆ<fS 1J N%‰80JPï±|hJ„VQ—WåÇër:šõo®>·\Ä6âÃr4*ª‡±‡²Òú‘]Œàü…¹l,€!†TÃ"†ê½-Òìms¯åQý,§ªx\¿.½ôµð¾é[!ÆMg5°rñúx^a=Θ²l €!”"ê½Bhâ£hàMkRíïš„!þɬÿ©ÂÀ9¾ž`Ì¢…5mVÊLcw SÌÜ?¥£ÝË,©@0hP÷-4\Æšû(êG½TЀ§0œLKP;Ž>Æ9Þz$¢Øs/Aª«l€!†ÔE!†Â†ûÔ|£Œ(mê9ËWU« ößö'ñ`7ýQjÚ'Ĭ·MûÄœ
+·?,GϪl~·q59r¯;`‡\vPlŒ°Dh¨ïÀ™1DRÑ`ÆkÌ®¦UçM™g:g¹˜µfe@jF‘ïÛû¢Äq|®°"‚‡J&šJ6™Ï‹Aõ=]£ê™­RªH AM¶s jÍ‚€’ŒZä¡ä÷CØ (~'å!wÄZ›j3ýÿŒ8Ußâþû¾³ý¢Îê¹K¶ë«Åu>r*{Õ‰úRQÈžÚÕA òÿ¼ÔAªendstream
endobj
-806 0 obj <<
+838 0 obj <<
/Type /Page
-/Contents 807 0 R
-/Resources 805 0 R
+/Contents 839 0 R
+/Resources 837 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 659 0 R
-/Annots [ 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 864 0 R 865 0 R ]
+/Parent 691 0 R
+/Annots [ 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R ]
>> endobj
-809 0 obj <<
+841 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 758.4766 539.579 767.4329]
/Subtype /Link
-/A << /S /GoTo /D (subsection.6.2.19) >>
->> endobj
-810 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 746.5215 539.579 755.4777]
-/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.20) >>
>> endobj
-811 0 obj <<
+842 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 734.5663 539.579 743.5226]
+/Rect [527.6238 746.3946 539.579 755.3509]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.21) >>
>> endobj
-812 0 obj <<
+843 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 722.6111 539.579 731.5674]
+/Rect [527.6238 734.3125 539.579 743.2688]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.22) >>
>> endobj
-813 0 obj <<
+844 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 710.656 539.579 719.6122]
+/Rect [527.6238 722.2305 539.579 731.1868]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.23) >>
>> endobj
-814 0 obj <<
+845 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 698.8005 539.579 707.6571]
+/Rect [527.6238 710.1484 539.579 719.1047]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.24) >>
>> endobj
-815 0 obj <<
+846 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 686.8453 539.579 695.7019]
+/Rect [527.6238 698.0664 539.579 707.0227]
/Subtype /Link
-/A << /S /GoTo /D (subsubsection.6.2.24.1) >>
+/A << /S /GoTo /D (subsection.6.2.25) >>
>> endobj
-816 0 obj <<
+847 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 674.7905 539.579 683.7467]
+/Rect [527.6238 686.084 539.579 694.9406]
/Subtype /Link
-/A << /S /GoTo /D (subsubsection.6.2.24.2) >>
+/A << /S /GoTo /D (subsection.6.2.26) >>
>> endobj
-817 0 obj <<
+848 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 662.935 539.579 671.941]
+/Rect [527.6238 674.002 539.579 682.8586]
/Subtype /Link
-/A << /S /GoTo /D (subsubsection.6.2.24.3) >>
+/A << /S /GoTo /D (subsubsection.6.2.26.1) >>
>> endobj
-818 0 obj <<
+849 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 650.8801 539.579 659.8364]
+/Rect [527.6238 661.8203 539.579 670.7765]
/Subtype /Link
-/A << /S /GoTo /D (subsubsection.6.2.24.4) >>
+/A << /S /GoTo /D (subsubsection.6.2.26.2) >>
>> endobj
-819 0 obj <<
+850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [527.6238 649.7382 539.579 658.6945]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.26.3) >>
+>> endobj
+851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [527.6238 637.6562 539.579 646.6124]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.26.4) >>
+>> endobj
+852 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 639.0246 539.579 647.8812]
+/Rect [527.6238 625.6738 539.579 634.5304]
/Subtype /Link
/A << /S /GoTo /D (section.6.3) >>
>> endobj
-820 0 obj <<
+853 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 627.0694 539.579 635.9261]
+/Rect [527.6238 613.5917 539.579 622.4483]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.1) >>
>> endobj
-821 0 obj <<
+854 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 615.1143 539.579 623.9709]
+/Rect [527.6238 601.5097 539.579 610.3663]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.3.1.1) >>
>> endobj
-822 0 obj <<
+855 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 603.0594 539.579 612.0157]
+/Rect [527.6238 589.328 539.579 598.2842]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.3.1.2) >>
>> endobj
-823 0 obj <<
+856 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 591.1043 539.579 600.0606]
+/Rect [527.6238 577.2459 539.579 586.2022]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.2) >>
>> endobj
-824 0 obj <<
+857 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 579.1491 539.579 588.2549]
+/Rect [527.6238 565.1639 539.579 574.1201]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.3) >>
>> endobj
-825 0 obj <<
+858 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 567.1939 539.579 576.2997]
+/Rect [527.6238 553.0818 539.579 562.1876]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.4) >>
>> endobj
-826 0 obj <<
+859 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 555.2388 539.579 564.1951]
+/Rect [527.6238 540.9998 539.579 550.1055]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.5) >>
>> endobj
-827 0 obj <<
+860 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 543.2836 539.579 552.2399]
+/Rect [527.6238 528.9177 539.579 538.0235]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.3.5.1) >>
>> endobj
-828 0 obj <<
+861 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 531.3284 539.579 540.2847]
+/Rect [527.6238 516.8357 539.579 525.792]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.3.5.2) >>
>> endobj
-829 0 obj <<
+862 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 519.3733 539.579 528.3296]
+/Rect [527.6238 504.7536 539.579 513.7099]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.3.5.3) >>
>> endobj
-830 0 obj <<
+863 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 507.4181 539.579 516.3744]
+/Rect [527.6238 492.6716 539.579 501.6279]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.6) >>
>> endobj
-831 0 obj <<
+864 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 495.4629 539.579 504.4192]
+/Rect [527.6238 480.5895 539.579 489.5458]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.7) >>
>> endobj
-832 0 obj <<
+865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [527.6238 468.5075 539.579 477.4638]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [527.6238 456.4254 539.579 465.5312]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.4.0.1) >>
+>> endobj
+867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [527.6238 444.3434 539.579 453.4491]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4.1) >>
+>> endobj
+868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [527.6238 432.2613 539.579 441.2176]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.4.1.1) >>
+>> endobj
+869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [527.6238 420.1793 539.579 429.1356]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.4.1.2) >>
+>> endobj
+870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [527.6238 408.0972 539.579 417.0535]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.4.1.3) >>
+>> endobj
+874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [527.6238 396.0152 539.579 404.9715]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.4.1.4) >>
+>> endobj
+875 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 473.5253 539.579 482.2574]
+/Rect [527.6238 373.4431 539.579 382.1752]
/Subtype /Link
/A << /S /GoTo /D (chapter.7) >>
>> endobj
-833 0 obj <<
+876 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 461.59 539.579 470.5462]
+/Rect [527.6238 361.3809 539.579 370.3372]
/Subtype /Link
/A << /S /GoTo /D (section.7.1) >>
>> endobj
-834 0 obj <<
+877 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 449.6348 539.579 458.5911]
+/Rect [527.6238 349.2989 539.579 358.2551]
/Subtype /Link
/A << /S /GoTo /D (section.7.2) >>
>> endobj
-835 0 obj <<
+878 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 437.6796 539.579 446.6359]
+/Rect [527.6238 337.2168 539.579 346.1731]
/Subtype /Link
/A << /S /GoTo /D (subsection.7.2.1) >>
>> endobj
-836 0 obj <<
+879 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 425.7245 539.579 434.6807]
+/Rect [527.6238 325.1348 539.579 334.091]
/Subtype /Link
/A << /S /GoTo /D (subsection.7.2.2) >>
>> endobj
-837 0 obj <<
+880 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 413.7693 539.579 422.7256]
+/Rect [527.6238 313.0527 539.579 322.009]
/Subtype /Link
/A << /S /GoTo /D (section.7.3) >>
>> endobj
-838 0 obj <<
+881 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 391.8316 539.579 400.5637]
+/Rect [527.6238 290.4806 539.579 299.2128]
/Subtype /Link
/A << /S /GoTo /D (chapter.8) >>
>> endobj
-839 0 obj <<
+882 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 379.8963 539.579 388.8526]
+/Rect [527.6238 278.4184 539.579 287.3747]
/Subtype /Link
/A << /S /GoTo /D (section.8.1) >>
>> endobj
-840 0 obj <<
+883 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 367.9411 539.579 376.8974]
+/Rect [527.6238 266.3364 539.579 275.2927]
/Subtype /Link
/A << /S /GoTo /D (subsection.8.1.1) >>
>> endobj
-841 0 obj <<
+884 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 355.986 539.579 364.9423]
+/Rect [527.6238 254.2544 539.579 263.2106]
/Subtype /Link
/A << /S /GoTo /D (section.8.2) >>
>> endobj
-842 0 obj <<
+885 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 344.0308 539.579 352.9871]
+/Rect [527.6238 242.1723 539.579 251.1286]
/Subtype /Link
/A << /S /GoTo /D (section.8.3) >>
>> endobj
-843 0 obj <<
+886 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 322.0931 539.579 330.9498]
+/Rect [527.6238 219.6002 539.579 228.3323]
/Subtype /Link
/A << /S /GoTo /D (appendix.A) >>
>> endobj
-844 0 obj <<
+887 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 310.1578 539.579 319.2636]
+/Rect [527.6238 207.538 539.579 216.4943]
/Subtype /Link
/A << /S /GoTo /D (section.A.1) >>
>> endobj
-845 0 obj <<
+888 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 298.2027 539.579 307.3084]
+/Rect [527.6238 195.456 539.579 204.4123]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.1.1) >>
>> endobj
-846 0 obj <<
+889 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 286.2475 539.579 295.2038]
+/Rect [527.6238 183.3739 539.579 192.3302]
/Subtype /Link
/A << /S /GoTo /D (section.A.2) >>
>> endobj
-847 0 obj <<
+890 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 274.2923 539.579 283.2486]
+/Rect [527.6238 171.2919 539.579 180.2482]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.2.1) >>
>> endobj
-848 0 obj <<
+891 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 262.3372 539.579 271.2934]
+/Rect [527.6238 159.2098 539.579 168.1661]
/Subtype /Link
/A << /S /GoTo /D (section.A.3) >>
>> endobj
-849 0 obj <<
+892 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 250.382 539.579 259.3383]
+/Rect [527.6238 147.1278 539.579 156.0841]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.3.1) >>
>> endobj
-850 0 obj <<
+893 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 238.4268 539.579 247.3831]
+/Rect [522.6425 135.0457 539.579 144.1515]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.3.2) >>
>> endobj
-851 0 obj <<
+894 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 226.4717 539.579 235.4279]
+/Rect [522.6425 122.9637 539.579 132.0694]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.3.3) >>
>> endobj
-852 0 obj <<
+895 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 204.534 539.579 213.2661]
+/Rect [522.6425 100.3916 539.579 109.2482]
/Subtype /Link
/A << /S /GoTo /D (appendix.B) >>
>> endobj
-853 0 obj <<
+896 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 192.5987 539.579 201.555]
+/Rect [522.6425 88.3294 539.579 97.4352]
/Subtype /Link
/A << /S /GoTo /D (section.B.1) >>
>> endobj
-854 0 obj <<
+897 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 180.6435 539.579 189.7493]
+/Rect [522.6425 76.2474 539.579 85.3531]
/Subtype /Link
/A << /S /GoTo /D (section.B.2) >>
>> endobj
-855 0 obj <<
+898 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 168.6883 539.579 177.7941]
+/Rect [522.6425 64.1653 539.579 73.2711]
/Subtype /Link
/A << /S /GoTo /D (section.B.3) >>
>> endobj
-856 0 obj <<
+840 0 obj <<
+/D [838 0 R /XYZ 85.0394 794.5015 null]
+>> endobj
+837 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+901 0 obj <<
+/Length 618
+/Filter /FlateDecode
+>>
+stream
+xÚí˜MoÓ0Çïù>.?óã÷ç:´!í0ËmÚ¥]AÐL¬$>=v›8FÙ†XUUMëçÕÿŸ\ÛÈDx!3,IbŽ4†µÛJ°M{[aoÃ#žZ5Õé…rŒ€¬´¬¹cÚf̃ðY³º9yóîª9¿j®ëÛæ²:oƨif*†üVÝÜ
+\Vyþ‡/H²m¥£•~ùZ]WïÇ€ÉèÞ5Û
+ÊÊL+R%­8«l(ÎPxC±“3Ð5'E'«n·[·|÷yÓý¸ïÖ5×Z@Íÿõ‡&z~”ß0Р¡0ÃãTOt{Ø°ÃÇDÉѧŽS%§ñ£”ˆbÂã€F®HÅô#HÚu{̤îãv½âí§uû¥½ïîjn<ôd‚†9^LPâX"(ÕQÍ”)¤DP1ýH2à$ROÔ/Eæ¸= aŽ”8–J5DÔóe
+)TL?$8k}OKª¹'óþÂþ:Z"lÐ`1a‰c‰°TcD;OX¦aÅô#aˆàCÖž0 ì¡[µavÑ¿vÀþnƒ ‹qKK¸¥‚#Ò<n™BJ¸Ó¸Y"ðÆê·}öÓ ‰©”@¨c†hI„ýNkoù(¨Å¸ë-ˆ¾$†£PK1L >åüÞ>WHÃrúCÄp´àº_öx„m³îj®P—¸—…j˜öÅP%Ž%¨RYQÊy¨2…L o'â´õ*wAÞdŒ|þuȯ[›p¼PÞË|»Ò §ˆ…-dŒ›ß5ôFIå?Vê‹çendstream
+endobj
+900 0 obj <<
+/Type /Page
+/Contents 901 0 R
+/Resources 899 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 691 0 R
+/Annots [ 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 911 0 R 912 0 R ]
+>> endobj
+903 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 156.7332 539.579 165.8389]
+/Rect [494.296 758.4766 511.2325 767.5824]
/Subtype /Link
/A << /S /GoTo /D (section.B.4) >>
>> endobj
-857 0 obj <<
+904 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 144.778 539.579 153.8838]
+/Rect [494.296 746.5215 511.2325 755.6272]
/Subtype /Link
/A << /S /GoTo /D (section.B.5) >>
>> endobj
-858 0 obj <<
+905 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 132.8228 539.579 141.9286]
+/Rect [494.296 734.666 511.2325 743.672]
/Subtype /Link
/A << /S /GoTo /D (section.B.6) >>
>> endobj
-859 0 obj <<
+906 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 120.9673 539.579 129.9734]
+/Rect [494.296 722.6111 511.2325 731.7169]
/Subtype /Link
/A << /S /GoTo /D (section.B.7) >>
>> endobj
-860 0 obj <<
+907 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 108.9125 539.579 118.0182]
+/Rect [494.296 710.656 511.2325 719.7617]
/Subtype /Link
/A << /S /GoTo /D (section.B.8) >>
>> endobj
-864 0 obj <<
+911 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 96.9573 539.579 106.0631]
+/Rect [494.296 698.7008 511.2325 707.8065]
/Subtype /Link
/A << /S /GoTo /D (section.B.9) >>
>> endobj
-865 0 obj <<
+912 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 85.0022 539.579 94.1079]
+/Rect [494.296 686.8453 511.2325 695.8514]
/Subtype /Link
/A << /S /GoTo /D (section.B.10) >>
>> endobj
-808 0 obj <<
-/D [806 0 R /XYZ 85.0394 794.5015 null]
+902 0 obj <<
+/D [900 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-805 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >>
+899 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-868 0 obj <<
-/Length 69
-/Filter /FlateDecode
->>
-stream
-xÚ3T0
-endobj
-867 0 obj <<
-/Type /Page
-/Contents 868 0 R
-/Resources 866 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/Parent 659 0 R
->> endobj
-869 0 obj <<
-/D [867 0 R /XYZ 56.6929 794.5015 null]
->> endobj
-866 0 obj <<
-/ProcSet [ /PDF ]
->> endobj
-872 0 obj <<
+915 0 obj <<
/Length 2197
/Filter /FlateDecode
>>
stream
-xÚÝYÝã¶÷_áG-pfù)‘y¼»¦¸ ¸¢Ý òæA+qmádÉÑÇnœ¿¾C)˶|wé-РX`M†äpæ7¿ÚlMá­µ"T¹ÎŒ$Š2µ.ö+ºÞ»¿­XБJ%…€‡…·%4QšgëÍ|‘·«¿|ÏÙšS’¦\­ž¦½ÒL#¤Y?”?'ïvùa°Ý݆+š°»_~Ài’d:cn…-É Õ~‡fèÚr,†ªm‚ºXbRžFí 悹Nûagaiºi¶kì€OïÛ}^58þ˜ïƒÎý±ìÇÿ¦Š¾ÿxÌ ²¤h›¾ê‡_·Oø9Äõûc3ä¿ad[TOÇ Íö»XÅ6C5T(Í’êŽ% Ý$8£;cÄ(Å£Âa§‰;ˆà,ÉñqWÙ.ïî˜NŠ]Uä5J÷yÓ€›3™¼Ðh{ÓÝéd¬Ýæn‘±·%ÊŸÚ¥­í6ªfö‡]ÛU˜yDIûlƒ®?\Ø!oÂJa+Nò>;ó'ªö‡ÚîÁ¹ë†ƒ¡Ã.wáÊT’Ø×õåûüÐã(ºT¼ÏA4‹³›X–Þ¶ïmOÀ-ˆ*ª–ù£ZÕÇ•+° jœ ܳ‡ˆ[·~­v< ¢·›@ÒUãàQKñpR·ùcî­Š˜g’™ò€bI Obž
-ôœA)*ìaˆÔqf§†d
-D Öñ›Öñ  R
-}å7A,û+£c”ú…%%”Æ8yÿiU ¢¿^OI¢0SÔƒ©C>”‚e”<÷á!8|V5T•Ëã­Wóø·áÕÓØøú*ÉsUž›vð>¯Jœ‹–D‚A G
-OyùœCÖ•“¦Ï@´64* >2óNgÃŒ&ÌõÀçUlN¾.ÝR Ñ#ë›0Hõ§øn*·Ø†¤°ÝàK­{hîôËŒB/-RvÍi¢n0‚b‰ÒHUéŒ
-êj»^¬ûh‚*"¸‘K4Ñ·õ3v£®tgihM2îc`ˆŠw.°Ëº >,)…¼â`7!]
-> YÉàT&³ëdQ¶®ÂŠ¾QaÁô'ìL,
-¸×S^ÛIÀ“ÿõ÷7¨¹kûa¦ ¼VÇêvñÍA DŠÑ úþ®ø} °ÝþüUè[o#zvÊosÜ Ñ—žƒ[Ñ¢gžû¾úÍql
-ôûR•Ãî6x_ÍÞ?xc _‘ ©!RªôKàe‚PÁ#ĆSYVébÍ;ŒŸÁÏl£WcÄK㡪/ágnü @?y
-š[}¡[Ày5sÿ,¸áî‹®Œ¥î
-ADÆåüg¿«Ÿÿ¸§` Ô ˜¯µ^ü0þô·Š¸_Ñ# §r”\²+·Ç_O+ÅÝþ-Õ«endstream
+xÚÝYÝã¶÷_áG-pfù)‘y¼»¦¸ ¸¢Ý òæA+qmádÉÑÇnœ¿¾C)˶|wé-РX`M†äpæ7¿ÚlMá­µ"T¹ÎŒ$Š2µ.ö+ºÞ»¿­XБJ%…€‡…·%4QšgëÍ|‘·«¿|ÏÙšS’¦\­ž¦½ÒL#¤Y?”?'ïvùa°Ý݆+š°»_~Ài’d:cn…-É Õ~‡fèÚr,†ªm‚ºXbRžFí 悹Nûagaiºi¶kì€OïÛ}^58þ˜ïƒÎý±ìÇÿ¦Š¾ÿxÌ ²¤h›¾ê‡_·Oø9Äõûc3ä¿ad[TOÇ Íö»XÅ6C5T(Í’êŽ% Ý$8£;cÄ(Å£Âa§‰;ˆà,ÉñqWÙ.ïî˜NŠ]Uä5J÷yÓ€›3™¼Ðh{ÓÝéd¬Ýæn‘±·%ÊŸÚ¥­í6ªfö‡]ÛU˜yDIûlƒ®?\Ø!oÂJa+Nò>;ó'ªö‡ÚîÁ¹ë†ƒ¡Ã.wáÊT’Ø×õåûüÐã(ºT¼ÏA4‹³›X–Þ¶ïmOÀ-ˆ*ª–ù£ZÕÇ•+° jœ ܳ‡ˆ[·~­v< ¢·›@ÒUãàQKñpR·ùcî­Š˜g’™ò€bI Obž
+°\ˆÈˆÈ²˜µÞ=&yÙAS;œy媀߾؞òò9‡¬+'MŸhmhT@|dæΆM˜ëÏ«Øœ|]º¥@¢G4Ö7aêOñÝTn± Ia»Á—Z÷ÐÜé—!…^Z¤ìšÒDÝ`#Ä#¤‘ªÒÔÕv7¼X÷?ÐUDp#—h¢oëgìF]éÎÒКdÜÇÀ6ï\`—u|XR
+yÅÁnBº|²,’Á©Lf×É¢<l]…}£Â‚éOØ™X
+ÊßYÆ49nD9&&ea-z™w×^2ш+'ÁÔlÉIpcS†œµÎa?[ŒÐ÷Ñ !*¡·õÈs ´ã¸j)W XÂõ’%ú¦%ÑðYZ‚~(Ÿã#\Yvmëóñ&ç4ÕçxÛÙúà8 l í¯Hb[+“Ƕ<ÎYOÆ >k!A\rœ“tÄ䥽4’/cΨɩ‡ƒmÊÊUþ…ÄK Óp{FÕ—]à%é
+R¥£¤^ݯþù_ΊvÌš„›à<
+k…aõùR›x¦ séD5›¾Œº€³ LHXF’n;¾u
+7•Xù®Ü&¸" §×ó-¾ÍêiÉ/˜- m”.§ÏÌþéŽÓä&\úáX_B¹þ8Uê!9\=(dý&ÌýßÁ‰ÿ@ˆÿÀ™âŒ›pâ@äƈÓw›bN®Í”È6¹k…%ÜÇû&ÄÑ­p¯§¼¶“€'?þëïoPs×öÃLx­ŽÕí⛃ˆ£ôý8\ñû `»ýù«Ð·ÞFôì”ß渢/=îYBôÌsßW¿9ŽM~_ªrØÝï«Ùû'o ô+r!5DJ•~ ¼L*x„Øp*+À*]¬y‡ñ3ø™môjŒxi<Tõ%üÌŸè' ?|ÛÖåm(½šéÿ×P‚;5Ì| I”B«[œ¾ÕpmId£qøˆf[¼†.­¾AAs«¯ t 8¯fîŸ7Ü}Ñ•±Ô]!ˆÈ¸œÿìwõó÷ „ºóµÖ‹¿ÆŸþ6B÷Kâ"zd àT®ƒ’‹Bvåöøkãi¥¸Û
endobj
-871 0 obj <<
+914 0 obj <<
/Type /Page
-/Contents 872 0 R
-/Resources 870 0 R
+/Contents 915 0 R
+/Resources 913 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 886 0 R
+/Parent 926 0 R
>> endobj
-873 0 obj <<
-/D [871 0 R /XYZ 85.0394 794.5015 null]
+916 0 obj <<
+/D [914 0 R /XYZ 85.0394 794.5015 null]
>> endobj
6 0 obj <<
-/D [871 0 R /XYZ 85.0394 769.5949 null]
+/D [914 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-874 0 obj <<
-/D [871 0 R /XYZ 85.0394 582.8476 null]
+917 0 obj <<
+/D [914 0 R /XYZ 85.0394 582.8476 null]
>> endobj
10 0 obj <<
-/D [871 0 R /XYZ 85.0394 512.9824 null]
+/D [914 0 R /XYZ 85.0394 512.9824 null]
>> endobj
-875 0 obj <<
-/D [871 0 R /XYZ 85.0394 474.7837 null]
+918 0 obj <<
+/D [914 0 R /XYZ 85.0394 474.7837 null]
>> endobj
14 0 obj <<
-/D [871 0 R /XYZ 85.0394 399.5462 null]
+/D [914 0 R /XYZ 85.0394 399.5462 null]
>> endobj
-876 0 obj <<
-/D [871 0 R /XYZ 85.0394 363.8828 null]
+919 0 obj <<
+/D [914 0 R /XYZ 85.0394 363.8828 null]
>> endobj
18 0 obj <<
-/D [871 0 R /XYZ 85.0394 223.0066 null]
+/D [914 0 R /XYZ 85.0394 223.0066 null]
>> endobj
-880 0 obj <<
-/D [871 0 R /XYZ 85.0394 190.9009 null]
+920 0 obj <<
+/D [914 0 R /XYZ 85.0394 190.9009 null]
>> endobj
-881 0 obj <<
-/D [871 0 R /XYZ 85.0394 170.4169 null]
+921 0 obj <<
+/D [914 0 R /XYZ 85.0394 170.4169 null]
>> endobj
-882 0 obj <<
-/D [871 0 R /XYZ 85.0394 158.4617 null]
+922 0 obj <<
+/D [914 0 R /XYZ 85.0394 158.4617 null]
>> endobj
-870 0 obj <<
-/Font << /F21 658 0 R /F23 682 0 R /F47 879 0 R /F39 863 0 R /F48 885 0 R >>
+913 0 obj <<
+/Font << /F21 690 0 R /F23 714 0 R /F39 873 0 R /F41 910 0 R /F48 925 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-889 0 obj <<
-/Length 3125
+929 0 obj <<
+/Length 3126
/Filter /FlateDecode
>>
stream
-xÚÍ]“Û¶ñý~…u3‹~öíÛ3“sb«“i<P"¤ã˜"’:ùò뻋]P¤„³Ý6fî+`ìö 'þä"Šƒ8SÙ"É 2Zl7b±‡¹¿ÝHÆY9¤Õë›õÍ_^ëd‘Y¬âÅz7Ù+ DšÊźø°”AÜÂb¹þîÕíJEbùòíwoî ¾¿ûGßÿãýúÕÿ""ñòþ=|äíJÊ8Ëo¿»ûqýêÍKÞòÍýúÝÛ—ÿvýæíýí¯ëïo^­Gª§œI¡‘äßn>ü*0øýt–F‹üÌ2µ8Ü„‘¢Pk7Rݼ¿ùiÜp2k—z%%E t¬<¢RÚ'ª( b S(ªõƒ!övMU5§²ÞÓÏmS?šz(›º§¼»•é’‘½)*kú¦ßve;YÐìè;¸¾ysÿrÜü!ÔþØå¸ÀÉ_¨ÊüõR¤qÄR
-h€½t+æ[­O«D« ’ᨯpjÚIdi²Ht ¶$bR×­”rÙLe¾™­dª´^þ|«ÄDEòï‡'|Ã, 2™á9#-ÿw(G wñ"0%‚(‚½½î$¦àö…Qh%öÑ<k»E¼ƒÿÈ&K”JèDa±_—ŸÐ²c!–?—Åðð¼´ˆìO..
-3o­»Ë+ç Ûã
-Ë~€Ìá8XWèE>䛼7ãêìa á~ ÐizÚ®¬wMwp¦ð“fy»ò ¿%µbÞìl ~ÉåCÓ4^c=VÔˆú#!åEÁÇ÷…l
-€ÇrkëÑt}nS@FYѨ]؇ñü íYŸ÷j@û(ÚÀæ¸3ŽÈ{lØN&ü µm¶ùo0.ƒØŠÔ.û¶*AÿÖÚ¢eÕ4 :¶ôKÖЗӷÈ\[¹|"4ZqÊÊ­eÍrH…î=CÙ,ͦ™yìPk/Z2rUB êžlÆù‚Î;=Ði½© ææ·£éJ« @¡ëWµfº­…À÷À¦ä¡µ¨,‹æ¶S[“×ö°µì!|
+xÚÍ]“Û¶ñý~…u3ƒ~öíÛ3“sj«“i<P"¤ã˜"’:ùò뻋]P¤„³Ý6fî+`ìö 'þä"Šƒ8SÙ"É 2Zl7b±‡¹¿ÞHÆY9¤ÕëÛõÍ7¯u²È‚,Vñb½›ì•"Måb]|XÊ na±\ÿêv¥"±|ùöÇ»7÷ßßýÈ£ïÿñ~ýêG‚‘xyÿ>òv%eœˆåwßßý´~õŽæ%oùæ~ýîíË¿·~óöþö×õ7¯Ö#ÕSΤÐHòo7~‹üáF:K£Å ~ˆ@f™ZnÂHQ¨µ©nÞßümÜp2k—z%%E t¬<¢RÚ'ª( b S(ªõƒ!övMU5§²ÞÓÏmS?šz(›º§¼»•é’‘½)*kú¦ßve;YÐìè;¸¾}sÿrÜü!ÔþØå¸ÀÉ_¨ÊüåR¤qÄR
+h€½t+æ[­O«D« ’áÙ´³‰¾’0ÈÒd‘èlIĤ®[)å²™Ê|2[ÉTi½üùV‰‰Š.äßOù†Yd2ÃsFZþ;îPŽîâÿD`JQ{{-ÜILÁí £ÐJì£y:5Öv‹yÿæu('K”JèDa±_—ŸÐ²c!–?—Åðð¼´ˆìO..
+3o­»Ë+ç Ûã
+Ë~€Ìá8XWèE>䛼7ãêìa á~ ÐizÚ®¬wMwp¦ð“fy»ò ¿%µbÞìl ~ÉåCÓ4^c=VÔˆú!åEÁÇ÷…l
+€ÇrkëÑt}nS@FYѨ]؇ñü íYŸ÷j@û(ÚÀæ¸3ŽÈ{lØN&ü µm¶ùo0.ƒØŠÔ.û®*AÿÖÚ¢eÕ4 :¶ôKÖЗӷÈ\[¹|"4ZqÊÊ­eÍrH…î=CÙ,ͦ™yìPk/Z2rUB êžlÆù‚Î;=Ði½© ææ·£éJ« @¡ëWµfº­…À÷À¦ä¡µ¨,‹æ¶S[“×ö°µì!|
‘(¶
ÕVx ›–ÎC™k'HX-hÊ€®V±ŠèÊá$yI„2>zæäpd¼<VW8õÌ
| „S»P
@@ -2525,192 +2632,185 @@ b5:”ÀyÈ,º¸+¤€$u9@yß7Û’C.üƸH«#™D³dŒf
Î
J}¹¯¹šÛù«Í˜Û2ñLM/ :i 5
÷&M¾d)#þjºàZK×û^ÙÊÏVøË8–rFÏõÛ‚Ãú×»=ßÆ@Š³8UWm ÍmŒ>v/›øª„JÓ£¯mM‡ÅŽ lÛÖZe¶â×cú Å¬ Õ+Ö4a“ XQБä5|ÔíC2:Íñ¢Ü!;­õ–OÞ˜ád°>C$_œ E I¾Ò“”×qHHS9kí=³¡­-¡:½Åø—êw½ypv»ï¸)
-S™ýä-ç깇b뤈;=Ÿµmê®c?Ý*؇ñù »”åþèmÓ+ô‚¥ÿ±%:W€Ï$üE‰
+S™ýä-ç깇b뤈;=Ÿµmê®c?Ý*؇ñù »”åþèmÓ+ô‚¥ÿ±%:W€Ï$üE‰
endobj
-888 0 obj <<
+928 0 obj <<
/Type /Page
-/Contents 889 0 R
-/Resources 887 0 R
+/Contents 929 0 R
+/Resources 927 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 886 0 R
-/Annots [ 896 0 R 897 0 R ]
+/Parent 926 0 R
+/Annots [ 936 0 R 937 0 R ]
>> endobj
-896 0 obj <<
+936 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [272.8897 210.0781 329.1084 222.1378]
/Subtype /Link
/A << /S /GoTo /D (types_of_resource_records_and_when_to_use_them) >>
>> endobj
-897 0 obj <<
+937 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [190.6691 182.1322 249.6573 191.5418]
/Subtype /Link
/A << /S /GoTo /D (rfcs) >>
>> endobj
-890 0 obj <<
-/D [888 0 R /XYZ 56.6929 794.5015 null]
+930 0 obj <<
+/D [928 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-891 0 obj <<
-/D [888 0 R /XYZ 56.6929 756.8229 null]
+931 0 obj <<
+/D [928 0 R /XYZ 56.6929 756.8229 null]
>> endobj
-892 0 obj <<
-/D [888 0 R /XYZ 56.6929 744.8677 null]
+932 0 obj <<
+/D [928 0 R /XYZ 56.6929 744.8677 null]
>> endobj
22 0 obj <<
-/D [888 0 R /XYZ 56.6929 649.0335 null]
+/D [928 0 R /XYZ 56.6929 649.0335 null]
>> endobj
-893 0 obj <<
-/D [888 0 R /XYZ 56.6929 609.5205 null]
+933 0 obj <<
+/D [928 0 R /XYZ 56.6929 609.5205 null]
>> endobj
26 0 obj <<
-/D [888 0 R /XYZ 56.6929 551.1302 null]
+/D [928 0 R /XYZ 56.6929 551.1302 null]
>> endobj
-894 0 obj <<
-/D [888 0 R /XYZ 56.6929 525.7505 null]
+934 0 obj <<
+/D [928 0 R /XYZ 56.6929 525.7505 null]
>> endobj
30 0 obj <<
-/D [888 0 R /XYZ 56.6929 422.4834 null]
+/D [928 0 R /XYZ 56.6929 422.4834 null]
>> endobj
-895 0 obj <<
-/D [888 0 R /XYZ 56.6929 395.8284 null]
+935 0 obj <<
+/D [928 0 R /XYZ 56.6929 395.8284 null]
>> endobj
34 0 obj <<
-/D [888 0 R /XYZ 56.6929 166.2827 null]
+/D [928 0 R /XYZ 56.6929 166.2827 null]
>> endobj
-898 0 obj <<
-/D [888 0 R /XYZ 56.6929 138.253 null]
+938 0 obj <<
+/D [928 0 R /XYZ 56.6929 138.253 null]
>> endobj
-887 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F47 879 0 R /F39 863 0 R /F21 658 0 R >>
+927 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F39 873 0 R /F41 910 0 R /F21 690 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-903 0 obj <<
-/Length 3414
-/Filter /FlateDecode
->>
-stream
-xÚ¥ZKsã6¾ûWè¹jÍàA
-a²¢´á¦f²”™ËÕW„\€Ž™ ®¯Ë÷tÎ
-Bƒc34ÏõÈå‰â‘=½ r‚ öÇÇGÒ}0N:
-$¿vG"‘ÂUk"þð}O-ˆÂ´7¤›9½D¸×ð”Q½X4
-Ú½¢¤bü²êÿr…û€º– Èuüç˜âÙKŠy{„°ëРÆáäÍ0Å#÷—Ì‚² _Xy‡«4ØòǧÇšh>½§Ç*x¶uÕs¿KÁ¶ÑOuÊ-~Çf ->øDÄ)Ày•ZNŽ/£øLeð~È¿QtœOpÈëj¨¨EçÄ#é˜,¬`ÎÊ9ntáæ‹ëRÍÑO8Xð„òuÇ ‰¢¤tm}¨|Bd®@ *4‚I îêá¥;<õ¡jÚ#GCè‰ c?ÐH¯4nã5ϯôÒQ£ã‰c†é©,é›RM•…#$΃B2Ü?Ô§ù"³Ü'ýsÝïï(áqór·[|+ÎðÊÔÏûRÁ]Cñüâ3ttý =FÜÞúÊ…ï_úxÉÏÏ JÓŠqf–³ç–ºöÕê))ªz@¸4ºW@áüù÷1Ý á•iQ ùÜ È@}!´úº^‚ã'T¯:Ø
-n±=*‚«wzŒÐx¢KìÏñ¸‹¨i{
- ˜0¸†¥^!ž¥ð
-ÍÈ)´c‘Â|Fææ¡f63
-O=°& wœWðdcZ*…— ™¤µùiÙȸýd‰ƒ6™Ì]Ь.dJÐæ &õÅYs™©MÔ>²W˜S·ùñMš fHÁWUOA
-fD
-_tÀ€ÌvØüM„ù¹…S &cÃQðføˆ‘€:úMÏ£Î
-4´â9§îåÌüváâ}Ï1[,ò\\ÔG S=Ÿ^ÌÉ:ÐmZc´“1àp¨­/÷‚ã~¤Fñ_ [€ƒUÁÁÒß.¨rlõØpŸ…Ô8è m¨þ°·ì§_Såþpäœþå‘óß-¦ëE*ýCŸ«g¶ÌŒÖgeŽÑAè)èpÅ Ô%_*{ Ðå7‚¤§ºÞûÀ(Þb1AÓ!ñG¢·Âñ¦+ܪ³_Ç¥÷uÍ7kÇ=uU+
-¢ü XÇÃÕXT p~ÅCê,x^®¤zç;š›ˆ|¦„§¹`õ\5mµ )"_œâ€´íÙ$X5ìÆ‹¬¦j¹Ž8Bé…D›^¿šr
-¡‚—†HÙ[‚ÿï”(L‰Xãÿ¿ÿV5þ»,w™.
-•®piQâEpd
-£¼(
+943 0 obj <<
+/Length 3415
+/Filter /FlateDecode
+>>
+stream
+xÚ¥ZKsã6¾ûWè¹jÍàA
+J$”š.º\.³/ËA*™… _ÕÏ5ŠAç ãîøˆ›ÔoÉÛéÌ‚ÖþoâFð 6ñ—·'\d"`X¦Ûµ¯Dí”»@/HhBg©3¡½¡&+JNaz
+ ¢â¥ 486Có\\ž(ÙÓ *'Ø`||$Ý㤣@òkw$)\µ&òçß÷Ô‚(L{Cʱ™ÑK„{ OÙåÑ‹E pàg`6Ž;ð’è:×€4Î"ÈÆÇ8@Yƒ67¿ ¡VÇvHÙ ÆÇåвº}³Júí{ -Äü»wï¨Eë÷®ÚÖ[¸ Òoà<Ãã;[9´ÈʱÅ"µ7ìX×pºÔ܈ÓS¸O‚gÚÓ2´é1Ì1„ÞðÛª<¼ ?çÇJûïÛêÙU­WmuÞH ÇëÙ7ã~]l/¸³5x‡ÝCÊ/ª¬ˆ&ˆçÑò¢ý¾^5¯´žß„WAê‰D¶VÜ›+çÿÙÔ;¢³ÆYMžˆÒw[ž5À*.Ð ]Jpä./‹3{Ej,®º§÷—¦mIµ0HèˆèÑÞ+z Â
+&‘|ø D`ñ‚ZÈ
+æ<ð¡œãFn¾¸.Õý„3€O(_Çq ’(J@J×Ö‡Ê'D@öç
+Ô ÒH#˜â®^ºÃQª¦=r4„ž¸P1öôjAã6^óüJ/5:ž8f˜žÊ’¾I!ÕTY8Bâ,0($ÃýC}š/2Ë}Ð?×ýðŽ7 w»Å·âüàq
+p‘æPj¶]åK]¼´ç‡3õBypÀ&؈\û`‹æ€¹‰";$×ë†ê`Ð^²
+“©Ò3:­Ó8˜k8¾óšlùø¿óå ¥BÐ=&óرk„Óâ¼nÍ€¨µ Žöu“ S=qsz †€\…nß| €ÅtMô=M¸ª{^!ȧï×¢Q%à)Ì €àà¢úþ!éœ œ‹Íåè,Œ-Ï……(œ‹,²2^
+”r¬¾*{êÃÂ4Òçাc¡Z¯; ·]u‹ο0b0–9›7Œ÷13;w|rQ 'èú¾Yzlq\QF‡¤A_ )â)b—×i|H£>î’àœ‹˜¿„›#ÎJ*NUF+ •¿šâ ªúºåL²xnô'sLÑÛof2ýqÉë6;„7Öé¥`F¤ðE|Èl‡ÍßD˜ŸûPˆ0b26o† ¨£ßô<ê €Ì$Íòý1J4˜DôTE‡_Ÿ‚§OFŒ»¼ÂE6ÅÉ}b`¯OµFxìë8gâ¼// •ó—vC3ÎÔR&Z¸Ì¨<V×ÇûÙ4zÉxõâ³ñi†Éá²'ÉêdÀ¸?_ VÍ+÷•|ÖŽ‚öƒÉšÔ(ò1-ucBj‘9=VÕä4†±jtòÐ&]Gû°ì·íB^ëd¨Ýž·W$/
+,Ê,ÿJ@T&¸«j_ÿ™¾,07šÈކС¶’Ûù/¾¶r$:]iYíEE¤Q°¸ñ]b¢o¸6wCûò¯¾(ÏsU#i[•¹Ü˜ókAº§ž˜
+¾P(Å& L®©§&à™`Â稙þ˜£­á
+?6`³<sö Ôq¿qÁâK Nÿ¢@C+žsê^ÎÌo.Þ÷³Å"ÏÅE}”0Õó©áÅœ¬ݦ5F;Ž
+—%^G¦ð8Ê‹`øûÕ%çÿ^_'kendstream
endobj
-902 0 obj <<
+942 0 obj <<
/Type /Page
-/Contents 903 0 R
-/Resources 901 0 R
+/Contents 943 0 R
+/Resources 941 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 886 0 R
-/Annots [ 906 0 R 907 0 R ]
+/Parent 926 0 R
+/Annots [ 946 0 R 947 0 R ]
>> endobj
-906 0 obj <<
+946 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [519.8432 463.1122 539.579 475.1718]
/Subtype /Link
/A << /S /GoTo /D (diagnostic_tools) >>
>> endobj
-907 0 obj <<
+947 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [84.0431 451.8246 133.308 463.2167]
/Subtype /Link
/A << /S /GoTo /D (diagnostic_tools) >>
>> endobj
-904 0 obj <<
-/D [902 0 R /XYZ 85.0394 794.5015 null]
+944 0 obj <<
+/D [942 0 R /XYZ 85.0394 794.5015 null]
>> endobj
38 0 obj <<
-/D [902 0 R /XYZ 85.0394 570.5252 null]
+/D [942 0 R /XYZ 85.0394 570.5252 null]
>> endobj
-905 0 obj <<
-/D [902 0 R /XYZ 85.0394 541.3751 null]
+945 0 obj <<
+/D [942 0 R /XYZ 85.0394 541.3751 null]
>> endobj
42 0 obj <<
-/D [902 0 R /XYZ 85.0394 434.1868 null]
+/D [942 0 R /XYZ 85.0394 434.1868 null]
>> endobj
-908 0 obj <<
-/D [902 0 R /XYZ 85.0394 406.5769 null]
+948 0 obj <<
+/D [942 0 R /XYZ 85.0394 406.5769 null]
>> endobj
46 0 obj <<
-/D [902 0 R /XYZ 85.0394 301.1559 null]
+/D [942 0 R /XYZ 85.0394 301.1559 null]
>> endobj
-909 0 obj <<
-/D [902 0 R /XYZ 85.0394 276.6843 null]
+949 0 obj <<
+/D [942 0 R /XYZ 85.0394 276.6843 null]
>> endobj
50 0 obj <<
-/D [902 0 R /XYZ 85.0394 200.1512 null]
+/D [942 0 R /XYZ 85.0394 200.1512 null]
>> endobj
-910 0 obj <<
-/D [902 0 R /XYZ 85.0394 175.6796 null]
+950 0 obj <<
+/D [942 0 R /XYZ 85.0394 175.6796 null]
>> endobj
-901 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F47 879 0 R /F39 863 0 R /F21 658 0 R >>
+941 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F39 873 0 R /F41 910 0 R /F21 690 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-914 0 obj <<
+954 0 obj <<
/Length 2458
/Filter /FlateDecode
>>
stream
xڥ˒ã¶ñ>_¡[4Uš
-Yþýî×ßÂU üù. TžÅ«LÂ@ä¹\5wQ¬‚8RÊCê»ç»Œg«n뢤DH•ÈQIµ$ª8K(ªwp9®‹®ý†òe8j[u-O{s¼ÙÚÐÔîyp8V>žiÒèÞš÷æøêÇ•íM½ãqO_ÍhÖèÚîö0^·³†y væHƒ’Yé˜ Û <á¯RFûª,a3(¤z ò8–îªÌ6"z]_ô«âhý¹5´<ô<ØuÈ_ƒ‡·[ H‹1Ê!$2
-ëÖòT„
-‚>a·£ßÑÉå£-}ùÞý©àÓA"U¾x¬Û\wÝ·á°dý)^Üï¤`êðIxåº2­í6ð0
-¢,‚Ì&Ò W2%ÿ¿Ïåô£’l]5ÞÇ rϸn &™òšAÜÕs¨q;
-G ·{¦Â
-jÛÓ
-ú.Xêïè÷/Ž'·Ÿ+`cÚ¸˜‰F¿r¤rrÙ(œóíl –(ÊG¡ã™¼ ¡cp€IÕZÈ/– ?r鼿3ÎA"Á6 wÕ«€½0UohN`K½UnP*yí"¯ Æ“2çâoÒ-ÆAžÇÙ•ãÌó›¯0ÕõÞgúsÛµç¦z†€â U07'*fÒumÚªERRaò*Y+ Nûª`,M%Ü’`>…­™#Y]µ†Qª–¾Ö3À–ˆ»èüñ„IP0a×…ÑT1¥\1e¨pKFå‚Ç‚ÍmÏW)}sÇëªgä^8þeôi¬‰7›_¨&&@(Mí£SßwEfW^× F<òAspƒÂÌ¡^vS)q‘ý!Ï 1«è¡°àZâ§îxÒÇeó?놯d" ÅÜd&U˜ø€˜ÌBqº.;ç–¸ÞYôV¨2¨HJf9&,Ô««Cm,Ïn¢d„ÆT"c¦ù”Ñt‡ñY)Ÿn—ªì|ÒhŠ¯(›¥T
-iâ;.Pw…°s7¨ì@Va$ê÷´DF…Þ˜óY€GZF£éKõê‰÷•]ÌÝÎ\‰)ZˆÂÒì²ÖEC•(_=H y rZ~DŠ­áefkŠ(Å6Ýá’P£0-$æçÔ —‰µWìDh¢‰‰vh¶d¹×"oèB­#®bê <‰ &dg°¬[Ìx†ÙeÇêÞKÔØá¹}¾#Elr|¨¶uÏ«]|3–ϲ{ŠÃËÞ ¡ýQcLÖÇÂJÍý’<_±Z0F~tmŒ0Öºå’ñ+‹áE%\!¥yNb<[:·;_6I ÁÔ~Lô¥ÊO½U>Nšš÷ÿþÂÁÌ· ®CO8«Þ6åÔp…õ êâêàŸ¾tµùÓ]{®x|zO#ßzͺŸ4dq#°jà Ý*à MïD7ÃE­SzHJgoO0¦J tžþ ”b„[@X¬õ«¹ÚÀiçfG»XGM ƒ»µÙ³–K9*œæÞØ] õõì·FW5ìÇîd¦ÌI蓹õȹäW9œ6´6¬=M»Ã:·Þ¾ËÆ%Ò ŽÛªà 9=lá»~Ý[½µUÌŸR®åXw/c|ÏpÛA¡”Ä‹I¥EÆ©#Í}¥ ]¾êÖê4‚¸@’bÿ–A€aØÞ44êÚË×ëWw/ãbmž»X›…ÎÓ—bgëŸfNÎF“kÏ_’IJF³Y®ìB©ü»ÑÅwöB³i–§¾Ês—`3„£ØÍ’QVäº=MnºOX,«C6¦ˆU¤Ì.ãíÔSѦÈ/1•ÞVueÏ$SBCÅCL ÚC aå.§DãZFÎàK)I]Ù/€œ_Ñ1|žóç«£Ig8ºÐÙ‚v¯Ë÷<šé-W”Iòé] @ì®wz]ª+chft¶ýð[
-ä4 Õ’Bá nUàhjU
-e*Ѳ€Ç,EJ¡¼Mq 9jÕäå/œÆGi²5—Žøy©Ö…¯¿«vzOÖSo9¯ÞøoÒþ!²ðOH8&ºÿû—éï§( T–Éå¿TðA8Ê€3åRjxùÿƒæ–õÿ÷Å:êendstream
+Yþýî×ßÂU üù. TžÅ«LÂ@ä¹\5wQ¬‚8RÊCê»ç»Œg«n뢤DH•ÈQIµ$ª8K(ªwp9®‹®ý†òe8j[u-O{s¼ÙÚÐÔîyp8V>žiÒèÞš÷æøêÇ•íM½ãqO_ÍhÖèÚîö0^·³†y væHƒ’Yé˜ Û <á¯RFûª,a3(¤z ò8–îªÌ6"z]_ô«âhý¹5´<ô<ØuÈ_ƒ‡·[ H‹1Ê!$2
+…>°®Á€º}á’` 2™#Xô
++x¨mO+èG¸`=ª¿£ßw¾8tž@Ü~®€iãb&ýÊyÊÉe£pη³-X¢(…Žgò.„ŽÁ&Uk!¿X2üÈ¥óüÎ8‰Û0,@ÞYT¯öÂT½¡]8-õV¹I@©äµ‹¼.OÈXxœ‹k¼I´ygWŽ3Ïo¾NÀT×{ŸéÏmמ›nèAŠƒ`TÁÜœ¨˜I×µi_¨II @„É«d­08í«‚±4}XH”pK‚5úL¶fŽduÕF©ZúZÏ
+3‡zÙM¥ÄEö‡<'Ĭ¢‡Â‚k‰ŸºãIK”Íÿ¬>¼’‰$s“™Taâb2 Åéºìœ[âzgy`Ð[¡Ê ")™å˜°P¬®µ±<»‰’ GS‰Œ™BæSF[ÐÆg¥@|º]ªJ°óI£)¾¢l–RHE„cñÒáÍ‘*š8~±È$
+K³ËZ! U¢|õ },ä-T\Èiù)¶†—™M¬)¢Ût‡KBaŒÂ´˜ŸS7`\&Ö^±¡‰&&Ú¡Ù’å^_ˆ¼=¢ µŽ¸Š©/@ð$.˜Á²n 0ãf—«{/Qc‡çöùŽ±Éñ¡ÚÖ=¯tñÍX>Ëî)z /{0„öG1Y C*5÷Hò|ÅjAÀùеa0ÂXë–KƯ,†•p=†”Fä9‰ñléÜî|uÚ$1Sû52Ñ”*?õVù8ijÞC@üû 3ß‚ü¹=á¬zÛ”SsÀÖ'¨‹«ƒNøÒÕæOwíi¸þáñé=|ë5ë~ÒÅÀªƒtk¨€ƒ6¼Ý ]´Né!)½=Á˜*5$ÐyúÿPŠrla±Ö¯æj§›íb5% îÖfÏX.]äü©pšwzc 4vÖ׳Ü]Õ°»“™2_$¡OæÖ#ç’_åpÚÐØ°ö4uîëÜzû.—H38Bn«‚'äô°…ïúýuoõÖV1J¹–cݽŒñ=Ãm}„R/"$•§Ž4÷•>‚tùª[«_Ð@âIŠý[†a{ÓШk/O \¯\iܽŒ‹µyîbm^`8O_Š­j˜=:9M®<uH&)!Íf¹² E ¤òïFÜÙ Ív¤Yžú*Ï]‚ÍŽb7KFY!ëö4¹é>a±¬z Ù\˜"T‘2»Œ·SCNE˜"¿ÄTz[Õ•=L A05h1„u”»œdkM9C€/¥x$ue¿
+…3¸U£©UPk\‘;cpËÜÓ…à8~*”©DGÊR
endobj
-913 0 obj <<
+953 0 obj <<
/Type /Page
-/Contents 914 0 R
-/Resources 912 0 R
+/Contents 954 0 R
+/Resources 952 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 886 0 R
+/Parent 926 0 R
>> endobj
-915 0 obj <<
-/D [913 0 R /XYZ 56.6929 794.5015 null]
+955 0 obj <<
+/D [953 0 R /XYZ 56.6929 794.5015 null]
>> endobj
54 0 obj <<
-/D [913 0 R /XYZ 56.6929 717.7272 null]
+/D [953 0 R /XYZ 56.6929 717.7272 null]
>> endobj
-916 0 obj <<
-/D [913 0 R /XYZ 56.6929 690.4227 null]
+956 0 obj <<
+/D [953 0 R /XYZ 56.6929 690.4227 null]
>> endobj
58 0 obj <<
-/D [913 0 R /XYZ 56.6929 550.0786 null]
+/D [953 0 R /XYZ 56.6929 550.0786 null]
>> endobj
-917 0 obj <<
-/D [913 0 R /XYZ 56.6929 525.2967 null]
+957 0 obj <<
+/D [953 0 R /XYZ 56.6929 525.2967 null]
>> endobj
62 0 obj <<
-/D [913 0 R /XYZ 56.6929 393.0502 null]
+/D [953 0 R /XYZ 56.6929 393.0502 null]
>> endobj
-918 0 obj <<
-/D [913 0 R /XYZ 56.6929 363.1913 null]
+958 0 obj <<
+/D [953 0 R /XYZ 56.6929 363.1913 null]
>> endobj
-912 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F47 879 0 R >>
+952 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-921 0 obj <<
+961 0 obj <<
/Length 2095
/Filter /FlateDecode
>>
@@ -2722,72 +2822,72 @@ fhWü(½¾YhovçåvlŒ25©,*Yݳ÷›¦¿ªîÄqˆjØ|SüÍ‚Ø{©uÏ•cqÀ]#Xg±¬,ÕI’Êøߨ ´8Í
dXõcsý.Û~¸ý¿ Šç•‰×:%<ä7IE”èÚ–Ø’ª2yÑT
hZvýxªY/ý‘áÝN6“dy 8xp]Óc~{î0¨”~‚’$¡½„3×|Ó$ý$ÈR¸2Æ/{ë³ý4±òÕc¯ÕW¹aµ¤ôó,ÎXT¦JP¶Ø¶ÖVDÙ6
^AÁ³"r
-DŽ49œvDü¹„šný~¹ æÒû/å¢õ>ÉÃP©_¬MËZç¹—ù
+DŽ49œvDü¹„šný~¹ æÒû/å¢õ>ÉÃP©_¬MËZç¹—ù
ÜѸU‚>Gy%â*哦tð–RW8
Ÿ¤IhsÜ]W‰y
Õmíš™Q‘‚z
-â~ó ¯ fÙ"‡èâ9Lt¨ž¹£j¡ mK(ÈÏbµ
+â~ó ¯ fÙ"‡èâ9Lt¨ž¹£j¡ mK(ÈÏbµ
endobj
-920 0 obj <<
+960 0 obj <<
/Type /Page
-/Contents 921 0 R
-/Resources 919 0 R
+/Contents 961 0 R
+/Resources 959 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 886 0 R
-/Annots [ 927 0 R 928 0 R ]
+/Parent 926 0 R
+/Annots [ 967 0 R 968 0 R ]
>> endobj
-927 0 obj <<
+967 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [519.8432 268.1131 539.579 280.1727]
/Subtype /Link
/A << /S /GoTo /D (acache) >>
>> endobj
-928 0 obj <<
+968 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [84.0431 256.1579 143.5361 268.2175]
/Subtype /Link
/A << /S /GoTo /D (acache) >>
>> endobj
-922 0 obj <<
-/D [920 0 R /XYZ 85.0394 794.5015 null]
+962 0 obj <<
+/D [960 0 R /XYZ 85.0394 794.5015 null]
>> endobj
66 0 obj <<
-/D [920 0 R /XYZ 85.0394 769.5949 null]
+/D [960 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-923 0 obj <<
-/D [920 0 R /XYZ 85.0394 574.3444 null]
+963 0 obj <<
+/D [960 0 R /XYZ 85.0394 574.3444 null]
>> endobj
70 0 obj <<
-/D [920 0 R /XYZ 85.0394 574.3444 null]
+/D [960 0 R /XYZ 85.0394 574.3444 null]
>> endobj
-924 0 obj <<
-/D [920 0 R /XYZ 85.0394 540.5052 null]
+964 0 obj <<
+/D [960 0 R /XYZ 85.0394 540.5052 null]
>> endobj
74 0 obj <<
-/D [920 0 R /XYZ 85.0394 447.7637 null]
+/D [960 0 R /XYZ 85.0394 447.7637 null]
>> endobj
-925 0 obj <<
-/D [920 0 R /XYZ 85.0394 410.3389 null]
+965 0 obj <<
+/D [960 0 R /XYZ 85.0394 410.3389 null]
>> endobj
78 0 obj <<
-/D [920 0 R /XYZ 85.0394 348.7624 null]
+/D [960 0 R /XYZ 85.0394 348.7624 null]
>> endobj
-926 0 obj <<
-/D [920 0 R /XYZ 85.0394 311.223 null]
+966 0 obj <<
+/D [960 0 R /XYZ 85.0394 311.223 null]
>> endobj
82 0 obj <<
-/D [920 0 R /XYZ 85.0394 189.9853 null]
+/D [960 0 R /XYZ 85.0394 189.9853 null]
>> endobj
-929 0 obj <<
-/D [920 0 R /XYZ 85.0394 156.0037 null]
+969 0 obj <<
+/D [960 0 R /XYZ 85.0394 156.0037 null]
>> endobj
-919 0 obj <<
-/Font << /F21 658 0 R /F23 682 0 R >>
+959 0 obj <<
+/Font << /F21 690 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-933 0 obj <<
+973 0 obj <<
/Length 611
/Filter /FlateDecode
>>
@@ -2795,138 +2895,140 @@ stream
xÚ¥TMs›0½ó+t3EÕtÌI;ŽÁÓvÒ£$šbp$Í¿¯@Â&Mzêx<ˆ÷vŸvßzM
ˆ,}Q7c‚}vû ­ƒbÓJP*ݾ-Wfü¦=»DÖ+ýÉ\Kií“ù'çs·?0¦¥ÃUõW`[ïí¡”Ï²´ÇB >Ém[7¯ŠšæWN¸ênÈÚÊQD·ºïZ3ô¯åcõóÁª˜¯›æ/æñß*ŒKzܹénÐ8AabD\Q½Í„¾«|Üà÷¥ÿ¦œ@šendstream
endobj
-932 0 obj <<
+972 0 obj <<
/Type /Page
-/Contents 933 0 R
-/Resources 931 0 R
+/Contents 973 0 R
+/Resources 971 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 886 0 R
+/Parent 926 0 R
>> endobj
-934 0 obj <<
-/D [932 0 R /XYZ 56.6929 794.5015 null]
+974 0 obj <<
+/D [972 0 R /XYZ 56.6929 794.5015 null]
>> endobj
86 0 obj <<
-/D [932 0 R /XYZ 56.6929 769.5949 null]
+/D [972 0 R /XYZ 56.6929 769.5949 null]
>> endobj
-935 0 obj <<
-/D [932 0 R /XYZ 56.6929 744.7247 null]
+975 0 obj <<
+/D [972 0 R /XYZ 56.6929 744.7247 null]
>> endobj
-931 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R >>
+971 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-938 0 obj <<
+978 0 obj <<
/Length 1222
/Filter /FlateDecode
>>
stream
xÚÍWIãD¾÷¯ˆúäH¸âZ¼©OÍ°‰Hs`8TìrbSeìrBƒæ¿ójs6sà
-©Ç¥·†EòS€Š2Of=§&ü¡W.tÀLFXôÚyÉß'1´¦÷fÓ¸<Žn§&=Z|KÁµ½áDnãÖ [;ÑiteL-dçÞ^z@3Š Ñr0¡sSùØò¶Ð°´@EžQ/ëph‘@#†I¨„ƒÜkg+¡Û“€:cŒ£¯&L0À3LDc‚o`Â=æÕÔÕn¹ó"¦iâ$ü©ÏÍZ™Z}!W‰37µu£VDS' Ðò‡4A¤L\û6è @{{VnZ&ÜvœvR˜ò›ÍÙžÛñàVÚkÙRºåÜX³iuD·°qÅâUwñwñð—{à’ œˆ¡dCØËía~}øée ”®[³M#AJTyy+W·´@Aÿ­äóFèjc†£Þ=æ0Tè½>Ú˜ÍEq)·+\]gR½ =^Œl9¯ËσØÚ»Ç
-ÿ¨2ûù@[ –¤('ðVt„(þ° F —7¯€ÑK‚sTRRx;Ö›#<鹎{žëøIÜý7¸Pé´«Õqþ›ð™˜1t6Ihb–{â^Ž­(áÏ!½Žm‰CÁe
-5€B=—âÿëÄæ/n¸GÂä^xÞ`W>¾QAF?°9¯ª™Ù;ë ƒû9âãòíÊwÁ®|»0«ðœIª Ÿ:½äÊ0 £•0ö1¦ÿ˜SM™^ÿ^r0m%©ßÑ1¡¨Ä ûOèøéÛíü•¾]hŠÌ—ÐÒwP‰/2î#èñ4ÉPAÊ<2yazïmþ¤zt÷7¯Ì™øendstream
+©Ç¥·†EòS€Š2Of=§&ü¡W.tÀLFXôÚyÉß'1´¦÷fÓ¸<Žn§&=Z|KÁµ½áDnãÖ [;ÑiteL-dçÞ^z@3Š Ñr0¡sSùØò¶Ð°´@EžQ/ëph‘@#†I¨„ƒÜkg+¡Û“€:cŒ£¯&L0À3LDc‚o`Â=æÕÔÕn¹ó"¦iâ$ü©ÏÍZ™Z}!W‰37µu£VDS' 0|‹Cš R&®}› ô ½=+·-n;N;)LùÍæìÏíxp+íµl)Ýrn¬Ù4ƒ:¢[ظbñª»ø»xøË=pIÎ
+ÄP²!ìåö0¿>üô²J×­Ù¦‘ %*Š¼¼•«ÛZ  ÿVòy#tµ1ÃQïžs*ô^ mÌ梸”Û®®³
+©Þ†/F¶œWˆåçÁ¿líÝc
+q/ÇV”ðç^Ƕġà2…¿@¡žKñÿ‹ubóÆ7Ü#ar/¼o°+ߨ £ØœWÕL ìõ…Áýñqùvå»`W¾Ý@˜UxÎ$U‹†O^re˜†ÑŽJûÓÌ©¿¦L¯
+/9ƒ¶‹Ôïè˜PTâ„ý'tüôívþÊ ß.4EæKhé;(ˆÄ÷txšd¨ e ™¼0½÷6R=ºû*Š™Üendstream
endobj
-937 0 obj <<
+977 0 obj <<
/Type /Page
-/Contents 938 0 R
-/Resources 936 0 R
+/Contents 978 0 R
+/Resources 976 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 944 0 R
+/Parent 984 0 R
>> endobj
-939 0 obj <<
-/D [937 0 R /XYZ 85.0394 794.5015 null]
+979 0 obj <<
+/D [977 0 R /XYZ 85.0394 794.5015 null]
>> endobj
90 0 obj <<
-/D [937 0 R /XYZ 85.0394 769.5949 null]
+/D [977 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-940 0 obj <<
-/D [937 0 R /XYZ 85.0394 575.896 null]
+980 0 obj <<
+/D [977 0 R /XYZ 85.0394 575.896 null]
>> endobj
94 0 obj <<
-/D [937 0 R /XYZ 85.0394 529.2011 null]
+/D [977 0 R /XYZ 85.0394 529.2011 null]
>> endobj
-941 0 obj <<
-/D [937 0 R /XYZ 85.0394 492.9468 null]
+981 0 obj <<
+/D [977 0 R /XYZ 85.0394 492.9468 null]
>> endobj
98 0 obj <<
-/D [937 0 R /XYZ 85.0394 492.9468 null]
+/D [977 0 R /XYZ 85.0394 492.9468 null]
>> endobj
-942 0 obj <<
-/D [937 0 R /XYZ 85.0394 466.0581 null]
+982 0 obj <<
+/D [977 0 R /XYZ 85.0394 466.0581 null]
>> endobj
102 0 obj <<
-/D [937 0 R /XYZ 85.0394 237.1121 null]
+/D [977 0 R /XYZ 85.0394 237.1121 null]
>> endobj
-943 0 obj <<
-/D [937 0 R /XYZ 85.0394 206.4074 null]
+983 0 obj <<
+/D [977 0 R /XYZ 85.0394 206.4074 null]
>> endobj
-936 0 obj <<
-/Font << /F21 658 0 R /F23 682 0 R /F39 863 0 R >>
+976 0 obj <<
+/Font << /F21 690 0 R /F23 714 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-947 0 obj <<
-/Length 1859
+987 0 obj <<
+/Length 1860
/Filter /FlateDecode
>>
stream
-xÚÍËrÛ6ð®¯àøDÍD0^$ÁæäÄvêL⸲RO'Í"!‹>’²êvúï]<HQ2e»­gÚá `±Ø]ì“ÄÁðÇó‘ÒÐ BŽ<L<'ÎGع…½w#bq&-Ò¤õf6:>g¢Ð§¾3[ôh „… Î,ùâ2ÄÐ(`÷òäãÙxB=ì^ŸMÇžçþ ƒžº:›žŒîÎ.>]^'¹ûöÇ“«Y‹ñ4·Ÿ.Ï/Þ}ÞÒ½Í:)ú’Ì”ßG_¾b'ß0b¡ðœ L0"aH|Ä=†<ÎX»’®G?u{»úè æF”ùtHuáê¼ùŒ2­ºßËBŽ'>ÆîFÀ PZL¢$©PT­¢#³÷‡Ô¡!"€'"…žG5æ~e äQÝÈêµFÅ»H‹4koÉÊ8Ê–eÝ JÞía›ç,Ê&]Üü¢4(“ÁËÿ¼íøØœ½±wF•šå«®eu׋Òò·(_eÅe>ÄaOk=Ì—WV8JæÃÚj¥½¸²ÒÂÛɺ–µ™– +fÝɾÄv?ʲr#« ÒŽUTÔ ù”2 ¿šÂd÷È#: !EÄ<„
-Ô"xÈcÏxüçYyÜ2¢JÚ7‹â=¡¾iìbÿóÐŒ ŠÐ·Ž]úhþíèQس]ûØíŸ Ð7Xu+žz¯L_›¥ïEzïu|N‰C8b„,¸È£ˆ’Іy:ž ¤>”QbBò›(‹Š8-níqÖ xpš
-ä¡ u'ã ž»ªÒ<mRõÎj
-o›HiB™&® yG\O㨰ëöl/Sy'-vjwu”QÀ©Ê3ÿތ뺣•¯³&]e³áʸÔcR›Å_±‡ëu¼´wÕƒªïÈ(eœ˜aÐ!fCÛ±´* ˆr‰:Â
- 4ás*Xëü¯`R7]¨UîÞ—câ® ¼Ô>£p›¥¹Zš››³Þ5Ù¤ÍÒì²Ù”Õ7³¬ŒR6¡Kí— ³ETf‚Üdy°SjωÁ¶ËìÕ`Œ%bŒ4Ðo ãCÅ+,£t€"½Ò>),,JìÌ+Â4—ô Ø,#K;ÎRY4vy“f™].‹BÆGZ5ʨ½*WÆTØkÊh–©aÍðѲ­ø²IsùÃ~M@Ú0u˜Oó9yVQB ìBì%ÿìTËG/ŽäÀœÃ@Ë‚­t»¤&­LÆCÄqØ<;þ/ÂÜgƒ†ž¯ut ?žpÁˆ;›}PøîÛ'×ÊWy@ÝÙ/WPþqB}w*ër­õ[™v¶bæÊG§Ó­‡FM´ÿ
-ß×
-ÞƲƒZéÝ÷²ZyQ7$ºMñžÒ
-dŠx¦VØa­ôî{)­l;¬ÿ":RL 8b ¸À¸AÛê=hùh
-€¬SËþ‘.oBff¾ï¾¹¸<5û6íµ˜e5²#’ÛÛUæîÝ¿*Û î–Ÿû–²*ÚÝùAJ§A¨k35FfH Ž]Õ®(ä¢Q%”E挄ڦR->‚‹Bá^ØÚؚȒœ—wº<Á6õ« £Ak””yvog†A©KÐÞÂ0ÇÝ¥-s•á• Ö9ô•ý—ñÚŒÝÜŽÄ®›ª©¿aGªd&ØýºYÙÊ+@ëÚ¦Dà΅˜Ví©]™úkͺ*d²ÇF’ÖqÔÇí¨Zãhº*•BÃÑ«RÁrs‘4³D6Qš¸Tzät«>]¼Ñ³ƒŠS‰Ï¡Ä_ªÇ¿ kaº+Ù:%D!â3ÚÞ*¨*'e•˜æhß1ò|Á,n½ž×Êrcrp…~æƒW h_0åöt¹jR`và检ᖣî
--”ªzå¡U$äÈ×™ÀìT·Ž¦C¿æ¶Ø‡CÅQ|L§ºÞÖßúÚßã…@ŠczÌ<xΣ<ìSRL ¡¾r©ï¡~ž!_´ýhûKS$ê_€ö7€b%«¨ÿ¤Ë*¦Ûd~÷O’Xr³1!Ä-ˬÞëÃ>·Nt3fk£¾ñóqÉÌz¸á…™g‹Î–©îBB°€Xñm&‰¬ã*ëðŽìá(3{iž¸’EÍuoªÐÓ趀hÆ*ÊSÕ©åi‘ÖÒÅE2±
+xÚÍËrÛ6ð®¯àøDÍD0^$ÁæäÄvêL⸲RO'Í"!‹>’²êvúï]<HQ2e»­gÚá `±Ø]ì“ÄÁðÇó‘ÒÐ BŽ<L<'ÎGع…½w#bq&-Ò¤õf6:>g¢Ð§¾3[ôh „… Î,ùâ2ÄÐ(`÷òäãÙxB=ì^ŸMÇžçþ ƒžº:›žŒîÎ.>]^'¹ûöÇ“«Y‹ñ4·Ÿ.Ï/Þ}ÞÒ½Í:)ú’Ì”ßG_¾b'ß0b¡ðœ L0"aH|Ä=†<ÎX»’®G?u{»úè æF”ùt@uœ ©Î ‘Ï(Óªû½,äxâcìa,Ð
+EÕ*:2{(A"!x"BPèyThîW–@Õ¬^kT¼‹´H³ö–¬Œ£lYÖ ªäÝѶy΢lÒŽÁ/Jƒ2¼üÏÁÛŽÍÙ{gTY Yî°jàZVw-¼(- ‹òU&Q\æCö´ÖÃ|yeõˆ£d>¬­VÚ‹++-¼¬kY›i¹°bfÑìKl÷£,+72±
+*íXEE½O)Ãð«)Lv<¢RD|ÀCø @-‚‡<öŒÇžeÇ-#: ¤}³(nÑÚè›Æ.öß1ÍÈ }ëØ¥æߎõ‡= Ùµ}ÑùÉ
+šwÄõ4Ž
+»nÏFñ2•wÒb§vWGœª<£ñï͸®;Zù:kÒUf1«1®ŒK=&µYü{¸^ÇK{W=¨úŽŒRƉö¨b6´+@Û¨Š(—¨# Ñ@>ר‚µÎÿ
+f!uÓ…Zåî}9&îÚÀKí3
+·Yš«¥Ù¸¹¹1ë]ÀQ“MÚ,Í~!›MY}3ËÊ(õaºÔ~¹0[De&ÈM–;¥ö\‘l»Ì^ Æ(P"æÀHc
+g:+Â`ón™é‚W­|_Ë*UiXMtÕ 
+n9ê®ÐB©ªWúQEBŽ| ÌNuë`:ôkn‹}8ÔXÅÇtªëmý÷­¯ý=^¤8æñ Ç̃€×á<ÊÃ>%Åê+'Йú>êçòE@Û߈¶¿4E¢þhh!V²ŠúO@º¬bºMæ1áwÿ$‰%7BܲÌê½>ìsëD7c¸¦1êÿ0§‘ÌÁ¬‡^˜yö·èl™ê.$ ˆßf’È:®Ò¹ïXÀŽ2³—à‰+YÔÑ\÷¦
+=n ˆi¬¢<UZžiÝ(]ÜY$Ë
endobj
-946 0 obj <<
+986 0 obj <<
/Type /Page
-/Contents 947 0 R
-/Resources 945 0 R
+/Contents 987 0 R
+/Resources 985 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 944 0 R
-/Annots [ 952 0 R ]
+/Parent 984 0 R
+/Annots [ 992 0 R ]
>> endobj
-952 0 obj <<
+992 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [55.6967 190.8043 126.3509 202.8639]
/Subtype /Link
/A << /S /GoTo /D (rrset_ordering) >>
>> endobj
-948 0 obj <<
-/D [946 0 R /XYZ 56.6929 794.5015 null]
+988 0 obj <<
+/D [986 0 R /XYZ 56.6929 794.5015 null]
>> endobj
106 0 obj <<
-/D [946 0 R /XYZ 56.6929 480.2651 null]
+/D [986 0 R /XYZ 56.6929 480.2651 null]
>> endobj
-949 0 obj <<
-/D [946 0 R /XYZ 56.6929 441.7923 null]
+989 0 obj <<
+/D [986 0 R /XYZ 56.6929 441.7923 null]
>> endobj
-950 0 obj <<
-/D [946 0 R /XYZ 56.6929 373.7178 null]
+990 0 obj <<
+/D [986 0 R /XYZ 56.6929 373.7178 null]
>> endobj
-951 0 obj <<
-/D [946 0 R /XYZ 56.6929 361.7627 null]
+991 0 obj <<
+/D [986 0 R /XYZ 56.6929 361.7627 null]
>> endobj
110 0 obj <<
-/D [946 0 R /XYZ 56.6929 167.4388 null]
+/D [986 0 R /XYZ 56.6929 167.4388 null]
>> endobj
-953 0 obj <<
-/D [946 0 R /XYZ 56.6929 126.8733 null]
+993 0 obj <<
+/D [986 0 R /XYZ 56.6929 126.8733 null]
>> endobj
114 0 obj <<
-/D [946 0 R /XYZ 56.6929 126.8733 null]
+/D [986 0 R /XYZ 56.6929 126.8733 null]
>> endobj
-954 0 obj <<
-/D [946 0 R /XYZ 56.6929 98.4089 null]
+994 0 obj <<
+/D [986 0 R /XYZ 56.6929 98.4089 null]
>> endobj
-945 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F21 658 0 R /F23 682 0 R >>
+985 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F21 690 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-958 0 obj <<
-/Length 2706
+998 0 obj <<
+/Length 2705
/Filter /FlateDecode
>>
stream
@@ -2934,79 +3036,81 @@ xÚÕZÝsÛ¸÷_¡—NåéÅA°O—Ë%×ÜÌ%×ÄiÒÌ”– ‰w©);Îôï À$EJÎø©ãàò·ËÅ~f3
l¦SBE.gY.IJY:[ì®èl Ï~ºbž& DI—ꇛ«¿¾Ù,'¹âjv³ê`iBµf³›å§ùË¿¿øõæÕû넧t.Èu’*:ûâ—W¸ò¥éüŸâå»·¯ßüôñý‹ëLÎoÞ¼{{d4—ðæåwßýúêñ½ןo~¾zu¿¢û¥Œ
û \}úLgKøàŸ¯(¹Ng÷0¡„å9Ÿí®d*H*…+Û«Wÿˆ€§îÕ1Í¥B“TólDuœ©.͉\8ÕÙof„]'ŒR:ÿ±,ÖUÝ´å¿öæš16¯ëmc¿ðDήHγÜ!ÝlŒ'ê2e9¡)³²Zše¹b’äRhOóÝŠ$Z$Ø€€c(9*ã%á’Í‹j9Çaw¸–ž´j¶uýûq?‚)SÐ>Ë<áþpÍô¼^Š]ðBÏ ·bì$ŸÛ-®.êÝÎ2v“mYµNŽtUp èŽðÞÎþ8šÃCY­qV;ܘÃ94ÄJ8KÏ@ëvž1’§)êÀM[–++ÕÊp^VøÛ´[ƒC”õ±Ý[ƒP»¢%'6MaÁÑ”ÎÁ¸r6(éRM›`¤êE—g¯hÁÏó D#<{vAÁ¼”LûL­µ&œfóe½+œ†¨M¡ʺ‡kÜñ½S%ÌÿMS:fäR°6ñ VH 1Ë™·A¢µo7²›Ò¸]
Ü5XÛoMëéëUhü’7h7vfqçjþÆoŠÆÛR
-’S¡ú¶ÔÞ×׉  DYšæo׉d|Þ”–)®—UkÅ¢-ïÌ#!Žœi ˆ%ΰçðš³oRÀ=“øEöÉmÑ.6C¨ûMͳ8¶¦ÁYÑ…³ßAûò£{I›Ât ÀŸmÙx«wÚ³Þa@ÛÅ'ˆì)+cÕ'¿Øž>¯÷Ö\ã,¦iÊÛàt+4¦Îp»að-<·S„TÇ5xƒTD0H‡#ÞÀ  •ÂxÌU¼@Šèbœú'£0–ê‘“ÕæǦX›I™„$"ÕêY2u00ãçc2ªàb‰+ûô=ºZÚu5‘­ÒÔ»FO$ë! E8¸­'û<ŒÊû5†ŠS Ɉ–"
-Üx"âÂ×dU“
-¨€©¾PÕt©¦«šHÕ­R»LmÈ“T©ó\#Õ[1ŒÂ–Å=¾Óe8“ü|ÍÁiŒ‡G(<ÊÖU¦éÜìöP3”×lþÕ4¸ä¬¾\D_ñJHºÎ`ɬ€SØ JÓùžxiVÅqÛÚÍPµ¸º¨+0ë¶Á·nM{oL…6XÁ²-‹}õ"¡gR”‡Xƒ
-ˆöÆ)•ñÆY,—hÖMc‚Ñ݆ҷl½u®ŽÕšeá?Ýšo°£[o¡æKkª¥Y·n7g>‰ÞÔ'{J9¡
-vòI´‹1Ø#ÕÅÄ.sP.tIÏ‘©‹1Ø#U4M ïIñr¹­ÍÍý]ˆøÉb,ð{-Cv›Ê<‡&r˜B’·ˇjY·“x±)€íEÀ‰ÄßÏ\ï_—ñÊ>î IÎC¾„¼­‰Ê¹ì'îƒi¥ižŽ½»(îj[¬Ç>‚^¦ùOÆ‘+Ðzˆµ×4‚dyD¿X¡}[ÉØ/xšð¹ÿ¯Éu:;è4ÚûÓ²«ä™=j’ç³k—j:»Fªá™M/Ãr ýlÆÏsŽTX3H¬LÃNò>=/Ò:çE¶ËNx&°Ÿ¶ƒÐO‹4ë÷Ðö!n ªºJ:OmêÔ>ué±Qvon·õ}àµñ‹…˜&UN˜à|Ðã;‘2["BVwÝ,Ìü™Œ¼ @s쩳ìÑfá™3[X+nk—JaxËÅ¡¬þ=kM~è?Pù’Õ¯"®Šíðí¸TàŠwXpNA{?&,„9ºðŒ\÷žÍßöÕŠ„^‰@ëÎa`ô¶Ä‘“ž‰`é·cãG>Û‹ 2˽OÌÑÅA³@ÌæƯœ‡c
-Ø¿±C _ñXgîUú“U„È8äAö¬*¢‹1]EDª‹U„P”¤\=ëÈ¢‹1]EDªž‹úÜáÙ„ñ©†Z
-"U·FNÚ:Y•á¹ßújÂhpôÿ"ŸÄ³C×ù<ž Œ¦*ï%‡¾gë<%ŒœQ¯±$Ϊ–¸p¿q•qN!Zà
-ž=­¶ámºKj ðí1&Ú/L|)ŽoÌ:œ9{fغÂÈÕÀ¹+q—îsÄpÑ\£ˆ*VÆ–1å4ë¾ÀH‡.˜;ï…éæa)ŠüŸäÏþØÔÒ8gë‚7ú‡å%l$·èu$xpŽ¢«Në0b:Ä 3ãO@£A…™œ“ävNâ‘ài8ý„‘Øþb<²#T¨¹\yfvÉ»Âïc×cg=aÙª‡+·Tãï­b](°¶®dù•£Q7˜–† þ¢šað¸åöig[\G¨ý
-<Cug*0‹›9xË?Ý›Ei‘ÍßUù}¨.Õ`ç¤ïO-ƒ13~Â>:ºV_ Ó…ýuͤ ÜÐ?:Ÿ‘‘ÄnÒªXø7ñ«˜9ªÖ^
-!-h¢è¾Þ®ÜšMqWÖN"{ÎõüÞ#-½ UíiÏÁ–(†/‡ßÛíZG®Ì4Éd,Ï•@P2©,ôYþàüccƯá4Ð~Ù ­)–d,a"·­­²IŒ(Édç~“ûûÍË]Y*E¨
- =Ï‚PVx–%ÿªt*úÿ
+’S¡ú¶ÔÞ×׉  DYšæo׉d|Þ”–)®—UkÅ¢-ïÌ#!Žœi ˆ%ΰçðš³oRÀ=“øEöÉmÑ.6C¨ûMͳ8¶¦ÁYÑ…³ßAûò£{I›Ât ÀŸmÙx«wÚ³Þa@ÛÅ'ˆì)+cÕ'¿Øž>¯÷Ö\ã,¦iÊÛàt+4¦Îp»að-<·S„TÇ5xƒTD0H‡#ÞÀ  •ÂxÌU¼@Šèbœú'£0–ê‘“ÕæǦX›I™„$"ÕêY2u0œLrT¦@\,Q`eŸ¾GWK»®&R¢UšzWÃè‰d=d¡·õdŸG€‚Qy¿ÆPq
+$ÑR O#@)ɳLyg=Iû°7#Xœ³,ÕQ(üÊ1Ù ®{˜‹mÑ4# *%Y*ä
+›Ai:ÿÁ/ͪ8n[»ùJ WufÝ6øÖ­iï©ðÑ‹"X¶e±¯^$ôLŠòkPÑÀÞØ"¥2Þ8‹åͺiL0ºÛPú–­·ÎÕ±ZX³,ü§[ó vtë-Ô|iMµ4ËàÖífàÌ'1À›údbO)'TÁN>#‰v1¦{¤º˜ØeÊ….é92u1¦{¤Š¦‰á=)^.·Õ¡¹¹¿ ?YŒå~¯eÈnS9çÐDSHòöbùP-ëv/6¥°½8‘øû™+âýë2^¹3ÐÇ=!ÉyÈ÷#·5Q9—ýÄ}0í¡4ÍÓ±wÅ]m‹õØçCÐË4âÉ8RcZ¯±¶ãšæ‘B,è+´o+ûeÏA3>÷ÿ5¹NgF{Zv•<³GMò|víRMg×H5<³éeX®¡ŸÍøyΑêk‰•iØÂIÞ§çEZçá¼ÈvÙ ÏöÓvúi‘fýÚ>Ä̓AUWIç©MÚ§³.=6ÊîÍí¶¾¼6~²ÐÓ¤Ê œz|'RfKDÈê®›…™?s‚‘whàqŽ=u–=Ú,<sf kÅmíR) ï`¹8”õÑ¿g­Éý*_²úUÄUQ ý¾—
+\ñN
+µ#÷‚+ÏÌ.¹cWø}ìzì¬'¬#[õBcå–jü½õO¬ ÖÖ•,¿r4êÓ’À°Á_T3 ·Ü>íl‹ëµ?Pgè£îLfq3où§{³(-²²ó»
+#¿UÃ¥ìœôý©e0fÆOØGG÷ãÑê‹aº°¿®™´”úGGà32’ØMZ ÿ&ƒÃ`3GÕÚK!¤M4Ý×Û•[³)îÊÚIdÒ¹žß{¤¥—¡ª=-â9ØÅðEàð{»]ëÈ•™&™Œ%â¹J&•…>ËœlÌø5œÚo8Ó¢¡5Å’Œ€%L䶵U6‰%™ìÜor¿ùb¹++På¡ÀSï8±;{?\ëÙZx[<„B<ø­YÇk…}qhû×ñÌ
+ÏÒ¡äñ_•NEÿ…6_0endstream
endobj
-957 0 obj <<
+997 0 obj <<
/Type /Page
-/Contents 958 0 R
-/Resources 956 0 R
+/Contents 998 0 R
+/Resources 996 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 944 0 R
+/Parent 984 0 R
>> endobj
-959 0 obj <<
-/D [957 0 R /XYZ 85.0394 794.5015 null]
+999 0 obj <<
+/D [997 0 R /XYZ 85.0394 794.5015 null]
>> endobj
118 0 obj <<
-/D [957 0 R /XYZ 85.0394 769.5949 null]
+/D [997 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-911 0 obj <<
-/D [957 0 R /XYZ 85.0394 749.3395 null]
+951 0 obj <<
+/D [997 0 R /XYZ 85.0394 749.3395 null]
>> endobj
122 0 obj <<
-/D [957 0 R /XYZ 85.0394 221.8894 null]
+/D [997 0 R /XYZ 85.0394 221.8894 null]
>> endobj
-963 0 obj <<
-/D [957 0 R /XYZ 85.0394 197.4323 null]
+1003 0 obj <<
+/D [997 0 R /XYZ 85.0394 197.4323 null]
>> endobj
-956 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F53 962 0 R >>
+996 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F53 1002 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-966 0 obj <<
-/Length 3396
-/Filter /FlateDecode
->>
-stream
-xÚå[Ý“Û¶¿¿BoáÍX>‚lŸœÄN™Ú‰ïÒ´ãø'RwŒ%R©;Ë“?¾»ø"!’’'éL;é܃Àår±X,~Ø]àØ‚Â[È„$Ï*‹‰¤L.VÛ+º¸‡wß^1˳tLË!×W·W_¾j‘‘,áÉâv=•š¦lq[¼‹ä$Ðèõ󿿸^rI£›o¯¥Œþ?úùÍ÷/Þ>¿VqtûêÍë›ë¥¢Y}ý·çßß:ŽË2¾~óúå«oìå\¿¿ýîêÅ­Åp¤Œ
-¯WïÞÓEþ¥rñ”°,ã‹íU,‘±Ž²¹º¹úÁ ¼ÕŸNY.–”HËÅRÄ$…þ§¸XB2‘HhO‰P 7K94dFÁEoül`ü”™erá¹Ðøu¾-‹åê¡\}øÔÔåõ2¡4z·,~ùõñ›÷îi…–úò¥iLÁ¼¡F(eµÉÛÖ0]òŒ¤©Ê,——×LÈF/ÀæÐíÝ„ÄÍKì.J,ª}¹êšýqB¨ŒIÂ%;ú4!f 甩Œ1’IɯôUþ™JZÝ×;4¬,°ÆŒ¤±pR™ƉJTlžò}=!… ’¡«¦”u^m@+67Õéé ë?á ÇþüÓ¤£ð”(šÆ¡£ü§‡û™ŠN¬_«”áÐkÿ’˜wb$É”JœåªM‰€2!)V$åT 
- —ÅX²PT¥Ôôcy–&rœMm1–i
-º¡»gqF“êlÿži¬@`XXï4S,Ðà¦ÚV›|‘Qgñ/Ð;–„RæL}ËÏìÃ~Ò|Á[ôÐR ¯ôo囧üØZqØîZCîJC3h¤USweÝyÝÌçæ±Ý•«êgJyY 
-‹%§1á eΫ™õjÊ7¥ÙfÑûã®Zå›ÍѪÚüæ槨Ö×,ÖåL×@^7ûmÞ¡C“9÷HAÒKî1`šwÇ„ÚïëbuÚ£R„%2;Û£ã÷Ì',V"èñVÏBÊ#cmÓÙg½z Å¢"rm¨8Cš³ÙÚx‡ŒŽÆ~Q»q(Ä)A}<ü2#sgz¸ßç[C€ùkžZ£MçnmW:†b[ÕUÛísØù I»Ï”Æ(@;«Qmµ!,6»¤T8`Aã¨Y›ßÜü«*¢¶Ü?‚Û@
-uÖ˜HËÌïW_´Füê!¯ërc„o›¢çàõ¯ÖÆg1æK™„ wl¸ö×it˜RI(ˆüRyÁß84…Sû©êšƒEļ¶
-½Ñ
-ÓxÞB®3&r\¡À ålöÖgTÈ M~7!E»òD]%®¿Y1nE<VåÓ”.á‚%eö/
-þ}Þ–žklÌpŸÃè"KYhÍáÔ{÷¿¯˺ŸäÙ9Ž3J
-sÏ\Çð6ü½¾
-bXvÞ¨žklÕÐ/ j†¤‡f½9´»·w!âè°+ò®lÍÖ„)KáOq¬ómµ2–2ᘰiRÝô¯L«²‚tAkiK‚Äâ´aª]˜§f½M×`¤Iýyjd¶–æÓVxhòe• CĨã¼4R$xm}È­¤²¨:K6uÝ•æÕ6/ÊáSK}ÙZ5–˰Ćc¡ajjl‡†½;â/C£AÎmíφ µM Õí ³I¾±µÊ­6?¶!A¾7LWóh‹4ú¥9ìë|c\¨†œugÛ#
-€¿±\¶4DÃy°ë{ɹ‹ù¸«CñAŸøàÃChk{ç}v¶G=1ØóóýÌ{>k˜oó®+·;=7ÜçÙœžÈ\ƒ}¬ZOÕfr­z8sÑ¿…µOe=‹_°0ˆL“ô<~ ¹æñËsµò§yô
-å²ÿ+àåbÔ³í#Ù‘I§#ÙÀ¦/êüN;a’öØÅ“Ìx$sóØÏ»!÷^/-–‰$ÑX†ïë¦e(•ŒXæ L¤$NéÉ©d5À2å±L9,S¡.ðì±M ± kô86làíÙRø-+W°0ÄÆ0a6Ô2;<SÃm>(ªöó)hÓP
+1006 0 obj <<
+/Length 3394
+/Filter /FlateDecode
+>>
+stream
+xÚå[Ý“Û¶¿¿BoáÍX>‚lŸœÄN™Ú‰ïÒ´ãø'RwŒ%R©;Ë“?¾»ø")‚’'éL;é܃Àår±X,~Ø]àØ‚Â[È„$Ï*‹‰¤L.VÛ+º¸‡wß^1˳tLË!×W·W_¾j‘‘,áÉâv=•š¦lq[¼‹ä$Ðèõ󿿸^rI£›o¯¥Œþ?úùÍ÷/Þ>¿VqtûêÍë›ë¥¢Y}ý·çßß:ŽË2¾~óúå«oìå\¿¿ýîêÅ­Åp¤Œ
+¯WïÞÓEþ¥rñ”°,ã‹íU,‘±Ž²¹º¹úÁ ¼ÕŸ†,KJ¤Œåb)b’Bÿ!.–L$Ú!
+ôf)‡†ÌH"¸ðÆÙÀø)#2ËäÂs¡ñë|[ËÕC¹úð©©ËëeBiônYüòëã7ïÝÓ
+-õåK)Ò˜‚yCPÊj“·­auÉ3’¦*³\^^'$Œ^:Í¡Ûº€Ä1›—Ø]”XTûrÕ5ûc@¨ŒIÂ%;ú
+³„sÊÔbÉɤä¿Wú‡‹*ÿL%­îëf_VXcFÒX8©¿„q¢[†§|_¤pA2tõÏ”²Î« hÅæ¦:=dý'äÔŸ
+:
+O‰¢i<v”ÿôp?SÑÀúµJ½ö/‰y#I¦Tâ,WmJ”€¤X‘”S5Th½Œ(Æ’…¢’(¥Â{ŒåY˜4ÊqÚb,Ó
+¡~&=Ÿ¡;Ðè顺fÑêÁ|üd‘À<国H‰¨n:«°™
+"¿T^ð7MáÔ~ªº‡æ`1¯-€6;\­ESûö©Bo4€Úî6ùq²‡6¿·ˆ¼-Ûþ!oÚêåý— ÔBr€VL%”³ô¤#CS$véˆçÂáÿ¨QIbÖ˜Àrùý* EÌgHžËOÛ™Dr<Hgð­«ûPâ’ÈÅièØ^ -ä%róS‰»‹q)…‚½Q˜ìå/ÊûP†Òá¯Ì’ÏA-’†bÇ”p–±ÏBÏÒñµe#„¼Á­Hc$F8ŠdiÖïØA0d‰G1PÁ¹ie— ‰À°±6¿f—õ‹³ªï'ËÓy²”÷² ÞÞ3gOCÎn™´¯—›&/&Ñ1"N
+þ}Þ–žkjÌñ>‡ÑE–²±5‡SïÝÿ¾z,ë~’gç8Î(¼°
+†\ósì¹Ì¯! yMò(=7É“´yvzþ˳C
+þäo›W˜{æ:†·9àïõˆuy¦Ä_pñÇe|œº]»=x4 ¤øÒ—Aÿî
+”¥ð§8Öù¶Z™ K™pLØ4©núW¦UYAº µ´¥AbqZŠ0Õ.ÌS3Þ¦k0Ò¤þ<52[Kói+<´Fù²ÀÊ‹!bÔq^
+)¼¶>äVRYT%›º‰ŒîJój›åð)È¥¾l­ËeXbñÐqjjl‡†½;â/C£AÎmíφ µM Õí ³I¾±µÊ­6?¶!A¾7LWóh‹4ú¥9ìë|c\¨†œugÛ#
+€¿±\¶4DÇó`×÷’sóqW‡âƒ>ñÁ‡‡ÐÖöÎ;ûì*lzb°ççû™÷"|0Ö0ßæ]Wnwzn¸Ï³9=‘¹ûXµžªMp­z8sÑ¿…µOe=‹_°0ˆL“ô<~ ¹æñËsµò§yô#Ê
+dÿWÀËŨg-ÚG²“†#Ù‘M_ÔùvÂ$í±‹'™ñH æ江wCî½^Z,I¢± ß×MÿÊP*+±ÌA™HIœÒ“SÉj€eÊc™rX¦ÆºÀ³Ç65Ä6¬ÑãØ4²·;dK=Fà¶D¬\ÁÂÃh„ÙPÈìðL ·yø ¨ÚÏBЦ¡
+À3¢MÙé¡J.£çî3®·ø±[
+ðVV4.&md#¦,C8à¦XÒoŒjxzšáwÓ
+¯ßܾzù¯Q¶KƒÎæ>KßbæjN?÷®3sï¸LîÓ×3G!˜Ö˜Ó ={®i×㚈IŒw†F}ûÊ€HÜ©e¨ÑoÿÐ6‘4úkpÝÐè†`(2w^šDEc¹KA<—«¶«êû^Æ°×ÖžPp󘡪4ÉL–Eby–â8Ž†ò?–†fb+­2qØŠß´æýÚÅA@¨© 57„õðcZ—ä‚“8ñ§4Ã’ÕÈò‚AúêÏŸžœ¾ §‡ÿÌn8@ÎÍãÆì úD¨õa{gL±’iŽ‰“k¶|Œ‚n{ÑЦ÷Žñ‰FþØTE{âùuYºú…Èò# © §ú|°)ô~·Ô »jë:œÔXÊØ©œ__”¼$j C®3ëËqéÚ~—wí´ÜÊ`/Wò|·žkÚïxq±\ xÔñO˜7ï«ÎÚÂoÙØÐãWíØêÞp§ Æz³ÆËbT° ÓkÞxž Çðë¡Ü7Í<8í¹§I×apõ}{ñ¨¹¿×™SFlÂê
endobj
-965 0 obj <<
+1005 0 obj <<
/Type /Page
-/Contents 966 0 R
-/Resources 964 0 R
+/Contents 1006 0 R
+/Resources 1004 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 944 0 R
+/Parent 984 0 R
>> endobj
-967 0 obj <<
-/D [965 0 R /XYZ 56.6929 794.5015 null]
+1007 0 obj <<
+/D [1005 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-964 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F53 962 0 R /F14 685 0 R /F21 658 0 R /F23 682 0 R /F48 885 0 R /F55 970 0 R >>
+1004 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F53 1002 0 R /F14 717 0 R /F21 690 0 R /F23 714 0 R /F48 925 0 R /F55 1010 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-973 0 obj <<
-/Length 3750
+1013 0 obj <<
+/Length 3749
/Filter /FlateDecode
>>
stream
@@ -3017,83 +3121,77 @@ VŠ”ÈJñeq³æ«˜Œס±âo0Öˆ]-‰‚¯ÃÃÁß™éâ#ÉGÎtqhM“éºùv<k«©æ 癸`«s°Ó¶ p?ã®(ë#º2OŒ
w»«Ëýn@ß~ª9O;2G´ã…Ì‚ø×ûíãÁQ¶ÍàäÔ;™ÿº¯w÷³tÓ ø'ùucû<xؘˢ*R40’å)°n ž”Ê¿Dß̤›³ÃmQ€‰tM¶6žÆ¯ûÆ”(ŠËP,k‚(lK Þ H!nÆ ¨(ïÏpÒ)öðºq©-l
\5‚sÒ9¼¥i+,˜G–p¶ Çaã*¶Ê¡ª]&;¾Â‰Ô™ŸE8
Ï‘œ¡7½ÅíÙîb¥
-IPHEŒ«ãÃÒWt¶VPÕ4ëý…]×öeX °n¤+úü 0—€ït®b×UeÌŸˆÄ°ÔGØ_ÊñEãf ŽÌš\Pïkâu=–¯‘XÈî#„d9åüiº)èt)6[B •Wźl
-`z& P;š¾óAwQ³Â w 0
-[ìCL7YêX[ÇäÅU¢“¤DúxdœQíìøLÏ&¼ Ò„ñÒ'ÃÄ}¿ïªW‘³DáCEÃò¥!:T™¨Lx&]‚qßÐÓ¨íûÏ4jºˆ$2•è”§GGú¹~Ž({ð“úg¦*&"«©ÑS“€$•KåµfxP]ªfÁŸ
-pƒÚkÌS1òªFYvÖÙXZ¶#rS0øêý‡¯]»‡ñŠÞìPÁšu]bæ8ÐÁv8¶, c¸j i§V&;;!'HŠ@¨Y“S稑øCÝÕ;òŸ8mËjøÝݘվë\ä;P .t¢4Ëfô×(Ë›ÂêuáNXpå3Ú<Št(wÍkd®e&“\è|)5Ò˜Eü¤‚éÀÙºŽ^î®iðq‰=üz¾ ‰ðR!XNVB¢b¥½L_ð-î-Ô%.Ž°ÙüŒD”‚ð¹â>DÛWÖwËÔ:è-† ™RbŠs£yÀÊ+P[A€Ü6m±sË{¤x„3ý}Ì•i°`Åù¬rªN9d£y™à×°×¾ô-P§€>£Þw‘i‹ûSp’§ùa÷ÔKØiv"VAÊ•3¾ðªC„U‰$¡ã
-9dì,Ë^ŠÄ¥:^D×܃a¦±Í<Qyˆ®‰áÅÊÁ$3Œ, ä Pz
-üôŸÕԲƗO”¤À¨†¾Ä¾:€M‘Ëeô @eÒeJc2Ü@ol>„¿šÍ‚0ë*Ž6M¹!
-´6ÐÝôûÖI
-”µƒŒ¬ªfÚ©*Xª4\õv:æf}YïÔ'r³ª)h³çàv…¯£z¨íé B7Oƒg_žKÈU$§;ßÓKšÅ­ŠD#ƒôXЩ9 (P:G¿1le P_#Ü€¦
-m^p´9÷úçnG‘øÔ¿¡N”‘¡s¤CYÂD0 jtEÅœçAym•¯Þn³Ã3x½ß|¡‚Tuæ¿è­*b ‹Xíîàõ©¦‡áI†Î öPå¤%Ó‘Xj‘™Rfü¬DH—Õ }r‰ !_v. +ú'8à‰JƒyùÞ÷ø½ŠÍµ5¹$I¾ÏQ{å«Z䆧Kçs1aVÛ½ uÂ5E`¦ Ÿ/EkïèaXõÛÂ@n×ðòßUä+ÛЮ®Ý"Ê­_9î‹ÖöçfT6 ”±VDåOîOÔË7{[HéùÆ),n›Ïu,ûY´Â­Ë]?¼^S :0A‘
-ŠRÕu
-zô¦è\Ë)î•rt½Æò±W”³¢O~êiæ\¶
-¨RâyÑ>ô;ðÛQ•Aõ
-Í““Ô¡ÄäŽÅE‘&à8ÅäZPß4¾³æ?ƒÁÎ4ùß…JE:séê±Ø 6]S©OÒ`T”eý8ºq÷Lƒ ¶JSF¡|‰¤ÒÔQ¹*
-ßxá ¨ìè:
+IPHEŒ«ãÃÒWt¶VPÕ4ëý…]×öeX °n¤+úü 0—€ït®b×UeÌŸˆÄ°ÔGØ_ÊñEãf jNÈ@½¯=Š×õX¾Fb »P4’å”;ðW¤éJ¤ Ó¥Øl -T\gè²m(€é™4l@íhúÎÝEÍ
+/Ü1À(l±!0Ýd©cm“W‰RL:þéã‘qFµ³C~à3=›ð6HÆKŸ ÷ý¾«^EÎ… Ë—†têPe¢2á™t ÆA~CO£¶ï?Ó¨é"’ÈT¢Sžéçú9v¢ìÁO:蟙f¨˜ˆü ¬¦FOqL’T.•×šáy@u©š]*À j¯1OÅ@È«eÙYgciÙŒÈMÁà«÷¾víÆ(z³CkZÔ tUˆU˜ã@Ûáز€Œá6ª5¤bX™ìì„œ )¡fANNœ£FâuWïÈâ´-«áwwcVû®s‘ï@5¸Ð‰Ò,›Ñ_£,lv
+«×E„8aÁ•Ïphó(Ò¡Ü5w®‘¹–™Lr¡ó¥ÔHcñWp8L(Q08[×ÑËÝÃ5 >Î#±‡_ÏD"ñ^*ËÉê¡@HT¬´—)ã ~¢Å½…ºÄÅ6›Ÿ‘ˆR>W܇hûÊún™Z½Å°!SJLqnô/8@y¥@
+
+YÅæ:»PA€Öº›~ß:I²v€ÑƒUÕL;UK•‚«>ÐNÇܬ2ëúDnV5cVãÜΡðµ`TU¡=}AèæiðìËÓÂ` ¹±Šät'â{zI3 ¸U‘è`dРú!5‡Jç(à"†­ êk„ÐT¡Í Ž6ç^ÿÜí(Ÿú7Ô‰224pŽt(K˜&A®¨˜ó<(¯-¢òÕûÑmvx¯÷›/4Pê ÎÀü½UEla«Ý¼>Õô0<ÉÁ¹#Áªœ´d:K­#2SÊŒŸ•é²z€
+·.týðzMèÀEÄøK¾o€Õ˜ø×Më€q=Gé^+(JT×ìŒÈ’\†dÏîuÑ*èј¢Cr-§¸WÊÑ _ôJ ÊÇ^ PΊ>ù©§™sÙ* JUˆçEûÐïÀkl#DUÕ[(4OVLR‡ “:Eš€ã“kAiü}ÓøΚÿ ;Óä*éÌ¥«Çb7ØtM¥>IƒQQ–õãèÆÝ3 ‚Ú*M…ò%’JSFåª(|ã…ƒF ²£ë
+U™¿?`¢6 Ð’òÖVà
endobj
-972 0 obj <<
+1012 0 obj <<
/Type /Page
-/Contents 973 0 R
-/Resources 971 0 R
+/Contents 1013 0 R
+/Resources 1011 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 944 0 R
-/Annots [ 975 0 R ]
+/Parent 984 0 R
+/Annots [ 1015 0 R ]
>> endobj
-975 0 obj <<
+1015 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [120.1376 365.8002 176.3563 375.0156]
/Subtype /Link
/A << /S /GoTo /D (controls_statement_definition_and_usage) >>
>> endobj
-974 0 obj <<
-/D [972 0 R /XYZ 85.0394 794.5015 null]
+1014 0 obj <<
+/D [1012 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-971 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F48 885 0 R /F55 970 0 R /F21 658 0 R /F39 863 0 R >>
+1011 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F48 925 0 R /F55 1010 0 R /F21 690 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-979 0 obj <<
+1019 0 obj <<
/Length 1632
/Filter /FlateDecode
>>
stream
xÚÝXmoÛ6þî_!û`Ãñmý”iêM»ÄÉÖvÅ HŠ-T–2Kn ýï;Š”,ÛLtÁ6 þ`R<ÞŸ{îŽ 0üHÀšê@êqLx,G8˜ÃÚɈ8™°
-‡RÏf£ƒçLiAE0»èR+E‚Yú~ÌCЀǧ‡¯Ž'!åx|~|6á|| íüõ›ã³Ã‰ŒÆ³éëÓóI(±ŽÆG/ßÌ:‰¯ë8z}ú|zr±Ñ3ù0{9:žõ§ž”`fŽðûèý¤pà—#Œ˜V<¸… FDk,GgˆGŒuOŠÑùè§^á`µÝêEŽ`D™ >èô
-·£†1Ò¸„[Y“ïPR•×CB¬¸3x[­‹ÎHQT·vØ,2;Hªå2.Ó<æC¢€SJpI¤•­Þï¬h¤†©‰´”Â6.ZèWYQÅ©ÇÓÐmpŠ-bM.I.•e–4vÒ=ì£h§7ÕÊ hÎì
-8PvH¹§H›âà-öa¯1ªÜ¯äTiĈËÆGsÀ}غ¬µç@®žQŽ'r;÷ÎzjÙÚj#ÃW€
-‹¨„¦ͳÒcZ0D¥ê„o,qç«xi-Üæ… †—Ÿ²2‡wv-±é²±/Dà bèÌ}Eú²ä½Û¶[C&ú­…»j yÏ°vÌ2F‹º²x1&PD‰ÜÎè4¯oŠØxL¨+
-q†£>ÛÛËÚm'Pû#%†i‰"ÍÈCº kß3øN?ù¶]ƒk˽Ø}t¹a‡óNCëÎ2ÅÕ·³-5ERIÅNC1Š,cϧ'/.Þì‚D$!ÁY0Pø÷\ì5îû¸CˆIŒ-' ûëÛô†ô¸/A®¥¾LÔ‚H~C-èêÍæêºãJC:Äu¶G¶®7„èǃ‘i†$–
+‡RÏf£ƒçLiAE0»èR+E‚Yú~ÌCЀǧ‡¯Ž'!åx|~|6á|| íüõ›ã³Ã‰ŒÆ³éëÓóI(±ŽÆG/ßÌ:‰¯ë8z}ú|zr±Ñ3ù0{9:žõ§ž”`fŽðûèý¤pà—#Œ˜V<¸… FDk,GgˆGŒuOŠÑùè§^á`µÝêEŽ`D™ è"2€Ž‚"%y ¹F‚QÖbój•7‹å$Ÿ,–q.Sþä©9Xa›æœ¶Òu–¬²Æ‰&ììîŠòrzr¹¾b—e|ôlyŦó·çÏš·?Gó·å%žžÅ»“‹ù»¥¾›žÏSªÍÚN}H5RJêm+ŸwlÛ(W7M^•µ5þg+áÝf×ñºhÂ:[}ÊVVœP‰0üˆ÷TÝŽÙ:ùU™&¿ÁÔï%xyð€Ü€Œ°jEf‹¼¶ÔùcZdßÛI~íþ˺‰‹"Kí4®­Âí¨aŒ4.áVãAÖ$Æ;”TåµÇÅP@+î ÞVë¢3RÕ­6‹Ì’j¹ŒËôù(à”FiFe«÷;'ª†©‰´”Â6.ZèWYQÅ©ÇÓÐmpŠ-bM.I.•e–4vÒ=ì£h§7ÕÊ hÎì
+8PvH¹§H›âà-öa¯1ªÜ¯äTiĈËÆGsÀ}غ¬µç@®žQŽ'r;÷ÎzjÙÚjZæ
+PaÑ
+:µî‡ÌmMƵ ÎÛGeÖ6xÔ–5x§› #ÀÊŽæ¦Æ¥÷‚¨‘”\õLjñ;,šlUÆMþ)ƒØÁZŽ… ¢Qmg¶uÔT².KmíóQC.PÓÚ}aìqQBóÃ}œ[LÂg.Õ×7®Bx0…Hh=$“?¡8¤5!l—Kmáq¨¬œÁe•æ×wk
+ªª¦ü!° Š¨hÜômõ õCS0ALp!ãˆ,ú2„p™€[m>/c/ÛL‰ŽHÔn:ÊVMœ·x“ñÅéô;ªÝ~˜Ð¾ÏÂsw ]§4¢]§4Ë•ÝÑĻ՛,É €‰ÇI{ÁûÞÊŵ}šfu²Ê¯ì% ºr¹cm«EõWE†|·¼Ù"«]¤GPñª[í{úî[¯¿`iÔ'òGSÑ<%X!ÎpÔg{{ÙB»íjD Ä0-Q¤yH7aí{ßé'߶«ócpm¹×»ƒ.7ìpÞihÝ™B¦8` úv¶¢¦H*© Øi(F‘eìùôäÅÅ›]ˆ„"$8 
+ÿž‹½Æ}·c(1‰±åä‘a½s›Þ÷%ȵ³ÔW‚ ƒZÉo¨]½Ù\]w\IcH‡¸ÎöÈÁõ†ýx02ÍÄ`ܼ©þ«ì¥É^è+ðľB_ · ‰uGßÙñÙ«ûù;PùhÞsÓÏà¡ŸfpRd]ìÛhÇ¿ì¼¹ŸbvÒÿ7ÇFŠA»þ2ÇDò’v›žÎî§Ø@ã£QlÏK?ņnþ{´“þW(F àX2¸)Êí/{_
endobj
-978 0 obj <<
+1018 0 obj <<
/Type /Page
-/Contents 979 0 R
-/Resources 977 0 R
+/Contents 1019 0 R
+/Resources 1017 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 944 0 R
+/Parent 984 0 R
>> endobj
-980 0 obj <<
-/D [978 0 R /XYZ 56.6929 794.5015 null]
+1020 0 obj <<
+/D [1018 0 R /XYZ 56.6929 794.5015 null]
>> endobj
126 0 obj <<
-/D [978 0 R /XYZ 56.6929 466.6686 null]
+/D [1018 0 R /XYZ 56.6929 466.6686 null]
>> endobj
-981 0 obj <<
-/D [978 0 R /XYZ 56.6929 439.3642 null]
+1021 0 obj <<
+/D [1018 0 R /XYZ 56.6929 439.3642 null]
>> endobj
-982 0 obj <<
-/D [978 0 R /XYZ 56.6929 409.8468 null]
+1022 0 obj <<
+/D [1018 0 R /XYZ 56.6929 409.8468 null]
>> endobj
-983 0 obj <<
-/D [978 0 R /XYZ 56.6929 397.8916 null]
+1023 0 obj <<
+/D [1018 0 R /XYZ 56.6929 397.8916 null]
>> endobj
-977 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F48 885 0 R /F21 658 0 R >>
+1017 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F48 925 0 R /F21 690 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-987 0 obj <<
-/Length 2336
+1027 0 obj <<
+/Length 2335
/Filter /FlateDecode
>>
stream
@@ -3106,31 +3204,33 @@ xÚ¥XK“Û6¾Ï¯Ðm©* ˆÉä”õ#åœZÏìa+ÉCR3Œ)R);ã_¿Ýh
A/h5þ;“çe¾.àŠœ»ò?‹‡tùsç÷þãص 8!†BgVo„u)Ü*M3_t¤¾èxóújJ
»ÿ=Vˆ
îÒjÜbLj»Ãb(ÊÜñ3RÀ†zIl‰îçYÔcõ‹|™
-iVQyÔXCröš’>CãXÝÙûébå&»²=“œpØ®0ÀLa@Ô•»ósd$Ët
+iVQyÔXCröš’>CãXÝÙûébå&»²=“œpØ®0ÀLa@Ô•»ósd$Ët
+ïA{§¦‚ô|‰íÖüdØ@óXò¾éìéé\8<ö綊O²ËVWÍ¢ÇÁvgÇwô󵩙Bü²öp4• Ó¢•‡#™*†H
+"ŠgŸWNü?n¦w»endstream
endobj
-986 0 obj <<
+1026 0 obj <<
/Type /Page
-/Contents 987 0 R
-/Resources 985 0 R
+/Contents 1027 0 R
+/Resources 1025 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1001 0 R
-/Annots [ 991 0 R 992 0 R ]
+/Parent 1041 0 R
+/Annots [ 1031 0 R 1032 0 R ]
>> endobj
-984 0 obj <<
+1024 0 obj <<
/Type /XObject
/Subtype /Form
/FormType 1
/PTEX.FileName (/usr/local/share/db2latex/xsl/figures/note.pdf)
/PTEX.PageNumber 1
-/PTEX.InfoDict 1002 0 R
+/PTEX.InfoDict 1042 0 R
/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000]
/BBox [0.00000000 0.00000000 27.00000000 27.00000000]
/Resources <<
/ProcSet [ /PDF ]
/ExtGState <<
-/R4 1003 0 R
+/R4 1043 0 R
>>>>
-/Length 1004 0 R
+/Length 1044 0 R
/Filter /FlateDecode
>>
stream
@@ -3143,12 +3243,12 @@ qª„Ñ«ò^ÿï>‹«>÷— .13×…Óƒ!¶3¢SËAÕ”ih¥Å¨Š^…(€<Îm䦽ªšÛÆlLÊâ³ò7Ù
n*Œ1½÷¨¾x¥Æˆpîâ‹&XîÃœ§³±è\íD¤ßä0}#XŒûž˜‹¸À>#^V°¡|2Îi‰9ÊÎr)`˜¢Xh¡Ò& „hb—H°Œe"Ãê
þrÓGçX5¾ûû8‡´ÕªOª«t–Ô³$Ây°‰—BÒ›ÀÄ5©/¨vp÷o`kA“ôr ±ñœÓ4N.4Žæ
endobj
-1002 0 obj
+1042 0 obj
<<
/Producer (AFPL Ghostscript 6.50)
>>
endobj
-1003 0 obj
+1043 0 obj
<<
/Type /ExtGState
/Name /R4
@@ -3158,127 +3258,132 @@ endobj
/SA true
>>
endobj
-1004 0 obj
+1044 0 obj
1049
endobj
-991 0 obj <<
+1031 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [470.3398 477.3512 539.579 489.4108]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-992 0 obj <<
+1032 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [316.7164 465.396 385.3363 477.4557]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-988 0 obj <<
-/D [986 0 R /XYZ 85.0394 794.5015 null]
+1028 0 obj <<
+/D [1026 0 R /XYZ 85.0394 794.5015 null]
>> endobj
130 0 obj <<
-/D [986 0 R /XYZ 85.0394 769.5949 null]
+/D [1026 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-989 0 obj <<
-/D [986 0 R /XYZ 85.0394 580.0302 null]
+1029 0 obj <<
+/D [1026 0 R /XYZ 85.0394 580.0302 null]
>> endobj
134 0 obj <<
-/D [986 0 R /XYZ 85.0394 580.0302 null]
+/D [1026 0 R /XYZ 85.0394 580.0302 null]
>> endobj
-990 0 obj <<
-/D [986 0 R /XYZ 85.0394 539.9341 null]
+1030 0 obj <<
+/D [1026 0 R /XYZ 85.0394 539.9341 null]
>> endobj
138 0 obj <<
-/D [986 0 R /XYZ 85.0394 315.9171 null]
+/D [1026 0 R /XYZ 85.0394 315.9171 null]
>> endobj
-999 0 obj <<
-/D [986 0 R /XYZ 85.0394 282.0038 null]
+1039 0 obj <<
+/D [1026 0 R /XYZ 85.0394 282.0038 null]
>> endobj
142 0 obj <<
-/D [986 0 R /XYZ 85.0394 146.7217 null]
+/D [1026 0 R /XYZ 85.0394 146.7217 null]
>> endobj
-1000 0 obj <<
-/D [986 0 R /XYZ 85.0394 117.3479 null]
+1040 0 obj <<
+/D [1026 0 R /XYZ 85.0394 117.3479 null]
>> endobj
-985 0 obj <<
-/Font << /F21 658 0 R /F23 682 0 R /F62 995 0 R /F63 998 0 R /F39 863 0 R >>
-/XObject << /Im2 984 0 R >>
+1025 0 obj <<
+/Font << /F21 690 0 R /F23 714 0 R /F62 1035 0 R /F63 1038 0 R /F41 910 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1009 0 obj <<
+1049 0 obj <<
/Length 3348
/Filter /FlateDecode
>>
stream
-xÚ¥ZIwã6¾ûWøú½‡$
-Ež©ët¢0Îóäz{%••Â4WW?NfÝÖEFÆQ˜ˆ4Yàd"–8©ò00…œ|ÚTð¬T¶Ú¿V{jꦡ–ilG­®(Œ­»Ö4Í‘Wíëž7#_KYÛ~‰¿8Óûó‹n»kª~ìµ}Õö–Ï^Ÿ-v¥é«’:_ºÖ gAÏ´Ô~£›
-ìfèËîÀ§u{ZWìݸE k4Ç6³t0Pw¤f¤
-þè†=>ÕuHi± Hk‹n¿ëö¦¯ü
-ØêöŸþn&SÁ»ÚšçfQŽ#%"ÊO@&bb4:°AtâÔ`‘ŒKÖÇ)Ä=Y–ÍX[×ûªúRÑ¥¦ıˆyƒÎ$”ˆ0ÇØÍKh%Càáôd¤‹Ð Çߺ×júˆ˜TîK—ˆ|J;’’ÇÚßòGÛ,‘’†zR¼žã ˆ'Nudœ‡YŽÁߥgEÏ’x÷”€¼-»¿ädŸ"Š‚»’œÜd­1f+ãàaÙ"D®Ó¹ ¸ãÌaA R‡*‹ô_ˆ! ã$öÂ%7™0§›Î”g“þ—çÔîŽWU;ªæ*Ñ2Œ¢(þŠŠN|m8>:±Ià6ª Æœk·9%¹YÅp„YÅ~æì~çÉÙÚÜãÍr’K>Da–fr⿲%·š—Å£[¥ñyÞƒ#lÐ}Wt¼×Aì4Ô%„†ÆºãClÃøq¼Åm¢³+ë¡u ,~š7KÐPSpŠ<Q ã)"ÇŠ¡8^£|ðÃÀ…úäD•cjm¢½ÏW²€Zgχý„øF¥'§›r¨¡‚‡÷oi
-‘N¢ø¤ãâm±sÀÐy¼*E˜I•,Ú01¼ cÅò}œX¹`™ÍFsZË¡®îûj»ë©ãBC¬·8kulØ8ÔBâÆ7Ô=ÍÖܯ>¨±âú%…¥%h¬99Åñm÷õ¼cfË `€yšt©£Íš±UE Ò\[Ùb_ïNç8Ç+*Àú(˽döX̱ýÊiÊ¥ˆ”
-•Ê½ˆŠ†óË¿¼Eé"7Éû¸„ry¼ˆÂ8V^[mø‚!ÇbLÎô%•ùyl$96z™ô§‚ê_†;UϺ(é~O6â‡y-¿ÖÕ±Ú ×Ùú¹†;Ç,G0_]\Ãw±aw®v"¸hƒ_@°Š[á‘
-ƒŠêsãŒö5‘®¡ÈÈmåï` 4ŒvÁS¨á`Pr¸+Â_IeA°Þia<…ä@í‘\<cañ2c¥ 3d£´ûaÇAýÓÉý¹»Nëà5TÒ’L«±]k™¼–&È‚^L[ñ¶£¾ö ¦íç/#d‚*+J®é “lŠÃ àé¬àSóÿYæùÉA¼XvÞ:‚ô”~š#gÖkŽ:‚´‹:°Ku\tßµ¥A¦B “5;-è#„’IÀ‚¸W"lÓ<Ÿ+Î0fÆbÚRaöƒæMÎ’Ÿ¦¦b:v:PË–š¤ß+¿¸¥£]¥ZM%Ž³5ï´Ý–GÊê™ÂÍ®†µ+V÷Ÿàeüu%+\Mœ™ž
-Þ€#ì6'—B'CK›dªÎâ)h*óÉRÓ1-¢ïÖ•I±‚áEè×_kC
-B¾aé˜*bBîcD\ñÙà/ü Éãᮤ†-k^__“8/S|‚“Y@*Ǫ!n¤Z•;Nù*4æ/¤™#­o]íǨ
-âšóæ·D0(U¡ƒïºZ«3À–‚ïh `¥`—)KF+{ Ò3œãÈÄû°7Éú¤/ÉÁ°×Gêºè:¾Z
- E,¦¤Px[t?¬ÐÂé8W–3IÙ.èZÇÙH ï~¢à[(z„ÅĘÕB2Ž*tÑ:%äu]@.aê‘Ŧ£°Xsš ßÁúxä…&Ûôi펟CµW¿'Á×XH…¦ÚÓz/¦iM_@ĪYϼø™€å5ô–ð±Û7å"*Þ¶¬:¨ŽÈ(Ò92Â!£H'È(!£¨Óñá‚Õ­D·¸¥®šùÐw¿ÑÐDµ Ø„DKËX·ðªÑÁðsµ©Ûò«¿÷õäw'¨T3ºÔÑ)Î㌱Ž½N>x9‚— ™' 1b’
-Ë®0òkïñ¿1Ÿs!Ð
+xÚ¥Z[w£F~÷¯Ð[ð9#4Mþ93öÆ9‰3k{/'—‡6 ‹ …k4¿~«ºªHÌæaè{W×å«‹®ø W2ñ“,ÊV*‹}„r•ï®‚Õ+Ìýý*ä5k·h=]õÝóÕ·wB­2?K¢dõ¼™œ•úAš†«çâW/ö… 'ÞýÃûÇÛŸnž¯UìÝüx½ŽdàýòóÃ-µžožînŸ¨û[ ƒûÿÜ=Â7¼^ GÞûïo>>ß>Ò|̧Þ|ø×u†ÞÍÃûÛ4õáϸ»½Á»žÿùxûtýûóW·Ï㣦/úóê×߃Uïÿá*ðE–ÊÕ:fY´Ú]ÅRø2ÂÔWOWÿœÌÚ­‹Œ ?I´ÀÉH,qRf~"`
+9ù¼-áY‰òLÙ½•µU]SKצ¥V›çÚTm£ëúÈ«ºªçÍÈ×ߢ(.†Ý¿Ä_œéÝùy»Û×e?öš¾lzÃgoÎûB÷eA/mc‡S¯gZ*·ÑN €ë0ô3)#ûªß‚ ªKf,$<±ÂåYä¹oÓöÔ(èhœÚíÊ¢‚Kíë²ÐÓ›Þ²æJoyý±Ñ»*§ùô(ˆ¼—2׃áÃú­æ íPtà‹›l[j˜º=ðªmÙPK/½¦ÖÝu˜z¯x@”9~@˾¾'vAgc—À_x ª±O4Þ7¦/uG"ffG©‡B›ŸW”µ>ºó^ŽîúZ!À7”ôÝUÍЗƞ*@aàUUóJsº(ªÞ*Íü]dÅD¶!³²ÇâW*©µ¯u2tSÌ•”ößįH¿à“œ”†èÒ#6˜^wÌšd”©Û(=³ú¢=ðimGëòN›­}P
+0B
+‡cG.º‘'`d›'Ï O0ú:hàN_ÒqõhKµeH–°˜3åíZ+æÌékܧþÄ
+'9™¬â,ò#&ÉMv¯+j<N²·qýzºá2{»<¹öëGzÈܵC„ …$Ð:“ {Ÿz0rå…ùýœè0ˆý8€¼;N!Ñ “åDs\µž.»$õò´‰¯ãW!8À™«£€^ı§óÞJܶ éÃø¹7æ\~wÿð¦2ú˜aÑuÏÛHÚز*Œ k°É16!ýršC‹¸Ñ@ÐdŒîŽØ•¬Ç4î oabQ‘7bÚƒN ¶š%BH9Þ4©/Le P--1¸¤Éë¡àŽÃil;*aûb<ŒóP/q
+cKüž|*,rÀû°Á†‹ótÞB¢qà€/²Q¦ÖAÛ\*ôÚw3SFXûÔ¼£Ô)8Ü;ÑŒçœ\a•Í11køè;Ç[xFÇß-U×îË@¸!(ÓƒáÍ`C;„© ”À8‚ä ƒ$çÈ ‚„ˆ[XÅìƒ`˜QløL 68µ·*pé.E šÄέWŸ){Zoºv·.àè
+äd5Çwí×óŽ™-G€ú¥zjÒy¤fŒ6ïhÆ”%5Hpmiò®ÚŸÎ±ŽW,T€õAš9ÉtXÌ1ýÚjÊ¥ˆ¤ô¥ÌœˆòšóË¿¼E*"·˜÷q åòxøa(¶šðCŽÅ˜œèKgç±Q̱ÑȤ?Tÿ2Üy*{Ö%@ L×ð{²+8Ìkqø­*(ˆÕV¸vÌT/Ü9f9‚ù"¸èb¶¸‹ ³·µÁEü‚•”Ø
+‡TT”ŸûëÐg”«‰´5EFv+C˜¸ a´ žB ƒ1‡»Â#ü©,øíÈ&œJ 9`{$ÇXX¼ÌØ8öS¥£´ûaÏAýóÉýÙ»Nëà5TÒŠ™VmÚÆ0y M½ê¦úâlF]ítÓÏ_FÈTVŒ¹¦ 3L>²)ôS€§³J€KÍÿg™çg ñJ`Ùyg RSúiŽœ L§e8j R6êÀ.ÕýqÑ|׎™
+%8LVì ” *Œ
+& âN‰°Mó|®8Ø‹iK…mØš79K(H~ꊊéØiA-j’~+¬üâ–Œv(9•8ÎV¼Ó´;)Ê
+##¸bV¶XÝom|‚—ñ×–¬p5qfz*xŽ°ØžØ_
+AîO†–H6ÉDžÅS0P—ú“¡¦cZDß-“b ËЯ¿Uš:%„$|ÃÒ 0UÄ„Ìň¸â³Æ_*ø'" “ÇÃmI [F¿½¿&p^:ÿ'³€d†UCÜHµ*{œtUhÌ_H3GZßØÚŽQÄ6[æ?ÌïJˆ`PªByß·´V §Êƒ-9ßQCÀJÀ.]ŒVæ<¤gXÇ‘Š öao’õÅ®$ÃN©7ê¢í¸j)l€°˜’BálÑþ°B §ã\YNcʾpAÛ@8ÎF}ûßBÑ#,&Æ,¨’qÔP¡‹V !¨ër) SÔÈ·-…ÅŠÓ\øn@ÓÇ!/4Ù¦Ok÷üª½º=¾Æ€@J4Õž†Ð{1Mú"–õf~àÅÏ,¯¡7„7ŒmW‹¨xÓ°ê` :"£HæÈs„Œ"™ £„Œ.¢NƇ 6V»@Ý⎺.j¶äCßþ:DCÕ‚`V -cÝ«FgÃ/å¶jŠ¯þÞדߠRÅ8hSwD§0 SÆ:vô*²øàä
+^0d~œ,Ĉ5ˆF(,Ú|ÀÈ­]¼ÇýÆ|BÎI„@„qHð°ž7o¬*žQ¶A4ûÍä…õa0îWWÍvb6C«—~ÙiÔ àÙüw—ñ×:WŽŸˆSNœ“ѽÆFxBùi˜
+ú!G‡·½\@_x¥ [¾5&~(Š7,ûol
+©mø¯(¡Ÿ¡AAÉM@rgJ'Ï¢«P
+ó§ñº«¾¸Ë8‹W‰=öÃO¿PÚ¾
endobj
-1008 0 obj <<
+1048 0 obj <<
/Type /Page
-/Contents 1009 0 R
-/Resources 1007 0 R
+/Contents 1049 0 R
+/Resources 1047 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1001 0 R
-/Annots [ 1012 0 R 1013 0 R ]
+/Parent 1041 0 R
+/Annots [ 1052 0 R 1053 0 R ]
>> endobj
-1012 0 obj <<
+1052 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [464.1993 488.466 511.2325 500.5257]
/Subtype /Link
/A << /S /GoTo /D (proposed_standards) >>
>> endobj
-1013 0 obj <<
+1053 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [55.6967 477.5271 105.4 488.5705]
/Subtype /Link
/A << /S /GoTo /D (proposed_standards) >>
>> endobj
-1010 0 obj <<
-/D [1008 0 R /XYZ 56.6929 794.5015 null]
+1050 0 obj <<
+/D [1048 0 R /XYZ 56.6929 794.5015 null]
>> endobj
146 0 obj <<
-/D [1008 0 R /XYZ 56.6929 556.0057 null]
+/D [1048 0 R /XYZ 56.6929 556.0057 null]
>> endobj
-1011 0 obj <<
-/D [1008 0 R /XYZ 56.6929 521.4772 null]
+1051 0 obj <<
+/D [1048 0 R /XYZ 56.6929 521.4772 null]
>> endobj
150 0 obj <<
-/D [1008 0 R /XYZ 56.6929 361.9951 null]
+/D [1048 0 R /XYZ 56.6929 361.9951 null]
>> endobj
-1014 0 obj <<
-/D [1008 0 R /XYZ 56.6929 325.2573 null]
+1054 0 obj <<
+/D [1048 0 R /XYZ 56.6929 325.2573 null]
>> endobj
154 0 obj <<
-/D [1008 0 R /XYZ 56.6929 133.2872 null]
+/D [1048 0 R /XYZ 56.6929 133.2872 null]
>> endobj
-1015 0 obj <<
-/D [1008 0 R /XYZ 56.6929 104.8892 null]
+1055 0 obj <<
+/D [1048 0 R /XYZ 56.6929 104.8892 null]
>> endobj
-1007 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F55 970 0 R /F39 863 0 R /F48 885 0 R /F47 879 0 R >>
+1047 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F55 1010 0 R /F41 910 0 R /F48 925 0 R /F39 873 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1019 0 obj <<
-/Length 3002
+1059 0 obj <<
+/Length 3001
/Filter /FlateDecode
>>
stream
-xÚå]sÛÆñ]¿‚o¡2æå>CòäÆJãLâ&±Úfšd¦ ›¨)€! Ñj§ÿ½»·wÀI©™>u<2îc±··ß» ˜qø'fÖ0®2=K3Í f¶º»â³÷°÷Ç+áahCýáö곯T:ËX–Èdvû.Âe·VÌn×?Ï¿üúå÷·7?^/¤ásÍ®&áó—¯þr-„˜¿|óåÍ+Úzõæ- ¾ºyyêù퟼aµ±ð^xóí÷ß¾¾íßøõö›«›ÛŽÒø6‚+$ó·«Ÿå³5\ê›+ÎTfÍì
+xÚå]sÛÆñ]¿‚o¡2æå>CòäÆJãLâ&±Úfšd¦ ›¨)€! Ñj§ÿ½»·wÀI©™>u<2îc±··ß» ˜qø'fÖ0®2=K3Í f¶º»â³÷°÷Ç+áahCýáö곯T:ËX–Èdvû.Âe·VÌn×?Ï¿üúå÷·7?^/¤ásÍ®&áó—¯þr-„˜¿|óåÍ+Úzõæ- ¾ºyyêù퟼aµ±ð^xóí÷ß¾¾íßøõö›«›ÛŽÒø6‚+$ó·«Ÿå³5\ê›+ÎTfÍì
+¶û7Á’T8_9äUÛ
+GźØÔ{áÁ2Üxº-›_ß” *£4^°Ös^8”H!.7EKK÷;ÿîÁ#…†–p\Aý oíQ Ym³ùŸªb„Ìã‡ÑÒoÕþHϤ<Ÿlǘ¤Ùün8HÎmã`à‰XØëïi§Ùå«Þ4ujŽûÝ«5Œö©ÅM¢—–ª¢eÞ´eíGB¶J ʺ)WF§0ùEJ½s õÇGœ /KÞÔ!+Ø*¯üR¾ýàG5=—5šŽIÍP›Ê€Ê³íEЭ‘²½úîo“ªEfi¶3/aœØ NX^zàU]ý¹|O—_ÓªÓGx¾«÷bËšäáýßî‹}Y8å´N±k;ò ZDL™©$ .´)ÛB°ŽìckKl"=ø‹ Œ mãÝ~¬ˆYþ>Ì)©PJ Š ,q¥àài…Í:œ ’#— ?Ëc>È'a!Gqi™ŽhpÐq5(ÚMz Ç"™‚8ähR "‹=Î:´8!]Âùl9ïU´E
î·ÚÞ¯Ëê½ÇïbЇ½ð™Ð1J5màŽË†»Hé’Ö)qâx¶Iw(N•Eñ ÑGÚ.•u绸|¿Ü–+”݉N¤#.¸ZqByÁý
Û9S§¼¦$K2¡/él’rñ,G–Wð¯¸\Ó0Åd}H¶þÜo×tq®²ö0Í=%0bž7ýeÝ2Ÿ–ˆ¿+Ÿvú7½óE]
Ž“v¢N‘ Rëu‰ÆŒ¬:3äA7&ãP¢?Á¦ãVʳw”œñä¹&!WÆ&E×h6dHHº¯0quW¬Jrv|þÝO´x$w\tÙ=…¨£²ê($¸ºÔ©¸¹õªËšÑ=£ÚüýÓO‚ré)åÒó] aŠ|8¼C1B_®#_»Þ—C´2Á]`𘪢X»¸„¯«üÞE
@@ -3288,157 +3393,155 @@ xÚå]sÛÆñ]¿‚o¡2æå>CòäÆJãLâ&±Úfšd¦ ›¨)€! Ñj§ÿ½»·wÀI©™>u<2îc±··ß» ˜qø'fÖ0®2=K3
|_æ«]ûôß;N]W—¼hs²½*!DÚŒSº¨0¾‰Wk7ªéé;•0Ú]», …JXÌQ¹;Í–RÅlØ®·ïPS„ ¡wlÂŽ5´ƒ2N<ää+ á`ÊvE±kqOä?³‰
I!ñNDÅ/e¤ó=mEû$…÷
Ĩ ìSgyT©¸¦y32ËÛ>xßUP‡2Çm‹U[>xHäÍÈõÄ&œí®ûøUÀ ‚Ãv
-“7 `©gŒN¡wbAÎÇü&ePÁ†¬¶ÿL„N|&‚š
-*Ri¨âÌ…_¢ÄPgd .ËèÜ©‘ŒÆÇNË(>öÿ/¨@^ å6°ë¼#¨3 P—%xîÔH‚ãc§%{ÙÊ@¢uU<IŠF2ÈíÒ'I1yv<ù/¥±NÌx–M÷pð' šš}©¦NNª£NLº2kÿ½×)¡OC[1ÅÖ_ë,†¿ô÷! Gë¢YíË%ý8ŽZÖø+ (Eæo궨ò6ŒQáéŒS4YZv4šÁGâ/FeÈàûqìô6!cæ¨Î¢ÅÇú~ßÿ4(ª8ŠÐökŠb¬ÒD`µ²3Ÿ‡%OÚÜ¿ŸÑàÇH¹;øEü±rãEF¼Åj(ÜJ1qDMÀÙ˜#û
-@—(ãŠ>+ ÍØd\_ÇáiT»¢)¨%þž‚„ž¯¶Ôì Á°¡é¿|+0Ø„Áÿü3©¿ð‹.Z&âÅt*4èCP¢÷-…E¹kïëŦØ'Ði*ºwÞáˆû™ƒþc§ó{Ãð׋"ƒ?o ¿ûG’½O×P´Z+§…¯x¬ÌÒ@’.Ô­û5å1éÿÜOáÍendstream
+“7 `©gŒN¡wbAÎÇü&ePÁ†¬¶ÿL„N|&‚š
+ä•Pn»ÎK0‚:#Á
endobj
-1018 0 obj <<
+1058 0 obj <<
/Type /Page
-/Contents 1019 0 R
-/Resources 1017 0 R
+/Contents 1059 0 R
+/Resources 1057 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1001 0 R
-/Annots [ 1021 0 R ]
+/Parent 1041 0 R
+/Annots [ 1061 0 R ]
>> endobj
-1021 0 obj <<
+1061 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [417.8476 181.7231 466.5943 193.7827]
/Subtype /Link
/A << /S /GoTo /D (sample_configuration) >>
>> endobj
-1020 0 obj <<
-/D [1018 0 R /XYZ 85.0394 794.5015 null]
+1060 0 obj <<
+/D [1058 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1017 0 obj <<
-/Font << /F37 747 0 R /F47 879 0 R /F23 682 0 R /F39 863 0 R /F14 685 0 R >>
+1057 0 obj <<
+/Font << /F37 779 0 R /F39 873 0 R /F23 714 0 R /F41 910 0 R /F14 717 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1024 0 obj <<
-/Length 852
+1064 0 obj <<
+/Length 853
/Filter /FlateDecode
>>
stream
-xÚÕWMsÚ0½ûWxr‚ƒe}ø³9Ñ„´Ít2ip{IrpH˜16±LÚé¯da#BI;Óadyõvõö­X!ò2]x!M?t€ ‘k&3šwüÝ­l¬ÚÈR­ÞG†}F|3¡‡=3š(X€A€Ìh|Ýs€úöF—Ÿ?E} »°wz1ê[(pÜ wòqp ¯ä|m:8ýÖGõ'ÃSe‰œ }ßéE_¯†£þmtn £&Ru7æƒq} Í1ßÔ¹ ×|â 0ÄæÌp\\‡z&5FÆ—Py[-Õ²ƒ ÀÄÃ:zB…ž
- ‹W|€úÿFNþYJì3Þs­Û1îŠð®Îá-¬°6]‘h2Å)¾j|äÄ}ÎÊêøn7£²{’ã$Ïn Äw盧Vï÷ÂYœ¤Z6mì¬6È;;>
-J0ñFäõf3ôß…£«endstream
+xÚÕWMsÚ0½ûWxr‚ƒ…¾üÕœhBÚf:™4¸½$9¸F$Ì›X& íô¿W²°‘ƒ€PÒÎt˜Y^½]½}+VȆâƒl×^ˆCÛ)p!rídjAûN¼û`¡¥S9ºÕûÈêßAèaÏŽÆV
+ùLšó'ÀŽäÏ[Bì½eK¸]—q¶Ð]»PïØ8ž§Ûš?Óe„¸@Þ WØðxðEeuG£> A€›;HKôØ
endobj
-1023 0 obj <<
+1063 0 obj <<
/Type /Page
-/Contents 1024 0 R
-/Resources 1022 0 R
+/Contents 1064 0 R
+/Resources 1062 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1001 0 R
+/Parent 1041 0 R
>> endobj
-1025 0 obj <<
-/D [1023 0 R /XYZ 56.6929 794.5015 null]
+1065 0 obj <<
+/D [1063 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1022 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R >>
+1062 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1028 0 obj <<
+1068 0 obj <<
/Length 1946
/Filter /FlateDecode
>>
stream
-xÚ¥ÙrÛÈñ_ÁòYeŒ0ƒ{ý¤µd[›¬ãXL^Ö[®!0$Q‹ƒÆ!™IåßÓ=Ý Ú7¥*ÍLOOß(—.üÉe×Küe”ø"pe°LË…»ÜÃÝÛ…dg@rÆX?nWo¼h™ˆ$Tár³ÑŠ…Çr¹É~Y½~wýasûqí¨À]ùbí¡»º¾ùçZJ¹º~ÿúö†®nÞßÓæÍíõ:òW›|¼EˆT ¾ øåæþîíú×ÍO‹ÛÍY¾±ÒõP¸/‹_~u—¨òÓÂ^ËG8¸B&‰Z– ?ðDà{Þ
-->øaF0ªÔ½A—ÈòlnÒÙå›4%“Tº4­i+ËH 
-ø¯æ|ü<º÷}Ô}6˜\J_x~¨Ø¨Çä
-(Âí®{é3®s…¯áo9DŸ
-ÃÕ°jZÚCÝt¸ Vû>Ï A»šoM×åÕžý‘Ö͚ƟNÙ
-yãù‰Ïf~sæGÉ…<BIPº@™òÔ@(ø¼Ôw¾ûà°Çð3²7)ð2oy­ÚÞ&8”4‡üS„ „7 
-4§cWï}<(ó*·žðI†t€*d{¢•ü‡;+ „ÇN7¬^4M^Ûp·âDVœ¡ÃŒÚ·ô„ãg
-”*Ï9µ§¢=äš6óヲI+&ëü6ÃY"òÔÀÓrf qEèûg2§2Œð9?¼±žœ‹a‘W\eëcÇ™‰Sòê‚€^ úi¦e¸›54Œ"BI7` ¡ÏiŠÐBÆ—‰`´P`ŽX¢^Ÿ ®&!y6xk*ÓØHGqîº1¬Þ_Îå7¨t«S.çtÞL5y3V;?e(4æ¡
-rÞó|ÈY}i€x6Ü0·¼€‚à{ÑlΊÑž’ÙšîјŠÄðÇßâP „繃Óq"”3Ò*_$nò4z¦”ð9ŒG„Ô!Ÿ(NÎÞÑ
+xÚ¥ÙrÛÈñ_ÁòYeŒ0ƒ{ý¤µd[›¬ãXL^Ö[®!0$Q‹ƒÆ!™IåßÓ=Ý Ú7¥*ÍLOOß(—.üÉe×Küe”ø"pe°LË…»ÜÃÝÛ…dg@rÆX?nWo¼h™ˆ$Tár³ÑŠ…Çr¹É~Y½~wýasûqí¨À]ùbí¡»º¾ùçZJ¹º~ÿúö†®nÞßÓæÍíõ:òW›|¼EˆT ¾ øåæþîíú×ÍO‹ÛÍY¾±ÒõP¸/‹_~u—¨òÓÂ^ËG8¸B&‰Z– ?ðDà{Þ
+6WWhLÛ5yÚÑiDP§©i[´íH)’ P# “öM›×ÕwóWþ³ü/Dgø
+!¦`9Ÿ“GÀß(O$èb„þ«®XÍmÞ)ÌW] #Òº|qVHzcKµƒ÷…~à­%…,®öÝéÈx¥nÁ¯æÛåÝåɳ«k+Ë«9É]£«vgšïµÿÈVêOØJÍÚê0€µÙéß^ßÕŸLÙN×UÝLóy w?ŸuÛ}.õik¦šÏÆòŸ3åZòê äì%µ'…ù¡Å¹«¨hØ„<É}5?Gˆ YR`‘j7C8Œ…ò}ɸŸÜÀ­¢m¾ôùƒ.LÕT¬ñµ6ÐnH¡Å?Ìæ@U‚º7èYž­ÑMz »|“¦d’J—¦5ÍÃ`e)!CÿÕœŸG÷¾ºÏ“Ké Ï»"
+-VÒ¼;±˜ ýñîý í]7gÇÌ´i“o‘§'ƒUzÐÕ~8 vÅÀ±·uõÉuÕ¾o41F B
+FÐüòÑÅÈAw3,4iLÚCÓ&#èc7Y¾C8¦-^WLog.†{9Yy•}F~§ÁÑ>ªm×£DÙÑš5Ý]ÞL¬ €ß̉é*£Mß>Þæû©{ö˜wÚ‘“É!eXÉñP¢
+eS ´™¶&ÐÖÐÚ·f×tKn`v‚:–§ŒqÌtgЮ·º&ùýD‡³SÇ$ô7”’Á]øäP÷EÆÂÕUG!Ïb<?ñÙÌbÎü(¹G( J(Sž_‚—úŽÀwö>`Föf"^æ-¯UÛÛÇ‚’æß`Š0ð&!@ætìê}£e^òÖ>ÉîP¥3‚lO´’ÿpgeðØé†Õë¦ÉkîVœÈŠ3t˜Qû–žðbü  öÔ²‘¾m-~ b•DŒÈRRå™#§öT´‡\Óf~|@6IbÅdßf8Ë@Dž8cZÎŒ!®}ÿLæ4CÆÑ>gâ'ƒ7Ö“s1,òŠ«l}ì83ñÀcJ^]Ð T?Í´ w³††QD(é,!â9MCºQÈ8â2 ò‚
+ÌKÔÂKàÔUÃd $ÏoMeé(ÎýA7†Õû˹üï•nuÊåüƒÎ›©&ï`Æjç§ ’Æ<TAÎ{ž9«/ φæ–P|Ïâ1šÍYX±à ÚS2[Ó=S‘^2ö¹J„繃Óq"”3Ò*_$nò4z¦”ð9ŒG„Ô!Ÿ(NÎÞÑ
^Ebêf›C“Áš‡Gô¯ÝàÀ7Õ?ú¦ú¦rSª+a~žÄä'¥|«ŽcexÆ ¥j3Œ–nˆîʾí88Í“¡¡=# ½}[}y´b&fqšŒ Æ¢ècç(»î»º„&œ:þ$þý€!BìøYãf2JE8<æ8‹án‰g8iZ¤Š°8pä”!í·§Î £g²z÷óõkç盀Nd3$ÒÒ:Œ‘ÌSoëÛÉÂhõ×ƽنÊC6ˆa Äj70ê*xc§mš_âç^Ýæ
-M>1:C‰õ¾î¹³S©:nJý5/ûò̃6ðEµ·n憥 R±Ày‡ßˆ*Q$ÔLC-ÈKúüE¦»a´NE\–Ã,Ô ç2,’ðq=c³>å—š–‹c9Èq@ãèôãiP§™¬j¡â8ðâ…>®Më¡Ô©SfC·üé¥b0ú»¿ÝoøÁ(÷žû%Î þ|6ó»™{®×ÿ÷¯t—Ÿ%ýút¬Î?ÀMòËsCjÎ,ÚCyO%?ÿœ÷­èÿcØ… endstream
+M>1:C‰õ¾î¹³S©:nJý5/ûò̃6ðEµ·n憥 R±Ày‡ßˆ*Q$ÔLC-ÈKúüE¦»a´NE\–Ã,Ô ç2,’ðq=c³>å—š–‹c9Èq@ãèôãiP§™¬j¡â8ðâ…>®Më¡Ô©SfC·üé¥b0ú»¿ÝoøÁ(÷žû%Î þ|6ó»™{®×ÿ÷¯t—Ÿ%ýút¬Î?ÀMòËsCjÎ,ÚCyO%?ÿœ÷­èÿ¢ „êendstream
endobj
-1027 0 obj <<
+1067 0 obj <<
/Type /Page
-/Contents 1028 0 R
-/Resources 1026 0 R
+/Contents 1068 0 R
+/Resources 1066 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1001 0 R
+/Parent 1041 0 R
>> endobj
-1029 0 obj <<
-/D [1027 0 R /XYZ 85.0394 794.5015 null]
+1069 0 obj <<
+/D [1067 0 R /XYZ 85.0394 794.5015 null]
>> endobj
158 0 obj <<
-/D [1027 0 R /XYZ 85.0394 427.2881 null]
+/D [1067 0 R /XYZ 85.0394 427.2881 null]
>> endobj
-1030 0 obj <<
-/D [1027 0 R /XYZ 85.0394 390.6298 null]
+1070 0 obj <<
+/D [1067 0 R /XYZ 85.0394 390.6298 null]
>> endobj
162 0 obj <<
-/D [1027 0 R /XYZ 85.0394 229.0656 null]
+/D [1067 0 R /XYZ 85.0394 229.0656 null]
>> endobj
-1031 0 obj <<
-/D [1027 0 R /XYZ 85.0394 200.0179 null]
+1071 0 obj <<
+/D [1067 0 R /XYZ 85.0394 200.0179 null]
>> endobj
166 0 obj <<
-/D [1027 0 R /XYZ 85.0394 151.3455 null]
+/D [1067 0 R /XYZ 85.0394 151.3455 null]
>> endobj
-1032 0 obj <<
-/D [1027 0 R /XYZ 85.0394 127.291 null]
+1072 0 obj <<
+/D [1067 0 R /XYZ 85.0394 127.291 null]
>> endobj
-1026 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F21 658 0 R /F47 879 0 R /F48 885 0 R >>
+1066 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R /F48 925 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1035 0 obj <<
-/Length 2293
+1075 0 obj <<
+/Length 2296
/Filter /FlateDecode
>>
stream
-xÚ¥ÛvÛ6òÝ_¡Ó—P'!Š ÁKsúà8Nª¶I³µº/M(‰’˜ò¢ˆ”]ížþ{
-Dùñ‚‘¥rrJX–ñI}IAd$„…T7ÿr«z«W'Œ.bîQ
->¥ÈŒÄ–”RæÛÄ=üYqPvêË‚²Áyo1>RÊ«B‰ Ú΄3A8‹?ŠâOÛ¶ëY¨þçä9“Ésªþ‘ݾ¼Í{³ÄK%TZ`ƒH°à}ÛoËfƒg¯Êý”¥A±ì+Ãæ¡+:Ë e9|1 ¥ÁâП€C'!OR"è8dŒdRr}Ü"ïŠ0ŽÐ¸E³lWÅ
-']¿G`¼n«ª½sÓœGM00ODlUQ¿óÈËÉ”w ’&¥‰.ó‹ÂpóW¿Ï—½åg­uÐÖ8C»Hg=΃ ê1£¼3_#Ô6GUZ!‹%Îûï<…,IK²”DÜÇ Æ åŸóo¯åÕ§·Ù/ÏÛŽ}úLsþiuùý÷±é˜ÆÜò?Tó½JNx*¬Æ¾âL Ah<ªê‡úrú=¯1bNd#e’$·“PDp4qɇ> ÄBð.oy…äÞM±Ïû²mü:ãREë@e"³$âK¸®BÁËz§`9~öà"Ú…ô¶ÏðxC´]#tQöĆá
-»}g°‡(GŽ˜ÑP׎XJ‡¦ñH92”Ïkíš)˜mÐ7ŠqÄtYu­b#aZè8 þlÚ»‡.ª`Œ§À@Ÿßý4 Öo1­6[;³”g©‰ ºF—ð¸*Äh”¸m÷HÝ0ŽXV¹íðÀÍ>¯ -~­¸†Yç0±žˆ‰"+…1Öí*ïóSDºDj_j¢H…¢ Ä«vwtÉÇEü ØÐFû XÌZKó ßW­v:©y E
-*Ñã¡«ý3ÑOS ¶8¶Ú †'°[¶»aÚeá ÁÅK€œGªÍS¦¢ºÛµû!u.Ü”]m6lÛCµ²§"L¹±*´,q¬É`iñb‡78ÌãÎoæ¦ÐE/Lfì¶fÔU±Û¶MaæE¿ü²i„30¦™5ëv_{ŒSìo14a¢•4\…Êôl*A‘8½þ«ìzâ3ЬÎ7`IÄ‹†Í¤H)² »_Q3i°T‚yH‰eDÈD (!—ÜG/&ЉÚÊuJA*W8÷ëP*3zª¨÷š•Òv
-PøŸÇñtNЂ>Éñ Û£°Q†ç¦m»v_™3‘‘|•/ð® ]­³Eù –¸AJÎï™ÿt)o‹q÷™é¼l¨é‡<*f½`ƒêàh/Ž>U©›\„Ÿ )¸&‰‹f´z(àúBOﵚ‘ØÞ³$ð¶lzÙmãËx”¦ÀÉÄ|Ó”ÿÑÅF@¥0ÅFª"5 1­°°wm!†ªMKjl s³1·¤º.ßØå¦A-%:NƬ+.ÕÍþ…ÏϵËÒû%5€£ËõÇ&~"}@Þ›ª¨j(ô_³õ—„K‡å^ªêx:F¿X锜Èà~(íMwŸŠSXÓû´Ò?µMŠ\-†vò
+xÚ¥YK“Û6¾Ï¯PåbªlÁx|Ä•Ãx<v”]{½e/q”DItøEj&J*ÿ}h
+l$#¥<ÅiH$er´¨®èh cﮘá™X¦IŸëõìêå[R’F<ÍV½µB“„fË_˜@Æ° fwÓwã g<¥ÁÍ×g·?CWR`A†ë7ÿ3Æ‚ë7·opè͇;l¼½½Ça0ûåçÛ»ño³Ÿ®ngN¾¾Œ
+%Ü—«_££%¨òÓ%"Mäè:”°4å£ê*”‚ÈPK)¯î®þíìê©^›0J¸ˆ¸Ç(\øŒ"S RF™mrP ìð{~ÀFѪ/ ŠûåøD)/s¥òË·!ë-œ
+ÂY¨äQ+þcÓ´›¨ÿ9yÎdüœªd»+î³ÎÌÆI•vðA(Xð¡é6E½Æ½—ÅnÌ’ _t¥sßæ­ЊŒ¾O¥Á|߀MG'D2°ñ„1’JÉõvó¬Í'QˆÎÍëE³Ì—Øi»
+
+{èéü¢ÛYmxÁ<¦•µæk”ÚdhJ«d¾À~÷½G¡ ‹cÂÇR§Ø$+ÿ3{y+o>¿Kÿõ¼iÙç/4㟗×?üàQ›טYùûf>cWÉ O„µØ7ìÉBABH‹¦~l/gßó#fÇ¡ÅRIbÈÛÑD„p4v‡#|<a Áû¬Þg%.÷.¯ó]ÖMí·—*[{&ñP$õDÂqŠ^T[0@Ëð³ƒÑ!¤§}ÙCÄ›E›RçE×Bñ°Ÿ@×ð™„!*Ídðòé×w7Ó©YX»´5£hعÏÊb©Ó‘žKC‘ 碒fm»¯0J`¸³v(ózÝmX´==“ Ú—]±-º%YÓDÑk4ObÓÄXW¥Ý®5Ü}T €DÌX¨m"%}×x´8ʇ•Ž -ôÖù’¸Åzt]¶#fZé(~¯›‡›.« »@CïßÝ8 ö†ÖmðXÙ¯7žpf '"J“AU…!á UÈÑ0v9Úìpu#bQf†¶Å ×»¬2"4øµêa]D@ÇF"äY `ÄжˬˎéFt À¾Äd‘JE›ˆ7Íöà—ñwàC›íwà1ë--'|_7:è¤Jä€ ÑåÔÕñ™D§‰_†@ÃØ.šmŽ4²ð…ƒàà5 †ö."Õä1SYÝn›]‡”*‡®‹¶26;\Ú]‘¦ÂX-‹h2XX¾Èñõ6ó„óÛÙÇ1TQÁ s2¶Óêò2ßnš:7ý¼[|Ý5¹F×LëU³«<ÎÉw÷˜šÐÑFê2=K0$voÿ(ÚNq—4­²5xù
+`éJÉ9Äo©ñJÛg­‚¹d„RiÍPgТ©WÙ#€ë(²¶ÀúÄ[]„œ‘$@ ˜&ÑüºUµE¿DÊ_:mü B1+×Í®è6•™[e‹Iµ”¯ÎÂ*§ãw窉ïpêäd7¼KüýÊP¨;¢µ ü(šªLYèd3]åÅÖY~%A´ ©ÝoUz+÷)úü€ä×Óo’Ün}ˆQžåsqèbÄœ7÷9ñÙë®ÐE‚ˆBSl«–ýfê#{Û*µR]ŸO¦€o„è8Äå2Öƒ þ<' r‚ôIÕ…”CÖ¹‘¹nêÉC³+Íž(H¶ÌæxWH…F+ÇLQ1ˆP7HÉù‰ûבâ>¸'ÉLåÝCuûb<.äÑ0ýì”{·öüà3•º‰ÁEø –‚;`»lF¯O\_(ãÉI™¡‰ì=K€7EÝé“Ý>0ŒHi
+C9¹‡h?ƒÆÃxÿ¥Í£òE
+mÀ·lr3£n:ä‚€ë2ý
endobj
-1034 0 obj <<
+1074 0 obj <<
/Type /Page
-/Contents 1035 0 R
-/Resources 1033 0 R
+/Contents 1075 0 R
+/Resources 1073 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1001 0 R
+/Parent 1041 0 R
>> endobj
-1036 0 obj <<
-/D [1034 0 R /XYZ 56.6929 794.5015 null]
+1076 0 obj <<
+/D [1074 0 R /XYZ 56.6929 794.5015 null]
>> endobj
170 0 obj <<
-/D [1034 0 R /XYZ 56.6929 691.7741 null]
+/D [1074 0 R /XYZ 56.6929 691.7741 null]
>> endobj
-1037 0 obj <<
-/D [1034 0 R /XYZ 56.6929 668.7722 null]
+1077 0 obj <<
+/D [1074 0 R /XYZ 56.6929 668.7722 null]
>> endobj
174 0 obj <<
-/D [1034 0 R /XYZ 56.6929 579.8329 null]
+/D [1074 0 R /XYZ 56.6929 579.8329 null]
>> endobj
-1038 0 obj <<
-/D [1034 0 R /XYZ 56.6929 549.1878 null]
+1078 0 obj <<
+/D [1074 0 R /XYZ 56.6929 549.1878 null]
>> endobj
178 0 obj <<
-/D [1034 0 R /XYZ 56.6929 502.9124 null]
+/D [1074 0 R /XYZ 56.6929 502.9124 null]
>> endobj
-1039 0 obj <<
-/D [1034 0 R /XYZ 56.6929 474.9173 null]
+1079 0 obj <<
+/D [1074 0 R /XYZ 56.6929 474.9173 null]
>> endobj
182 0 obj <<
-/D [1034 0 R /XYZ 56.6929 277.7919 null]
+/D [1074 0 R /XYZ 56.6929 277.7919 null]
>> endobj
-1040 0 obj <<
-/D [1034 0 R /XYZ 56.6929 249.7968 null]
+1080 0 obj <<
+/D [1074 0 R /XYZ 56.6929 249.7968 null]
>> endobj
-1033 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F21 658 0 R /F47 879 0 R >>
+1073 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R /F39 873 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1043 0 obj <<
-/Length 3184
+1083 0 obj <<
+/Length 3185
/Filter /FlateDecode
>>
stream
@@ -3446,210 +3549,212 @@ xÚ¥Ùrã6òÝ_¡·•«" ;O'™“¬GÙ­T&´[ÌH¤"Röx·öß·/ð2=NÕ–«L 4¾!½P𧩠”É¢E’EU
n^l6®i¸}YWí±Þáùa3`½Z¬Â(È"ú×ïÞ#[S½Ìw»ú—§áòÝÏ+Šã¹N—€×5ª
nóêÎÉü¶fØãosp›ò£R!ÑÊŠ..àFáp¸*Û²® bfzõ€^é@Ù$‘^¢rÅóàý¼0 ’Dg2ívS$i$ãžÜñqK˜$ô›ý1ƒn#‘áXÐܺã ¸òPgÑð¬"«€b›-VÀÔÓ¡È[7‡$6‰áÝÌÅ&A¬;ÒŠ’ïmÓ–÷®0Ö,×ÛYÛå6§Fæ*n¹Ï­«
º/˜@
-Pb7ƒDø
+Pb7ƒDø
?åcFs¡FwÊñÂ}Z4™ <QÒ,’T1Žâñ}ÿzž…ËúÄìóG‚ª3ƒ™ ¥ ³§v†}Ís¸w¨Üñö´›9Oˆb¡Y¿:Ô»ró8sž ˆñzÚ´0yï<u`&'+Ò`‘¢0Z€rÚ€ßÁƒÇ»7®Φ›¿.`g3$ã)^$ç
-|-Za
-‹µ^Í&¿ÀÔõ»¯¾âYÖÑrxh¬œˆožÐ™#q |-þ
-”Ò>ýx†WFZuå‘fÀHþõö‘;[ÌòBNƒ AÜ…¯ðŠx‚yAÞ¶ŸkŠY"k)ÄÀœL0`¾Š©AÃK$cC$•o±J±š²2b‡×˜G\!µ½ÉVË7ø{I¹VߺÝnOÚèSÜg”‰;çI¬Ñ(ñÁOVI
-Õˆä†<#|Ù‡9žJ¾[_îA¾/ëSãË@¡’òŠMÇ w£|a^¦C„ÖÆ/ZÔDÙhN¤eƒI_¬ ³ÁÄ.¥1ÈÐÝìJÒ>l“-…oöùé«
-òOƒµ½†LÉO@]”úKô›Q™ð¢N@š¸;ÉŽ
-2ÓÏtŸóDcÃOØ Ù¸ˆÔÎ+eŠ5cûÂë'aœ@¾>Yþkë$8Ia¬?L:vÜ"éãU5ñ9Þ©?%/
-Šñy©MÍ€<¸Å|ë3‘Câ'LbûÈÁ^
-
-AÀÙO"õ(œ>¼ ê< N,mɽ“Õdo
+|-ZaÆAô„¤4X·IO¼^7ë%Bž`CB‚ŽÏÿ¸Š”
+²4´‹XÃ4ŠÒÎCÆâ!¯ŽÇúؼìöØZédy K®Ñs–ÕÃÈ<èØ[<€t‚í=LÍÙóAoC6&‹Ÿ<íZ ‡Kݽ;æ;î¸#owD“féòÝ-äÏî#ØÞ¥aQ r¿²ª+òŠdÿþD΂]~È;†nãŽ@ÆO_! #D
+!Ûè+h^ÅßSõ©ª*^…ž#|ฉRf3Âå®
+J–Bè<"Ùf†ce»…YF JhÈñŒD;ïÄš»›ºp<­q­ ¨ùûúâ ¦HoÀâ |s^á·Ð#B·ã ´'4ŠWë¡Ó N"òöÔí¡b8(*ªQɲ¨ 3ÀH¡tŸïJtMÈçPüÂ'|†%Âg»HÇg‚
+a´¡ ‘chÀY•Œ8 ƒÂY•ggÔ™øYä3` ¸C,ŽbbRäQl YõŠ‰í ‹ûÕ=‹¡#'‰,Âʽ A@Д…ïÜò—Ï‹Ó1ò¢CÂ"Ê„­qöÔL…3Õ1Y+Ïd­˜Éº®x”Óþžt'Y*²àCCWX¬½ðj6ø¦®ßýxõ÷ȲŽvÃC dåD|ó„ΉyàkñANÀAÕ’@("„ífOx€vžÐð¸(Dmˆ³È|¸PI$)Ï
+©}èM¶Z¾ÄØKʵúÖív{ÒFœâ>£LÜ9ObF‰Þx²úK¸OËNˆ;µ¬Êïeïœó$๔/G{¢¥¤]ù®ÝÖ§;¤Î  .± wæ–ÐåÀ—•ÒÌÑÃD·áh¿1 ƒÃ2Šñ Å?øù7\ k49»õÖÍe¿~EY—
+È„uÒÄÝIv'¬‰6 lO<U~ãŽ%UÁ( Ék8º0’ÞNïñC4eár5 y©ºÐ§w+«5+ä`„Ú](f¢ô&¢ÂŽ–­|e.ŽÅd²WLhÛ-“7ŒŒ*Ϫ†¶°ó‰•V©¼4@®À¡B¦|ÃQ¬FS5%^^ܶdŦ‘d8 åØW\A¹a' ùšò“‹Å©ì pÌUâN
+cýaÒ±ãIׯª‰ÏñNý)yQhTŒ—ÈKmjäÁ-Fà[Ÿ‰ÿ8aÛG&öRPÎ~©GáôáQàYpb)h ÈHî¬&{@’*âCbÚp̆¡¨}1Þ—$ð}î3eÍAà/A¤¶D‚´Óƹ´9õ±•bâ›÷>\]òÈh¥×­Ü׃qñ°à (èe
+Î&ßÏ&ü Ù"tíM6t¯%Í+ï‹Ëûrçº(£ |p÷ÐvÏ6G Te÷Ó?ûÒ}÷ˆ1z–™­
endobj
-1042 0 obj <<
+1082 0 obj <<
/Type /Page
-/Contents 1043 0 R
-/Resources 1041 0 R
+/Contents 1083 0 R
+/Resources 1081 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1050 0 R
-/Annots [ 1046 0 R ]
+/Parent 1090 0 R
+/Annots [ 1086 0 R ]
>> endobj
-1046 0 obj <<
+1086 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [418.3461 611.3335 487.0181 623.3932]
/Subtype /Link
/A << /S /GoTo /D (dynamic_update_policies) >>
>> endobj
-1044 0 obj <<
-/D [1042 0 R /XYZ 85.0394 794.5015 null]
+1084 0 obj <<
+/D [1082 0 R /XYZ 85.0394 794.5015 null]
>> endobj
186 0 obj <<
-/D [1042 0 R /XYZ 85.0394 769.5949 null]
+/D [1082 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1045 0 obj <<
-/D [1042 0 R /XYZ 85.0394 749.4437 null]
+1085 0 obj <<
+/D [1082 0 R /XYZ 85.0394 749.4437 null]
>> endobj
190 0 obj <<
-/D [1042 0 R /XYZ 85.0394 597.4103 null]
+/D [1082 0 R /XYZ 85.0394 597.4103 null]
>> endobj
-1047 0 obj <<
-/D [1042 0 R /XYZ 85.0394 573.0707 null]
+1087 0 obj <<
+/D [1082 0 R /XYZ 85.0394 573.0707 null]
>> endobj
194 0 obj <<
-/D [1042 0 R /XYZ 85.0394 410.9267 null]
+/D [1082 0 R /XYZ 85.0394 410.9267 null]
>> endobj
-1048 0 obj <<
-/D [1042 0 R /XYZ 85.0394 378.8211 null]
+1088 0 obj <<
+/D [1082 0 R /XYZ 85.0394 378.8211 null]
>> endobj
198 0 obj <<
-/D [1042 0 R /XYZ 85.0394 204.765 null]
+/D [1082 0 R /XYZ 85.0394 204.765 null]
>> endobj
-1049 0 obj <<
-/D [1042 0 R /XYZ 85.0394 171.4256 null]
+1089 0 obj <<
+/D [1082 0 R /XYZ 85.0394 171.4256 null]
>> endobj
-1041 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F14 685 0 R /F39 863 0 R >>
+1081 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F14 717 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1054 0 obj <<
+1094 0 obj <<
/Length 3094
/Filter /FlateDecode
>>
stream
-xÚ­Ërã6òî¯Ða«F®Œ<Ìžœ±'™d×Ùµ=äq DØbE"‘šÏ×o7º‘Ij·|P£Ñ
-J$š-RÂUÆÎR‚ŒòóîcïšnÒ½t6¯Ü/B¨ÆU8TpWú½{û=O…ÖLÊ8…¸”qeSøIƨXÚÚK
-véÜŠÅ•ëVûzé:’Œ€hå…çÊ#eÜýÐ1 (o'Æ·
-ŽVÞÕOt€?µë’¸¢HR«ÈÞ5È"(ÛŸY¹=ͼo ݹž‡!J†ƒˆ4é9¦9< ¤¢•À+ gÊã îÔ¹}ðL<2®w;F}
-Äœæùüëw·×DPŒ…Cñ£[×q׺_æß»}¹ÁA·n7LѯK>lÄ4È¿"Úº „5/ّͯ\×ñõ#óùx÷q·)놶ÊâVÛvHT¹¾¬™±¥ƒ{^jîojYk°ëf3e«²sÞ®³Â[•w] œ%M•B¬"gY¬'ü ÂŽ)RÍ$펭13pѺé;‚Kúy<
-¡°ì<Ãw¬¿)`ê¦Âkú0ègBs¶Õcöùšyô·
- g³y¦ñªm0T=q¯hÎ’ÈÏè¼WÝ”|ŠÊü ùj*ŠlŠ&(®a¡ŒéÊeû>ÚH°›8[7'Ä¿§›¸„u etàÕ—Ã)…Ejcc!¹„þÆ5Pô>úã>߃¯NÔ*Çh,CpŠç lªHd–lSUÓk/àâO®™Ø2CI‹P¿r1Eúvì3Tø+¶ôûD,Ëtam’É|l‚p 2Öl8fÄAFaøn ihç½N‘®^ÏÁ ’‹—ÊÄ,Aj_1(*T **˜€cWô‹å<pÕOx=e•%®Pñ9¿7@Ck`î¤ ÜINHÜ<0˜Ì‚ó{]ðxmUóŸ&öc©´.ß»:(j"4Éå멲¸Õa)@ýóŽ!jN¬2³I!bKõÓ·7ƨŠD«"„Ã×´å~@K>éÐqÆ°!µ ý¨©ÄŒ' tå•Þž­ŽúÝn]S9>€ëB€X9
-‚Œ—f/Á-ÉAjl…ÇÓ¡ñ{¶3Á0 )™__ćAïvãw@aÞ¬µOù4vâ‘þ
-a+ÓtlÈ+ð˜~CYˆ|q`õ 2¿œ‹ñäL
-üãqÚÑÑ\5áy-ý!Œ(p†÷O'Š›jºg¸Îa¹lB%¾3“õv'ã_Œ™)7þ<[eI*äÔå&KÂ¥G÷!tþ="dc‰Ü$ÆdgA2,ÊíPJy1¨Ñs¶Äro󓢸¢G¾Û÷þ™gQ4ËäËþtƒ’Uýˆ«Ý {žÈ±À—%áihçJÞŽ¹°±w
-ScvøÛ»Û7ÿøñzª2„"rU.NÞÓ±£ô•Q÷g;.Å×=˜j¬Zb#÷—Dÿ·¾ =âÓô¦yÕÈ_ﻸo9–Q¸=û~·0À¸÷jž§ò²JZˆoC®Ÿ`RÛÄš¢8Ó©€àÛrÙíÚ¦ªÁ±¼ ÉÏøòä‰X?,}dzÁ˜³ƒg— ÷L²GÀ›±àO {ÂrÑ#bdõ¯ ç×]`©“ª“s;ýÝJa]“™?¬k@ÂY¡C¸»»÷Í”øT’ËTN¾ïøº?=ö-\ §áqEA<,™ˆûH€ÊnŠ ܈øŒûÒSS)–IøÔð˜ LJwEf€®'ŽÃ”Ç­^-ªW/
-1ôr5ï7xŸFK97uBf ·õúð–BòR½FšŽ¯Ã^Gçg‡ºæWœ»;p†n¢¡†=¹ÇY‡ÏÑîÔq—¡û©ª0yààŸÃð›ñË}–.²aŸ…ÃØgá
+xÚ­Ërã6òî¯Ða«F®Œ<Ìžœ±'™d×Ùµ=äq DØbE"‘šÏ×o7º‘Ij·|P£Ñ
+\`ç*’"ɳ<{ ¹ r'„ŠD% ¤H€+÷›Ã…ÇF­À i{VívAŒŒ[“âä°§¥ ¯y1P=C‰2ÖTnº–pKžƒs·‡æ˜Ë€(2®«¶uƺ/AiMz“íÊ!{>ÌÙîù˜u½©ˆ C¯d^`Û¦ÛÖý”{¢µ¢#§P¦`úKýúW>™j
+§œS…eà¾3`ýMS7^Ó‡yD?š³­³ÏçÐÌ£¿ JG·ԪܕœÍ5;^×nÞ;^Wœ¸T¿¿´sVŠ˜×>>
+Ä_±¥ß'bù(X  k“LæcÄ€•É°fÃ1  2
+ÃwHCƒ8ïuŠtíôzn\¼T&f úPûŠAQ¡JPPÁ
+Z
+[ªŸ~¸½™0FU$Z!¾¦í(÷Û˜ˆ
+hÈX ßùúBó…T:5 êc¢xɳ$×"HÕ>QAÆK³—Žà–Àä F5¶ÂãéÐø½GÛ™à@Д̎¯/âà÷»ñ; °
+oÖÚ§|;ñHÿ
+&€ÅíhùB<‘6OòT¤,¸?°<#¡ÌQÂhþñ8íèh®šð¼–~F” 8Ãû§ÅM5Ý3\ç°Ü@6¡_‹™ÉÎz;Š“ñŽ/ÆÌ‚› ÿ ž­²$rêr“%aŒÒ£û
+º ÿ²±¿Dnc²³  åv(¥¼Ôè9Ûb¹·ÎùÉQ\Ñ
+¿[`aÜ{5ÏSyY%­NÄ·!×O0©mbMQœéT@ðm¹ÆìvmSÕàXÞˆ„äg|yòD¬–¾cáÙ`Ì‚YÈÁ³K…{&Ù#`ŠÍXð'†=a¹è1²ú׆óë.°ÔIÕI‚¹þn¥°®ÉÌÖ5 á¬Ð!ÜÝÝ¿ûfJ|*Ée*'ßw|ÝŸû.ÐÓ𸢠–LÄ}$@e7ÅŒnD|Æ}é©)‡Ë$|jx̆ãû"3À×ÇáGÊãV¯Õ«…z¹š÷¼O£‚¥œ¿›:!3Ð[‰¿z}xK!y)È^#MÇ×ᯣó³C]ó+ÎÝ8C7ÑÐÞ܈レˆ‚Ãçhwê¸ËÐýTU˜‚<pðÏaøÍøå>KÙ°ÏÂaì³p€ÑHQ¿Èƒ¥ø¯ëÛ¸.Í_Q‘Ðת}óŸD9Gà!À›«&óAšhý “J>×|AG•˜"zh?‡Rðk®‹S¨p!¼«q]\¹Çò°éYQeè&Gïy,oþè… ¿up©ïß—õ¦Œ_Žåá°×}MøÜ{׸rK&ÚH1Ù>Æ|@­a;ÑêOÉôäŒp_ ½bè
+EuŽ¿Ÿm A¿&~ÎKŸy§Â 0ÆsT³*Â#ü);! ¼dI4Ö`+槒˜Ló$Íc]‚m×U‹TIL¦OžgÚæñsõnÙ8|ÝxaRyMÜOG†˜‰§þµC›ÿcâ1D,Yþçû8þ§ HF[«ŽÿÑ1®Ô,6a¦ðÚ*;ã<üÈ9ëÿpj,Èendstream
endobj
-1053 0 obj <<
+1093 0 obj <<
/Type /Page
-/Contents 1054 0 R
-/Resources 1052 0 R
+/Contents 1094 0 R
+/Resources 1092 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1050 0 R
+/Parent 1090 0 R
>> endobj
-1055 0 obj <<
-/D [1053 0 R /XYZ 56.6929 794.5015 null]
+1095 0 obj <<
+/D [1093 0 R /XYZ 56.6929 794.5015 null]
>> endobj
202 0 obj <<
-/D [1053 0 R /XYZ 56.6929 769.5949 null]
+/D [1093 0 R /XYZ 56.6929 769.5949 null]
>> endobj
-1056 0 obj <<
-/D [1053 0 R /XYZ 56.6929 747.8139 null]
+1096 0 obj <<
+/D [1093 0 R /XYZ 56.6929 747.8139 null]
>> endobj
206 0 obj <<
-/D [1053 0 R /XYZ 56.6929 540.916 null]
+/D [1093 0 R /XYZ 56.6929 540.916 null]
>> endobj
-1057 0 obj <<
-/D [1053 0 R /XYZ 56.6929 511.3349 null]
+1097 0 obj <<
+/D [1093 0 R /XYZ 56.6929 511.3349 null]
>> endobj
210 0 obj <<
-/D [1053 0 R /XYZ 56.6929 239.6059 null]
+/D [1093 0 R /XYZ 56.6929 239.6059 null]
>> endobj
-1058 0 obj <<
-/D [1053 0 R /XYZ 56.6929 207.3747 null]
+1098 0 obj <<
+/D [1093 0 R /XYZ 56.6929 207.3747 null]
>> endobj
-1052 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F47 879 0 R /F39 863 0 R /F48 885 0 R >>
+1092 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R /F41 910 0 R /F48 925 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1061 0 obj <<
-/Length 2903
+1101 0 obj <<
+/Length 2902
/Filter /FlateDecode
>>
stream
xÚµYI“«F¾÷¯èx«§Ýˆ¢XÃ1mOûÚl @b‘
-WýÀ«,0,TøWIá«῰¯6¢µ_@Æó‘3}<rÕÕ—êw(½*Œ"r⫺{%3¬,ƒWÕüµÒèÔ&jkööÁ l…gÞ>‘­Ôš‹7
-lr݈nf„Õ->†évɆ€™òýæ%[çGÎB%"ÑøiÆhko¬'I¨H dåÊOØQÚøð
-ºˆâ,\ÈüJtâX Â?‰œˆl–Ø<¹py+ɈBW™ÄLTKý!A•
-”¢4’°È8³^øÔ<óúTàì_l”©â×ÈÆ›˜VlDîö3;éÓŸ™ÝÍì÷…Ñ3sâ¸Lfhœ}Ôl˜"ɾOºjç°` VêÝ>i£“µü3~*Å ¬(”`†äPˆ&‚0¡S¨8»»”N⳪žd%&c Êç…º™‰%§SD¢Ç6LÌ|‹æHÎâ~Nœ0rTn/W–Ƙj†t
-«‘w²‡Ì
-¬¯ñPߣe¸8‘¿‚\DÈg¥¤•žLæçÚ’®YÛQpâCß+¶EÏ"B"AÈ‹
-|ŽÍoÌ7*™$:€OoõÑš¿FË!»Þ{ce²Ñb•®ýp›Hq«µëCÛmÛºz÷nQûpë-ÃÍYìJ“{ïL·F×m‰%-àê–bßx­îíZÇ[õÍ_w3G¯÷ƒ‹Ñà4Åß8S;š`‡ÕNÍÜ,yà½à¾†eλ§Ü*åÞr\kª“ûü¢Xº¿—@žtÚûú@_$ëË¡ê¦vܯmg÷.îZ^ä¦~/KÜá”7‚Zc&©ù¯×uI›U·V³“w©®–sW\ùao°m+sãdHžÄö›'ﲚÁa™ŽUOÓ³íÁ²AwÒ›»¦ß‡›´áy¿š÷·{«Ê óþÙèØÁUöÖn˜œDÑî‡ætÿ^*Ñ­q ¶Ó–tV”å] tNÞ­éÜÖÓ)Ç~Ÿ*Òü}Ð×ÔãÔ8qÒLª©°ºœÙô67ºeVNWãÎïקM“ÛMMû¶5šjÃÓØƬnº®•†£ûª ¿ýR|M¡îý{AŽC›„©pxžóAôY¯~Š .tÅ5éKþ¥ê•ƒ
-þÎÿJbp"dX
-Fd¯ªýa«mVKMtÏ—ïü©×Hͳku·óvøÕ°fÌÞo®ÎQƒ®6¹øÕ0]Îäú²ê,Íûø”™8o¨Ž×ÙÁ›»ö¬æ6©†`¬NY¥Æþ3÷O§ýß>½wß<¸é
-¹›áþRÙ—Ð]‹“„g39]æ˜îè£ÖlÎ&5fÔRÿ(Χã`Îß‚j×kÇú¤·¡}¿·±9Òo¬@žž6Át:­QuÀpä;ô£Ã‹èÝ8m5µ°.§­{ïG½ÅÞm;…ËëH›P4Ø2‡'ñ}}Ú&ÃñíiCnÜûá~X]Ñ‡íª¥g˜¶5»úØœ³enNÇ]±nOâëûzcÞ½õPïöÚ;~È›iØï:ws“N¹ízíÓi™ü Îz Iñ0]÷;µ5»Ð'·}wºòÍ“=îµOïtŽk³biÃZ¾ƒ›½î9JÔèî´q¤Û·Á¤Í]Vj³: «÷&T¡6(3BêôÖžSÛ4… ,.ûù$Þô:V³¡¥Ëut™l¬xÓìÎ.N³Y¶¿ÀÍû—­cYjOóÅ–s¸§ÉhÄÍGŠ8ä}ÕíÊî¶ûRoþû—\2Mú'ýd_~z\Í0ÌûÇ¢P‡°ìÿ ¶H¦¿ýoÊçHH=(ËÜç%OŸñ—stÎÏ•"$}Õ¼øÛåGÕÿôtúendstream
+WýÀ«,0,TøWIá«῰¯6¢µ_@Æó‘3}<rÕÕ—êw(½*Œ"r⫺{%3¬,ƒWÕüµÒèÔ&jkööÁ l…gÞ>‘­Ôš‹7
+8?r*‰ÆO3F[ƒ|c=¡HBEb  +ÏP~ÂŽÒ†À‡(¬Î„c”Òá1t1¨„=ü² £Ìdº‚×b›Rò
+ d%šÏ8!ÊK–e+0À!aŸ# 3·¢‹•á‹äpÈnaŒå¨o
+WÁJp©¨o=«ØüÁ'AÅd@ºOCë‹d
+r!ŸÇa–ÿO–?Úôe…"Ÿ]îŸãÌÛÂÝ_<šZ1ñ#HŒ¢ ºô8”Áÿ
+QÐE”gáBæ·ˆP¢Çr
+#¡¾•±2%f| ŽÆÈ
+¾3 7^¬½"ºü‹ˆç%FæXtÑDG°<a®’€/u¸,2)á„ëó@˜…¸ìa±}‹v0Ü?¸’å™Ü‡yºß@—Sàsl~c¾QÉœ Ñ|z|«Öü5ZAÐØõÞ+“«tí‡ÛDŠ[­]ÞlÛÖÕë¼w‹Ú‡[onÎbWšÜ{gº5ºnK,iP·ûÆk po×:Þªo¶øûº{œ9z½\Œ§)þÆ9˜ÚÑ‹8¬vjæ~dÉè÷5,sÞ=åV)ð–ãZSÜçÅÒý½¼
+uïß rÚ$äH…Ãðœ¢ÏzõS\p¡+®I_ò/U¯Tðw6øWƒ!Ã(=£`Ýtÿˆz¯_¥"dR»¶j5ý63îÆv¶Ó¿´6u1l5Wï;ŠBë¨ûh 6zmæOœÖfCÕ0+~¹»ÁµâîìÖù$]6Õ{{£™­öh™¾÷6÷sÌzÚ1¹ÚûöÕÑæ@äΖïõµí¶,8ƪ1”ו·g[î
+†Íï ßó<oõ15@ëk»ªß:—ÝuÝ©Ö-Žk²Èð"7è÷Ž`lóéõ>V–¶7<Hûín ¡­õ/n¤v"Nh¤¹:Õîõ­ Å·Ò“’ìÙAªj$°wm¬§¿§ï7¿¶ØL8ÖµU÷æU00"{Uí[m³Zj¢{¾|çO½Fjž]«s>œ×°Ã¯†5cö~suŽštµÉů†ér&×—UgiÞÇ— ÌÄyCu¼ÎÞܵg5·I5cuÊ*5öŸy¼:íÿðîý¸ûæÁMÏPÈÝ $ð—ʾ„îZœ$<›É1øë2ÇtGµfs6©1£–úGq>sþT»öX;Ö'=¸ íûո͑~c%0
+µA™R§·îôœÚ¦) eqÙÏ'ñ¦×±š -]®£ËdcÅ›fwvqšÍ²ýnÞ¿lËR{š/¶œÃ=MF#n>RÄéì ï«nWv·EØ—zóß¿ä’i2Ð?è'ûò£Ðãj†aþÛ?&…:„eÿo°E2ýíS>ÿ@BêAYæ>ÿ(yú¬ˆ¿œ£s~®É é«æÅß.?ªþÛúÞendstream
endobj
-1060 0 obj <<
+1100 0 obj <<
/Type /Page
-/Contents 1061 0 R
-/Resources 1059 0 R
+/Contents 1101 0 R
+/Resources 1099 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1050 0 R
+/Parent 1090 0 R
>> endobj
-1062 0 obj <<
-/D [1060 0 R /XYZ 85.0394 794.5015 null]
+1102 0 obj <<
+/D [1100 0 R /XYZ 85.0394 794.5015 null]
>> endobj
214 0 obj <<
-/D [1060 0 R /XYZ 85.0394 717.5894 null]
+/D [1100 0 R /XYZ 85.0394 717.5894 null]
>> endobj
-1063 0 obj <<
-/D [1060 0 R /XYZ 85.0394 690.1986 null]
+1103 0 obj <<
+/D [1100 0 R /XYZ 85.0394 690.1986 null]
>> endobj
-1059 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >>
+1099 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1066 0 obj <<
-/Length 2379
+1106 0 obj <<
+/Length 2380
/Filter /FlateDecode
>>
stream
-xÚ¥YKsã6¾ûWð°ªÊBð"H:'gÆ“8•õxmMöÉ¡1w(RCRÖz«ö¿o7¤(šv¶jì*£4~|hÐ"àð+‚È0“Ê4ˆSÍ".¢`½=ãÁ˜ûùLxžeÏ´sý´:û჊ƒ”¥Fš`µÉJO¬ò?BÍR¶
-F‡ê/Ç’Ý¡ nŽ!‰\°?xRˆ8¥3Õ†ŒÓ°Þ`›„Ý£øº<´øç¹¥©²h;›ÓlQõìEK#v¡xøïl»+-Me—ô´Qˆ¨t^W4¾ËšÅRó°+ÖûhHÀó‰M]w44RÇk൪€c& G›N¡ 85I“`ßWÁQj °Ž¹ü}QªZߪ"š)mä8£8àŒuœ€œ#p>õÀ¹ßíꦣŽsß4Ñ݇ ˜T& ’€àÄ3ó›Í¾,ÑÜ„-Ioi"+K"Öû¦Yˆ$´UGœq˜ÛÏœËÊʨ›mK2\Âר*ÛZ¢ºÚKÎsØúEY•ÏΗ…”uýu¿kÙ\¼\{Ë
-§;PYÙÖDí[ëïšÁš£ÝlKCçÞf_=û·½mŠ~úðh½Ñ›E¨¾P¿öãY5Ýeíº±Ó>CúmÊÇ,U2qʨ!“¤ThÍCæËiÀóJ&½a<¥Æ»m!–êÊù ¨Kø!Šº®In‹YÌEx÷áM+eQ¹Ý$ÏžVÀ0e3dGÜeã÷0³;œŸ:ˆŠr´IÃuY@8-Û"·4Б 3N6´Ù4xÈ<‘­ûp‡;ú°d[?Y¿åÆÔ[Dœ!i`Ëeâð—ú`ŸlƒµƒC0fûî±nŠîÒ';o½+rEÒ‡)P­m@Xë;$eåDý‡`(Ì¥ÒzÞu]uYá údÞd09'&+HÈÎÚg糋"Ô^)°u{° ->1tȺ3¢ç='GžÃ
-ç3{œÖ/µZ0)¢t¤mQu3ÊJ,ž†Š‰´Å,Šãð£ÛÔín›¶¤Õ&²÷ P)MxŸPQ2R-ÿPTYóL|eö`Kçgslj:˜Ï`)ù&
-¿Võ¡"’°Âx©]Û5ƒØ‚XÈÁç„
-ûŽFGÀÑ! ô‰%d$ªæ7x¤€ÇZ¿÷ºÆ‚ª³MÑš¢pçL‹g’ÑÙÕ]&ü{V9)2Ìv»²X»:¿¥ŠÅÁÄFöaŸ×Ô­\!ľ/µ‡ãÞè@&ÉàDcöíÛÒOm)}í¹7y/Ý]Ç3Ç"înßTx¶ÔÝØZB4Lwìj¿
-c˜,/<+”Ÿ}åI®0zy'øí†È4H¥Ôb#EˆM4nM†·K R„ßs÷ÝîóíÌÛ¾Q
-Œª •æ©°ßÛxÐ}´Þ’{ÜÔâX£¬Á¾ÎΧk_©‚ÎýZk§·Š8< ˜x$”{<ÓdóÅ?oîF¯Þ9^пÓÆÀ7•‹¸‡ë¬èkªK&™xñà1¬ƒÂ,þÅÛ{àú -^JC-˜Ç>1~Wº“Å©;"<Âx<|æ¾^¿‹R ÊÿF7u>µÇ›J3 îðÞƒë|¾vÁZЋ`E5XÔ;(!Bªñ¢É%Jcî……¯(jð¹&0u]fÀ+x±ÉÆ OêpVª+.\”yj_•ÅW{"DO¯RÕ¼!¯ÝÙuydÛ¹<"ŠÆbγa|ú<ò5Z¾¯ÂOU@dü˜t–Àçä“O4è”% ¥éß>Þ]ÿŒŸ®ð+‹_Å
-tÒ“'--$¤ƒÞ:Û­…k"wŸÜTx½ñ¨¡ãà:wá¹™ŠZŠ œí†ÐEôz82CT¼~1ŒCÜB—×Ñ¡h±óþ½×=ÎxKoö¡N¹¸ØÀÏ…HML´•‰}q7:ñ‹²v‚µ£3ÍÃT’é(–=>˜ä>ô/Îz:¼7® õ9 ñÿ2þ鬊Ó#Ò‰ÂÎ~Gmæ'O’
-?Qù=‘ê#ÏgÙ¥XíÀÕXu¾ŸõùŠ¶€$y&zT¼çNª ÿµwQŵ³»Wdî¡!æÁûî¥ë5”ÓÂ}…×ÝlÆ`DB"zÆ^gÈŒ}Ò]„£Ã™ý÷eç-ª]™¢c$È6
-£”òåjÎ$PšÀƒ
+xÚ¥YKsã6¾ûWð°ªÊBð"H:'gÆ“8•õxmMöÉ¡1w(RCRÖz«ö¿o7¤(šv¶jì*£4~|hÐ"àð+‚È0“Ê4ˆSÍ".¢`½=ãÁ˜ûùLxžeÏ´sý´:û჊ƒ”¥Fš`µÉJO¬ò?BÍR¶
+âæ"XÀûƒ'…ˆS:S]A`È8 ë ¶IØ=ú¯ ÉC‹ž[š*‹¶³9ÍUÏ^´4bŠ‡ÿζ»ÒÒTÖxIO …XJGáuE㻬Y,5»b½/†<Ÿ(ÑÔuGC#u¼^«
+8fz´éÄÚ€S“4 ÆAð}q…¥ë˜Ëßõ§¡ª5ð ¡*¡™ÒFŽ3Šc
+-˜Q:Ò¶¨ºe%OCÅDÚbÅqøÑmêöG·€M[RjÙû¨”&¼O¨(©–(ª¬y&¾2{°¥s‡3‹ˆ9‹ãDÌg°”Ç|…_«úPIXa¼Ô®íˆAìÀ
+A,äàsB…‡}G£#`ŠèÐzÄ2Uó<ÒNÀc­ß{]cAÕY‚¦h
+MQ¸s&ƒÅˆÇ3ɇèìê.þ=«œf»]Y¬]ßÒÅâ`b#û°ÏkêV®b_—ÚÎÃqot Ž“dp"±ûömé'¶”¾öÜ›¼—î®ã™cw·o*<[êîNl-!¦;v‹ µ_
+7&C‚€Û‰¥†@ )Âï¹ûn
+wƒyvæmß(FÕ„JóT؃ïm<è>ÚoÉ=n‰jq¬QÖ`_gçÓµ¯TAç~­µÓŠ[Eƒ‰L<Ê=ži²ùâŸ7w£WïÀ¿/èßicà›ÊE ÜÃuVô5Õ%“L¼xðÖ~Å¿x{\¡ÅKi¨óØ'ÆïJw²8uG„G‡ÏÂ×ë—`Qª`AùßèF¢Î§öxóQiÔÞ{pÏ×î X z¬¨‹zç2DH5^4¹Di̽°ðE >צ®Ëlp/¶#ÙxáIÎJuÅ…‹2Oí«²øjO„èéUCªš7äµ;».0l;—GC¤CÑXŒÃy6ŒOŸG¾AË÷Uø©
+ˆ¬‚“ÎÒøœrò‰’²$¡4ýÛÇ»ëŸñÓ~eñ«€=›;ÂcÝB†ÆXðÃVšÓ‡/ìöá€cÀ".ò‡äâB¼¨‚üÂÊG)í[)òß²¨–dœÙÂMN@zòäÁ¡¢¥…„t0Ð[g»µpMäî“›
+¯7^5t\ç.<7SQK„S£Ýš£ˆ^GfˆŠ×/†qˆ€[èò::-vÞ¿÷ºÇo aàÍ>Ô)ø¹) ‰I˜ö 2±/.âF'~QÖN°vt¦yxJ2ŲÇ3àƒœÃ‡þÅyCO‡7ãƤþ#'!þ_BÆ?݃UqzD:QØÙï¨ÍüäIòà@á'*¿'ÒC}¤àùáì1»«¸«Î÷³>_±Ó$ÏDŠ÷ÜI5á¿ö.ª¸vv÷ŠÌ=ô!ļ"xß½t½†rZ¸¯p㺛Í,‚HHDÏØë ƒ±Oº ‹pt8³?ð¾ì¼Eµ«# StìÙ 9µØ¦.Ëú0øâPïK¿fý„¯b*r¹f1“"÷ôÕƒ©1Ľæ_a”²C¾¼@Í™JxèØ[çm`2‹#Õ'›‡o2耵_EQÎNöÀrh…ëIvâÉ)Ä
+Æßú…ìK` ¡5¯£ïíê=ÀÉHlŠåsÇ!¹õ|ÑÁ8øî/¿ ê˜)¬’f«xÝaõ¢z¥œ³’š÷ÿ‡x©úÿ
endobj
-1065 0 obj <<
+1105 0 obj <<
/Type /Page
-/Contents 1066 0 R
-/Resources 1064 0 R
+/Contents 1106 0 R
+/Resources 1104 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1050 0 R
-/Annots [ 1069 0 R ]
+/Parent 1090 0 R
+/Annots [ 1109 0 R ]
>> endobj
-1069 0 obj <<
+1109 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [349.4919 384.4828 408.4801 395.2672]
/Subtype /Link
/A << /S /GoTo /D (ipv6addresses) >>
>> endobj
-1067 0 obj <<
-/D [1065 0 R /XYZ 56.6929 794.5015 null]
+1107 0 obj <<
+/D [1105 0 R /XYZ 56.6929 794.5015 null]
>> endobj
218 0 obj <<
-/D [1065 0 R /XYZ 56.6929 594.1106 null]
+/D [1105 0 R /XYZ 56.6929 594.1106 null]
>> endobj
-1068 0 obj <<
-/D [1065 0 R /XYZ 56.6929 562.6395 null]
+1108 0 obj <<
+/D [1105 0 R /XYZ 56.6929 562.6395 null]
>> endobj
222 0 obj <<
-/D [1065 0 R /XYZ 56.6929 370.2937 null]
+/D [1105 0 R /XYZ 56.6929 370.2937 null]
>> endobj
-1070 0 obj <<
-/D [1065 0 R /XYZ 56.6929 341.714 null]
+1110 0 obj <<
+/D [1105 0 R /XYZ 56.6929 341.714 null]
>> endobj
226 0 obj <<
-/D [1065 0 R /XYZ 56.6929 214.6004 null]
+/D [1105 0 R /XYZ 56.6929 214.6004 null]
>> endobj
-1071 0 obj <<
-/D [1065 0 R /XYZ 56.6929 186.0207 null]
+1111 0 obj <<
+/D [1105 0 R /XYZ 56.6929 186.0207 null]
>> endobj
-1064 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F62 995 0 R /F21 658 0 R /F47 879 0 R >>
-/XObject << /Im2 984 0 R >>
+1104 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F62 1035 0 R /F21 690 0 R /F39 873 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1075 0 obj <<
+1115 0 obj <<
/Length 1913
/Filter /FlateDecode
>>
@@ -3657,239 +3762,257 @@ stream
xÚX_Û8ï§È£h\KòßÇöfoÑÅ]±èÎ>]ïA±•‰P[ÊFöäæÛ)JNœqºE€˜¦(Š"©)³M?¶©‹4M¾©š<-2VlÚá]¶y†±_ß± “"-r!àeet[ˆ:-j^m¶×J>=½ûðOÎ6<KË’›§ý¼VYÕi#òfóÔý'ùÇAGuzØò"KŠ‡ÿ>ýFÓò´ª+†Ó2X¢H«&«ý„§ƒ"áOŸ¿<ÕÐã_úù0žþã«r¶åQ+ËS‘—<h-EZ•™Q¤ìa˲,»è¿¯. ïNòôt‹M“6%/ƒj^§eÕ2ø¡É’“ìô¨­‘}ÿ
5e"Ç^·™Ž8ù¢ª’R†x½6ßUGôY—Äpã´#êôÀêd6&’y^~<È1LQ¦s×sÚéä4­[&_þ  MꤕÃÍávK›¢à~;£¥ýKzô¶•=‘­lÚ<Ó‹‘Cð£S'´ªÊ“tÖWA@Æ ¾Ï¿¿”[«[Ó*¤ªD›Ñ[g»©ÅÝã¨QglípìÕÿôøJ lid<(bÍî˜Ð½Ä;’ÆV9÷þa 霸©=ÐDéHfoûÞžýý1Ö¤6.ˆšnÍ+_>þûØ/¯£_­v¸Üσá*qz˜úQe'Gzk¿OGµ{âWr¢æ‰ä(Ï꺰C§\
veÒÖNϬ—ê¼g¸rÞÊ.ÎèŒÈ¢h¡Á¾¨îý<æBh%ÒËÞ:z³á˜èáhÓ»>HÅôÑhÇ L8[Ú,²j¼œ—D>Õ/…T¿—T„ ¬ñØ€0š&îm´Ù­4DÈÞY¢Bž¼è.ÈÜ&ò0§5¤RP¦†³à÷öÆ'çSʯ†í°ÓF^b ®Æû+ìY‰Óò¸ó†_Ž;oDHàJz+ÞI©!úê`Dñ:™Œ¡£ Q’â™ÞR-ÅãT!pº
-M&PÄqíèÙi7jÓŽ4¾§YyŸ"A¦͠ì‚d,"û©ì±‰kkÒ;¥)ÏR^Š:”&JÓ×9*—“²,Jן©IW؃È!6Š‚O
+M&PÄqíèÙi7jÓŽ4¾§YyŸ"A¦͠ì‚d,"û©ì±‰kkÒ;¥)ÏR^Š:”&JÓ×9*—“²,Jן©IW؃È!6Š‚O
+q¿–D"mX• ‘¹ÈjmËúÿ@CH®2#¶¦È²&RØš8"u£
+:åô³¡&Ä«»Û†ý5é˜âB€û}Ye¡ødÉ °]B楖x¬†Í@”üizT(þ¶Úxe訳vTn3o-òÁa^¨ª1ü8Háã=ô6³¶µ{Ó‘¡š»hW”P·Šj‰v¢æwЮ„Z[Š´»ƒhM 5ƒ© º¡s?‡+ì
+ïp,'èñ+)jä‘jåQúk ©ï¯‘ÙYºÝÕ¡Eâ¦Á§âÛð´â·I-§Ñ;ÀÍÍ$b®»Ö¬Ý‰ÜQµ㩺›{JýÐà4;,ÿ‰f`¨º ‡W$‚7€Úù«1[Ë/¥nÆÏX «Eš Q S£»»·ž;šWïP{“øÄDN)ój=u”ö¬ÊùßC;»òÕ]Û Ñ_;Œ`ÝÄF
+q…7ÉGb†N0bèKNôJ… $ȳÈBÏ"g¥O Øêåýµ G’^—=Ys{}ñJE½Ó6l`‘“TÈ‹«Ã}%­JüŠÆ‹ŸêIÙmS:_Óß Р*çóýÃì(š´ªŠúºWy÷ËÓü-1~!EŠß×¾6F‘íE†>5.NF¸áb¼¹]mþpùv¹ÿÐÆ}endstream
endobj
-1074 0 obj <<
+1114 0 obj <<
/Type /Page
-/Contents 1075 0 R
-/Resources 1073 0 R
+/Contents 1115 0 R
+/Resources 1113 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1050 0 R
+/Parent 1090 0 R
>> endobj
-1076 0 obj <<
-/D [1074 0 R /XYZ 85.0394 794.5015 null]
+1116 0 obj <<
+/D [1114 0 R /XYZ 85.0394 794.5015 null]
>> endobj
230 0 obj <<
-/D [1074 0 R /XYZ 85.0394 769.5949 null]
+/D [1114 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1077 0 obj <<
-/D [1074 0 R /XYZ 85.0394 576.7004 null]
+1117 0 obj <<
+/D [1114 0 R /XYZ 85.0394 576.7004 null]
>> endobj
234 0 obj <<
-/D [1074 0 R /XYZ 85.0394 576.7004 null]
+/D [1114 0 R /XYZ 85.0394 576.7004 null]
>> endobj
-1078 0 obj <<
-/D [1074 0 R /XYZ 85.0394 544.8207 null]
+1118 0 obj <<
+/D [1114 0 R /XYZ 85.0394 544.8207 null]
>> endobj
238 0 obj <<
-/D [1074 0 R /XYZ 85.0394 403.9445 null]
+/D [1114 0 R /XYZ 85.0394 403.9445 null]
>> endobj
-1079 0 obj <<
-/D [1074 0 R /XYZ 85.0394 368.2811 null]
+1119 0 obj <<
+/D [1114 0 R /XYZ 85.0394 368.2811 null]
>> endobj
-1073 0 obj <<
-/Font << /F21 658 0 R /F23 682 0 R /F39 863 0 R >>
+1113 0 obj <<
+/Font << /F21 690 0 R /F23 714 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1082 0 obj <<
+1122 0 obj <<
/Length 69
/Filter /FlateDecode
>>
stream
xÚ3T0
endobj
-1081 0 obj <<
+1121 0 obj <<
/Type /Page
-/Contents 1082 0 R
-/Resources 1080 0 R
+/Contents 1122 0 R
+/Resources 1120 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1050 0 R
+/Parent 1090 0 R
>> endobj
-1083 0 obj <<
-/D [1081 0 R /XYZ 56.6929 794.5015 null]
+1123 0 obj <<
+/D [1121 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1080 0 obj <<
+1120 0 obj <<
/ProcSet [ /PDF ]
>> endobj
-1086 0 obj <<
+1126 0 obj <<
/Length 3113
/Filter /FlateDecode
>>
stream
-xÚÍË’ã¶ñ>_¡K*šªŒ7ÍiýØd}p{o¶«Â‘8#ÖJ¤,R;ž|}ºÑ
+xÚÍË’ã¶ñ>_¡K*šªŒ7ÍiýØd}p{o¶«Â‘8#ÖJ¤,R;ž|}ºÑ
Waƒš)m%ÂÌ ™æLZEBµL€ap~ƽ¯Wq/¿£ÍïòI:pH^”ïÛÕª}Žòâäv -©YÕ]O½`ùÐV sø·ëª¨ý’XP»ëÓXu¬,óݤÔ_´ó.>¿Eúï¾û8øoAè…žh!™å^¢óÿíîç_ùd±âû;Δwfò 8
-h\±›f¢š%žfÊÁ¾x燈v œ0“)¥ÌDsͤæEؾr¾:–‘‚9 sÀ/’dÞ9—gv6`œQfH„@ê 8€Ñ&rf€â
-ñŸ‹S5Ë~ÐhÙx“áÔ1·ÏfNùÔP”yÃííø0^áS#íXð¹ÙVõïN• 7Ä£³œªð ôcV¸}ÅéíXM¯±êa¾Gž£^äânô«‰Í™…z¯ÝfØÅ\mM:ãLÊ!!Þ©ÍÜ:èùjÆŒ³1ÊSÆe¨-šy»r@¬ÐƒE¦Dö å]UX¨)˜Ä 7&>nŸ&Ôùqt61ÀŸÒ|¤hÇx‘žŸªù>#†DRýcõ‚]0¢ôœœ PW¨8Å6T#ù
-]·
-°Éä¾ešq6ÀBmã%Ħ+Ö€*È·º¾Ú^¯zÃà: ¼Z÷ž‰YP2îC† œÍÇlLé¿p0$ÒØbü
--\Š_J@…eÏûuåãd~# ø.
-Hy‰¨Uc‹\`e*Y; Þ7hfå*óUÌ8ëÏ;xà ”èÚÞŠçßEž w¨µzÌsÖµƒëðL;s”=—Í⫬ƒWŽi}n‹¥÷ñ<¸u­™†šâõn=aœQf¶™CyÇ´,„îvÛ_MQØ=Ø#ïr s`X¥<ïŒå+ Ñè$nÅõ€ñ
-׸6VêC®ÏØ?ð —/P{Ya§u3_íþ)¦m8óÍDváøôFcE9#é1•õ ôq_Ü@ "ÆÙe&º{¨L ·_8É#w°QŹÂÕòl"^uŽ+E}ËJ\²¸È 6F›Àó¢]—usÉ”g…·ÅöÕ±,aœQ梙„”ÁQyî<ˆ[ÆñÌdˆgRÛéo»{jNáo×oé¨R›éó² 0ü\‡³] çÆ0&u¼|ÐtÅÍ·?üDãHÆ{Äxˆê÷r=ËùoÒñä/RêŒAIH×`Ç’1¾°¾êz¶ß#^Áú¬³)6!Î ê:R„?îÁ†t .õu•0Áj-¢ºö¸±çÔu€½ºŽQ^P×C*«y½.W×5öï!»¯‹—J Zí¶4R7}õ„ž5Œ.W»¤Á§ìOÏ FC_ºjSnËžàm<b+Pv]î6çˆ ÿb†F¤Â†®áðL¿ËœÊð°Î$¯)¤Ê1ª™×ÊVÆX
-…—×*Y€’ªxToôÙÓÿðv§ÿc”NÿH<“œþ¿ƒº†ÄôÃ?>ëØ 3Ã%dG(‰‡.GO=—áYZèîï§Âß:wwpäÜó~¬‚)!ìDZ•Û¥Â÷K³ž„q6F™Ézäû²‰ì²‚dT#eµMKwgìa¤i·²‡á¾òËqSÎY„àKæk÷ajf'•‰aÏ[D¼¡EŒP^²ˆ1‰_nJt0‹=3¶píÚ%×¾å\;’醈Qr.Þ.ÜÛ·°”΂CÑQ8±¯£€ÇÑúݼÝ`BªÊtå#H2ŸC‹J„â½¾6ßðn{Ëòs…=7-×õÓ®î_è}hUo©V$àãÙ…˜vôo½ë"º‡*uGØ)pjÁCàÔBàe"µ› …ÜͶ.ñ¥IEãa¡Ðûð-Í$¯£ã½Vø´¡—4sp4Ù"KÙóðÐÊMŠÉ
-1™0%ÅvQ­êuÝÓ+”7çÓ=}«# d¼ÌæiõB#$Ûy»?· öÂÈ !Cº ý7+pÄ!Žb
-ÜÑ ¤X*†aج†F›ÝºÚÖs®Àn~É€*íÃk¤s¤Yv/Â{+ß*ARth‰¯‡°•ø¿|‚d™þ€²½@)º>~”Þ à ùTÑk"7ý[ûœÍÛGO 
-³ÆGZP[ññk(ü[wÔ6-µ]_6 zü´ ‘5h Ésª\0Á03
-“ã…õ"GÌX€2Á K!§óÝ–(Š¯x¼‡]Ç^ 2Èíc™¨/Öìªn>EXX'»ÃîÅOÃ;"¢Ùmðx¥Z 5=J·[S­  2³¾ÍAèAøñ¡êŸ«ªÉ²œÈK’dB© ›Êó>”_>u|¶ô&2¶‡œ­Úy¹Š(FiÁ©Ï“Ã[ã’Ï{¬—=+K£z©Â©«Â&±ÂPÙ÷å|qh
+h\±›f¢š%žfÊÁ¾x燈v œ0“)¥ÌDsͤæEؾr¾:–‘‚9«üð „$™wÎå™ gc”!:à€D´‰œ 8À‚¢|D]QÜxè¡Ê)ºØdlµÌ9íâìr±ØV]w,
+e5¨.·’DBxEÊLØcA€š/OHô³ÚÝ’Æ„ñ
+‘šC^¢@È º[”ÔsŸÄÝÑ-*4Ý}
+{Häí¶–Y@ªùîj
+&1èI Û§ u~M ð§4)Ú1^¤ç§j¾Ïˆ!чTÿX½`Œ(Ä=''$Ô*N± ÕH>ÀŽB×­l2¹/G™fœ °PÛx ±éJ€5 
+2Æ­®¯¶Â+Þ0¸/…Ö=gb”Œ»Á!hgAó1S:Æ/ ‰4¶¿BgK —â—PaÙó~]yÅ8™ßH@¾‹RÞ@"jÕX@ç"X™JÖNgC÷ šY¹Êðl3ÎúóÞp%º¶·âyÀw‘gÃj­óœuíà:<ÓÎeÏe³ø*ëà•cZ€EŸÛbé=D<n]k¦¡¦x½[Ogc”™mæPÞq m
+h4:‰[q=`¼Âµ®•úë3ö¼pÃåÀ Ô^VØiÝÌW»E…ŠiÎ|3‘]8~½ÑXQÎDzLe=HF}Ü7Pƒˆq6F™‰î*ÓÂíNòÈlATq®ðãcµ| …ˆ×EãJQß²R×À…,®2È…Ñ&ð¼h×eÝœD2åYám±‡}u,Kgc”¹h&!e0GTž;â–q<3â™ÔvúÛî^€‡SFøÛõ[:ªÔfú¼¬Ã ?×álù1ŒÄƒI/4]q@óí?Ñ8’ñ†Æ1b§ú½\ÏrGþ›t<ù‹”:cPÒ5رdŒ/¬¯ºží÷ãˆW°>ëlŠMˆó‚ºŽá{°!H€K}E]%L°Z‹¨®=nì9u`o§®c”ÔõÊj^¯ËÕuý{È®Àëâ%…¨V»-ÔM_=¡g ãŸËÕ.$ið…Ç)ûÓs‚‘ÆЗ®Ú”Û²'xØ
+”]—»Íùb¿؟¡©°¡k8<Óï2§r<¬3Ék
+©rŒjæµò‡•ñ
+'öuð8Z¿›· CHU™îá|éAæshQ‰P¼××ãÞÍcoY~®°ç¦åú¡~ÚÕý }À£/­ê-uÊüo<»ÓŽþ­w]D÷På¢à¢î;N-xœZ¼L¤v³¡»ÙÖ%¾4©h<,z¾¥™äut¼×
+Ÿ6ô’fŽ&û@d !{A¹I1ùO!&Ó
+²>Ÿ2˜ÄáÎG9ü)¿²ÁrÔ™½ã7àã~€ª;'è¼UðB4²nÃÑ2–'ÁN;ú3Þ*ü?ÚªŠª•YZêð€rõ\¾ÄE^í…
+¶ÍÍ^f"|-Ô—0zp™=Ÿ?¬†3©­ÒŠI®åÍØ^fSi Ó¿ŒËX9\+ÒGêý:ƒÑZ0)-Ø ºÈÙ"{Kšž‡ã$¾6Ï_Ôr i;ur-;<IߣJËý~ÌÑóendstream
endobj
-1085 0 obj <<
+1125 0 obj <<
/Type /Page
-/Contents 1086 0 R
-/Resources 1084 0 R
+/Contents 1126 0 R
+/Resources 1124 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1093 0 R
-/Annots [ 1092 0 R ]
+/Parent 1133 0 R
+/Annots [ 1132 0 R ]
>> endobj
-1092 0 obj <<
+1132 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [356.2946 363.7923 412.5133 376.6291]
/Subtype /Link
/A << /S /GoTo /D (address_match_lists) >>
>> endobj
-1087 0 obj <<
-/D [1085 0 R /XYZ 85.0394 794.5015 null]
+1127 0 obj <<
+/D [1125 0 R /XYZ 85.0394 794.5015 null]
>> endobj
242 0 obj <<
-/D [1085 0 R /XYZ 85.0394 769.5949 null]
+/D [1125 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1088 0 obj <<
-/D [1085 0 R /XYZ 85.0394 576.7004 null]
+1128 0 obj <<
+/D [1125 0 R /XYZ 85.0394 576.7004 null]
>> endobj
246 0 obj <<
-/D [1085 0 R /XYZ 85.0394 479.565 null]
+/D [1125 0 R /XYZ 85.0394 479.565 null]
>> endobj
-1089 0 obj <<
-/D [1085 0 R /XYZ 85.0394 441.8891 null]
+1129 0 obj <<
+/D [1125 0 R /XYZ 85.0394 441.8891 null]
>> endobj
-1090 0 obj <<
-/D [1085 0 R /XYZ 85.0394 424.9629 null]
+1130 0 obj <<
+/D [1125 0 R /XYZ 85.0394 424.9629 null]
>> endobj
-1091 0 obj <<
-/D [1085 0 R /XYZ 85.0394 413.0077 null]
+1131 0 obj <<
+/D [1125 0 R /XYZ 85.0394 413.0077 null]
>> endobj
-1084 0 obj <<
-/Font << /F21 658 0 R /F23 682 0 R /F39 863 0 R >>
+1124 0 obj <<
+/Font << /F21 690 0 R /F23 714 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1097 0 obj <<
-/Length 3648
+1137 0 obj <<
+/Length 3650
/Filter /FlateDecode
>>
stream
xÚÍ[Ýsã¶÷_¡>UÎœpøþH¦—Ä—^š\Ò‹3}H2WZ¢mÎQ¤#Rö9mÿ÷î DR”ìÔÎLç&!‚‹Åb?~»€ÙŒÂ?6SšhÇÝÌ8Iej¶\ŸÐÙ¼ûê„Å1‹nТ?êóó“—¯…™9â4׳óË-K¨µlv¾úi® #§@οøîíë7_ýøîÕ©‘óó7ß½=]pEç¯ß|sZgßœ}{ööüøE…›ñ×WߟŸ½ ït$òù›·_†¨¾;{}öîìíg§¿œ}rvžÓ_0£WòëÉO¿ÐÙ
Öýõ %ÂY5»ƒ”0çøl}"• J
-Ñõ”'?œü=ì½õŸN PJF4Wb¶°šp£ÕáiæMåˆ1ÊŽf]hK4£¸'ÔÎ{[âz[b$qÖÌ Ñ‚ ¿#ÅÍX&Ö%œÛ {„P8¶vZ$‹Žà¢OqŸ;G‰âcönêM‹ ¾| »±ŒCÛœG½ªPKìüÍ÷ø4½¯3HCŒ°:~Tm×ùf‚¸PÄj¥â0P5îôüü:Ÿ ÈAm¬| !NÀwaXÑfËb]´ù*pÜÖ¡“ƟכSfçõöê:ô?B½@Ú³“ŠΡÁˆSŠ{ªwE‹C™™ßfå6oBû"/ë;lÚ9£\†Îöþ¦Xfey~ú™ò¦ÝËÀ‹ì@÷ö”Í›<´/âø›ÀÚ2o˜9¢CV6§ðaUÕÕéBP=Ï|ª0Q]· Qi`³ªðº©×y°Ì€â hs:Ϫîã6ß͇0âgªè??ù3<Xx½¼Î6ð½‰?á³GÁí\àÊÌ· .[ž'äÃÏ›2[æ×u¹ò„T
-íu^….h…F´8ÿº¾ }EÛ„VQ¥ãð¼]gÍð;VÚùù©£`ÄE‰jÂ\ ¶\ã^æ©á3›(N8ypG¹¥Ä9 r5Š8©Ù“w4Q\ôIîï(·°KMvlG ÑTw;ºÎîÊkˆO@lÚˆùëzºóÙú¦Ì_DBld<l¤Ä¸yi§æÓDÊzñé¶!ÂÂ¥&–ŠQ€ë,oVx=iš”Pü7ˆ¡)lˆcÈTIA&hk¾–u;Ì•:N»#Ê;!GÀþ£„AèK>%"ÉÁ Í
+Ñõ”'?œü=ì½õŸN PJF4Wb¶°šp£ÕáiæMåˆ1ÊŽf]hK4£¸'ÔÎw["YoKŒ$Κ™"Zpáw¤¸ËÄ¢„s»a
+ÂÖN‹dÑ\ô)îsç(Q|ÌÞM½i‘Á—¯¡c7–qhSà¨Wj‰¿ùŸ¦÷Õ`iˆVǪíú"ßLŠX­TªÆžŸ_ç9¨•4Ä áâ°¢ ̖źhóUอC'?¯7§ÌÎëíÕuè~„z´g &1œCƒ§÷T23¿ÍÊmÞ„öE^ÖwØ´sF¹ íýM±ÌÊò>üô3åM»)–Ùîí)›7yh_Äñ7µeÞ40 rD‡¬lNáê*ª«Ó… zž5øTa¢ºnA¢ÒÀfUáuS¯ó0`™ÅÐætžUÝÇm¾)šaÄÏTÑ~ògx°ðzym2à{ÂgŽ‚Û¹À ”™o\ ¶<O
+ȇŸ7e¶Ì¯ërå ©
+Þz­^y÷}–X);¿²/ a±¸Îg“P¢ø€ˆì Å=Q¶ZMy3.@q!V†e ¹B„½¬Ë²gqçE"@oáE$Ó”YsÝ—…wZMÔ[öËhÙeY% Úë¼
+]Ð
+hqþu}ú.Š¶ ­¢JÆáy»Îšàw¬´óóSGÁˆ‹Ô„¹þl¹Æ½4ÌSÃg6PœpòàŽrK‰sð‰6Š8©Ù“w4Q\ôIîï(·°KMvlG ÑTw;ºÎîÊkˆO@lÚˆùëzºóÙú¦Ì_DBld<l¤Ä¸yi§æÓDÊzñé¶!ÂÂ¥&–ŠQ€ë,oVx=iš”Pü7ˆ¡)lˆcÈTIA&hk¾–u;Ì•:N»#Ê;!GÀþ£„AèK>%"ÉÁ Í
ä"Ìp¿ÿáÍ`rp³—÷Oàï <âýïÇð¢¨nëòv8N€ë¾Õá‹fYßx„ƒ/Ñ<ðiBG§~#oà¿’ÃÀÆEì؈ Ï`o{µ¡…x¦ë‹ÓÐsW”eG¿]^ÇaÙòÃb
Éämöä28©uø•U÷¡áÙ= 6úqüiÐ`‡6B<¿ƒdA¡ e¡e„8Ž6¨$œE±|ÈïÇkvˆ1£vãžêz;‚‹>Å ¸Π逿b5 5@.%¯¦0%ÒðÎc
-ŽbÒõ”Ñ]]-ªü*k‹[ÔMMç‚/ ­ o‹ªÍ¯|y^`¶Tœà&Z*»´G\
-+]Ô `Ò‰íšXFõ®rv2\ÁÌèL#¹¦‹¼I~­Ë„ê蠲˼쪻y;H­ƒ ãQ>zÊP»ÊÇ(æ0"í#½'¢Ç?25Õñãg¾ ôÓxÉÞ‡Ø2U½Jãž­zÕ§x¸z5à/ø>{°L
-=pXxÉW1]è
-ƒ{×À¸À|(ß}²‰w}’S&.‰„ž“ŒNš¹&TóNY¿ÃR¹Vkçûš 3­ÜQ[gxO"Ñ›†Ðréäù–þmqyÿàí¾GÒYÜd B…)cöúÑ|mòËM®ÂìsPaåÆaÚ3Êp „Æ*à!æÆùÿ‚á9x8ZWZÆⶊؓ…Ö¿¦ÖÂ0uæé®È3H ‘%üÁË–ÓpM/¥Į"´KzwDLèSœ;g¼x¹w;’ºtY³)³Û<tyPíûÚíEhùâÇ×s*ÏU’Þ]:~ð3|c¨Ýbþß¾JÑ€7¬Á.@I„^ß»ÍÅ"ÇÑÏ°vdí½‹ä8¡Ùî"9u¦”Î_­V›xƒÎ¿—( ùMýK++tœÜ‘JÄ~¸‡¬äãt¸ÿU&}ï/m¼ç‹XžùKxì¿~Ÿ—ùRžðþ3ç»U þ§‡(|BBã—X‡cØòÙsþ©#èþéæ}Ö‰×|YæÕU{‡ü;,#º÷Á2ð˜ÔÆûbÕk[–ïÃñ~¯ó_‡Öúÿ“˜b{ºH<`q“ëž–·öKí¦*v'üÁj¡ñc“]M9†Ñ¦¿\ÀÖ]Ùféµ š¼ç@ ÿfS¬³MáS4ø/àE‡xOa•·ùf]Tyüx¹Läñ,Üó)CG¸¬
-¼–d‚áû©Œ½Ç$[áÆ÷*üðµ5“j#™[ ^ …\^-&…D Ÿ°þÁËqʤÖÔ›öÀ ¿„ ÛkÚ¬õúÖ«øG¦£žGuG‡†¡T›¶h·m·ø¸Êá•0Ó]ÈJwÔ&I£#Ì.m÷¾ÉndùË+}hj}Euõé¡¿F?/…`S<BgÝüOþS•ÝòHîºWá¥@ÑOw\áÂßãAÆ"4Ÿbþ¿púPÃendstream
+ŽbÒõ”Ñ]]-ªü*k‹[ÔMMç‚/ ­ o‹ªÍ¯|y^`¶Tœà&Z*»´G\
+ IF¬LÅL²«¯(øx ð¯&K– •
+5»-$fÓ;.8‚rr&­$Z‹g(av}’@ˆK"¤å»™ì9DÉØ0ùu &Þ„¥V
+.æÔ§Š
+¿MØ™ÊULp••/ÖÙÇb½…ô\R¼·YQ†é®ëm…Ç bódÚ'¡”ºÑþB:F'ÅŽ'ŠV05ƒd‘jù“Åž(.ú$÷Å.¥$–ƒ£HÃŽ‰Ý@–É@ºã#¬Í@úÈGád~/:ÛÈbë.k†Øà2X˲3žX>êÙS“onóÍèó¦Í6m„ã 0¹5 Ž<¥‡ü°Ô—4l™E Vß`zÎÞðw8˜r¡|jçØßzX¡p™•!âHÈPëͧ>3‰þ§ód›à
+2{E¤æ#]­7ä˜ œªn&¨9birb>VÎ?e}qßâAÞ>Q DeúæÛDu§ø`lýhÆÖ
+’‡¦Wxâi¯È}ó“ô[„ƒ•nÌ'éÓ'¹¾<ÖŒ9IÙ«„ŒGâñ¸?íÒh®·>é¦&¨9ôìU}b‘‰Ã!+|¡eÌ| k[5ÅUåƒê”Md˜aªCy8¿oͬ”ÚHI0j泦ö²7ÿ±‰‡BãJ5˜ôcb»&–Q½«Ü‡… W03:ÓH®é"o’_ë2¡::¨ì2/»ênÞRë Èx”ž2Æ®ò1Š9ŒHûHï‰èñLDDuüøY€oý4^²÷!¶LU¯Ò¸g«^õ)®^ ø ~£Ï,À&žÏÅ_¢ø
+ŠQ¦óoq/Æ`
+EàèY:o7ÛüÀɨb|ª7Œ»íZ×qy™•Í%!P“;ÉÅvà¾@o…îe
+и’õ6Η
+[ð¢¾É7®°ÁkIÆ!¾ŸÊØ{LòA±n|¯Â_[3©Ö9’¹µàR(ÀõçÕbPHò 뼧L
+iM½iœð I¸°±¦ÍZ¯Ïa½*€d:êy”QwthJµi‹vÛv‹«^ 3Ý…¬tGa’4:ÂìÒv_á ™üèF–¿¼Ò‡æ¡ÖWTWŸúkðóR6õÇ#tÖÍÿä?UÙý!4à®{ÞQ
+ýtÇ.\ð=Þd,Bó)æÿ Ô·OÇendstream
endobj
-1096 0 obj <<
+1136 0 obj <<
/Type /Page
-/Contents 1097 0 R
-/Resources 1095 0 R
+/Contents 1137 0 R
+/Resources 1135 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1093 0 R
+/Parent 1133 0 R
>> endobj
-1098 0 obj <<
-/D [1096 0 R /XYZ 56.6929 794.5015 null]
+1138 0 obj <<
+/D [1136 0 R /XYZ 56.6929 794.5015 null]
>> endobj
250 0 obj <<
-/D [1096 0 R /XYZ 56.6929 268.7207 null]
+/D [1136 0 R /XYZ 56.6929 268.7207 null]
>> endobj
-1094 0 obj <<
-/D [1096 0 R /XYZ 56.6929 240.9336 null]
+1134 0 obj <<
+/D [1136 0 R /XYZ 56.6929 240.9336 null]
>> endobj
254 0 obj <<
-/D [1096 0 R /XYZ 56.6929 240.9336 null]
+/D [1136 0 R /XYZ 56.6929 240.9336 null]
>> endobj
-1099 0 obj <<
-/D [1096 0 R /XYZ 56.6929 212.9194 null]
+1139 0 obj <<
+/D [1136 0 R /XYZ 56.6929 212.9194 null]
>> endobj
258 0 obj <<
-/D [1096 0 R /XYZ 56.6929 133.1778 null]
+/D [1136 0 R /XYZ 56.6929 133.1778 null]
>> endobj
-1100 0 obj <<
-/D [1096 0 R /XYZ 56.6929 104.9484 null]
+1140 0 obj <<
+/D [1136 0 R /XYZ 56.6929 104.9484 null]
>> endobj
-1095 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F21 658 0 R /F48 885 0 R >>
+1135 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R /F48 925 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1103 0 obj <<
-/Length 3008
+1143 0 obj <<
+/Length 3006
/Filter /FlateDecode
>>
stream
-xÚ­]sã6î=¿Â{¨³3¤¨ÏéS›fÛtÚlo7;w3ÝΔ‘™XYòJr²ûï @Yrd§7~ ‚
-¼¹úù’z—?_þry}óþô÷›ŸN.oza†+©Q’O'¿ý.gKû§)t–F³'H¡²,˜­OÂH‹(ÔÚCÊ“÷'ÿî fÝÒ)ö8 Š4ÇÕe"Öîլš3è¦$ðX¨æR%û¢*¢0™ é=ãÚc=g Ý[%¡Æc¶¦"m_ýJ­Y.›S•ÎmÛ࣌äÕ¯!êÆ£?Æ0£N(Eš%é j`Q“ÇzYMǸÔ´ÏvZMC¶ûjÚ’>J|Þé©`¬?ο¦NUw¦+êꨪ‚@¨XëT5À:¢*õ²ªŽq¨jŸí´ª†l ‰þ`¿°Ê¾?cÓb‹Z:µUvIÃ[ÆëVw ,Ô…ÊD*ÜGª„4ÚG&$ÈÏ8-èÜ®mÕÔ¸Ô" Òì°ŽhÜc½¬ñc\ßg;­ñ![Ô™›Ys¯¾cWÜzmº|Eݲh»É“y*ºÕ±³ ˆ…I±ÞM^NM$¤ölâ4q†ÇÏfˆuølz¬Ïæ(×ÝÙ<c;y6#¶ì •m;¯Ö?w¶Ê˺õk|d¹mLn[”c¶
-cÝ_}Q }[Ç`gL“l:^($KBA ´%jÁzLõG#qª®,PD ²)‘EQ@Ge›rU·/ f®3µC¨l×â€À†ÔMŽÜ½©C:’ÀÎ~©wH¨î»ºñ²ã*ßvÀš ±,ØujÆÎ-ÏÝÕ[¿§¢_iÇ2Qvµ´mÞÖòÀs{§F·rÞwDOhpð7„£yž\Ìä"O.öq9žÃén[®ÍÒîáùXâIÄ0U´Ôk¿TÉ»"§5–lŽçêµLgEƒÅ†P×E[BƒIŸ»Òy[T¹:îÖæÛ¦èp»‰Æ}#wXGF°QC»%7©®&È£)‹%h‹ &ÏÉײùzÛÑ€Žüžìc„¡M&\ê°­§Úy’ö¾|ªæm ¶¤S5¿#=–ÀôlêÌû£íl³æì½á…¸@í¢Aë-¢(Ù8¶}¨èVŽJ½½gA‡Æ´¬ó-ž•3íI;úÏÊ¢zSÒ
-@9Q6òñ
-Œyr´›CDA”Œ•Ö§îdc+óXÔ}Ñ6@:8â4ó¢CÏWç-a‚¶ÛÛÖvr›˜“¦,
-D ÎdœÌŽ°¥Uü´ 8*—…ìÝú`^8‘bßRþdÈ Â^Œ3ËÊ’³öa˜ße~¸´ðý„L`}ºçò•7µGýlÖ›Ò2—¢šˆ¢:Ð"M•¿ •„>ÂohÉW”T9¨Pú›©»QŠ R ^OŠƒ•~ ß/þ²½Ôbw–YD¢d¡«ŒJKõÂÁªX!0¸Å²Ù[Zæ2L2ïk(ýWk"ÂÞ”íIÄq¡f˺~Ønèr|ìôv(Î݆ ¼b¦Üå@íÇjþ¡ÝÝmjœ—È ðŠúŠwš?‰G\öÓšL„i4ðáÏÎØãÄ{ô¸@½…ýÀ=•ÇéÝÉx
-®–fÛ¢×5´6š'pÄÎ2°àíô&uqÆíë×lUu3ù˜·²ey¾±Mÿ˜ùÅyîWhØG–îìC(¶¡Q@uvÐ(ÎÝ"(’|I¨éMâ•›ðÆ=˜¸q—[,é¡[C öz{r³»¢ö‚§PüÈHMðäÍ àç|}ÊL*
-Ç'ççD÷ïëõë©·™ý¨ãdÍý×Wÿ¥ž;kOs2츣ÿ“ÇíÂ÷ƒÌdïõäCkîíËÑábçÕÃ÷¬Þ+É‘[»æ_¸Fn}ˆÀÞ{Ïî¯ÏÙ}'&Gž8”‹…ó
-,@‚A<Âr¤íLÓÑ}µÑþ[ ‚º§š ùÊ4&ïœÏãÄù+‚ã£f[švåÊ"Çoœ:àï'øɇ:C¯Î â(À*ÿú‰D RÁ‚*Jû¤qÂû)¼h™ ¾ÅÈd”àxiK(ÊÜ«y?=ØÖ¯éEÄm <ä=yú#)zaËÏ’‚#3%ƒÆA]yÞ†|У×II!“æ&’À²¨ìøáÏ…_ŒmÿÙu½-»bSZÿˆ­8ôåÜ œþ/ûûóÿ×e÷ 5L„NÓ`úS&è\¤A–øM¡¼Zïï<Ò©ˆÒ ™Øúÿ
+xÚ­]sã6î=¿Â{¨³3¤¨ÏéS›fÛtÚlo7;w3ÝΔ‘™XYòJr²ûï @Yrd§7y ‚
+•eÁl}FZD¡ÖRž¼?ùwOp°ê¶N)°ÇYèP¤1Ð8®æ(±t¯fÔœÁ0Õ ÇB5”*ÙUÉ6…ÉlHï×ë9[îØ* ã0³5iûêWúšå²9Uéܶ->ÊH^ýúÒ¬n<úc +êàå„R¤Y’¾ ¦Ö5y¬—ÕtŒë@Mûl§Õ4d»¯¦ )飔Áçž
+ÆúãükTugº¢®Žª*„Šµ~AU¬#ªòX/«êתöÙN«jÈÖèö «ìû36-¶¨¥S[e—4½e¼neñ´ÀB Y¨L„¡Â£!q¤JH£sdB‚üŒÓ‚ÎíÚVÝAK- Í^Ðø
+O.fr‘'û¸Ïáv·-×fi÷ð|,ñ$bX*Zµ_ªÎä]‘ÓK6ÇkõÚ¦³¢ÁfC¨ë¢­
+±½jïÀ¶ŸÓ‹C¡Ò4þkôèêCh ’DEãİݸ’è9'­Dªãœ¤Jƒ'¢¶€ údš%GËgv %“°§¼Ð)&\.ô} ÙûaU—S§ S¡B5s±+i0*"´û¤ÂHËï‹uQš¿RÊŸr
+cRœ§^+H@áž/ù²š—'ªÄ`”sY Cn† (¶Í£ õ¬éË ·GF£ÈO:$Üí‘\ÌòökÞ0ÚÓxZÔ%PöÑB úî,yÞ˜ìÝd¾yKÕ²Gi:˜Â* „d}(.úàÛ÷æS(Ú”o)ÅtXZïj …£á­P=Ó`— }úz¬o/~sâžËѪ™K©¨˜U!³XŠT4sŬ›Ì„*¨òG¥-&›´¼ãìTåÜr°9$Ñüùј;Î}—Áö溋Êzˆé|Ÿ³fû‡D4ÌM¡ã>|áiš¶;ð*eÞ­‹j#)¾à¡–
+`Lšª(˜5P8“q2;–vñKÒ‚æ¨\ªwëO:(€yãD‰}Kõ“!'{1Îh6n+K®F؇a}WùáÖÂ2e€õåž«WÞÔõ³YoJË\Šj"Šê@‹4U>*}„ßЖ¯¨¨rP¡ô7S¹QŠ J ÞOŠƒ~ ç‰Ù^i±»Ë,"Q²ÐuF¥¥þ
+á`U¬˜ÜbÛì--ó™÷5´þ«5aoÊv…$â¸Ð«e]?l7t5>ú;çnC^1SîÎr öc5ÿÐîr›×%2¼¢¾"äfÁOâ—ý²&a |ø³3ö8ñ^
+WŽÒ²MÞœfÐ:Ó‚cPòE×#ùo ÈÔ°]¹èƒJÆ~( ¿v¦àzi¶-z]Cëa£yGì, >NoRgü}ýš­ªn&óV¶,Ï7¶é3¿ 8Ïý
+í#ûÈÒ}Å24ŠP6Šsw„š¤ßÇEjz“xå¼qn\r‹%=”à×ЇîG½=¹U]Ñ÷‚§ÐüÈHMðäà àçœ>e&…ãÇ“ós¢ûÏõúõÔÛÌ¿þ?Ôq±æñ‡ë«ÿÒÈݵ§‡5ÜÕÿÉëöáûAe²÷zò¡5÷öåèp±óêá{Vï•ŽäÈ­]ó/\#·>D`ï½g÷¯ÏÙýNLŽ<q) çØ€ƒx„íHÛ™¦£úÕFûßZÔ=ÕÉW¦1yç|Î_5ÛÒ´+×æ9~ãÔÿ~‚?ùÐ`ÈãÕ9AØå_?‘D*ØPEi_4Nx?…-“Áo128_Úš2÷j„S>…ÄŸlë÷ô"â1jˆž<ý#)zá—Ÿÿ$GfJ“ºò¼ }ðA^'%…LZ›(Ë¢²ã‡?~1¶müÏ®ëmÙ›ÒúG|¨hÅ¡_>Á ÂéßãeŸ?ÿñÿºì~B ¡Ó4˜þ)t.Ò Kü¡P^­÷OéTDiLý‘ÅK{endstream
endobj
-1102 0 obj <<
+1142 0 obj <<
/Type /Page
-/Contents 1103 0 R
-/Resources 1101 0 R
+/Contents 1143 0 R
+/Resources 1141 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1093 0 R
+/Parent 1133 0 R
>> endobj
-1104 0 obj <<
-/D [1102 0 R /XYZ 85.0394 794.5015 null]
+1144 0 obj <<
+/D [1142 0 R /XYZ 85.0394 794.5015 null]
>> endobj
262 0 obj <<
-/D [1102 0 R /XYZ 85.0394 337.2197 null]
+/D [1142 0 R /XYZ 85.0394 337.2197 null]
>> endobj
-1105 0 obj <<
-/D [1102 0 R /XYZ 85.0394 308.7375 null]
+1145 0 obj <<
+/D [1142 0 R /XYZ 85.0394 308.7375 null]
>> endobj
266 0 obj <<
-/D [1102 0 R /XYZ 85.0394 249.3979 null]
+/D [1142 0 R /XYZ 85.0394 249.3979 null]
>> endobj
-1106 0 obj <<
-/D [1102 0 R /XYZ 85.0394 223.4382 null]
+1146 0 obj <<
+/D [1142 0 R /XYZ 85.0394 223.4382 null]
>> endobj
270 0 obj <<
-/D [1102 0 R /XYZ 85.0394 151.2553 null]
+/D [1142 0 R /XYZ 85.0394 151.2553 null]
>> endobj
-1107 0 obj <<
-/D [1102 0 R /XYZ 85.0394 124.0503 null]
+1147 0 obj <<
+/D [1142 0 R /XYZ 85.0394 124.0503 null]
>> endobj
-1101 0 obj <<
-/Font << /F37 747 0 R /F14 685 0 R /F23 682 0 R /F21 658 0 R /F47 879 0 R /F39 863 0 R >>
+1141 0 obj <<
+/Font << /F37 779 0 R /F14 717 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1111 0 obj <<
-/Length 2398
+1151 0 obj <<
+/Length 2400
/Filter /FlateDecode
>>
stream
-xÚÍYYoãF~÷¯ ‡P™Ý7ÙÉ“ãx;“ÄãÅb‘XšjKD(R!);š_¿ÕÙ’écÖÞ 0`öQ]Ý]U_-!øÉDF©d G˜GÅúEK˜;?ÂŽfî‰æ!Õ·WGÇïhÉD
-"¢«›€W– ,ÃÑÕâ—X$$™ŸþøáÝÅù?/Of)‹¯.~ü0›Žâwÿ8³­óË“÷ïO.gsœqŸ~òÓÕÙ¥ŽÇ·¾³#Ò~`zyöîìòìÃéÙì·«ŽÎ®†»„÷ňê‹üqôËo(ZÀµ8B •î ƒ,%‰ÖGŒÓ„3JýHuôñèça0k–NÊ£„PA&Hè”
-vIS°6ŒõY¢?@ë-5MØ6—…bŽ/Ö4ú®+FÁ-=ßyÀØ\2öÑÊ¡¨"Ø]rpWÂÚú¿g˜êÁû04FRÝ6QG7Œ=èF§ÖeÑ@’c»Ú=üç›/­G`)2¾g†Átÿ±k·
-#¡0ÿØ«Ï=ÿàW€Ù]iN ,F, ¡D šÐŒâˆ`€áÙæE5NŒ2(GSJC°6ŽTHã.!>ÔùÚÔc0rñ“Ê «‚Α®ó¾X}éé
-0 6C¥M¶ŽYQXjqÀmaWMÙh>$™
-ß| vup1$5þEÌM6“Y@[~
-² m7Dª«ç¨+Äkù©×W…¢
-?eâ,M2žÚÐõêRKàó4FSH(Lò-÷°ŸA‚ÐÞŸƒÀפÌ¿Z˜%j|÷ÖZË` Q&_BÙwvÀ' jì&³úA[£ ^WYì•fˆ?¥-Í…¥6¨Tw­z:¢„5’‰*÷c“‰¿:Ù,á>[Ê žQGdÞeu2`2F“IèŸÌÐ~ÒQ•ËU?¿Súc'ÜAšÊ؇Yä.GŸgPÆPyðà¿öøÔïÄù ÔÓ
-4ŠeòPÜg4x\ØL Ž¿-ÀAXLò§Ü1B ¢ßë¼3?+|Nú˜r«I6¤0♎N-…ÍaÈÄÀΖã¦kç»~{íXÖŽSWé—ý‰ç¸OÍðï73ÙO•?žABùÛ*N HçùãzKE‚‰°zk6:F= ë>WÔâ’Y¼¬škó” üà‘aü~‘~CaµÔŽÜTk0¿P7ù¶š.Goü3oêÕÞÃêEñ2Ñê‡ÃŒ¢ ´Å̱œúEÞÂ^ü«ýø”f™þAž¤àG2`¢g)µ¦MÙ½7\ÿû¾' ÿ_À¶endstream
+xÚÍYYoãF~÷¯ ‡P™Ý7ÙÉ“3±;“ÄãÅb‘XšjKD(R!);š_¿ÕÙ’écÖÞ 0`öQ]Ý]U_-!øÉDF©d G˜GÅúEK˜;?ÂŽfî‰æ!Õ·WGÇg4d"ÑÕMÀ+KP–áèjñK,’Ì€ŠßýøáìâüŸ—'³”ÅW?~˜Í GñÙÅ?Nmëüòäýû“ËÙgÇï¾?ùéêôÒN ÇãÛ‹ßÙi?0½<=;½<ýðîtöÛÕG§WÃ]ÂûbDõEþ8úå7-àÚ?¡„ÊŒGwÐA –’Dë#ÆiÂ¥~¤:úxôóÀ0˜5K'å‡QB¨ $tJ€\&‚”à»y×ï*÷¢$.šõZÕ}§{8.òºnz;sí(jÕõj⢈ÆgMkGÕŸùzS©·ºÇã~åˆošªjîÊzi»¥ã;0½Í«ráùù¶S–``
+wœ¼ïÕz3tìW[1ƒ‡®NK2.²‰Ã¸Sãöôs
+fŸQÆö¯vÿ uc¿US/Uëí/±›8 A
+ye‘ƒQR"⪬•ö¤45¨ô^D·µ1cî ÛÍ ò¦ël½­úrS9b½ñþÝ7ÐÌœ^­ò[GÛÔ®Q5Ëqw¦ÓmÀr'à6nª„Ùæ­m«¼X£¶µÞzwb½VèmŒJ¸Æ(8/ˆ#ºc}§æn}ç£>)µ–vlmõežfŽ‰á¡<4ÿt Ìå&ôë·€ïÞíq~k{êVÕþPÍv¹rkû}N=Õî± ñq›VݖͶ»Þ$¢}~\©ª
+1¨aã5±Q­›s*vÍÖQØ`t£ÚYO¡x°Œ¼ʦ„$L€SAæ¤_L\&î–@Ÿ¼Þ®¯µK3;—ËÚŠ£ ¼[ŸIQ"ax_àÆ „l½
+Å _¬iô]WŒ‚[z¾ó€±¹$d죕CQD°»ä஄µõÏ0Õƒ÷ahŒ¤ºm¢Žn{ÐN­Ë¢$Çvµ{øÏ7_ZÀRd|Ï ƒéÿc×6n)
+­ôe†¯!Æ¥
+mÏEÕt¶j†¹kÈ”¹+’ñ{S°èá@:ç×Q?÷¡8·Ÿëª)~ßëÝöz>2r‘ünUú|w¼¤îTÏT».kX¶8¬¸ÝV '‚þ•O&Â÷Žö~¸{·Ýlš¶üúŸYš ”Fºä’<}Ö› •€% ²ÚÃÒÿ¶*Œ„Âüc¯>÷üƒ_q
+:GºÎûbeô¥§+À,Ø •4Ù:fEa©uÄ#´…]5e£ùd|Ú¡˜êî;à.õxˆãeòÕšäX¤ãžÏÒ¯x@eX#‰³Çu†!Ê‹4cXۦꞡ¸¢r è|r=ŠØ¬ IP•›ö‰ýµÄëd~½{»mxL,‘®E|"ÕÖ‹bâpIAýá¶}Y•ýn†1ŽVa(ž— üÿ©Ã è¨Oè0£²Q÷N{»POªÐÑu{îÒ¦@-8Ïk íÕ}†Ì‚@4Bh)NRáïW»'ÖmTQj™ dÔ :¯Á묇4Y'¤gì“ŒpÅ(|ó-Ø9ÔÁÅÔø17ÙLfmù)È‚¶Ý©®>^œ?¢®@¯å§^_]Š*ü”‰³4ÉxjC Ô«K-ÏÓM!¡0É´ÜÃ~ B{k|> _“z0ÿja–¨ñÝXgh-ƒ5D™| eCÜÙŸ,L¨±›Ìêm‚x]e±WT˜!þ”¶4–Ú RݵêéˆÖH&ªÜL&Bÿêd³„ûl)ƒxF‘y—ÕÉ€ÉM&¡0CûIGU.WýüNépi*czd‘»}žACåÁƒÿÚãSW¼ç'PO3(xÐ(–É @qŸÑàq ?b2:þ¶
endobj
-1110 0 obj <<
+1150 0 obj <<
/Type /Page
-/Contents 1111 0 R
-/Resources 1109 0 R
+/Contents 1151 0 R
+/Resources 1149 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1093 0 R
+/Parent 1133 0 R
>> endobj
-1108 0 obj <<
+1148 0 obj <<
/Type /XObject
/Subtype /Form
/FormType 1
@@ -3909,1042 +4032,1047 @@ xÚm”In1 EOPw¨u€$ÅIg0²Êľÿ6¤¤êV5 oʯÅésÀóή¯ƒÖ×O²Î Ž¢‘ÿ¨#h8Çùø:„5?ù
6\>RgÈbÏWÖ¹j[†›
WŒÏ¢®{6;»²þFÃÇñ÷ø]š¨)Õ/Ô¬Mu;pk;Ì©Ëdh<åE–ñ¬AÏw³ð¬±±Nê¦ó¡Ä½t•‹ùD„™Â²]°Ä(‡;„ ·åŽ°Š­r²ÂÙÄLûˆ T¥Í¡誋ŠŽt’¹w_ =Î]ˆ‹=¦uSä÷—ä"ï±yl±‡µÃ-ËkHsŠöreOÚ³êvg›<7ºt,‡Ýe—;ãÒèЭ/I…B÷&ê(ýê³ö󻉨YÙ¹Ç,çkRÔšÚ'^ m" ^˜h±ÎW9AVªy­Â©/fýÆ"•œãûFy-Sng \Çdª¼˜©Æ¥†Í}B©•µŒÎ$âw1.¶&Øíþ²C¶O–ÃVç X×9g¹E{îÇ< •ãóP)!ÍZÜÅŸLÞª~ÑÔ'¯UâXLµüc“ÅXsЖõÚ¯½˜Ó’~òBL–§èªÆ¹O¦ºNZ_[Èü.øšŠû*]3QôçÇñ!Ö-žendstream
endobj
-1112 0 obj <<
-/D [1110 0 R /XYZ 56.6929 794.5015 null]
+1152 0 obj <<
+/D [1150 0 R /XYZ 56.6929 794.5015 null]
>> endobj
274 0 obj <<
-/D [1110 0 R /XYZ 56.6929 330.9243 null]
+/D [1150 0 R /XYZ 56.6929 330.9243 null]
>> endobj
-1113 0 obj <<
-/D [1110 0 R /XYZ 56.6929 299.0803 null]
+1153 0 obj <<
+/D [1150 0 R /XYZ 56.6929 299.0803 null]
>> endobj
-1114 0 obj <<
-/D [1110 0 R /XYZ 56.6929 240.311 null]
+1154 0 obj <<
+/D [1150 0 R /XYZ 56.6929 240.311 null]
>> endobj
-1115 0 obj <<
-/D [1110 0 R /XYZ 56.6929 228.3558 null]
+1155 0 obj <<
+/D [1150 0 R /XYZ 56.6929 228.3558 null]
>> endobj
-1109 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F62 995 0 R /F21 658 0 R >>
-/XObject << /Im3 1108 0 R >>
+1149 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F62 1035 0 R /F21 690 0 R >>
+/XObject << /Im3 1148 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1118 0 obj <<
-/Length 2415
+1158 0 obj <<
+/Length 2199
/Filter /FlateDecode
>>
stream
-xÚÍZÝS#7ç¯ðÛ™«X§oi²O„e÷Hí’= O›­­Á`níÎ3@È]þ÷ëVKã±óHUŠ‡‘ZR«õëVȈ‡?1ò†q•é‘Ë43\˜Ñt±ÃG0ö~GÄ9“4iÒŸõÃéÎ?Þ)7ÊXf¥ž÷xyƽ£ÓÙçñþ?÷>ïN¤ácËv'Æòñ‡Go‰’Ñgÿ§£w‡ï>ÞÛuz|zøÓ‘ÞíìN„7ÖËÈaË‚w‡¨õþxïãǽãÝ/§?îœvgéŸWp…ùÏÎç/|4ƒcÿ¸Ã™Ê¼ÝB‡3‘er´ØÑF1£•J”ùÎÉο:†½Ñ°t?-“2S£‰òLã·oK[pØ66…`™1›»N„0L…:1–qm\§)z:R0'33r&cVI”ÒË›b‰ØÀtÕŸÎ=Úá64¯mÎi±l󲊺ú…syq½ÌÛ²ŽÄú
-Ûqz"æô¹‚Í„Oâ¾v–7eÃ6õc¸cÞq1êëeP©L2#¬CÐhÂk¢¯5ã7¡¯³ÎÑ•h—×M[Ì&ߊ»æqÌ
-ĺ*"²ír×Ãzê¿=:99ا62|
-‹ü.ùûyjM§×ËDœ+ÿ?9X'YÒ=l &-™Í,˜4Üq!¸ {cìp8¿“$P úË|±Èc`SYï´¦Y¦Xâ4©òEA½ÿâÊ\ sƒî’†³Ù²hš¯‹¼^~—MæN6&“‡ÿýÍÐÁ@ÜßH>r ·tóÊU˜Eu†ÆÏM~1tw7NºÝ”„O¦„»8
-BÑ€;Íã}¹¬á¾ ¤P$ipÿ}a^šB(f!ÿ9˜3Í Ay 3ˆFy²ïj8ïz
-¡D²‘´ò¸iaˆ 0‰¬UÑÞÖËoÔ)«¶XžçàˆqZPu~§çÉÚäwš;(ÚÛ5ׇäe0¯4醗ü95tZ±]sÚ3)ùcÖ®<¼Ñ÷ÕUÆŸ¬:‘éàX ¡‚Í ³ ¢RjYÒ—tŠc¾|žÆo/K ¥8!¨i¤š!í]æ¨\¡(wr¥wHRdæÇ'uÈD`1ihÚ¬&bU·Ô¸¢DáÌ¥œÅ9}nC ãºYÛ,Jr+¡DϤ¤ŽLC ÿ•(ó¢&íeCý`ÄHG P3=´ÖŒ>$]b|XÑXs²IRaš7ÅwC¾l@.ÙU%ÛU=é殧`]í°è;¼îâ$Ù¡e_Ï׊æ;¢ý;$A”±}Êz%§Ò«¾¬[<ŠæBÛ”=pk{×áeWlukŸSæ¾~b! \åFP—a<ÒË\%¡œk™C¯öIï®ü‚6JtŠÐ“ézÞ¼¬®[qY•s) \3ºÏ4nXK-LØ#íêk°®Ðù±»FGÈœŽyÏßã1í `ÎO«ã.Wõ²íx¯:_b Šùhx"$çCÅ& üNIs2¡5·žü
+xÚÍYOwã6¿çSø¶N_Íå‰ÛS:“™MßLÚMÒÓtÞ<ÅVlíØRV’ãfwûÝ HIvä8™äÐçƒIA
+ÄiÖEÿ¡¼ÁZÉÚÔ|ƒ.-¸¸4d,!8]qÄs°çàÓ%ñ» y W¥«UêÓZÔ?/GÀl$ÈïMœ&ˆ¨÷_\Ùæð-¼Îfà‘/«´™.¾,:¸¹“Éd¿?:Èçè8i$è-ݼ¼K²hN×ø­NçCwwç¤û]I$Á•p÷
+ÿª$lèÖë±Ó)¡b¶+žŒÏüVs‚ ÐÊC£ã}ã8•«-An«¼àž:ë:#K©ˆÉ®á–Y˯Ö-™œk“LÐD™ê@(ÁÇ'•ºB¤,ÚÞïN¤æï<æ'o>Ôð/œ—£]„aVIã6>/8‚R žEÚ`K;!eKðÂà
+ó7O&5 ux€hמböŒÈ›¼Y ah“0ËÛ@¿Ç48mbÀuvS’t´Qî7žéIŠŸ@~¶YÌ~š±ã¢ô÷Š+kÄŽY`‹ ÞÛiíç%ä¢ Šë,—å&› êï›tSâ,Œœ®‹F`u½Î—Í$/~ØMpBDÌ#GÜ! yéié
+ mÌsÓÑЪ Uá5‰ [Œ½{A„ˆ¡€…”ʼnò æ~Ài¬bJÄ! }Dnm¶ô÷eQÂ}€ ‹"¡/ËK!„bZÃøk
+„: 2¸KKCåW1Œ»QZQ>Ig}a^Kg”â¢×x‰huf°¶ãöÎôñ7xYNÓ%ÿŠ3
+Â+^i#Çg¿ÞED¢J$íI]È ]j€Iä®@(²fSV_©“MVݤ€pÄ8,(ÚÀÓ eM<õ=Ôl«GL×ÓÉK_‚é
+"ÈöuöJ¬Ne¢ú²î‰( ­0zäÖö®ÃË®XwkŸSç¾>°PóXƮεI$žXçJ3+k/0ôªŸðš.c %¥‰ÚHùhŠpº\ÖßPÙÅL%UU—®  8pë}¢pÅj!d÷´Û/ν\çÄB(›#!3‘"é¿óCÄ´7€¨ŸVû]n˪iywϾEDžÉùP¹Il>´u‘Üsb`ƒ@ðk±U©ßÕ±0†žèZaŒm-ãƒó×Eþ‡?i
+…µ €Q«X¯®3¯ÎrS„fŸ<¯ÊõíCò³NÄ·µñ@´Ý£øú`§ôØ_»'ŒHTÁo£§øí7ð=‡.à%Ç÷›P“µ" Æ1ÉÕÃ"^i»ó™F–PÒâ”î# c%TWâÁ¿/ñ`äúž(>“:Z:ƒ¶ªÒ¦¬j¶72íQ4g±æ;—µg
+_´¡¬¦Ÿ"€à€ä?0˜hŒ MKÔ_íǶ6ÅeÝép¸+
endobj
-1117 0 obj <<
+1157 0 obj <<
/Type /Page
-/Contents 1118 0 R
-/Resources 1116 0 R
+/Contents 1158 0 R
+/Resources 1156 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1093 0 R
+/Parent 1133 0 R
>> endobj
-1119 0 obj <<
-/D [1117 0 R /XYZ 85.0394 794.5015 null]
+1159 0 obj <<
+/D [1157 0 R /XYZ 85.0394 794.5015 null]
>> endobj
278 0 obj <<
-/D [1117 0 R /XYZ 85.0394 656.7756 null]
+/D [1157 0 R /XYZ 85.0394 632.8653 null]
>> endobj
-1120 0 obj <<
-/D [1117 0 R /XYZ 85.0394 632.436 null]
+1160 0 obj <<
+/D [1157 0 R /XYZ 85.0394 608.5257 null]
>> endobj
282 0 obj <<
-/D [1117 0 R /XYZ 85.0394 563.6675 null]
+/D [1157 0 R /XYZ 85.0394 539.7572 null]
>> endobj
-1121 0 obj <<
-/D [1117 0 R /XYZ 85.0394 533.5536 null]
+1161 0 obj <<
+/D [1157 0 R /XYZ 85.0394 509.6433 null]
>> endobj
-1122 0 obj <<
-/D [1117 0 R /XYZ 85.0394 456.2156 null]
+1162 0 obj <<
+/D [1157 0 R /XYZ 85.0394 432.3053 null]
>> endobj
-1123 0 obj <<
-/D [1117 0 R /XYZ 85.0394 444.2604 null]
+1163 0 obj <<
+/D [1157 0 R /XYZ 85.0394 420.3501 null]
>> endobj
286 0 obj <<
-/D [1117 0 R /XYZ 85.0394 307.3784 null]
+/D [1157 0 R /XYZ 85.0394 280.0345 null]
>> endobj
-1124 0 obj <<
-/D [1117 0 R /XYZ 85.0394 280.2293 null]
+1164 0 obj <<
+/D [1157 0 R /XYZ 85.0394 252.4421 null]
>> endobj
290 0 obj <<
-/D [1117 0 R /XYZ 85.0394 163.9859 null]
+/D [1157 0 R /XYZ 85.0394 134.8432 null]
>> endobj
-976 0 obj <<
-/D [1117 0 R /XYZ 85.0394 133.872 null]
+1016 0 obj <<
+/D [1157 0 R /XYZ 85.0394 104.2859 null]
>> endobj
-1116 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >>
+1156 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1127 0 obj <<
-/Length 4048
-/Filter /FlateDecode
->>
-stream
-xÚ­;ÛrÛ8–ïþ
-¿­¼eqp%€ä)“NzÝ5“îMÜU»ÕݵEK´ÄŠDjD*Žgjþ}ÎÁx‘ Û³IùA$
-¾«Ð+>«à¤¼Çq¹(<°%²
- 5õ摞ħ¤u&“ÒDxûz¹H¡.3¥mzM
-Ü„úŸšM!lÉyä(<xÇݶ!
-€!—8’c8föß¡õ°Ý Nø²Ûm*ÏaD¤™ dAúhmÝÑIJ
-iC×ì€ö¹CxòWôÒÏU×–›{"E†€è(4zZûY"¹›íöÕ¶ð8ÂKqèÖ;ú{ mKTäªÅ'·dÿa¸‹ß‡p5¼ô:/^?ÂÒD¨‰¨»>öKøJ¡Á¡ f*ìee§Mp„8ƒL˜` q½ÓÖ/{ql‚Éëëj±&Š¡aˆQЇåŸbÁ`‚À\ª<Ó¹OG
-‘ 8 물ÔNdBéo/‘D€ó1ÄSp<˜Àõ«ÎF>ÿ†ÊÛ egï
-r¹Ç„G£ÆÜy™ÀŽÃ
-Îw;oñ™£Ùv,w/81‡(C«è½;rç¼°™âO( Œ¢è¾ã#Äg, @·<âäÀç”À@ৣõšGŽæÄ›M$AC¿å×rqðN^†|ß(ßô‚sYàde‚(}*Ëså`mY&|þA3ûÕ%=|L•Á‡Õçk¸a ò·å–<Ÿ³…÷xFÎ~(`¸¦Ñ·ÌaÒ;‘…·®œ¤Zg` äë“’s¿æIdÇÜ{„mUŸìÁºæ‚¿ŒJýê§w>‚é½8¥ëD™É ŸӔ€gJª'ÏÞ¯yƒcH#nb‚Œ¨jŒJŠ±â®9t4ò†ÑÜê?˜å‹K4î'r55ÌUªºÍ}Ë=S‚e™2ò¨€Ä1£s‰’!×X2LXªÞd¼Â4›TÁŒ¤ 1°o»¢óÉöj ¿»ÃÄuºvgtq®AòSFB.ûT˜
-×¼-Ãngúß‚~–å}qØ„¹©ÊóQ‰ _ƹ×!lÒ1lÒC5š‚%púFkõDÞ/­UšáUúÐÔW]XÚ äPwåb¾Ž¦^½â`Œ ç³›š–t¾6s‹¢-¯)Pîa›¶¡ukßy±ê\”¤]ÆsýÎ*†e—ü”³þ1Éq¨Ÿìˆ#~c’¤fw‡ð°lJŸ¸¡Ø…¡uñ¥¤§"%ó‚S1ç鲟„ ¨ (›HIäd̾@Ð ±“SACô: À.`í=@Ñ(–adŽ1°ø2$­Ê»cÿÕ=Éâvø’l¤É
-«¥“0<d›‰fD¶Ûò‘=È‚Ã?v6 ™¤‡ø!ÙØÀÊ
-pâ—Æß΀C]QgR:""NÀvÞúÂÒÈÑ“î.ÁÔ3AdÂDhöŸÃQ£å…
-×¼
-HÈYgGÆǜ˩L¡…žhUÂlD1á«°àìó÷·TáÇBÚ5Ýê(܆MÂõ13«KªÄÙ~ÿIhø$óˆ?Í—'ÔÐ ÷­z©EÀuØ9¨¼ÃŽÁ_€×€Ñ²¸‹ßzŸ‘ƒHb…„œÈÞŠïOáJÒ¨þ®ã•5º¡´cëp k0M,Úglõ{ùE*ÊôY
-,[Vm@y¼Í]â ¢×=ñ.ýbºšŠ[V’tþ‚ê/\ŠãÀ«”|a!(wI˜\…ºÿ«dê\‘‘÷¯Sâš)ÇòqäAô\ľ‡™qRâSÆÃ]Y¼l¬¯æœ1ŒS›Ã2îÓ¨~…7÷;•ÕÛ
-ÜôvöÕ-?ºdz–Z¾ƒŠgèX3»/è`¬Ü€4q¹­jH¾úX{ã÷4wšvÙHì–VÐõo§‘{ƒ²Ÿ¡+–ÔÊ°NN)𰯺pc7±¯z¡¨…F}ÝCê«É¥ù¦1³÷âhùµÀûUèh‹¸ž&˜Þ˜âL¯,8¾ÛW_¼ÃÁŒ~èÂ"‹¡ >Å^v"@=òšõq #ÒÍo bñnî+^F¥-Ï©¢› è!^üÿX;DÔ9Aú?,.àó?üÑÀ;ü…iiz³j€gë-­Äû›õêuê¾=Ûà/›Á%Âýóõ¹>¶]¥Lu]XO£oþ—Š¡Ñ¦ BÅ™’±™²
+1167 0 obj <<
+/Length 4329
+/Filter /FlateDecode
+>>
+stream
+xÚ­[ÝsÛ8’÷_á·“¯,.@|'OÙL2ç­ÛÌ\⩺«™©+Z¢-V$R+RñøöŸßn4À ²<ç”Øhôǯ»a~Éà_*i—»Kãd¦W—‹Í»|€±/x˜3“æãY½½øËGa.]æt®/oïGkÙŒYË/o—¿Ît–gW°›½ÿéÓÇ›ùüîÊÈÙíÍOŸ®æ¹b³7ÿùZ?~~÷÷¿¿û|5çVñÙûÿx÷óí‡Ï4¤Ã½ùôõ8zœXôó‡>øôþÃÕï·»øpÛïe¼_Înä¿þÎ.—°í¿]°L8«.á…eܹürs!•È”"ö¬/¾\üW¿àhÔÿ4É?β\è<ÁÀ\¤¨\¦ !ßÕ¸˜ÉG3¹Êl®-,Sªºì¤ñrš–çaÒ¢©»Ý·³f <ÊÝl±*êºô/vVµÔYÐëíûŸé½m_aqß^WmWÖUý@sŠÐÝ­Jêh·å¢ú±¼\&HÎ¥†­«Hòöðd„tcV »ÁÙä°CkÓ'3ïWœ—$¶)ŠgÎ>åû¶Ù¥˜šóŒ9vÑÔŠ~k¹8É©@(±ßýŠgX •É¸ÖfÊ‚b¹Ü`àa×°q!f«j±Â¹ðMWLÂ79ðU©œÄ¯@^Y;»CVY´ð~óó7I=Í®ïÑÔò€È–m @æê„6hØ}näIÆæ¹}Éa{ÒdÚÀQ¿–±ýŠóñ’ÇŒéÈ,…ï§=ÇX‘9&#g›{š"'[åp< , ÏŒÊOü÷ÄR6³Š™ËѬߘb(ð®j¿B›‡½Þï«F¶Äì„—ØßÒ“Äfų²³Çj½\~þ2œçpVoIrn@„>„¬Î¢«šVFáRklI/ØS,åÖSo¨d8ZÔO¡ãžžž,l´O°¯Í¿µ4ˆôë $•(@Ú‚¸rù¬¡q2hô+úÊhQ’Â@à°WÜ‹;&}´Að|¶oqÆPÈ“f@ZeNJ+6ãà> ȃÑ`å_+¬qÁùxÅcYå’ƒpvøðs²*3Ƶ:#«t6Lyó&墂`ÐÔqRvOÌ{jö ZÎE ®¦^?Q Y|ÌZg2!L\oW/i5“ʪ‘ ÇIÈákëfQ„Ï­š¶ëÔ;¾ƒ™Íö®X| g=ˆA…§¢ !êa‚Y"ÜDšÀ˜e þx‚z
+Ü$œüÒ¬ €°’óx¢ÐðŽ»m
+€Ž!–8cØböÏðzøÜ Nø²Ý®+ÂHH3!È‚ôÑܺ£e†®Ù=…Ús›ðìÏè¥ ÚU×–ë{bE&@£çµŸM#Š´›mwÕ¦ð4ÂK±ïVÍ®ú¿umJTäªÅG[²ÿ:&ú àjxéu^¼~„© ¨‰¤»û%|%@hðC`0•eHñ« p\o>,˜0¿0½³&½•`˜0òžWhÁ¸6ôðkùVLL>?˜Öò W”`¸ ¸ Â` ÎO¾>9œW<f—ƒ¡[?ë$Žð‘o4QÞZH;ûP³=J=ƒ9cî´4`êÆaîæ»í·_ñ̆Ñ`;¦Ý vÌ_(©ûjfGNùÜf’?#þ@2
+¢ûŽŽ+žÙpÐÜð…“ ŸROõ˜–¶ ‰7˜È‚†žååbïݼ ‘.¾Q¤ù s€)ðd_‚(})ËSU- aœÆ ÒØîá’ŸSõ¼ñüÓå¨~nõ×Ïå†<ŸÉgŸ
+ïñŒ˜ýP@wM½ï'ôàw" o]?
+ ”ÊÀD‰ íG´~Ö’áH2Žñ÷„æª>ú*@vÅsþRŽõóÏ}ÿh]ïÑ)t'îˆLd
+Cáx¡e¯C%s……
+)Áìe>KFz¼Qñ|1†Iy RËê¡ê¨8 †`·ßYfB1ÓcÍÌ ÔØ;TLàe¿xˆ?ìçt«}èòÔa—§dòüôdÅdZÊóµæ;îM[ð7-¾)¾Y¸`¯ øZ0ÚSvl›¶­î|ŽK°- ß±Ãß0ˆ¾ÁO’—„áp(Ðoé1Àœƒ„’g0¡
+ëÄ_ù :ö5rôj•Âq
+}ˆû2&Pä@9¶-9xp.üÏÈOöõìâ¾óaÕˆL§|?®rž±¨\Õ
+W÷¨‰åý…îoèP%Þ½¡'Õ*{‚üL„|á¾
+pn³¹öZ‚³ö¨ôaí{z‡ð—–:€Ûsâ•™Á¬Ð‘ck‹ Ú‚·_àðæÃþ©å…Ž€£D4yÂE%(U#«êaf—ôã’F¼Én¬±¡ªL7€x=ûï0÷af,Ò 4ómå¥SPÆî!|6*;Î=aÜéñµ¨Î64ZõÃÐýdH⥈p›Ê+f5iÝjÁ«f¿^R'š<j¥|:/X¿Óz©BHߢÇV•¯ÐWñÍcM~ƒÕý„2¼ðÔ®ˆÆ® :Ã4˜ƒÜLíLÏE¿ñ¦í› î˜ø
+L¼¯Fîe¼|´ý]º¤‡u…âÇ]Õ…;¼:`_jöØC¨…z}Þ;Cè«È¥ùbž1³±·ü£ÀWèhr¸š$˜Þ˜âH¯,Ø¿ÝUß¼ÃÁD?t…‘Eh‚­XÝN\;?ðŠõ8†ëÆæ7‚X¼­»ÃŒ—‘iËs¬è&(zÀ‹ÿkãD­i¥ÿÅä¶ÿé·†ÿù€ÿŽ5½W¿~hàÌVš‰7:뇷)¬Ž`ÞÁ´T‰ +®B¤Š+¬gëÿ)l¨°Iƒ¹ÎüDµÈØLZX$…[úˆòøßcǤÿ d@Ééendstream
endobj
-1126 0 obj <<
+1166 0 obj <<
/Type /Page
-/Contents 1127 0 R
-/Resources 1125 0 R
+/Contents 1167 0 R
+/Resources 1165 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1093 0 R
-/Annots [ 1129 0 R 1130 0 R ]
+/Parent 1133 0 R
+/Annots [ 1169 0 R 1170 0 R ]
>> endobj
-1129 0 obj <<
+1169 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [55.6967 576.4843 256.3816 588.5439]
+/Rect [55.6967 552.574 256.3816 564.6336]
/Subtype /Link
/A << /S /GoTo /D (rndc) >>
>> endobj
-1130 0 obj <<
+1170 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [268.5158 576.4843 332.4306 588.5439]
+/Rect [268.5158 552.574 332.4306 564.6336]
/Subtype /Link
/A << /S /GoTo /D (admin_tools) >>
>> endobj
-1128 0 obj <<
-/D [1126 0 R /XYZ 56.6929 794.5015 null]
+1168 0 obj <<
+/D [1166 0 R /XYZ 56.6929 794.5015 null]
>> endobj
294 0 obj <<
-/D [1126 0 R /XYZ 56.6929 311.2132 null]
+/D [1166 0 R /XYZ 56.6929 287.3028 null]
>> endobj
-1131 0 obj <<
-/D [1126 0 R /XYZ 56.6929 286.8682 null]
+1171 0 obj <<
+/D [1166 0 R /XYZ 56.6929 262.9578 null]
>> endobj
298 0 obj <<
-/D [1126 0 R /XYZ 56.6929 252.8569 null]
+/D [1166 0 R /XYZ 56.6929 228.9466 null]
>> endobj
-1132 0 obj <<
-/D [1126 0 R /XYZ 56.6929 223.8335 null]
+1172 0 obj <<
+/D [1166 0 R /XYZ 56.6929 199.9231 null]
>> endobj
302 0 obj <<
-/D [1126 0 R /XYZ 56.6929 155.208 null]
+/D [1166 0 R /XYZ 56.6929 131.2977 null]
>> endobj
-1133 0 obj <<
-/D [1126 0 R /XYZ 56.6929 127.8981 null]
+1173 0 obj <<
+/D [1166 0 R /XYZ 56.6929 103.9878 null]
>> endobj
-1125 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R /F48 885 0 R /F14 685 0 R >>
+1165 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R /F48 925 0 R /F14 717 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1137 0 obj <<
-/Length 2663
+1177 0 obj <<
+/Length 2511
/Filter /FlateDecode
>>
stream
-xÚ¥]sÜ6îÝ¿b噈å‡(Š—§4urî]“«ãÎ=¤™Œ¼K{5ÕJÛ•6;¾öþ{A‚ÔJ+ú£ãñ 
-É`=÷Xðîòß½¿zóÓOo®Î¿\ÿxvq=è2Ö—QaùýìóºXÚ?žQ"t!P´æ‹ÍY&‘™SŸ}:ûy`8šuKcö“¢ ²à*b@ÎŒ-%ŸXPj’ .œ­Ò€RšüfîQ½O}Ù›izþ`~¥”7U_µ bÊf…À/]yg¬`31:-ºHyFtÆ2·Ëõ:±§$ϸbKcwŸ3©¬Mw 쑬P0Óá°ÄŸn]îÎY‘˜•›%Žý*§¦nÛûÎ p¨ú5Bן.ß#ô+•´3æô¬3ªHÎAH%2’kª­Õqrw·@àjtL}:^€Ç4VxÎ×*þÉ,ÑúV"8å™4Rða=‘fæ*ÕS2̸YÀ vë×ÞnËv³±>R-R¡()—‹tp>X½\—Mcjt›lÊ2§«…âœ(!Õ6èÓñ‚¹>s¾›bòà$›É£Á<tÌ~fÕê))fÜ‚U Ž1JT.¬áÑ‚«Gb‡D1Z<;@“g,;œfɲlh—ËýÁÒϹsåT&}»ELm¾¹³³ô·"àÔ66 ïö»ÒÛS{‚Ö³¯š®Zy\ÑIPI$WA©o•9Ä2äVEå©Vº¹–É¿Ì}‡;¬Lêý1Wü-›ú#f›Æ„• AßUK§œÉ×Y¼Cîhr
-NÕ¬æ,%Qr¨'x¡°+xìÁëV<Ū8aÅya–[Z‘ý]¹¸Ìd&ÿ.3QD%ƒ[3ÊR''ì€*“'ü$ãò ™Ð?Ü8É> % Ü BÓH{ŒÍæœ&×çšBÞ€ax¼¥3HÝÚ:—"ñ/Kœðn„t"¹¹Gt¹ÝB‘†ÙÐþr ¤¦j³ß Q³ßܸ ®¢–Ç] ÏWǶrù æ·ˆO§yÅ?¯ –… €“C»¨²ÃˆÿÊÞV,1äŽDŒ­¡>f‚ŸzhZЈµƒ·K¨ ÁnÜÍd­î±|¸¡ ñ™þ4e –“
-fxã®sö┦cŽó”%ÀÁ¤fÅqc¼E]ŠVÄJr”¶¬eñd5›tÜDëOÂÏû:t6~)_ÎW9È#\ΟîÐoq[ÛB÷ NJ±²¿¾à,;“æ Ü‹«@ˆ:’¡î5ˆÀ¥à½¯T¦†Öö­¡º½»ó=k½ß•ðúßEë¤ 40ÉãNßPÒN"ó3R ƒÑà+Vl#^üÙk‰n«Ú“oK{¹[ȱ°k¹ Ú¶é&kýæPat:†¸µðŸø³oêjS¹“ð´ ¡/±Àóïªÿ™7ÝxeUÎïÚÝw`Ï1üõ¶\V5\‡±üVõ+³ÛÅäú3èW×G=^å`QCuÆc°é`¨% !¯Ö#Á®íÔl‡r× Þvoa¥ (»·O7'Åóm;Y¶27{ÏÈKåûhË é=µ«8¶øt»É‰m!núÔÞ ±^Ý{ã$èÖ´¯£gÏ眦†{ §¾
-1ñ—SBÿÿŒ¦z‡ÑóÂq»¯'‡õà<!ä…Ò[¸tšhxXOƒYN÷OT›}F|I›\<Þ&§B…Ë'H½¤¸Ð,Ò*jԤ÷—ÅbÇ\؇mËYè[¹«ŒõI;°u‰¥”vÈmyÑ°ƒ.üÜÒâZ”BªÌV RÙ·rkúIM 6 ¥cHúsõ ŒSDªâ$_o×»߸öìÚezwØ3h÷ývßãÜÆôëvÕ½Â7'¾)ýÌ ‘k3¸#ã¼fG.Ÿx’ƒ}ೋ,AC#AÐá ÍB»ÏÕ Â'4;vNÜÕ¿@}K(b,M¨ •ó’‘G <‹`ÒÁBÒW&¶
-0µYz¿]·ìá·{_H,k°¦ñ¬P­;ëÉ¡Ö8ÃfZVš¨lÚ°úظæJ–%mS-ƒb#d~ÄËÔGYé{
-СBxñGýã<d |Qðø×AsRp­‚PVq¡N%¾þÏEÿ (^Øendstream
+xÚµY_sÛ8ϧð£2S±ü+J—§n7éeo·½K³OÝNG±™X³²äµädr{÷Ý$HY²˜º;›<˜A
+(õÙdz G³niÌJäDå\G(Y̪ ™àÂ9ð¿Ö†×Wœ-#…RܲÒE*s° Ï“uLN¢”&¿›gtÁǾìÍÆ4=~þh~£”7U_µ RÊf…ƒ_»òÁømÄH!Ø…+°«@Un×fÐåÀÄ)É$/€ÙòØÝç‚€Gië$ÇÓŸ%+TÌtøYâO·.wç,OÌÊ›%~ûUÎL;¸ow8ØwOU¿ÆÑíÇëw8ú*Ús’j’qP2Ë3¸”ödpr÷°ÀÁÍè(þt¼ÀåÄà¹\køG³Dï[ fÚ(E ΋‰6³p¸Né0“fu
+)¬_^ÎÔŽ˜w¹†‚Ì´ôÊÁ©õ»¶î"VÀ¥“+Åfqã¼)!H¡> ÙÍBGšJ’1‰'8¡LªS øÓñ‚H*Íä~cB+0MÚÂ6?OèÀuJ‹™´C™´*lö¿AÝÃo¸°üíYúiL%;pù„¾,haËÆKUAÇ„û4F'à`D· DëoA1œyžÇ1L:ÈK£¦j…’aW«\µŠåOPÔÿ• f9ѵ0â:ù½iŸ–þ¢ëìœ/<KšrcÜJžTž©Ä™U»)+¿ÞráhßTìMýŒ_P š¾º®š\4Ù€1–¸¤äÉudLjÜy6©ÝÁ)ˆ@Æø´î|-Eáø„¢uf÷hv±ü¤m<RÖ]ÃÚ°,‡¢€àlì°)|ÌÞ¯KOñ»"µ×+XW= %¡®­|y
+.rîG˜0)n«êÒyþMÙ/×¾¬€é™½CǾª+T9רJž' œŽ§¡Ò0ª@ xdÀsd0̯ËGƒswÆ4HŒ±7&wÒ0š`àT${Ss=DYÑU?´;° ßÑi‰<ÀP2LŸLh ‘µ =ì4Kë ÒGYüŸ}V{qéA^$©3Ah¡‡M_NjN`™·Á:PRfmº~ç¼kÇxž’«ÛšeuÎÜ%m:¤…àJÕ?¿.÷š«K:œÐà HR@RÉ{8¥•_·ßnÛ]ïï»Éë)…·e”Mƒo½)—éf¥"IMrNõP¦æ"ÑjÀ
+N¼JXD<áÕ+N‰ÊDq.#Â2Ë+ä_Õ‹«ìEaê¯
+yT3¸)³Šú 9Ç`¨¥:’§Q^¨þ±Æ Höi€)pk
+‘Osp1¶ŽsšÜž*< ãÍ,¡`tkx\‰Ä¿&q‡ò‰äîÉåv À ëý….(JÕf¿A¦f¿¹s¥&ŠV‡â\ OV'¶r• æ·HO§Å?© BA0ÀéQ¸¬²Ÿ+Pÿ•½§Xbȉ8»
+Pk•«QÙ²žÅ“-ؤ«à&Z~ÞcûÑÙø¥t|a¸Xå€ð„«·ãÓz,nk q¿¤1ýõ ³ìLšIü0p#®#ÚH^h xãÛªÚA…oÕíÃèYKèÝ®„ÿ.XGŸAHÿtö2 Õö´ÆÖ~BŽ¡K0úø‚Xm$À¯›½@龪=û¶´×º9v-}aÛw±Í[tP:ü: ykÇÿÁŸ}SW›Ê„çe8úKT/¿«þmf#¸éÆ+Ó¨q~×Ç_îËeUÃuÛ6¬êWf·û
+C³¯ëƒc=ØT`ˆ±0 6µ„O¨«õÄI°k;uÛS¹k†h»·°Ò’ÝÛ—›#Ø|ßN–­ÌÝÞ òZùúrÂú Ç_-Ç&Ž=Û΋ÜBÞô©½ c½¹ÏÆH°­i/¢gÏæ’¦ŽûfIú*äÄ))ÇÅCsø¤ÎS»Ãשtœ´ûFÌ“ÃzqžòÚ[ ¸4VhNtÅÕPý†:ølS¡Ãå4ˆ^R\,ÒzÔ˜ÃW—¥b—\Ø'mÅÙÑc¹«ŒIûaq‰åŒvÄmuÑ~`×\ø§·åÅ3´$ÿxÔÒ¢¥í+¹‹5úàÅ
+,}\™0Ñyƒé@|*›Þš;O®ï‘xàqš9Ïä”pl뎽ic
endobj
-1136 0 obj <<
+1176 0 obj <<
/Type /Page
-/Contents 1137 0 R
-/Resources 1135 0 R
+/Contents 1177 0 R
+/Resources 1175 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1145 0 R
-/Annots [ 1140 0 R 1141 0 R 1142 0 R ]
+/Parent 1185 0 R
+/Annots [ 1180 0 R 1181 0 R 1182 0 R ]
>> endobj
-1140 0 obj <<
+1180 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [406.6264 730.8852 456.8481 742.9449]
+/Rect [406.6264 682.3188 456.8481 694.3784]
/Subtype /Link
/A << /S /GoTo /D (tsig) >>
>> endobj
-1141 0 obj <<
+1181 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [140.5805 719.5976 196.7992 730.9897]
+/Rect [140.5805 671.0311 196.7992 682.4232]
/Subtype /Link
/A << /S /GoTo /D (controls_statement_definition_and_usage) >>
>> endobj
-1142 0 obj <<
+1182 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.6195 677.087 159.8382 689.1466]
+/Rect [103.6195 628.2088 159.8382 640.2684]
/Subtype /Link
/A << /S /GoTo /D (controls_statement_definition_and_usage) >>
>> endobj
-1138 0 obj <<
-/D [1136 0 R /XYZ 85.0394 794.5015 null]
+1178 0 obj <<
+/D [1176 0 R /XYZ 85.0394 794.5015 null]
>> endobj
306 0 obj <<
-/D [1136 0 R /XYZ 85.0394 769.5949 null]
+/D [1176 0 R /XYZ 85.0394 731.7607 null]
>> endobj
-1139 0 obj <<
-/D [1136 0 R /XYZ 85.0394 749.4437 null]
+1179 0 obj <<
+/D [1176 0 R /XYZ 85.0394 701.1889 null]
>> endobj
310 0 obj <<
-/D [1136 0 R /XYZ 85.0394 543.6821 null]
+/D [1176 0 R /XYZ 85.0394 493.1135 null]
>> endobj
-1143 0 obj <<
-/D [1136 0 R /XYZ 85.0394 516.3776 null]
+1183 0 obj <<
+/D [1176 0 R /XYZ 85.0394 465.3511 null]
>> endobj
314 0 obj <<
-/D [1136 0 R /XYZ 85.0394 259.6272 null]
+/D [1176 0 R /XYZ 85.0394 207.2221 null]
>> endobj
-1144 0 obj <<
-/D [1136 0 R /XYZ 85.0394 229.5133 null]
+1184 0 obj <<
+/D [1176 0 R /XYZ 85.0394 176.6503 null]
>> endobj
-1135 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F53 962 0 R /F39 863 0 R >>
+1175 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F21 690 0 R /F23 714 0 R /F53 1002 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1148 0 obj <<
-/Length 4006
-/Filter /FlateDecode
->>
-stream
-xÚ­Û’ã:ñ}¾bŠ2U£«/ìÓr˜=ì³À2<PŠò$žÄlb‡ØÞì@ñït«[²Qvfa+–[r«Õê»y-à'¯mš¤…*®³Â$VH{½Ú_‰ë ô}%yÌÒZNGýêîêouv]$EªÒ뻇 ®<y.¯ïÖ]¤‰Jn
-Ö.ÊÝ!z±k7›Ð½¯º®ÜTüéñFæ‹jSºç: ꛾üLíêè:Û#R7ôì·¡_µÍOB¨Íp,ûºå^„ì*joZþ¢}iëê¡v=î°c)eRX«ÜÚVÛ²iª]÷Šv­=ÒQà–ܬ™j‚2éµ~àp.lü¤”Á‰@2‹ ceª€³9l’›v¹¡13æ{ºhˆCDDh½Ø>•Sv¨V5®¾Z'ŒKNp-ef’Ôj{½Ô&)t®ƒ.€(Hp!ÄâÎSÍl —?leWEÞ)›dFäÙ›
-ßQ²$¹—uÝ­ jÇÒH»x×B”ˆÙÒÉIŽ)ÃMÔ°»‰ÓùbWï란D'À˜Ïí*Ø{\ ‡·î¶ €§zÇ°{þ¨\­ªC_­©ÿþñl‚q'
-&§Yÿ¢ezÇ­Â7Þ*lz“†›4ÉužÎ902Í>ˆ¦íç6nÔi4#Í#26 71wÛ*Æ't»Âo]3€Ø<e“’I–zO27E:ŒyÍŽàÎM#pb$
-š!Fp ÅÙ‚ÄåAJ¡^ȹùŠ€MÚº§h!'J‘lñ¼x@˜[ù©ÏQ!0ø”¿Ü öÍIŽJÄòG f§
-¯>¶ x >ª.|ôÃþÞe2ÐvŽž~B\hÒ;GcÌ\ºÈý”]ý¯˜C¿ŸÚ =!µœµ”º®]Õw"}§}ë$2J9á-Ælˆìa!+ÎÂÒ}!Î ¢²–£HôÙ.í€ÖšsdË&a¥£—ƒîûŠ±¤ÞR8põyUUëîìúY×+^ BÎ$(ÐÙâ}K#¼ÀöÔ£»ÑYàõ2jÝs&Í1òëþrÍäsÝõLï¤Z0®g ¨»ì>V`eë ^ûbüœ'xYòÔžK
-÷Ür/i4†¦¯ùË®Ýso;ôËöayO\À¾Â «îöôJ”í»pdüÇ›P¢)ì.Íèi!a¦1ç%£`Ù}%ñs½öÞ€‘q•“êê¬tp_mËOu¨_*$x9ÍA;/YNmiÔRÞR,Mã®[áˆdi’AŽõ¬)•…ñƒBttn’µÍô‹´ Ù\êº_F¡¥ÌRØ“ÏײìT ïù;çŸÁÿí8¤tRàÙËl?jdúŠÑÕÏ4š |Óô ýÀ–û×19ë¦_RÆŠã«îu̯Ҹ±„5»Œ’ûŸ×ñ
-½†(H+ùe'ióPúà"mÄe€c)ä…:“šÔ™Ô¼ô
-œôÂܽ«¹C#ÙôG‹w )†=רÇhÎNò÷Ši.0ƒ¹t•X
-ŒufÖ˜Á³âK$ÙDJãåvV‡•¤¹ÉŸÃâÆÕ1ºY 9…²/%÷
-Lާخ{˜—bzè—ø,äK‘ìÚU¹‹eÑ
-D0ê«ðÈÿâQ߈ýð˜o´.ûèIcxðh6”¬.Æ#& å[‡*{IK•j¬o»ŒR'µ>sæ–¹Â!ýy‹œYz×ò xé†Ã¡=r­A.ȹ†±@ŒG`”ápç0]5DëÅo¨Æ~²îÊcèö%ÿž‡rñæ
-›Î®`\`qŠ·ƒ‚ßÇ‚ƒg¢x| ÕÑ×…#ÈH©8Eä9ßòéMg¥žè×QoN)¹Þƒ98l¦-^X÷QR{;Žy# Í+í’@•]œÚãGÏ]ý1"!+~a ðóŽÐãmðxíÑ|{5V쨌fÃþº
-Ë#Áø‹ñ7\ížTÂ>º…d½P›in¬áÐávj’"ËõyÁçXÖ›-ή
-’x¢ ëI@`Œè¶ Û:Ú 5tŒÿIèš'2Ͼ2¸r•½øq´=0…×DUL 6>qF(?wUÙqÓe¸ÚgÉ
-MÄ
-Ëé×xÃ2žI•E‹¶˜DNÅYñ/ ÔÓ;[TØbìíª£;ý‚ø9y~ݺ˜_·.&÷?1HÐ9,’ÂÉbžMïN 9I†uf ÈGçŠnú(0í|ÚšûÚd®yØv¸s<YÀó2õwÇ[9•#ááotðàà®EÁgz_Á^¿¢´.PP…âüŒ
-g›7ã<ô˜Ü€_FO$`’Kÿ7Ð6Á? Dþ ÂÍóÿû¿ã5L–€áQñ¿(Œ¥Á&z¢x?¡Üÿiá)éÿ—±hendstream
+1188 0 obj <<
+/Length 3866
+/Filter /FlateDecode
+>>
+stream
+xÚ­]sã¶ñݿ“—Ê3'†øâGïé’ú§Í%½ºÓé$™ %Q{©ŠÔéÜNÿ{w± ”!Ûioô
+Û®ü¢î¡é‹OÔ/v²=ð_ª†Zb2€ÌT˜õL…þ¦å´“êÙª\Ǻñy¹-š¦¬»W¤²íZ-¹Y1Ö4âѤÏjÍÀ½°ó³”š¸5Ñ*‘HP«Ìñkâ¨Ã‹–X@„Ԟ΋}ËY‹Ù¾\Vxzdïc1š‹TG‰QÀJ(¤ƒ!; À¼Åq<»wX3èãÇí¡èÊ°ÂË$»HFáMÍ
+‡ê’ë霵6}µ<Öž»‡ŽDúëbYÕUÿp#„˜ý”ÿ0U7Øn¬nvIL±cn¢pæ?VU·d(Öøi°„w=D‰˜ƒt L2Q;ê‘SÙ¬®vhåqð„1¦3v%ðOFËá«vË-»`ðTÕ<¶à?Ëe¹ïÑIàüâálƒ0úslb?ãl™©º€êk™E¹09«Dլ۱ɢLäÞØÄF¼"ùÖ:ReÄT4€/è.ÒAÞðÃZZh½$ãGÀIeÚ9µ¦ØÁɪGy®o#˦[_òÎ}µã@LvÖûx#ƒKX¹iQ ñ ·`tšÕ—-ã;°
+¿˜UØu$& ×`äT–L)0Í>ˆ¦í§6nÐi4#Í6ò72÷Aï/0æŠëš#ˆÍc2I¥‰ó$Sƒ‘'ƒÁÈ‘&Ðíhܺi‰Ý? 8n',„ùØáhKƒV€á{¢c`v•Œ­Ë&EïèÐV¨TØŠ ‰˜€Ìý„¾¤L×µwÄA5h;ò²h ¢¨áX¿Ò2Ž´H2/ÿ6Œª‰& [¥Æ[¥HÂjÙw4I¢‰«î¸ÌêLjm&6@Ç4A8€¹JÀL¡¹²-šT F­M*˜^8°
+{œÂAù PêÓtöÖj.?…·aÚÙ8J‚ÎrÛ¶¤v’õIÎ>”åÞíC{ó‚¶^Qgt4^{¬°£&6`»Ç纳@òó1 iNSŽ"cuJŒ ™Íþaƒ?ì-ÊuëSVø®xÜ&[Ð’À†2 àt’ÆÚ‰•Ç¢úÇø@ç©“AÜóÆúVèÛÀN‰ŽLØG†öŸ¤„?öc`(Ô˜óð_ ýTŒp£8$çº>F°Šó³Å—)…|!å¦'2)k胕2-#
+9Ö³¦TäÚ-òÑѹIV&U/Òr0dS©ë~„æ"M€ :›žÓgÙIŒ¾çWÎ!~ŒÿÛRHª(Ç‹· ?× }ÁÅèê L~)jˆØ“ñîu¨¬¸?TM?§Œ×=”Ýëàu“]7”°&kçAt_r%wÑIšÌ—>¸HpàXrq¡Î$Gu&9-}à
+eWTuØ*hîE NþV˜êЉld"³—"SÁ÷_BæÅGºÈ\™E DéKáÔû }Uôäæ„5ÆXg¢ê„ &˜…4ŸBÉDBh'·Çãr‚"£$ÓÙsP\Ø°<™’“KóRTW`ò>†¸žcì¡_
+iÝï/Ñ9/R·Ë¢eÑD0‰åo‚#þw8f G~&|Ôg‚£?Ó¹ÌgÂ' ÁÁ«Y_²ºèÄ—o-¨ô(Íe¢°¾]úÇ:ÆZŸ>sË\áî¾EL,½ðù|tÇý¾=p­AÌȹú?c¯À(ÃåÖaÚjˆR³o©Æ~³îÊäCèö”Ïü ¹ø{€Ç^ÕŒÞø®Hø»"¾ÀvËåvˆ”Sp³ÉÙ=ƒ¿õ…HSq°«ÇÎ×7Ô†/^ŠÔ¨Éq¢eÛ¬CåW0‰RL\0BfŒwT6øjxZ|,i¨ ”@ÿ´­ìµÌòM ò:¾ñ‡)[aæ¡ŽŸj(Œ¯Cï2’,Êò³²ÚS<’©·†|¯fŸR¸"‰C âøS;¾£°éì Æ'ø4Ìû},(:x'Š×—¡P}¿‚\CJÅ)"ïѸžKo|°8)õÔ€ ;Gµi8¥äzæàÀL“¿°î#…rvÆ_ó_Má_•x¬ÌìÔ>°xÖÕ‡`˜A$á³â
+¿ë<¾æ׬!À¯WCÅŽÊhÆó×VXhŒ_°h÷"ÁÖþ¨¥‚ÎÑ+$ã„ZëtC ‡.·åi¦Î >‡¢Úlqw™“´@‹‚®Fu:cD¯MpÙÖâ½c7¼Q›†®$#éo ®låF;l̽&Ê|\°q‰3Žr[—EÇ]›á*—%ÃÀ詆]IO5 »©>–|–¡6fÓÌ$?3i>S_¸¬œžÙ¬ž¹¹~ín«ý©F9øˆ_<$ÖI^Í6z´·{FrñbS ¾ØÄŽ'~!UºÀ6t€!~kH<×t³ÛÐa[‘%ƒ¦>mÍM¤Rï¡õ!øD {.«Ú¾EèËîjøŒ'«PØ*6ý‘Þ÷à÷¾èÐp’¡ö*­Íyy‡êxÇÍÖÞÉ w;©'·“Æ?ñ¢kNEûz|é¯G~¿¨pKGïQp8ôšGÅÏÇ™|.[Ò1&ŸO‡> ™<2úÅñBkbÿäaqì ;~‘›Úwžsvú¹†`*>£Ü&,Uh¤YžOŠC~ßšÁ¤öu£*\BŽŒTúe¤Çù™«H*z#ƒ]9~³+º †Ñ3o2µoR0>ýÔ
+RóLy‘¿•bÑ&v&¦Z–áR²©Ñ¥"º`ôW$°û=ۃГse"|'x û÷§ÿ÷sôá­¾N#•eÒ¿4ŸÒ=*PÆ!…gRÙ#ÌÝ»õǨÿ‰§z-endstream
endobj
-1147 0 obj <<
+1187 0 obj <<
/Type /Page
-/Contents 1148 0 R
-/Resources 1146 0 R
+/Contents 1188 0 R
+/Resources 1186 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1145 0 R
+/Parent 1185 0 R
>> endobj
-1149 0 obj <<
-/D [1147 0 R /XYZ 56.6929 794.5015 null]
+1189 0 obj <<
+/D [1187 0 R /XYZ 56.6929 794.5015 null]
>> endobj
318 0 obj <<
-/D [1147 0 R /XYZ 56.6929 728.4063 null]
+/D [1187 0 R /XYZ 56.6929 671.5351 null]
>> endobj
-1150 0 obj <<
-/D [1147 0 R /XYZ 56.6929 705.2957 null]
+1190 0 obj <<
+/D [1187 0 R /XYZ 56.6929 647.314 null]
>> endobj
-1146 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F21 658 0 R /F47 879 0 R >>
+1186 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1153 0 obj <<
-/Length 2604
-/Filter /FlateDecode
->>
-stream
-xÚÅ]sÛ6òÝ¿B“—Ð3B
-òûÅ/¿…‹Äþþ"d2Sñb!ãY&Û‹(–,Ž¤túâç‹Œ'³f©O±T,V"õ(PHŸãŒ%¦P÷ e<èu÷Uw8ƒ"o,p÷øX¨ÿtÓW_-~©vëuÕ¬é³jVm·Í‡ªm}¿Ñ–H5ØÿžfªÆC! ¶m©Aý‘ÁÍŠ0†SæÀ¯{T:H¾äœeq,Œëº}Èk@V ÑÅaÔú«¶P³;ü¯»K®FXÀ6FZ˜ú·6síÜ4ÆÝB™r
-xÈ)Mì«ú’5}<hšÎ‹´„¢ðÌêf½&GSäÐ#Y¯A}Y®€¡Ç°Õ`ýwƒá ¿P]@ÌÎ'fç\0!e„‘^“ouiѦÞ!ÁcãŒ[,§p$»‡iÛq™MV¦!S2v+—>â<f\„±Eù5 eny^µuÝ\9ý=¶}5ïªôÔ |€‘¤ŒƒÖ2éVv—*Ø5 êä\K!“‘’NÅDº¦,ðXgÁÐå…öðE,—°ü3Ü:±¦…U£iaìL«Ñ´
-S@õº¨VúÈ'0ðxQÐ÷è 0¬uÕp¸äœ£?#l…ýG¾}¬õ;ÏÃ90JRÃhAÜ\.“бP_Ì>_¬âÌŒ¬B²ŒŸZwrÒ«UÛ¾z?CÜFˬÁ³RàPúÒKùÏ÷—Ê2daÈ•Á
-,B Ö&ÖÅ³Ô GåÓøºù·’áPÚ™Ž°kp2‚äÍCµÕv´±ƒ1ÂÁŠÊâ£CžmÏÍ¡Ãp“&yÍ:7ÿåq'àÊ»i3%Ç!U4#SFð«|àèW8câîùÉ!ê.uÁ¨<@D¯
-_Ð’Œs9tg>$½ë513r8Ï°fîÈ´töF°S<@!x‘éq+Œï§HwÛªÑäÐûñ˜L¢
-¡ mƒ1’.ûã´ O0WBÑ@#
-:8g AäÅD˜þëv½Ö%ó™0Féâø¯s¿ÍÓM&áÅ €„‚Z1•ÄÑÜ(¹‡JÌÄ1Óz`Üè9¤Î$³h6è¼±im7Pº2UVœ‚ƒíòÚTŽ1¦qÎ
-ÎõUSx •R’EýFFòºo‰®QcO[’Í
-TâéÌ:ÐY·ÝÁÃO’°4‘.“Ú*nE HŠ“RÃÄßwºt‰ÊSÜyDâ:ƒq7ó…!ÿÇi{€h‘u<
-ûßÈr$¸œP¤Œ8oÚ8Kp¹Ã"ñPxÊÁb9Þ}Ž¶Ä s= ÓÔ6
+1193 0 obj <<
+/Length 2561
+/Filter /FlateDecode
+>>
+stream
+xÚÍYÝsÛ6÷_¡ÉK¤™!
+fk˜ûxÅÍš¥]´¯úîñêí­Lf)KcÏW£³ ”â³Çâ×ù‡O×??Þ<,–"
+æ1[,£8˜wwÿ7Iéóá§ûÛ»ÿx¸^$áüñî§{~¸¹½y¸¹ÿp³XrqØ/Ì 6ÜÞýpC­×?þxý°øíñû«›GǢ_Hdä÷«_ f°ýýUÀdª¢Ù3tÆÓT̶Wa$YJiGê«_®þîÍê­>ùER±H‰Ä#@!}ŒRK˜BÞ­KDóaSR£¯†}6TmCÝç²[p5דñœÚ_Ê®/‹70½çjØ à2>ºŒÃ%)" ¯i²mY˜ecšd4IeV=wÕP5kºy[ö}¶.{굆ζ©¾ëxÈ’(ŒíAY×àA熜 'f]ÛÑ©›j½FAÙš«ÅÑx®‰KBGnèëvíckrÅâ$£æœ¥Q$ˆ¬v_d@»®jjfuM#ÇØ«Ì4É</«/¥Ù»ÒCí–zZsØÈ7YÓ”5Cz€B°i„À*Þü‹<RK™ˆRÇÎP”]çáF¤Œ‡Âʬ({P’1Ø>Ïëlß—Ô.*Cî€\ÄŽºÔRG¡5_;Û—XÕb xmvöCÖ™>® EH2Þ™=Ý•mÁkÁˆ€Éª§)÷m†²)Èò@)Š…ˆ¦:Yé㔘ŠÏŸQ÷zˆÈƒ†%ÛúlXÖ-Ô|ßh3ÓãYo¾ôÁs‘º5Ѽo
+Ú¶£~º[ip¤ ü#Ûîê3*Šòi¿^ï¡OÞ6ÿ ±ÞwÙÒi\óEȈú¹h
+p/?24äYc÷»x˜,ÿ
+ã#… Rèá¬/‚Ö i–®:ÐxEg0zƒß­¹`BÊøëØ (mßÈÛAº¾ÕŽÏO¦$K;—¾³yĸ,úƒ¡Ê̼jëº}F(³•Ñg×Bøч=ô^öúˆÌ2"ȆI»sä†ç’X
+)˜ •œúF×¹ .ËK_˜Y aè×øÍÂ.§YD<£ÙH9Í"Úeµ‰ÀœVêúƦóy¦ñŽ-–ËÃû®) B4DQ¾!¤DQàè‹¢
+Ð/ ,Øk*JÉ‚$S#lÚK¢å YqM(¢ù5¹D:u5iJ( ûJp5o²/f4£ó™”$«TIÁ¼ ÚÞµæÂ5—B9š<Fóly˜°\”CVÕ6ȶûa·PóòA
+^½¸™‰Íý®Ì«ÕÁÄñÑBsN}g 0…©S5œs´gÌ)œýßyîÁ](KB•Ö÷|66ˆ3ÿѼ
+ yXpâ
+à .zµjÛWïý0dˆÕë Ø”´|yr2íúó½Çdàd° àŠÒ 
+­EFèÚ5Ff#ðiJg~ð5œaSš™ŽV×`d4’5j Õ¶4­i8„ÃÜʬGƒ<»žk§C¸IlÆ»6yÈñ& Ê#3ºLI‡R…“ÃaJóv•€ í
+g.¤Ò"@Ù%ŒŠ
+…cõ Éê¾¥sµ{ºÒT‰ÕYd ¡ u—~ËâaÀ ôN&ÚÉáœuÛ<ôÄ1KbWš$n†1pœÂß÷P4é’S{ci€.DuÍÝmº‡‡_7mˆ6Ãá'3M†Gmmí î5¢Œ„ŒóÊ5Ô:XÄøä CÁ"úXG<r€š›«‘ˆøæ«ž#š
+VÙ¾ˆ
endobj
-1152 0 obj <<
+1192 0 obj <<
/Type /Page
-/Contents 1153 0 R
-/Resources 1151 0 R
+/Contents 1193 0 R
+/Resources 1191 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1145 0 R
-/Annots [ 1155 0 R ]
+/Parent 1185 0 R
+/Annots [ 1195 0 R ]
>> endobj
-1155 0 obj <<
+1195 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [173.6261 465.0053 242.2981 474.4149]
+/Rect [173.6261 393.0464 242.2981 402.456]
/Subtype /Link
/A << /S /GoTo /D (the_category_phrase) >>
>> endobj
-1154 0 obj <<
-/D [1152 0 R /XYZ 85.0394 794.5015 null]
+1194 0 obj <<
+/D [1192 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1151 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >>
+1191 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1159 0 obj <<
-/Length 2725
+1199 0 obj <<
+/Length 2653
/Filter /FlateDecode
>>
stream
-xÚÍZKsÛF¾ëW°r1TebçÁc}Rl9«ÔZö:Ê!›M¹ r(¢  Há¦òß·{ºHÚk¹Ê¥ƒ€ž™žž¯ßʉ€?91¡&*™DIà!Íd¶:“;ûáLòœi;iÚŸõýÍÙß^ëh’øI¨ÂÉÍ¢Ç+öEËÉÍüW/ô•„÷òíõë«~~qÞÍÕÛëó©2Â{}õÏKzúáýÅ›7ïϧ26Ò{ù‹w7—ïi(dß_]¿"JBÿ0}ùúòýåõËËóßn~<»¼éÎÒ?¯òûÙ¯¿‰ÉŽýã™ðu›É¼_&‰š¬Î£}hÝRò³ŸÎþÕ1캥£øIá+ª
-ï?J§Nú6#}' Ã9½A¼eGSDZ\×YYÐ3ƒ Àì<£ÿ³š¨ žbΈÅnÚ ½’ÁV•[Ÿµ¨}Tbä'ZENŒ·Å –·$ ý6'šƒþÏ-r*ìÕ"ò²šè3˜[òó­%,y»Ô¡w³l˜ie°8ôÒ¼¶çÒÛÐ<›,¯§YÁ H´Š&í°É·çRJïù˜Þn†Ž¶…Ø–Vå<[l·V½s»H›œ×äåÝ;ƒðnyêºÌŠº£ÎÀ!ïÊMf+ž—ödío¾Lï»:€û°pÚ’²é1ÐAüB
-f?2ŒZÇH /é¸+‚Ø챸P´µa³,8ä dv$@ü±°›)f§~„Àm1`_!CP ¹cãp ŠD‰ã÷ºE°KíøBn„Ôû4ËÓÛê-¦ ŠœáªPx¸Ú‚続m2Wªò¬r1` eøvm÷Æ(ËÁúÃf•r¥K«¶¼{YÔiVøc
-.Y‰®È4mh‚Ž9/ÂJœ@›vS€B¶4½ö±;¼ÓâR ½ºéÝ}Tõ iü·,ìž ÌÒY×ïƒHGÔ¼Ã充ܚ觳l!8¬eû"§ãj¤F‘áb•KËSj¾X¯é‚é>Í÷PœÛ"k‰.ßw9õ÷ÆVuuÖžÀ_Â>®êIqU¡/µ9‘$`‘â+å6›œÄõå~ÚÙ]×ñ5Sº©ºŽ©Ãœ•1çƒÁ#÷D*„¿FòÊWÊœJ>PvGaDa}c«2¿ïîí#üêú§ó©²”lV5ˆôsüÜyU3[â0]Qã4]À׊ àoi,/Ëͺ¢ñ5e‡Ñ¤ƒEn[¶ZÅv7_ ýd–gÔŒ÷oÓ]tê4ÿ(Ô¹žù Ú{x>mÀzRÇ’‰ðU$ÔqµËDû± )/aåP§ ²£šÿwñëMZT°²Ú»Iè§ö^ˆÕn³û£žÕ—ýŽ]2æý¯a£ÇÀFÈpˆ0ß±~ˆñ¢ø8¸$µüÖÁ C_›äD•!Ђ.÷öŸT2#T×oo®^ÿ2úu9+ó#Øõ„ú–±3ˆàDR•pª$‘œT]°<‰Ý»An‹·ŸS£ôå|*8 T
-‘‰?ƒe»â œ
-*ñebøv\ôIÙRnÞš"½Í-ÏäÎln¡ª_eEK^òƒëæƲ'jKljûš©A_Tð°Ì0]#­î}½Â‘´":ö÷Hp‡Cý|óˆ±ùt÷™}»TP8…í‡\hX#{´=ºš$þn£ßŸäî¨JC kV«Ô}—Óý´à[t¥¥»æpU‚æ®EºÇ”ÄÆ»½¥<ä
-*$ µýÞw¼4Åv(anð9}O‰Ü¡>t©5}¡×:€Ú¿y!…?,iú ””^Û¢IN_[ù9~˜†Zå95x·[Ø}õÁM˜a6j Uç°mc7x—€Rásoz{~Ï¥¾ÌK¿jز>FãÐW¡ (ZØú¡Ü|<éõ×<›`©A9){’|Ãy'~$ãQ€
-y!BxôS±öW[<«'úÿ
+xÚÍZÝsÛ6÷_¡éK¤™@€—§4±{î4NÎuzm'CKÅ Eª"iWíô¿],@‘2%9—d&“‹ÅbñÛO #ÿÄH‡,Ld2ŠÅ4z4[ñÑÌ}&ÏÔ3M»\ßÝœ}{D£„%¡ G7‹Ž¬˜ñ8£›ù¯ãI6 |üêíÕÅå÷?_¿œDj|sùöj2•š/.<§Ñ÷×/ß¼yy=™ŠX‹ñ«¿|ws~MS¡“ñÝåÕk¢$ôs@èõùÅùõùÕ«óÉï7?œß´géžWð
+êïâÇY½´‡æ}_iƒû@DI)!ñ)az÷Ô€‰mä`Â"gà.ºw™Âe–bD1‚vs$ñùì0©´ðÉ%²j¼-f.€qIîêÒ(´4˜%.š©8 }¼¥ßà4÷+À¬J…P„'‹¬Ò[ŽÓ¼61ÞЗK_ ³Éòzj,. Õ*bÚa“S}>d·ÛÆAGÛÚà°^•ól±ÝËݾ jTÞݵYûÖ±®Ë¬¨[ê ò®Üd¾ò¤niG×îæËô¾Ý¨èq sk-!:]"6IÐûqÎmCÓÝÜ)ön¹I+s R,QBù~ÈO@þÙ}Äã•MBHÞ l®=®Jš°gA^ $R*ƒ^‹$*ý@ä*"9vÈWiQÓ¨.iª2ŽûÁkdÃðÑ*§
+Ì]Ñؽ#àÐ%.ÛAZyZUÖjÞHKXÙ
+Ÿkw}éݬ]Þé ãçšµ»¦9Ï9bÜjŸf‰}ãªÏi\ð΃ú mE°X‡T²çiÞß#ûÆ}ÓVí@kŸK!„ ª`
+_W­˜âêD•pª$ô¿4¾œœÄõÕ~ÝÙÿŸŠuº©Ú+S‹¹3Æ ¢& ÜQýs!üª8S‰:Q}„
+¡©úlLUæ÷íËýa„__ý4™jèKÉ'aUƒH?Çÿ,ÆU3[â4=R#›M/Hp‹ àoh./Ëͺ¢ù5•‡éPC‚]®oA½Uñ¾›/úq2Ë3ºwßÓ]zj-ÿ(×ÙKóA³wðüš–ˆ™yÂìR2!5&¼`YÔ³â¤åÿÛ¦üz“¬¬ü]÷eÈ™Ýd÷Ç#«£ûל»xÈt|*°ˆ‹xØGؽ²~ˆñ©ø8¸;­?/¶âsb P„2>Qn“˜I¡©Úº›ý“fÄéêíÍåÅ/½Œ_—³2? \G¥¯Ø)cÉÂ(8QOãÉ»rjÓäIàÞõªâP¦ý˜î¤£å§\qÎ" õTEL* ý ú©n³û[$Ø/ˆãN~í={AW«b÷M”…*þèüßå8®Žêÿ“Æ!Úendstream
endobj
-1158 0 obj <<
+1198 0 obj <<
/Type /Page
-/Contents 1159 0 R
-/Resources 1157 0 R
+/Contents 1199 0 R
+/Resources 1197 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1145 0 R
+/Parent 1185 0 R
>> endobj
-1160 0 obj <<
-/D [1158 0 R /XYZ 56.6929 794.5015 null]
+1200 0 obj <<
+/D [1198 0 R /XYZ 56.6929 794.5015 null]
>> endobj
322 0 obj <<
-/D [1158 0 R /XYZ 56.6929 687.8392 null]
+/D [1198 0 R /XYZ 56.6929 616.1082 null]
>> endobj
-1156 0 obj <<
-/D [1158 0 R /XYZ 56.6929 663.0573 null]
+1196 0 obj <<
+/D [1198 0 R /XYZ 56.6929 591.3263 null]
>> endobj
-1161 0 obj <<
-/D [1158 0 R /XYZ 56.6929 346.0859 null]
+1201 0 obj <<
+/D [1198 0 R /XYZ 56.6929 274.3549 null]
>> endobj
-1162 0 obj <<
-/D [1158 0 R /XYZ 56.6929 334.1307 null]
+1202 0 obj <<
+/D [1198 0 R /XYZ 56.6929 262.3997 null]
>> endobj
-1157 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >>
+1197 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1165 0 obj <<
-/Length 2627
+1205 0 obj <<
+/Length 2877
/Filter /FlateDecode
>>
stream
-xÚ­]oã6ò=¿ÂÀ=TA+–)¥OÙÄÙK±›ô’P`»(›±…•%×’“æ÷ßo†CÙ’#Ç»Mí?f†œÎ%Fþb”ÄŒ«4™4b1ñh²8â£̽?~MØ.
-»«ÞÝýx¡Ì(e©–zt÷С•0ž$bt7ýœýóô—»ñÍq(chvÆšï.¯Îi$¥æìúêâòý¿oNMÜ]^_ÑðÍøb|3¾:‡"‰àKOaÂÅå‡1AïoN?~<½9þ|÷óÑøns–îyWx?Ž>}æ£)ûç#ÎTšÄ£'èp&ÒTŽGQ¬X)ÕŽG·GÿÚìÌ:Ô!ùE\0!c5
-U¢8Nö³%ØzP–Æñ.×P(” ê$ÖŒ¸Ñ‰ˆH±D©xdâ”i%•SÊz9ÍÖv²^åÍ3
- ðTÄcâÈ
-ì4ó¬!hž=Ú]h“ïèð¡rš DÒ8¥c{õëùõÇSŒhM˜+¸YWX
-•ÒÁªÒä2…—¥€†’›«¶8,O3™Fízw}€CF „®†XKH
-9Pí=7´d
+xÚµ]Sã8ò_‘ª{XS»öéÖlÞslÍÀpUWµ»&‰k;;d¹_Ýj)q‚CvÔn}´ÔÝê/…üóQšDLfñHgq”0žŒ&ó6šBßçîÆ„~PØõéáäïWR²(SBžzk¥KS>z(~ .þqþËÃøî4 Tt&ŠŸ®o. “Qsq{suýù_wç§:®oo}7¾ßo.Ƨ!Oó…[áÀ„«ë/c‚>ßýz~wúûÃÏ'ã‡ÍYúçåLâAþ8ùõw6*àØ?Ÿ°Hfi2ZËx–‰Ñü$Nd”ÄRzLuròÏÍ‚½^;uˆ1ã‰N ´J“% È:0É"­“tjÈ¥ŽâD£LX ±‰à=‘ðXF©”ÉHÃ:J
+ie²ªçy7™™¹3doðE'±*8ò«iÛ|jZà–Ý,:ŸÃl‹\ç-áVuþX7²!\a:³œ—µGÏ0©ò¶Eê@'ä<Ê’DX‚ÍÓi(Ó,h–Ðf,x²
+œå"ÛÝ~e*$ ÚÕ|ž/_è£l©Í«¶AˆU3"Û5®™¡-'°8KÝv&Uiênh×:ÒR'~XÞ™iô9çxÉdð0+‰ç!×Y”¦ZúÍóÝ9¡”ÒîYÊ8x4mG˜ [î19}þƘ@É#ÊÊ pmW˜åoçO€H`ê(ÌS¾ªÜ’¥[°T"ˆ·Ù²(9Ä¢ì Ϥ;z½ªª!þðȘÌòº6U´ob°Z)1êÝ©÷]S [“` ·çúëKúo¾ÊÀš(ÐŒ·¯¾Ê@؉Š‰9¦[7ËoG/þg¹Þ,Ì2ïʦn³¬¿™÷pŸgüCy–Æ‘äpÌ#<Ku”1îÌ墀›q”e—/`Ë ±Œæ¼Å¯ÞF>–_«cZD2ÉŽ¹¥“(‹ïñ+lÍdµ,»—£Œ;_,¬=ožóŠ¸—×…©KD×°e-ÁäþXz‹×½C|¯•Ž¤ñ÷¬é§ävÂâ(K5?Æm%£,c™å~Yšö(—ïfR>½ßÖ[ŠŸ~ ûÑΚUåøÿèlÜ•µÅѱ>S£—èòe·Z€ÕSXŒ¨¢7¶½6@`ãl<žŠÁ”po­P‚Ý×\¸qëì¾]ÛºYç¥Aò,ùŽ£3.R:ÃÕOy`5|á9í^ñcUW¦m‡6¾VÄ"ímðfì$¦cîÆ5 ´¡´ö ƒ¡Sà°©½Sf |™îù@d :XS ²ýafh!» q/
+ô†Ò4øû%¼UšXG©`ê;–¤ú°ÒHØo,“c¹Z,b,þ8ãj*3µò ›º:ž«]nƃ(!Ô³“\)KE𥙶ԳÉ)ðƒ*‡Íòg³mbà=bñ$4A‰…¶BÇöæß—·_ÏÑC¢6a´`{mj€«-2á7ºlsjzG¬@â‰B)Uð,öYˆŠZ ¬ð:Pi3ésãü„LYd±o¯PÈ©ßÕ)" !`·zìm‡2¥ÊÀ=îÄ.…@šîæaUîëÈûô®'ð$ÂòÛwx+7ã *c.Ö1U–â;¥(6à[ÂÂE“Ç  Í‘˜êå¾ðAz*Xâ´qV;-Ô×G;º¡±6ÂFÄ¢ÊK7£s «A‹H¡AtåÜ4+¬^X±Û­í |ÚSgé
+—²¸ÍdµìZ_; gò2› ĺÆeº]]
+õ½´uwðaŠ#Wu|욦 ô#TZ×n2íd( E)Ðá Ñ¥•&äµ¾íˆÜÔt”ßuê¨ÝŠN¥^ý”—•›ÚPëÌÜ¢±ŒQV+¸@ÜÜ/ò¸…wB×¢©pHwlàù`Ñáí <Ê1Wº¢sz3¢I^@ù:B®Ëj³” Å§ÀJ)6÷ ¶m4ÄÝOÆ]DTöLö
+
+ß±:âÍ*}ùz
+På,7´¤
+’)ˆô2˜Â_pô£¯à·¿óÈd”HA¢Á_fp~rÆXP­—ÞÏÜwygæôy™ã³ø@t¢i$ •pemoà6†Î êÖرLÞÎ9çIìÅi_ƒOç2õa»»ã²Þ#°S{Ô2b›7wkÎ"H“Ÿh(ñCéÅüìЯS$é’ý˜„ŽVrþêOW¶¿ë‰‘©ÜÊ{ç•Å«…ß æû{Od%©ÐC›ÿ/Oêendstream
endobj
-1164 0 obj <<
+1204 0 obj <<
/Type /Page
-/Contents 1165 0 R
-/Resources 1163 0 R
+/Contents 1205 0 R
+/Resources 1203 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1145 0 R
+/Parent 1185 0 R
>> endobj
-1166 0 obj <<
-/D [1164 0 R /XYZ 85.0394 794.5015 null]
+1206 0 obj <<
+/D [1204 0 R /XYZ 85.0394 794.5015 null]
>> endobj
326 0 obj <<
-/D [1164 0 R /XYZ 85.0394 204.344 null]
+/D [1204 0 R /XYZ 85.0394 115.6831 null]
>> endobj
-1167 0 obj <<
-/D [1164 0 R /XYZ 85.0394 175.2926 null]
+1207 0 obj <<
+/D [1204 0 R /XYZ 85.0394 85.2644 null]
>> endobj
-1163 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >>
+1203 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1170 0 obj <<
-/Length 2010
+1210 0 obj <<
+/Length 2005
/Filter /FlateDecode
>>
stream
-xÚ¥ÙrÛ8òÝ_¡Gºj…¯§Lâd=µãÙµ=Ož”‹&! ’²ã=þ}»Ñ EJ´WN*Ua£Ñè» ™/|øÇAÈÂD$‹(Q,ðy°ÈÊ3±†½ÏgÜÑ,{¢å˜êçÛ³wŸd´HXŠpq»ñŠ™Ç|q›ßy!ì8øއ߮>]~þýúýy¤¼ÛË߮Η"ð½O—¿ èóõû_}}¾äqÀ½{ÿÛ‹kÚ
-Ÿ/¯>&¡Ï L¯/>]\_\}¸8ÿrûËÙÅí`ËØ^îK4äϳ»/þ"³9ó™Lâ`ñ Ÿñ$‹òL’JÊSœÝœýs`8ÚµGgýÇ}&d(f(ø‚s–˜x0HX(…<ÈxÅ÷}¯xjtK6Þti§K]u´ü¨ÿð}Q™ÎÔaÒ*'à÷6]kôÈ“£€ù Øf"Q‘t»é‰øˆˆ',ŽÚ‚4$ÿ˜•€'èKÕîU“‚{Y]¡në]sÎcõGlâ,P¥¥…|¯ÕÍ£nÜvMß´h{(süRÇ!¥OaÖ›îIãÿ„pbêÂ1CŽ`" éýáþÖ‡é¡ÁT"‘TLÊ(Ä8Ñ^³^p=
-lO¾ÓS\ÇÎ9âŠ>ºÑÙÅ°Ø÷ß
-°Oqä‰ò D‡zÆ1S¡/"!˜Œ…šM»žh9¦:ÖîˆJgà Ù“pL r(iS¦Ï<X„ôÊ]Ñ™m1›;~Ì",ÿOò„,¡:Lž–äì³ÇTk9‰8ÒL#ŽŠxKôO¦Û:7+$]9“ CmxAdÂh‚­%ª·ºéŒn™%…šá1㑯Ԍð™Ï“ÞjÓvºZB4-W’EsE#¯ÝêÌ á¶^dh³ðÈŽõŠ0iž;û[¢ lzÛòGºmÝt-Å÷ºMêtãèMÒ«L0î%Žë öIšËÞLPÉÔqCéqîå©.1“n7õ®È N³Lo‘!÷Ã?wºÅ ãn]A¡BÍx—+BT5}Ñ‚Œ#Ý;*ÿ V{8¢I' =ñ®Õùgçä4Š
-mß!S?¬Î4Óè;{xC›Ð˜ÚÂ&¹&Àéµ­«VÔ/hñàÈ É´]s{»Œ"e‹¢çêˆZ{Q!T¦Ueíĺl —Ò§ª›2uÜÉ@B‚4ÏýÑ.ÛØN&úœÉ2ë¡DØëÊç.WÕ«jš«ÒëÑûì”ÒwW,lçz•B›&ò>Bý)¬
-[; vo9´ÿ± ªGuÀëw¤íè†zi3žM³bטõÚIËJ@¾^\%Czë´É63U 9J©™*P±µ ¿PËæ1-¼Í\•XWÎHža(ù‰v7ƒL¦Ãôp3¼Ó]ö®±ÅÅ QW3’€…Š÷ k¤Ÿx—éîî±G“kgeJºKªWTi2F‘8èçy]¦Ð\ƒÛ°‘:[Ÿv±Ýê*ïÛœõÛÐ ‹´3ŽÎ6ÆõB,·Ý°rÁ…3·Êënv®ˆX'|Æë徂iÀOŠ¯<‰Tx’dñ‚äâßïŠ8Œµ6ⶮÜd ´u6ÙødsÏuU‰¯ ; ŽcmÊ] ÌTèU»òÁÞâ*¢‘
-_3ÿLûܤe bŽ3
-&°×Ó®Ða aŸ <ß'#ÉàX*Bl>BB|9mAwDR›Ó£Å=Œž0ºšú27¹Ó›ºíö½ _½z~"^ÅK“—÷&?Cnuuãz6Ò{Ôáå¡,ßv|"Ùqù Ÿîo>Û¡ìuÛ¦[³ÌCÒ-°<3Û´8Á˧¿Ø¬;,ü-ò͸±Þ«.=%Yšmôre
-ýö ä»r{úщØR—XƒÐ/MæòýY·÷us_Õo=þÚoMþÊCÚí ØªõwžÿaÕ±{/Äé®Û,«oãì{Ëñ\ãõ†Cá²®–ú›éNâ1M(¸öð=µ¿ä¯Ò¯ziÜCøEÁs¿ÕÆ?°ÏüÄé—àÿŽ¿ÿ#Ì+2ŽÅü¥"‚»+&N)4Pý<;üà¬úÿ
+xÚ¥Ùrã6òÝ_¡Gºj…ÁÅkó4™ñÌ:µq²¶óäL¹h’Pá¡”ïfÿ}Ñh€"%jVž”«ÌF£Ñw7±5lF$JyºˆSIBÊÂE^]ÐÅÚÌ}¾`Žf鉖cªïï/Þ}ñ"%iÄ£ÅýjÄ+!4IØâ¾x"ÂÉ¥á@ƒ?Ý|ºþüËíûËX÷×?Ý\.yHƒO×ÿ¼Bèóíû|{¹dIÈ‚ÿxÿóýÕ-NEŽÇ÷×7“âçÓÛ«OW·W7®.¿Üÿpqu?Ø2¶—Q†ü~ñð….
+cö”ˆ4 /f@ KS¾¨.d(H(…ð˜òâîâ_ÃѬ]:ë?F Ÿq ds S .¬Ë—Vu—ˈÒà?`Í‚ ’2*KÆH†ÜR= E©»^Õ˦ö ìGo³¢hqð°mÚ~ÀÃà Ž¾sóß°†‚€Cÿ÷;?…鬪ÏZ½ì¡Ç:«Ôü*6^Õ©¬Í7늦ÊtmÌrjú[t®‹¦w±¨wÕ“j'k–³‘1|Íä»Oœ-ô
+ø˘$‘‡*aÜd>… bÄ!ïú¬W•ª{~T¿RÊkÝkˆ0`²º@à—.[+'IŒrÊâ!á)‹­ ûÔÙ±”$±„|ÝgÜ1+nÊ:…L·TÝ^5ÁY75è¶Þµ—, @ÀöFœÐý‚CÛgÕºé¿YÙy(wü2Ç!ÃO©×›þEÁD81Mé˜ ŒM€fÁEð+ éR‡-@¦œÈT,ŒU$¦ŒC-â\»^ p;*^O¾ÓÛÚ8çˆ+øèNåKL )B’Pʦ¹qd© LˆõL"#š,"&I,£ÙÎâi–#¢cÝ9hb¼ÃLê¤ r½‰ªTÙ+O!‚jWöz[Î&M G.ÿ_æD$á‘<ÌœåìSG×k9 7ÐLà  w‡ô/ºß ºÐ+ ]9“LzZÿ³(&BDñ´©l-Q³Um¯UG†ÊO‹]ç †SBYê­šî±åRx®bDt[•k0Ü‹ˆlª<°CD³BŒmÄÖþiC›Û¶ör‡ñ„¹~“9ýF;z]éu®{‰ãâ2ó(Í¥ndLé4q‡ºc,(2UAÜmš]Y œå¹ÚCFÃßwªƒ ÃlS›*5\¯Q7øÅ­ íH÷Ž*þ¥hRÎP‚'Þuª8àì¼
+|'’
+[;)žìÜ rhÿcAXò€³q¬SÜiÕ8£Zì¥í x¦´úV¯×NZñ¶`2ÒÏ€ÇU áRÊ™*‰µ ¾¦–õsVx›¹2µ®œ‘lxF‘`M´ÛûÃÎðNõù»Ö1‰ºš†$’Ì/0Y#h\÷¨»ÛÇžu¡œ•~p/¨Ya¥‰È0ŠùA?ÇC²op GlÛÙ|fØÁv«ê·9ë·¡A–Y¯Ÿ-lµë…PoÛaMȹ!@sñÜ=Óöb’&)›ñzˆ¹ÏÃppƒGÅï<…CÒ9’ù É'â„ßoŠ¸9ÓÚˆ‡Ðº
+¡³Év0ƒ¯Œl¸®*ài‡ãXëjWf2rw€c<Þp
endobj
-1169 0 obj <<
+1209 0 obj <<
/Type /Page
-/Contents 1170 0 R
-/Resources 1168 0 R
+/Contents 1210 0 R
+/Resources 1208 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1145 0 R
-/Annots [ 1173 0 R 1174 0 R ]
+/Parent 1185 0 R
+/Annots [ 1213 0 R 1214 0 R ]
>> endobj
-1173 0 obj <<
+1213 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [491.4967 730.5319 511.2325 742.5915]
+/Rect [491.4967 622.8956 511.2325 634.9552]
/Subtype /Link
/A << /S /GoTo /D (lwresd) >>
>> endobj
-1174 0 obj <<
+1214 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [55.6967 718.5767 89.457 730.6364]
+/Rect [55.6967 610.9404 89.457 623]
/Subtype /Link
/A << /S /GoTo /D (lwresd) >>
>> endobj
-1171 0 obj <<
-/D [1169 0 R /XYZ 56.6929 794.5015 null]
+1211 0 obj <<
+/D [1209 0 R /XYZ 56.6929 794.5015 null]
>> endobj
330 0 obj <<
-/D [1169 0 R /XYZ 56.6929 769.5949 null]
+/D [1209 0 R /XYZ 56.6929 672.1567 null]
>> endobj
-1172 0 obj <<
-/D [1169 0 R /XYZ 56.6929 749.3309 null]
+1212 0 obj <<
+/D [1209 0 R /XYZ 56.6929 641.6925 null]
>> endobj
334 0 obj <<
-/D [1169 0 R /XYZ 56.6929 523.534 null]
+/D [1209 0 R /XYZ 56.6929 415.9107 null]
>> endobj
-1175 0 obj <<
-/D [1169 0 R /XYZ 56.6929 498.8411 null]
+1215 0 obj <<
+/D [1209 0 R /XYZ 56.6929 391.2207 null]
>> endobj
338 0 obj <<
-/D [1169 0 R /XYZ 56.6929 441.2232 null]
+/D [1209 0 R /XYZ 56.6929 333.6097 null]
>> endobj
-1176 0 obj <<
-/D [1169 0 R /XYZ 56.6929 410.756 null]
+1216 0 obj <<
+/D [1209 0 R /XYZ 56.6929 303.1455 null]
>> endobj
342 0 obj <<
-/D [1169 0 R /XYZ 56.6929 377.2039 null]
+/D [1209 0 R /XYZ 56.6929 269.6003 null]
>> endobj
-1177 0 obj <<
-/D [1169 0 R /XYZ 56.6929 349.6417 null]
+1217 0 obj <<
+/D [1209 0 R /XYZ 56.6929 242.0411 null]
>> endobj
-1168 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >>
+1208 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F21 690 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1180 0 obj <<
-/Length 1176
+1220 0 obj <<
+/Length 1122
/Filter /FlateDecode
>>
stream
-xÚÕX]s£6}÷¯à1îŒT@|NŸ²©“f§›m]÷)Íx0ȱ&±Øq7ûß+,Àààgg:HBçÞstuuG†¦ËŸ¡y6Ô‘oi®oA[7l-ŒGºö(ÇnFFù ¨>ͯ>ÌF?^#Wó¡ï˜Ž6[6°<¨{ž¡Í¢û‹«_.›M¦c`Úú…ÇÀvô‹·w?«_=®>ß]ßÞü9½»ÖÅìöóêžN®'ÓÉÝÕd Ï6ä|³D82áúö׉z»™^~út9?Ì>Ž&³šK“¯¡£‚È—Ñýƒ®E’öÇ‘‘ïÙÚF6thø¾©Å#ËFжªzèèÑï5`ct7µK?yÐöL·K@¿! ¡{з|Wsm:ÈD;ïÇÀÑõ‹%ÎÂx¤9Ví-sÆç ûIµ
-ªÒ0 èÛ¶ÙšKs±³ À Vy±M2hH
-`)×jiÚš€N¥4á
-KU™pÏO%¬ÖÊ ¬q«§JÄ ?;¤3¤“Á´C* ´ÕAÆñ‘ ëÁ(~>¤óF›ú¿Û…õÎ’ëÔ|™3ñ#'Ùvøž­ØªÓì;r|ý¾6;tdAIò8\¥€R¶̓»Ì@ÅÞÃBÌã@hsJª¼ö­7è—ó7aG0Aur×URÌ÷C~£Ûjd<HIJÊDgóù Â:?îù•ÈSYÑœ{í((èz{¿DV{÷I< O™Œª,L¥¦KéÅêÔ¿v€Ø&Ù
- "ÎÆnAe=±bŸo‘×LÞk äQ
-ŠÓ¿ílÑ3t…¢s>Äâk¼íû=P«ni•hg¦6+ɼ»åa•ÚËyøê¨Û¿‘ÔjÔqe½çú™®-a¡k!{‡úC«l Ô¥0"×´:ÝÙSlo0¯jMm×2JÛÖ1ÛÖÞvS·—ÒÓ†¶é£îhU¢öR¹Ðò,k€ÍjÏ°|h!ß9£ \xU€÷v­:uÜvGóZ3ß…¦£›VPyäÙÉVçš}±ŽDÙ+zœÿAô ÝN}£Ç8¼‡ÙEPá̉×1íùÍàõ[×M+²aq=Úq/ª×Äß| »¿¢¶dâó<³¾`5Qã‚éôLß­œ*hZèÐóúºöµëÿ
+xÚ½X]s£6}÷¯à1îŒ(ŸfŸ²©“f§›m]ïSšñÈ ‚&±’pìî
+ÞOÁÌ0.R”ræ‡Ę 5žC‘¬2˜¢wêù¡¤,禩®kµ1r´d(,ÇÙc{³mÿj×ÿ¦5¸C|EÙ*£=
+ž€R~^2çI!"úœ J   F™àÃY$”‹W…À
+‹CË6| v92‡Ó+¸Œóä”’áÆen ùx3°†ÈôŒs”Á5‘/•ùAÑWÁS„Ò'ÈqT9Ñ®\‚2”a&”µßö§—–
+ª-ºI¯3àWÈ*wŸøÓðò(dT‰0—šÆÒ‹dlâof€ï2‘ ŽùÙØ­‰ì'JÐùyCeã½q@å Üý»Î–#CWX!ηX~¡}
+¼Ú©ÒwÇ>ö¼9qûÑõ
endobj
-1179 0 obj <<
+1219 0 obj <<
/Type /Page
-/Contents 1180 0 R
-/Resources 1178 0 R
+/Contents 1220 0 R
+/Resources 1218 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1182 0 R
+/Parent 1222 0 R
>> endobj
-1181 0 obj <<
-/D [1179 0 R /XYZ 85.0394 794.5015 null]
+1221 0 obj <<
+/D [1219 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1178 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R >>
+1218 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1185 0 obj <<
-/Length 1117
+1225 0 obj <<
+/Length 1126
/Filter /FlateDecode
>>
stream
-xÚµX]sâ6}çWø:#Õ’¿gŸØ”¤Ùé’.¥O4ÃhmÔË+‰ì²Ýþ÷Ê6 l3I&[ò=:÷è^éJÈ0õ/2º /°¡c"ÇW=ÓxÑ}=´ý”ïÞO{?ß[žÀÀÅ®1]`ùÐô}dL£Yß…4‚Ù¿{ß?>ü9<»?}|
- ØŠj ›!øZ]Ç@g1XßJ#‡hD£‚¡Â„1£‰’-4\ É^isûÊÈ’
-FbO*DÑîöŒ¶%Ÿ¹3©h’¬ÛŽ½S}ÁÅŠl5ÿËtÌâ‰'è¾RQ¼ÿ(ç+ÙlÛåεNæ1‚p+Ow¶‚cg›j_ÙU%É×"¤{•XjÏIíÔÉ @ {ŽF‚žmÙ9ÐOy—ÏsƒöL·Âx–­Å#KçÙËsñVá—-§ÐÒF%Úò¯î!U÷”jàA¬W©-Uç U§UlZz¥ô‚ZII¬@+YÐÞ„k
-lÔÏï.͇NŠý·m¡ªU«T.¢²6Û¢å-§“<»Ø{œšû =ïKLôqA©.§–$$ᲡñÉrжª={zòYÄÔ¦6gÕŠ%@pÞú ‘mÌÙbÖuåNeQ-FkAõAªæÖG¥e–Ä¡
+xÚ½X]s£6}÷¯àÑîŒTôhö)›:ivºÙÖuŸÜŒ‡9¡ÅÈ+äìºíþ÷°‰ ¸ÙÉCdI÷pîÑÕÕ•e›?d1:sËå21+XlëÑŒÝP1ì&ꬷÓÁ7ĵ8äv¬é¢‚åAÛó5 gCb82öðúÃýÍÝí“«‘K‡Ó»÷#€™=¼¹ûeœ·n'Wïß_MF
+? •HÓc2tž ÕØRÒîlr”CJ¸ÓH£Ÿ ô%
+´Y²ãÍIj¨JíÓZ¨ HåZ<;‡,«|c͸ ±cãšåŒ<‰ùõ?Šõ]£Ç9=–îü}AÚFOM¡u*À6‚22`%eœ÷oD:—jžÈ–݈Q·Y«<Y/?
+Õ N@D‰êÙÏ£Ôˆ,ý/@+?IB-…ºB®uGgjQ_Jc ÑŠF C+Ä‘H:¯†ÁZ¥Ñ³ho_ûr*TäÇy\åkÑß>]ÉgnÇQªE’¬»~{¯úBª¥´me"€™ðYì“G±^ɦè/³ êð¹t#wòtoÛ#8ö¶+ãk’öU)?wJ•f—C‚]ÖZä®ë4gÖY™‹dùИÞŽ"t‚gí|<q’†\¥ÊúQÅ61µ™Ë›ÏªXƒN²VÐ^…+‡1Ö–ëYi1F¹¶ó:Q€± õpcd‡Ü‹òv9驣ń"ö7»TÈ$L(DhµmÓ—c—m—@B9o¬Æòü¦)wà+"âb»§äÔÒpõÖ³õšøq*AŽ”wü»gUºzŽí¬‡ „°VÁ}mY\D_
+Äò¤Ñ?¢Geñ—Y×Ä°¥yÖš§+´@¤©©-OÉ]ó ôµßѾöýEîÆ©öƒ¿/aÄÂO¢ä±oú$|¥?
+_÷Øš-ü@t
endobj
-1184 0 obj <<
+1224 0 obj <<
/Type /Page
-/Contents 1185 0 R
-/Resources 1183 0 R
+/Contents 1225 0 R
+/Resources 1223 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1182 0 R
+/Parent 1222 0 R
>> endobj
-1186 0 obj <<
-/D [1184 0 R /XYZ 56.6929 794.5015 null]
+1226 0 obj <<
+/D [1224 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1183 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R >>
+1223 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1189 0 obj <<
-/Length 3019
-/Filter /FlateDecode
->>
-stream
-xÚ­Z_“Û6ßOá·zç"…DIœ<¥é&ÝöšÞ%Û¹¹I;9Y¦mMdÉ‘äìnïúÝ HYòÊÞmîfA ‚À ½|ÆàÏR2©£Y¢£P1®fùö‚ÍÖðíÍw2
-†RßÞ\<-“™u,âÙÍj0W²4å³›å‡ù«ï_þíæêÝe ›Çáe b6ÿöúíwÄÑôxõóÛ××o~y÷ò2‰æ7×?¿%ö»«×Wï®Þ¾ºº xª8Œn†^_ÿõŠ¨7ï^þôÓËw—¿ÝüpquÓ¯e¸^Î$.äóŇßØl Ëþá‚…R§jv /,äZ‹Ùö"R2T‘”žS^¼¿ø{?áà«:å?%ÓP¥"™r 8³4Ô‘Nf‰Òa,…´üpČ͛ºî‚¥)Í:늺
-ꪼ§/NÀÜåå~ièåßô¨²­)‹¶£·?èñ=^ø7pØpj¥ÄPçç½iîËzMo÷¦ýX7«úÉã—E›-JdåºnŠn³m¿ÞfE5²´y1ZÔ1ÛÙþÇ´r>TžåY¾1©Ð„¯]›$/MVÕ:(ªÎ4_²Ò¹w¿]˜æ Ól³»ÀMÕ¿;kúØîL~Κђò²0U×;Óvo†f<yMhÌÿk¦ܱ*`‹Wu³Í\œýÊëÌ]÷Ÿ&»š?y}f»ëîƒ<ìÀ
-üÃŒÄGê㟲éwÓÔAUm]W~mMØX||²@ÈP#NŽ ÙŸ¿|Ö«Z¡bÅ
-·™Îv;“5NÅz¢rC;£šÍÇ» *ãxžá#™C* o×û&#ïâ7ä”숕ž_¯ˆÙm ãx:74C6Å„cã4Lµæ{6ÁpHŽ=û æÖ
-v™tõND…‹²Î?y °O‚•x$K4l }FÇ#£èZ´,S¥Ó±o–f•íKt·EYe· ž¸]áƒv…LA'EI˜H&¦Û#' ¥lu¹Í·½”5ªhLÞÕ€¿Gš¹P¾JžWÝKMèî—™I•cÞR¨ùmÝ|‚êF/`’€P>GË,·^ѳócJCû…-ÄýËʉVÐd‹¶.÷“ÝeÝQ7YD¥Ã¹Æ)0)NÝŽrð‹ÇJ{(#J9A
-fŸLE¬¬¥'­¥„y¿âØe9Òf!R‡EãŠ9çvUš;¡„TQê-…OPûˆØÖmG”¯a(\ï»ÝÞñiQ­QÌ„ëRgÔ
-•tÞ2löÕD–A
-·tYFõVÀ¶X€Iü"‘š\¤L…EȦäF“UuGö-®Æ,!ŸEÊh7ñSM“sA€ØëÌ–9Aö_Ž± ¡y §
-øÐen¾M½/—ôqáÆYT„o}MÔtL§“P%U"ÏCÕPê4TõR¨õ“¹NÃU» Xt^}/5¡WØH0žŽ øÇÆ&7gsèZ±ß$Èbz¾¼‡)rú¸ß-3 <@[ÔÖäû¾¾qêÃÚg„F´½œ=Ø2`ÝÊ"LÓ‹îö‹ÒëÃn…BŽáU]S|!s„Fq€‘Â
-e¬žÛ}Ûëi曹¾àÛùÐå‹(}$tRgB×KõðÜ¡çŽãzâœÕÝK=T o@x$BÁδS¯'ezh_¤k±‡þ1™B6­C‘ÀbÚ®;AÐSP‡‰,[QáI+ø-%†íài7luï˜vŸAÈ×å±l7ÙN È]è@=ÎŽ]zdw
-«?îÑÉᘠÃêDJÀt0ƒx¤ñJN‰^ÊVB„óuÛf»"ÈXuÕp¬9N›D˜á…&̺fa"€5²Ãb|"ˆ¶þÅ·œ
-OD¨âÔï¡ßû˃uAsã+tXÝ„Ã!
-A € %Ø‹ç©ŸñÚñ¶hs—L¢0ч¶‘íÒ» W›2>|eÐIKzw!5í$@/ɄφÊ*Þ
-<_¢‰;Âx¸RŽuPÆýPëµÑvêÁSÂ
-´–ãÔ8ayÊH–6ýbèÄ™šAÇQú„î = NL^K·¤VEp FøÜEPÖ'𥬳¥ãø)üõš`:Èô7iÈu®ª¿¶¥‚+¡Ç×"Wþº 㹨†Gü-¨¿¯VìÄ9&šFHLÇBâÑd`Øà€ïqtN½ä1ŽkÓÏs„§þyÖˆÿq2ö¬ÿAöþÇ–Ãýà5Kšž8ÕKü­ bÓ…îŽÔ±åýÀ<4ý¿‚BÄendstream
+1229 0 obj <<
+/Length 2511
+/Filter /FlateDecode
+>>
+stream
+xÚ­YQsÛ8~ϯðÛ93•*Š¢$NŸ²Ý´—ÝÛô.õÎÍMÛéÉmk*K®D%uo÷¿@P²äÈi’»äA |
+PU¢ ÏN=Z$-TRæåÚÉK­êÛ¤xƹ'ÏJ˜Ñ–Ò"W¥nœªs6C3ž–¼ÿ§•pÇ*‡#^U5¤ó!÷´ú¦ÿ¨“;LªGïOmwzï4àáΈ'¡MO«R'©~öüïU©š§‡ ›
+üÊÄGêiHû]Õ•SVNS%ŽÖÅsãøh™Ç–Çç®Äb=Ú$d ¾|ã³Y¯j…Šér&c#„  ¡{ð`µj‡˜ÕPð^'Zm!üèõgõÑóüÒT8â@…"â÷&Y+«‹ª5¨ò…+9£=.6ª7hPÒ¡¢K‚0ÊtÜ_Œ‡Pð¹°rÍÀ8ÎçÒ Q펞ë¢Zbþ#}ؼè
+ŸÁ|©ì„FeD-÷ôÄÞË%r±Éí´#…ÛÄ
+cULj«Ç`=Q©¢“ÍfãÓFPåa8OðÍ!зë¶NÈ»8†œB¡ó«1õ2ŽÅsEÑ8dCPL86ŒÝXJöcÏF@zѱg_ÀÚRÀ)“®Þ‰¨pYTé"ïrì˜PBA°d‰†£¡at<2rÝØ õB7‡#ßdj•´… º»¼(ˆ2ÇO<.÷^Ï깞€vš¾ -&›îÑ­3”2-æÈm]ÿÛK£òZ¥ºü=ÒÌ0À¥à«î¥&tO‚qÏ•QŽ•cÞ8Üó»ªþÕ^À$
+Oúº‡c11LoOs`«½ešs¡®.eõd;íCîBÚáìØ¥Gv;€¼nÈ|ÿ·a×u²ÅÂ=Õ ’¸ÿ*Ï%V“açiÞµKêDO6øAäBãÎc‘\!…´¢CH‹)oð,•ÊTö
+MðM?i¸«¶Léû[®÷à ¯mN-%ž¶6[b#Êð–r¿–S2 [¨)Á°Í'>nö)1”:½”©„çë¦Iv¹“Ö°ëRçp­9N˜?0£š0cêÒs#X#; æÀA´ñ/¾¥@Y†GCQqFRæSq6´ET¤ñÃ+®’Fì¼!Š”|mUœŽ |
+ÍÄÑ…×\à˜Xæ¼}ÿÞY¼¿zKlNºJ«ïwRÎ_¸°“í%˜¿ªzI ^54&è1°•.ÃÌFŽÝ&yAß$MwäƒMòØeßr{Ç6êÊ‘ˆÎu^¦ùÎ\oAÀºGHK {7#3í1>ýÚæ]¡D)½¡uÛõñüÑ-¬Ùƒã·4`j#2©6¾ —?+ÅþÇ-òK¥Ó—_ê¥pa%,§àâ.`AßJ:¡ͯ; aw#
+ˆR¶cö%3gdSPùºuâwO.\ü±r"μþ3êÿü›èáclŽâØŸYŽ_È|uF¡_qlyÿãé}Óÿ !:ؼendstream
endobj
-1188 0 obj <<
+1228 0 obj <<
/Type /Page
-/Contents 1189 0 R
-/Resources 1187 0 R
+/Contents 1229 0 R
+/Resources 1227 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1182 0 R
+/Parent 1222 0 R
>> endobj
-1190 0 obj <<
-/D [1188 0 R /XYZ 85.0394 794.5015 null]
+1230 0 obj <<
+/D [1228 0 R /XYZ 85.0394 794.5015 null]
>> endobj
346 0 obj <<
-/D [1188 0 R /XYZ 85.0394 550.434 null]
+/D [1228 0 R /XYZ 85.0394 443.9876 null]
>> endobj
-1191 0 obj <<
-/D [1188 0 R /XYZ 85.0394 518.6098 null]
+1231 0 obj <<
+/D [1228 0 R /XYZ 85.0394 412.8839 null]
>> endobj
-1187 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F21 658 0 R /F23 682 0 R /F47 879 0 R /F48 885 0 R >>
+1227 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R /F48 925 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1194 0 obj <<
-/Length 3480
-/Filter /FlateDecode
->>
-stream
-xÚ½Z_sÛ6÷§ðôå䙊!
-Vˆgo>ܾ}÷×O¯¯L2[¼ûp{5—i<{ûî§êýðéõû÷¯?]Í…MÅìÍ__\Ü|¢)Ík|ÿîöšF2jN,úéæíͧ›Û77W¿.~¼¸Yôg Ï+b…ùzñó¯ñeÇþñ"ŽTfÓË'xˆ#‘eòrs‘¤*J¥üÈúâóÅßûƒY÷ê”ü’ÔF©L4HRFV1-e!€È$"Ò*Iz)K1%eO…R^嫇rþKËu9>r–ErðÂÔæžhbsl.â$’&QÃÝUKr÷í]³£NW¶]UßÓCS¯Ÿ¯„3¸M%âÙuCãuÓQgß–ÑѱXàO¤­H^]@uFvž
-¹/ö›í щXD©H^ؼ§šØ}(<%Y:Ú~ñP‚4”žmóî¡Î7üÔÜQÛùiæúfÖ]‰Ù÷Ûr÷XîˆÒŽÞ+ò._æ-?u µOeM½ªn»Ý•íW]Y ‰Š†·ð/UÝŠh$Õ¹L"›é$!¢,M¥;×®.Vt«ÈU±äChÉTK"¾ÀJñîn¤í¶\Uxú²ø–•
-ÏæV.ïòýºëuÏm¡²Pæ*´È ïò-Æ·¬b¤âRƒ ý¯ £ÌZ;íæýŠópIò˜!wJÀ2I–vö
-M
- ŒÎ&Jô;a*ZÃjFÉó¦R6•ž
-wÜ”›¶Ë»
-lzÕž²¥#•ªä<=Õ›#+•˜!Îf¤›Á'´l;?ím&½ÁààÓ®E}8\³{¦þ¾Íïù½Ãy†7«©-¯:PÝ$¤º–T¤²žØÃÀ0þœ>Ç
-l- Õ9â[i'Æ*p4…Ri .¥/èË茺0n·­Š:b³ŒGÝ×Óï¸ՙì»ð®1ô¨–=ªñžÑÕîÔôÚU×ò¢»+‹­Ê–Þ]3E ÅH§8á<˜[spãJLJíúLJÉOÀ—(›y£Eš•Hé4CÕzÌw¯vûúéÈB%0Zia³Àëʘ-*U᥹gŠè †æ‚F–ÏLI‚¸ßå¦éòŽæžòš{Î\ m˺ ª¶º¯óu;œfHf.Õ5bwОÝÁA½Í÷÷èNò…}÷Ì ŒÔT€0µ}‰Çê«›ºœŠSÀBœú—ŠªÍ—kòÆ»ƒÂŽf/df95Q?°nô‹”ÆoIo…³OÕzM½¥MìÊš® –‘´ÿBˆ;¯á‚Tœ gbð…Ox4è(^‡–%µî"Áû=‚Ò€˜Ý6Ϲ;=¤ŒctÇÊ;¢iÁÉ¢šðD¨J¸dNÍoåóSã¶vV!¼Áx
-Å2Á»vÖÜÍ€Ô‰é;Z™%@"i!"(Ge½Z7¬Ïàgkv¾Í~¹fGüuhOúË4£8ê¼Ã ©N{̞ʦrµßµpg§‚«0QƒC?ËAO5ÁÂÀHŽ5évi\áÉ©5´
-Œ:‰Ó©,Kibb
-&I”¦YîuJH_"‹o!J&ùØ0u€(ZÐÅDG§‡¨ô?€ã•1’¢óÅMx7Õ ú_Zš <sT±'è°sA…×K@ƒCS#g
-jϧ;W<¹ ‘ÃpºdëÍ{çCýªÙlöuµÊ»2ˆõCû¿_7Ëœ—ÑŸÖp
-M6êb/R  †^§ ÐÇd(žÀˆ ç;冞ž*wXAé5‘×É z
-/’£gÊå+Ú¾bF|›{p[”¨Š‡[|ÝW;ra£}&ŽÌ6làbóŠ{™$¤ d™&ˆÌÐÀÛÃÙ%&!ž´üý!ß·Ë^•á:œñ®Á!mã³ =øF {Ì×{Þiè¨Ä@˜°©¯ÅÀý¼"»:6J_4àÛ#i”%I:TYì2£{•Iæ¥=
-%Dˆî[q:Š—{»žóŸO~DÁ´ ãÔ]ÚÈ*é9;ò;£c˜ ˆOeú»uùo.…ƒnéÂÑàz.ö¤Ž¬Çd²´ghUWyÇ»jj¼¥û=i ®›œ˜o‡xâʳ»n¿eo^m|¨‹!–;åRAá?Fñûe ²/k^œˆpÓÓù?¤s`¡
-¦!Õé ÐS9˜³+ïÊÝ®,æ÷¨‰GQ@",Tç÷ï©&F¥Jë!TÖc“ɼAZ5[W-eÓ@Ö=oKꡆ¿& `è5üÇÊlU_Õ’\ÕR³rƒU­Âj9n0uOV ƒ®Vcå—¼(ØŸ‚Û2eFÐÕÈkWâgŸ
-8%vÈÅ5q©cL‰—ƒ£§×n2`Ø͹Œ­Ó XB¤|ziE,¡J¦bö¼§wØ:l|c»žÂ,XéH29ü3ç8£·¤þ¬F9W2eXùAè¬æCoM}r¸iÚqÍvå€ÏCûôs»]W¸Ø)%‹!EñckHuFÉ<•“JÝB„›¯›æ·¼­Š‰óÆ™=ÏAO5ÁÂ@ÅT<1äáŸX5Ö2
-§‘ÚWvø“×}r.qy:."ÅüŸØз.ã‹+åÄ,Ä`.Ü¥-Lu%í 1x‹âõC“œÈÄÜ'ÝÄ›p¢ ”۲úð§u£†þá 4^è¿Ÿ¸ä%õÉK°cÅÙ5 ÒªÔç{å¬Cqëò®£!^Ã}Q¤Î¾¦j;âTÞ±OCD’D±´£ìËÓÏózõ@25ý—RÍ_J —ýýM®VÓö®.ÈŒ/$ðèÙ5E_*Ì©-Q¶%Ïî·áÖŒŒ‰*V¦Šµb•×§~ù¨Ò®8aûð?ëÄŸþUäá'£‰”µ'~Ý#A9 ‹0Sx‰>öœˆ1µœ`ýÛŠŒlendstream
+1234 0 obj <<
+/Length 3618
+/Filter /FlateDecode
+>>
+stream
+xÚ½Z_sÛ¸÷§Ðô¥ô4¢ €$€¹§\ìä|½8i¬t¦sw”H[œH¤"’vÒN¿{w±
+9Ó¡Ny:[<ôÆRa¤›-ò_ƒ4äá%Œo>ܽ½}÷ùÓëK‹Ûw—sžDÁÛÛ_n¨ôîÓë÷ï_ºœ3•°àÍO¯?.n>QSjÇøñöîšj4=N úéæíͧ›»77—¿/~¾¸Yøµô×Ë" ùzñëïÑ,‡eÿ|…B«dö /QÈ´æ³íEœˆ0‰…p5›‹û‹¿ù{­¦ë¤üXr‘ò rÑ ba¢u2“‰SM(Àv]Àšâ4¨²­-ÕôôMÍ:Û_29½)¾Sá¹Ül°$}) –
+åêmÌz¬™äa’* F¦«MYTíå<¢ Ù«ò¡Ä±ñu—í[`0wÆe¨³ýÿ2ÁB…±¿…Îóz›•ÕÄXiÊDÄ–¶^D:ø
+{ÌæBÆ¡Ô„ÊX¨“„¤%„“–ÒH k|S_ZH`¤… $#,MË(…=Ž LóÚg¬€„².¾Q!/˶™’OC6÷´€t(”ü%”¤:¸­hòÛºiie«¬)šWPN¤Y> Ôç9qÆ †ˆ‘N0çaš0·’f]wÔ;¥QlðTV1¡¢)öOÅþrÆùç†ªìš 2€éq­ƒzOUYEdµÛnz­êj^|+›Ö¨%6Ýò0”6å—‚ÃMÏ.ˆÜÐoœÇc_ dȤJg’‹P¦©úoœ%WjÚÌÝ€óþˆÇf®¡w*ã_·ß—Œ1ØÌcÍà°GŠ;Õ8»9à:¤L”%Åe£ý°(¸} ×ø½î¨`€^º¦¬­¾¿Ÿ/îoß½¢×v]6TzÊöe¶ÜØÛµ KK[“¿E¯Š<<òº,”Œ¥³T‹P ˜ö’D4ïS‘ôØD”ñTkY£ G¬Y¤`XùoO5Á|`ÅL
+N
+,f¡Šó;a*I
+ÙÄšó¦Ò§:m*ž
+9n‹mÓf-À¿rÕœ²‘†1ñÙYxª‰i l–,D,‡ó°!+êÙ ¾™|L9ý€‚³™^%ë…9ˆ û²5áÊ°8Œ¦Ü5Ù£íwX°§¶Ì*znAu㈑ê*R]ÔŠ„cÚÓçH€­é¾:‡vW¦²0Iõ,ì”Â
+³@É2`ƒñcfÌÁ¾‹4:°óûŽ/“ûG˜•jgúW¤_1ÇK³¡ç…üàjßUW¤°“i0¿èÏÐ÷òÈÚU"úûfÞ)®Ç5CAÍHI‚xÜg[KÓ®³–Úž³Ê–ŒÑÀ³) (ª¦|¬²M3l¶†& U"B‡nºKr–ï÷ š"¬äÞ–|·ae¦R»„ÁbîX5™nâÄuÊËqC]¬s1iìÙTdôøˆú…>#È
+¥cI½ú­ö¤JKWšØ•¸Ê­l$ ¹JF0Y…‡)Q˜lÝ@0|Ã¥AA¸3¨Zô$ø¼­Ÿ0qœÇ’wukÛÌž ’Gd¹xèFû1-8ž„’3G„ª„Cfô
+a_¾¼FÒ?I½Víæ;UÙ4$DUÍ’GŒèðn°å#ˆkBní¶Û‚Lû<qY‰sœ:wyÀ¶~«¦98>ý¿ÀÛðÜœ ¢¦©P/‚`“—T»GuFµ•?/ÂG<ÙI”<?O51‡á9dZ
+pFJLÑù"ËMŒX°­ç 쌦|pY wÂÆÓ(ŒÄÈ@¬Øf֦ꇑÅ\Ùá,#/šÕ¾\öÅHe9ÀÎ~fBjLVLúOûÇ>õ”×ÓÏûŽ•÷x\œÿ=,¸¬+w‡‚ÍH%Y‹t0£##òT/Íãh´³¾CÄ*Ô
+‡ÏݾÜfûrc««¢ÈݨFã°
+›¸/NeåCâð†5Ö§£æ<δL²‘DwînP<'ÕŒ¥<Œ8AÍúT§ÕÌS›¯ë,~S<;››ËÙ±²%øÁçgá©&¦1P¶òÆÓá<—ˆö˜Ú[¡ðh‰•U†U±¥¤êMÌU¸ É›ÊÒ²øåº!rq[ï¨zS<ÛÝ|ºÓØ詬¯À¬ÜŽaÊÄHŸLŒƒÈÌéÔ®¯nÅ·Õ¦Ëí~£Í„>BdH9]øÑ9+C9çEk8ú>ÈëÙA
endobj
-1193 0 obj <<
+1233 0 obj <<
/Type /Page
-/Contents 1194 0 R
-/Resources 1192 0 R
+/Contents 1234 0 R
+/Resources 1232 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1182 0 R
-/Annots [ 1196 0 R ]
+/Parent 1222 0 R
+/Annots [ 1236 0 R ]
>> endobj
-1196 0 obj <<
+1236 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [222.5592 483.1171 296.2125 492.5267]
+/Rect [222.5592 378.1793 286.2499 387.5889]
/Subtype /Link
/A << /S /GoTo /D (statsfile) >>
>> endobj
-1195 0 obj <<
-/D [1193 0 R /XYZ 56.6929 794.5015 null]
+1235 0 obj <<
+/D [1233 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1192 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >>
+1232 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1200 0 obj <<
-/Length 3419
-/Filter /FlateDecode
->>
-stream
-xÚÍZÝsã6Ï_á·*3+UüHÍ=¥m¶—^7{ͦw×iû Ør¬[[r-;iî¯?€
-”ª§@­Ó‰I²(UÐ…
-|Ê—å,ß—¡ŠM°]8" >/—Bˆ
-<PL(D”%‰t»tâ¹yÜñß5ŖȲ¡ç¬(VÅŒhŸ<t»¹´Á®Ù³èàØã(NÀ"0‘±pˆ£fÎLaŸ‹NIŒ™¹çBùgUÓÓpˇEônSìK!¬ó;8)FË5"ÇÀZ2erOŽëbZÎáL¤4Á¢,6¹;) 5>/Êé‚H”–(§BxÂyQOÎSTõ‡Û™;\z'#y¬Ü¡À{^1áík†Gî4 ;<y°\èûò­¶}G©°ô/ ºcn´¤@KÄó%ó¯
-8&|½Yå,3YѬӲ®HŸL@Ç©ò%ÈÍ×ë¥;n°Ò _.ëç²zÄ7Ìñ€±¹¬úé½Ïù94>øN§.t¬ÐhÜ;÷¾Íí—8–¨kdœÕ«¼¬ˆ&óB6?Í®š,@ÎZé{Ö>&lœ3‡u‡*LI[¾çƒÉlšx3b]ÖõǼ)gÅÈœ€
-©WÔÃéPÖ šºtß_êÏÑÆxÙ5°p"PÓ ëR'£c;ĺz9kó"šz¾}æéÞP­…5 ªb?‰è2mÛ1¢5Ì߬U¯0WË<Gs‘$±
-±7¬«°øv´ïèiY™d§eh¹F„î7ŽlläPŠû…ÏÙjtD?ç®QÀû(¹«+
-,± u×DUþ°dž.ŠéG2xsÍm±ª7/Ä ûÑ/γ£Àø¤Ìn!gS)ž
-9t9.I §©Ù­Ù |ŠÚߥ;H0X ½.6 Öjœ¼9n(djÌ{èq°ÏåâX±j¶
-€ŒTªÔ>”a…Ž´N|®¸«–EÃfóE¸"bXJ}1¬‡ XßÞ;««W«ÖJ—eU ½Î—È™7ÅG·A R:– dµym`ÿJÞ“6ßç:nó-—ÃÀ2_îÖÆêÎ ÕÉu[®‘…‡á1‹,Öüƒ•Õ3H½>j`äq[d|žqÜ殑l#ß6Ô—S¡“ÿ©«Â·5Ô„I¾û¦s¡yV;Hõƒ™wUÁœk#ÌA(¬7~jjF]c¤™ÎвªœÐdCàC U’ %~ÄDÉJo‚Ø:Åä W1$ið@+î[êðã^è "Α}`Jc 1z,+ðyWõ
-æ™nÆ ^b%!zÈFÚu-/k¦œ*û¯«)¬±á{™>vã0ußBDVÑ4=p•ütĊ¢â9]«åýPFÕ@béÜ_¸ÌjÎ7ôZ»‘*|ZvPp¡#´n¿(òÍöÌ3ô3!¯Šl¢½o0RÉ`Q¯‹ùŽ^xí6ò¥‡6ˆ‰)ìÓwÈ,YvXK8ÅàK³[¯9–7…Ï·3 ù¶Ùé¦^ù(?ßR_”#Í.âRÊÞaÐ-TÏ P1çåîúÊçåÇÐU¦*2ÆžOËE['¡4 ÔQ
-á‹¡—’°±Òp+ÕÖ*÷Ö(fuæi›õd–óhD„¥S14¹žÃ€ .Ð0€ˆ)£NÛhýTÏ#’È$‚´2éÙÈ覬j3sw@#AúžÆÞ>11(Vào®dq+«Š >EÜÈ–žõaAÈŠ‡0¥S¼ïÛѦœäËú¡u¾è?C1¯8•Úáyðé‹ÏJIúÖ‡"
-¼Ùé5ðçFyAzà{TÃ\LúéÂvS¡”À‰÷,ã—Ë$˜GJ(L´6ƒJÞU@õÌ%m:9­i E†¢%áF™®Òúçˆ)
-Ë·õ¶½cér”.÷éW†û9{ÿ^„¾îÀŒ¸ýá䈄 Šà³7…”Ô]"ý÷-MÀÄ™/ŒZž»È?a‰¥ÆAº&”Dš™S˶<ë ùžè¯{ƒå;$>þSX,62Ý~¯’t7ØÐK̨£)W»%ÿ_$ý-$rÕM½,ÜYC3}bmÏqÐ8ØxóÃ×w—¼þä¿ËíË“Ù±O‘œ)Õûêˆ'ga赟)wßpkpk|Sªâ4²ôÏB¡jµ9@ÿ=ó¡èÿbÃL¹endstream
+1240 0 obj <<
+/Length 3599
+/Filter /FlateDecode
+>>
+stream
+xÚÍZ_sã¶÷§Ð[ä™# € NŸ.w¾ôÒœ/½s›f’<Ðm±'‘ŠHÙq?}w± ˆ¤(ù®ig2~Ð\
+— [|\U‹‘(-QN…ŠÉ½)x‰ºq¸“ù¬¼‘Ü×îR{Þ¾–xå1ù±‰³2ƒå:
+8%<+ÒX‘î«Ó§ÐÂŒ1ÊcЯsMRUßãS2¿s0 ÃUÝ¿HÇèµ€|ÎÏaðÖ¿têr‰$¦óçþù(aDÆÀ€&óB6¿Ì¾^–,@1§Æ˜°sÎ!Ô«0År)¨Î5‘{ÊØšTQÊ’Š,å ìý qÑUe<±ä÷w ^›$±”\¡aQ…0\ŸP›5ͺtY ,ö~‹Ùž‚ªTè8‘*=U}®ÓP¸œyì»UTÿÆ75†(Pkf@g·\ûÌ<ÍãL[;`Òe€1I¿Ìá%Ùga}²0ÎZ!Ô™OB_¾œZ
+H#=Ë­Ç!i[CŒcÚ…#ܬáíúŸ¯ß¿{ùöºôÚ-ÜjÙ²€åƒO }¼ç؉‰öî¡Ü…Ý8Ó‘±Êl6ôhBa›£îÁ£Ÿø n˨K ©¥3Ìây'¾_–wTmø`y‡‘Ö% r5ÀçcÕŸ½¶]D†MüoA?‹UQß—´ååüzà  ¬Ô¸¤ŸŸš=¯" <ì[[¸¨é‰õ“ƒåia‡HѬ—!{àj¯¹ëy¹4D»`MXp•X—ãTâotáÅ„Ö°UcC…zÎ\-óœÌHt
+˜#õ3}‹>×i7\îJ„þD਩£ò·ª;.+¡ŒWi~^†À5!Äð¼®Á¡†Rܬ|æÖl¹ ÀÚÛ©„;ö7Pñ«CûÊ ZwCdYsÞ.Våâ<¹¸æî¶Ü4»'b¨ýä7çÕQ ®Y i#êf€àFª¡Iqó 2›†ÝzÔY蟇’× °@z[î@¬Íxž¼=mrŸL>g=®3öà¹\4+7ØJ©Ú®Z·° ºÏs£Ïo¸&öÂ>(2˲¡
+ÑOêpSH÷sÏ.ý\i")ÆÚÑ”s„”ÞÝ>MྶC(ï>âÕ&â?¢ahY¸r6`£I…âÄÆ´¢D“Ð
+y€Š“$c(ŸÂ
+kúŒq_¯Ë–Íæ«hCÄ° újX ûv={?X]³Ù+]Wu9ô:_ gÑ–C œ<8ÑB}AÈ>ió‰1
+[VnyP‚SVÝMujJæYt cP5±¿’=d#íº‘§-SÔx’pþ¦^À;îÎôð0³÷""°2ˆÐôÀUñ¯3$V®Ækº2 v+¦ú1-$–ÎýÕ·ÙAåù‚·!R¥OËŽÊ.€3Ü~U»îÌ3ò+M!oÛT{ß`¤RóU³-ïö”ðÂãr¿ã¯<´¡@L,àœ.¸CfɲÃ^Ò)Úýv˱¼-}¾[È·³H·ÍÆGù»†ž'Ðì".¥ì]õ¢zÉŸ'nü‡¼üº*“ÄYfŸOËe[g‘ÂÏGIâ¾7P6ùe&¶yø2ã¡r´D1«sHCÖ“[ΣÖNÅ0ä
+eø$p†lB”ÔÆÚ„hýP•’¨4–¦=™<”MBfî.hb!HßÈŽ>0½ {ò²ú âsPătôÛ<ðWaJüŽÛ÷¢íèÐýº¹ .Ðògéì3î#1vx|ûRà]%jxû®5lSÆ C€r8gS×¼…ŸMÑv® e&Ї–¹¯±ûK„ÒÕúö:ªÙwƒ•¯ßß¼}ó#Ñä‚¿îË–y&"¯_ç°Íºx`Oá¶Ù¨¿-rçˆ_{,
+ƒ¾XÝß;i ߬ãbi….t½ßÜzV—©Ór+û³dD¢(‡¯[„ô†²'Ç ¨XÚNE R‹ë‰>g†¢&˜ oÖ/TAûÔæÕùï€G`º¾Pꥀu ±)->yôM­!F…JØ# ]yÛ/‹ÇÇée‘þÂY*ÆMÎ1ëac d£,¦Y¯};™×Ë\ÆIÒκéP ^"bi̳X‘¤™o"ˆE'×Óy¬RÐ6‡]°½ùD×û›2>@Á×”Óüb¯ÄÈp¯0B?!FuûÛÃ, ¹&e¬éiþ’ ö"Üh ßï×ÏúY)} *ÇßÐ/vyÁÄihêÞïxÏ[²ÉæàÞ;úä`ü7 ¨ÿŽÇô
+%U¬áá‹R  á-¡üm[êyاâýŠå²bß0«!sˆ†þÈ×mð?tÔ”÷‹4mTá;Mõlã T^ˆ.*ï›<¸¬—õ&蘫
+r¬%>Ñ/µÅ&šRY+£Ÿ÷ŒlVûÔÂgÝ°0]Rxê–È
+¿»·mqÍ©ÝEœXm»slL¬‰³<1£)ÚpgÊ×ð~Èl¼„Z¹´<È¥E‹ÞP­Å8Ýs/ ¿õ!ÃAb
+FL lÀSg…9qš†¼ƒ©8íø G'—ýÉüXF;|üÇ¢á ›Ìáj;PnEÒÑÉÉÁ1ñá‘ KqÂÝmãÔ†äï³Ü-
+“†ÅÑÁñ^šfÇÊMÓØÚÜg¥gŒDÇI’dC#Áeÿ¾Úð?µÇ‰û‘f\¿n Ö£f…Tp‘ é£4ösþ¿-É •ØÙéÿÛ7Ë Òß“Ð<k1ég —ŠÂ¡`I…ŸẢ&‡Â2É­ƒÿÏe‡•<ý£ÕÒ%m:=¯éDÈ„ )BK:Á%³$;â:@Zÿ^
+¤ÏØbŠ¬€ÒVˆ°.⥦õG‚¥pýY›T&Ϩ/WC²üL§ ?$2º  ƒÎxÚ¤®zBüU•™ØäF>£*¨\•åüädÖ0ÔÖ„aÓVOŽ?°¶Œû²˜?£-cáLYúLäÖ¸Îø¡“ã , P­¬”˜¸Æ‰Èò©6·}¤ßýßÚ‡e×ä‚öÄÇ¡D`›<ÏfIklU¡†tv¤Ž³u`ë ÿq¿Qendstream
endobj
-1199 0 obj <<
+1239 0 obj <<
/Type /Page
-/Contents 1200 0 R
-/Resources 1198 0 R
+/Contents 1240 0 R
+/Resources 1238 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1182 0 R
+/Parent 1222 0 R
>> endobj
-1201 0 obj <<
-/D [1199 0 R /XYZ 85.0394 794.5015 null]
+1241 0 obj <<
+/D [1239 0 R /XYZ 85.0394 794.5015 null]
>> endobj
350 0 obj <<
-/D [1199 0 R /XYZ 85.0394 664.0883 null]
+/D [1239 0 R /XYZ 85.0394 556.4918 null]
>> endobj
-1005 0 obj <<
-/D [1199 0 R /XYZ 85.0394 639.2266 null]
+1045 0 obj <<
+/D [1239 0 R /XYZ 85.0394 531.6301 null]
>> endobj
-1202 0 obj <<
-/D [1199 0 R /XYZ 85.0394 244.467 null]
+1242 0 obj <<
+/D [1239 0 R /XYZ 85.0394 136.8705 null]
>> endobj
-1203 0 obj <<
-/D [1199 0 R /XYZ 85.0394 232.5118 null]
+1243 0 obj <<
+/D [1239 0 R /XYZ 85.0394 124.9153 null]
>> endobj
-1198 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F48 885 0 R >>
+1238 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F48 925 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1206 0 obj <<
-/Length 3647
-/Filter /FlateDecode
->>
-stream
-xÚ­ZÝsÛ6÷_¡·Ð3‹‚çžÒÔɹsq®Ž;7½¶4IYœP¤"RQ|ýíbˆ¤(ù2×ñx´
-# ºÍ¦\ÆŒÏp æ¡ñåÅ¡T¨æ™<ÛweAkôë’¤êÊÝ%v¶ô›õ}¹ÙöÄà:ÍŠ¸Æ»C-Áö8S¥È¨H‘ê`wÍuPvíÞù¨7oÍoÑQgÕÓoQÍ+K¯³¯ö‘úlˆÊÛ¦ëw×:Øç}Õ<Q'투(*<笶³e}FTWæö Ñ®ð7 ²‘˜[˜º4
-Çdw$†×ªì~›ö@ÊS%MQP_F?™møíÊÛuâ*f ©êÏLœðP³”_6˜!×yƒñ\¸×?“ûn½üO۔ݲm–Ýzßí¡9±ŸD„:£Ë¢x®YFö“€&%‰ ó/sïRJºb)EÐd›Ò©*”ß@uxÐQ«Ø—DX%+«¯FKðÉO·ïÁexM vŸ4ÔÚÉŠÖ.Òöc.£í)„‹D‹±ndÍ3]Ö¶l
-ÒHhàéuØU}Ù¡‰sŠd{‹r•íëÞ+Y,ŸˆàÞd/^ËÔCp  ûhÓÎ8·b9¯fàÍtš¨ÔlÀuAÍ®¸Î`u±ÌëªlúîD¹„„ ãËx® F›p \$cȪe{çŒô!³hU^ÊjR_?ÛþͶ.7 4š»é°O’M#~{±„ÌÝ°¸9ŸšÖ»
-™¨àñyúl
-ªk<\§ —¤xQ2.ùDñòuU¢ƒä)#ó@¢¹š§ÇV¹ÂÅV =µÁñÍhœNÅ. ÌÜÌD¿b NNøçOÂT
-7'œ‡`"è¶e^­ž'"÷‡–ˆ®Üf»¬·Ýt)³¦©œSÞl߯—Í·¢ÝdÕœ9@på!KÅ8JÍ‹-X 鶆÷7³|
-±4q†¹[åB2½ìŸ·%Ÿ;,ðþ¬æM1‚ãW©e© ¾•YqÖ"8T ^¶È!×y‹ô\æÞÛ®_v=à´®¯òS‹D§"Óô²
-(¨!N[¼ ­mÛuØ”ýv5†ÀÖ]¶{TÓ±–©:4Ij´ûþ©õ0¨:ÙßõvoÝkjï»rÆߊ8 u N•.z»k¿¢&Å=õ·
-`“Žâ¿
-º*;d=PšXŒ¦C3«kS€@’~,ú5\¿@¯ãw•å8ßÞ½ùpC¦GAv;Ö°Ss’¤"øZµTÕ£n£OÐMú?Ý}¢
-†bTʼn½GA׆õ¶H•wnßýFl`¦]ö„#ÞÍâPˆ‚(òȆ:` EëÁˆ¯ÅTÃ3Ü{ŠäwÈ4T"š
-ùTȸ©ø?œüD/<× 2œÎfQwkŠ(ÆàÂØ .â½0Fx‡ûµÂÛé¨QCîfÊ#ÀQÙÝyN¼ÚWvv£0Lž8)Ââɧ‘œø3…¿åˆK¹ªbäécu1ÂÒmÓWèŒH’²ˆÑ£Ÿ>¾!âƒñ<†4Ô…So„$}Þl~MÝð¸\G ¿ùÉJ§¨xâݲºk—Gï0¹<t8‘RÖ)ú„ÖïÛ!P„1./C$®¢C¶4ít½X…‰òeSqMï2ƒ{C퀼°v[=6MÂ.;Ði
- øÂMDg<¾<ÓÌA‘òÛ¶®òªŸ‘2JB-XòR:Ù„——ã…’ï
-•”êdÒ\¬ýJáW8¬«|MdŽCáÛ.ü˜¾Ûé.IIº“ú¯«.…NÏWœ„^y¼ˆèµELµxøÐîë‚H›rimŽÎÌ\æèÓMá šQÂp¿ß5öª1Ûa‚¸Øí .0Wv´² ú÷0ÖÕ€M;?¹Ñzäßò]Ö­Ï‚-0[‹—Þ† ¹ÎÃ-ÏuTÃeß.»6;-‰F¡f
-™ÉÅeÏé²ãO[",©Ž–=•fêûª‡&M0—
-ªep[8€ö—=½°I…¯ª•]ß—…ý´û×>£hˆß~"Ž¥ExÄ–q%ÿaKÊm•D—ÄAââÇIíî³…ËøÕ|™dTòc„ôä'YÓŒ,r2²[㜣¹‹Ô`Y30ÚM`¬†Ž‘–EöÐ\n„=~§X`¤oH`غ|x ¦©³â™F>ÓG,C©¬¨ÖÅpnžš‘=Gá>±`
+1246 0 obj <<
+/Length 3489
+/Filter /FlateDecode
+>>
+stream
+xÚ­]sÛ6òÝ¿Bo•gJ>Ið1Mœ:çê¸sÓkûÀH”Å)Eª"eÅ÷ëo @¤HÉýšŒÃ%°
+†¿½ÿD
+—Àéꀲj™&Á9#|ÌÝ` ZUƒ—ršÔU/n|»«Š-ænÜJ²i„0€+–’¹[¿çSÝW!S‰ÓÙÚ T%1fþx›^’âA’͸ägŠ·Ü”:Hž12J «^áöøV„LÞÁñMhpG©§MHæL¿N¸NøÓ‡§T &4LÌÛ]±„
+áŒäîØл|Ÿwn˜„2iXBÍì•7?t›¨þ²j¶y9e\9ÔbèÓ§É,VBú«¡ü&ŽÏ –¦Þ0÷ë¥ÌD˜Nñ)f; ¼š6EìÇ*Á¢”ߊ|uÑ"U¢ ËÄu‹ìc]¶È€eåÞ´]Ôv§µ]¹[$:™e× X -,ÜÛ›iÞ‹Ž6†—
+Dé¯ ¿ÅÎù\NQž½;X¤u³wKŸ)ù/;¬‰¸Ë"0Cˆq[ùœ`´¬}¾$‹€û‰˜ žmòXvçêï}µ4ðv å
+iŒyMÚ=¬+ÒöXH)ÚJQùem=Rô9oÇ9²bà8ÓWèXcB 7Ú­ÎÌ%>¹R§`“§:f"§5±NYBX$Ÿ/:ZoÝ8.ÓÅ-ÝÖžïPhÑ6±…ל³ß–¹& {zÉéÑíóº%€ØH­š'R ®R$ÏtÂR¢8(«Í¤"`Q/) ~ؤÿK¹ƒbØO\©²w„°â.
+†ù„¤ø²«ÊeÙMP©ÒØ–þ*=m"ÐËQ ä; ?NäYw8‡'¥r)›6•>˜.O4›$V¦¡#uUÌ
+"ªV¦WC.7Í$Rÿ#UÒ×þ»Gø¸d#eȃ5¹f§]‚%ïÄP»' 6½NÙ…;JŽßãø@•á¢ÒØTdAŸ zÚÆc°b—gáÄ´mqÐ_‘Zl<™o:ÖRza×É–¹Øû•"œpÜ”Ë Kì°X¿vá’õý|L{ë˜Áážõ}4&»Ì®$ƒòÑk‹„z%°øت®ð2ƲÎî\àrújœQ^ ÓÝa_»%ÔcvÓî“uÖûdm楛-Ýáû#̵d¨mØÜj =ÂË}Þn.¦\œCLR<¹žrõ±.§\«÷“–®‰Ú&·Dí÷|yýø€5qþÐÞ²85:0i½Ø“ñ빋K|~†ßµ3î'
+êdóMs,\•îFrZi-ˆ@K2l]áÇ+\àÕÞìttâx€ç¤ÏXˆ¼)WôLÝ%ÔI©ýþôé°Ï½JÝ/œ¶›¥Æw×aŠœŽQ+€cT’ëÁ·ÜŠ2õj”8Ãýã­
+]f.ôKøé‰BÞ(3ö®PäÉDLþÂAºendstream
endobj
-1205 0 obj <<
+1245 0 obj <<
/Type /Page
-/Contents 1206 0 R
-/Resources 1204 0 R
+/Contents 1246 0 R
+/Resources 1244 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1182 0 R
-/Annots [ 1208 0 R ]
+/Parent 1222 0 R
+/Annots [ 1248 0 R ]
>> endobj
-1208 0 obj <<
+1248 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [154.2681 344.7581 203.5396 356.8178]
+/Rect [154.2681 239.2989 203.5396 251.3585]
/Subtype /Link
/A << /S /GoTo /D (notify) >>
>> endobj
-1207 0 obj <<
-/D [1205 0 R /XYZ 56.6929 794.5015 null]
+1247 0 obj <<
+/D [1245 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1204 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F48 885 0 R /F47 879 0 R >>
+1244 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F48 925 0 R /F39 873 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1211 0 obj <<
-/Length 3744
-/Filter /FlateDecode
->>
-stream
-xÚ­]sÛ6òÝ¿BòLÄà‹ øè&N΋s—¸siû@KÍ Eª"eÅ÷ëo @¤HË™kã™\,w‹ýÄg þø̤ “¹še¹JRÆÓÙrsÁf0÷ñ‚{œE@Zô±~º»xûAf³<ɵг»u–I˜1|v·úmþîWÿº»þr¹)›ëär‘j6ÿéæö=Arz¼û|ûáæã/_®.35¿»ù|Kà/×®¿\ß¾»¾\p“rø^x
-/|ðáæŸ×4úøåêÓ§«/—Üý|q}×Ò_/gòçÅo°Ù
-–ýóKdnÒÙ^XÂó\Ì6*•Iª¤ êâëÅ¿#ÁÞ¬ûtJ*5I*”ž-¤JŒ“Zf KAk‹,Í-…ŒZ|JË µ¼[/…dfÑ=o-?]3Wi"µÈf}Â#ök‚¿ìñç)¬Tðÿj»®¬.’eóî±lý¨AYÞ~P¦G@«$Ó,®øå³m gÀD°$7°HÂ9”UE—žµ‹èykwOvºgkën¿ÒswÉÍÜ.÷\µôiQ5AèCÙ=g󯟯mø-Š ê:á*ËaÄ“<M…“t 8ÎüjûPtå“¥·¢nvׂíJÎæw¼²ëb_uôR¶ºâ äŒçÜ+¢n&tøJ2Ú}¨`{O“TþÅKãØL[< á‰f:}™}Ç€–†/†¤A¸…V2É…Nû6‹kL-˜0‰d`¥¸ÖÛž6R­¸Ãd°J,çóåBóùü/æ×#Í
-”}Òn]Z ¶–hH ÓDpò¥Û-"3óçKÁæÖ¿”›me7¶îìÊjzúX
-£|´÷*ÏÀGµœõÕû×vL ™Cä\Þ_³§…Èœ\ ÏÎGÐ'7I–êWbcÄB}BÄX”«Å¶iª‘È ÈÊ|Ö';ŽŒkÌ]õóW؃ÁØß¹hˆÞl»²©£·ì¾m*ÛÙ ¿¥©T›è×.vŒ2gQŠç6Œ«fYtÖ¿þ¹·»gÞ¼÷°µ‹aÍÆ@TÍÈvB:JqóXv>eõ^Þ•€„ËùoSÛEÛAŒl»rÙŽSVžfÄYîiÌ~˜° Õ›<ð¿YOD[Hh\ȳ‰‰gI.!üÎÊ.cˆ<©Ç”´D®æ˦ªì²ó(aÍEE€UÑ4r¶Ï¢òS¨¤–hüÎR¶¯+Û¶žÌÖ.Ëß@§z&X·ßÕ.: ­5îóšr¸rfÀ)©
-¹I&Ñð±µÎ2È“ ÷EKy†Ïôt\×ϘéI5ü$˜)¨ ¼nNwؘL`†'FòãJ/*uÌD@%•F\'ìDõ 0tå ep‘tÈÁ”Î1·~™§"nŠgÒš0:Q"•AmTÏÞ»ÜÍ‹å6é;Õc¦uy ˜Ë®^-ékd:e^¦U³×D6óÃc¹|¤ï¼QÇÕ~³%(jãG Í‘=
-…>þ„¯ŸR¥âty ¼ØBp(ÝÌH ãžH4Ž9ë5AFÔ&‹³d‡¼)^i úXgÂlÀŠÉï;DýQíI77ò<çˆ5f=Ì|àq&Ëõ7e>™å1óá8Â^Î|9Ôx\gGkÒy†Š6nöD ¶hÎ8rU?<We[Ü£½ãËͯ¾ § zl‹ó¾*vDŸû^±‚G4Šå-ø âÞ<Yï2h‘à%)“èZÖÐlŠ£½…ç´«ážeyð´í®y*WÇ ;u2`hÀ¸ yPMÔ§û 9#1 º¬<BÉì÷Šè‹þتGT§Ýkä[R0ƒ2·G|dk缧”z¥‘7l2ÜÈ\C‘©Íê#¢¿"Í)Õ‘>T"GE9ylVÎ)#àœgJélˆQ™I y¥ëc½b"Ö”Õ l ºÎ³Ü#ÖûAPU`~<`À?î{wì«Ûå®ìùG³žð=è˜Pæÿñ½±¿BÌ‚œÙ_Á9 ø¯,yL÷G]NCOÌû{5étë51FÔÎÛšÂ2Ù¨Wl­‡uÆÖ–« ,45m÷‚­A«B:Ë=bM°ښļ=dÿ÷˜Úé"NM-…6„å/›ÃbK ×yÎÔþ++ÓýaSƒz*¯l{ÄzMŒµó¦twüSëa1µ€…»-ºÅ’º¢¢]´ÛbiG6q:+}^Œˆ5!ÇÀæ´HŒ†Æe ˆ?@Pü˜òa|(<pOMˆbTÕÄŸÀÈÐÃõðÜ߬‡8ûUìر"Î9‹Ž^—ÅnWþ šÃ“Þ±!ý]EÌU¡”Œ….¦žp•äȃ?L8„z2 ­8òÁæÍËõXìŠå‚ª0 MËÌ°ë nÃ#±Ð eÐpK CñL§@˜*è•ö× Ý!.ÌtÅ=ˆ%ÅÛìÊŒ$¥ÂܺX–U‰=&½WM±rGáH¢RW#j¡<k·™(
-=~¹½ùÕ‹û ÍÚÆ-‘ ûÏî‘öB»¥·[Û]Ažòg
-ëyë—¾$F–&2‹]ì«Rì¦V‚V¨þÞu8³U*·H춶‡ª¬Ãñ]·÷ô˜o¹´[Øé7árau’”¦ˇšî/ìêÅX*S–¤™’çciëåX±paÅjU¢HEµXïšÍ¢ØwAú“©%Øã(Ì
-ƒ ”‰óF¬ ‡]Œ€‚ë¡ŒáH(W^-½,›šcƒwP¹ô÷C0so‹§Òõ‹øÑšžèqî klvðˆZFŒSÌý]!X 6?<ÚGÜ_¹@‚x–[¢e–;Â!H`ýQ‘4ƒçŠØ¼j霾OÍ×MU5‡HýÝíÕ§ëÀw5vÞîòn“ˆe’,W„õÇ@ráÃŽœ^àÙyýrÞÓ/À£™ãK‹×{êæg,’ñóW‡ 0¸=¦)Ú0 êïÛ(•8Þî–$˜?1GHéÅ»·t¯é°ÛsýgÇÓt7¿÷I‰ç<Á‹ÔANêD­<œû‚BQÆ‚€>O –›SÅÃ>2Äù²¦3¾àì*œSàšÞœÌô-ÂÕªÄÑ}³T¬Ãqܺce€‡3G†gŸÓ^ÅÑ*:xΩÉ?u pÂmú·
-¿8PI‡£f_ùdîœãP¶6º]Õ‘àQÅ*žý ³ÿ©Û{g? ؤÏhU\Á~/ð‚7‰c¬j0,⤋8,Úo-Ö ›zhMÏO¿ÒóäŽÖ:°zlÚŽâ¶Ìûq[Ê$3y8õ]7Mâ…J–ÍfêÚ(O´–¦wWÂr²\äâÔ|Dz ìû€çcÀBBE¦RyrIv,-²Ú\´flÎ=7EYEÑkÛMÝ"Jž¤,Þí"'¿˜×xzìnôxÎÂ"Üžz³i 0ú9 1‘\ùh}l~ÿ(áá›w«SÕ È«YH«ù½rRdi.†=½6 ÅŽÛâ‘+²`xžX0@\P…çÁVªª4@}«›CíaöÉÅ\€B®Ø?` à.¢>{21ÃKí~Dƒ2~ãgúFå
-8v˜Qá"•—eÃèqtŸ~[5ƒŸ¦Š]MÕ¼l üv2“}=§ eÃã¦[N¨uÅK?°Ë®ãŠ%Ô“ô£ ø¢ç²*¸! HeJøêº73àÖy¤:#ÇTÞ1ÁÉ7©­Ði’ϺHä°R£êšoû-úP
-…Ú BÉ^pD5+N"&u5
-%Û?‰Ah\L‡¶f€…Š_ Z¡ÞùHÏKÚ½=ÓܺLC©§¦3E®ŽBr߸ T/¼TèzOÖ­¨Dô¹ö›K¢©"Mú0…µž_Èi÷š÷˜þ¼L[ûFnáH±~îI·zé—Ð2M”œ<Pañ˜ùWÒÇŸ« r¢/_A5 
-Õ®òSÉSi’ÔˆlBôÿ7k‚4endstream
+1251 0 obj <<
+/Length 3818
+/Filter /FlateDecode
+>>
+stream
+xÚ­]sÛ¸ñÝ¿Bo¥g"ߧO¾ÄI}Ó8mâ›^çîh‰²9¡HE¤¢s}w±
+¹¾~§l5µeÈ#ÆKÞÊZ§RXóêz.™ˆ²j ë—B½½ÿL¿¿îòí u·×ÜF9
+Nž$ ÷_x­;d? Mü[^‘&çRë˜ 0œ-Ê0ðãDG+÷M½¦_O^\øa¢eÖfSH´‚Ð F
+#¨ü¹ï©CÅ&‹µì<÷ãõÜðèþÑíH5@T
+mgË Aäìë ÒJSIX½¾›íA ðún-fok˜Ó¬?­@yÞ'íæeÄ`}aŠ–¡IÌAÞtï²Vb£—kÁ ­Ób½)ó5i
+B‹VgÂ#(¬‚+¡ÎGÇ õ 1c^,盺.G&  +ÓYŸì86¬1w
+Ô´£ªâ;nWΪ$ ]`Dël ‘ x˜éùHÓÇ:j:¬) ÙJ¤”ç¹wX쑪åà þÝê·‡Ýu³Ø=_©W~û#&”ýüpì{`†¿ cögpÎÊþ…)é~¯ïØóþZM:_Àº$ƈÚy[ÃÝH/ÙZ댭,:v'lÍÆ\C>:˽Ú`?´5 û8>dÿç˜Úñ$ŽMMÃ&„¥§Ma©¥†ó<gjÿÂŒÇt¿ÛÔ ž`\Xöë’#jçM 2qÂ.œ«öΚGBví6ÏÚù‚6DY3o6Ù"ØT™³2tHc!æfDl ìXúRøãʼnúûÌw´ùPŒªy€øèYjÜ~
+¡Èt¹ê¯ã0v/Õ„+@I !<x„ùK(*uØ‚#Ü´y¹ž³m¶˜ûkØœ±ã{Àª7º ñ÷1°ÑÊÖ9öîú‚îIÜPF?iq]×âÂH›=ú«Dz=\ÉYIJ…±U¶(Ê÷–ô»¬³¥¿—Ièv€´›Æm<k·˜(
+5?ÝßýìÅ}MÚzê²Ãߟ)˜íÔsúõ”Wx[B¶àÏ
+ãf(c8
+J•×_C?uE±Æ;¨Ô_ôãÈcþœ}+Ü®1u¯\‹çZ˜c½ÅÀ€×@´q´ÀXcè{tÁJ°hïN(Áý•‘ $8€'¹Za¹ƒ 삹ÿ S$ày"natNߧ΢U]–õ¾£þæþæÃmໜº>~K¸b ‹ª‰;,K“жã_Žä‡ ì9½p÷Äé—óž~Þ™9þhð²ÃaOÝò„ÅB2~þꣷÇ4E Dý}¥ÇÛÝr÷âóçå)¼xþ’°›sýg‡³t7¾óI‰§<Æ‹ÔANêØgÎ{A¡(cF@Ÿ'PËu…©âiwxËãEEg{ÁÙU8­À9½:é[„«R‰£ûf1¨U° Äq㎓ΞyNd$—ÑJ:pN©I­? u p²mûw
+6uÓîXÁùjü[ª‘¢‹ÓË<׿K©Ëð:`O%öê]铹sŽ}ÑäëÑEy
+í>/KTT!h€·‘•‡áÛ8‚B®Ø==ÓËHPÑ‹'ÓÅaøAÿ Stßø‘¾Q9
endobj
-1210 0 obj <<
+1250 0 obj <<
/Type /Page
-/Contents 1211 0 R
-/Resources 1209 0 R
+/Contents 1251 0 R
+/Resources 1249 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1218 0 R
-/Annots [ 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R ]
+/Parent 1258 0 R
+/Annots [ 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R ]
>> endobj
-1213 0 obj <<
+1253 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [108.9497 550.9859 182.6031 560.2012]
+/Rect [108.9497 443.7983 172.6404 453.0137]
/Subtype /Link
/A << /S /GoTo /D (statsfile) >>
>> endobj
-1214 0 obj <<
+1254 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [293.8042 505.6313 355.0043 517.691]
+/Rect [293.8042 398.8702 355.0043 410.9298]
/Subtype /Link
/A << /S /GoTo /D (server_statement_definition_and_usage) >>
>> endobj
-1215 0 obj <<
+1255 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [395.8905 505.6313 444.6373 517.691]
+/Rect [395.8905 398.8702 444.6373 410.9298]
/Subtype /Link
/A << /S /GoTo /D (incremental_zone_transfers) >>
>> endobj
-1216 0 obj <<
+1256 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [309.3157 474.882 370.5157 486.9417]
+/Rect [309.3157 368.5472 370.5157 380.6069]
/Subtype /Link
/A << /S /GoTo /D (server_statement_definition_and_usage) >>
>> endobj
-1217 0 obj <<
+1257 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [305.9683 444.1328 367.1684 456.1924]
+/Rect [305.9683 338.2243 367.1684 350.2839]
/Subtype /Link
/A << /S /GoTo /D (server_statement_definition_and_usage) >>
>> endobj
-1212 0 obj <<
-/D [1210 0 R /XYZ 85.0394 794.5015 null]
+1252 0 obj <<
+/D [1250 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1209 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F48 885 0 R /F62 995 0 R /F47 879 0 R /F14 685 0 R /F39 863 0 R >>
-/XObject << /Im2 984 0 R >>
+1249 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F48 925 0 R /F62 1035 0 R /F39 873 0 R /F14 717 0 R /F41 910 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1222 0 obj <<
-/Length 3749
-/Filter /FlateDecode
->>
-stream
-xÚ­]sÛ6òÝ¿ÂoGÏT($ñè&NÏÖÍÙÎÜÍ´} )Êâ…"U‘²ãþúÛÅ.(’¢ìäîâ™h¹X‹Å~ƒò<„?ynb[eÏ JsžoÎÂóGûñL2ÍÂ-†T?ÜŸ}ÿA'çVØXÅç÷«Á\©ÓTžß/ b¡ÄÌï~½ùpýã§ÛË‹$
-¹X(®¾"èÇÛË_~¹¼½XÈÔÈàÝß/?Þ_ÝÒPÌsüp}óž0–~NLz{õáêöêæÝÕÅ÷?]Ý÷{îW†7òçÙo„çKØöOg¡Ð65çÏð
-i­:ßœEF ií1ÕÙÝÙ?ú £îÕYùÉP(«*=`*…±Öœ'ÆŠXÃ
-ð¯¦.¾»Xhe¿* êf·Éªê…ž²º}.v-=<—ÝÚ£é÷w¥¢ýö9Û]È4X2™{(VÅn—UH€Xt vëb@Ö4¼l[ìžú…šÝ„v<º¢ÛfSà€R
-kŒr›jà5œ VÁçºy® Ü“EÝѳ›~i
-–‚$h
-Á‘ì1‘=¢X}éö„îK–„]¡!àôä@×6ÕOfÄR^´­8reR$RÆçq
-p˜Ñ ×CD‹!y9ãº{*Ì&ëòõb“m·År³.à&lÈD pNæu>zªF†Š&“DhiÓ1'×+ÒÉ(’:§Ê
-ýBŒÍ&¬V)Ó a¦
-ý
-˜ŸËzÿ…Àö<À¦EÄdÞ€}nvŸ "»iö5¿šÑÏçbWÁh>LM²AÈ™tÛ3tÿî#7u]丹vŽuï^`½–~1ÔÔí ª®\8SF±G"_í^ÈóbÛ‘)K’bù—´ßk›üsÑvß:ñ#èUͽt8ªÂIÈо˜xt–ã]ȃ‘bÄIœ.µ.‹¶|¬:Óó5°†
-@
-ˆÇ^Ï(&‘~žj†Ÿ‘Ÿ2‰‰Ç ý³å#¿§,FbõªãSRD6òÁ¾^’3"nªOI
-ˆœ•—8âË+æÁ"ÁCYSBrxñ0#Â+¦ÉjX¶¶—_ïÚ¸Üë)ûÕ|ìAøÔžê—IÄ,ü›m³ËveÅÅWîÜ>yõ¾²fvCo
-‘ÊÆ“là››ˆ4ñù?}H±«‰Bd¤l&b-Œ í›BVªدÒìæd,E›è-‘hìöݽQCû'ä<À¼”28™GûŽiúz<¤:÷TNûª+9Œ²^iH‡_]½§šY~”õªPh¥“ñúÜÆßÑ·qbE^qÎ_àú\ziöD³v)¢Ü¶•r{i‰ˆÂgLEfÜ×|½«òD‡Öf„ê»>LÚPZ«S‘¨HŽ#ÐÔ½ ç)øª,_ƒ»Å<L[;ßÛ
-ûŽS3öî'/¡ˆ”Ž&ÉÈkXÁÁEøÿ½)H?ÓH¾íÞä[Ú§%Ò(I^W¿!Õiý멇CIí
-ÆrW,»gh‚£~žj†Ñ–c)TÊ1#—Žl^ÈÀ±áo_´Æ‹Ç:ëö݉ˆb"ŽB}R®^¨[®Z ðøET[ãÛ¤0Ú!>Ìá"± Êáäí«•Ó–»¢ë¸5<¬kú"îâ½.()]ï"¢*ØŸŽƒïÓ¾ª‹¾><¼O{ÜV™¯¸º.Ë?Ÿ¾‡R àøÞˆ˜CªWTÊSáÖÝ­/¦.“…!ïMj__ØÍ,<v¨D…j¼ò^f®^¨úAÍlixì€Ñ‘`“Éç¬}—Jm—íúg^
-I(LÖùvRƒdÒRH¼1%ƒÀ„Ør®“BÅõyƒ»œ IFDV&ƒsϳ®ÀÚl’¼Ý ±:Nÿœ?g»zn!¨ "5Ã9]8ó'T¤|1${ÖLšRcåq_p Ú¾¿ÅÊÃ184á\§H)È'SŸ¢îXOç¼¹û¬Ì;-˜NN–›ÍÇ .#ÌÁ?BþÒìfÂ
-­m2t4MÎ5Ô£û ÊXÝgSi°¯¨5¢}gEAžñè €[7mÇö­ÜXKÂoܵ3¢Èð‡hp9 Û6aÝí‡w„†câ7}ó†‡t*É‹òä›fYÎÞxP´G*š
-«­7%zBǼhÇ‹»•rOŽh&øµÿt­ä|îúfqùþý­¸¼ýxa•Ó-‡þOQþc5º¾¹G?$N}Z«!HèÙ¾BØ×4ÿóg·‡o’£Dè4Uó©”"‚ìÐ3…r <NýøûÜcÖÿìð}[endstream
+1262 0 obj <<
+/Length 3836
+/Filter /FlateDecode
+>>
+stream
+xÚ­MwÛ6òî_áÛÒïU($qLS§›¾6Í&Îë¡í¦h‹ŠTIÊŽûëw3€H™’›Ý}: €Á`¾AyÃO^šT¤VÙËÌ&ÂÄÒ\–Û‹øòÆ~¸Œ³òH«)Öw7ß¾ÑÙ¥6UéåÍÝd­\Äy./oÖ¿E©Pâ
+Vˆ£×¿¼{óö‡O^]eItóö—wW+eâèÍÛŸ®©õÇW?ÿüêÃÕJæFF¯ÿùêýÍõJyïÞ¾ûž –þN,úáúÍõ‡ëw¯¯¯þ¸ùñâú&œez^k<ÈŸ¿ý_®áØ?^ÄBÛÜ\>B'ÒZu¹½HŒ&ÑÚCš‹ÿ
+ NFÝÔEþÉX(ª*=a`.…±Ö\fÆŠTÃ2ðfS ÕÕJku»±îÚ:E%óˆGêv¬Úuµ¦Þ]×Sc?„qüO¢b?nº¾‹±~¨®d´êÚ扆†ª¨úáèت'(MÔó‰a–ŽêêqÈe8êJJaQŽîWãXmw#P«”‰ÆÿSØedÀ¦Ú†!˜¬VÈ8™F¶ºÅZ3e—Ô"ÏdÂ(5P¸çÕ‹fð¾{ªÛû»@3ç%úªÜ÷°˜YÜÔä"Sp•~Ó¦!ä²pÌÆ-áh#–ÎPß·¿9æƒãÞJåȼ,›s1\9JuÑ®©Ñt÷ ¡¿Ç¢oñ„®³­†¡¸¯—Úç™[îã9n$¹ÈeÆ'+Öë·.šÕ]ßmWeQºc%êÄeÈLÈTúÙå¸/œ°®‡â¶©ê~b4º»£‘Ùf##µ~9'Þ*ÑD#H±#“¸(S#l–Ï™¸.F`”N‘qÝçý5ÈØ襡$-ØzÜT- "¦c)‚÷;:ÝŒvx„››†)Õ´´h¨æÕ÷s
+ï¡r'„?÷U_;B
+óg··)œBæp§n`Fœ›û=ŽUµ(¬&zÛcU¬-*•Ntq;,˜A‡v9•œ<.µ/7!-üÌqC\}úxý½ 8Y>7üoË‘üâ‚’ê5a~Ã=lÙÎ $PØœñG¼wfijðxcøçþ`nJ¶djò˜]³ÉóH*ÁPŠg¤™”)©ˆM’œˆøi5Å¢€O.DÌ ³-Ær³Ú»]µ^Äô@\Â2Sl’9OGÀZ dæ½³Lhió9%oïH&“|3a,ËýD„=[MX­|T…Š™'ÈpçZs²&‹Þ¾Høœ4
+jæöNWnâ ?Õíþ 5‡'°
+Æú†¼hÆù4Èg^‚²cñ™nD
+£Þ¿gÑnßï:¿N½x%Ÿ—ݾ‡¤a}ÒÜ%6 ‘dçÍÝë´¹ X¸yý…|<yÄu}‡
+|Às«g”ˆ³DŸ''`-Ð3³S&cgÒ9A¿W>³{Ê¢'Vg Ÿ’"±>!uÙ#2 `¦BHÀ¦+\8Ö‹ mõH} ãèn ßüi[€Nó¤788‰’
+¯y(ìXòš *Ût÷÷Ζ%T£ÁNŸcã?þ³c×ñw‚m¶Ã‰ñ–ý°B•›¢½¯x‰²à ny}w9Ûz=ÎPÃÿR‰a$ú‹-ïƒ"1ÐÄbXŽ9­< zçÏDb1ùüJ”ÅR?2äÐ{¾j45´»ýßò0Xà5µ(rDE
+~PH
+ywRëЃ:­ÃFÐ:ìPÉAQåJ…ëU\dpÉß®©F*}Ј˜é)Ž¬ž ü¾s5v{º ~†DuÈ@^VGDpæfá¾((±¼€¥)¨ÿª("ëDù%ŽøüŠi°ˆp[·‘&VdD8bÃ8\
+Òƺ§WÍy ÂM0×çÉX tÌŽœJ¡ÒXÎ yå(À†ŒáÍ[ãûÎ}[Œ{öñ„Ä/ï0
+Y
+¢à‚C{>ÅÖøj)Œ†+ÄÎâ®2 ¢=§ý-wå¤åc5Žá;‹CvRýIЋ¯º ¤ô¸ë¾Ù¨ØªÎ]ðþi«%æÓwMáó®q,ÊϧŸ£d¢…ŒyA¤&XgDÊcáÑÝ›/0GCôŸšÜžßØ#-l<cv¬DšÄj¾3¬Be$ªiã‡üp,„Ñ•`­ÉG®¡X¥£a,úP¨âø+IÂà,ÄpQOœ‡°ðèD[J/ S–$Áœ0ñŽªæ
+Ä’à3í•ŒÊG¯ ŽI’™6~Æý&¼S¶G/–þôô!Ð}H/ŽkH´û­¯,Ä®ú:[€+$Ã!ó~ö!ÈlaÌ÷ï1Ï_àL
+¡Ž&׿/&ˆD/YÆX
+ ÙÜ b<Á:#ÆË}#°©ÊÏ+¼õáDvõÂæka÷…ìêh{þ>(±‡‡¾1„Q•Q³ú#„ohìëräúRÀbm¶/J~ˆ½óäâ6†§v,¾Ð¨+⤪‹š·]w[j'hLM;Mª’¹T†‡‡PÚ¸¦ß®¿õ`«§¯øN:x¼ÉÚ “W ú2<>4ŒøFé¾ø̽uO§Ö=…p†m‘€²¤/êøIV§>=<ªníñ³8LªÂ'*}¦¢7‹u…,&†û{¹ ¡AvTXȼ2eÇ„Ðz©"“CÞ™„¸Á½.¸$#>Ðs¤Ë¤+Ð6›e/—D¬_?þ?(Ç—6‚Ì Q ”Ó»3@EÂ)“±Fͳ׹ð¸9&Å߉Ýbáa›x©^¤Ä“¹ _}’œ.Ys÷Q¯7Z°œ<Ún1jœ—¹Œ0ûè¾þ\¼
++´¶ÙIóè+F Z/Ù§8D,ÿó'͇sLè<Wˆ‚CHÊ`&
+ '~Ï ;ûüœôÿ
endobj
-1221 0 obj <<
+1261 0 obj <<
/Type /Page
-/Contents 1222 0 R
-/Resources 1220 0 R
+/Contents 1262 0 R
+/Resources 1260 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1218 0 R
+/Parent 1258 0 R
>> endobj
-1223 0 obj <<
-/D [1221 0 R /XYZ 56.6929 794.5015 null]
+1263 0 obj <<
+/D [1261 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1220 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F48 885 0 R >>
+1260 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F48 925 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1226 0 obj <<
-/Length 3109
-/Filter /FlateDecode
->>
-stream
-xÚÅZÝsÛ8Ï_á·sfjø%JÙ4íew›ö÷>fwKŽ5u¤¬%×›ýë @}زsëÌ53Bü
-3Y>]„“Gè{!˜gæ™f}®}§ì$ ’HF“Ū7V„q,&‹ì—éõß®>-næ—3iÂi\ÎLN¸½{K”„×ïÞݾÿ<¿º´zº¸ýxGäùÍ»›ùÍÝõÍåLÄFÀ÷’G8ñÁ»ÛŸo¨õ~~õáÃÕüò·Å7‹v.ýùŠPáD~¿øå·p’Á´¼•Äf²‡—0I"'OÚ¨Àh¥<esqñ÷vÀ^¯ûtÌ~ÚÄ‘:šÌŒTLb­¡«Í¬IRÈÖÊRŒYÙs¡•—ë|ùeöôÇát…ŒAi+'ý1$·\#¢UO´P*6Ž†²¯Q6]M÷ë¼Yç[z5>ü‹žÛKOóeåžÑÒçç<ÝÖüEÕg\µ19¥Çí'~Í2b¬k
-ä58½LŸÜÚŠ¶) úœ·òŒzÐb+/¿Ú5³jÕc{à ¦@¹–Ò5Œ‹ÙÌ ‹ŸrŽÂ¦™A]pwO¬Çs€'ÏGbâC¾©öÔl Á㊞¬ ´º‰Á£›˜HzÃ{q†kÂ.—°µ¬Ê¼›—Ë&x¸C›Œ
-,ìW`˜«Æ*/iktò Yödj3PÅ…ð<›ÚzL§S›gêÕ³%Nø(³Eak(êÏ o™Ž¥¦™ –&ˆ¿]X-D±=FrïÁÀVÚXo¿‚©ÎÑ1±Á•»$.öoÈšj`ŠŽW=¶Qe8v£ñ(å¤lý2;*"_ß]}¸¹(5
-±‰Õ0ÜNÂÈ=G y«µ5ñYÇŸ‚Sõ¡I¢WðÔã:(ÏÕ9¬Þ~= )s^–kDƒPÅCN Ji›| ªÀ‘¢ª(fTE‰G<ª¬ò¨¢C<¨‚Ϻ Kž@dhµÝ-”XùZFȃe÷ÿ -ŸŠåyhõ¹NC«åêA ö›XnKG¸­ŒÎ‹o¹Fäë0È*°ä ø'y]GÓg*ɨì×vPwi^“ë7Ô—nêŠZ¾PÖm
-¢Ÿ#ó2dW‚PmæK{ væñ5'‚”ˆÕ÷Xs´µ"yÅ“=®3žô\®\Ê·Õ¬¬fu•Îšfs\QCø'">¯@Ë5¢ÁЗ$¬CØ—ÂW€Í¶P‹:O
-}p#P]m‚DZq¦®Î¹Âé¦á)EÉïóŸ>5ì)é4Àðfžà¨úöjGÚ\Šï<Ç2¡9¼>×iäµ\#È›-SÊ#üÁLˆ8¯FË5¢Ç`ʱ†‚ÇŠ¡"„?Ūà€HÜÁÒ:¨á[jĆÞÂfw€C:î…hnØpîÇN7Gá¯{¾–‰ _#ÝûÚ!Ðê@hq€ÀQ
-vòÅ^;¬‹åú –&C·Ö´ô
-m¿]èŸDfU~ÈîŒ}Pª—õ¾žKô¢á†Ofp%GÚWʧ>×é Þr¹«ZŠôã xÜVÜrH$%AÆVj(šoÇÙÞ`*(X[9(OyŠD«Ý†z\†N|BB/ñP
+1266 0 obj <<
+/Length 3275
+/Filter /FlateDecode
+>>
+stream
+xÚÅZÝsÛ8Ï_á·sfbHŠõ˜MÓ^v·iÎqïc¶û Xr¬©-y-9Þì_¿
+_áB~»øåW”²¼ð==ÚÇï‰8–£õE •§¥euñxñÏfÀN«í:¤?­Œ§Œ(UG‡zŽ"{¡‚&Tàl™ÁŠB9Þ^šñn•Uø¥Æ‹rKäUöœ¬ˆ¶,«ºHÖÄ"ÇI‘}ä+"¥%Ô "Ù^
+3æÑÓl›¿d)},lK¹&¾éû"ÇZrÏ‚¹I<)¾.Ó|‚ÚL„ðb­¥]Ïß—v0ÒÓ+ÛÙ!¤ò°hFt4ƒcÏø>j¾Ìæ_'´Tbîª1”žŠD 7ÙlV9ªDRêK5®Q©H(÷E¶%kÎRT^_QÓ5ü#Š]9’>þ‡¤ÃyiË´x†FŒïjâJVUÉ[1‹X1PE'rOSd,PL;á°J$Ck@ÂôíüsM$\
+ò?ûd[ 8)ðs2€@L<Û'»TëTyʺªMYUùÓ*#|¼$«]Æ(sÎüX°n@d¢™ ŽÅ‘8Ÿ Nâx {JGŠyòç¢ÜfC+6¾YÙ)àÂp:ÐñÀíp®ãj»ÏWé<Ù¦GðÕ‘>?Ã5 @Om©#iL_‚ÙÒDA ÙÔyYPÝÑvº”>,¡œ3â¡J‘*EYLêl»Î à‹j<µòF(K“.Îõ§ < @p#M^ÍØÀ.æ£ØÜ!Ö!Ž­@ø}òZñ§c¡‚wmø¶¢¸æÀ‚o×8xÉûÊ]ùGUSp’n£C¥»b¢¬“z¾Ì‹g'Ús¹Íëåš&@GÉÄ@¼l/ O
+ΰ”Þv+"3ág²ÀÉÙ¼æx»NªÚæÐøGYdU3ǾÖ5ÀJ0°w¤Š¼0r>áu0odÊ0ÊÊŸuA×aª+Øv`khêa…l.µôB¡ŒNJÇ@UU;ö, è»@Õ'÷0 áÅ|vw¹NïᆫÝÃyQgÏ`Ý×ãM¬¼PC}V€†k@‚þ&6˜n›¾Ù´kqå£ßµˆ3$)Ñ Tkå´,VøŠšìæ‡ÒÛˆÐnì*€£í%\*Tè ä!ÆÓK­ÇÿâM ‚›Ð¼‘X)%ºñO)H¬
+á48ÇàÙïyÅ] ×
+%x¾Áo Çjv#(è½õš&$™ˆ5§1K=Î:£,V¯Ôœ6+»Ç)°q\Ðf­e3OhA-Üü实”‹f˜¨3ÌÀÈiøȑNì°Ø•=ndZ™ÀdžX2gãÖÀ#1ñ)[•{ªÖå†T²€PkE»0w†; ð¯nZí·…€µyYT`ݬ˜ó‘¯;ÔI PV‚¾ËÃün†k(ÿ’Ú‹tƒ¯=éà‚(ðT
+82WWÔÆ×WPsIsи ºõX2+ ÛD„24—æµµ(0GžU¨ïy$¥"RoDž.×K:.›4eÛrR”“ªL&u½:N­aûÇÂœ á oKp‘}Ø–ÂåõŽ‘ZK
+ŒtÑ „ßvÙ–î+JÎÙ–<àlö3Q(ò]‹°#Pv­~‘èoðžçp÷Øí2Å]úÕθ5qúSÁù’n4ì üƒ.?ËoÏydƒ©}ñ]'´„òðÔå:ƒ<Ç5€¼É<™/ƒ¬DÀçÅh¸äè-Ùžo"Ñ„ð' A¬±½¤@Z 5üêBØÐZØÂìpHGÀ½Í +ÖüØháf)Ü»ck ²5Ò­-!_8@à
+NQ|ãÛ« ~~àÛ{Q xS·ü°á;7_±=~]uïþèܪAßàüÈ¢Ç?=þD9ôßWÉ3­‰uËõîþñ§ÛÿãtÊ%•iF—D5ç ××f(Pûš½RSµ,w«”ˆO<2œÓRjuã±³¬ú¼¡ó®»ÕíT8v´6gK¹aA uç]>Û+ðeMÔfá@œNyȧ²^RmŸS-äó)“àXËT¢’=ªñÍjØñ¿(ãÐöƒMêI_Êïáᬠ>+|Ãÿv¹Îì@Çeq´}ÔóÍd›-¶YµŠüJ©è¼
+âÛ>¿cBõñÏø +$]¢ ~z€} æåz.à)_ap
+"?qÚþH±¦C2šu
+Š|Ž8ó9]«BÝÊ ù§H¸+p©Yš„SËÓ®&†}n7ZÓ%²oáTÃqä±jÊí¾ªûuÎX¼îÚ*¨«@2;`®r{Ðå$ZCw‡à…Ý`›¶kŸŸÂð!b™Ï—5)²À¦XÐI·Ý¡¡{+™–Ù!»UöAÂ^TûfxNÔóš;Z ŸôàQäÉ(|ãU¤ÃtÚ;&ûrKÛüø=^x;rnÖ†éxÚž?W¡µR½yù¥,–Ík¦‚„µ¡‘i²Î|,ZìVÔb}sì\9:.‡6
+¢ŽË÷!jEìÔ>¦m!žvtú ݱ* (C>’†Â z|‡º@z³­MñCʈjüc+
+v4HÂLˆäâoµãcÀvç± )íêÔᜋÔào8ü‘s;ÿóäÚ_ø«sâ¶
endobj
-1225 0 obj <<
+1265 0 obj <<
/Type /Page
-/Contents 1226 0 R
-/Resources 1224 0 R
+/Contents 1266 0 R
+/Resources 1264 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1218 0 R
+/Parent 1258 0 R
>> endobj
-1227 0 obj <<
-/D [1225 0 R /XYZ 85.0394 794.5015 null]
+1267 0 obj <<
+/D [1265 0 R /XYZ 85.0394 794.5015 null]
>> endobj
354 0 obj <<
-/D [1225 0 R /XYZ 85.0394 256.0608 null]
+/D [1265 0 R /XYZ 85.0394 186.2624 null]
>> endobj
-1228 0 obj <<
-/D [1225 0 R /XYZ 85.0394 228.8008 null]
+1268 0 obj <<
+/D [1265 0 R /XYZ 85.0394 160.047 null]
>> endobj
-1224 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >>
+1264 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1231 0 obj <<
-/Length 2638
+1271 0 obj <<
+/Length 2793
/Filter /FlateDecode
>>
stream
-xÚÍZÝsÛ¸÷_¡·Ê3‚/‚Äc.qRßôœÔv:w÷@I”Í E:$eŸû×w Pü’}Ó¤ÎÍ„ÐX,¿Ýß>±àðŸXD†+í"¶šE\D‹ÍþŒ/î ïÓ™ðcVaЪ?ê§Û³·U¼°Ìi·»ž®„ñ$‹Ûí¯KÃ$; |ùþóÕÇËOÿ¸~wëåíåç«ó•Œøòãåß.¨õéúÝ/¿¼»>_‰$Ë÷}÷åö⚺Œ×ñÓåÕ’XúœPz}ññâúâêýÅùï·?Ÿ]Üv{éïWp…ùvöëï|±…mÿ|Æ™²I´x‚œ kåb¦#Å"­Tg7gïözÝÔYÿ Τ2rÆRÍ90²Ì(èB~¬ê§´>Ér›—w°=-7iI´h*j­3ßU•¿q.ïnJ¶%iÆÓç!s½«mµOsßµN›¼ymÅAmQ=u«íªší½_䮨ÖiÑõNì«Ú¼*?«ÂC
-OŸùˆd¨Z?’N~¬‡AšzýÕÒ×Ü4i?ài´ù/M(¤¢+§³dA™è•,ÔõB
-£Ž°â©g’@Siûòâݨ™Õ‡I(f\5\~˜…Ž†š¢ËBf]ù1 %Tj:aó•Ux+IëgêúpuC]D¯
-#úÙ@†l@Q—@náBÌ<ÊÀ1r
-\ªƒï|ŽH$èÒö•¡!A%3B&¼Ó¼ M—!hq{¬ú¹à´-"áp…×jœ pÆË>ÿÛ‹i"ðSŒG‰¦©ËÝè}å? \g5Ѿ<Dé(6‹âxÉ–‰`‘…$hg‰åÉŸyÝD ð$Iæ_7¡23ÚèÓºh]¾f U­‚up€N­uU‡B@„_ 8Ç«…Á}Õ;°Èh᎚³HÓÒ}†+–·ð¯\Nž}ƒLª!ˆà*K‹o Ôf­¢A½¶ÛëÑNðör/*ØÑ¢¿)¯xÕ×ì6eÉîçF*¥û·] Ÿ ¸Z;Lâ•aù¼Ú¤›shp3ôÍâ[sHCpi-I ý W!é/¹ø=™x¥w‹Þ
-£f  FAD.† éHéšEµqo*?ê`/Ý!à¡¥öˆ‹@B\*z\÷;³¼¥ÊYaÁú5(ͽž‡ªYQšŒ8^ŠÍ¨šÉá>ÿ íË$e'¤ØräôdC"Äf—ñÞ¡ð›—Xfu™«]ºq—Q/Ïj„ñëCK |N8ê¬ï‡
-³?ZÒ6|Í¡üV ‚)k|NÇ·°êàSy™aH¥uꩯeøãI?ý;Ë´“Z|v ÖàÀæØŸ8㱉N q¨‡µˆü/tøs´Ó‹1Ó ÏôBbW Á Õî+T¯€‚¹˜ãúpmG®× Ïõðís½8Éõ1ܵ"1®ú‰¯-Ô2ŠGSÂoql̉" ôú³Ðÿ› <tì?EË\ ´dJÃYý¸*@ýÀ*
+xÚµZÝsÜ6÷_¡·“g"Fü%>¦‰sçêäßÃMÛí®ÖÖX+mWÚ¸¾¿þ
+Ó5ª¦y¢Ùmsè'i×í³ÿ¶ìÚ¢Ú‚AWáÍ-ôþZñ‚',©íQƒ¦®^ˆk¤­Ð,UZ9¦²uZî‹uù[‹bó(F¾µ+ÝŽþ8—<<¼œt‡EƒH(ÁTªdqÎL’»ìñ9?\ò,܇–ÍΙ³”s¤°•DH~æ\ˆ)rѱð%¿ö\§õqíéÒ<ÖpÆIòúÚ=×ÂâC+sØ´Êt6^ý[oe4»áÎÈF„7_‰o6Ö:EÛö< ±¬
+z?¶Å†Fä04ðV-ëô aåeoŠm~¬:b-§+»}÷B´ªl×oq×n]\$GîX ˲trªƒÅáKμ0k8'!˜e–õz¤*¬ ’p×4È«¶¡‘Ý,N55ÚëáHVÙµñüôؤá¦Ù奛ZåmÙ¢+ËÄVÍs¿YMø0ƒÁCÕ¬òªŸé×컲©[÷Ucw-`õÕ2l Tåfc£[CÔÖDÏéñ=?”…57Ì5[">ç/ ‘„øïK0xs$:™Û¢#Ê>?tåúXåz§ ·Äeýˆàn¶Üâ>¶d¢îˆo‚h"­Ck˜|Ì¿ãý‘çæ” ç")Á ãN¥,…q Æ}ŽIã=žç¡íRS&˜V†»/W(S‚b
+‚SCÆVI–b Óäá! ÁÝ è{þhøÁ<èçrmÐktˆ‚‰d¦þX‰‘B³ÜÓs½¥ÆLªÁŽ
+v&0—B8ƒêÚ ÀŸk&Òã8?ó*j»|ýD{øf¡]8@p‘1‘Æ„Ã¥Ô„$ˆ-½ÓÉôBiMJˆêvÀN¼‰ $V9æ(¤¸<Ù:šAÿGússxÊoŽõ†Þ÷¸¶%­ªbçVÁÅ'‰Ë×ùª¬JŒQ¶9:õ<®Mâ¢ê­b£ýí¸ß[œÒ (A€ß|ý®Æþ í#„ž”›`ðØ´NÖt+ëâ,f&
+Ž,ãâuÌrÇÌž ÷¸é1jOG?ÂNi‡bêU<Ó‚
+#äTPâÁ?cFÈ)Uâì"•ë|ç‰hO|NP¹¬ÿÀ”³¢ûàŽ…æóõ¸‰j= h«†fwdV´u&˜´gfqN –p•¡;@ñ†Ž€©]%[$Ó 3©LÕ5'"¢2R1Þa‰ç
+ö°”ºEÍFk·A<Z÷y¤Ì¡ þ3éÍÑi3<€ 5€÷(‡†øØÔÝ¡©ÞÆ‚þ#%ÈzÊ× @è[ SÕ³+7éü¹;”ëÎîhPÝÑ“-•8 ³¥´•Ò4a3ô‰ÓaAýKÛQ­‡ª¼´]±Ãr ÜúÛ¼vP`¡S¤“&*•oÔ=4ü`žöærǵ¨NÉø<û»&u(þ•Vöu-|þWPæ'Fô=“sâ¢Ë˪ûðcó<Ž ÛJn_<²¹@†uò¶;ßÿI“2Éÿu,rDzžË1¶Ô¨áŸd²Ùë«÷\ Ë;ÀŒq!ÆË@ÁÃçÇrýˆCaÁQûÂéVeê|\3O·ËÐ=–î;G®`)5HàÔä?G²Q
+T¶!D÷ò½uah3-ŽÎžÊa.8¯ Ïb–
+%§™
+Öyå?êðöÕ—X£[‚ÿxüÛÐÜ'î±âé¨
+õÜA=—çàò—†r÷ ¬1_{ß7ñØóì¹{xÁžŸûš­„OË~l‡HÒÉÍÔ_°[šj}¦
+ð³£³ø¿þþ ‡ÿ¹·,ý€„¦L.^rÄ=Þþð_œþtB¥ òó™lðÂTBœRh·Dœ½¡™«þ_”Ýeíendstream
endobj
-1230 0 obj <<
+1270 0 obj <<
/Type /Page
-/Contents 1231 0 R
-/Resources 1229 0 R
+/Contents 1271 0 R
+/Resources 1269 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1218 0 R
-/Annots [ 1233 0 R 1236 0 R ]
+/Parent 1258 0 R
+/Annots [ 1273 0 R 1276 0 R ]
>> endobj
-1233 0 obj <<
+1273 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [339.2005 732.0757 400.4005 743.9759]
+/Rect [339.2005 655.8125 400.4005 667.7127]
/Subtype /Link
/A << /S /GoTo /D (zone_statement_grammar) >>
>> endobj
-1236 0 obj <<
+1276 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [455.0966 515.3057 511.2325 527.3654]
+/Rect [455.0966 437.7416 511.2325 449.8013]
/Subtype /Link
/A << /S /GoTo /D (address_match_lists) >>
>> endobj
-1232 0 obj <<
-/D [1230 0 R /XYZ 56.6929 794.5015 null]
+1272 0 obj <<
+/D [1270 0 R /XYZ 56.6929 794.5015 null]
>> endobj
358 0 obj <<
-/D [1230 0 R /XYZ 56.6929 712.8597 null]
+/D [1270 0 R /XYZ 56.6929 636.3095 null]
>> endobj
-1234 0 obj <<
-/D [1230 0 R /XYZ 56.6929 687.24 null]
+1274 0 obj <<
+/D [1270 0 R /XYZ 56.6929 610.51 null]
>> endobj
362 0 obj <<
-/D [1230 0 R /XYZ 56.6929 564.4689 null]
+/D [1270 0 R /XYZ 56.6929 487.207 null]
>> endobj
-1235 0 obj <<
-/D [1230 0 R /XYZ 56.6929 539.0086 null]
+1275 0 obj <<
+/D [1270 0 R /XYZ 56.6929 461.5669 null]
>> endobj
-1229 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F63 998 0 R /F62 995 0 R >>
-/XObject << /Im2 984 0 R >>
+1269 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R /F63 1038 0 R /F62 1035 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1240 0 obj <<
-/Length 3289
-/Filter /FlateDecode
->>
-stream
-xÚ­ZKsã6¾ûWhO+WâE•Ó$ñ$Nm&‰ã=%9Ðm±"‘ŽHÙñníßn4
-–ŸÝ¯~žùÍûîoî®Bgóœ]/tžÍ¿¸ýøQ,ý|ùýÇ·_ÿóîýµQóûÛï?ùîæÃÍÝÍÇ/o®¼Ðž~†|¸ýÇ ¾¾{ÿÝwï﮽ÿöêæ>î%Ý/Ï$nä÷«ŸÍf+Øö·W“¶Ð³W¸È·V̶WJK¦•”²¹úéêÇ8ar×=:¥?¥ ¦…Êg -˜UÜLk9c™­-ŒâLk[D- >¥åÀ…Z.7›öuñû¾Ú½-–år]÷ÍsÁêä±)"ׄ 2‘Ø´ÉÍPˆŸž«eýK–‰ª»^HÉç¯ëz¹¦áºízO-w×¼˜Wþ¯Vx‘Íû–ˆOUïï6ÝkµóÏ=ºçÚ-]õk?ƒÛ.¢BËùí#î{¤0™åLª\ÃǪBîÙBæÀlŒ€ýsfµ&àF5Žö. V~¶„ŠÏ›¶§AW¹A†6Òä’e¹6avÕr¿ë궙X4mŠÌŽ–Ûw¨3Õ´¬ûGrÞÂʻ׺«&Vç™ÂƒãǺ˜XZç+ÿêÒ X‘3…èðŠn"wrh¢«ê±Üozºø%ÓÙ„À`]Jaû›vYnšªï>§‡Ü5Bëó ñ‹‚Yćù9=ä6¿¸vä¼æ…a¹àö¼¥¦\§-5rMZê‚Ž}`¬˜—´ò¼‘kBŒ±è}²|(ÇÀXEf‚±#©•¨åjEæÚuĘƒa4tï©~©ˆíÉ;Å[tÚ@v*lŽvên’ÕÀÍ.J³zGØ1 ´A—y:á@Ñ}à¯S1 ɈÝU^Wžµm<kóæ‡}¾›€¡œq•cNÀN V˜ˆØ²YM™¡eR™Î†(žš-ƒ€íõ4\•f¹´ü\®3p \'Ô
-ò&eR‡kBh1‡ÃO†ÅD1áÚ§BYù”¶|´žwð° sð†oÌ…Ø’3.3ñi±RD¥Ï.M!ÄyñŒý€ 9
-D.àÏÄÎsHݸúëÁEüµà:g&ãâ¼µ¦\§­5rM@l*´Îd®Šó2D® !†y K­øPŠ¡ÉŠZ ¡©£Ð‚w]hq÷–Ëê¹'âØ\á¶7WÌú ÿÀh‚ŒÎPðö š,@@‡ ‡§\Ñœ>5šŒ$9U6›£¨‚Òž‚ƒ²ÌðB]€CÂuë
-áèïþ©ÛÜƲ!ÀA^7âÙÝón¯«Ž°"8&£ôL n¯pœnîžf4¸KPùéǨ9ž×¡¦Zöu0%Ãä‘4yÆ
-Q˜4GÈ\—d€‚Lr´œTB‹#}YoNÛ®²ë3}ÞvS®Ó¶¹Æ¶»
-2VF–Abšç‰\’ ”‘iÆEº­c3Îe4c3†áÁŒñ"š1\íȃÃø`Æxá̉M%mÊo¯ /ÄÈ};ËÆãòh1¨èš‡r­œ0p‹XdHdp”ÓInœwpw’¸ Ñd\
-TA=å…%OÄÆ‹í½¹»‹(…­ù6†0–\è¡3 Û''£ ×Î9©‚””çj3m1aYÈÌÎﯭ˜·ÄS5åÃÆóÅ¥•I 3¿#fwߦôù×BrÃIpÃ>ïà½j¡` šýü¤je,— Âïã›Ó
-ÒÀXϧ
-)×éT!r¼éK¾èÞ€oG‘jXõeL({A†È5!Ä°êÓLHHRܯ)UÖóöÙŒ_KGÌ¢}ôITäk¯HÝà۶­sHÜA¬ÃTù ÅÖó÷ðÏ󵞒Ó/¶Ü†PåBJà/B¨¦~ lʇjÓ!•®in3¨›r÷–ò`¬,ìüÈrÞIG
-œ~/¹—-²MMHã×*BÊäÔèqü«êÙWŸà”|47GCV
-!¹†á²t½BÀî‰Ò‚¢võÊ•§¥1|Fç,¬ [MÔå$7Ü ÷yõY¨ÇVù¬Ñ›ç°µuºåy¦‹•
-âRá{³¹Z.5à9çs©ÓŽeS J¡‘>~ïçü~@HDãC•6F±PX…(Ñ·~½ûSø<.‰$ƒ2Y¨‰šÓ&Ÿn$¯ÄÆï_$¾Ù( T;R2°ZéXñëlù_/xÖ-J%äÀ‹@l{&¹On\a‚%>ä
-
-èpã¹Ý¹Fˆå¡h·"Ô3<"Ç^îa|mJÔC#Ù¦Ÿ:P1ôFä_ =©Å÷&|-?á¾”\Ç÷-ì*¼í|y8"7LrVdñƒˆsS+Éò"¸º¾ü-|'âºþðKk¸÷PÊ¢F±âÓœ´ì9Ý´ÒŒº
-é<àe\
-wª&4¸€gpý¸3>BzpïÇm¨ï¦æ¦=#­}$JÙœ˜“VÇý-á=Çr]7UhýxÔV™ »`å)d{mOÂôrN}ð³êOã4p&{30ªà4Òf×±½w=8vêP‰^NNå’ðß+ûþ8ôðå¬2ô¢qºÕ•AÖ¡Peú¨µ¥!ÌA”3¢ÿc–éNendstream
+1280 0 obj <<
+/Length 3338
+/Filter /FlateDecode
+>>
+stream
+xÚ­ZKsã6¾ûWè¶rÕˆÁ›Då4Éx§vœÄñž’h‰¶X‘HG¤ìx·ö¿o7€@Š’'ÉŽ«F Ð
+Ø‘ÚLÅ%Ë´
+GŠï/†Ïïà1¿_.*….€5žRàÞ³ßg<cÊZIDIÛõ ×ñÅõVÌ>´p Yz¦°ð"YÙÊȲ\à †û@e´c¹ÜlÚK®ç/‹ß÷Õ°Ç毋e¹¼„ƺ¢‘"ß"„?qÝób¾ïªµú–~»§jY?¼ÒC¹\V]7$èay׀ݠ <dc‘)¸$
+)™»sì|¬z?Út/ÕÎÏ{póÚ-=9\`Ãm –óë¯|©À$3™T
+/ŽËbbkg¹âò¯n ‚&SÚA°ÒhpH«ê¡Üozzø…i6Á0øðáø›vYnšªï¾¤Iî¡õåû 3}XŸÓ$wøŃÙÒA>3ÜàÆùE…FJuFSÕ¤¦.èÚÊZ€zI°ðg¹ˆTl ”¡3C>Ê*X”I¬Ô[®V¤®]G„£¡±Çú¹¢®¨§Ø}ÐS¢Û†î §ÂÔS7HZƒ]äfõŽ°“Ó9ºà·¡.Ô¹ øu"¦&)±k¢ÈëÊ“¶'m^}ãpÎw0’g\±bŒÃ Ø)‘yDlÙ¬¦ÔÐfRç2] Q<µÃ@$èëI¸ÂbËO[®)Õi¸Fªj€Tzcÿ@4±ÿ
+$ðw[þ應ÔèÙwEp¸kBðþq:j?ÔU»gˆ Â$£§=Îb(¥Áô ÊgØz!„ÊASp-¹ð®%ç']‹ÊD1aÚ§\YÙƒ¶|´_ÒøœŸçoø“qÉÄçùˆ–”>»5¹gÅÚÏ*rdˆLÀŸñ-ì¡V\ýuç"þšsÑ<kNømM¨Îhk š€Ø”k€MUœç!RM01Œ]hŇ\ UVD×á@p-Ø;r-8ê\‹ƒL੧αºÂ°WWŒú þ@o‚„NQpxàMÀ Ã…ÓS”À‰þ\o2âä´WÙlŽ¼
+r{
+ô^ y Ñi0¢öO«²?Îä‚Zس[G¢ã½‡ #¤CR‰Áæ£è¢8Dy°ÚØ­¶{V‰œô¡³ÛßoëžÚ^›r[/‰àÃÍOÔK' ±G»£ÞmÙõ•oÿ»mV0ò¸ @
+¶Eœ‚±Þ(y ÀóªrÁô¶„î$ÜÉÃÕC·;e†^ÃÎoÚ¾¢Þ~]ö‘°}©›Gê?¬C÷%™AèwˆÊƒ]ƒ ®ëñ¨àˆþág]ÿàÆFNç€À!¼ë¦C$»1oðºê(‚ƒKÊ•ž)¸eÍáÆ4¸{ô‡Û3‘~‘N8Íñº5Õ²¯ƒå™<âÆ°¬À
+ô<U;Xi‹¡ÊB2;¿»´bÞMÕ”÷O·Vy*XXù‡2Þ„œ,dNZÈAT8 n,’yÚÁ%{ÑBª$ûåIÑʘ(-@ „߇W',0=—›=§|äèëNë²™`K FJäîŠs,>àš&Ö™1j´lr¼©UA0_'á2ò½ïö ÏWzX¶ûÐüDîhµ_†ê—X¢3C¡öÁ`lÄ@Éêf‰wkƒf
+¯Y2@œÀÀ¦Š¢*âÙ°=D»ï«Ê~óMè@—…¿%-DVËõø¸ö¶|õÛþñÔvUè¤ãˆ»)7N»mÉi¨™ºqê8`{RG+p,Ü–HÚ&¹®4ðíûrù[w:8
+RyˆÁÁ¶MEþV¨
+Åóñ»>gñ6"ï«´Š)Â*ø‡¾õûÝBæq2$A TÎB6ÔœVvü8)y 6~ç"ñmF‘lAøhÉ.ã÷QXæÇOV ·ºÆé¡„èwb†™4LÕÒ‡5.%A['¹…\9 <µ;W±<¤ëV„L†GD`ÛËÑMÆW¥Ô{(ÛôóJƒ^©ûÞçECjñ] ¹]ËO.‰×ñ »
+¯F'_DÚŽÈÖMº“,~qni%3S#×—¿…oC\¥~i÷N
endobj
-1239 0 obj <<
+1279 0 obj <<
/Type /Page
-/Contents 1240 0 R
-/Resources 1238 0 R
+/Contents 1280 0 R
+/Resources 1278 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1218 0 R
-/Annots [ 1242 0 R 1243 0 R ]
+/Parent 1258 0 R
+/Annots [ 1282 0 R 1283 0 R ]
>> endobj
-1242 0 obj <<
+1282 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [213.0783 523.2777 261.825 534.0621]
+/Rect [213.0783 447.9822 261.825 458.7666]
/Subtype /Link
/A << /S /GoTo /D (dynamic_update_security) >>
>> endobj
-1243 0 obj <<
+1283 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [398.1622 402.1714 446.9089 414.231]
+/Rect [398.1622 324.1411 446.9089 336.2007]
/Subtype /Link
/A << /S /GoTo /D (dynamic_update_security) >>
>> endobj
-1241 0 obj <<
-/D [1239 0 R /XYZ 85.0394 794.5015 null]
+1281 0 obj <<
+/D [1279 0 R /XYZ 85.0394 794.5015 null]
>> endobj
366 0 obj <<
-/D [1239 0 R /XYZ 85.0394 237.7961 null]
+/D [1279 0 R /XYZ 85.0394 152.4569 null]
>> endobj
-1244 0 obj <<
-/D [1239 0 R /XYZ 85.0394 215.2797 null]
+1284 0 obj <<
+/D [1279 0 R /XYZ 85.0394 127.9318 null]
>> endobj
-1238 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F48 885 0 R /F39 863 0 R >>
+1278 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F63 1038 0 R /F62 1035 0 R /F21 690 0 R /F48 925 0 R /F41 910 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1248 0 obj <<
-/Length 2570
-/Filter /FlateDecode
->>
-stream
-xÚ­]sÛ6òÝ¿B÷Tù&DñIÉ““89u7u|ssÓö–(‹‰TEÊ®çæþ{w±
-ZŦ_³â
-Řøˆ8Ôá"ŒbLê½Ëñ°è›GH#±I( BÛS:l×S"vEʘ¯šÅâpŠÀIØ|¨šÄ¿®jÆ-?4Ã]Ëgt`#™W3žªãnr@V%L§"x_QP‚¾Oã1þ>ÆãÚÎ0~fàH»¢þê4*Š*G—ÆÛ7EÓ‡’ºp±ŸFmö™Vúí
-~_‹è^GûÅö´®dP?©+É´¶O6þ d[¡hÔy‚l®ß4á•!”ym(Dï1·º„…KÓW¦Xߎ-Ýç.ã®óyÓ>qÎó]“¾bqûÎèæÐþ-3hÒ|‰D!6ý|ý×ËØÔ·2ÉDH°^ip )B™C˜1: í»ŽÓL;² ä’¸»‰º¯H$PL´3L™ÇìiP*>¿;zúwú)îô îô»ÞwXpRˤNãß)êb'‹ðY Å
-é8êô^ˆ±ì´@éIZ¬&ú‘
-ÕkÝŽ! ¯Ûu1/šƒßÁUO,ʱȤ ã\‹—º1
+1288 0 obj <<
+/Length 2741
+/Filter /FlateDecode
+>>
+stream
+xÚ­]sÛ¸ñÝ¿B}ªÜ |’Dòä$öÕ7_Îq§Ó¹»Z¢-NdR'Jöe:ýïÝÅIQ²Ótô@p±Xì.ö”˜pø‰‰IYj¥dV3Ã…™ÌNøäæ~8' HIëÝÍÉë •M,³©L'7wZ9ãy.&7ó_§)“ì(ðéûŸ¯..øÇõÙi¦§7—?_&ÒðéÅåOç4úáúìãdzëÓDäFLßÿýìÓÍù5M¥žÆ»Ë«±ô8@ôúüâüúüêýùéï7?žœßDYºò
+®P?N~ýOæ ö'œ)››É¼p&¬•“‡m3Z©
+\Ví¦¬“¦>MRΧÿ¦‡a)ËXþ–Þþóå„Í!˜5FŽ­\5ë „TºGí/NI1íÉÁÛk‘öh¿¾
+dÊ¥v;=UË%(Ž ¬‹Ûe‰c5Ý,JÖѵåú±\ùBñ…£r×x”HáòÍóùúTäÓ²mýÒÃ+|³Ó¢ž¢M2#¬¹#HQ I‹i÷µ>³EU—dhUMϺÜÐ
+ù´ð›p¸½³Œ¥\³DÇC§„h‘K«<¤\°\CyA–Ìæy>¢“H1é’Ü¿"³,ÏßíLþ¾#0)1¤ %þLFŠÏ0 8LraûL¢u›4ÌfiîNqµ{:=׃ˆžj%^ìzÒʬçzTDê­#8Ƽ)½iPÐ-8OUà KVźØPàMdj™’ý
+tï¤WÄèè ­'gXÁà X¶ aÝ–égzØ×*89 =…Ö·%-sBºuÞcwîăa«€×qS~À=»ªðþÙ/B|Ù°“ÌW%ôzï­hI‹…†¯ž%p¼”0ó²­h¥'L†Ñ)À¼„ùÛ¯Ã"ÈÞè‰}Ü.7ÝHØÔ6!P½8lf""SØôܹãt|•!Å—sôMRÔãŸÚþ«‘äšØŒ)­ò~¦îñÓ­ù;ùþíX,Ú_x¬œ‹7óÛüÍ›×J¾ßá%=„â&öŠû
+ŒôâÍ:;ÇÀ‰.pY=W#~A<
+k¼ú„Õ΢B¼áhÀ"QdÁÉÊC\
+u€šžNM8³¢Åè_ÒTïd´—D_vs$•ßÇ)¡ä¾8rÕPùlhGµŒùÑÍ©•Ó†lù¡øRiCb»4Ö…¸S Åï¡8t¬ü}ÆAê¦.¿Á~ÿ‡Æíå!bǾµûU²i¨“SÁ¡ŸSši•eñ¦G@CvÂAg¿@ßâ Ÿí
+ý}B‰j$Ð
+:TAÕGáʳú¯šøR7OÜ¢nŸ—š=\SÐ+ôP­/PUf\M£¢‚<2‹KJ-õ1'ò1ª e5SêËJÚf»ž•#ò&»Ÿ1ãyb4J}­RÓ¯Yq†b |ÄjqF1íÖåx˜ôÝ#¤‘Ôd”F!6•Û5•ˆÝ²æ«&E±…x œ*pï*f ¥«šqËÝp×ò
+ÌKfÐm*è
+$xúI²àÀr $4]C&˲4=fЙóœ7•óh¸kbÏ<w† |£ ÀUÓxi\U Ï5øvóà%«Wëê±Z–÷Ð’¸zÕ-¡(ÕÅçÒôùR3cEà&^íÍ3¥G¼wNÇû¢C‹.rÒÕ«‘ !À§Rvd¤—LûTmÎ2£ÞèUa~ˆîv5‡ än
+.M_]˜b};vçV8pwYÎ6ñŽsV®7EÕ¹‚n}gt³kÿî
+hÒ|‰D!¶|óüõg/cSß²Ë$áÊ«` ¤ev`ÄèLÄ{ ¦™gvd^Èeiwu_‰ÈSí Sæ>{”Š–=}ˆ;}Œ;}€;½ã®÷ &…
+ÇÞçãsü€GEiÉ5Ó¡ó•Eˆ“¾AlbK| pö &?¨ß,c2{Îí;H‡µ^”¾{Z¶P(Uñ‘ö™é•\0¡¹èq³S±T^Å?CïŒå¼Ìé»/Àªz»)Ý…ƒ´áX†oß0ˆ‚Ñ«?µ‹f»œÓøÖ#“ëÎèá«2eŽÑ<í—eE¼ÅÄ6¡.ŸöNœh97ûϹ0Þ’H$vè¯PöàÿFtÎcÖùî¿Uìþs¢±¶ÎåÓËrè퀈g
+Ucô¾éúÿ_ì³þ_ —Òrendstream
endobj
-1247 0 obj <<
+1287 0 obj <<
/Type /Page
-/Contents 1248 0 R
-/Resources 1246 0 R
+/Contents 1288 0 R
+/Resources 1286 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1218 0 R
+/Parent 1258 0 R
>> endobj
-1249 0 obj <<
-/D [1247 0 R /XYZ 56.6929 794.5015 null]
+1289 0 obj <<
+/D [1287 0 R /XYZ 56.6929 794.5015 null]
>> endobj
370 0 obj <<
-/D [1247 0 R /XYZ 56.6929 388.1985 null]
+/D [1287 0 R /XYZ 56.6929 335.0859 null]
>> endobj
-1250 0 obj <<
-/D [1247 0 R /XYZ 56.6929 358.3469 null]
+1290 0 obj <<
+/D [1287 0 R /XYZ 56.6929 309.7244 null]
>> endobj
-1246 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >>
+1286 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1253 0 obj <<
-/Length 2610
+1293 0 obj <<
+/Length 2523
/Filter /FlateDecode
>>
stream
-xÚÝZÝsÛ6÷_¡·R3%Š/‚Äcš89w®NÎQ§Ókû@K´Å E*"e×ýëo P¤BɹKn™p.€ÝÅo¿(‹‡b–%Œ+«g©Õ,á"™-7|vïÞ\ϦxÈõýââ»×*Yf4³ÅÝ`¯Œñ,³Åê×èåß^¼[\ÞÌc™ðÈ°yœ}uýŠf,=^¾½~}õ槛óTG‹«·×4}sùúòæòúåå<Y"`½ô;œXðúêï—D½¹yñã/næ¿/~¸¸\ôº õ\¡"/~ýÏV öœ)›%³Gp&¬•³Í…NK´Ra¦ºxñ~ÃÁ[·tÊ~=HÆOÄg+$³6ÑÓÇr¸ÅŒVöô^´ŽÃ^ž +Æ[®×
-¹ïp8%óÖÈ#?Ÿo·.szòì Í8Ypâø ðceÔ hçêsTòÉ
-Øû|MÊSa$É$ø”°Ï„£ÁÆBÕ0b
-Ï_7í~;p<7St]Yßà µänbËÒÓ}ôÂA+p€^7r#
-m³D—ÿ€ÿwÓS.2¼å/Îÿ¿‹éNÿ;šú§\Dc´àÏfÚDƒ•2_ÓEð3K–ùº.2ÜùŒ‹$\c2"¿_”óªm&²¨  €ìvyÝÞa”/\=ŸJS(¶´ k}2<ÎÒ¼:õ,àmåÝsù°ÂUâWœvá h¾¾{Œq(¹>ÀPLÔóµ‚. KpaXŠµ çÑ?›º ‚{1–È]P±kX Û‘S&z܈z
-T2î«æ6¯hª*ÛŽ(w“ðöêg†ä8Y 2¬,u¾)h¦-v#éožÖÒJ?ÀÀåÚ¢ö ×oW¯!z'ä÷Eë+qˆ7=oˆÇuQ.ûCk‹j@¿óâ­ivÙlŸˆ"LŠ
-€k‰iòIË£uQm=éð Ï¢n÷Á¬Ò
-om|šSO`Iw·jíÙPÿ*¢>îËåç0ny¦…ï ¿IMkAż¦ '½ú^Ô«»É6£öaMŒ ‰D„,3öˆ#'І©</SB²vvkÞ—Eí§ü3Ÿ8EzHlîú?=Kjý&$ªãä
-Ò!9FÑÏkg «& R&e‡Fp¼§¥77úXZEÈT”"蚉3¡äÍd¢úraâP
-øÅÉ|(3ͬéù|8ä:{.´Õ&ÿ#é¯7îÊM—õ'É,m¥Ñç%é¹&DA¼Çò4ËrUßBãzLRPÃÚ(S©ñ3IM$¼®šúžÚPDb^ŠX ÖO´rSÖû®ðÓ„&¤nÃ9ÅnSƬä3"ãªÿ[}2„äláÈ€Iä
-ö–n|¼ÜG¹ÙohðWûb¼³Ìü±ùÓ`WÍÕщçÑ=ŠÍ ±9¦×4®I4•«jMB!4g%é¹&D£I0¡ d9 Iôhc4 DÇBÐè­øÜ:Ù›ûïhÖ¢G–è‘%gt¨í \0öà\â\ ®•ò?—9…-qÀÖÿ Zл.Œ9­!×ihõ\§U³ï>Á„ms^”žkB–1¶,Ó08æí¾óàŠÄgr,M- ‡¡Jº"@BÑÊq»hET¨§SŽê¯wPôJn¸d(ËÎí¸ôûËD+PÂYñ ¤\g ¸NG«IHA‰ùà¼(=ׄ,cHáGÅôH˜¤Rœâ‡x´‹WðœˆW°ÐÅ+°Ek]¼âb¯x€R.^q/g0ÃRˆbc€Á&‘˜ ‘Ð⹘5à:°Àå*öbWæUŒ?=Å;üìs ,ÙĖç¬=ׄ #`™„ɪª‘ï«ü­¦ä¡a–ª)0½1›U¹Ì+×Â;'1½ÜämçLÖKjƒáé>h¬ˆ¡q¿½ÁdyG>4ÒÙeî¬÷›[ÿÅmC“£Ô¡Ô"l­IæÌFø}íÞ¡LK]æË5Í·û@aÜSoTNº~?å¿’ÉŒ>œàœÿ¶«úIËyœêè¿[]tÍî nózõX®º5›ú°˜[èL’¾ûh‡dø1æz)€vR`‘v$^ü¹›^)Ÿ
+xÚÝZÝsÛ6÷_¡·R3%Š/‚Äcš89w®NÎQçæ®í-Ñ'©ˆ”}î_»X€"eJn/¹¹›Nf¸À~à· ,fþ‰Y–0®¬ž¥V³„‹d¶Ü\ðÙ=¼{w!<O˜â!×÷‹‹ïÞªtf™5ÒÌwƒ½2ƳLÌ«Ÿ£×yõaqy3eÂ#ÃæqbxôýÕõš±ôxýþúíÕ»Ÿn^ÍS-®Þ_ÓôÍåÛË›Ëë×—óXd‰€õÒïpbÁÛ«¿^õîæÕ?¾º™ÿºøáârÑÛ2´Wp…†|¾øùW>[Ù?\p¦l–ÌaÀ™°VÎ6:Q,ÑJ…™êâãÅßú oÝÒ)ÿõ<±Î˜°Çï+$³6ÑÓb9œŠbF+{z/ZÇa/O†ã­ÇkŒdFeº?^©fB0›$Ï×r–
+8ÖT)Æq
+Ž÷ì-KŒÈ'8K”ÅÇûylD´€ÿety|°¥F˜,cVd(xöy&×Ö*âÐÎÒƒÜÄwW9{Ó€=³Iaßx°±³ÈÈ`…LOµœ¥<.k‹u1µÔQ¾Z튶ŊÚm±,á\+z[Öôì€ÝùÀ¨áÖJ3ƒ;’>ï‹`˜GOqÛìwsÉ£eX6ÔȤL*\×l»²ñbJ¯Ç¾
+ÜÍš n›nMÔOo>g^¯PÂ,–\° ð7‹é0)0¯Of:è–DeÑÎáñ-N›è•Üw8Hœ‘ŽyëòÈÏçÛm…ËÜ»¦®ž<{C3Nœ8–Q¬Œ:¡í\="cŽF>y`»³ˆKƒ9¼M³h7ÿ‚Ñ͆Æûzë÷|(«â݆ӽìŒÚ¦
+‚6¦¨9–¯´úá=ׄôqm™L“#ño
+lÄkW&e†ýŸ’it_5·yESUÙvD¹“„·W<3”ŹÈ"(a}`©óMA3m±{ Iò´–Vú&.Çеg¸~¿¸zû¢7 !¿/Z߃C¾‘zCì<®‹ºxpu®´h¤ð;¯Þšf—Íö‰(¤€å=ð95ð
+áZ¬¾Å2Ÿù(r@I÷Q v9Ø
+ô[±"Ž°~$ï/éúã8¨å!Õ—{®
+"B•GÄŒH¤F*ÏKà”P¨_À›÷åCQû)ÿÌ'DB¥H…ÍÿsYRCî7¡Pµ˜'7
+õ·Ù#[áÆŸi;º—¶^ѳ–Ãõ;͸=Ö†QT¨ ¿$drì3¬št‚J™H”:Áñžv>4ÝÜèch!SQ‰@¢k&df’e2Q}»0!
+Ù é>»ù¶ µ.ïuê¸Ô­Š»|_y†²=*ÅfÛùbçÕêžðÚ—¾à‘F»±,sJmað‹“õ€Ï¶Ìgëáët=ì¹ÐW›ü_q(Çx¼qWnŠ¸¬ŸGð´•FŸ×¤çšPe9ˆËÓl¬ËU} }Œ»]êP"€öF™‚LHjºBÂ목ïéŠHÌë@ÑÕUƒ…õ­Ü”õ¾+ü4¡ ©Û §Ømʘ€•‚~Fdãè®!þV¿ Br¶ 2 B¹††½¥oçQnö<äÕ¾ï,3/6쪹:’xMp?S</ iÀuMkM媚F“T7„³šô\ªŒÑ$àN
+ýaÊQýñšAÅ — eY¹ý“f+¡$“ 4ç!5à:©Àu:[MB
+Z$¨çUé¹&tCÊ}S8Ræ
endobj
-1252 0 obj <<
+1292 0 obj <<
/Type /Page
-/Contents 1253 0 R
-/Resources 1251 0 R
+/Contents 1293 0 R
+/Resources 1291 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1255 0 R
+/Parent 1295 0 R
>> endobj
-1254 0 obj <<
-/D [1252 0 R /XYZ 85.0394 794.5015 null]
+1294 0 obj <<
+/D [1292 0 R /XYZ 85.0394 794.5015 null]
>> endobj
374 0 obj <<
-/D [1252 0 R /XYZ 85.0394 460.4475 null]
+/D [1292 0 R /XYZ 85.0394 437.1956 null]
>> endobj
-1006 0 obj <<
-/D [1252 0 R /XYZ 85.0394 437.5053 null]
+1046 0 obj <<
+/D [1292 0 R /XYZ 85.0394 414.1392 null]
>> endobj
-1251 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F62 995 0 R /F63 998 0 R /F21 658 0 R >>
-/XObject << /Im2 984 0 R >>
+1291 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F62 1035 0 R /F63 1038 0 R /F21 690 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1258 0 obj <<
-/Length 3287
-/Filter /FlateDecode
->>
-stream
-xÚ­ÙnãFòÝ_¡·•Q§ïãq2Gv‚Ídvâ`Mò@KÔ˜ˆD:¢dÇùú­êê¦HŠ’=ÈB€ØG±»ºîª¦˜qø‰™±Ìf.hf¸0³åöŠÏ¾ÀÜwW"Á,2ТõíÍÕ7ï•›¬´³›uo-ϸ÷bv³úen™d×°Ÿ¿ùñãûßýüùõµÓó›?~¼^HÃçï?üëµ¾ûüú‡^¾^oÄüÍ?_ºy÷™¦lZãÛßÒH Ç™E?¿{ÿîó»oÞ]ÿvóýÕ»›î,ýó
-®ð \ýòŸ­àØß_q¦‚7³Gèp&B³í•6Š­TÙ\ýtõïnÁÞl|uŠ~Úxf¤¶@IÇLg¨,˜€œ²,pÙYŠ)"' ¤q[îªb³øã
-ü锂‘ki™@ïÑ—â›i± `/;„Îðr,w‚ëOl¬ñó*
-¿’܃AK3I‡<œTuG` äÔ&KˆÏU ÓÛªNज:áC¥'ðrÕ²‰s)Lñ=ž$Òp¢n†Fî,¿ÀqIôú´  j<P@êíÇŸhd[¶mñ%ÞG›
-£É 6‡ØX–ýÑ%ɽ’IOs«©3IÐ?À_¿P2ÓÂd{r_,O¸-íˆïQ”•àdµ
-Ì)îR¸î- éyß´mu»I U™ŠóôH4b“r(D€/•zˆ…
- ¸J»o›Î$C¯ŒzŒFxYGß æ·‡}B.½ÔÔ›'jµ‡ûûf·/WÉXdÄȧ£<‘aSìÁ㊇y]>Òd»)ÊÔŒ"vc¡$øÎ
-3ŽG&ðáHˆ0+‡9ÏþLÀèY±qœÓ,0CƒMýX$n€;Ô>œQuØ
-íû$Nü§™0¥SäWÂõN´:½ä’¨
-ÏbÓ"ë¹êQ5N ýð™ÄˆÜ&ô¨–q¨i›uúϵ1 C«æ±¥¥êˆèý¾Ž°«r]6G$&Nìt6èçO/Ÿ;½cÜq×7¹c?ÉŒ _mSu¢Ãî‰b…Û_4pè]µZ•uê§gAû´üѠ«E[¥Xäöé…AˆTèQy8!Óf2k»XeñÉXy6ø0ÞUÚ]>úP烪OÜvQÕ'Q߆켸{5±ý êY(8ó`ÿ(€¨Ù]..ª†6æø¬êÛæõ:‘ÿ€V/X‰Ý»ðC+†-ظM»k??Ô5e0HNÀ !æ˜(™
-³'«O«RÒ3­•¸ŒE5Æ0‰TLCæ3ă(,x¯4®4ÄSiHð£9ÇÉ"¶z²»w%YÄ¡Ûy"{ƒ÷wÉhF²z9NÖ+!~‚
-U8#TRƒÎ[‘Í·œ²Ù,8g{^Añy V8ñ
-C±ÇNÀAåý v£Fï”™3ãÝ(À>4ž|†>f£Ï€É.¨GŸ!]ò0kk"‡¾8B~
-††Þ¡·¥HÞÐ; °é3'ˆ‰•OiÈGÕ«\¬é…Ljº—}x5@q¼IÏ‚¦Çh|•ÐØ|"°€âЙ
-$ÂVþøqËßkÈ䘙$öŽ;9®{®‚œÎ˜±Åƒ= ¬•ÇË4;ë­Wg S,•H\Tp,ºÊNK‰:}G0‘[QùWY`ðÍÞwÜWǪÔ}ªýuRÓšúÀ¼Þ]L|Î
-!N®€¡! >IÝœ¼3Œlª6Þ–E¨z*G d¶ûîãŎتüʺ¨6mBzò ±Oè¾¢‚aôÎ×ešù ôt•áÙ
+1298 0 obj <<
+/Length 3384
+/Filter /FlateDecode
+>>
+stream
+xÚ­ZÝoã6Ï_á·s€5+~Iâãv7ÛÛÃu»·MqÀµ}Pl9jK©e'Mÿúû ‡”%YN²haÀâÇÎ÷Œ$g ~rfS‘:åf™3Â&ÒΖۋdv‹¹ï.d€YD EêÛë‹o>èlæ„KU:»^÷öÊE’çrv½úyž
+%.±C2÷ç¿ûéËÛËÌ̯?þðér¡l2ÿðñßWÜúîËÛï¿ûår!s+çïþùöóõÕžJÃß~üôžG?ÎlúåêÃÕ—«Oï®.½þ×ÅÕuw—þ}e¢é"¿_üük2[áÚÿºH„v¹=¢“霚m/ŒÕ­ãÈæâÇ‹ÿtöfýÒIúÉD(ª *Ý#`.…uÎÎ2ëDª1ElÖ¸R¢æû»’.ƒ%²·D¥XBh[îªb³øýPîž»bôÏÈ2¡R4÷ûª©ßà
+d[üQm[îÔ‡í À=DD–P¨Ê°¬-ë=ßG¸¶\6õ
+LUlã›Í`ˆÈ­… I)œµÊ#¹*×Åa³gÆzTðT‰8a­™”é,“Vè\egXÁ@‹>sBN‰r„‘—î6:^Ê\¤/œ`&ï³H*-R#õðôÄå¢
+¨|ž{´>#©‰–ù©hÜG‡¦F(cÌ@0øÀ¶ÜóyÌ~ŒÙÑŽý˜ðìǘ»<ìv—2Ÿ3ïý6„A·fXžIAX8î÷Ó:?Š‘Ön^l6Íc¹â™}ÃÏ›’ŸÍaßî‹zUÕ·zÏEýÄÛꡬyn_mK2(™ Ô¤yÇUÃçÉfÏà›j[…Ý< üd¸5ÍãÖt—$^‚ ß
+Lñ‹n¬ª5Ý$\¨勵o¦|—ÎDîLô^Àc±Á)Ë,ü¦´”4fJ/DžÀA3Ìšö›T
+ WÓ)…`16p§(òõ´Ø9ØË¡3¼Ëü{šŸØX›·–°,÷0ha&èPŽû@Uw !à6[Bz®JLo«:€³rz耞àåª÷Ò’˜’÷xH“ä$êv¨ágù¥÷Q|ÅÛàZdTýµÈ€©÷Ÿ~ä‘mÙ¶Åmõ3Ø|cYöG—l$W¼$’žçVSwRÐ?ào^)Ni£=¹/–¿Ü‹–O¤õLÄtp²F ‰rŠ»’Ù÷–‹ð¼oÚ¶ºÙPD`M˜çG ‘˜”C%k¿Vê™KípNß6IF¯ôzLFxYA½oÐó›Ã> 5õæ‰[íáþ¾ÙíËUði ²r¨E7ä†eÈ°)öpÇ´Nܼ.y²Ýehz‡ÝXhßy a¦qÏ„$†A4â<LçÊ1—‹?0yVjçŒpÂò`S?p‡&wgT];[aò>‰ÿyÆM)ÅùµCbÔ‰V§—t·ü,6-±>Ñ=ªú ¢=ƒu!õ÷ÕÒ5m³Cÿ½´2´j[Þª. @LÏ^ÈíaÁ5#1q{°3KùnŸ‰$K²¾ÉûIa3÷Õ6Õ8);ìž8V¸ ñEƒKïªÕª¬C?< ~܇íK‹6f7O¯ BÝ mw B¦Í"rÈ´K¿îË-Xy6ø@fIq•y>øèC>:¨>qÛEUŸD |±óÙÓ;¨‰ãQ‡4”üÚáù^
+ª¯„q{_úD
+ÍÃ==CœO ÏkÅmY/àg- Mb…7Ï€ôÎÁ“bÒ:gÁk•L7hQ§§ÕñºåQÁ|cÓ«¡Òö¦–>“¢â aÑö¬™<νT èCW jHx$z§µ
+±æäBf©rž“ ÏÃhÕ}·@²ÖîÛ(ü,ÿX"è ü_ùÏ95«ÍfhòyÏ5…Ò‚ýu\7(% U¥S ÖV#Íî"«W©ð9)4
+§V/Haê)ŒPC)Œž¬>-L©\£åóXtPh “H- 2Ÿ!La™ôJCè+ƒ¡4$“£9§Ë"µz²è»wY¤¡›
+ –;ñ
+C±ÇNN.ϱ]Õ{‡ Ì‰°ù¸®ã}† õ`-Õ„Ï\ ¦É.¨—GŸ¡²à3¨º¼g8ö4Â~Jª‘wè)ƒw òlúL¤ f¢G¥ÇÄSŽ
+x¯%"\¬í…Ç„z®8úÈõ
+„æ_e†S’ø®ŠûæXšºE¤?O
+[S_9À•Ð Œ‰o¥¦gS"*±Û,±/°®õ ë"&ûÅkÒ"5ôÎ÷YD:¨ L†¼3Â8˜ì*oÉg¡Tîjÿ‰ÎÒ^™&ïѧ8†ž¬ó
endobj
-1257 0 obj <<
+1297 0 obj <<
/Type /Page
-/Contents 1258 0 R
-/Resources 1256 0 R
+/Contents 1298 0 R
+/Resources 1296 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1255 0 R
+/Parent 1295 0 R
>> endobj
-1259 0 obj <<
-/D [1257 0 R /XYZ 56.6929 794.5015 null]
+1299 0 obj <<
+/D [1297 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1256 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F62 995 0 R >>
-/XObject << /Im2 984 0 R >>
+1296 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R /F62 1035 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1262 0 obj <<
+1302 0 obj <<
/Length 3264
/Filter /FlateDecode
>>
@@ -4962,1687 +5090,1878 @@ Y$¸Ö
Ú^!ì<Óä3rô#þ]Ëïà
a·»4êåCÁÅß^þø¾Rã¡àÆÝóQ2ÞHà¶:¢Âà Òþ#I¾.Þÿn÷Àï!/«©‹/&/|Æþ#¤œ9?B—ÏÁ9ñg‰"„9ºý›ròÁÂoG×.~h`FMU%KõÌôA4´ÊF0Œ¸oÜ1—5*U¬Ð5„Ž>CÉè½ fžòõ>,ëŸ)°ƒÅ QePpœC‡Ám1áÇ*¡HE
øKè\ô¾æ7ïâÏ|³]ßOAÔÒv —ü0õè
-FèzAc“ÿYnöêäOy¹ÎïÖ<—oê}ÕN©¬Ö"Ý ¿+MUØRÓÔöOœÍ‘|6åÜ:äLV†ÚÒÈÍõQAøï°J Û×8#ÈÈCÂÐæ;¾îvQ-ZÍrWnû¢hÒ‡`r¢®ÒjÊ¿Nž–´Õqš¤j¦”Æκ¯I.ì\jÙqœYžfŽÚBòâ’^pH¦*FÌEùµ¸:Ù$Ɖd´ šÜ=p s;H.;ú G®qÂ×—-Ų7¼ƒzå¸À¢Zšl¤Íé®êN¹¡1;\}™X‹Î±–#$×¼1“bté‘Íû­˜ £} n‡æÐ>…N\IÐ$ì¨Ñ™ ½öl¥„¦†€ÐÄô†÷¹t½èMê`‘–*(üªï¾0‹ò_Kãç…-äðõÁ é<Ì¥Š+Àt
+FèzAc“ÿYnöêäOy¹ÎïÖ<—oê}ÕN©¬Ö"Ý ¿+MUØRÓÔöOœÍ‘|6åÜ:äLV†ÚÒÈÍõQAøï°J Û×8#ÈÈCÂÐæ;¾îvQ-ZÍrWnû¢hÒ‡`r¢®ÒjÊ¿Nž–´Õqš¤j¦”Æκ¯I.ì\jÙqœYžfŽÚBòâ’^pH¦*FÌEùµ¸:Ù$Ɖd´ šÜ=p s;H.;ú G®qÂ×—-Ų7¼ƒzå¸À¢Zšl¤Íé®êN¹¡1;\}™X‹Î±–#$×¼1“bté‘Íû­˜ £} n‡æÐ>…N\IÐ$ì¨Ñ™ ½öl¥„¦†€ÐÄô†÷¹t½èMê`‘–*(üªï¾0‹ò_Kãç…-äðõÁ é<Ì¥Š+Àt
+</ž¥×c£U/§?·LNŸ>áBZôߟ
+oü=s *NR§Ž~ÈD" y»w´õÂU…¦Gøöû2ƒ[Ê—Q¦áº' ùÄhä/- ÍRYªX-8±ÆRZ^2ä]²ìâÏ¥½òút2Êf
+E½êþ6’ ‡ "(”A?”ÈÎÿ,ì©ÓðËŽòÁ9ÖÀEí~Ç­uAöý6À§lHPÓP¢Ç†:ïn>÷«Ê%%¡Çà nBŸ³*̵¯òéýPq„£vÛqáZr> ¿ß#‚;íëeËésÈ™ÆG ÇÁ‚_C Ar¾CÒpD,bEîàhŸ©Éa꯽´ñO´&.°è‡¿ù/Áú?“ƒÔ\§©:“óÈˬÞ&Çš[ü]*UÉ„êÿºŽÃžendstream
endobj
-1261 0 obj <<
+1301 0 obj <<
/Type /Page
-/Contents 1262 0 R
-/Resources 1260 0 R
+/Contents 1302 0 R
+/Resources 1300 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1255 0 R
-/Annots [ 1266 0 R ]
+/Parent 1295 0 R
+/Annots [ 1306 0 R ]
>> endobj
-1266 0 obj <<
+1306 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [389.4645 200.1599 438.2112 212.2196]
/Subtype /Link
/A << /S /GoTo /D (configuration_file_elements) >>
>> endobj
-1263 0 obj <<
-/D [1261 0 R /XYZ 85.0394 794.5015 null]
+1303 0 obj <<
+/D [1301 0 R /XYZ 85.0394 794.5015 null]
>> endobj
378 0 obj <<
-/D [1261 0 R /XYZ 85.0394 376.6374 null]
+/D [1301 0 R /XYZ 85.0394 376.6374 null]
>> endobj
-1264 0 obj <<
-/D [1261 0 R /XYZ 85.0394 353.7581 null]
+1304 0 obj <<
+/D [1301 0 R /XYZ 85.0394 353.7581 null]
>> endobj
382 0 obj <<
-/D [1261 0 R /XYZ 85.0394 280.8507 null]
+/D [1301 0 R /XYZ 85.0394 280.8507 null]
>> endobj
-1265 0 obj <<
-/D [1261 0 R /XYZ 85.0394 255.5006 null]
+1305 0 obj <<
+/D [1301 0 R /XYZ 85.0394 255.5006 null]
>> endobj
-1260 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F62 995 0 R /F63 998 0 R /F21 658 0 R /F39 863 0 R >>
-/XObject << /Im2 984 0 R >>
+1300 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F62 1035 0 R /F63 1038 0 R /F21 690 0 R /F41 910 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1269 0 obj <<
-/Length 3076
-/Filter /FlateDecode
->>
-stream
-xÚ­ZQ“㶠~ß_á·zgbUEŠš>]®{éf’KºÙ¶ih›{VO–K޽ͯ/@€2eËÞ¦íÜÜ!$ð ¼b–Â?1S:ÑeVΊ2OT*Ôlµ½IgŸ`ì›Á2‹ ´ˆ¥¾~¼ùãYÌʤԙž=>Es™$5FÌ×?Ïu’%·0C:ÿÃÇ÷ßüíáÝm‘Ïïøx»ÈT:ÿpÿÝQß<¼ûþûw· a”˜¿ÿË»ïhHó_ßü3qJz\˜ôáîÃÝÃÝÇ÷w·¿<~{s÷8ì%Þ¯H%nä×›ŸIgkØö·7i"K£f/ð’&¢,³Ùö&W2Q¹”Sßütó×aÂhÔ:y~"M2©³‰Ìdt€F$ª,Õ¬Pe¢% ávnÿìö¸½¯`o²œ/=j^ù§ž¯lCÄòVÌ‘‡Î­‰ê[’ÞÛªãÁ ßîÜÞöUó‰$º×®w[ZÛÞÕU¿9¯«mX²ßX¦ªŽû¶eù­­kÖç•ÆÖîÉêl(S=¿B£ÀÉ,„HJ¥2¿Í×ö
-Y¢5QÑ­ý²XÙÕÆ-üÉ|lÅüDŠ’Åm³ž˜S˜¤ÌsÉ2{·:ì»êÙ-üÉ,¤‘‰JŽOhUW®é»‰e–Herž­ÝõUÛt„ª›Úur†‘BhPV%ZdÅ¿%¡E,En+¦p¤P‹¦iV»îtÝBÿƒòW× BëŽà’&¹‘z¼î£7³,ÐNÕö°¥—æ°]‚Í=íÝžACÿÒ‡ÏØ;x
-ïÀf¾±Ï< iˆZµ Xm+ÌÌR¿Þ
-!æÞÅÕQ ö|z©Øv²ŒmWÈ$×GÉx‡Æ{»[O˜" „Öà4MªýñÉüºIc©Ë&¤|$êíêspúxå²Ht
-/C
-ϜP
-ik¬ÁOÎGŠÜ>†H/TD"E~
-m®-?Èœ­?Ât®’BÁ•=Ràm¦Mlº˜tƒ"‹\¤#2+ÇòLGE·æ;<qW4zÜ@½¯h‚®~À\ò¼Ÿ!Ç µœl{òm 7x7î‘_TÛ]í¶0—÷Þßžs Å–Vo„çXêŠ%ƒÔø‚]âÆñ’–‰®ª0HMè0ŽÐ:£ÊÇJLÕÐâh¤¸††áº·kIÜx$T·íçîUUbT€1¬âœJ"”´á@áZ­¥Ûoé6¶F5Œ u àñ™ý!6ò6LŒsƹ,SŠp1Æzâ™LJ‘æÄa•lþµ[Yê À䔪ŠÎÁŽƒv4 _tDY|²Õž˪w%Âíë]Íp0Bà f¢Æ•µ½k<e)(#;KéýsU·Ë×Þu0«ÄÆ }WÌŸm}S<kºá! ‰©>ëN\î@”PY9ê@ÐRþŽ…kÑYnä,ù}íVt®Ö7mü¦ø(àâ—©ÆGA¤ >ÖoØ9†ÇW?*&/ ]b£¦LËëh¥.£}ò–Zí.â’{‘B){uñAjbõñ]Ù$Új¼<¤ÔÎáeÀ9ÐÞK}Šsà Î ôãû™Ù6²y9tÿ<å׊Ú&ÀdÜE—ƒ„mY`WxlÉß‘´u–À½X±<ᆢHJ¸G¾•­A
-=­Þ°|$uÅòAjº782~/‡ÂùêúƒÔ„£½feRdF5  ~nâòûØ-Å}àîŽ{Dæ†:¡Hp•®ûÀ9½îËï£L!}šEž<Cuª†Bµ qòªŠM Q9Ú8:ã:! ýg |‡'×-K$‡ ®bµ
-¾… þQ™k¨C±YE–Ù÷Q^¼…r0ˆâÖv,uåƒTˆï5”®®Yüzp‡‰Ëvš¸Â]×`šPa\Ì)j3Žt`œc!š´YHÔ»~ãqhŽ²Ãùû˜à[5@l«†#…b7¦äoïŸFq „J|߸šèî°Ûµ{ïç0vYzl×0È}*
-ýå:L#¡Ë( Bôk™³ œí¢âõÏQ
-÷G Uöµõ¡säÉEC`‹?ÖÀÃ.Ç_Da}üevO¯d¤ŽM |WQ‚YÇØèÝt;KR(JMävK"}X›ã´ŸÆëT¿
-‰4¡a:\ø-RcÝUœ\³£C=í¢•øÃzˆà\\œ  X"QÁ1ž:¥ç…oŽ ¼„ËLôyfxnûê9Â÷áʘç¥VmŽu¡á>Ü‚g*Fx¦_ѳi‡[mäöáÜNï¾í
-®OøkóÅD%R‘óV9K]@ò÷$g÷ýÒÙþ
-¸—{U‡AjB‰qI&poÕc-鱄ÌÓ|‘;ôý[Û°ðÖ¢Îm¼×ÃP¥£1a‘gÃ$ø]G¼­Ýöø¶í¦ü]‰”åð»]®´›pdðƒM±“æé TµŽj¯Â„ U”GHxþÊÞKüØľoæákò}û>|ó
-Ž+Mö‡ÿ‰á2§üSž À>Àÿù/†ŽN•ƒ#“Mƒ)+ þyƒ JáV•9!ü§EçªÿG)i±endstream
+1309 0 obj <<
+/Length 3094
+/Filter /FlateDecode
+>>
+stream
+xÚ­]“Û¸í}…ßê©U‘”(jú”¤›ëÞ\réfÛ>\ï¶éX,ù,y7¾__€
+]
+ e%ì …ìïQÉ|¾©Ë²~ö¡_IÓÇ \k\K@I»EE¸6ì.âèøEr ò‡WL ¾ÒwžGØÅ2K/Wmj~qMËEÕºCåDÏÍ'’Ǥv!µm üª†0L~ø¦O~*Õy”¦É+qrHuÙ©:ªNŠoêEYYL9˜P$T’\££šcäbÊD‰
+Ô˶ å±xÅ–TWl)P]:åK3ŠÓWD¼4¢’×X‚ÏÎÇ‹Ä_þtñ¨”Dˆì
+‹foý(Àg[ðT|ìôÔ3ÄÑLH`ÅÓN^Yºî½½mèÀ>äÀoH >Çþ}
+‹¸†K×0Ä£N€ DÁÍ3daŠ’>YLµÔø™p=9¤†d”Ç:›žQ žQr‡¢^+rìG_vÙ†'ò÷8Í…Ú³¹ä§"r÷•\ÜÓ\öQ¦¡ÏfÎVp±‹‚™Ÿ»h‚rsyGsÆ]½è1Núìy¬jä¼ãOOŒu´€ Úå\@ò´?çâ4ÖóOd(O”ge×)$"DsÓ'4„Ÿëc¹&°Ÿ‘0Ã.s­ÙE3ü€­ÇÆÝòû9~šŸ§DDÒìºÞщ
+… <X¬ÿÖ~ù tÉL¿Òy ˆ®|f"ß:{h—ζWÜžØ×èˆÎ%ËTMº‰àSm÷år‡DƒØn‚èß늉w®lµr´ÔBôlhÍgÄÙ° ¾×ng_Ñm›©/"*‹”ʻý„‹-€‡ùØœž¡‚w`2²q–Ãàûèâ½2çoá¸ÔWðÞÖ1=<Þy€ö¿®ì²äWŸ8Ó!Ü0„×á
+üÏÔÿÅTwnŒœ6™ü „ÂkN͹£ð_‹þ_j½endstream
endobj
-1268 0 obj <<
+1308 0 obj <<
/Type /Page
-/Contents 1269 0 R
-/Resources 1267 0 R
+/Contents 1309 0 R
+/Resources 1307 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1255 0 R
-/Annots [ 1272 0 R ]
+/Parent 1295 0 R
+/Annots [ 1312 0 R ]
>> endobj
-1272 0 obj <<
+1312 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [347.1258 528.4439 404.2417 540.5036]
+/Rect [347.1258 523.0755 404.2417 535.1351]
/Subtype /Link
/A << /S /GoTo /D (journal) >>
>> endobj
-1270 0 obj <<
-/D [1268 0 R /XYZ 56.6929 794.5015 null]
+1310 0 obj <<
+/D [1308 0 R /XYZ 56.6929 794.5015 null]
>> endobj
386 0 obj <<
-/D [1268 0 R /XYZ 56.6929 656.9897 null]
+/D [1308 0 R /XYZ 56.6929 654.3432 null]
>> endobj
-1271 0 obj <<
-/D [1268 0 R /XYZ 56.6929 634.3533 null]
+1311 0 obj <<
+/D [1308 0 R /XYZ 56.6929 630.8121 null]
>> endobj
390 0 obj <<
-/D [1268 0 R /XYZ 56.6929 210.4224 null]
+/D [1308 0 R /XYZ 56.6929 200.5802 null]
>> endobj
-1273 0 obj <<
-/D [1268 0 R /XYZ 56.6929 185.1361 null]
+1313 0 obj <<
+/D [1308 0 R /XYZ 56.6929 174.3991 null]
>> endobj
-1267 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >>
+1307 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1276 0 obj <<
-/Length 2555
-/Filter /FlateDecode
->>
-stream
-xÚ­Y_sÛ8ϧð½)3•Âÿ’¦OÙ6íeç6½KsO»û Ø´£©,¥’Ü4³sßý
-»¨M‹Á“\ká„Wv]ì*0‰ç&*;úFß½&‘ ZÇ.¾–ÛÝiíìt¸Èè»*ž=禙bRLõ—{Ý×kêé¬7¥oH={,ÊsíW{páë²Þ8ïXðŠ¦ßž,šºzÆ)XÔ,—»–˜O¶&Šö ˆeSÿÁ˜ØìÚ¢/›š† §òè~«¦XÙ˜­D]®{ÛhB»ÀhÉ؈ ƒ“¶ÝÛMégBXØ:žú"<
-r*“špÆÎ(âI¸ÑEšœ'
-Ž@ÆÄO42hü–‘
-ê$“ó©‘žÇ{ÉÓ$•‚‡Ý¨]^˜R¦åÙwž×‡>üÄ=6»G»,‹Šû”+Ö)®
-X×pŠ+È%*K‡;làƒªýTEו›ÚzcüD ÷E½´ &5 $FÙôhÝ4u\ÛMá"0øÔ£^ÔŒÔÈ.¨Tó¾èÂ0—‘ —ý—-±›®¤²;Ü"
-Á“Sà Öaòæ%ö{’{)uö³NeÀ,V+Óyiïty å„Ífœ{z(qÆYèz×Òe櫘:ÔDÏ!£Á8DDy@VQ[§Ž•y>½}×øaökùË+Š2Ÿ^Éšj)Åônˆ Üç9§…Lr|°š¸ÎÙEöznMþÁ!)B½žƒü_¤d.¸yM ‰šõ?ÏÎHÇ™/'/ |tçRÛßÌØTusÿ ÎèëŸD´m܉÷€uJk”ÀÒ¿ ð¢FX (5©Åôn‹î Z'øX’Ì­a@©‘Z%#‰F) ÎöÔM&a¿.í£!I "Ȇ*zÀ®‘Få •DNÍÁ`¦35Tù8»Ç>Œ)½îýš‡7|T¶€o|ùN2ˆŽvs(ý†g0ªÑDý¹;õ?/@Û}ªò+\ž×£6øßM9÷Œ+`™ ñ]ï¸\ä¹V/Vt‚ÿÝGdÃ{97©a鉒.gIÊ3¾΃hö3*:Щ8˜ÆÁ‹ì§tAq<Ö<Sω4a©R D:`Èye&¹ÃcÅ4ž¨„|8“<6áh¥t­â·n~J…8Þ®C
-jñr‰ˆõ7Ó*Ÿ”ˆ2”ˆáLwºìï¾C±ñͪ‘4Hùü±©;Ç¡š{
-j¾½ùHm_à!¹-ž©s Ãhz|¦]s Q¦|¬¦4;G,'Üe㾫Žbؼ½uoK$µnÚ-½rBoñwôÍ–•hg®Â4¶÷XJù×5ì¤"©áAh%b?˜DÅ$¶|°kkjÓ’ëô‡‘XŒOzUäf'2ô¹”ºVR𶓸Þ/0gæ‚Cîw=ýˆÐYKÄü“58œiªÓ¶;â¦õŠ £Y"8Ÿ©dÝõá1„{âŠY|8âˆnêi7>4ÝŽnƒp¼—>~µ=ЈV|´K>À†p,Ô¡)’+|lÛrôt<ȼh¡&¿Þô›Žñ°S–U9,M@hEðÁÞfåå ØØU«±\ѶE½mš#?'îL©%å¬Slpñÿ‹îã>»e™8±>Ì@PÉÓÁ*\ Ú®%ä™HçŒÿ?SâŠíendstream
+1316 0 obj <<
+/Length 2512
+/Filter /FlateDecode
+>>
+stream
+xÚ­YÝsÛ6÷_¡{£gBß$&Onâ¤î\;Ç}jû@KÍ E:"ÇíÜÿ~»X€"%ÊI'™ŒC`±Xì?ìÄ þñE¡3&­ZäVešq½XnNØâÆÞðÀ“F¦tÌõÓõÉË·2_ØÌa×둬"cEÁ׫ߓ×?Ÿýçúüê4š%&;MµaÉO—oˆbéóúýåÛ‹w¿]æ*¹¾xIä«ó·çWç—¯ÏOS^hóEpdÂÛ‹ŸSëÝÕÙ¯¿ž]þyýËÉùõ`ËØ^Î$òéä÷?ÙbfÿrÂ2i ½x„˸µb±9QZfZI)õɇ“ÿG£~êÜþiYdºùÌ
+9Ú@Π­Ì"×63†pÿ`0A)få:ÙTÍCï: rØ YäÉõ Cå—jó°ÁŽI>—õC W‘DAýUù((Z1)ŽÈ6ÉÅš;×Kß½€o!’¦%ú_mãhdSVMïš²Y:Ü{Ø€”óÌj-¼5ëvKçÓß¹ÎQ'wÔ|¬êšZírù°ÅÃÍŽeLºržgy2 ÙÀ”Ž¹hÇùd#êˆl×åÒ¥¾[¹¯723\=¯BdšQarèÀaµœê@§ª-lýö³Ã=3»Ýê²l¨ÕGÆÆõíö#q&ÐX]u=µ{Bsö6BH0¶T?¾{š<ãº3x8²ðêãé§2‡{¡¢`åÖåC *qk<>ñk}w’„´žáÍmá=žŽðÆ/Á[#xäx£l„7Žxxcáâ=¼YžT§<Ùí$ŽàÆ7Us;Å6¹ºp<…MÚ¦~Â%"Œ=ññÎ5Ô¢3ƒÆ²mþ`LÜ>l˾jš‚”:0ø» ߺ-Wnj+Q$gëÞm÷$¡^ ´dlD‹ÐÁÅÝnÜmVBX¸&»§h"œ¤¦ ‹On[á=•R%¨+Ëæ‰{¬CsUuËæEâVDðÔQæÞs´Ÿ«q)Ô<È(ivèÔuû%ÝŽž¶cY™Pà† ”Á@Ðö½éÀ;1|ïH-/È#•ÍjßIu}{O-ZÉïš÷^ }Çv“×+{jÝ•Ÿƒû»%߉+<–O§œóã>Ï(hÌ<ïóÆ\Ç}ÞÀ…fw=˜ÛõÕ²{Öé1i¾¢ÄÀ5£Å¾Ûc<ßSã²Üࡳb
+ÛЉa¡fø° ߶5›„m0 Û Û‡m„§ `óa¾,@¹i#~w;EöMЂ6ö
+ ‚ëÌ•/t¡Z(ÂàÚ(N™Y¦%Œ ÞŸ¦†'×ð¿Hζ„JqQK›©¼P¸øâÓ€¤¬•Ä5j{kw»à //6bñ¦›c³¢ät,ÚÛ&Ž€@° ”(Âéx³ZŸÃÉÓ©`‰ js_»ƒ °
+„†¾!E‡–=8}esÈO\Œ÷÷ûŽ 2ÙÌXHÈÓ]ý}€£@e…ÌóçÝ¡²<BÒfa¡ÁMÆD}1õÚ»åö¾…ûð4ã&
+pý:"ß8)ì>=”5\Kå eÄìˆ3ºA$.ïÚ¶sADIŸÆ;LÝqrß‘†1û‰HkŠ¶›ÑlòB¯èš(^ÞLnCÒ;L1,O*˜ÇžPwkA‚$½qÄÇ4¢”¹Š<´Õâú -k4¬ã¿ï\½—fÔPî‡{¨ÑÖ†{Ù? ¥à”Gžßc>¬I^ùÑíÊff
+&~œ†QàW4Tà{å =0O+$)x<‡Æç„9eY‹}h}ïAÄc·»w˪¬©³K·Ró伄]ñ
+«TŒ– žÑ¿%ÀAëäŒè»­îhÐCz)±Vš«Fç-†eF‰RÇgeGÎw2cªx9LÜÇîLl°—Ò6ì{]qãTÄrµ¢9]àfÀP
+c¡‚ib=ô³ÉŒc1D­
+*bë˜À±° "¤¶oãû‘ûRbêò‚¼„âÓ` ŽÂÊø Q!5ÉÿöF ™Y|þ›˜ÎÙËâÕ¨ÿ™A&_
+õjnÇþ&ÁÀó’›WÔ‘(É·þGsÒÙið0—«+w>Š¶Ô1™^â|Å ÄÝ3t8£oxɦõ7ßÖm,«‘ËjüÞóa' ^£"0º)»4EhÈá8°™½<JÄ*™HTJi0¶¿£aRîËÒ݇×àD'‚䨨¢ÇIT^QIÍ©šÀÕôªÆ
+W؇9U½Ûóøž1cSíÊø6”^Ûdëè4‡²ox£ú,B4Ü»CPïð㥳ÐöŸº…Ì
+·çÕ¨öwDÎ=Š H§
+Í¿)ù†d1³V«g«9Áÿi5‡3öòˆá×.!-—Gj9˲œÆX…Rø(å@¦â ×Ð(rþÃ*¹(8Kž)äDž±\¡yÅœ äÍ2“ÔšÃ;Å4žÈTX ñÈØÆ›•áw‹í© w§õ}Ç@Ó_¿½2|œcDiÚg+CÎD&x®'•¡Œ•a¼Ðä-»À÷a¨1¾Z,’©’¾ïÛÆÿ2"©‘’ºo.?P?ÔuØÜ”O4¸„i´<¾Ï®‰¸SÝ×ÓÚßXN¨ËÖWMDŸyu啈kÝn7ô¼ £å?‘7ã0éaʪ¸ŒëÃë•RáY ©¶ÅÖð’ íqT¢{!ýØ6Ô§
+7_Û}͇ß'Uÿ?_aiÃendstream
endobj
-1275 0 obj <<
+1315 0 obj <<
/Type /Page
-/Contents 1276 0 R
-/Resources 1274 0 R
+/Contents 1316 0 R
+/Resources 1314 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1255 0 R
-/Annots [ 1280 0 R ]
+/Parent 1295 0 R
>> endobj
-1280 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [242.0197 61.5153 315.2448 73.5749]
-/Subtype /Link
-/A << /S /GoTo /D (rrset_ordering) >>
->> endobj
-1277 0 obj <<
-/D [1275 0 R /XYZ 85.0394 794.5015 null]
+1317 0 obj <<
+/D [1315 0 R /XYZ 85.0394 794.5015 null]
>> endobj
394 0 obj <<
-/D [1275 0 R /XYZ 85.0394 525.3716 null]
+/D [1315 0 R /XYZ 85.0394 505.3557 null]
>> endobj
-1278 0 obj <<
-/D [1275 0 R /XYZ 85.0394 500.6989 null]
+1318 0 obj <<
+/D [1315 0 R /XYZ 85.0394 481.5651 null]
>> endobj
398 0 obj <<
-/D [1275 0 R /XYZ 85.0394 129.7873 null]
+/D [1315 0 R /XYZ 85.0394 116.3495 null]
>> endobj
-1279 0 obj <<
-/D [1275 0 R /XYZ 85.0394 107.5853 null]
+1319 0 obj <<
+/D [1315 0 R /XYZ 85.0394 95.0296 null]
>> endobj
-1274 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F62 995 0 R /F39 863 0 R /F63 998 0 R >>
-/XObject << /Im2 984 0 R >>
+1314 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F62 1035 0 R /F41 910 0 R /F63 1038 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1283 0 obj <<
-/Length 3046
+1322 0 obj <<
+/Length 3061
/Filter /FlateDecode
>>
stream
-xÚµ]sÛ6òÝ¿BoGÏD ñIpú”æœÖkÒº¾¹‡¶´DÛœJ¤+Rq2ûï·‹]P EÙžK: Àb±X
-›Ü”]@n™Ö€LkøGGµhW`ÑZfÉ5IÏõòˆPþÜ׌˔©‘âYšr[×FמXõG®#í/
-ñ]#ÓÂ97¯i–ÁeD‘´HÌt.•ÐÅmÙ¯î§ *aSí´ûj ŸfPÁê\Ù‡'öP䩲JI7kÚ–ºé«+¥ž·ªîi÷@Ó4Ô²mƒ>ÀZ÷P­j<ÈpkáÀãy‘ÂJ´rã‹ Jo“%åx¼ÿ¸ýºÈ™©¾}h7íÝçîµJ3)äñ DÚëÖ_0+ýY<:=`3láäÂ
-ŒÜ%uîî\E6fÀ_ÆŽmÌ1]díP’uË‹F“ ;)äñ‰–°q`½â)Ž¬Ý€õ'GÔ¼…¨–µN.J8³´ íØÜ m"ÍúÉÎQ!Ì‹”†P: n÷] ßwÕæ–N΀Z¦íXå¡W¹D•¥HªO›zU÷3ìXj@}ZpŒ³ÅÂ:‘Z—å_|?ŠË˜äñà˜Ü䇙OêáòÔ)P…_É@ñ9&‹,uÒ©1“§Ôx¤ù`
-ëþžöªm*Ú,ô °¡l ¨6þp¡µ´¹ñ¦È#¢ÙᡈBÉïë“Þ–Ÿ ¸á‘t.drù"ad*…«žÈNƒíT`ýý0Sà0_²ÖC>>MPÞ¼ýÞ*{ȯ Ê Ž]׃Çp|"¥ÌR£Ì3&M ¢V­-Ò\óLS\Æ$çl†Im®Ÿ¶j t •»¯Èc øÚ¦…´vÌä©©S~>Ë›|¿a·TV^ù!䕬ü<XŸ‹ÄŸB¨ ‡åê¾ZýA» Lg:µYa'Ç뮬›®Ÿø`]KñŠëÑ!¤dj4âÏ}µûLà¾ékvêJ*h[<X3Ûv߬'>]Ø>–Pšbv”–cvÁË(Áì ò}ÉH7•w
-TÊW "˜â2&9E¨Ôå@f@{"Ž
-Œ5a‡_KM]̪jaù\byÛû cæBÎp«šóŽ™ $ó¤d’œŒzÔÐÓQÅŸþkРñTóIPlïîÛdžÀ G~‡’ÈQÇ(V(ËÛ•ü<LÀŸLÀŽ&ÔJ*ø„)Jázêþð…‘4çò¬a¹ÊäáL-Ì×9›‹àôÈÚCìb7Åäc²ÞÕ0Á"šé~x¢Þ¶šé†P€ä3ÃþAZ¦˜JËŒ®ñ!âai¡gÝP 3V ³kž=DK3(fÊ uºàâ3fÁÂœ9VÓ»Œ
-±b½#p]’ؘ1n0æVc‰½~§ŠÈ>Mò©CÚÌj–üå™’ÛàCÈHІW(Àoð2fÐòú5õ\¾ÃWšŒU÷€K ù¶/;¦ ¼wß %Ѿþþâ=A·õ.0{[3€"²<ñIþã{€ôM ïyŽl¶#s§ï7ã&uhúïqI©¢<u zfE0å²s ^mJ´ä¾ŒŸ¶|j&ëfå½ïx3SñŠ¥½ã9©«gÏß/7ù…r“/–›|©ÜäTnâÿ–›øÛ䦾PnêÅrS/•›zNnòKä&¿Ln“ ôñf<A/ó ~ z²$Ãk~Ø‘± ­VöƒVšSJßYIPç$F™xÐ×äØÛX b•=gª]CèΧ(∷k›ò&àÝT÷åÇÚ»Wž"}˜#¼Hv!U¨©#žìÔÚAËÁÚögü3³tÉ¥OlYÎ:åIWoëM¹£FŸ‘093bj‹DÝ“$˜õÖ“èúH
-ZÂ×6Ñi‘~b.®"7‡Q8q0D#HkpZf<öëŠ Gƒ÷78
-Ÿò£÷\ ‘‚ÅyDUhŒE‹-‘#ÕØ5Ím¼ ì¥exŠ-•‡ 
-*±§J\ÌlWøJÀ©aïä—kåãZ(&G
-šh&h¡lMDã l¼‡Ð9Ö†åp>´^ó¿{ß ™Ö]_­ŸtÕò“®š5in”~ÖU›ºW‘žËN>F^N&c%#ÆÜk“:gåðѾ ‚ÊónãÕUW±$>ìÖÕŽ?ˆ8ÖTÒ¤²pÚá¯2,Ä¢ûM_ʉ½í®;B9D£F¿ßqÎÄpîƒ^J<zÓ=ú½Ã>ÖKþÁn˜ ˜§Ûý†ÚüݵfúÉHß™„yªXzbÍANYŸ¹ó›rå¹Ö
-_¹ý§.:|N¢ŽÓ¤îÔWJ¤ lBºk·ƒX¶(üÉ›,5¹,fÞ©aʇj·­ýeFë/ùÁ0ü:¡¸äÀŸÌèc”9QÀ `†‹||Jëfü¼p8 CÊ(ЙK#ùd÷/UxÛØtí!ë4——Å4¡~ÙKq&Þö_eG¥MÁ,¼¾JŠgžñìåýøé|Jsü„ï¿—£ ¨Ž¸)ò´p…Š¸9zÀpžæaB yHO}n§LŠßÈÍÌÞê/þïð"¾ö;'O|wƒç€3åÖÑ÷Ã7{Ǭÿv!<Éendstream
+xÚµ]sÛ6òÝ¿BoGÏT ñE‚Ó§4ç4î´IëúæÚ>Ðms*‘
+IÅÉtúßo» @ŠŠ<—t<,€Åb±Xì% ü‰…Iã4—ù"Ëula«íE²x€¹ï/ã,=Ò2ÄúîöâÅk•-ò8Oeº¸½hÙ8±V,n׿Ei,ãK D¯Þ½}}ýýn^^f:º½~÷ör)M½¾þñŠ ïo^þôÓ˛˥°FD¯Þ¼üùöꆦR¦ñÝõÛÓHNÍ ¢7W¯¯n®Þ¾ººüãö‡‹«Ûá,áyE¢ð ï/~û#Y¬áØ?\$±Ê­Y<A'‰EžËÅöB­”Ù\üzñË@0˜uKgå'’XªTÎPª9š<NL¡
+¶£¡UQ°ÆMuœW<Õ´¼œ–1~ÓRwÕo>ù¡ú÷$‘{šX#{Iý÷±dÒQ®†ü^¬Ë°+Ûá|ÌsÑ5m G§&ãH²YtWR»+Ûû¦Ý–kê:áÛ”iÙl² èä]Ñyä†i Èt†uÔ n­eú\u~©“õjú~_1.S¤Fw©‹m9w£ÄªSI0Èt¿
+¬­°é±SIâ «³§Ø¹+7;u+\^ñ'žgŠzŽec›ƒÕ"Ê([ëœ}’JÊEš+°(p¦g¸çÖÚyg³(.C’dËÄÈ–ÙXÂÈ€…\n‹~õ8åQeÕVÛ¯Çã@ñ
+®Qg*3yâ&E«T /ïzM—SÕ}Ù²iêùªžîìMM#ÛÆ[ìu»rU¡:ÃÛµ'Ãká,ZÙñóÓŠo*'Ü-*Î3fªovͦyø4ýV18–9_ ´×{f©tyìw
+,èqj“ì¬ßeüe¸`ÎïNéŽý.0æý®<Ök 7QL¸ÅŒße¬sœQ ü®Ò:º*@méš¸Ü m"Íê³7&4èQ.̳L‡PÚ#n÷§ßwåæž´F'@-ÑéØð¡-W™DíˆÊ»MµªúvRk@ý¼›æ “âLóÅ/t ¸ I¿PÉLvØù¤6‹­ƒøõ˜ôÏ1™'±•V™<eF 3ɇðTõtWM]ÒeaýSC@¹qÊ…>3Í Å€ˆˆ¤E¥üŒIž«“ÞŸ¸ã•¤2ºþ™´H ‘¸žÄ|o TA à–™—¹–­òñq‚òòÕ8ßì w.h l,„w]qñFJ™ÄF™3ŽM /XMMgÙóò¨3Nƒ).C’sNÃÄi¦Ÿvl`ts•Ù¯È£§xŽGƹLÓ1“§4RÇ
+–7E îÂî©-ñCÈ?Øø9°º‘ÓBè`4‡íê±\ýI· L'_%ùÄFEUwý$ë
+‹WÜ”©ÑŠ÷û²ýDà¾î+í
+jèZX1ûf_¯'‘Ùûw.£PšÓBv”–cvÁÉ(\Áì òcÁHw¥ 
+ˆûnXÛP > <½ßæäúz.i¡Ë—¹ÏÐvMÝñˆK¡Ý6&#â»ò¡ªkJ#$©ùh>$ê’3]OqB—/Iï±-¨qmLü‰¹ðÆ“¥‘`} =›ÃÀ;ÑÙðj,KÖF=§õ= 8ó„¬L/@…ÇH RÏ4؈3™89H8&`RTþ2 ¦¸ IÎe*¶Ð>“J@¼¨¥ùzLÏ0‰^A(¡ÆLžN%Œ––Žñ¢»¥9g˜Ä‰êYñ½L`ßcÑRøøÕi‡31°™2Ð
+ƒ,«gMÆœl=!ö,º®z¨]¾Ÿ’•…f §,¨ƒƒõúÿÒÈȈ#µšZÆÓw S¶U]m÷Û¹=+&Œ¯ÞïÞœ¶&9·263uk¼5kù¹pßl w•Í æ.¶» –È´TTC,ô•Kì‡RǪ¬׎•×¶ÔV97n6©¥!±#œÇƹe€8cpðS…å„Ê~Îâ„'G±æ&¨¼qõ%×GÕ<@sYN¹ŠÜSKR…W­Úð,¶\€»0˜«K0’ퟮ4)×ÛòcOx[wD ø Ú!*nØY/ç.~Ìlb#_Úå¨DŽ¹&Üð ©iŠ9BS-RÖk@,î{*´Z_ùܲâêcbUUOR2I.3j˜áͨã´¶F W§æK¡8Þ=6O5w@â%‘£ŽQ(­P"”·1*úePLÀŸ(&`Š ½‚Ö0E…\GÝ)PIsî$þ¸Êd^'
+æú\ÓEpªò†î§8L1Ù˜¬ 5Œ÷ˆfzŽ¨ó­fz!” xų̀ÓAZ&ŸJËŒžñ!ãaiad]Ó3–»kÞÝgK3(fÊ M{Zò3fÎÂœ¹Œé[FƒX±j \W£R6ÖMƒŒÖPb/^ëБM¬çPöX¦Iý嘒Û౑ ÿ" g8P€ßâcL`äÅ š¹~_ë6Ý.NäÚÒÞ»o‘Rо}sõ– ûªõÌÞW  ˆRÞx†Ú#|HßxúŽçÀgà821§mÌh¨¾ßŽ‡Ôaèïã–JEYlÁôÌŠ`Êe.ç$ì¼ÚèÉ|5YVØÓR;+ï}Ç—‹oXÚ-ÈI_Už^nò å&Ÿ-7ù\¹É©ÜÄÿ-7ñÉM}¡ÜԳ妞+7uNnòKä&¿Ln“ ôñf¼Aë îzr$ÃgÞµä,Ȫý`•æœ†çwV49ÉQf¾¬A¨ž†V»9S‡üB®Dg¼]Swï®|,>T.¼rèýþ;)€ä‡âT…†:éÓC:õv0rðv§ã÷±YÚèÚ¶R®:eQWm«MÑÒ «HÏœ1=ÊE‚éI,uÞ“èºL
+Fü¯RÒHÇyü‘¹¸ Âx\Fé\ÀÁ ­!h9•7Ažè删þ†àCAàS|p‘ Rò¢¸Ž¨ò±hq$$°†¦YgéŽbCí!©‚N©3×å+`Õp÷Vò÷kåòZh&*
+¿~ß •Ö¶/ן Õ²“¡Zją̂τSªMëÀÎ%gc±Ð(N6œ™ ÷ÚÄÖ¦røñýrgéÂÆ››®dI¼ÃŸ%ñÏ"Ž-•4±Ì-Îù·)ä¢ûM_ ƉՃ¾í®;B9d£F¿o¹fb¸öA_JzÝ=¹»Ã9¶Kîƒ Ü1pO÷û ¹·›šéïHFöÎDÌSÉvÐÙ”Ôìá”õ™+ÙmŠ•ãZ+üÊí~ð¢ýJÔq™Ôžú­„1ûÜß„™Læ3ß©aË]Ùn+÷X‘Ãù þ` îœÐ\ràÎèc”QÌý^O™d7óþYl_ü[¾Ãñ3±µòÄë œ¿"Ì”Óô£÷ÃþŽYÿó~NJendstream
endobj
-1282 0 obj <<
+1321 0 obj <<
/Type /Page
-/Contents 1283 0 R
-/Resources 1281 0 R
+/Contents 1322 0 R
+/Resources 1320 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1255 0 R
-/Annots [ 1285 0 R 1286 0 R ]
+/Parent 1295 0 R
+/Annots [ 1324 0 R 1325 0 R ]
>> endobj
-1285 0 obj <<
+1324 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [209.702 689.8302 283.4678 701.8898]
+/Rect [213.6732 755.8266 286.8984 767.8862]
/Subtype /Link
-/A << /S /GoTo /D (topology) >>
+/A << /S /GoTo /D (rrset_ordering) >>
>> endobj
-1286 0 obj <<
+1325 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [325.3322 61.5153 398.9856 73.5749]
+/Rect [209.702 677.875 283.4678 689.9346]
/Subtype /Link
-/A << /S /GoTo /D (the_sortlist_statement) >>
+/A << /S /GoTo /D (topology) >>
>> endobj
-1284 0 obj <<
-/D [1282 0 R /XYZ 56.6929 794.5015 null]
+1323 0 obj <<
+/D [1321 0 R /XYZ 56.6929 794.5015 null]
>> endobj
402 0 obj <<
-/D [1282 0 R /XYZ 56.6929 132.7054 null]
+/D [1321 0 R /XYZ 56.6929 120.7503 null]
>> endobj
-955 0 obj <<
-/D [1282 0 R /XYZ 56.6929 104.7571 null]
+995 0 obj <<
+/D [1321 0 R /XYZ 56.6929 92.8019 null]
>> endobj
-1281 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >>
+1320 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1289 0 obj <<
-/Length 2668
+1328 0 obj <<
+/Length 3002
/Filter /FlateDecode
>>
stream
-xÚÅZÝsÛ¸÷_¡ÉÕ)qø&pyòåœÔ7=§õ©\h‰¶9‘HE¤â¸þï]|‘ EÉö%NfB\,vûñ[Ðd†á™)0Ó|–iŽ&b¶ÜœáÙ¼{wF<MˆÒ˜ê§ÅÙoY6ÓHK*g‹Ûˆ—BX)2[¬>$oþrþ·ÅÅõ<¥'ÍS!qòÓåÕÏnF»Ç›÷Wo/ßýãú|žñdqùþÊM__¼½¸¾¸zs1O‰ÖSÏáÈ‚·—½p£w×ç¿þz~=ÿ¸øåìbÑéëK03Š|>ûðÏV ö/g1­Äì~`D´¦³Í ÎX˜YŸývö÷ŽaôÖ.²Ÿ`
- E³ R6e@¡‘dðÊð¼2:
-`ðJ’!ͨ²>,×yÓ¸Ä`#‰Àoˆß¨£XŒSð[c1NÔZ|»ÅÇ4fi-6Žp8ùŒ÷«|SLYŒ!m<×)òÑYæCû¸-&´fIƒŸ¢XiJ9’Bï§tÇñ ¥)ÍäLƒÖ=ñPkC®=ñ«U½ÉËj¬8/ÕBëï§xÇñ Å6Ø(þjJs”ÊôPóz7'*ñQ?fOUJƹ¡¬î&8§Œ`ãž:„PfW\ÞÎS&tRÕæ©|¬Ø©rN?4ñ\š(-V†%“ö¾p VÅm¾_·~I3™¾ !Ê,„ýùÕ?§SƒÔ<ø.rìœpÊ §Á¥A¤mÑíe_•MDz©#²e qÊÅ3d“§e³ÞmWbŠH08WÄRc/®9^+®K„^\ó#dÇß!¦Ç
-<¥‹‘?MˆÍA3Æ=eãbó¦?i>Á˜ '-! 1 %~aA¶uq—¯ÝðK¾Þ]’ÞM§pìi§„È4 îž[?/~<HÕ,C\@Æ'BòŒàehq6*älUC¾³©‰—À­ÃÀËC2W‹ T*G
- ~¤¾r†c”‡Mxæ¼È8ÐW¨˜‡&•ÂøZ(}×ÅÒgs`›$qãv¿sÅ^Cæ´Oç“@Òçž0ÿxÀhXÂaш NþUW6u ÆÁ`V­ 4>pØ(“’ÎbÓ|›¹ÍÁ2À©aò–Aâã'•_ Ìž:A.gR[Õwy¥ê…(b»ÃÑ
-€ðlêM q*
--O*t†ˆbôt%2 Ê¨K*oë3vñ5ßl×®ž@÷ª£…&“"®mÝ횢M]c•JŒ“ÛdpÒ ey€d¨.¯ÜÓ"m;:w‡ÌèÕ}Ý´È ‚–õæ•›örñùz*=FTÎo_ûZ=Ì)ñŸ×^ îƒ_Ò1|(צˆK™,ó}S¸a^=ºsëf[W­ï2³õݾs:šÑyLG LZ77Ü‘ÌÐÉpjïóÖÍÜç_<«Û ‡j
-¾B~›pBM- ¹èx¬cTóBäîÑìo´¶x𕑤­XSàtÖòõCþè3ÀÍ“Á"Óôœ¯=‚ª¡0îbn,Ùø\v$±Œ|ÜàUC¸„Y‚%'`×Ð?ò€Óã 8´¸ÀÐíë€.›6o‹MQµAí¶È­(=Æ}œÐ­ª=Ú…c…„ÌFØÊ“(6Y—EƒŽÝú
-ŒÓ˜³U
-O|W”™› Ó`Ydz «–4]À2‹œqNDârNqß ø ¨øJ}‚Q×.ÂÓºœ<>…ýÁ’Ûýzýè Mž1ëŒ7Ú‰Ê=Ý=¦is/‰³xÆ=–û]êòIÆ“L Óɸšmh¡ZÛ›)0ðB˜a³ßnMê5 Ú͘¤fלØ+Ÿãà…/`è±!ÔO ’Ìbwû66±"4ÀØ@ŠÓñÀ0–é…ÃÐÉŒQÍ51‘ˆ°†J¹˜ª“}å;ÎAf€t( ¦¨äÐ$H5}ÿí‰Ò˜ê¸,•‘e …?mÛõáõ,x3OîÜQMl=¸@¤ZûL÷þ­°Ù—ÓÐv±¤Úon\çF“úÖ=(6•ë™©~vr™/ÝjK%¼Y[ãì¾&eµ*—y[Ö•)iX%ØͯÊ&¿Yž«áAC’;Oe®÷¥oò"†)“.]½_LÝaq,õ“ATùº ]+d.5\Á]»Y9Ä€H‘VÝþ
-IÒy¥2Ê€÷+7²AÏÆ;3Èœ½CÂœG™P  ¸ýºÒ¦
-«Æ_9ÁmŒÙ¬‹ÙC;A™'}ªxŽ}´ ´·Ïa¸QÝå3ÁÓÑÆ(dg®Šû<
-²ÚØsÃûz¿ëo/P1§/“¼ûŒ•W/gÐÚ. ‡–³$óöòJf]Ø55æË¡ý8;”o£–¦)×™˜Œµ›+¨Ÿç·OÊW]OTú¦Â¹VDéïAî|µ¡Ý±yïhJ"æd>žNI1Õñ”ÔQKÏH€9§êôöÕÄþÃŒø‡r2Àg!C=q=!Ö`ÚÅ îËåý`M”fÌ{Œ²«Þ0ôm`Yå»G7c\s[7ek>ç|)B…’}"JU„› ½·¹Ìä—‰®{(ŠOý·…ÈINÖ‚58Àž8ìˆêÄa*{Øe•îêº=üäK5bÄô©­;ª‰½Ù1PÍÉpsŸ¾”‘"¯î¼°@ žîfдö'Û¸Wþ®Ä}K²¯]}Þ—¾œ¹·ÞW” ·žªhÚ÷ =ØUv­É÷hŸï=Á¥ç|¹,¶Ðs´oñ+‰”è¾mÒ©K¤³¬ÿÎv¤¯g€~ÙäÙáÙ“·ÌÏýK¾%áæ+ž:rÙ]Tz¡,v$cÉ»? 9ý¿àP]endstream
+xÚÅZÝsã¶÷_¡¹'©!Ä'äÉIìÔ™Ä×úÔ‡Î%<‰¶9¡HE¤Îq:ýß»À$(R²¯—N's!D,€ÝÅîo?h:Kà?:Ó’$܈Yj‘ •³õö"™=ÀÜ÷ÔÓ,Ñ2¦úfuñå5Og†ÅÔluí¥I¢5­6ïçßþõòo««»Å’Éd®Èb)U2ÿææö;|cðñíÛÛë›ïÿqw¹HÅ|uóö_ß]]_Ý]Ý~{µXR-)¬g~‡ ®o~¼ÂÑ÷w—?ýty·øeõÃÅÕª“%–—&Ü
+òÛÅû_’ÙÄþá"!Üh9{‚ ¡Æ°ÙöBHN¤à<¼)/Þ]ü½Û0šuK§ô'¹&R³tBŒO)P¢8LY
+”ác{(ÛbWæøk¿ zž¯k÷ÜÄïš]]59h‹Ódþ.÷ôYÙÔ8js«à€FP‚4Bßöì¦Þ·eÑ´ž2æ• ’0èڬͷyÕ~q¬o.Q©ìEÁqnÿ0ÃÁ]¤©@¾ŒéÇŠíj™x—¯Û¢®‚¥1B¡ü˜!Áá\êG£ë¨^`d¼›å„ØCAA 3
+ü†¦Äp¦Ýäe5¥weo>õê¬÷›|Ì8e–F²Y
+Û*cäkl—£µž¶Üe·ã2Þ…0Ç ÜµèvW¾Ë×fÁ è)¼Mþs’°*÷šù×÷uYÖOÍW¨.ª4I§­Ôíð~]fMƒÉÁAŠ
+WWrðk›ls¾¸°gUþ½;•Ah®Š¶pá‚GrÚà¦ëû#ú»;`ß=e‰/·Y»~œRK/-ª µ÷1uxéíK˜[ÕçYjoü}õÿÿ[TÂ!û„襡¤KÓ¸¨·<ÌePm.ÁiD\u¾!yEïç\×{Ôrþ{¶Ý•Ê¿¼±cÚÛÔ„I†¥¢3Å%µK•$ó¹;eÞàæ}rj©nnñéª7ºÄæavôæ±nZâ9!`Áoð}t‚ã×SQ¡;íó¤)Æþýõ¤$V™ C9oÙJÍ×Ù¡Éq˜UÏ8ˆû2ÖÉUêr+7‡2ÚÑeLC¼t6owG%Ù¡U’Ý©}ÌZ|ó˜}ô[õyåàv˜a`,4änÇ*œÓH(ìºT¬hž‰ ÍáÞrëÈ"GJçme°KÊÔP§Yù”={øýð"òž s®ÉuYúìµLØOõÇ> écˆ?ä‘‘;$ûsãœY(ÞE(’b¯«\&DYß;ê¯ v»<s¼ôÆó„pUíK ¸WˆJAB¸Áô=Á¢Ú#È…CÊ"oÈ©*ׂ°”‰WõP)”ÈFŠ“Y·æØ;x=$‡GÜõªy*dzÐjíŒlê
+˜ž@Án£›Êæq¶ #’³po/è|ÿgó«cÍÀž‚kœ)b,`Âѳßfö
+~´Å63ಙûg_1j¦(£Ã–‘ìƒÌ.…t³Â'º2 ìTŸ=æ=%0¶ Å%À½»qšdR€¸ôØ>Ï'­÷KFó iÒyĺyܧ ƒÔª2´ðe@Âý&úW
+©è¡ò—1@:°u©)v6Sa¦?Žy¢eLu†—@ey)!“Y¶m9îõƒÃ ¸ƒ³'wTG|–I"ä(ƒ³ßå­/5ºR¢:l?`€aÏ¢g…½nÃ9'Ù×0ûa¦t9.Ø ›Õ¦Xg¶ò°~–èy‚ï7Ec‹¿«Ý ‚.?x*Û¿Z=†Jh²«Ç5ŒiË·oWS Q‘Hâ¬$v¯lƒ6ù†Øf«SmºqE9к;rÈ©®b2èÏT4ñYBQÚ¼Á£]°­6Gy›ý^lÛ¨!wŽ(i$­þ(ª§ùQÇÓˆ>f‡œr
+,)£ç ¦:í•e]V΢&]X̘óçwT \A‚
+(¤²V okRé­csX»ÂUÌ«¼}ª÷¿âd»ÏºwóxqÌFŠ5®u±Õ¾Ùå{Hðr×®f&”òwØ¡ik_à\•?€Ë|ô”YÕ<å{ÌÂŽ´¹ Œ’|ûÆê<îƒ@ÍG;«t^Æøê• Žœ“à vdÈgoðΧÍű­`×a¨ƒ–5Ì5)ÿÎË?Šª›g}„IȨ°i|ÿ:0>ðfï³iç³c=INh¯Ñ‘ݧíIw3DéîKM¦½3@gÓ}Jïpxu¾‡ÃÇú°ïïØ_ BrúiœwßD³Êçÿ)ëë³ÿtžz}ùÒ+u&ŒUšý í¾ôÅå«Ú¨Fk ½©ÚÒWí~¡!~·ú¢õcà‹ŒMWä¾HBÓŠ(}WíÁ{Pê7‡{§!‰⋆3ˆÔ$OÔ|Ž ³æ‚é³gwDãÇ`‰tpºËR…H âH ƒ—Ákô2<=ëÇÁš`켿@ÕÅmúŠ¶¨²ý3¾±F¹«›Âõþ>æ!6©‚ üÐÎ᜵@%ÀS}d,“¸º’ò)Ïí?QEæq6òØØ–ªODtúš‘»æ¢ZîëºÿÙ
endobj
-1288 0 obj <<
+1327 0 obj <<
/Type /Page
-/Contents 1289 0 R
-/Resources 1287 0 R
+/Contents 1328 0 R
+/Resources 1326 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1294 0 R
+/Parent 1334 0 R
+/Annots [ 1330 0 R ]
>> endobj
-1290 0 obj <<
-/D [1288 0 R /XYZ 85.0394 794.5015 null]
+1330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.6787 755.8266 427.332 767.8862]
+/Subtype /Link
+/A << /S /GoTo /D (the_sortlist_statement) >>
>> endobj
-1291 0 obj <<
-/D [1288 0 R /XYZ 85.0394 691.0694 null]
+1329 0 obj <<
+/D [1327 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1292 0 obj <<
-/D [1288 0 R /XYZ 85.0394 679.1143 null]
+1331 0 obj <<
+/D [1327 0 R /XYZ 85.0394 673.1367 null]
+>> endobj
+1332 0 obj <<
+/D [1327 0 R /XYZ 85.0394 661.1815 null]
>> endobj
406 0 obj <<
-/D [1288 0 R /XYZ 85.0394 320.8972 null]
+/D [1327 0 R /XYZ 85.0394 279.3135 null]
>> endobj
-1293 0 obj <<
-/D [1288 0 R /XYZ 85.0394 294.233 null]
+1333 0 obj <<
+/D [1327 0 R /XYZ 85.0394 255.2326 null]
>> endobj
-1287 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F53 962 0 R /F39 863 0 R /F62 995 0 R /F63 998 0 R /F48 885 0 R >>
-/XObject << /Im2 984 0 R >>
+1326 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F53 1002 0 R /F41 910 0 R /F62 1035 0 R /F63 1038 0 R /F48 925 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1297 0 obj <<
-/Length 3863
-/Filter /FlateDecode
->>
-stream
-xÚ¥ZÝsÛ6÷_¡·“g"_üš¹¹™4qzé\“^âÞKÛJ¤e^$RI;î_»ØDR”}ŽgL`±X
-á»÷{½xÛÀ‚Ã5±ÜÕ@°[R¬«´±†OEjÓŒ–Ôt`EIº¬ö‡]¹/ë®,˜PÓ—ÍJ™˜®ÈÆ™Ði–.†Úükd@óqÖº:Ù_3Ÿ•ÎDš&àÒÚ
-c¢ ~¯¨/ÃH4°´¨ÕŒß3—qJl«íê!ßUEÕ=­*PájS])›kUrê:7Àµ²yìf¤…ÊhŸå¦úMJ]¶×+#Ͳ»/©P÷ûuy¤rsGß"rl¶ºk&îú®?^«tÉõÇû²¦ÒÛŸ?ß¼¡2,¼Î=#™÷]³Ï»®LRŠTð·à[0Ïj“ïvOÀ®är[Öå1wVg”Zæ-‘sª²ä~×ÙÍèÅSï« ûCZjùMFrªz f
-Ì4–"Ó©Ã$j<nÙ»>ý04æ_ ;œo¹\· 妫ššæf…žÎÆX8'lfsfë…9œKÃ9€Mà±ÚíH3å·CEú„Æf
-ŒË‚s3Y'ˬ7åwª]µŸ Ö×›¦?¶QTvn%Ò¯€”ŒNƒpS—T¸o`0WZ—wëί°°éD¯;nqSp%ã6TD!D£Ï®ÚWÐHÛ7½—‚~áÄïšÍ*¶_ÊÇëL/Ï@Û#],c‘H›¼
-(åÁ= Ò·eñŠ°hÝwDëh¦2ýR瘎º~
-¨°Ï[8†1Pf¹ÛêÖ í.`>¿iNt±/M{s®ZPK× üvÝÎ;ôÐœ+’<rúêxâ—gDÄRa üšš‰ÍÉÔLl= Îe¤ƒép[C_§ ÇCud$\EZ]05 m|fsÖ`(D÷ž8ÕOYÁìpÖ,¥ë´Â}FW¶6*Â#GŽÈ­^nwÍÚY—‚Mr6—z… À ¬œö*.à¢"ÙüÆ"o]Ð
-×Å°ÕiËãz;ö ± q÷%¿ˆÔâ Öò,R¹.#uàr[WÔíª/«¶úã e•†Ø-QÙóî™ñÍ$‚Há¦4žÀç²sJJ¼rb°pp ®jI7ÉòNjùåíÏDZ÷w¨ì;r´défïXÜ¥9žºÒ!˜‘Ëÿ Õ±±
-­ãåa˜ˆ‹aiÍ”€·î¶j\ú{€­‚ƒŒ¦]0ƒm!FÃn%aу“öéÛ>çi¡yëN¨“Ëà Ê®C`œñ€±u¬t̪‰w(AµnêÕibq&óÄB—}æ¡mD!uûX'l‡¼m©¹»'\í·÷Ô´¦ú¼‰`=ˆÖõzåÝJ­O‘ÑÝ1߆›.Ôùæ Û¡óçï|Ô5èö7avƒQ·a´·emw§“ ¯©ÄF&½…^òx£…L2ó‚ǸžñxÏå3¬.:<JJ×>;zàšÞLò 23ñx|rx“Z>Ò p:‘ BÞŽ%§q×^¶m¾ef2E,ÁÐ]¡Èwl.k¦!à×#A¢ô °iäÑJXL¡ Mf°§Æoœet0ì\Ë €
- 8،Ǥ p`α¨`ttŽ
-H$GÅû4‡8€õàÚXñ80éCV9e>‰6ƒ•0_=·†)*¸‹ø-[Ž\†o]”°ðrzí ‘ÅøðôAɦ¬˜a|tÊ.™`‡N0‹ #çㄉ¯ÇV(8ÑeÈ=\6‘Ù(~؆\—-p°aÀ›¿+W`Æ{:Føf"¡“Ä>?‰À53‹¾Y A@šŒ§1NÁ)¾ú`¦FežŸ+SJ+å«Ñ‰³õ•H¶åùÂ)ÐA2ZË3)­ÀÿªÎåNRZé2F$góI! 4Æ<¯ÛÀõÒ,Τ ¬ÄúÔU:L]¥!yÅù,–„#Ij¶Ó®üÖÍØ2[¾–Ó+>t,”Ç^ûx_mðÎd¥àK»ín
-úMTâ·|Ÿ?‘Øf_±†ÚÆ%#z$ E°V6÷åæ σ ßé´éw×jÉÛ¿æÞpçGMx«À¨Â)MÅR€YN”†Š¶ê´VÓ°?ͨÐÂÐUhÐeå`cÜ)Y¾gé‡ÎÊM¿Ë9Qt®×Ì
-sB §ƒj·;•‘Ɇ¼-S4´ªÚ=¶!?\¨GîLóKUZ‰H‡÷Åcþ8·T)ŒIæVêbòÝ¿²lì»û2¯9nt)fí}a? L÷jsi’îö±Í^š¤d4š% ÝC¬Kƒ¯y¸!l@õ±êló=—œ¢©¸+Ê1æ­Ÿ°e˜t!ctM‚~²<s¢2£,~ÙϬŠ‚%45»í9¢(ž”ò]g¸àØèÜ+,Wé¦yq:*5`Ÿ'.Ä@“Ù¥`§2˜ 'ÌÜ•d’&£l,¦Éržøºd{‚@A¦“sŸÇª(Κ„sÛ)å°ÓQvŽã—$t-ë¼uJFwj
-ÙŸ(Kg¬ÿœB$¬@úínIœíU¼ŒùMXP i5v­ '–¶xöDÀ8ÝUÞy—w*™•ëpò 2U=}r:³?÷“ý]Ó5z–)ý|˜>亦.ç »
-óà+¿áîcðè3Û~öžk2aÓX=?ÍÀ53ϱ&­°1„£‰ú´Œù•AF¬R‰iƪ«è Ö9íÎï.Ò§š¡5$:°Â/ò|,jØñdr,Òå.òw¸þØVpÔ–DmAÔ‚̪é[J
-#üßìðî~.4¼CòK2ÓÁ=’æëAÜz£ŽNï6>›B [žÊl_lðÑÓƒzü0 õ‚²‡Á
-PòÂ?ÿb]yµ"TÛØg‘“8إĠ'21ƒ²»£R××<'ƒâS‚{×,_ìæR6>a$ùˆ” n·eRL$‡ä Ó=ÉOâ‹úèíBIyáeÊÍW»Plï!æ+¨LRL \ˆtﯚ»3=(¡½Un&*8Ú³ ‡Tð%[…BNo©ŠÔ=f& ÀBšxä.ÿRòtÝ&„ùµÍîaöéêdX8gÚÞßlíôã$’SšÁ’€X~Û”>Vñù>N/¾:‰/¦¹?ð’~Ò„>N©ºa>ó}ùŽŒs Y:ý¦ëÁ</ùÐÔ-e}L¼<¸´å@âi
-jp÷nhÐ’ê
+1337 0 obj <<
+/Length 3765
+/Filter /FlateDecode
+>>
+stream
+xÚ¥Z_Û8ŸO‘·Ë
+÷7M"•¤ FëH ¶÷#Ø1fQlD>)¢X+‘ãÓõÊÊå-ü¯–gÛ‘Ú(ƒ­XXXl&Sœxñm!#a²LÏ íVz²€#üða¯oXÏb¸$–»v+²jà°RiØ£6‹£L›Œ–ÔtàDIº¬ö‡]¹/ë®,˜PÓ/{!´²hº"c³H¥YºóÏíÃÛ œuuò±?ç=+•Eiš@D«8’qbçÃ^F‰”Œh²HšDžüB΄}àB#¶Õvõ甆êžV˜ð½©­€;2F&‹ágj®=ôp7c Œôør(7ÕoB¨²½^i¡—Ý}Iºß¯Ë#µ›;ú-ò'Ǧ`«»fòÁ]ßõÇk™.¹ÿx_ÖÔzûñË—›7Ô†…×¹gä9ó¾köy·ÂõCÜŠ(UÂ-„èYmòÝî Ø¥Xn˺<æÎ봔˼%rN]–Üï:";Ý^<Õù¾Ú±?  ¥‘ßD,¦¦W€Ñ)†Õ xˆÌЦ4xÜrt}~?tæ_ ?8ß„s¹nÊMW55éf"5ÕF8&LjGÚœ9BàzA‡si¨XA’ÕnG–)¿*²'œ/&˜r›Ö,ïò`âª%”3rqd%€:Áœ$<¹$ „&± wEäFÄ‘–€<#' Ù…XîóïÕ¾ßS§gzÕÒ¯ôûTæG&á&kka@e™›
+ŒË‚c3y'ˬ7åwº]µŸLÖ×›¦†8öQTvn%¯€Â ƒÏߦ.©qßÀd®µ.ï?/ö]\acÓ‰^w<âTp-ó6ÔD!D£Ÿ]µ¯ ‘¶oz/ã‰ß5›¯Ôl¿–×™Zž¶Gº8U
+wÙ˜@z¨9&_4j¹Ý5kç[¶Èy\ê ‚ƒA°sÚyè¸t‹šäeÐðÛŠ¼uA´]¿&*Õòô< A²Ë÷‡Yl÷€MŽ 3k9 ®‹á¨³–Gõv ëAb²4þ–Üû"N›DÁ $~§‡\—q:p¹­+êvÕ‡U[ýq†±RAæ–Èìùé×Ìüz’?¤pO+ð¥ìœ‘o áÓU-Ù&YÞ@ºI#¿¼ý™Hëþ}Ga–,öŽÅ]Yã©+~i±ü7z; °(¶“CA'–Š8h¿’¥™¥.Gù $u±NÆqÐô][(Lár0ŸPÊ.ÂD¤L [k¦´
+©ÛÇò8a;ämKÃÝ=¡j¿½§¡5õ¿â=ûA´®G@ðU>›ª­OyÑÝ1߆{.ôùæ+û¡‹ç|Î5ø†}oÂì&£Ï†¹Þ–­Ýμ¦;™ðz)â!a±I^ˆø×3ï¹ÜQiÕÅ€—i$%Dí³³®™éõ¤Ú 2mÇóSÀëÔð‘Ó‰Švl9‹»ñ²mó-3“+b ®îÊM¾áàpY3 ‘
+ZéÒF:JÎôI! ÔZ?oÛÀõ’gÒNŽ^b|á*®ÒP:‚æ| KÀ‘$ûiW~ïf|Ž­ ŸJˆé ‡4vŒ£÷ÕïLFRñ~i·Ý­
+´ˆ\ÊÕy©²cðç'>“˜Ž5èj»ŽüÄl÷å èH­#£ÿ’âøÕ¦ÙÀ.:Η¹z¾¯8vM³CðL5¾j”4'çh0+U°‘–kI‚©Õ˜©¨brÕŽ
+;*âÌdc[øÀV‰¾´7±‰²L$/l Zë”™þƒÄ]“X&97‰# ·«¡åf¤‚}™ø-ßçO$¶ÙWl¡¶q¥È„žhl•Í}¹ùÊz°ã;›6ýîZ.yû×ü5ÜùÑÞ+0«pF“VDà–Ù8ŽÐÐFžöÀ(ÚŽ§:@ú¢ 5†¬lŒ» %Ë,ýÃY¹éw9—‰Îíš™HŸÃÙ`…ÖmçA i®Î†¼-ÍS4´ªÚ=µ!?\ªGáLƒóK•JF±
+¯‹Çüqn©"Ò:™[©Ë!(vXŠÎ&þº/óšóFW`V>&€öÚt¯Ö—”„ ?µ&{II‹x¤% ÝC®K“¯yº!l@÷±êló=·œ¡©¹+Ê1æ­WØÏ2,º3:‰'I?yž¾
+~*ìÀ]¸`æ®$“2Õb±L–³âë’ý ‘NND¬|«¢p8«®l§TÁNGÕAf8ŽG\‘ЬóÖÝ©¤ªÞìú‚kÖ(tfâò«þ?ƒXðÛ5Ü8ß«xó›° Ž¾ÀŽ鉥L$’àAŒÓ]•M±yg’Y9V…“oP©¨êéƒÓ™ÿ¹¼ŸüïBš.3H ”ÒϧéC®ËizàrÁ°«°
+¾òîÞ0O>³ãg¯¹:‹Ljåój®=Ç–4‘±vŒõ5haùAÄlReƪ«èŸîºÖ%ë\vçWáKÍ0
+Øá÷x>ìx29érû;\l«8jK¢¶ jIfÕô-
+ly*¦‡\¾Á'_,ªñ³,ô ª+@É ÿø‹}éÍŠPm¬¯:!#qð“ƒf\ÈÄ
+ÊîŽZ]_ól\ ²§ ~]³@~¯›+ø‚‘à#R@.¸Ý–E(0uPƒJ÷¤>‰ï飷 )Äì»”ÓVžÊºÐlï!ã+¨M2J4\ˆtï®%:»s<h¡·UNíYÃ)ø%O…FN?ÞO%{ÌLû* ñÌ]þµduÝýÚf÷0ûpur+œˆëlîFžvúÃ$RHêÁ’€X~ß”>SñÕ>..¾:‰/¦•?ˆ‘~Š„>K©ºa5«}ùŽ\s:û¦u=¬Âñ’MÝRÍGÛå鸥 «$
+ðb&ÔÀ²3—H åÑðâÁxžÌèSòà݈Ž°Xsõ®¾$¦yå–Îç÷ò·PówîïO¸Ì]"ÅÌFÊàP¢§`ק¥†§ø—•©»ö àÄ ×bãÎý ¬Ž#ü»Õ™LA„¿úüÓ{úÛa7…4URŽ$…Ôë[¤”ûËaužŒ‰Gͨþ_…PDendstream
endobj
-1296 0 obj <<
+1336 0 obj <<
/Type /Page
-/Contents 1297 0 R
-/Resources 1295 0 R
+/Contents 1337 0 R
+/Resources 1335 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1294 0 R
-/Annots [ 1299 0 R 1300 0 R ]
+/Parent 1334 0 R
+/Annots [ 1339 0 R 1340 0 R ]
>> endobj
-1299 0 obj <<
+1339 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [297.8955 657.1224 347.2449 669.1821]
+/Rect [297.8955 633.3862 347.2449 645.4459]
/Subtype /Link
/A << /S /GoTo /D (dynamic_update) >>
>> endobj
-1300 0 obj <<
+1340 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [324.9335 350.1399 381.8296 362.1996]
+/Rect [324.9335 322.2932 381.8296 334.3528]
/Subtype /Link
/A << /S /GoTo /D (zonefile_format) >>
>> endobj
-1298 0 obj <<
-/D [1296 0 R /XYZ 56.6929 794.5015 null]
+1338 0 obj <<
+/D [1336 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1295 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F62 995 0 R /F21 658 0 R /F39 863 0 R /F11 1303 0 R >>
-/XObject << /Im2 984 0 R >>
+1335 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F62 1035 0 R /F21 690 0 R /F41 910 0 R /F11 1343 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1307 0 obj <<
-/Length 3025
-/Filter /FlateDecode
->>
-stream
-xÚ­ZÝsã¶÷_¡·Ò3‹’
-½\7]ù´_æE•íÇ&óˆ…©LåÂç{$½§š/=ñ<ŠÃT°d(ÿa]€Û•
-HÎyð h”5N$A[¬š:oÍh<ÝkQôSu^ÖÏÄ -º–ZÍM“m4öR´mö\´4óÔli8£ÏŸM]Àù:õzÊvUG²Eç,–lP¸œ‡i cßÅö’ë  ‘fäô¥ˆÂ”%°BB=FžÀ_8œŒÁ¡Þ•U·4öÂùk‹í×bKí²M_²®lì$*ÚZ1¾sŠÃ8VüàU©̤æÁ†´üZæè3Û¼XºuQmžvæeö\7mW®hr tkbµ{^ÓŠŒÆëÝË£“†›€c½qØ#ý Á®Î½Êœ;IùÎ(/U°i‹]Þ,»f³¬Š¯EµÌ›— 8óeêŸ-)Â$VX!‡Ç²Î'œ$T(–ȨRPÜñ¾‰4RqK Xôå~‚#}­•¥ZUYÛ"Ì(;ÐZ3œÍR™ñ›3/ÛvÔ2¾Âiêz.ƒÞײx¥é_XÌÚ¢8…L ,Ð~4·}^Pãn
-“}úãp=âŠÞ+{yjŽ±àÇ !Ã4bb ÎhXª3ZsC5Àœt0¡_ãú‰m”i‹’3ÛTš‹ÈR½®Ë՚ؖ-}Û6+ë žèô¿Ðœ9®Ø8
-ÊP ̉üÄ  Ôj´V Ñ„UˆLPÇÈnY”³‘fk½T½T Ø91³ÇxtÊb&
-±vTz&
-=ª™(tT¨ëŠKw6aU—är^°#š<8cPo‹4I¦ L’ƒ
-¦×¹á>
-±í¢ }…0GQ ûqQMãfŸç©(Ô<ŒT’Ú­w
-
-Cð·L†AˆB¦ƒ
-lˆ& È3§7E#¬O×S ïpòÝ,(Dtâ"¯¥qLÓæKwkp˜îýt eµ.k–RžOâV'Þý'¶• œ\¨·t4Œž§®#àÒH™„*"‡¢0ð\tN%¬Àmñ O»Ú”Ãh s7GX°Ù–/™9ØÙm7)f"‹Ð0hË«H»¤áÒ~Må“PGÔö
- £®.%>ƒ‹m/žEÐãÙ^Î6Ô52á eá*k;ê_PÓ$)VÝRôÞÑ·¯ ›AèB͵¥VPPƒ78[B‹xtƉâÛ·S ²'" ╱© YÄFiâÿ‚vQ”@M WY´ó©N£]OåÙ á²Ì!/E¬Å¼øžjBþô\[¡f(`AO7}ˆRS°§<ØKF°§F°§ŽaO‡=¨ºÓ(qró1¼¿¾û÷õÝÔÅ! ¡êÞ
-zPypÎ’÷TFã“0Ü;¡2‡›Ë›*à#ЮÚ)÷0F˜`Küº+÷0ÁV&ø¥ÛŒ L¸äÁ 8XðXeÄǶ‚¾\qÑeM@£Q
-š'í&[vù¡Ûmkš¿ýéã—ÏW7·Ô£ÙvÓÔ--d–Œ|žz²Ì$|).WË)3vUf.›æçѳRq¯´r~ƒ)6ÚÞ†Áï"°syn&maÈ{õ„Þݧ´„§\Û5f·sq rB*Äaö–¬jZZÖ«j—'RŒ4(ó5†yÒÆo~üšÐ9‚4è™AsX‡#j@³-Ÿë"ÇÐAÂ…ÝqâAUÖ¿Íñ4…¸²ÓØW¤ÙLnÚc¶ú;ˆ ÄãD¿nµü µ««›×úh¥Mc(D‡2æÚG!!R›a°•u"êÇèü |¸†hz1w*ì–O––>¯hDBì°4•}(É÷4PüQ¶æw8hÓÖ0ª „¹_”_íBÜ:¡<PÔþ Ù$²í+W¾Dx›r¥GÓ—þy%ÝÖü^uÈa½c­3 Eˆã7VÖšÎú>£OqHÖôØ:Ãl”{넪ªm…ÿꀻ-I¨í’ªl»á}e$Ë‹²ýÛ©Ÿ}þ8 ãtþxŸÊÜ zò’+4µôxѯ,Ç×Á¢HÍKí©ŽÅ«q–â]`(–³ðævyõñã]xu÷#>¯_2§øÐÍ[î6ܵ{NäÁì±ÌI«}™\¨·[­â0’‚Ÿ1Û£š±ÛQ7|NªgùXì´é¾XGP~¥o·?V!ÓLž±ß£š±ßQ·NªgÿXì´ý¾XSzŠ·›/u¨ÄÙSïQ͘ï¨Î›?'Õ3,vÚ|_,Wï3_°Pª$9c¾G5c¾£:oþœTÏü±Øió}±'Þe>! kÞ|jÆ|GuÞü9©žùc±Óæûbyú.ó5^X…ž·Þ#:m¼#:kûœÈƒéc™“–û2á ¼Çð$ÏBþæ´Ù–æ¬Õ3òFNÚì ü]&KÌ“x ÿl ø?ÿ/¼ƒ÷"J­O<¬J†ï©©rJ™g9Ö<\‹µPªÿÔ˜ Qendstream
+1347 0 obj <<
+/Length 3187
+/Filter /FlateDecode
+>>
+stream
+xÚ­Z_sã¶÷§Ð[噈Å‚›'çì»*Óó¥¶ÚÉ4ÉMÑç(R);ʧï. @‰¢|ÓN.C`±À]@æÿñ‰V“I8‰“0PŒ«I¶¾b“ûtÅ-ÏÌ1Í|®Wý(ãI$‘ˆ&‹go-0­ùd±üeúáï7?-î®gB±i\ÏTĦ?Ìïo‰’Ðç×ûóOÿz¸¹ŽÃébþåžÈwïîî?Ü]ϸVæ »Â™ çÿ¸£Ö§‡›ÏŸo®[üxu·èlñíåL¢!¿_ýò›,Áì¯X ­&oÐaO1Y_…J*”ÒQÊ«Ç«v z£fêÐþ)©¥E<°BzÈ´Ãh«$ˆ$ áΟÑàä=Î ‘‘‚å‘eþ1ËÊ"¯Úf¶É·×\Og¿ïòíÞÎìË!#;³h®g¡ÐÓ&o±OÛšÒ2õwÐÅ´]å @ËŒäÔu T5ÍßmPCzªwÕ’šµ™e秱ëMÝä–ãi?`åŒsðX(l‰RÂ(½Í³Ý¶)^sgô€™qD‹Ì NÜ€L‡Æ<"¦ä°Û[¦™ÏE§Æ‡ÜÞq¡Äªn‹çýl™—éþX8ñô9.½ãß;ÐP‰`Q_þb$âxJpΧp”BËiQá@GžÕÕ²1Ôpú”·oyÞ UË¢z¡À5jÕÏ4L¶m7Mú’74ò\o‰œÒçϺÊ!`¥N|…žÓ]ÙR§0g7™I°!Ïï³óÁ`È5D$,‚R±”6ˆ<‚€ŒÎ슲‹š|ûŠnˆí¢]×i[ÔvUr$¢T Àû*õa1©ùtCz¾KÜ3Z¯-ß*/7Ï»’—EúRÕM[d4ØÓ 튖ڽ¬hFJôj·~rÒðöÔ‡=Òß0@Ø/î+ëohk”—ñtÓä»e=këͬÌ_ór¶¬×)¬dÌ{@#E©XÛ@z* ¤O7IĈ¹‹6£HAq§''ÀŸ˜[^H_VDç×:¶\Y™6 "?@œ@cÍp6K=M(óÒmK-³W8L]oË ÷Zäo4ü+S¬ÉósÉ""ˆØD@Û¾L¨ñ0”&}þÓ€=Y-|Ì3ë‹<1n,ä)lHÈLôÔ€ ËuA‹ÓÕP ØN:˜`‡¯Ùúc”I c]8FàÒ\„–ëmUd+Zó~›+m›>“÷¯i̸+6:µNE˜uNEÁt‚óZéóû¡t€‡Îs¿ï“;!žáARDÓ´ÚÃKY?¥¥ƒ.
+‹ CÛ×;j<çyÙÍ 5ª“µ!YIË¢IŸÊÞÊfKx¥’Œ;8'p6ò`'e¤§;Âah! Ý&ÉPA6³¯15ìÆ[¢¯
+bU5#HÈ9”ÌBxÚR‚´‘­Lâ…ø 5lEt¶àQ*
+´Š“ñ‚Çç:_ðt\fßr(Éêê´¸4á¸àŽk@r?Z!Ùk¸tôDÛÒBw:˜Në¨](b{UïÊ%µ)´7õ¶µ³‹”öCQgšTùxkVé:È–"‚Ôâ|‰ô ÎdÍïÌñoE»²Rö›¡Ä už”‰Kœ‹ŸCpMéVüŽ¢1P×Vg13Ät/.Á:Tš¢ËÎXá%–FÐèà;ôømÝ(m{ZR¯;2ìtU´M™yn{Žpß±Œ¦›<ƒBs ?1()u|tV Ñ€UˆLPÇÈ#ܲ(g#ÍÖzÔ½T"͸‡bÖ= ®Sä#QÈD c¥/D¡Ç5…Ž u]Aqé|³†PuI.Ç;¦Á=“pƒLÂ#É„QtPÁôZGî¢Û.
+Ú{Qc…а…Ð4Ûì¯y.
+5Â8JìÑ;…Î…!ìww¶AˆB†ƒ
+lˆ& ·¬^8½+a®:_O1¼ÅÉo<XrA!¢#y Ñ1M›/ÝYü£A2Ý#ºa%[•ÇK)Ïgq³#ïþ£l%ž õ–ûÑóL¯
+|îé`¡õè­:7.Œ¥©£` Ý?Îom…ÀÓ=þ$THÓÊæÐ…Õ;s‹¸<¡§žØ£FÂÄEUÜ9ãü6x¼{ø÷ÝÃЕEQõk\ø\Í#•tIü}(‹Ë-obtò÷¡lt@Y\rA{À „Ô„p„¶‹[BŠ!Úíg˜…˜Án&­á{€&ìYh¦Ákø¦ôñÀ¨7êÀ;™…í÷
+“¶@òÞQ¡÷ðñMܤísÚ‡15•**íáö–­ljšZTY¹[ægURi,yOc'>ÿé5"’qA"zfÐÖÁE‘ÁK•/1tpeԭħeQ}[Ó<=â«n_‹z3r¼§4ûjØzÚ!Áì _Ûõ µ«¾Võ[u2“Jd#DœG‘AB$6±`+m[„ÔÏe|‡PZ›+v‹gËKV4Áà!8,Oiß]–{"äùaÚt.Œ®+Â\WŠW;OÜÓ!ŠÚ$KÌTÛ7B®å ±mÈK<žî&±Ì¡NÛšŸ¿ló7Ön´nüFf­iíÞ§ôÉøoMWv3ÌA¹§S(òÁ£X¸³Ìv[’PÙ)eÑ´ýëÏ‘,ëEó·s¿"ñD૸ÿ ŸË\C Ùz¹5¡ËGÇE?Ú@:<¾ý0¸¦Da<.µã:;ø‡ =±œóûÙÍííCpóð¾Ößœ5ë<üzÜtkÄtÇuÙô1©žéÇb‡M÷År¸G¼Ûv¸ò$,¼`úiÄrËtÙð‘žÝG2‡Íöd
+B핼ßr¸GÅ:¾dºÇ5b»ãºlü˜TÏúc±ÃæûbMÝ)Þo>\L£˜é æ{\#æ;®ËæIõÌ?;l¾/–Çßf>ãR¡¸`¾Ç5b¾ãºlþ˜TÏüc±Ãæûb1O|ƒùp ñ'ÐQë=¦óÆ;¦‹¶‰<˜~,sÐr_&øÀ·©@ÂMnÔîÏy³-ÏE«GäŒ>8h³'P°o2Yª
+´Hb§”¹4Ÿü-I÷‰§ªÿ-T™endstream
endobj
-1306 0 obj <<
+1346 0 obj <<
/Type /Page
-/Contents 1307 0 R
-/Resources 1305 0 R
+/Contents 1347 0 R
+/Resources 1345 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1294 0 R
-/Annots [ 1310 0 R ]
+/Parent 1334 0 R
+/Annots [ 1350 0 R ]
>> endobj
-1310 0 obj <<
+1350 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [84.0431 641.5322 144.9365 653.5918]
+/Rect [84.0431 618.9895 144.9365 631.0492]
/Subtype /Link
/A << /S /GoTo /D (view_statement_grammar) >>
>> endobj
-1308 0 obj <<
-/D [1306 0 R /XYZ 85.0394 794.5015 null]
+1348 0 obj <<
+/D [1346 0 R /XYZ 85.0394 794.5015 null]
>> endobj
410 0 obj <<
-/D [1306 0 R /XYZ 85.0394 712.9977 null]
+/D [1346 0 R /XYZ 85.0394 689.8743 null]
>> endobj
-1309 0 obj <<
-/D [1306 0 R /XYZ 85.0394 687.4208 null]
+1349 0 obj <<
+/D [1346 0 R /XYZ 85.0394 664.6429 null]
>> endobj
414 0 obj <<
-/D [1306 0 R /XYZ 85.0394 380.6895 null]
+/D [1346 0 R /XYZ 85.0394 358.7368 null]
>> endobj
-1311 0 obj <<
-/D [1306 0 R /XYZ 85.0394 354.6244 null]
+1351 0 obj <<
+/D [1346 0 R /XYZ 85.0394 333.6847 null]
>> endobj
-1305 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F14 685 0 R >>
+1345 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R /F14 717 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1315 0 obj <<
-/Length 2268
+1355 0 obj <<
+/Length 2204
/Filter /FlateDecode
>>
stream
-xÚ½Z[sÛ¶~÷¯àôåP3‚+ ô<9±œ£Nëä8êSÓF¢bÎȤ¢‹]÷×wq#AŠ"«z¦“™h |Øßb-‘Ã?‰%Šª(U LD´|¼ÂÑ7èûpEfêAÓõnqõö–¥‘B*¡I´X¾$ÂR’h±ú-NEð€ã÷ïnç~½¿ž¤<^Ì?ÞM¦TàøvþóÌZî¯ùåú~2%Røýÿ®?-f÷¶+q>ÞÍïnl‹²gœÞÏng÷³»÷³Éï‹Ÿ®f‹ZK¨—`¦…|¿úíw­@öOW1%Eô ¥hôxÅC‚3æ[6WŸ¯þ_; zÍоøÕ˜)ãHÿH”…B £¬Ž2áA”S (ð(å/˜¤]©)ø#’F¡»R:%³!• ¥D›”RDRŠæwÓë››{t}ÿi¢h|}6äœ *( Ä{Ô¨ø!ÒF|—´_|HJÙeâ!X2%jD|€ïQ£â‡Hñ]Ò~ñ!)å—‰ÇqEäˆø
-'I4%1éJÐìq{x™L)ñŸU™ïµÉãl7!2Îmû>?²¯÷”,äðàžŠüÙZ›ü)ß8åʶUåƹ϶[kÂتºw¸µíZn²½kšß!kÜ{Í¿²ˆ¼gÆ¢ž±VŠA"AJ+ÑM‰¸(ò]q0žX¯Í˜êÑvVÛCQ•{ÛU¬m#¨¬CÍM\ ¯¬l㪙´úéA‡Ÿ´î·ù²ø‚1õÜ&Œ–À6¸02FΰˆzýOõ”ïvŪ£ÑÖEëFà@<lŠýÁ5¯íg0Wx2|cí—êheV¶°ö¡&°1«ke‡Ð ÒÓЂͺÚY#ÿ#{Ünòµš··Lµ·SÊ`#ÀKcÂnj7™© ïÔÒ&Ç? þk]´6Ç´íÃþ1u®ƒ 'U…Ë Ç ‰÷EùÍ>Y³ZY”IKhØeå·ÜÙK½&¦we|º¼ÑË—6Lû‡ê¸q˜lc1ÙJç‰ñCöäÈløÜ»ŸBž«5¿ž\f«ÇAôì´qÜçU eñ¼´-Û]¶<ËÜ>
-7¶jží܃ެú³Ôk®¯ïRW7,³½³ž‹Ãƒµ³òÅZß0m?™¯¹Q`«<d§šlnåz—í»‰ŒËñ^³Ö+ßé`Ù›Z`”ÙcîÚŠÒ~‚ë½³……Ζù^o±”ÅŸ+ÛngZCtüðÌYûl¹3yYd›žI<çáüÊ<_™ÔÐ>ª¾ûêvË*ßnª¿1Í©÷âCV–æL w–Žè‹ÛZUæ†dÏ™k ŽµpÔ¹0B—S€ÎÕH*$¢Œò¿õU¡Êïÿ*ÔÃM¤œž÷eÇaðåL?¢íª)Î$å(²U'믣nÃ)I"Ê‚…³Iu"áD FB«Äñö
-vL|òøÄ)M#Š1’‰4¯0Ñ÷^O¸RÌ‚Ûhmb`ÞÎitS¢(åOCÏFTBƒóMAͧ)ð…$Æö|[˜¥Ne¼Ëmnªx›íòò`[a•õ©?M(”)›°2^O ÉîÕlÿ91Õ;w°ú
-Q©dn§×íPnþÄ ãióÍíëÎ)Üa%aæ2ËDzæMj¿þ2eJ8ì˜ð/2¤ç«tÒëcoö8ìÆ<"ž@X¯'Ô5è”;¼žJçpyÉ?ë;âZWM¦âgSq´åfcl]Ù\¿ÉmÙbmm½ÚúÓ–f0ì)éSêÒ¢[>¼»–•ùt¦„jÃeµ6ÍDÿ6
-mۣʿk@C;+t—ÉŠ¦«É
-ݹ®àÆ´³v}Üñ:18¼”ùÄàÑ„ñ×$Æ
-{[ÿ÷!ˆûýƒOƒs> ¦I£vªëM~’\"!R5Ä^cNè[9 ÆÂàØ øgeóæßžZïf™_ÿj§+#ˆw/þŽ¹ÎŽ›æ=Í5gáUÐ
-\½
-2ô¯lzâúÎõêüwI“òÌ)
-å q NܤÌo¡øif`¸¼Âíétꎘs’endstream
+xÚ½Z[oÛ8~ϯæee fy•Èݧ´Iºì¤ÝÔû4Õ–Žäú’læ×ïáM¢eY#À"@|D~<ßù/¾ÃID†2EU’+Ž&"Y<]áäô}º"3õ iˆú0¿zÇòD!•Ñ,™¯_a)I2_þžfˆ¢ xÀéÇÏ÷w³Oÿy¸žä<Ï>ßO¦Tàônö¯[k}z¸þí·ë‡É”HAÒÿ¼þ2¿}°]™óñavc[”}9ãôáöîöáöþãíäù¯W·óVK¨—`¦…ü¼úýœ,Aö¯W1%Eò¥hòtÅC‚3æ[ÖW_¯þÝ: zÍСüµ˜)ãH$ËB¡ŒQÖf™ð Ë9Î x”Îò7Lò¾ÔüI“ÐÝ ©’‚Ù‘J‚„R☔DrŠf÷Óë››týðe¢hz}6å£<g*">@ˆ÷¨¨ø1ÒN|ŸtX|HJéeâ!YŠˆØú
+P#â=**~Œ´ß'’Rv™xÌ9‰ˆP#â=**~Œ´ß'’R~‘øL^I9.>DߢbâGI[ñ'¤ƒâH©¸L|&ã˜GĨñ?FډIiv™xž!.#›}
+ÂËE¹M„¨‘lyT4]c¤]¾ú¤Ã IoÐVû×”‹I»?†¨åU>FÚ)ï“+I%º½D;S3¹I„¨íÕ>FÚiï“kIÕeÚ)ì¿2º=¨íÕ>FÚiï“kI¯/ÓŽ b”Eî!jD»GEµ‘vÚû¤ÃÚCÒgµ'SÊõM3K¦D")¤=|nŸ6û×É”‘þÙÔåN›<-¶"ÓÒ¶ïÊý¾ø¾vOÅÞBö®á¹*_¬µ.ŸËµsP/m[S¯ûb³±&Œmº¡;‡[ٮźع¦Ù=²ÆMµÓüK‹("mÄZ)‰)¸`‰.&Òª~,·ÕÞxbYº2cš'ÛÙlöUSïlWµ² ²M4wy¾º±Ë.<hõáA‡Zw›rQ}Øzn“FK`\™K#HgX¤s=Ž§y.·ÛjÙÓhçݺ8Pëj·wÍ+ûÄ
+O&ÀwÖ~mÖXõÖ>´6g;ó`­bß:A: -ÈѬš­5ÊÿO›uùw­æý'ÇË)‡z† IÜ›bÌÔ¤wji3ŒÓ_Ð/ÿ°.ŽÇô؇Ýf: *sRU8ðp˜tWÕ?ì“•¡1Ë¥E™²„†mQÿ(½Ðsbz—¶Á—Ë;=}yÇ´{lk‡)ÖS,u(‘>ÏŽÌv€Ïkð%乎â¨õ Z=Ž ncÐÆaWBUe”¥³Ú¶l¶Åb_-Jû´¬ÜXªe±uz±ê×ZϹ6¾¼+]Ý°(vÎz©öÖz*êWký<@Ø>˜ï¥Q`Ë2d§šlmWõj[ìöÛ‰L‹ý¡³æ«ÜêdÙ[Z`ÔÅSéÚªÚ¾‚볉.åN/±œ¥_Ûn#­ ;~xá¬]±Øš…¼¨Šõ@/e_]–KSÚG34aßÝjY–›uóê¦Ù õZ|,êÚì©áÊÒ}uK«)Üâ¥pmÁ¶Ž:—Fèr
+й3’R}b0ñ—¾»"Á±Ä‡¿»õ’!‘szÞ—‡Á—3ýˆcWÝáL¸@4WG3µ9^%E,'YÇ„þÍÕ}°iˆ ¶
endobj
-1314 0 obj <<
+1354 0 obj <<
/Type /Page
-/Contents 1315 0 R
-/Resources 1313 0 R
+/Contents 1355 0 R
+/Resources 1353 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1294 0 R
+/Parent 1334 0 R
>> endobj
-1316 0 obj <<
-/D [1314 0 R /XYZ 56.6929 794.5015 null]
+1356 0 obj <<
+/D [1354 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1313 0 obj <<
-/Font << /F37 747 0 R /F14 685 0 R /F23 682 0 R /F39 863 0 R /F62 995 0 R /F21 658 0 R >>
-/XObject << /Im2 984 0 R >>
+1353 0 obj <<
+/Font << /F37 779 0 R /F14 717 0 R /F23 714 0 R /F41 910 0 R /F62 1035 0 R /F21 690 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1319 0 obj <<
-/Length 2683
+1359 0 obj <<
+/Length 3055
/Filter /FlateDecode
>>
stream
-xÚÍ]oÛ8ò=¿Â
-ZëH‘©½§´M{)¶é^šÅ°ÝÅRádÉkÉù¸_3’’91¶-nÉáp¾8šÏüñ™Q1™œéLÆŠq5[,Øìú>q7fîÍÇ£Þ\ýí½Ð³,ÎÒ$]^h™˜Ãg—ÅoÑÛœüryzq<O‹Òøx®R½9;G˜Œ>o?Ÿ¿?ûðëÅɱ–ÑåÙçsB_œ¾?½8={z<çFq˜Ÿ8
-{&¼?ûù” 'Ÿ>\ÿ~ùñèô2ìe¼_Înä£ß~g³¶ýñˆÅ"3jv ó,KfË#©D¬¤S}9úg 8êµS§ä'•‰U"ÓÙ\%±aÉ´YÌm®%Ó,„œð)!ûQ(ä¢êò«ºœ—ËUÿ8ÿoÛ”»ûæZʼndélLý aÔbÄf“„gÛ\¼#.Pþ"ªš¢º«ŠM^SÛ²† Œ¿ô(x½q¸¢¼Î7uOcÜ€…òõ17‘k¸]85aÑåmÕQG»ê«¶!x‘7DñÊÊ
-ÂüÚTó®¬ekƒ}¾\ÁÆe£e™w"\R<rd»rÑ6…oTÍÂQù˜7›|ý”2ò„E¦"ž‹ÏS¥£÷m]·÷Us=©rzij@PðH®+וÝ'Àíõ0££QÀYŸW#›úY‹vÓôVv¸Ôãªtüô·n©»¼Þ¸…<ÕÐç'[sžØ…„¼®] B‹1ù’LJF  &'‰è®*ïi
-ÑÇrEí¶%¯’a–è«×`’äD[1NF7u{!skGd¶\¶}Ý® °2A
-6Ïbmi´Û,e×Mh^­¤†EW@¿öÖ°²à§ŽÈõ¦&üà¡±Ì 7ÕZ²vœ©pŒ¦i2 b<ÏLtB˜ñZØƵ ´þߢÄħ±
-ÃoP6œÂÜVX¢RŸ~ xþïwŸ?œO¹Ð–ÒžQÌhÇeG’*N~)Ò‰”ÇI’‘®óªÞ¬Ë ¯ ®õ%¬X\Ówð%bâw|IQ¬t'Á&1àSPu@Äs¹t[†šJ%µ¾?¿jïÊgT:’Õ_Y¥ µÖ/ÅF7Æ^‹ÍºÃ:ÒaΖòÁÙR:½784¼³¸È7u3Û{.a²°-¶@çŠn“š„Iz"u{Žéºä¾-U‚šÛ¡xÔ;w'‹¤óùŒ½/î5€‘d¿—ü€Ô9Ñ°¨J_ôi.bÉŒ+¢nV5\ÓúC½ZŒ’gá’g1N–¡á]Zø,Y„k¹…s¸Ø.WääÂfÔ{Ã-êµf”«Ü™+¢‹–,ÈØj ~ʼYÙ›–QC>úƒÕ¸ ]¶¡óì—©ã9/
-Š:¬Îè,ZµëÞ‚Æ“ÆèS®ÛÞÞyäZXÕqa«)XÔy×9\M´ób²>uU†ëâÊlñ¢€åß}Æ9Öú÷J­„q&)ñê¥L IU¬Œ¦èT¬ÛÕ
-Ìä°Ø$‡JD"©&‡¸!6AƒÊ
-:PAÕæö*r{E¹#â¬m‚}XÍ"bÇhžåÿÐ\NØ%1šIoÀ™ô=Á”3;DR
-
-ŸáKƦ±Ž÷ý´DÀÁ'ÄÔï+àß©ò›v2ü&òaL2}ΆóØ1eƒÚå\ ™f¢'Xÿ¿íÎendstream
+xÚ¥ZYsä¶~ׯÐ[F©
+kãiøÒ‰e£Íš
+.¿sñÞhHÉ'ñb„™Y¢ÉNH‰ó„ÒÉ,å˜
+>CY¡U<k„€’bÎ(¹ns"xxO½ÛG}>œ(@ö±IæLLJÍ/a(Œ4úÅ(¢„ ¥}1Š(-¿‹ u‰+"|쀠ÃáH96m[PM=OðNX}ì™È R`"l¼4 þxôP¥,ªbáäƒÝÚ…ÞOû‚7xï-ÏîÛu©V «¡°a¥¥Ÿ¶,Ù¶øcM®‘†‚ÔFƒDè.P'Ù0Ñóìõv„P¶Œ°µÏ¬š²/ô«¢&ÿ4“üOC´Ó€H,!&¢Í“C|î€_æÉzîœüta!äw‡íZânúnÕ@EéøóJ­x(µžnø\…>ÿeYYdkûà{Ž6<mŠdB1
+­Wr¨CÜ  QØ`”õ8ìÉu¾Û$jQ ;Üä
+}½ù¶yÈq%A¸ÈmSC²SC‚DšŸ\ô·Þ0`ÊÂì
+¡ðý·«°å¬÷ï³,Ï] ì—MÓNË펞[veÞ¶|è~Ʊ}åN°dۜПڬ‰¡¦@>£‚iÐÇ
+g®UD5ŽÂÄìÌ(€}úrGÔ[^E‚ŒEk½9ÌÌ)Þ)*_qk›@«È›óÜÚ°?ºÎz<²û»Ì®yµt&ì×¾……<
+-s
+WÓÍ ‡KƳˆqéZÃÌ
+waèå-;¬ÂÉ¿å¾)¡*öóÏ
+ÄPR¾æjO£0}4D(–À )º>€þ¢ÙÎs³<¯\iêMs~wÖƾ,ë]¶{Þfñ-àÍ+6;™õ‚ÍúYÏT 3Sµ±‘}…aÖ
+3å@Á-m¸`ÀƒÔ“g/è¤UÓ»whSBÕcÍ,5g:°ÊÇŽ’§¦75øö-oÈ8Y{œ¬o
+üï•è(9üßÿ$2þ‰„Žãg¬–=ƒ$òL93³KέŽññ*Zaý¿{Ò>ñendstream
endobj
-1318 0 obj <<
+1358 0 obj <<
/Type /Page
-/Contents 1319 0 R
-/Resources 1317 0 R
+/Contents 1359 0 R
+/Resources 1357 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1294 0 R
+/Parent 1334 0 R
>> endobj
-1320 0 obj <<
-/D [1318 0 R /XYZ 85.0394 794.5015 null]
+1360 0 obj <<
+/D [1358 0 R /XYZ 85.0394 794.5015 null]
>> endobj
418 0 obj <<
-/D [1318 0 R /XYZ 85.0394 711.7496 null]
->> endobj
-1197 0 obj <<
-/D [1318 0 R /XYZ 85.0394 689.4384 null]
->> endobj
-1321 0 obj <<
-/D [1318 0 R /XYZ 85.0394 501.5031 null]
+/D [1358 0 R /XYZ 85.0394 676.0481 null]
>> endobj
-1322 0 obj <<
-/D [1318 0 R /XYZ 85.0394 489.5479 null]
+970 0 obj <<
+/D [1358 0 R /XYZ 85.0394 649.3007 null]
>> endobj
422 0 obj <<
-/D [1318 0 R /XYZ 85.0394 143.9193 null]
+/D [1358 0 R /XYZ 85.0394 161.1524 null]
>> endobj
-930 0 obj <<
-/D [1318 0 R /XYZ 85.0394 117.5499 null]
+1361 0 obj <<
+/D [1358 0 R /XYZ 85.0394 132.1973 null]
>> endobj
-1317 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R >>
+1357 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1325 0 obj <<
-/Length 2874
+1364 0 obj <<
+/Length 2948
/Filter /FlateDecode
>>
stream
-xÚµZKsã6¾ûWè¶òÖ!
-’X¡D ¶•lþûv£Š”)?vjËF£ÑèÇX|Ÿ©˜ÅZèY¢#¦B®fùæ,œ­`ìýw<g
-†\ß\Ÿ}õN&3Ít,âÙõr +eašòÙõâÓ<f‚ƒ„pþíOß]¾ÿåêíyͯ/úxÎß]þxA­÷Wo?|x{uðTñù·ß¿ý×õÅ ÅNÆ7—¿#Š¦Ï ¡Wï.®.>~{q~sýÃÙÅu¿—á~y(q#ŸÏ>Ý„³lû‡³IªÙ=tBƵ³ÍY¤$S‘”žRžý|öï^à`ÔN´™±˜0 STšÅ†Ð€o‹¢-ªmVž2ÑóÆäØ¥Nžåëb»‚NΕiˆ¼­Z7¾Î¶+Cívíõ9Oç¦ÙUÛÆÐÌäñyk¶-õ Uhr³k¦^]5¦u‹TVÎÂÔ¤
-®ƒ‰
-àÔZ÷Ðζ õú#
-JÓmvÎ)P8´y+£ß¼
-ì%6öèÈc˜¤ñ´&=ׄ*£]'‚I™ª±.de¡ï"ÐvåGø‹Ì†ž„«Í,䕇{#Pá¦\¶âÈÁ·:4`[hªªðýñêš<àÉÊ‚‡õ†.)@+}ô ºí'›¥a¤Æ…IÃ>òÁRÁýL¨,]k–íÊ”€zpp=¨ÖM‡ÔϹ\Ò(Á,B4‹ˆÐm@Q-
-Ù—jÛ°Œ×9æ°ßcܵìuñ aÑ~nÀªÇвþEÍÁ».µZ9¸ØÀ}¡Ü;!•_+kºM<ô7VîÒ·ð€ÏñÛ,\"ìË&’3úôþᨳbgs ôî
-soÓ ð¸ òá’ÙnWd¸Ëj€
-9¿Xî_fPÄ©‰ˆN4þ2ƒ&Pðó:>oÌÃÉü?ÔÔœ‰T$“牬ÛÒ  Žöáfš.mµ‚C™ã Wð–™ô…›Ñz‡½Œ;©d¢4Š^½ØØ&2LÅ*š<¼¡Mú³{½Y
+xÚµZ[wÛ6~÷¯ÐÛÊ{B”¸
+G²j‰?Úì:7rÝùH}ñ,b)ÑÜ)îüÆ/¢£ET©@ë±]âfŸ°JI,E:zÇ1Ê)›/óE™5ÇTÍóGõz½­ŠE†¼sJçÃQÍ‚®ÆçUŽÏm›/qÝÕ=Ž´÷-ìíl¹.*`²É"ÃÛ ä˜•(-/y`««'ICÞ<¯s'Ël±ÈÛÉáäØ/ªUݬ³AÜõʽ
+ª)J7dNZoiT&ŒÂ©›¬¹?¦p{Œ:uâÔ sYu«†Üþmë z®VYQ:¸ó¸ó£'q2¶>Ÿyƒv¸(²WUÈ÷À½e©rÂ**¸Ÿû"ZQæ-êªÃ­ «L{]˜ŽB)Á`†Ýó×°ßÖ‹ÏöòC»çUQ]ãšÌ £
+‡£¨§IúX3pÆЖtØÙph]žP%±öNßúŠ§‹@»Šòƒ" Db)Õ÷AOñˆDš¦r*‚l¹lˆ€û‹jn
+çó/7ÅâÆ>Ì'±P;7ß<¸ë|”žûþé‡[#püHŠ-Ë€õi-ø<Á’·!…Ó3)
+–A4WŒÁñ¸ œ ñÍ‚í)Fc’û‚ë ŠÊé—=$XNt,¼d!lÚ%brT
+h(øD‰©ý34 ®Çr6Zõ1Nâ .pS´Ÿ¡MQÂèµ ¨ †¼Ü9U;D
+úÿVkí)Fc’ûÖJ¹&IJå°óÃÖš
+ô/nÐ]å®)èaÌ$S扎ÐR7,+Z
+kßo=ÁhD1n5
+–µ›³I˜iŒ¡V9Šj‘ã$ÞQhL¯3¸ï÷ì²ÂmGl‹®¸µ/1ÄAæbÛI[Ê8˜ÇcÃEšb'Ý×76­‡62kj yµô>Ü—OÆþf§NÒÖXEXäÓBÊDh=‰?·@Åížm\ùbÓH—˜Õk,£°¸ípë´x^‰+!"Q*Ǥóˆ}Áe—œÒGì‹CœU§S.·'q»™àqؽÝ´Ð3 öž‘Qü®
+Õß6Ùz5”°Sbô4R Wl> ¿øaÓä«â®Ì«Kœø¯ÕŸÉ(\¾‰ï¿ÀWõõ¶Åæ}Þ~ª›O-™îK|\† Ù½¼iêÛb™GÅݪùZ šásiL‘/«¯>ƒy7Ú.7Q[ü'Ç¡j»¾ò¢}…uv÷lö»&«ÚUÞ´_µ½;Â"*šÜ [u•G°à‹§ø?ÏtuïÆÛþ:Ýô¡]?ç÷­·1û0þÈ §‹Ã3„Kg£=[N‘qs‹|8i±öøTj€š2q :@õF'>Õug¿ÀÀÝ*Ó¹ ðg¾²
+ °ê¿&8™`6ÙWÆ`4¦ó%òf?˜ÅöËj“-lÇ% 0hQ:<m žYÛÖ ©—ØwtÌ >Ø®ëξÀü·Î˜N¾uBvá2¹áM‡‰ Owøni’÷êºó…u>uȦP<X¶ »µ/n+™V+2\qì:Ç&VI<Oí¸bò#çáeé*ïñ %÷Ù4ÖuÛíì¼@2½5R>·„6ä$e‘»=þµ«ª–ø%ÍVV!ûî3"ÌÆ–ÞØŠ*€¬0j™êqò@ cZ…*pšÈq‚Ar"¦öŠMÁ¿
endobj
-1324 0 obj <<
+1363 0 obj <<
/Type /Page
-/Contents 1325 0 R
-/Resources 1323 0 R
+/Contents 1364 0 R
+/Resources 1362 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1294 0 R
+/Parent 1334 0 R
>> endobj
-1326 0 obj <<
-/D [1324 0 R /XYZ 56.6929 794.5015 null]
+1365 0 obj <<
+/D [1363 0 R /XYZ 56.6929 794.5015 null]
>> endobj
426 0 obj <<
-/D [1324 0 R /XYZ 56.6929 350.5137 null]
+/D [1363 0 R /XYZ 56.6929 769.5949 null]
>> endobj
-1327 0 obj <<
-/D [1324 0 R /XYZ 56.6929 322.7017 null]
+1366 0 obj <<
+/D [1363 0 R /XYZ 56.6929 748.8062 null]
>> endobj
-1323 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >>
+430 0 obj <<
+/D [1363 0 R /XYZ 56.6929 495.5006 null]
+>> endobj
+1367 0 obj <<
+/D [1363 0 R /XYZ 56.6929 469.1643 null]
+>> endobj
+434 0 obj <<
+/D [1363 0 R /XYZ 56.6929 192.6113 null]
+>> endobj
+1259 0 obj <<
+/D [1363 0 R /XYZ 56.6929 160.5008 null]
+>> endobj
+1362 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1330 0 obj <<
-/Length 4168
-/Filter /FlateDecode
->>
-stream
-xÚ¥Ërã¸ñî¯ÐQ®1Ä‹*§ÉîÌÆ©dv3ãÍ£vs EJf†"‘²Çùút£|™{6åƒÀÐh4ú X¬bø+k¢X9½JŽL,Ìj{¸ŠW{èûáJð˜M´úÃíÕïÞ«tå"—Èdu»á²Ql­XÝ濬¿ûãÛŸnß}¼ÞH¯“èzc’xý‡›ßÄÑÏw?~xóÃÏß^§z}{óã|÷þÝÇw¾{w½Ö˜/Ã… ïoþüŽZ?||û—¿¼ýxý¯Û?]½»í÷2Þ¯ˆnä?W¿ü+^å°í?]Å‘rÖ¬á#Ž„sru¸ÒFEF+ ÕÕ§«¿öG½~êÿŒ²‘±2]` +!"gŒœpи(QRy⦅Äq¼n‹ÓCq¢-~ê²®8uGŸß¿Æ±¬Ë®lj‚duNŸÛl_ +`A5:±xµ‘I”jçüJ·÷a 6Jll`0Žažã’@r
-ìáa#Úb±Î‰¶¢¥Ïí}vʶ]q*Û®Ü2°kè÷® ß¬m›m hrú~,»{î¡ŸÓµ°ëâÐt~‚\×Ù§2‘  .Ò©õÍn2óHS‘¦/4·*®ÅºÞÃ
-°³ÕFÛHÖì©DB`?Ûçù„˜uw_ Ë•ô ÀSVï j6;žåijiX@µmN¤%JU¬×?ÖÕõRjš¶›­¼%4½4 ª*;·<#;«²à5ÿ>ó¿yU´L†{§›¤UAf„­¬éÌ•9ȾKÇgŽüÏ£mSïÄ$:±æ¡±Y¥FZh¹H$ê«bèPÁôKb¨PS± †©Zo³šÍv{>Q3ã>Ú8ˆL× REÅãw“A€©©ñöçSÆú@„T< aôeÝ–9c楄‰&ø¡,—”KGÖØg»B™II÷üe]dãT‡c/¬“Æ
-Bjæå%ç1À¨â!Ì86m[ÞUEDyÃ~Úo ñ,nLª¢ðX¿^æÑú¬âx Ýòg3 ä44õôœæ›T¼I\›zCL’tI&éW Q
-Ú«MavG Ø4ÒéX„¬4Þ-GW©‰Œèã³—TÜ•QAŸ›#‡@€½¬‡UˆrÁ–ãøÝWÍjƒ‡ù©-}ÜÚ~f4 òž…8£X§§œÉبf ºè_.F•ÚªàåN¤.·m"7ÈDp[I–‰Í’´b0KØɼÁ,!l¢ÀÒ f Çù]YJ&p,+µ´.•cõ¦Y‹ZǪcg¦\#$Ód*Çf½#m;p'I³ †aSÁ6³}0Í0n°¨¨™6aÍLXZýÌî͘?Фz›Ý@ÂeÔ²wZ/›MÌ3iì%›oˆ9!&rêB*ÂȘcÝxa„õ2 A†ÑÁ3ˆ¢#/¥¯‘Vò£7ÿx5¥gfÔ€¬ ôŒ2JÍñvçÜMœÆqçã±9qE `Ù¹kÇ€tRò©×;2uкËü†Fë¾5oï9}Ýq@ìb¯þC20„Cb”G;´»ðk×uáZñúho^Rþ‹Þ¾ÜÞSs´y;Þ¡ëwè8è‡þÑ<
-鱕‡å›î÷ÐÒÁ|CW¼ÊŽ¢2œ½Ši,ï8g¾ê(7ý¨‰Œµ÷͹B*!ͪÇì©¥öcsúŒš“$ìx>)íI)Hâ.™s+#­”yµ9ש A"rmÑPÝ+ÑË—:7±“¼¯’ýIûÀû³ßõQ·ß%{ô~E&ƒÎÌ#¤ µáô Ñ[ery½ÌC« CfÇ[8ê®ñu%€±Ñòm’hxëK#a'åk¸·—<ø(ÉÿŠõ®a,ŗ쀡c ±dŠÈ
-B5tsžˆüßg°?9`ÑRá–°êx8åÖ²¾;Wc”«)ÀÓ²½§N¿-Ñ<#p6
-˜±cNå ˆÀŠQx†_o´÷Çš1q$$º/g’vד3Ž°€7Òñ7ÛÃæÍjU¼™Û²!ì˜4¶yXž¥îGŠn°«{IµËÐâklˆ1Ø£¨¾*’¢ý‘¯Ã[>’‚¦³æ²/_US0WªÏGz¡*¨©PÁ‚¢sûRÎü½=T¬³Ø_´þ–ˆæ“C+¨¥P½±Åì¥ö•O7Ó*´Š´TGJÅÉì˜û’’TMJ¾û
-›aø1ë¶÷¡ÄÄ[˜ì£oÊî±¼ˆÑ:þNlA\ûÄéõ?Ñz þªþÎv÷Dœˆúš³×j{wš†xÞÓa#c$A7WŸí¥âØ]£e8‹^S÷À ‰þRzÚÏš¨ÙB4õÖW’_¬‰Å߶X*£Øö·Œ>‚ˆÕ+0xžÞ¯+©/lÔ:ŒÖÿ•G  >ñ…õRš­õÄÝ.Þ¹¤‘r=ÿG—¨¸„wM\#•¤³Kƒ»b–„͈˜Yï¡€÷œ vSI;ÖÉ´/G¥ìtR•Ÿ|§! ‚F}>ÜQÁš_0¤˜NÖÛói VÖwÍÙk|„º¢˜Ö'¾h¼È„ÿ8mšGѽ*%f¼•‰p._¥‚é’ý3Øá‰WsGwöÐc&žG ȶÁ$÷Î:\ú- –„ìl¨—ô4oŽ,΋R–êHêxš£EáöUD±ó·¯¯I …‘_Ÿ‹§ Ù»‰9ÏÞ5d9ˆñ¨%ÈÒ#«"=Ð
-‹ÌŸeI|¶¡µ\ Êh^ó0KFÎZ»ü,kÓcÜŒQ†7Wã» Ðj¥Ä°²W–|) —‘Ž)<iÊiÛÞtèKõ8p-V™æLŽÑ6Ù¹Ù@ÈWL~f<ß¹C‹|.‚ƒ÷> И“¾‚˜Šõ_¢XÃÉYãëÛO7?¼™ŸŠIä\’øÛ!•ºYH§ýŠGïÜúñ›ñâùônmŽÉøTÒm
-~Õ<£&1‘jB̳§vaÐKÌq1­
-ɺË*~€—Z ÿR€›Nk6™Ú¯rú¿3¢Ô;ò~ßÚ(¾é¢©u÷ÕUðÞ›J'×.”kÁÁ¦ó’®iÜlMƒu‡}uç¾èaúBšaƒß}Q'z}‡Ÿç–Ø`BR“PŽ áÄ‘`Èvðˇ[¾q<Bæ¡`6”nK7‰J×o—Ò«éÅ—/w–û²ÎºÞÚNSŸ—ªv#N—&f¸=/9ÖŸÚñ»¾:°¯CßÝSX/ Cþ`ùb1ïz[AüwÞC(§c&ûSv8@jç?Ðó†Þ%Wç¢41É ¶ÛD±xvi‰X!Õl[j{#‚ùêÊcÅC'&\
-ß{aû á>‰Àn”‰ÑPj ×¢^æ/¶K® ˆDGé³wV£°¢b.rú,i}¡x" /_Š1uÚ.ÕP UÒÙ—î>جËx7Éjˆ¨Æwók|¬’©Ã=+@o~zÐâŃž2NþpHžsVÈ8)EJ8E2£»sáÀU*1»;'¿ëþIŠ™<IÑ!шMx’¢gïPÌüŠíŸË -(ª ÿ .ì}Ão]|jØh¿™âÕÏñú¤p)×1QblòMG¾égM…Ð?•Ì@øY5_$’ëOõUÙiT•Tá²G&kšŸ†3“³Ûr9{¶ã/oKÈ+4ß,qþ=n¸—÷óžHO'o7?ÊBRgÍÔ›äE—•Uû&Ïbf^ó¢ÝžÊãðü|ùݾH×÷ߪ¤ÃóÑËJjRõ”T
-PÓƒ€qÔÆ+’V¥+ˆ,øõ¨½†?>æ8'ÑýŸ„ӥψI pJ”ó,êÇ|„¦þZiéŸ%”ÁËä¥Õâþ¿þï¤þËDC n­\&\ÅId%DlL”ÿ‰gŒêÿãâ9éÿ¯‚?sendstream
+1370 0 obj <<
+/Length 3951
+/Filter /FlateDecode
+>>
+stream
+xÚÅÉrãºñî¯ðQ®1ÄVN“÷f^&•L^fœ­’(‰’™‘HE¤ìq¾>Ýè7S^’CÊ  nôX\§ð'®½IR•ék—éĤÂ\¯Wéõú~º<f-‡£~u{õ‹Ê]gIf¥½¾Ýpù$õ^\ßnþ¶øá×ï¾ýðåf)Mº°ÉÍÒØtñ«OŸ$HF??üþóÇO?ýñËû§·Ÿ~ÿ™À_>|üðåÃç>Ü,…7æKÆpaÂÇO¿ý@­Ÿ¾¼ÿÝïÞ¹ùÇío®>Üv´ é©BBþuõ·¤× û7Wi¢2o®à#MD–ÉëÕ6*1Z©Ù_}½úC‡pЦÎñÏ(Ÿ/Ý ¥šc É«  øi{³TÚ,ë356e³®ï‹}µwy‹-»È pº~Q궠ï¦8uƒË†~wå}Yí¨]Ÿyþ*ßðy›¿ƒ¦Í‡üô­Y¶ô›3–U½;só¡Üï©u¤õï‹ŠÑnϧö6
+‘dÆÈ@Ú¿ÎÅ©,:°¶¦ß²…#V"]ÜÞÙÛü¼oéã>ߟ^o)ðP x(4ò:u°.A{¤aCV+8Lk㨲™Ág ”çU=ƒh–â!I q 2’dޙ륔‰Ð‚HEbž.!ÓDkBp<Õ÷å¦X–ß·§™Õ fM\m½ÏÏ ±Ë€A-0X,e…ÜDÐÃ]¸>Ú»0Ð/öõ:ߌŴŽZ»óuK' á„aü!oÚÁ φÐ17GX¶®6¼hÙÞ1‚Š˜á²$E&ŽŽ½¬Ö,¤ $a?©]ü»®
+jµ§¼j¶aï©AB*†ßñ
+g#LöJu hhÔçúØ–uEØ˪_…vP¼ýîöõ
+µ!ÀÂÔ†>V ¶ß ƒ@õ7Ì¥À’¡sr&g£š,hðË–Id‰öJ2%'R—‹d›$ëe"Z&é%Y&6KÒ‹Þ,a'óBD³„°‘ˬ7K8.PƒrËJ-}…ÇË¡zÓ¬Y­ƒcÕifÆJG6H:;–c³Ø’¶¸“¤ÙDC„°±`› ¼g×[TÔLoY3-Kk˜Ù¾òú¢´Bo½í÷0c™@
+½}¹¾£æ€x?¤0ë(DAþÁ¼štZ›¸|ÝþZ:šoèꎺû¨ gÏ…bÃÞ,3Ï:Êe7j¤ŠÍ]}Þã.!Í÷ùcCí‡úô 5ÇZŽv<ŸÀÝñGP›]2ç^&¬›W›síd ‘k³†ÒèN‰^Ö8—e#;Ét•üN:ÞßA>DÝJöèÝ8Š„I@g&ŽR„œ†úxzÐè¬2¹¼Næ¡U!óŠã-µª1šC­Ð&ÙF°¾4()¼XͽäÁGIþW,¶5c)¾ç ãKÞ`llûÍϨJ/僲:ïvlI*6-ëSÞÜÅ#Z©u}:ÝøÅùØrf<Ôbò¡ÅÌ™¬·¹P¯E´ÅŦš©§;yì‚záG®S 7ˆè¡“ba€Æˆ`]¢mŽÓa@Þ¶ÅáØò´š~y·øðãç¯<ƒâl€­ëÃá\Ñ Ž—ü
+ý†0;f`v‰™Ò+30ëÄà–çÍqÙ”ÿ.f–ƒ-eÖg ù
+FH‚’e  ,AV-‰i¶ø{jÒ!ŠúÜ6`b©³½+ ñÕŽ,«ˆ&n±ÜC¨†n.lbóÏ3ØŸ `Éœ1¸%¬:íODe‹Yßž÷c”«)ÀÓ²¹£Î@–Nûƒhžx6
+˜±eNå ˆÀŠQx†_ÚùãÍys$$º+gÄ-¨#5ë¶3Œ°€7ÒñwÛFÃÌê¾x7µe}Ø12hlóþž¦’º(ºÁ®ö%Õ.c‹#¬¡!Æ`¢vøÚ“íFˆŽû²hÞfLh:kÞ!ÿþ¬š‚¹R]>Ò …PQM…ŠÛ÷òp>à‡ìì¡bÅþ¢iòf†VTK¡:c‹ÙKµÁ,4›h•ŠZEZª¥Ò‰švª&¥$U“Ëw
+
+›aø1o×w±ÄÄ$Œt£oÊî±¼ˆÑ:þNlA\–{›éÅ_Ñ ëà¡Ñ‹u¹}¤NDCÍ9è µƒ;u1^…FðtØÈIÔMÄÁÕg©8v×hÏ¢ÓTàýðB¢?—žv³F‡N¶M½ÅÕ™äkbéÛs2I½TaQiFõ
+ žÇPLŠM((ë „ú £õÿaåÁB´…‹ŠôÂzNfk=r·³w..QYÇÿ¦ÍÛP’£%‚kâ‚xš(ë&—«b’„M61±Þ}ïé>4ØM%ýP']WŽrìt²/!ùv1 ‚Fu>¬¨`-¸‡édµ>Ÿú°aeµªÏA›à#ÖŸ®8òEÃEFüÇiã<
+FÈAbƤŒt³š«í 0]Òë‰T\`„'~ZÍ8ܱ ŽÂÄȳáè‚ù:šäÎYÇK¿yÁ’õõ’nÏË#‹ó¬”9HŽs4N D5i–‰W&†ÂÈȯoÅã…ìݤVN³w ÙÇDxÔ$ŸÓT•è~¯°ÈôºZ*Эåµô•Ç¾æÂZ&™÷~þºzÙa\QÒ]ôø.´Z)ѯ”e3—„ËÄ÷Ç´)ê*˜ͦC_ªÇkñÊL0erŠ¶ÉOÍš@¾b
+ë0ãI±E¾—FÁÁ{„hÌÉ@_ALÅâ‘/Q ¬‘ÉIãëÛ¯Ÿ~z7=!l’eÖB´¨œFRçiwM/ƒûÿnür8áéýÿS¼¸¯EܺwàWÍ“ÝX“¡F›yò!ziS\ÌA«Ç„]´ùžà¥VÍ¿àºqÍÁÛ±ýrÓÿ™¹àÈ»|k£ø¦‹¦Ví³«à½7/äF×.”kÁÁº¾$Â)5 6ÙdMƒu‡]•·ç®èaºBšaƒß]Q'Á }žbƒ‰I=LB9&„#G
+€>ÛÁ¯n…Æñ™c„‚YPf}Xº´Ê-ÞÏ•AÆ_¡ÜYîÊ*o;k;N}^ªÚŒ8]š˜þö¼äXlÇW]u`WžÕc\/"Cþ`ùb6ïz¿‡ø#PN§¼IlìNùá
+æÎ&îÉ~,ÄNVÉá~žDAÝ v1Å5¸\Rx¹„O,^kw…êžSµ`Ú.¦•àµœ|Ùâ¦~ãü1:›ØÔÈ·ÛZm­½hkÍ+mmh¡5 £ë\âSm¦9kK{q]²‰OÄ(§ÖÝk²ùGdA§–Ÿ%’^;M& ¦2µ‘F“䲋–Ö™DfÝ€Y%iWÚ\Çg’øBéÔÌ—<&öI¤3övx ”Çl:·gïeyî%{ ‘ðͼMÞŒp#S;Œ ‡¤ð›¤JÈWæäÊvÏÃè³ê”¥©}V
+„ÙË%2–§ÐE¦*wi UÌåPņsW¯>UcÇ®[±atê'Åêÿ£I´¿Î¼^ œ«¯ÕŸ¹mPŸ8Íù¿ô:JËÿüoýÿ„h—(ïå¼'U©M¼Ì\ÜeŸøîîÿ#žný?Nr(9endstream
endobj
-1329 0 obj <<
+1369 0 obj <<
/Type /Page
-/Contents 1330 0 R
-/Resources 1328 0 R
+/Contents 1370 0 R
+/Resources 1368 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1334 0 R
-/Annots [ 1332 0 R 1333 0 R ]
+/Parent 1374 0 R
+/Annots [ 1372 0 R 1373 0 R ]
>> endobj
-1332 0 obj <<
+1372 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [116.0003 171.5741 166.1092 183.6337]
+/Rect [116.0003 269.6318 166.1092 281.6914]
/Subtype /Link
/A << /S /GoTo /D (tsig) >>
>> endobj
-1333 0 obj <<
+1373 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [399.2874 61.5153 467.9594 73.5749]
+/Rect [399.2874 153.6184 467.9594 165.678]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1331 0 obj <<
-/D [1329 0 R /XYZ 85.0394 794.5015 null]
->> endobj
-430 0 obj <<
-/D [1329 0 R /XYZ 85.0394 769.5949 null]
->> endobj
-1219 0 obj <<
-/D [1329 0 R /XYZ 85.0394 748.8663 null]
+1371 0 obj <<
+/D [1369 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1328 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >>
+1368 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1337 0 obj <<
-/Length 2814
+1377 0 obj <<
+/Length 2923
/Filter /FlateDecode
>>
stream
-xÚÅ]sÛ¸ñÝ¿BoGÏX(@
-¼]ä( Šª°LÄvu8eÕó§q]m7Ó€Ý%¬cf´‰=vVΆ)JÁÓ!Šã=@Ô
-±dÓvÏ6ëfS”÷„VnWÐÞ³pÿ#Ëû‡úåïÓu/Œ±¯_É€yÿýͲŸ$eF5%ÇüµJ~Ÿã1–ESTe0º¿`ò0=í-9mBüí±qH*˜8NƒqÖS͈C—†aøþêææâÁu>ÝnŠæ‰FÎ7ªª©Á·.z˜EˆÕÓM1qÅ
-So'³j6åéVs¿6¤îÖ™Ô.xíN°S…ž»Ý ¶ña _¹â©a0­6¡XªÊ™K+8vR¢ á² C˜ßAÌVÌض¨y)hCαքº– ê³â·ßÉ5KðÌÿ ÛH¨÷´d¶¤¦ æ‚àù¸È<fÇò)+*舭ÙK‹NNê÷êl×gqÛ)¯Ü[
-2
-P«€‡µcRÆãôÕÊIÓ4ô®(óímUçû[ïtƒÐ©ê¶‡ ößk]PùÛÅ?Bµ ¡\Ð{åæõu7ûÖ¿SéÁÞ½;t‹`ßF;¥ò7h¤Gë
-N/€KÎKÓe¶ÊÏH×xm`⽎b¦Ìîk_„ûÈÔTÓjyÆ=¦²Åêl¯ÊjÂÁ¼Í ÷ꤣÖÞ«Ašn šï­$©} bGJDªÃ“]‰(|‰øPä¶þ&rDA{Zw¨+§*©Xª•Ú+—¡[­ë¯Ý:}/r¯²fºO—pÒÖóî)D‹;‡q·tçsœT|pÜN}Ž˜èÛ`Ì®¡“K#þS^ßU›»²ìânàÔS­‘_òcÅÿÌŒlw­ì¯*øõMBü’ü›ƒ8¶Âû¹ÛþÔŸbè@0PTøà3£ÇºzÌ7ó­‹Y&šC©õö «ÊçÀ wšî„1žfžæ2oúT!»Õ¾Í¦—eýØÂôðE
+xÚ­]sÛ6òÝ¿Bo¥g,ILž’Ôé¹wI{Ž;7wI&CI°Å‰Dª"e×wÓÿ~»X
+<yýó»7W?þzýò<O“›«ŸßO¥æÉ›«\ôãõË·o_^ŸOE¡Eòúo/¹¹¼¦O™§ñêêÝ´bhx‚èõå›ËëËw¯/Ï?ÝütvyïÒ¿¯à
+/òÛÙ‡O|²€kÿtÆ™2…ž<À„3aŒœ¬ÏR­˜N•
++«³÷gÿŒ{_ÝÖQù ΤÊäˆ
+tPè§iu½[uÕfei惉ÁÛm+ÛbTHÁ”óeÜÛÂ;{ 1^ãLMŽ‚ à’éÒr]®í‰:ÏY‘c¨íK<¦*ïÜy(b²å®™7«‹à.î0-×9VÞåU ‘7KûjãnÓ÷@·;éÖÞ±'DlË\ïDåÄûÊ>|[öM2Oë3ÊʉJiVdú@R櫲m?õ³ôƒ0¼.»ùr:_UÀIÌæÝP.[pŸÆç•ó'¸þÇ‹1ÿOt ߃çvâûvb[ôØ-ä"S²hÄ´íçfû¹nNWN<Íyñ ?æûcÇù èØ>G;8Ü3ð‰!ßk@zJ¾¥4Ⱦî¤4ÂÛ¹;þ˜dŸ¸Ðg )íÁ±¤aÓ<Øííι¬<¹…D²‡]ôªÚ‡À EwFE7ºÓÒÓ\ÙnHÕ)²ÛÝÚ­OàcÝ>D˜ŸdÉo;»}$p© k!¥Æš.?ðÒp)rp9vcCü†©“:Œˆ
+ûàz"VtÝG<à ¡pú y Oñh$Ë%O‡Lºø3¢ÓËs¿¹Ý?ŽP¿kGìäg<8O
+^¡ª— ²bh¿!Ús ã* @ðöÕiáË0
+¿“åÀJß»w†­]ÙyX ˆ.1{™ØETŸ£ ¡p$Ý¡™g¦g eì!§áv§K›í…Óq¬bó,ÈGæÄPº6W.BJóÐ÷È}«8Ñ_‚”¹íüÆ[’ñÚS ¶àHÅz?ùöD@êëìƳ:¸eO¸ŠkßQ¯.rmýô–Æn´p1ÑJŸ,\Ò<?LC[¢[ù»µîÁàQ;Zú(eŽPJp½Ïû
+MxSÉÍaè¥zÞÙ”,œžI~R§ýÒG}üÔR Ku„œVÉAëMR~àú_ņµ/é0 „sLh•Ãùq
+’=¥Æ~ß屓÷Íÿâ±ÿÿ—4gPEÈñŠe^°´
endobj
-1336 0 obj <<
+1376 0 obj <<
/Type /Page
-/Contents 1337 0 R
-/Resources 1335 0 R
+/Contents 1377 0 R
+/Resources 1375 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1334 0 R
-/Annots [ 1341 0 R ]
+/Parent 1374 0 R
+/Annots [ 1381 0 R ]
>> endobj
-1341 0 obj <<
+1381 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [432.8521 516.7732 481.8988 528.8329]
+/Rect [432.8521 617.9092 481.8988 629.9689]
/Subtype /Link
/A << /S /GoTo /D (DNSSEC) >>
>> endobj
-1338 0 obj <<
-/D [1336 0 R /XYZ 56.6929 794.5015 null]
->> endobj
-434 0 obj <<
-/D [1336 0 R /XYZ 56.6929 674.1923 null]
->> endobj
-1339 0 obj <<
-/D [1336 0 R /XYZ 56.6929 646.1449 null]
+1378 0 obj <<
+/D [1376 0 R /XYZ 56.6929 794.5015 null]
>> endobj
438 0 obj <<
-/D [1336 0 R /XYZ 56.6929 566.6943 null]
+/D [1376 0 R /XYZ 56.6929 769.5949 null]
>> endobj
-1340 0 obj <<
-/D [1336 0 R /XYZ 56.6929 535.8374 null]
+1379 0 obj <<
+/D [1376 0 R /XYZ 56.6929 749.0627 null]
>> endobj
442 0 obj <<
-/D [1336 0 R /XYZ 56.6929 380.8349 null]
+/D [1376 0 R /XYZ 56.6929 668.587 null]
>> endobj
-1312 0 obj <<
-/D [1336 0 R /XYZ 56.6929 355.7523 null]
+1380 0 obj <<
+/D [1376 0 R /XYZ 56.6929 637.2799 null]
>> endobj
446 0 obj <<
-/D [1336 0 R /XYZ 56.6929 225.5162 null]
+/D [1376 0 R /XYZ 56.6929 480.6393 null]
>> endobj
-1342 0 obj <<
-/D [1336 0 R /XYZ 56.6929 194.6594 null]
+1352 0 obj <<
+/D [1376 0 R /XYZ 56.6929 455.1065 null]
>> endobj
-1335 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >>
+450 0 obj <<
+/D [1376 0 R /XYZ 56.6929 323.8452 null]
+>> endobj
+1382 0 obj <<
+/D [1376 0 R /XYZ 56.6929 292.5382 null]
+>> endobj
+1375 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F41 910 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1345 0 obj <<
-/Length 2081
+1385 0 obj <<
+/Length 1719
/Filter /FlateDecode
>>
stream
-xÚ­YYsÛ8~÷¯PåI®Šà¬ŸœŒ“ñÔÄ3ãxw«6“JÑ"d³†"5$%Ç»5ÿ}º‰)Ë›”Ø8ØèãëT0ãð f*b\êp–èE<ˆfËõ ŸÝÁÚ»“€ö,ü¦Åp×뛓Woe2ÓLÇ"žÝ¬¼ãJ³›ìãüÍç¿Þ\\Ÿ.DÄç1;]D1Ÿ¿¾¼úÁÍh÷xóËÕÛËwÿ¼>?MÂùÍå/WnúúâíÅõÅÕ›‹ÓE ¢
-VAœŽ¥Û4<^„,LÚÓ´ikÖ¦lÇ7§g“ß•ùeZ¶nêw!¤Âyê&–Enü¢•Òü¹5 M<äEá¨[3ÜÒTÅÎdtXÙ+c/«²5_ÚNU~¶„d’ó¨€é(Vp÷
-âð!oïQI¤Ó ®˜ yø„ˆÀDŠ}ù#ÐÎH¡ñY•Åãx&].MÓä·Û
-ŸœH¢;Õ‘²*ûÉ)˜‰$a"àOáL°@ÆŠ6®ã@Î_?:CB(1)¸;•Ì——w`|¡,Єžÿ ì&,üáé¼KMº¦¥²£,¬`m½-Ú|SÐ,JÙ¼DhÉy–¯Œ+ã0iA [ü9zž¥mêæ
-íˆÏIvÚ›÷¥Õ˜{M]¾\UµÃ—ù’®AÆ—f!Âb .Ói7›–Y¿ ñ±·Ü¹ÑⶤwÜ£ÙÉ?\} 9Ón7¬“j€ä÷iùˆ{¤34<)Ì`bÓæUÙ¸·yÙoœ
-} z&‡`XURL`y;
-L´ T¥
-°ãÇiä_§wH· ø)u"»Á²HšïUfhôh~¹r Ñã½9==xE—/¯ÆÛ`a»6ñ½ªZ:‰ÇJ
-X¹ð¯ïz¡×[ÛÉ Д¤ÓAAIòåX„$¥ò&ïýãR
-AÑÒd„ ^p>àö…ò§AÙ/¶™íëíyYVÃåÛ4cþcµ¡kk÷#úðvPHò4Z >ŒGFGM^BóbùÂËŲÛg¹Süÿ:b±s‡ÜG½¿Ãú÷=¾mçv
+xÚ­X[sÓ8~ϯÈð”Ì`U¾ÛÛ§Â,-Ù})Œj+Ç6¾¤Í.ü÷=Ò‘;54…N|$ŸËwnŠÍ1…Ÿ9\BíÐû¡C\jºãh3¢ã8{32¡™Œ.׋ÅèäµíCz–7^¬:²BƒÀ/âËÉË·gçSÃréÄ#SÃõèäÅlþ
+wB|¼ü0={ó÷ÅÙÔw&‹Ù‡9n_œ¿>¿8Ÿ¿<Ÿfàšð¾¥$üà…׳?Ï‘zsqöþýÙÅôjñnt¾h}éúkR[8òutyEÇ1¸ýnD‰îø”˜ah7#ǵ‰ëضÞIGŸFµ;§òÕ!ü\; n`ù
+‡i?ò !^'2™)ùÉ*ÙÇ'Kwû`Hb¦:…öAHaŠˆòM‘¤<6t÷é«”U¤µ¦»„ϵ„’qèV{øá  ½Ÿ ž 1¦:~’ÎŽ&B…rÑTS;h ÔDhop%È‘±5«ë•…J•¦ö6¬ŽÖ\)`ÙÏ£4ÁÞ!´êæÎ;‰ ª;ÌÌ ŽãšýxE˜ån†h¶š: bk6'Hœe»¡ŽGb¹¶Kö °lâ„A0
+QíªÕB´”?¯æŸÔ¯›BÉR„-rÈÃF½ùfÀQ nŒŽëÿšŸ ¯ÓK¸=ÁÔqû›™÷ š9/3–>Ãõ,Û%çºý²<9A–…,>AUë¼Ic¤e¯D2„–«Œ×·yù¥3::é+_7°µVÚù0)‘¿“à7¾Ÿjà[í°gÝÇ2ߊ,’‹’CrUÉV-+^n“H-DÞ7²g›ƒÖ*¹¢å ¾¯Ž·‰)E¹HŠZmî"ÒLš·VG* ¼€ºàÒÚ`ì§M, õÅqÉ«ŠW}ù}·áÖVÆÚ—7¦JÇ’‡³êƒę̈@ÕéÉ«$=nh»H|ýìTUîüïG¶á°³žß=6ëßïó[ÞÜî%K–×Jàª,®wá,J¾Mò¦ÚÇý‘õ
endobj
-1344 0 obj <<
+1384 0 obj <<
/Type /Page
-/Contents 1345 0 R
-/Resources 1343 0 R
+/Contents 1385 0 R
+/Resources 1383 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1334 0 R
+/Parent 1374 0 R
>> endobj
-1346 0 obj <<
-/D [1344 0 R /XYZ 85.0394 794.5015 null]
+1386 0 obj <<
+/D [1384 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-450 0 obj <<
-/D [1344 0 R /XYZ 85.0394 170.1085 null]
+454 0 obj <<
+/D [1384 0 R /XYZ 85.0394 265.7828 null]
>> endobj
-1237 0 obj <<
-/D [1344 0 R /XYZ 85.0394 142.8732 null]
+1277 0 obj <<
+/D [1384 0 R /XYZ 85.0394 238.5279 null]
>> endobj
-1343 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >>
+1383 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1349 0 obj <<
-/Length 1067
+1389 0 obj <<
+/Length 1057
/Filter /FlateDecode
>>
stream
-xÚÍXmsÚ8þίðG¸é,¿{ú)Í‘\:×´Gé'Ža[]lË•D€”ûï'¿Hƒ»tÆòÊzôìjWÚÒtõCší@Ç7|Íõ-hëÈÖ‚¸£k3ÕwÝAå7 úÔ¿z?ìüzeºš}Çp´á´†åAÝó6 G]°§ôîå§Û«›ë¯ƒ‹žku‡7Ÿn{À°õîÕÍý¢u=¸øøñbÐȳQ÷ò÷‹ÏÃþ èrJŒ÷7·¿¿x¼
-ü€lc—¦V-ÎÖ9
+xÚÕXmsâ6þίðGèŒTK~Ÿû”KIš›^îÊqŸ(Ã(¶HÔÛ'‰$äè¯ü&˜`é¤Ã0–%ëѳ«ÝÕ®¦«Ò,Úö4Ç3¡¥#Kóg]»Uc—T|Ê@õ«Ãί†£yг±­ §,ꮋ´a0êÚÞBлç_®/®.¿ÎzŽÙ^}¹îléÝ‹«?úyërpöùóÙ k¡îùïg_‡ýA>d¯®Ë{¼ü±tпèú×çýÞxø©Ó®d©Ê‹t#äGg4Öµ@‰ý©£CÃs-íQ½èyÖfÓ2 eFÙv¾uþ\VF³©µúC:Ćkh¢Š]Úº‚r,Ú62ŽzÀÖõîŒIù”…Lc>#2ïþK·tIŸä’“GÕFyï‡ü1N¥W
+û'†-ϲk`ž(ŸÍò¹4 Z¹ë hÈþõïÁ½¸oeÞã'¥?7x!¢ˆë §UZ÷_¥‚¹¢ROëGmJ´œ.ÙmsÚ*¿ çIµ=‰ÉJÓl’·È+ñ;*ЉJü.ÐÑ¥~«R!5±GU?׶1­†–mT?Z%¶ª1^oîÿHí̸y }«¢‡Eï®z:¥w\†¡£Ë0ü®Ë0´y°Ò¨s<h`Çz£úf]=Õ%
endobj
-1348 0 obj <<
+1388 0 obj <<
/Type /Page
-/Contents 1349 0 R
-/Resources 1347 0 R
+/Contents 1389 0 R
+/Resources 1387 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1334 0 R
+/Parent 1374 0 R
>> endobj
-1350 0 obj <<
-/D [1348 0 R /XYZ 56.6929 794.5015 null]
+1390 0 obj <<
+/D [1388 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1347 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R >>
+1387 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1353 0 obj <<
-/Length 1046
+1393 0 obj <<
+/Length 997
/Filter /FlateDecode
>>
stream
-xÚíX]sÚ8}çWø1ìŒK²,kò”fI–ΖîRö‰e‹ÄSPK4¡¥ÿ½22`‚Íì>dƲd{î½úB–­Èò(´ w,ÆHmD­QÜ°­Ýv×@Å7`ù(õ®×¸¼%Ìâ»Øµzã–mÏCV/è_ÜüqýW¯ÕmLí 6uí‹wíÎ閭›ÇÍÇÎmûîŸîu“9½öÇŽ©î¶n[ÝVç¦ÕÈ£H÷ÇÂŽ·í?[¦t×½þðáºÛôÞ7Z½•-e{‘MrC¾4úÛ
-´Ùï6$Ü£Ö“~±!â[qáR‡eMÔøÔø{Xj]t­ÒR³*yI@d{;œYŒrèL
-ö›Àµí‹Ø*ó9Pa,@˜˜–dß‹Ì”¯ÌcÛ­AN)Þ”NÕIHIªÂñÌ”gBÓl˜¤æunây…£PmTƾTzè4‰fû†BÛC@D~ÑIŠQšòH²@¥@¦þ Î5ºO¦÷ŸÅl[¦]e©²0y¨mßÊ!2f#a*ÿµ©Nœ¡ÙRÁ1 fT#Aæº
-9¿¥‰
-’ÅÊ”ŠÃ
+xÚíX[sÚ8~çWø1ìŒ],Ëš<¥Y’¥³¥»”>± ã€H<56•Ä¦´ô¿¯Œ1¹‡IvƲäóù;s,ì ûÃŽÏ ¢Âu¸p!C˜9ƒq 9ví®†ógÀò!P~ê]§vyK¹# ðˆçtF%,"ßÇNgؽ¸ùãú¯N£]„¡ ÖóÐÅ»fë÷lFd—›­ÛæÝçöu»æÇV6ÝnÜ6ÚÖM£°Ï°•'9ÂÛæŸlt×¾þðáº]ïuÞ×B—²¾ÑT‘¯µn9C«öû‚TøÌy²7b!ˆ3®¹ŒBæRºœ‰jŸj€¥Õ…h•ýõ!ó ¯0 ‹KÄȇÂÜáL@º°`·<„.‚È
+¢ß“Xmjô/þ¨€«öÊ00Á} s‡h£Âøa›ð‡q%GJêG`ÂqOÇ÷Rí|;
+?gbÔìT§AL#‚q ÍRèp‡|—*qb#0
+´Î£ðG–sª`Íl’K<†±¹ª²Å(Œ*£iK ÊH>Ø@NbÄÑì
+wU3‹}´-T*Ì¢w¼àÇJÍ5±R\Î!Üý"ó°ƒ^¾nµ®Õ§·Чe¥è¡õs]Ÿ
+ ´D
endobj
-1352 0 obj <<
+1392 0 obj <<
/Type /Page
-/Contents 1353 0 R
-/Resources 1351 0 R
+/Contents 1393 0 R
+/Resources 1391 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1334 0 R
+/Parent 1374 0 R
>> endobj
-1354 0 obj <<
-/D [1352 0 R /XYZ 85.0394 794.5015 null]
+1394 0 obj <<
+/D [1392 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1351 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R >>
+1391 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1357 0 obj <<
-/Length 1863
-/Filter /FlateDecode
->>
-stream
-xÚ­XÝ“Û6÷_áGy&fø¥¯ÉÓ&ÝM·Ól{çå’ mQkµ²äšt\·×ÿý@‚”íöæîÒñA@à2›Rø±iš‘¬äå4/%I)K§«Í„Naíí„™yšŸK½^L^Þˆ|Z’2ãÙtQŸé*-
-6]T“Œp2 4yóÓÝÍíÛ÷W³\&‹ÛŸîfsžÒäæöÇk¤ÞÞ_½{wu?›³"eÉ›ï¯~^\ßãRt¼¾½û9%Ï(½¿¾¹¾¿¾{s={Xü0¹^ g9?/£Âä·ÉÇ:­àØ?L(e‘N0¡„•%Ÿn&2$•BDN;y?ùÇ ðlÕo£„‹Œ° `Z’LpáøGßéÙ<£ÔSŸ;µ Ó«Vó€“?ÝA§\’Q93FÊ4å^=nÃŽºßÔ®zåeé¥ÔÇ œ|¢)í»öø¯ºÙ 3†üW8<\êa#zôÎDÿÐgšígUU»ÀÛö;;ðÝäá !$ÚóÃ_ãæ/ŽQéV?*ÛôÝÜ
-ªw\ªšÇÍSÎ Ki1^ÓŒ¹¸A-§"wÕú
-äø[F !!¯4ÀäÚøxdع ‚«µêu…l@(߉@ì”Xà.c‰ó¸«M÷gÒa_È48éÝ~³ô±îR×ÎÜšwØ-`ŽËG8‚^ß9!†"CÐzÙeÕXжÚï›<•ÉR
- Um#7 HØ_Øt€‚\^Agä@¥Ç;\œžm?Ý1O}ñq,C¨yʃ‹:|):Ρ±k¤žºîx‹÷·o‘úU[)-“Û:¨E]®ÂÛ ÍÓ>?¾ô«£…çÉxG\ô5‘Šp5¹¥e9À-c‡}Tà58â6ƒÇ87‚]ÕQ "Óeœ¥xK
-ʃom•8§âp³àPƒ@{ À¨pâ:(4Ví¬ëÏYO²¸«Ž»Fü‹ê9ex/ ºVýºLå}ç Š±éVQÐâØ×>xnäGWÙTí<ÚoQ ÀÕm³iFh½2\óîú‘eÒ⠌̃'’¾s‚ÀԚʮÈMîú({x|2€p‹ê1H`U›ñȤ´qIä QwY¾x³Þw¡Êª¸RÙu¿7à›Á Óó¨1(µõšûu-Ö}ÔX\ÖRãu Bódo42Îí¡Ÿ·
-_,ɉþ}4mj³mõ‹ÓóÚõðô8°Ñ\»|ìúÂåã'e¤€/‡ðDп{`9òšÈ
-’¦¯ŽæqmÑʶU+ïÞœ™Âþ‹€†J†¾ —»ÅûÕÍšÎ7 CE:Q¸c ‚G¼—œÐ^íÑû—ÿù
-‰ Ì™ }F¥‚Vp¨ ¶ª&´?ÛƒQøú}î;ãüÿm’„å.=ðL!)—ÅØŸBtøŠÿæ¿ NÿÏÁCÞ€|ø
-¹S^Y€‘§Ëe'ç_ýAÿ«
-Rg®ÿ\ïgendstream
+1397 0 obj <<
+/Length 2886
+/Filter /FlateDecode
+>>
+stream
+xÚ¥]sÛ6òÝ¿BôLÄ
+[›ë™Muœ«$ûŸ´¤@ev®¤ÿk‘?…:ÉöÕýyVò
+sÁjîo4·:óÄ5i
+|Y
+v†st`œ`!Š$ 4Aâ76A¡±l´DÛ2­›ÒÞ¶¢uóɳ4zr=‰@·<V,(³?Û
+tù"+XxºÏá©Øéhù)Ç\
+‰än´eS#ˆŒKƒu+"æPk†.Ž¸ÇÏwú½:â±2UFw+a˼ÐÃá†÷Ä/é‡\ùfÒñà^@éïÀY\3™‘Ô„SOBr€,3„…g@›‚‹aƒŠ¯1Þ„£*Bu?¥>±LÔ¸Î8K•ÈÙš<E0'çÀ‘œ p€ÉPàëøäöƒÛ Ÿ­…’̯ZùUróì¥9/^‹nQfIgO48cÝ.<áÀßnEÂÃ5 ŸjÙ3:˜*Âx¢ý–‰¸H
+å Ù—
+„óâ'Óqƒ”ÕWÚ#³œ¨&lgY‘øª£~^¼Ë¶q‹ÊçJêŠDÅiëÏô-ž q’ûÀùGuK ÇŸà‘H
+9<xâôi«úú·~"!ÊX!?¬+É//9 ŒÓôÄx‚[õ%œRhÄ€PÐèªü\uÿÚ“!Atb
+þÛš‚QŸaM¬´Éÿ
+O¿äµNC›2Ί,}¥Ó
+4ÇW
+¬}Êèþ3~‹ÝèK1&)0'ìâ0ô]¢$.
+-õO„^ €ESP>AÔs³6¬éôBÓS
+ ü®s.<-J•–àƒ¢ÿE­ 
+3/_Ë$PQf¿OK:Î}½Ä_ ‘|§L…;eêÅþ,;ª"dGUHv@[
+Ÿ'qNˆØ£T!=‰ÊœŽ”/W”/ƒú®ÙóS¬šÐ•ÃX—GÏõŒ )=ö`šC¸ )!ŽºÏ”s)~°B©{*ûpL9 àшîü•ŸiH™“2ºå<o}#ø†ß̤"€„á@tK áüˆP°Ð=ŽÊ°d»«¿HiK*htv¿ó`ßO†jæomôpûA—ºàÁ(í
+–Gž$•YûÂ+φúÀÚ`–ƒÓËô}¡­âºã!b·Ûº‰^ÒH¾‘öÝ,)ÌØÒ·µ¤ #ùAßj׺†©D¤vôLN=qÏÓ¡¹ö›4/Ñ=¶~Ñ9½Ø°½þûθŸùÆ)MŠXçÔ«4ÖY’Nýt«ÂϧßüCñéWôÚþ¢HBSvÞÅçEœÀÄd1òBIæÉ‹Ÿ±ý/ÊB5:ú^ %&endstream
endobj
-1356 0 obj <<
+1396 0 obj <<
/Type /Page
-/Contents 1357 0 R
-/Resources 1355 0 R
+/Contents 1397 0 R
+/Resources 1395 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1334 0 R
->> endobj
-1358 0 obj <<
-/D [1356 0 R /XYZ 56.6929 794.5015 null]
+/Parent 1374 0 R
>> endobj
-454 0 obj <<
-/D [1356 0 R /XYZ 56.6929 612.9401 null]
->> endobj
-1359 0 obj <<
-/D [1356 0 R /XYZ 56.6929 582.8262 null]
+1398 0 obj <<
+/D [1396 0 R /XYZ 56.6929 794.5015 null]
>> endobj
458 0 obj <<
-/D [1356 0 R /XYZ 56.6929 582.8262 null]
->> endobj
-1360 0 obj <<
-/D [1356 0 R /XYZ 56.6929 558.4148 null]
->> endobj
-1361 0 obj <<
-/D [1356 0 R /XYZ 56.6929 558.4148 null]
->> endobj
-1362 0 obj <<
-/D [1356 0 R /XYZ 56.6929 546.4596 null]
+/D [1396 0 R /XYZ 56.6929 708.5814 null]
>> endobj
-1355 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F21 658 0 R /F23 682 0 R >>
-/ProcSet [ /PDF /Text ]
+1399 0 obj <<
+/D [1396 0 R /XYZ 56.6929 678.4675 null]
>> endobj
-1365 0 obj <<
-/Length 3410
-/Filter /FlateDecode
->>
-stream
-xÚ¥ÙnãFòÝ_¡·Ð€Åé“öÉ™x&v<Y»@’Z¢,&©ˆ”=Ê×o]MQIv`]¬¾ë®j鉂?=É|¬lî&iîb¯´ŸÌÖjò}ï/´Œ™†AÓá¨o.Þ¼³é$óÄ$“‡Å`­,VY¦'óŸ¢·ß_ÿøps95^EI|9õ‰Š¾½½ûŽ197o?Þ½»}ÿïûëËÔE·ï}óîæþæîíÍåTg^Ã|#+¼2áÝí?ozýáÃõýå/?\Ü<ôwÞW+‹ùýâ§_Ôd×þáBÅ6Ïüä>T¬óÜLÖÎÛØ;kfuñéâ_ý‚ƒ^š:F?g²Ø'9@&Ëc¯{}_ÞCÁ¾šÄÆJ¡÷j­ŸL¦^¹8ÏR}àJ>àŠvyl’®ìó8±Æ[Ún÷ˆ´yó‡ÁI§Îàþ8èHiS PýÑÔ%ãªVúªuµ*¶ÜÝ5Œ,¤oU<—‡‰WæQùyVn:Ñ- ªŽn/u•›U5+ºRöhêÕÏ
-§‚[ǹ÷†Ž×-aukòèLž5ÔÎ[îlÜYðçºh»rË(¾b«°ÅüxF¿~Yw¯}˜‡rè’è“Ðñôl8¯tT„©F©¨n:ÁòwÛõœG̹cSl;îÃs †Îˆïî>ý£Gí7X½_tQÝnˆo7å¬úY)3;>+«(± T†÷ñCõ¬Ö›U¹†û]ÕÔñØM‰@îlfE͸ǒ»¶œ3wCL¹Ñ©Ë‚^
-P—<ÒG‹f˨§ÕN–aN»N«Âh’E«¤*M©;F 롧 
-.Hú{¬ìIg&KEq±y<kêň®ƒ9HÁ&ÈPgkmô°¬dý][<ÉI
-=êU¨Î[™>kv«9ƒO%­v M¨—ª[†qõtì " ¤U&MøVzºjËXæ/Bx0ìdÚ"Xtštð$yÈHd°c„8Ì8p¿Ÿ Ù.iYĬ«Ï¨‚v ÜxIûÁf2âçE,qÏ:ÂW üYêèÞW(º­¼¬FÅ} ÀV¡¶ÊR –ö±&ªPØça#ö œ›žd†Í ÿ0áˆP½£DhY´ 0›FŽ(ò©Üá^~ ó´îÏ©mT¬VÜ/.Îõ1ƒ
-¼lÏÌŽ<:#tÈ¡§XµÍWÙ³§·ä͆¾¯û«zAD$ßÉ«þN^Ýéϼ£Êzï {G
-ƒ†ç2Œ!fŽjÛ;öó xÞã t·ˆ
-N0LîÃͧP¾yW<¢ p&çOjŒy¬ŒÊ{ºõÊÅ.ÍOïD1¡q2/¯Ä+;Hø0·3λìE/²m;ö<8¹kh¸A¥õÆ&b↲8ÐÏÕ¬äY*Wc’ô¸ë¸®Â|CˆÌ–N$ÂÑI¨Ú$·Ô1hÔÛ€”žVHm8“òš1$Håi° ‡Q/H%µÅþŒÄËù äÿµpgD|edrwR .õïDP2áõPGÁ
-,M¼Û ”ÏÕlDpµn8wx“œhF4ÜâÁ©H¨s>íéºýˆºô§ÂÄ…V
-bê†ÛÇ]µê¦\½=e¡U|ŽìøŠÝhäW)ùÁjd—ÄüÃŒWí†ÑY¬ûÚÓ”Nb›åÉÄ`j™©Tˆ°*Ÿ¨4< /?'&DÃÝ÷&„´‰BËE„Ø5›¨¬C¹„ u%è9ÝSìd1vÙ°x½Øm·½„¨aÖ?¯üùÓzX|KˆŸ(òuÑÛ®¸ëîæŸ.¯¸î÷ñþ=:¤˜û®ëð¸S·/\^Ô!Æ"¡¬ô·z†-Jy>Âh½Ùuã‘Çmåg|_£Ê9äŒ!ħžö@é­¢Á¬Ïû÷Œo!,”ÁY¦Ž=ÜñÉ ªËëÜ—Ö¹îþûÝÇ×·w1£™³Í›R†ÐkÍádAä2öÑáJ±8ªüL´×¼Ú˜XrUŽŸç
-dü°þŒ“Žó×°ãiúú¥ˆe¨Ó_g'¦çðxþÅ×x˜ãsüÿM
-Ç€Äänå IåÊSxÃ?{Ë·
-_ØrÌú3ç:=üâ(x?4Ð.ÓTs¿
-½ã:X{@ЛÐLä6¾>Ü>|#KþÈ¿²QÄ5æ‚þ2šè¶;>Àù/
-`c¿G‚¡ðWÿúéðÓ0Ð8›eæ` ¤3M9Þ1µgþÅf±ÏL:rôÿ¶Ü‹endstream
-endobj
-1364 0 obj <<
-/Type /Page
-/Contents 1365 0 R
-/Resources 1363 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/Parent 1368 0 R
+462 0 obj <<
+/D [1396 0 R /XYZ 56.6929 678.4675 null]
>> endobj
-1366 0 obj <<
-/D [1364 0 R /XYZ 85.0394 794.5015 null]
+1400 0 obj <<
+/D [1396 0 R /XYZ 56.6929 654.0561 null]
>> endobj
-462 0 obj <<
-/D [1364 0 R /XYZ 85.0394 167.2075 null]
+1401 0 obj <<
+/D [1396 0 R /XYZ 56.6929 654.0561 null]
>> endobj
-1367 0 obj <<
-/D [1364 0 R /XYZ 85.0394 139.8789 null]
+1402 0 obj <<
+/D [1396 0 R /XYZ 56.6929 642.101 null]
>> endobj
-1363 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F21 658 0 R >>
+1395 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F21 690 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1371 0 obj <<
-/Length 2964
+1405 0 obj <<
+/Length 3184
/Filter /FlateDecode
>>
stream
-xÚµ[[sÛ6~÷¯Ð£<S¡¸ࣛÚYw»ë¨»Mh‰Š9‘D…¤âº¿~"
-t¦ÞÉd Ï €‰Ì0ü#3‘ $¥éL¦ LÄlµ»À³Ïðìý±˜EZôQ?-/~¼ar–¢4¡Él¹éÉR+EfËõóQt ðüÝýÝÍíûß®.%Ÿ/oïï.TàùÍí¯×¦õþáêÇ«‡ËQ‚Ìßýëê·åõƒy”X?ÝÞýlzRóçŒÐ‡ë›ë‡ë»w×—.¹¸^:_úþÌ´#_/þøÏÖàö/±T‰Ù3|Àˆ¤)í.¸`HpƺžíÅÇ‹;½§í«£ñ#Q–Б
-A[os3@õ!_Ÿ0¦­Vèx.š'ÓÒzáM WÚ‹M
-aÆJ‡T‹rÜ4(/‚Œ"&a jµÍj0ÚÀH¶ T ¥’d¶`1ÅU)G ˆ1îÜ‹îMQîë€KIB’Y" ”Ÿ{ZôQfèÉÈÐ;”6(ÛnË猱y*'„!±Œkw¨õý¸¢¡ÔWÿ1ÏO#Ò6Öy½ªŠ6¦£ÜŒD7•S®ì r^¡”)nÁÅ~è'p QɈç§yX}ž™ÆCÏc‡Ÿð8”k\^œÓ| âC“˜Ð„¦ïP†„Ò´!è,Ù8$šq²õP²u¨Ó8}=æÕ×(ÂŒ§qå5¢Ýçðƒ$ÌWÿ–dsN ¹&‘bTF¸ÆNˆôüŒrÍâ'<從k<E’½CMJ‹s §°ä)9Áµ*µ5¦E ¡ J¥Rqý5b€G7ó+ÁÄ·àÍéfý(—I ËÌ9Æ1˜3)O¹çj„q?át(÷õŒ“°ù SÑw¨)CiQÆ [G&&×GgœCFª©²}½ÍTÀ8 ÛØ–Eõ;Ôˆãôæ"Zð–Œëû1Pž€÷2eç‡1’‚§ž«1Æuø §C¹¯g\"gœÅ£ïPS†ÒâŒã R’ª ÆõPÆu¨ÓH°GÎÃ'<®Ý¡FÔû|ƒ §¤ôõÿ3¾¥ßN^ ÙF‘Âœœ_QaÛŽ1÷Ã[Q;ü„Ë¡ÜïؽAFR`s4ö5aH(-Î6"ÄéÛz¨Û:”ÖhFhq(·ÅjdÿË>*ãêjD¿O73]2߀î@W›øgæÏ'JùÇbwØZÂ͉Ó|þ½5\£Ìgë!¢ën‰<CXÓaéçžC±$Öá'\ åŽÒ
-Ò*UˆCæÇØ¡¦ ¤EiÅG@À4N«>ê<­j8ýpÆΪu±ÿ Ž.
-c7Ä¡F,ñ&…¾[ÿŸ|6phä˜"Ru>·qL@…çt„„?á~(÷Õ¹ Àp¨%i|jÊ@Zœ„‚éRÊ {¨ ;”³º<WÁö¹°ôE•;ÔˆvÈ1
-´ßï·/ušÎwy¶®lŽ[ó¹£›ýzÆÙ²…¦+ÛâHÌ`Œ¿å¦m*jÐhžºÇ—û\'EÌæË' «óÆ4€üÆÊlõTìóº{9³ÏŸ‹­µÛ¤ßUîTe#õ6šÄ¥¢ÖŸïÚrDb$1ïªz¦È{w¿¼½ùÏX=NAàIwþÙåu}εÖ?Ý0þ1¬ZÿLŸéÑάmÏñ`þj756ÓÞ˜×-b[Ôm S·÷ÙÎöÖyõ-¯¬‚OX`[M5¯fûCUì2S<€lm­÷*˜» ÔT ‰ÀœZ? adpÖ¹]‡í±6­lÿb·¿ÙŽõÚŒC]çµyÏ«‰jL[ )Fa×EEr:xÓc8‰a ÞÕ<t]Éù•5¯¬ÓÚeÖ¼Ç|`Ë%™ƒ9&Aôù§S¸ÕÑÍy#æÂƈI*^e­ ˆÑ¤³¶#£¡)»Aݯm8ÕÍ4ÃÃ3ï%¥7$í§±®‚[&¨
-V—MvÜvÐy
-‰a¬œ «u¢¯¼I1á)$D.x?@b¸ix¹>›l  çÍñÑ´4Íj»GZžÖDkµþÐIu+f¾;4/¦©gËÙTÎ$ìp°¹9ŸÊû¨ó©Ü¡ÚŠüS¾ú²Ð³³7©'”;Ôˆv“ŠIl ~iR ‡4b· ̆I÷ëvâ逕¦Ç²¯©ŠUcŸ˜Iž‚'Yéº%–¼1ýYËLhÔ/û&ûË<mé£_Ê«&+¬Úu¹3mnòUm­Ù»ä#)$Z“|
-mýü•ÄŽ ž§Ñ+‹Ÿp:”ûz¾Ig ÆâÁw¨)Ciq¾ ]E%t‚o=T„oê4RžÉ?WEMõ´À"®¿è÷ ‡U ó xKÂyn GÁ‘kSأ幽R°ø ¯C¹ßÁ8x¢‹Gß¡¦ ¤Å§ï ?L0®‡Š0®C†ª.·c58ýLi\½Cè÷÷Ï aÅ„oÀ[.¦=7†—
- ©4M#—
-R`B<O£—
-?ás(÷õ|KRRLŒ½CMJ‹ò¤%RLœÖú¨ó|s¨vCšWú»¨ËlÑ4Û0ÃQ$8`£8Ôˆ>ã$úìï™ð6ŒqdÈ9ÇJF"9ŽÃ| Âó5šã,~ÂëPîwä8ŒdBÒxøjÊ@Zœs0I$‰ ÎõPÎu¨ÞE–É_ê/éœw’t‡1Á#§ˆ <°ámÖ1Oê˹¬g ¥ÀʾÑk.Ÿp:újÊqŒQB`¿ ¾CMØJ‹SN¹S§%N¹*B¹¥56ÕË¢YU¾©òú)Lsíõ:àP#øi.¶J|Þ&Í82Ls¾;–å(@aŸÙ÷!šå,~ÂéPîw¬¬° äBÅ£ïPS†Òâ”ðõUÉÄ7{û¨å:”Ö¨¿8ý˜ÕÁÅvš ÁàLUÜFûõ]®çÒ×ÜÞÓ·…rÞU3YÚ–âL—)Uâ“…æyiz-Ê–J¹-LkHÝ”•)ý9Áww!ð\ l¯pWMÔïœ^Ù”újÖ“0öÅmhAý’b?šÃÃ`»‹» ò%y¶UJÐB¥)ýê¿pü©Ìwãss‰DÕ<³3óGWÌM«
-„X£t`$3’ý Ihúÿ
+xÚµZYsã6~÷¯Ð[誂›ä£3ñLœÊx²§v+Ç-Q³©ˆ”í¯ßn4Hñ5ÙÉVjh
+%@ç6ê;‚3.”Í­²LƒLµQ´hEhØ{š˜Y%•3ɪؿ&û%ªæëw0v"CòÈÂHws=×:~•RÓ’kKüO‘§8A_YIm‚M¼&Gú®
+jEþ+çòùà¶Hi°µg–?ÓX‘·6Šƒ]êæçÈ*02³Øé¸[Û$r)Lð””Y Èq \“\m%„Š)]‹…¬È. ODe•Té6Í+: Xakƒê¸KÇöY$#åמׯŠ˜ #éé‰gÔSyY,ˆ>ܬ'OvýOZ™ËP²06aW;g–Ù(ŠüFI¾üöž§ ¥Žºò¤ûrdG€¿4Ñ@mo®ç*äÁë:[¬¡«mðšm6ÔKv»Í»Æ‡þ8¤û,-I"! ¨IÊZ"r$¯Yµv:âaP­SìD'Ààsö’úîÓ‘¦=]H6w½<Ù¦)6¸[ù¡bDRÀ½Fm~Ž‹ÂÆüNµq¬aàL×8„+%”»8Øîèb”~B`7Á6Ýîª#u7Yé‰V£ÆV€‘Íg1.Y,£Ø“ÖÌ8E¢¥Ó ç€´" ͬPqW¤þeV:lYü)¥‘¥3Ž¬œ€Ú›’æÀ”×"p'‡oÇ"Ý4›y:¤+<e•.ª’fànv܃ðØF بÍ*ÆÀ_å4‡›áKFV{­»*+ò1íÛ=7Èp)k‚Çõ¡>lE‡‹u^çV,ùG9”©‡>Ü<
+ÝU.
+þ’ÌP~4w–&Boi·…oa®hL8”ΗáF î«Î¨Ø˜™ÿIè±·1tèT߯’}URÿ°CŒKd•(Ó²·¶-IìtTSÔ"ãù’úÉØ'ýÈei¸²Ó ê<;M‚S$`d[”õÛ Ê´à›¢öœÚaQë`õj·ÍCkB
+æ8_P[¾¯Iï/%Å^l»–’VÝÌb“”žèîþ uH\VK
+}¯bI¦Å•Åv—mÒåÜEX¦«ä°åˆ|‚%œa{¿N~Êg*Ø‚Ç{‹Ü¥¥_ |í© ¾4§Þݽ_•¼¤4‚ÚÁöém*dnÄ„žUqü‰ã^£u!¿èŠŸ|F¤ w±ò/ìX¯8ë5t$ÁQ» a™Šb;3:±Ö^›ô9Á5ÇÈ1âA‡,KÄ¡-ƒºH,©GqYiîwrL %˜éŸæ1¡8øÍ(^ÃæùjŸ”ÕþR†EUWSgPŽk¹pá5…èΞ]Ú«¡tþð†¦îo±|v_<øø𣣹—?Áp’—¯çÜA«¢ÑÌï^_ßìŽpà ¦êÅ¡OË(iKÿÜm²º(c fÛöèI-~6車Qàœ}æc/!'ôÄQ“|†˜|Žh¨"Î!i¦E,]ˆ±
+îÿõíÇ7w÷Œ†É²Ø[©'Éñnº5TÉ`­ŒsŽ9 GCTéŸN÷‚vó ¯Í’nœÛ;O>šã)Yºìfy›4ie€tC{ÐÜëK˜ŽáUGŵKZCÔž2oü®XÇqBˆ'>Âe1˜€?ÛÒ¢nñZŸØ¯]/¥+í;ýe~âäzN8_„`‰M÷AèZT³°
+7È–¡
+ýÖkÃ#5å1/òã¶9Âó~}Q7¹OMedÐpØÑàÛ_ÒM±ó¬0ãNƒöí:)J¸Ox¡!š&4úÃÍ=­£w²¢*ņ¦í8îvʉ”n l³%¸‹£‡wüL
+©žj ª ª@•`;‚ÒäþyF‡vd¯é/ˆ<Ü—D^œ„C8@m£,Me_Ð}Cu‰‘ÁnÈÇP ,¹
+嬵©Îc­¡ê™ *©Ü %‡ÌBNŸßP0ЛXrpõ¾ nÑn^ŽþÏÁ’…¡5çZÆÚ2L!®¦¿ ôpßÏFœæ{„FMk¿¡ºÀÈp·iĨ˜ ˆ¸€¸Õâjª“¥ª=TÚ«t?tp1“nM_ßÁÌJÈâ»çÿxkKÑ•·Ì†±:73Á…êH:…·šþ‚ÐÃ}?ßÃņ…¿ ü†ê#ƒÝ¦ñy édo-ª ¼ÕT'Kv §C´ç22ž>½¡9¾‹7ðoJËîù'ÞNRôÑ&Yĵœ@›
+ÿâ+ìœþ©©ãºÕ.þ÷ _£=üÀ:Íß.á÷OŽkÿ34|{ö…¸A÷­±\(ÈöZ|Ná©&Ÿ–k°ë(šäX¬”øèÕã”v¢i.{MBÉbò#¦‘t¢9$OÓ¿ìsÿ7
+øƒkÉA[P,N±ÐÐ xèü)7
+ÕàG1Ép„õÿuNuiendstream
endobj
-1370 0 obj <<
+1404 0 obj <<
/Type /Page
-/Contents 1371 0 R
-/Resources 1369 0 R
+/Contents 1405 0 R
+/Resources 1403 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1368 0 R
-/Annots [ 1374 0 R 1375 0 R 1376 0 R 1377 0 R 1378 0 R 1379 0 R 1380 0 R 1381 0 R 1382 0 R 1383 0 R 1384 0 R 1385 0 R 1386 0 R 1387 0 R ]
+/Parent 1416 0 R
+/Annots [ 1409 0 R 1410 0 R 1411 0 R 1412 0 R 1413 0 R 1414 0 R 1415 0 R ]
>> endobj
-1374 0 obj <<
+1409 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [284.2769 667.7189 352.9489 679.7785]
+/Rect [312.6233 240.8428 381.2953 252.9024]
/Subtype /Link
/A << /S /GoTo /D (access_control) >>
>> endobj
-1375 0 obj <<
+1410 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [282.0654 636.5559 350.7374 648.6156]
+/Rect [310.4119 210.9549 379.0839 223.0145]
/Subtype /Link
/A << /S /GoTo /D (access_control) >>
>> endobj
-1376 0 obj <<
+1411 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [311.9531 605.393 380.6251 617.4526]
+/Rect [340.2996 181.067 408.9716 193.1266]
/Subtype /Link
/A << /S /GoTo /D (access_control) >>
>> endobj
-1377 0 obj <<
+1412 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [299.7586 574.23 368.4306 586.2897]
+/Rect [328.1051 151.1791 396.7771 163.2387]
/Subtype /Link
/A << /S /GoTo /D (access_control) >>
>> endobj
-1378 0 obj <<
+1413 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [292.0084 543.0671 360.6804 555.1267]
+/Rect [320.3548 121.2911 389.0268 133.3508]
/Subtype /Link
/A << /S /GoTo /D (access_control) >>
>> endobj
-1379 0 obj <<
+1414 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [330.7921 511.9042 399.4641 523.9638]
+/Rect [359.1386 91.4032 427.8106 103.4628]
/Subtype /Link
/A << /S /GoTo /D (dynamic_update_policies) >>
>> endobj
-1380 0 obj <<
+1415 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [401.5962 480.7412 470.2682 492.8008]
+/Rect [429.9426 61.5153 498.6146 73.5749]
/Subtype /Link
/A << /S /GoTo /D (access_control) >>
>> endobj
-1381 0 obj <<
+1406 0 obj <<
+/D [1404 0 R /XYZ 85.0394 794.5015 null]
+>> endobj
+466 0 obj <<
+/D [1404 0 R /XYZ 85.0394 440.7496 null]
+>> endobj
+1407 0 obj <<
+/D [1404 0 R /XYZ 85.0394 415.629 null]
+>> endobj
+470 0 obj <<
+/D [1404 0 R /XYZ 85.0394 296.6684 null]
+>> endobj
+1408 0 obj <<
+/D [1404 0 R /XYZ 85.0394 271.9661 null]
+>> endobj
+1403 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1419 0 obj <<
+/Length 3323
+/Filter /FlateDecode
+>>
+stream
+xÚ­[msä4þž_‘âËMªa½ÙòÇ.Ô±ËeCÝ]œObâ±Û³!üúëVK¿½)j+鱺[zÔ-µ¿ à?~©CÆ"¾ŒbÅtÀõåf\>BÛwÜaִ¾¿øêFF—1‹C^Þï:}Ã/ï·?¯B&Øô¬¾ùðþæö»ŸîÞ]EjuûáýÕZè`usû¯k*}w÷î‡ÞÝ]­¹Ñ|õÍ?ßýx}GM¡ëãëÛ÷ßRMLÎtzw}s}wýþ›ë«_ï¿¿¸¾oméÚˉ†ü~ñó¯ÁåÌþþ"`26úò~ŒÇ±¸Ü_(-™VRúšüâãÅ¿Û;­öÓ©ñSÚ0-T#)Ỹ3£ÌYÄ9€"0óvŸdÂ1Nòº\e“í^‡ö‚0«(ºìt:’Ü‚Æ¢eG4çŠþPä¯0ä"^íӤȊÇÝ1§ßÙuho@4
+ÄâÇ'•’u;XVSɦÉ>¥TÞ•š'ßügY¤@ÈÕý“ƒÕiC…rç´L6OY‘Öþãĵ¿d¹Ó»ºâf•nÒVTB
+ª®"ÔLEF8 ¿}ÿA0Ó0DQ `H9X …m}ÿáþöæfJÃ3NìÓºNS´ÀÙ‡²OÆÚGuTƒÆl]Íñ@ÑLÄ&h }îyV7é–ÊE²wµuZ}J+'à—@%|ÐJNŠA'‡*Û'Õ+Ùêµw¶ö ˆ© '_(áì€õ¡¤7ªù±¦RR¼RáöGW±ÝÒ<ÔuZÓwõ!Ýd¿°V
+Ì›PW…LFB–¶Z0)B¯mgŒHBSúI-¶®†&Îø•F¬!žõ>Ƹ&£¡¢e‚3Á¬¶é.9溣Vðn®!„è8{³`)øB¥U×€W8z¾~“7€Bݨ„4«ÑðÀ¹¨lµÆ¾×Æ·¦ûCóJE\-l;œƒC(D2ž÷â]Ôy7Þ¢ÐÎÍSºy^ãê¬G~œk \Þ¢&¤÷<¹€h%ä@ü=¹näÐd%N¹&¬;ÖváပTãØ×TÙ¦q-´Èc°$©À][á´¤ Õ'–™P¨_‹&ùƒZ-}ð£´j’̉ݖ{*+òWµÓ¦hO$”šr>
+Wgn¿‚ ö«Ò5 ¯¶§þ¡,jëøþ-ÕìlU¹§_dŠ´y)«g»+1Ä/¬>­
+øñ)©²Vͦ´=m¶®¯ÒZô—yGKË×Cêø{ߎ×U²€sï œíAF@Ð}¤²ËbÀû᪘ÛSàß\»$Ë'÷TÌ;¾ô¼êt2Ò¾:O ÖNì4‹$î¬ÞLó—¤*¦I&”8i~nÝ!3a$Ö}5³î=ê´î÷ Ç13:0ó‚=hBpovÅŒ]z’?¦éhHëM•¹õ/huŽ‡5ŽX ”±]ý‡V³P?Ó´z»&
+ÁAªžÔX=^Rá®cm‹_0wÜ/™»9†'2>TIï $/ {‹ZPdÜÛ,Çt¤™‰`:g9ÖEçX‹:Íls·›¤ÚŽÂ‹™
+ø¼xšßcšäL¨êÉÿ{L‹{LëZ1ÁœÆ&:Ë7Ü¥EpéY:÷¿`ô¸ßÏç[dà,!åüà·¨%EF½ÍóM[ˆ Î󭃚á›Gf*+šô±Êšñ¹—„gå{Єü>á&L(û
+¼%ázf ÇÄ ã‚˜…7=Sççñ Vûý ŒƒÃåüè·¨%EF½Í3ŽK@-9¸h†otš§:{Èqƒ5Ú<œ#1+»…÷·Î’Fêžô· £¢CÇñùXkp~!ïš9J=|ÞàQ¯ŸO38\˜HÏOy š×bÔ×,Ç”Ì(Ì’¬‹:ϲe7¡i…§Öu]&ë¦ÉÇ^M0­´œW EMhЧZÄ4ž÷{*¼ ×& ²ÍÀQRò¿¦`!ݳuÖ¯9ü‚Õã~ÿ‚_ Xòx~ø[Ô’"£Þæ9côÂé ‹šáœG¡Äãa›4éš¼Ãsý<"„3N/hТ&Tè‘N ¦t0Ðám‚é”%ñŽba$ϳNJKÞ³uŽt¾`ô¨×Ϧœ
+bFvð[Ô‚ãÞæ)'@™…XÚEÍPΣPbS½®›Ía]¥»*­ŸÆnŽÃùŽ2³
+´¨ ún.„² û*¼››0dèæ"=ãå@aoÙµaÖË9ü‚Ñã~ÿBX…ŸÒf~ô[Ô’"£Þf)'M ›!ç)×E§\‹B‰à’‡¤NG9i çøYÁ4!¸ŸÁ½Šú’?b2ß&Ç•Ï`ÊئߨŠÒ“ÁICj/©öÁ¡\zT¹d4Bꦬ(Ý×v¬ÿíØ¡½r|¿9}²+ó¼|éõ0‘]çPæZô3¡ÝÑú ÛÜÀ/çôõÅe&AŠˆ(Ý‹áÈS(!JG¬טÐÌ’SÉŽ
+6Êq)5e;ªM¶Û Ý{’S}ס¨Õ¶ÊÜU,4=aFÜV?¤iAup*|¦k …<)©Ö9,å®rñ„½•à«å~’cu²?äž!^èÉöÔ“n“·ž‚tÙ'W†¾êáx
+XPö÷tE:Ñ¥7 Ëé‡×^&ÿlÜpþ d´p¢ë¢ÎÇe=e“xŠ5P"àù¬XšÛ] 1 ŠôľÍöæ¤üøÒG†3Û
+b[MU ý!åí¶ËÅ?åÞ_@S–¾7ÈZµoaüÚ_ìù– ×$s“Ý¥¿:©˜—å³}H%5mï¡Ñßu£çáàÚ8<cÙÙ"
+ð¬i÷ê"⎬Q02iIAãcÚ4í'EI•IQ¿PÇSâž:ŸÎBc|®Äï£'FÁ>MlïÀËcîä'x¾p:QMQV{Üž`•k[Iu~u‰H
+9Ôi‚BÞ*q›;Äæå#µà[ÒßÊc‡z J•ø&‹v¾±rû
+²SÖfˆ‰Tp芤ŽþÖRN7·ÿ½¹cTt'Ë…CEöX”îuUo }؆•mW`l Ìê¸i†ñXeЩ‰¯œy„ó¦aƒ=Ó €Ã!-çáç/B¨‰§ÄJêXt_áŠrµ=û[‘/nœ¬˜é|€3Æ=¹;³ØÈvîá¼Ô _»O0þ¹‰úÛêOÿÇŠ˜4æÜ#|ë` §š©ñ:`i€k«þ`
+©ìendstream
+endobj
+1418 0 obj <<
+/Type /Page
+/Contents 1419 0 R
+/Resources 1417 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1416 0 R
+/Annots [ 1421 0 R 1422 0 R 1423 0 R 1424 0 R 1425 0 R 1426 0 R 1427 0 R 1428 0 R ]
+>> endobj
+1421 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [257.6971 315.5214 326.3691 327.581]
+/Rect [257.6971 603.0615 326.3691 615.1212]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1382 0 obj <<
+1422 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [310.7975 284.3584 379.4695 296.4181]
+/Rect [310.7975 572.0651 379.4695 584.1248]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1383 0 obj <<
+1423 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [308.6055 253.1955 377.2775 265.2551]
+/Rect [308.6055 541.0687 377.2775 553.1283]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1384 0 obj <<
+1424 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [294.1999 222.0326 362.8719 234.0922]
+/Rect [294.1999 510.0723 362.8719 522.1319]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1385 0 obj <<
+1425 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [303.0862 190.8696 371.7582 202.9292]
+/Rect [303.0862 479.0759 371.7582 491.1355]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1386 0 obj <<
+1426 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [332.9347 159.7067 401.6067 171.7663]
+/Rect [332.9347 448.0795 401.6067 460.1391]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1387 0 obj <<
+1427 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [301.97 128.5437 370.642 140.6034]
+/Rect [301.97 417.0831 370.642 429.1427]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1372 0 obj <<
-/D [1370 0 R /XYZ 56.6929 794.5015 null]
->> endobj
-466 0 obj <<
-/D [1370 0 R /XYZ 56.6929 726.6924 null]
+1428 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.137 257.2319 299.809 269.2916]
+/Subtype /Link
+/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1373 0 obj <<
-/D [1370 0 R /XYZ 56.6929 700.1172 null]
+1420 0 obj <<
+/D [1418 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1369 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F21 658 0 R >>
+1417 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F48 925 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1390 0 obj <<
-/Length 3056
-/Filter /FlateDecode
->>
-stream
-xÚµZ[sÛ6~÷¯Ðô¥òL… q{L'ëÎ6é:îìÎ4} EÊfM‘Z‘²ëüú=¸ŠW0ݦ“É>â\ðƒ+^Eð¯EQ,“— ¢¦«íþ"ZÝCÛ» l1ÚtQ?Ü^|ÿ6æ+‰$#lu»ëô%P$^Ýf¿®_ÿãÕÏ·W7—B£5C—Ê¢õ×ïߘiþ¼þðþíõ»_n^]òd}{ýὩ¾¹z{usõþõÕå Šá{b{˜ùàíõ?¯LéÝÍ«Ÿ~zusùÛíW·Þ–®½8Š•!ÿ½øõ·h•Ù?^D(–‚®žáG„°”dµ¿HhŒhÇ®¦¼øxñ/ßa§U:å? Dá$qÇ8‚rÂVœJÄbhR¼}ÈÁ¢¯³|—žÊÖü(eÙ÷oÑùž㈃Põá7Ç»öƒêI! Á¥E}§ú‹Ýˆ@ÏòÛK¼nL¹JÛâÉŠ/ªÍ>ß×Çóóx‰Å:Ï6weº}Ü´æ§Ó4mÓ»´Éa¬âˆƒ…î/ò VçNNÝ*EWIÀÇ‚­6#I)Ñ*¶écn5ÕbîOû¼j¤?‰
-U]å]:L÷ö›Û›¡ES„"
-Î ¬°
-‚ÉìaA›.ÊOdRÞÈ
-ÄÃP,Æ ’˜“°\šÜ‹:àP¡Û“ü1χ.Í›í±8œ=ZïltuÍE$qÑuÖ 4†Pyþ˜HX„.yÏDÓx¼_™ÂMÇX_0vܯ1v{6K%Y̪Ž0• ^÷¨Eƽ)EæiVp–,0¬ƒ
-0Ì¡ôåe~Ÿ*ë7uU¾Œ¨F’B†å;ЄüÑÄ9
-˜ü.ÙúSÅé½*ÓµVEצ‡CYè< ?TZQ Ã`Ze¦ªiOw¦ôâ’ã&Iøúzg[s‹‡Æó‰% f–/y3ÁXÌ‘Œ‰8O*µCpTV5gÆg“^@ÖsQ–Öˆ²±šß™¤KI!™Þ$¤´u‰(µÉO%iý×æ°Â%EÓ±*¹ í§ á—ƒa¥Ü<Çp„Ìå ë s(eÖ®>>§ÇlÄ-‚åX†{Ô„äÞø†(…8ê‰þ Çt½ÏÓª¨îw§ÒNR;So§(jN5=¤©JÍ£¿šÌÎ LM«§²D3xœÁ݈GÌ­F\p óDæØ‚ô”mdnÓS“[Y^Ų®!½kÓ¸K‹ÒpŠHŒ0¬úœJw­Z<8¾€T[¾BåÐ8Õh¢
-ïó¶õŸTµ©L«æÙÌåjñÄÙúù¡(§]€"¶ÖA€“cÓNyA/žëSiå§eY?[LMU÷j‰¢ªœ;´mµ©sF8E8ä˜A€y6
-”—È\°9 Š÷¨ ùý¼ ›9Èq}þ})‰žÝ0L”'MT,MUc¶cª$Lƒb°ú©iµ{1?´ÏUk•îsS¥ÈÔi‚ÂÒUj—w
-[Ö÷¦åSD£ßëÓv<PÄ®2"¥íU»ªÌ^@@±µÊ`gd“ ¬œyLyŸ\†°Å¹þÏÛdŠ`ì*ߘÒü)î!—iJ4¦ÂPˆ9Ú˜JßÛˆë±>mÛáÆ~U¥ƒéÜ„×ÖBƒsÖ©½·Q‡¼²ô‡ŸŸILpŲ3Š !0©J—¢‘‹.[ÛK²¿WåâúI‹1SÈc6sqg,™ œ„Â6„/¥ò.j>p<ª8íþ°±î†O¢JÈ‚5¡EÏm lx<PÇÉA6•TY½ÕgnùXwvknO{>{ê|GëkOÄl*ç=M(¬`"±àé*ài‡Ò,²Äí}"I‚=jBr?9ň*û¢_ÙU‡pq$HçôIø ú¶1? ,o«)-ôZDÿµÓn–Wj[Q»ç¸ß«žyÔç®UÑ}N†>ó0ILàRöcp.ŒaŸ†Ýz M*¸DbØ¥ Õ$
-5[iÖØS­îfDmÕ¶é;¾q{­ÞXã„#Æ×ý>mÔòtò€@žg}•'ú’²¯3§)Õ±Ô„=’tìPvw8ÃæXD…XÈ]Ô<›=ÊØùÇFOE»ÜæbŸoÆç˜ ewÖÄ£&TéÑ[ÀXF\ôuùkG;ÂܼE5$C±Ê\s‡=±(‘‚ôŒöxü‚ùã~ç{øP¥„ª´ :ÇÁ£÷<ì‰aßÃZy…T€…59fEVN³V͔ɰ&5¡JŸ…j_ª†¡«Ë×9` Y4daŒX$H€…rÔ‰\ך -~Áüq¿_ÎÂD]„ZPdÜ[˜…D–6]T€…5Ÿ9êS;¢¡HPÂ( «âQºôi(, d_™¿‰†]“F·\0Oc&ç‰(%¢œÑžÙ!":ü‚Æý~9´, „-¨1ê+ÈB9œ‹…TØÍsÐæÓÆ$1b’…õð ±"}2Ä8ïkò7MÆ]{†yPvó$@¿Æi×ä û,<lü¨×?Á½q̃#à0a†=…‰û-
-.ï
-Ï‚ÌÉS«Ž/F›ŠÑ8(ÔƒÆRû×y\‘‘õÄ~–•.ìecó·y”ÁÞ•Š®}¡Ë<[:êõO\å+é‚¿=(¬Å¨¯0«ˆJ~É­:¨
-xÔ„=6S5SHÚWáz7ñþEBˆÇâÿzýâž×è×}º|~õò˜ç÷8Çڜڦ¢Ú©{|Ka¨0üÖïhŠæüF êÁöÁÔnÓÊ¿¤Ñ³Óþg†ô#Eƒë¨îÓÄŽÁÜ’â<8Ëá"D¢„ú/²\«áÕ‰çšwÍù:8ðÈKË,=ñr˜Ð/Ñ÷›§´,²¢}Ù¨Œt|š¸SáTí‡HHiÐßâ‹é:*|•á¬!ãS>K<å#6g3Îø4:hõ°Ï/_ª×ÓàTò¼Çuö4=MûCa4ó~þÛÐùË/ÃÏÏæŽbEiçE "¹SJ)ÎGŽòOÈǪÿÁ¡(ûendstream
+1431 0 obj <<
+/Length 2730
+/Filter /FlateDecode
+>>
+stream
+xÚµ[Ûr7}×Wðm¥ªÁýòè8²W©³+kk’<ÐäÈš˜"µ$eGûõÛà @`0Ó+r¹\œË™îÓ3¸4FlFá›YE¨prfœ$Š25[ÞŸÑÙG¸÷öŒõ˜y
+Ý”
+“ˆ†*DSËB—£Ï‚FUØã+á—vŸ¯BéˆVãíQ"¥5\…PV©Š
+¢Â€šî9¶‡B†V©•Æ©DÔ—\†ŽÀ”Àåd¾‘ Ó†<(ŒÓL»i!:G”Ñ* bÀWPÚ}¾5Ü©5D
+SÔ´
+#jºçU!L¼®P‰¨.¹
+5ÑÆ È|£!9 iØ:S1‰ˆPBҌʢFEØã+ñ—v¿B„”fðv 
+Â.B‹5®+rŠBDPÞãf{hoŸÊ5rJà~#jÄq¦8f¼2uîùewâ?lfp¥Á甼  Ô(›…ˆÈ+â+Á–v§äÅ
+Åsȧªe=¢*DJk¸Â¸/˜JÁ"E!
+ ¨S ÍWÍzñ4V©p Ü{D¸V*§:÷ÿ’:;E1p­,ŽªéÎ ^Å…ÍÅ:³€¯„\ÚT›*§›’ÀÔEãɨ“Â*7é(MVFÕ5-·ˆJê°ï·‹RoA-î>¢Füçz³°¬à,'ð2ó¹"Œo=4å œ&ÎÏ5ÓPÁõøJÌ¥ÝçwoÖ?¾f€&?¢jD
+k¸Þ aBÔª„)
+Ñ[@y>5#(<F­ÂýFÔˆã¼H(‰µÎ枯|¾ ER8²ß…šá±"WbýŽ¿,ú‹íæp¬£ù3u~»Ýu—÷Í4×n>vç‹î\·ËîØ×®º§|ÌÇKññÏÍ®õ5Âåâä„~Dïۛż¯JïÙÒjáᱫÿz†\võ_øýñÝû÷—¯»coãÈ™w<zè—»¦ÃûöÔ-:cÝÉz»X…çºÒùö¾;[µûO¾–HYÈ!\tý½mp
+’óýšmh—û²Ït„û²æ=‚J÷™•$œÊü_õ½!ŒµIo/·ƒïS—â¡1³0ßù†4}*>ß7;h°îøK»^wGŸšæ¡¿^ô·Ú Hù>ˆ.tʆƒþu‚#Ÿª£# ºk—wÝÕå¢âCï{õxÿЬ:¹F,¥l ÷í©áË‘€"­“‰SË$Û=Ãé‡#RÅ'Vn†›)Qe15QqÓõh¡%Ñ0±Â5—¢¦EQÇ°ÚóÏ‹u»jOsß#í>ìµEŒY¡4"j„G¾ò…%—õeD^f~8NYäÂ)´È9¬ ÓP*5À#¾{i÷ùE¿ñ éUx+DT…Ii ¸…
+Â.<*ýú¹RrIQˆðj¢­æŸu¡= ÙмÂ#¢Fˆäc%#ÆŽ1ùfÚëã€"g‘tìØ?'±`ò øJð¥ÝçËOPbaQ†6B
+U!RZÃ(åL¥D“¢Òdc`·§S  *#û"çòME8Þ v¢¶ñ!²¨ë¢–€ÒîWn|hƒ7DDUˆ”ÖpúŠ´\E‡
+Ña@yûfþÜÞЋGûÜad"j„M&EŠ…%^Nçe
+‡• Š­`ö¤ýœÉù»Òˆ1F|%¥Ý狦±Z¥9*Æ€ª)¬¡bdG%ÙÊ°œ¢¦ÅQIÁwB~Æ. k&Ô}DøÏ"°ð%¸ŒÀ‹î“L
+NÃL€ÅÂÎHçǬQ¨È"Å:¿€¯Ä\Ú}¶ÞüG\T:‹'?¢jD
+k¸Þü‡[´RòK@ˆÚzPÑJcã®òå<ªP÷TúÏÔægß–ÙŒÀ7Ûø`k GV Ñ›tÐZ¤‘br p<æÂêó;7¦ˆáÊ¢™ œEa W÷ŸºÊ0›¢­Ôñ£v3ß5·»fwü*é».þ[‘±ËGôa÷TbÃÅòŠ[<„ˆ‰a8MrBò<ˆ£`™ëë2Áú #ƒ'¸T¾*žzÄÏ€¯P,ífúòd&‹y
+&_ÊÀjMVDU˜”ÖP9E 9.±4­°
+ÏÃY›£0”%®_f-ÎÙLòõ<ç^<‰±õh4Ú¡Í i•C¯ƒ¥;bpKãª
+õ]èĨŠá¿)ü—ÿþìôÇyÒá÷»Æ‰SM,‡ž¸'剛r–(ËÍõÿ‘¬–endstream
endobj
-1389 0 obj <<
+1430 0 obj <<
/Type /Page
-/Contents 1390 0 R
-/Resources 1388 0 R
+/Contents 1431 0 R
+/Resources 1429 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1368 0 R
-/Annots [ 1392 0 R 1393 0 R 1394 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R 1400 0 R ]
->> endobj
-1392 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [259.4835 681.3376 328.1555 693.3972]
-/Subtype /Link
-/A << /S /GoTo /D (boolean_options) >>
+/Parent 1416 0 R
+/Annots [ 1433 0 R 1434 0 R 1435 0 R 1436 0 R 1437 0 R 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1449 0 R 1450 0 R ]
>> endobj
-1393 0 obj <<
+1433 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [387.5019 378.783 456.1739 390.8427]
+/Rect [387.5019 666.0385 456.1739 678.0982]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1394 0 obj <<
+1434 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [381.9629 347.5161 450.6349 359.5757]
+/Rect [381.9629 636.1092 450.6349 648.1688]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1395 0 obj <<
+1435 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [398.5803 316.2492 467.2523 328.3088]
+/Rect [398.5803 606.1798 467.2523 618.2395]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1396 0 obj <<
+1436 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [393.0412 284.9823 461.7132 297.0419]
+/Rect [393.0412 576.2505 461.7132 588.3101]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1397 0 obj <<
+1437 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [255.0796 253.7154 323.7516 265.775]
+/Rect [255.0796 546.3211 323.7516 558.3808]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1398 0 obj <<
+1438 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [311.5276 222.4485 385.1809 234.5081]
+/Rect [311.5276 516.3918 385.1809 528.4514]
/Subtype /Link
/A << /S /GoTo /D (tuning) >>
>> endobj
-1399 0 obj <<
+1439 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [315.9507 191.1815 384.6227 203.2412]
+/Rect [315.9507 486.4624 384.6227 498.522]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1400 0 obj <<
+1440 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [381.2254 61.5153 454.8788 73.5749]
+/Rect [381.2254 360.8088 454.8788 372.8685]
/Subtype /Link
/A << /S /GoTo /D (tuning) >>
>> endobj
-1391 0 obj <<
-/D [1389 0 R /XYZ 85.0394 794.5015 null]
->> endobj
-1388 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F48 885 0 R /F21 658 0 R /F39 863 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-1403 0 obj <<
-/Length 2816
-/Filter /FlateDecode
->>
-stream
-xÚµZÝsÛ6÷_¡Gy¦Âá“
-ÿ±™JH’òt¦SIej¶Ü^ÑÙ<{{ÅfáA‹.êÇû«¿½z–’4áÉì~Ý‘e5†ÍîWç áä$Ðùë÷ïÞܾýíîÕµ–óûÛ÷ï®\Ñù›ÛÝàèíÝ«_~yuw½`F±ùë¾úõþæ%NÆ·ï~™/g„Þݼ¹¹»y÷úæúÓýÏW7÷Á–®½Œ
-kÈW?ÑÙ
-ÌþùŠ‘5{JXšòÙöJ*A”ÂÏl®>\ý;ì<m_Û?© Q\&°“vKññ]fD3 -)Q"a—9Ûe²»Üì²²^ç»kf拺Úï–ù©åŒƒï´Nf]ñ%jD ÑÑ‚ñ”(u¢Å‡<ÇíoÝ`•×Ë]ñÔU‰ÕÚêubRª åÒ€[NаßZI÷NQžš+¨!LjÖ3îf8¸ëð†å¢åË£–ò,!z ’–ÄðDÅ=PSŠ ¤YEÈ€ðŽUš¦DB\MP¯ƒŠPϣθkñœ Ø' ‘LMèP#ŠôØ'D›î+òÝØçÌ9ÑÁH™ˆP(ð`=‹côø Û‡r/& ¤Ò7Wq'Ô„"CiQ&|+D'`už€eWÌ6Íâ’ü' c1¨]QEjD“>%‘)7}UþSÇ¥ˆA§TDP(Iç9•˜IÓ³9ÊA‡Ÿ°~(÷ÿà JwC@M(2”ç ÔDðZœƒT„ƒqÙX"„@ÈTÅu ¨ez4„ÎB@Iêkó]i8ž ÓÔVÅÛÖUt‚‰?±C¹—3Qph! Œz" &J‹34q&vP&z”]q_ç‹K3¢%·{S& F´éQ1ÊRÎûê|›¢<aÔ©&3Éy2j ÔÑžá12züÄ å^NF ôa"î
-šPc +ÊDE„*ãLì¢Î31 ìŠeÕëÃ9î1pðÔê4²zÿ,ÂHšjÑ_þÛ$Á'k'œ§àsTã©
-$ɘ(®Å@Vœ‚;T«‰Ãm!¡GÙ¿äðÓ¬¯v‡±FNi_݃FVï7rœ(uµ·ü·¡ÝÀˆÓFN/š™H#‡
-a}Ñ1!ÚÈ9ü„ÍC¹g¨6lãì'-â;Pj ¥Å¹µ¿hĹÖAE¸æQmIÝošb±ÍêNyª)БËøê5²|Ÿlεк÷Öÿ6d;µâ”kÌ&vžk&%‰NTÏÐ×<~Âä¡Ü‹Óš
-©Fû_éPÔâÉúf´ PЦ„¯9U‚δ¢~²œ}Î7‡kÆò¼ ÅÓ¤…`5šb>»70%–s—™×v$—›l_ƒóÕó—j÷¥ÆaëP;¨³­šp9 Ä9\“ùÚð\T{÷ä9ßÕ`¢»³²WKH‚ÃÛ¯-«ìì/qè¹Õî‚–™&ÂÉ’°k[Ôuˆ÷–FpÝwb&+ÝÍ^Víu’`T¶ÛQQždPKCø9éc?òË9")OOÜÂ…˜5^ËüÅMX½÷3)^,Wq`)à^Û¢¹N˜2_ÀÆeîÐRM‹©6(¸⣗ǬÁÑ1X­|'i‹RÖwP«A¾²þæbþÊ׹¦¤Ût 1óý¦•
-[CaÖFCaÍWm”$ dž<ØØ<[>öd¸éœµÃž\í‚;|¾ÊË"wsG급µG›û¯…=ÉM–/V€QH>#çŸs¼Ç=[¹ÉN¢p;Ø჎ƒ`¶
-ÿcc!hç8 2·‡~x†Ç­úNü2sú9´8uji‰7 Ó;GµD·7¾Ù‰,Ñçª „&Ç‘¦[KæËÉŸè~~,š¹Èí+Å·Üpz›geQ>¬÷¼GªÚxháV¶eHØü?y‰áÉ´z¦Òa1 úMÕå–¥BytÝ
-ùÔAdx{,ì™kß`2ßabÚá-šmÎy†C'Î?Óe%ɸîÇÚÒªÝBaÀ‡†÷ã¾c˜Ýs­Ï”e 3 õö¶¤:ÑKsÏ-æù×ÌÒ¼Æy ˜ÁaÁkœËðÖå‚t“‰}£ÂFj™#,[­œ]5
-·FY5ŽO\@]KyŸOøÒ&ÎìvŒ•ÈÂ%}¬^zÙ£“Çm ·…ª86ò›ªúRÿwL¤ý¶WÀùC1TÄæ›ëE=t›ÿqø_¼@f9à’Ó½³É¼9<åÇ;}Ä‹}TãðÓxŽª Cn°FAdmK’c]²îÂ8Ô¥ÄöSÅs±É0–•™¿/—îÕ /Ǽ¯>fî½z¿\ÂȘ5
-¯ëýÎÕ x£Sþ-öXSOpÛ@Hž´ Ì÷n0˜Ž•0ùbó^;rõ2õA1b¾Ù@´?Øn‚é¶.lÚFžë¥î
- Ïuxn¼
-endobj
-1402 0 obj <<
-/Type /Page
-/Contents 1403 0 R
-/Resources 1401 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/Parent 1368 0 R
-/Annots [ 1405 0 R 1406 0 R 1407 0 R 1408 0 R 1409 0 R 1410 0 R 1411 0 R 1412 0 R 1413 0 R 1414 0 R 1415 0 R 1416 0 R ]
->> endobj
-1405 0 obj <<
+1441 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [307.1508 736.7306 375.8228 748.7902]
+/Rect [335.4973 330.8795 404.1693 342.9391]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1406 0 obj <<
+1442 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [334.8268 705.6794 403.4988 717.7391]
+/Rect [363.1733 300.9501 431.8453 313.0098]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1407 0 obj <<
+1443 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [337.0185 674.6283 405.6905 686.6879]
+/Rect [365.365 271.0208 434.037 283.0804]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1408 0 obj <<
+1444 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [364.6945 643.5771 433.3665 655.6367]
+/Rect [393.041 241.0914 461.713 253.1511]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1409 0 obj <<
+1445 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [374.6372 612.5259 443.3092 624.5856]
+/Rect [402.9837 211.1621 471.6557 223.2217]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1410 0 obj <<
+1446 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [292.0276 581.4748 360.6996 593.5344]
+/Rect [320.374 181.2327 389.046 193.2924]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1411 0 obj <<
+1447 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [319.7036 550.4236 388.3756 562.4832]
+/Rect [348.05 151.3034 416.722 163.363]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1412 0 obj <<
+1448 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [460.1655 519.3724 533.2211 531.4321]
+/Rect [488.512 121.374 561.5676 133.4336]
/Subtype /Link
/A << /S /GoTo /D (tuning) >>
>> endobj
-1413 0 obj <<
+1449 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [362.144 488.3213 430.816 500.3809]
+/Rect [390.4905 91.4446 459.1625 103.5043]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1414 0 obj <<
+1450 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [293.1435 457.2701 354.3435 469.3297]
+/Rect [321.49 61.5153 382.69 73.5749]
/Subtype /Link
/A << /S /GoTo /D (options) >>
>> endobj
-1415 0 obj <<
+1432 0 obj <<
+/D [1430 0 R /XYZ 85.0394 794.5015 null]
+>> endobj
+1429 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F48 925 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1453 0 obj <<
+/Length 3430
+/Filter /FlateDecode
+>>
+stream
+xÚµZÝsã¶÷_áé“ܱP⃠ؾô’ø®NšKês¦ÓIò@K´ÅE*"u>gúÇw € DY¾\27g€øX`¿ýÄÏøÇÏSÍt.òó,W,Mxz¾XŸ%çÐ÷挻1s?húâöì/¯evž³\ }~{Ñ2,1†Ÿß.œi&ØPHf_~÷öõõ›n^]djv{ýÝÛ‹¹H“Ùëë^QíÍÍ«o¿}us1ç&å³/ÿñêûÛ«êÒŽÆ×o¿¢–œŠ#Do®^_Ý\½ýòêâçۯϮn/1¿<‘ÈÈ/g?þœœ/í¯Ï&s“ž?ÂGÂxž‹óõ™J%K•”¾¥>{wö¯@0êµS§ä§RÃR¡4HR0“ˆi!s–qc2Åaù dÁ§„ìG¡×»º¯æë¢ëËí>Çœ§L*¡Îcº«‡QËËhy.€OÇ>Zÿ]Y’Üû•«,Ën±­6}Õ6ÔÐÞãÆö˜É3–e` S\ì-­9ã*ánpÕì3*LÎt¦Ó£Ô¹}8§ÊMÄr‚åCºÄòb`AÎ5ãû[’pZðÿyÑûA'¶q@ wÁðíP˜ÁÊóP‹F=5?Ê’=žŸ’DÔåü¾Ý®‹þ
+\Wp¬R2Î#/ 4S`Û“$™}õÔëjA<ü°Y½;ÄïÛºZTe7q
+ h¬b¹âÊRtž@ië  èv›M»í;üJgýcKÍE 'Ü}õ¡¤†uÙ¯ÚeG€[>l‹¦¯.ø¬y †E]•MïFÆ ²­V½kki¡M¹EàPã2ð;ËW‡í gÈ 2OSayùµmÊKÀ¢mŽ»í7³rI­wOØeÎ@€N<¨‹ºnç´ú”E¤<š‹f9E1SªIcˆÔ|ƒgó4E1ei.F·V;ÄE·AÌ~(ë§ Î9áN<§ÉÁ
+ñŒåRdvöí4‡9ËdúBþ$“—nð¢.vœžL²Ùc»}ßQÕž(Vºbí{‹'ªn (:”z¶!&>TíÎõ|(·ðè¾CX""U¯{*-¬Ü°@CU.+j’h9FD°j
+Ž5–c¬UÍž E²
+7Z.­žhØØž2ðcËb±Ñp֖͜:<ºì‚[ê_–MUº¶;®áÞ‚sO 2œ°N$`RBŸQ³»’¾IfK×øDD+[êˆZ+Øb_õ°KXóÙõ= #ˆÁŠ†%h‘ùeWv=uÂƺâÁõVn“]õ@'õŸ’4éWäÕ¾È'U3RUïõaQï–$½$’4(·ï®ß8­rЀK$ð‡Oé ¶_îi™ÀÓX?C·Ý¾#¿(œŠÞ… §ÇCmx#=5–¥‡5ÛpØ IÃtvÌ¡pÉ¢¤h6¥Þ£üJçÄOq§ºãÿmê'j^—ES5÷»š¾ «ØAù€Ž´6RóÙ¿WeCúÉ3.-ÍMèkÓfIúrÎr™úÑ]ƒ×pxˆ-íð–yÿÐAòš§¨hDAŸƒo/\å–,Ó–>‰msìdÃ!:í¹ÖÓ{'EÎWV„ÒÀ1Vˆ1”y–ñÝŠ$xÜ— %Ïò‰}eÂã!“³òc8勤šƒvàà{j+èÓƒ¿ÅÖg´K-JV,—Ž¯ŽTn¦íž„Ç–‹1žhR]~(P“N²r¦Ã—«öqd?"KŽªl]U5óuÛ¾ïþJ"S|/ôÍ™1¤ähp.æÂhë
+4ÌâZ
+ú|¬êå¢A»“=ªOfoñV¢v™Ó%ÍëÉÒà6Ƨ2Zä~¯ËE/Ñú£èeBÒïK›å3Õ—TCÇÛBȹJ¥ò©a=ŠÔ߀aë®m_AÅí7Wÿ¡Zùq±*š7Õj;.¾ bâ†>öv
+³©®¥§à ˇ¶¯¼½L…»6¡:í
+kt1!foÞ½›#¾.éóqUQö"ÀÍöÅ]]uN=Áÿ:‚q,In6KåÛl÷Æ!¼ú¦ÜÞQ®ÔvÔ¥YT›¢¦O”'–a%ܸ¹Äz‘5îž "Ý8«Í˜ÎÃmÊŸ€ÙíßW-
+»Uü”²Bl™©|ßÍKMé–!V“šb5l´±VƱ¶Ä±šÌ³iÏÁáä|ìޔ݈ȪØ*áÍ¡>û8ÒaöãÂ¥Orÿy”"<^*g2ÃÆ\žÇ¬‡ctΟF2m´ø’~Æq4&Q¤üy–A¸˜«çbœ)SrŽ“çz8Nìyt©Kæs(í ›Üqbc8NlQpÆeߊ –H
+z&ÃrÚaPÃyö‚žƒÅÊå¾5š§RQ<À9dIò¤âqy¨w‚žšlùи·­å¥»;†üË å‚ïvV7!_[µ;RÞÔ¾éHíãì$uÐ)Ýècy#þ"&MMú"Á(”ü¾`tªÁŒƒ]@_2ÜÎOã "3θÀ_í?Ò5µ™·ë¶ë©2iû¼Û N¯Î>à˜`*ì;¶¹ÛšÇ(a
+endobj
+1452 0 obj <<
+/Type /Page
+/Contents 1453 0 R
+/Resources 1451 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1416 0 R
+/Annots [ 1455 0 R 1456 0 R ]
+>> endobj
+1455 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [288.6803 426.2189 357.3523 438.2786]
+/Rect [288.6803 737.8938 357.3523 749.9535]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1416 0 obj <<
+1456 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [328.5503 395.1678 402.2036 407.2274]
+/Rect [328.5503 708.0059 402.2036 720.0656]
/Subtype /Link
/A << /S /GoTo /D (tuning) >>
>> endobj
-1404 0 obj <<
-/D [1402 0 R /XYZ 56.6929 794.5015 null]
+1454 0 obj <<
+/D [1452 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-470 0 obj <<
-/D [1402 0 R /XYZ 56.6929 378.2509 null]
+474 0 obj <<
+/D [1452 0 R /XYZ 56.6929 693.8168 null]
>> endobj
-1051 0 obj <<
-/D [1402 0 R /XYZ 56.6929 351.7602 null]
+1091 0 obj <<
+/D [1452 0 R /XYZ 56.6929 669.0349 null]
>> endobj
-1401 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >>
+1457 0 obj <<
+/D [1452 0 R /XYZ 56.6929 281.5778 null]
+>> endobj
+1458 0 obj <<
+/D [1452 0 R /XYZ 56.6929 269.6226 null]
+>> endobj
+1451 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F48 925 0 R /F53 1002 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1419 0 obj <<
-/Length 3262
+1461 0 obj <<
+/Length 2933
/Filter /FlateDecode
>>
stream
-xÚÅZÝsÛ6÷_¡é“|c±ÄI°O—¦Nšöƹ³Ýéôë’`‹WJTD*Žï¯¿]ì"%ÊrßÜxÆÀXü°_€Åð'F&‰b•ëQ–ë(‰E2š-ÏâÑ=Ô½=ÜfâMº­¾½=ûúÊFy”§2ÝÞux™(6FŒnç¿_ÿꟷ—×ç™Äã4:Ÿ$i<þöÝÕwDÉéçõû«7ïÞþtýê<ÓãÛw﯈|}ùæòúòêõåùD(H` ˜Å¯ï¯.©Ñ›wÿ¸<ÿãö‡³ËÛ0åî²D¬p¾Î~û#Íau?œÅ‘ÊM2z€8y.GË3¨(ÑJyJuvsö¯À°S뺉)Q&JŒÌä$Õœ’<JT¡œn–£Í¸œÛU[¶ø•ci«9U5k;+¥!BAVÅ’;×¢ôùPVóY±9fÌ,°)HP‰x|Uo–EU=ž !ÆÔ¯]”ÌÚÿ¶4¯Þ w{U·7ïÞöÇÂïqÇðOàÞ€€&BDy’H·Ú?-¬OÅùxÛØ9•Úš¦Õ”÷+¦ ×h=/Z.»ÅØ[Û´°mÌøç…åýÜþxù •ì§Ù¢XÝs×EÑÐS{.Æ®|ìÍ
-
-›s3ÞV–:
-ú¹Û‚bž|Øíw"œP™4¹Ûš¶;“5Y”+iž=uäÑ>®íçMÝéQgÎéçcQ:þ†˜¨¼kéD¤”–ÑF’*ÊE¬¹ÑÅ
-¶`Y Y 3I SçcaMPZøázX®y Ÿœa²Á@òƒï¯©-W÷ò“ø”–|HI=ÍЂá§SƒIìí1©hÁ­oÇÕ‡ÚCÂÀ2ÕæÄN#‹¾æ8€—/8KS9ênÄ—m.ÂHAàáñ¢^/±‰¤‚eÀ 0Ê2aNªª>h2CøA˜Àïð>9”
-DbìÙôãf4²t;ÃRß±~qÎü‚.¾
-QK”H?¶dð#1€¿ÛBrñÈôÁ)Yi†‰BÙºK=ŽÇîFxvx4
-ìð~>Kßã(!xŽÒÌœ2I
-g%OŸòs†”™€}û)Àgû‰5Ád>”Jy·Äû‰Ä°ŸHïq`õ²owºHIMñ¯ÔGtøÍ`ѲgøñtV®öõÑ$QòÈÁ C°¤N<¡òƒƒó-yþåýªæì
-L_UÕ¬ °MÐõŠ9qRDŽ×ü`ŠõˆÑ¤ûŒbX‚våŠCÑq›ˆ-´¦ÄS·Šw¨ïn£-Ŷ^¥.£QSqʤíhî¤`*&NEBF± ˆ§#WÔÓ'¦Ü€˜9£â.CàêvIÞ~çidâ72Ê´"£ö·Á-Or34è%Ó±$H%qác㦵›²ùÓ%É3Yyýì½ÝYÑØ㊹«ñ¾L‹þO}Mj˜¯9åkjƒÄ¹9;zšiÜõ4ó±'6岬Š íšD¹
-1ö±Àü·]ÖÊ~šÙuK´œ‹ËwÞ1]ß Œ&„Aù®¾ #3 Èá4dLf*=•Î¼lXò¢a¬Um’,;ˆáUž'§rCXQq×1‹Ù™‚߀üÆ
-øúI¢Ob%‡ÅîaÅñtXÁR½ªyÐj\Íj&Bê(ÏÕ×ãO€53ÏGJg ^
-)»[¦ÿGÆE€c¤2ÑD„¤2Ý뮃k/07‘‘98õÌ‹P‰~úÚ É2–äP¾ '´Ú)ðæâ©25€i!??€ÜO¼:v÷ø‰WÐ…pZBâ•LÖ»;²+g£ÁQ¥!Ráý¤C¬Q•³²u ê¾=Åõ«p§:Ž46Üe †‡^&Ûé[ __óå Яn.ˆxóþ“02s¤«›Ë×ÑnÏóxì¸ øBËâÑg8¥Ðsðà<î’œ…Xͪí<d(~—R¿ºú˜
-3rìç 3lšzVrâÆ]ݶ‹Î%¯ âÔ¹¿x5ž£k(*ZØÙŸ~ƒî|bÇ$0Œ{˦ yÄþù,‚ü#>h !t¤4è>8i0(@™*òCÀÎ@|ÇñøWç_»ú²²»®~Z®«ŠÁ!¡k$¸óƒ½@üÚ6õv3³þ æ8ovÙpWø™ód»\çO w
-%4Ÿòó“5ËËn>ú§'S~=ã‘‚š
-j7Í¥¼„«­öóoÃY'êÒ˜_øø8Hà¤ïAÓ¡MÍ´»†Ù¸©7l::=;·ì@u²’,$¬ífY¶tbá“,NnÝBPñÿ:[n7¸… ZÚOžû‹!èy½ßsð|à\½.|œ_g‹Í”“8û@»)½†ÁMܸH¸7ÖîJƒ'œŠ ¬„‘
-âWp‰©rs?¢Âuׇöí'݇>ô!_\ïµ!gFØüðƒ€E@0.WoNÞ|hub&Æ
+xÚÝ]sÛÆñ]¿‚ÔŒy¹/|\ß[J”ÉÈ)ÅL§Mò
+^O‚H AYJˆÄMÍ.ô¦¬üniä~Xj¤H3åâR¡xñNÃÍ’¿o›ífîãи`Òdü„…47ôü¹å³'¿:â,€ŒVÙaØKŒKP¦®ljà¼ÉÓqE<~ô!ÆC³ æ¹k’|¼¤÷ÍOoÞܽåM¾oÊßÒL&âΛšc@ñÆ,è•.Ž;Ï{:b  M§¨È¼°^Óô:=•fÅ6Ê°. ¬ä¹m‹Qob]6¾ö%jaÁzû
+£~GGMfƒww÷¢W€¨ ;_ÂOÛÄÅèª8Þ…ÝÓ*ª8… úÚkìqÕ<«lWèuò>Àà8„4eC´4W0J³ð(›ÜŒ¯Ip ¤ÑS±ÞúŽ6 2’Ñí©@Ë\êˆú®uô©8?ýߧK¥ÔX“Ï,(ŠU|8 Âáð<r¸•Ãà mèñ<b˜¡ÇºØtå|K)¨U‘o0
+* {ΛպiãñüÖÃÊ¢c\PB,€“³§£¾“­Ìo(> +/ Hld©JF^;N“ˆ…mùXaBxbPPâ€äýâ
+ŠAH¹öhzY¬F¬3”X8Ü´Ú§„ƒÎÞ±&åÑïdEŽ€ûžd…=¤)‘™0XC¼ÊŠë %/wCJ¸D°Z íT¾_#Ìbh
+ª/èÃ|'ºÉ>° ò2c9¼bß"0¹yF5ÜŸQLló÷ÈqÅɾ”§PBç'$Ò÷=L–ŠD²[hžëhÓä8u¹M/ŠÃFÏè-w‰BŸSL¹uU¶1©ÞÖ¯4 †ô~vM‚ØEø‚í$c27çØšZ‘$’â#V—“Ô¦Éø
+ÙçÒ±¯ç‹ †ºd¬ÒÉCÙÑć¢Úz²?„]ÙÆ©ˆ¶Fœ`Ã)Ê$Yn(Zï7{ g¿¨yER|©vŽÍÀ§ÊìlWœ–6óì¬@m–Ç^gö#*q’•>~–+?x©Æ“ªüÀÀÀì,2;K@ÙA¨4BЮ§à,èÕh–8€JÈ˃Ù!^}Z^ۺ츷g âª!ôÛXà86EÖ›rUlJêŸd¡^¡ÑçØ5¤A
+Ï‘$®Š‹RìÌõӘBÌe~(°ƒ"_ŸšgÈqÕ„T( Y*m÷­ip¼Ž¿l†N§Œ «§f[-ö³’EÙÎ ÎP_Óêº|ž
+~Uÿ£³LÀ¿sþG;-rîÌ+(@­µìÜÐÿäÿãvþ'ïý;¨²p®  ʼ›®™7A–Å
+õíˆ÷µW‘mWÔÑõõᶧ%6dÅ—òC_Cb‰&ÍÎ ,Í…“9¹¡é;úœƒÿ]aƒ!µ\-æúXqÐEÑ`Šîí0©\¤q(ÊrÅÝ ^@£P†Á“b Ž°S»#'BÇÊ£cäÐ4Œ+}UʸW„·ãÊÿÝ'LÈlÿK×+Ÿ´NDî^ÿ
+¶«ðSJN¥Á+Æ« ‚°:Ib¿*ÍlúVÚ@Üï)8* ¶ÝÐOÑ.|ÛÁ2JÜÞÑ3Ôj¿Ð7„ÒÓ†>
+¼Æ$",üéÈh¾™=â„ßqh>h†¾$€'ÉiÓ2åKÙîW(€T’
+§Ï@*•"Qì×®àø[«4pôCʆµ'7ìgœå_ž§¯ðo@Ø—ªt@^yšü‘/¬qÅiþi%djÔ9þ ôWÀ°TƒêŸæŠ rø¹÷!YíµŠêÅ»/aŒØn—8…‘æã.úpÛ[á—¨#@‚.ëEÉõ÷S“ð…žžô½AÇîa¢‡E®IÔƒiëè>I 6Ø£H}w¼‹Ê]Ìám€•Ä$&Á“ËèЩ¼þ¸öâCrVT ª¦MI5áIª ?N«æ@柧G_5¥r™
endobj
-1418 0 obj <<
+1460 0 obj <<
/Type /Page
-/Contents 1419 0 R
-/Resources 1417 0 R
+/Contents 1461 0 R
+/Resources 1459 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1368 0 R
-/Annots [ 1425 0 R 1426 0 R ]
+/Parent 1416 0 R
+/Annots [ 1465 0 R 1466 0 R ]
>> endobj
-1425 0 obj <<
+1465 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [341.1654 110.9312 414.8187 122.9908]
+/Rect [341.1654 414.164 414.8187 426.2236]
/Subtype /Link
/A << /S /GoTo /D (the_sortlist_statement) >>
>> endobj
-1426 0 obj <<
+1466 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [434.6742 110.9312 508.3275 122.9908]
+/Rect [434.6742 414.164 508.3275 426.2236]
/Subtype /Link
/A << /S /GoTo /D (rrset_ordering) >>
>> endobj
-1420 0 obj <<
-/D [1418 0 R /XYZ 85.0394 794.5015 null]
+1462 0 obj <<
+/D [1460 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1421 0 obj <<
-/D [1418 0 R /XYZ 85.0394 668.4044 null]
+478 0 obj <<
+/D [1460 0 R /XYZ 85.0394 624.4743 null]
>> endobj
-1422 0 obj <<
-/D [1418 0 R /XYZ 85.0394 656.4493 null]
+1463 0 obj <<
+/D [1460 0 R /XYZ 85.0394 592.3687 null]
>> endobj
-474 0 obj <<
-/D [1418 0 R /XYZ 85.0394 321.2415 null]
+482 0 obj <<
+/D [1460 0 R /XYZ 85.0394 592.3687 null]
>> endobj
-1423 0 obj <<
-/D [1418 0 R /XYZ 85.0394 289.1359 null]
+939 0 obj <<
+/D [1460 0 R /XYZ 85.0394 562.5129 null]
>> endobj
-478 0 obj <<
-/D [1418 0 R /XYZ 85.0394 289.1359 null]
+486 0 obj <<
+/D [1460 0 R /XYZ 85.0394 505.855 null]
>> endobj
-899 0 obj <<
-/D [1418 0 R /XYZ 85.0394 259.2801 null]
+1464 0 obj <<
+/D [1460 0 R /XYZ 85.0394 483.5438 null]
>> endobj
-482 0 obj <<
-/D [1418 0 R /XYZ 85.0394 202.6222 null]
+1467 0 obj <<
+/D [1460 0 R /XYZ 85.0394 397.2275 null]
>> endobj
-1424 0 obj <<
-/D [1418 0 R /XYZ 85.0394 180.311 null]
+1468 0 obj <<
+/D [1460 0 R /XYZ 85.0394 385.2723 null]
>> endobj
-1427 0 obj <<
-/D [1418 0 R /XYZ 85.0394 93.9947 null]
+1469 0 obj <<
+/D [1460 0 R /XYZ 85.0394 205.1478 null]
>> endobj
-1428 0 obj <<
-/D [1418 0 R /XYZ 85.0394 82.0395 null]
+1470 0 obj <<
+/D [1460 0 R /XYZ 85.0394 193.1926 null]
>> endobj
-1417 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F48 885 0 R /F53 962 0 R /F39 863 0 R /F21 658 0 R >>
+1459 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F53 1002 0 R /F21 690 0 R /F39 873 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1431 0 obj <<
-/Length 3073
+1473 0 obj <<
+/Length 2887
/Filter /FlateDecode
>>
stream
-xÚÍ]sÛ6òÝ¿BôL„âàÝ“ëØ©ÛÔñÉÊÌݵ} %:æT}"e'ýõ·‹)ʱÈä,ϹËå÷{°qøWŒŒe6•éÈ¥š.Ìhv{ÀGŸàÝ»iÆ Ñ¸Kõãôà‡SåF)K­´£éug-ϸ÷b4ÿ–X¦Ø!¬À“8?9KÓӳ÷
-âZÌ Ý 3zT2
-PŲÎ?£Cºånq­—EË(G¿cÒZΫ7ð¤y’-ç„."Ùݪ¸ÍVÅâ =®«<\E I¼*÷ù*Îc¦=´>‰<|*N²"™e³ðÙ
-SM†u].åC*šOô‰ÀôNu7g÷¸e;o󑊨¶~ 8l¤°‘ª1Jp żÉ調=i«éŽ•þOà/b¾ SKÙo¾Æ
-Á)šõ5¾ÂPóy~( Æå–»- X΋XïÔE‰fh –q æ
-ÀñÅG¨X«AA "R‰xH%謱Æè¡«Íð&h3>#Oê~é~½Ó^C‰´žY§T\zͤˆiÁÙåÛs¨¹¸q˜'E……UÀFR×Â`‘HåVÛ"ÇäŠQÿ¸ ¸áB|C¸è¯»_º/¼@“L*É<w‰«´ð\ûÀ•ØWÛ]©àßqh¢Â!*„w¨€Ï:³B0G
-@—gï°IƱ6½ª¶5[Í?@¥Jô¨WGn¯¸Ï%ÁµúÔ™õ‚"jTJù'¤#B‰ÇÞì?Tÿ¾IA°ŸgPÐÝx¼.#PÇ­¢qR)µ]¤IŸfmòx©x0:_ùŠû]"µ,…‚z@œ3#Óðý€!B,LNoÁaV`ót^'SH?. [,¯ËпU[ì’ ëÒGVBxg#é¶CÞÅÝî¶_ñqƒ°‚qg<©ðž§È“þ
-ªnRñ•ªc
+xÚÍ[YsÛ8~÷¯Ð#]cqµOÇÎxÛ+)»Ù™Z¢mVQ#Rñdýv£A™ÒX’§$o¹Re6€&ôù5Àˆ‡¢g,³A†ž š.Loôåˆ÷îaìÑH<'-ÓI—ë»áÑß.”무½á]g.ϸ÷¢7ÿ’Y¦Ø1ÌÀ³ÿ\_ŸHó‹ËŸ€J™}z3<ïÓ€M¬ß]^½§ž@³ë«‹Ëû§ÇNgÃËë+êîŸ_œ÷ϯÎÎþpt>\.¹»-Á®÷÷£_~ã½1ìî‡#ÎTð¦÷ ÎD²÷åHÅŒVªí™ Žþ±œ°3_}NLš &¤Q 0δ›•~ï&R*p«?z"x`þ€äµf<ð'ÉKÕ‘¼†iïzÎf ¡äÏ®N1+«Cv9.¦Mù+粨At Äæ¡@Âd£|ZMËQ>¡þiþ% TwÔ“O©Oʼ)¯³÷E=š—·Å˜XÊÄÒ¿8CMôœfÁ Dàz`†­+J¢
+°ôÎ÷šÒž)°?Pˆc^r÷¦lßب,“6øz€:)BÜ÷û¤rë³I>Š:.kŽEÕ
+<4¤‰hàvrzÌ·“rDôçâ ,¯ëjTæM”( $Ë~z«.吝¸áW¨ó¿Õ´À$P#'›M}»²4Wz‹²:R8T(z eÁäZçveY˜'ðŠ@ŠVJ³¢(’ˆ`²‡¼~
+½Ÿ9q´:Ä®¨Ã8ÖÑ!2‘—o™¥‘FnÔ׊^÷R^G*‡R^»Ð—OÙ¾±YyÊ2ôÝi@ŠÛ(¡7× =íµÍˬP¯E®ûIu39гª.›²š&±³òͼ.Æ­ho“+þt}¶E O+Ýoó¯ë B2ã•Û!Pé¡é(Ðï/¯.®A¢ÂËu|$\)g7‰È§(6pÔv,ê(H ¢ a$§æCU7˜6BX1f‰Æ Œ{
+"f Nk?)Àõ–Ó»
+å UW¾À]ú$KèÞÙĺ‘7Š·³îCW¥Ú ÆÝJ¹gÆA¢Fñþ ¶n‚ø“­cÇʠ$žÕ;µÈÖ D/,ËgèLÁHªvaOnˆè”Cï¶$¾‚X¦±òö"ûšO‰ÄÐ6©£Ïye5ußMSÌ1äQû®š ×8~£'-^C,D]©Ò
+²ø3§K›$T+‰VÁéwë©{+–ê*òP±õÜY[ ¤°ÛíMCÙê¸'½^Þ û
+kwd,m9sF‘‰^ No@¨ÎÛ씤1-šÇjþ™u1ÿZŽZYF€I;‚^1ˆt#ÞtÜnog݇­ÈZ
+#@¡¸ctš¢¤ò)Š¨ö@5¦³b×ÊoŘ/ íö¼Úò¼Zy³2»Œ\jæ!Y'-œŸÅƒߢr%ŸKàLͦ¢g]Œ”IâÉq|a\Ž H|yCT¿Ÿ^MePù6Äÿ8EkÙæ ƒ=9=FżɩO.¹DcÛW,tLši–ª!¢ø£¬›õùž©ðd
+Oï-v$:{ƒÖ#í ¨~ŸžÍ·Y,”È.ÏÉ¡¿SÓRG´ZššžqQ'ÏeGbq¾Ýû¤¬k‡:“69gÂ_˜’Þð[,XfMØ‘ü”sŒ[›âȧaIJ*°öNµo ˜úÐzñ¹j½ÄÝj8òE #­ ²^¤ÞªõŠ·a½²c½A·Ö«µLºÁNº÷RÝòzŸÊ{h¬•÷Б&<)\¥ižùéeÄz¡Ó`¾Åi:Ö¸Ÿ…¿j5®¸`N‡ Žœ#K‰xÑXÚ(­—è06(Ðë§[ÇȑϢ⅟N÷H´5
+ÒdÔHÅ+><ñ j¯ó¸­™¹»÷7|}#!by¶k¼‚)Ï©†¼Áó0Ïì&zCõµÇÒ;(™f3ð±Ô‚í±(¦Ô ©á¥$‚ž€øÄ4ç©oõu£bvz°[ŽJ;{~ÃG× b¤ß‘q$T9ÚqºKèßDÕÈìr
+QñK:±–NfísVÌëjZS#‰zåm¼Ë†N‚°®-ôì@XçèßÛâ6OGÞ/‰tÛµ»RxËn¤8ã°‘ÊÒ†‚·ýþàòd uÙY5ÅÜsºèb[íe¼»Ì›E›±kœ79Þ'ðÕ’‡_ÈM7;c·²îVÞðE‚ÀoªŒÜqú%¥`VŠ\ýc(Ȇè"ì¯Z4ÅIó@AlqÿŽë—D˜ l[ÎÙx|TI( )DCøŒh(råT"SQ¦W|mö”qú€e„ J!žD%̃èLwêû8´v×ä[·|ò;ïžnšÖ Ø>ÎØ•ù¡ª^Ã4ŒgMv8£€ÂÃyMŠˆÎh|gt’/q:Òkžˆ]­'"M@)”ª(¼’›óX .•X¿;R‚À%Ž¤`]͈ի#¥D¼:Š é²yâeÑ3&î-þO7G]m¼á›#1Ü›ÑÐ'<…“Áõ)Öw4Ö¿kOɳn":9øŽž9±PM´2°<BijP·zfädúÆQîsußÙé†?ð—ikwÀ!-ãÜüôÉþ‰õƒÕ«HY
endobj
-1430 0 obj <<
+1472 0 obj <<
/Type /Page
-/Contents 1431 0 R
-/Resources 1429 0 R
+/Contents 1473 0 R
+/Resources 1471 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1368 0 R
->> endobj
-1432 0 obj <<
-/D [1430 0 R /XYZ 56.6929 794.5015 null]
+/Parent 1416 0 R
>> endobj
-1433 0 obj <<
-/D [1430 0 R /XYZ 56.6929 579.9063 null]
->> endobj
-1434 0 obj <<
-/D [1430 0 R /XYZ 56.6929 567.9511 null]
+1474 0 obj <<
+/D [1472 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1429 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F47 879 0 R >>
+1471 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1437 0 obj <<
-/Length 3183
-/Filter /FlateDecode
->>
-stream
-xÚÍZ[wÛ6~÷¯Ð[és,”¸äöÉuìÆÝÔÉÊê6g›>Pmq#‰ª@Ùq~ýÎ`
-»6Liƒ¢S&ÄZòBv$Ï•d©”ºg`œDÂ;ýÍÛ!ÈJqýjËñi_¥YTÍñ™F/nno//ˆ×Ôô´e±Zžò4*§O¡÷¸*ò¦ôý&yCÔ``‰x¬š QùuÐ3ŠeZãÊ9Â-¤~œ—Kè&x4Ïg8š´àäô(Êe“O´½8ôjÊåC>%þ¸ö£Ô å‡Ê6Ûãá:âÍ|¬ç0 Ô ¬sLÄzoØzt{Cj0 gó´(-’&ÊI*Ä_PÖsÿÁ]½ CÓÓ-ª¿¹ r†j~6›)·A0d¥„× 2q"“Q½¬î«9©¨As/¦y>=ÑóÆ©Ó³C4̨²0­äqô¢´Å²¹aÀ‰ÜÜèqWD€k¶íV
-üÊ$‰èu¬ñË \ª”I½¾,;誟 ¾Øë3Iª˜äÊqš$ËXªåäôf8À
-»Áàöú'8† ÞEõ`w°óõqMÙê~ž7«p"kœ79ˆ—DZîÊ_ÈN¾{5¤b©ȼ³›ç:DË4ÑåÐ
-_ìº6 3<Ç„+&¸êƒSi¢!zI
-&X¯š²ßL(­îM ©£¢¤HLjÛX" ‹!…˜Ÿ¹^ùC:••ÿ Ø~UŒ+RlPJ"ª—DyäƒMÅÑÂi½|ï_mÊ~<síz©IÛó-þK'ÛAì
-ýËùumCÅ
--t”Ž‡ÚýÉÃoÿ¼õ…Îq¯šTì×TGÏ¥¨`&Ÿ?døb¿¢RÎb“¤G4~Ã’Dº"I¡kxš ÈÝ’‡?k÷nÖ|ØÞ»ëû²=]{׆ñ$9VkRF0§"ˆ1û†±k¡ƒ±#ù8©Š ’‰·{dz»G²µ{ììþì@~¼ÂáÜ!à…Û_†oN¹È¢3j{œ„=è2r¤íj±¨—MPîËÊ6õ
-Ä.{UØ‘Í·²¤dB'Çb–‚5˜ÌdN˜o…Fì¡!S.;E®¶RIå x¾eØ©u ‚Æ6"4q¶…ÿv6}vwû\JY×yŽñ›­Âñßû*,„'“”G,„ŒÍ‚ó'…g',™Á4ˆÄd{ôªâ25,U¾à5t
-7Uî‚ pú–L›"Pc\>”ÓzAyZJDÆåw–H_6ÿ/|öšá9í«
-Z¤Ñ5f+xɆYˆ6‰w#;Yß’¹Û¸nÊïCÊïòeU¯üHöÉî,5åÌ XÜå¶5±OA¬fÞÞûJÚ"0Kwc·Š¶¦'Xá^ëjî¹ ì[Á²ÕXòÏÄ )gZÆBÀ.µÒk\!!
-ùÛ_$ýÖ¦¬y×”sÏš-¦UQ5®’”FËÜß° ‡â}'´*WÅF`¢‚ï—±å¯ãÜàás?ë`Àˆ¸ªýÈ処-ýœ³|þ´ËiÝè‚Ýõ’¦Ëéy>u‘^ââˆjÈJêç¢-p'¹ÇB‡4Z¡ŒgÛü÷ÿigf¼4<£bq¥¢bBÉLªéNy°kòŽózì°¸âÊidÇÍ0­
-”Ÿƒ.YˆXä¨ðøHË­Ûiˆð {Râ~2ŽŒÜk
-²Á¦*}Oç‘ð éÌÎ P.0™¨ØÕý}i=2!ï'ª´¾šõ'õjêÏÈ¿&€#Â!#"ŸÐÒÙ%ü!„÷¥O~Òc÷ˆ”„á±·|ŒJ`×þÛœíç÷;c9¬ÈüªPÞ ìs<ÛT&˼%ñÉG$ÓñŠ.~€؉֚yœ×Æ/¦ó2ëX
-‘•—‡|ºú¤Ö±ÃiòÍøÌ;e’$ö…ewá4ÆÆ™B, ›`zâ ìçŽê„â2Š|¹¬(‹ô¨6¡‚%¾«g#ô[?
-oGAîòÉOÓ,ý¯^’ ´¤SëLè‡w–í²¶ Ð-ºî;J2>4þ¹êÔdV­" '„ò¿›²Ho*Çÿt*`ûýÕ¶ïg€²•r¶1kÜ;z¯ð¹?ù\ÿìU&Ó}E–$ûE¡HM¶½rx;fÇÒÿEkøendstream
+1477 0 obj <<
+/Length 3214
+/Filter /FlateDecode
+>>
+stream
+xÚÕZÝsÛ6÷_¡·Ê3ŽøàîžÒÄi}Óº=ǽË\ÛJ¢%6©
+¤÷¯¿]ì‚¢dªn¯Í\n2 `±ØÏ ËIÿä$‹E¤­™¤Öˆ8’ñd±¹ˆ&+ûâBòœY˜4Îúüîâ/ot:±Â&*™ÜÝxe"Ê29¹[~?}õåËoï®n/g*Ž¦‰¸œÅI4ýüúæ5Q,}^}sóæú‹ïn_^¦fzwýÍ ‘o¯Þ\Ý^ݼººœImb 4³ø÷77W4éÍõWW—?Þýýâê®yx,i”÷ç‹ïŒ&K8Ýß/"¡mOöЉ„´VM6&Ö"6ZJuñöâ=ÃÁ¨_:¦&I!U¬'³8FÊó»ÒìÊM¥…E97…C§ÂÄ)jÞÙè y¥š—F‹Lëx’ÆV$ÆPõïT ºÊâtz[lw—2›®¨Û¼-›úr¦3=mîéûNàTlÕE»ovï©“/—¼ÌôžFvzõa[ìÊ ò©ª}’a㥕ØP~ï×…[ìÊy±$•5ôÍ+jH™iqj5fK“DM†§ýcÔ&œq2;î9OÀ5i”žx·*"+t
+†™©TDé±=ñ$%"S6»ËD$RŸ±{pó".ɢ̫þn]Žï›ªjöe½B=C¬ÚÁÊâÂf¶Ã%‹*GÓ¼£”Jƒ 4ý9³W4o,Š!uÑøïÒ1'*uÝŽºu[=é!¯Ê'iÃ^ß¼ýë©ô!‘€Å2MÿWÿÛ½4¬8çI*Eœ¨çâ<Ic!¥{ Ù2Ñqr°üuÝ;åó6ÜçÉ~ˆ0‹,‰Ë°â¼:`FbÓç´‘hàþM’ž…ìõj7”ðt’ªiŸ$~õkK’M)#6m³h*¢,È7óÖg-˜›·4ðõõ¼‡<›r9“6Üh*$óÜrx—zÚ9Ï_*БÊÖQc]º¶Ù•‹¼¢þ¶ÛmWàT4w-‘‰á#,¬Ÿù8ú'J1ïʪ…sÅî¡Ø…°ƒå®
+Hø¥© ÷‚Ú…X‰”Œê>³‚Æ)/
+F%ÍÛ¯K͆r ’Mí ªä£>)&€¢ƒx)Å£)˜Zòy5zNò Œyîö5]ñ¿—,‡’y?)R­;˜uQœ m?6ŽqçiY¸âˆ^¼TX­†ñÒlŠœ,¡Ó˜\8e‡@h((_Q-©ãà Fsž]nxzUnÊ–ˆ>ÃwÝìy¬¡]¨° íŽýEÎsçÌæ}±e.e}´Ó"_¬ ð/
+5±$"Ôð¸s,ÂÑyؘ´lxϦ\³ätÛ`j
+²£GŽŽ¸XãEÃÛ/øå] ‘Ý,›
+cعrU{á€ê%±æÀ#_Bžƒ0€4ès•åì€K6¢Ös%—ßô$P説«ú‹9ÄÊ¿Öåi P¶s | ‚L¢ÔŽZÞ%°1/èË`2#³áÞ”¿aÁõç¡‹ ‹>¿¸M¿ 5c¯Ë9!Ü'|81J¶ÜÛ²à™>"á.3£I Øy`R/¨¸nµ*#Š~jŽg  9ž¼nºŠÏœ‡ à¨PdÔ”¯³T»!–xd.dÇáȔᱳn\ëaW2½æµ9} Û׫ÑÜF«,K…únÁa·x5ÁÚf²°™eO„Æ“E¤Óe· pg;‘¬–qÞ€ 3´À^Y÷©|ñH¤e·ãêM¦ñ>âûâ®! ·pírá±hž/Þó4FueÈÜhìpoyÈ«îÉKÇq§ÍOòóð•$‰8¤°E·»PpTTˆä
+A á“¥
+ê—LÏéØ5¼
+¥­ÿŒAqà‚GAÚc­W2V(Î*5þKL?(>UÉËw½BÎëc°Ó'¬¥ø‹|ÎaT"¤Ž(©{„ÿ *Âd•ZÔ‘Ê„ ’:¯™ÁžŸ°fd$â,³ÏyŠ4B¦qL¿±%À& ƒøWtà¹ÛO[øG%„}Æ7"%”Šè†}€ñ†ž‚‚RTzV)ƒý>]¥d‰HÒ,yÆ-,
+~y= }Væ’~Çï“¡ÊÍ°(˜Èø¿ˆËL*Çþn.š<k¦ßúWz‡¿T4©ÐY¦ÆàìÕ±@^h¥ÔžZ%†"gªŸ5ý?” pendstream
endobj
-1436 0 obj <<
+1476 0 obj <<
/Type /Page
-/Contents 1437 0 R
-/Resources 1435 0 R
+/Contents 1477 0 R
+/Resources 1475 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1441 0 R
+/Parent 1484 0 R
>> endobj
-1438 0 obj <<
-/D [1436 0 R /XYZ 85.0394 794.5015 null]
+1478 0 obj <<
+/D [1476 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1439 0 obj <<
-/D [1436 0 R /XYZ 85.0394 385.037 null]
+1479 0 obj <<
+/D [1476 0 R /XYZ 85.0394 695.8713 null]
>> endobj
-1440 0 obj <<
-/D [1436 0 R /XYZ 85.0394 373.0818 null]
+1480 0 obj <<
+/D [1476 0 R /XYZ 85.0394 683.9162 null]
>> endobj
-1435 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F47 879 0 R /F39 863 0 R >>
+490 0 obj <<
+/D [1476 0 R /XYZ 85.0394 381.0098 null]
+>> endobj
+1481 0 obj <<
+/D [1476 0 R /XYZ 85.0394 356.3075 null]
+>> endobj
+1482 0 obj <<
+/D [1476 0 R /XYZ 85.0394 170.7633 null]
+>> endobj
+1483 0 obj <<
+/D [1476 0 R /XYZ 85.0394 158.8081 null]
+>> endobj
+1475 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F39 873 0 R /F41 910 0 R /F21 690 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1444 0 obj <<
-/Length 3130
+1487 0 obj <<
+/Length 2891
/Filter /FlateDecode
>>
stream
-xÚÍ]sÛ8î=¿ÂÊL£?ôÁ{˦ɮwºéžë½éÜvd›¶u•%Ÿ%'õ¿?€
-•ÉâÑ3|D¡0FŽ6W:Va¬•ò=åÕ»«t öFÝÔA1‰(”*‘r’bHN± %U''JKEÁôZØOí>/‰Uûi»³MSÔ}×KÁ¤Aæa ÕÛ"ÝH-´[‘n¤‘A¾»Y`éƒà-5­Z»À!ÌŠ*ß^Ö» A4*‚vÍëlóùGÛòŽ.h»Ñ×ïŸ6ªÛz^—¯®oT¤‚¼âOèÚ7Àuyø,‘Ž à9"4q,§ëbµvSØj^/:|0ýi<¯mE}M[ÓºŒSpNM•o,MiìîÉæ–)ªK­ÕUIŒ+šBü#ŸòͶ´ }±žŠÅù¦“‡;š úª_òF¦”£Ð$P}(-ƒÅ¦(Av¹]ç-B‰›`n‚í&oZËø¢H:ºðã9gÀ±õá|ÉiaO¶A³®Ÿý¦LÒ¼†#ªZ^ µ[P@N'šP4Cˆç”· RÆÁ¦n€ [“ ÓÓhpÿŠ@g‚ÎGŠjUZê*‹Êºu—íºÞ¯Ö4€´Õ>oɪ`¢6ö6‚c«Áôf%o»ÇÕy€Ñ*@cIÏR%3ÇÒ”TAÁÉå»–@g&ж~ wFH«â‰´¥7
-l’þ ÌœLBÆ<’Ó:~EÌ쪨xÉç¢]÷Ð`°Ì«(8œ–Mcxç‚—È›f¿ PQT ôJ3K--@C¶* ¡šö]Y‡ÌÖþTÔûÆ{¹€ZýYášÝY¹åZËN²¨æåž, ¾–Ît ì|‘ÏŠ²hÎמÜC]–õ³;l´mRr
-NA¢½½ÿ?(9ÐÁ£š}K É,”š¤þRBRFaf`F‰0S‚Ôö¥Hnßw¹,ÞNß±<DÊ̘/iŒ0a–&±“Ç©F`´zÞ*5(#`Û„@’¼,ÜÓ|çr‰t¨”ξ¤'¸7ÉÏËN° H þŒz«¿2ÐF†*5ÉtC›:º NL‚¼¾f
-z83ñŽòG.av!µöE,i²0'>‚È Œ”ø:û2ʾÌ×D’ßÀÉy–œïˆÒ8»äúÁè"x- Œ®¿÷ïÃ7wïÂ_ÆSŽ'¥Ié=‡1ØX w àŸÖ/=`
-Ž3yööþ«Ð|ã[à( …BFÉ¥K
-vŠT ‘d‰dôW—¼ûÜE±D*–Ö'U»t»ZWIéîŠ%
-13að|u˜zŒÅ_Jy]4óý@á¯Jç[í¼Þ-¾¢ˆrërp2XØf¾+fî†Ã¬gД9z]짚Ïé* 4VTt Ñ¥ ã9ãåÝÜÂråÕ@&G©wÎ)µÆÑ!XÀýÙt«\¶|õ¹Ä”pç \¢­-æ{WZpß…u©
-á:§†ÐõàQ:w NÞ™RPâu峦.÷­¥¯Í+ÊÈÎ)SêJ=z'(iÎýšÄúnɈ^ˆøhõ›:Æ ÖÛèî÷n©ž“ÀAÊÝ»ýݱ›×“llR²±ÅúhŒ±öÞ;îê:K‰¹Ê€Àîdç]oM­·¹SDg{±?l„f~[²FòåLÓ¸¥ØE÷‹£Œ#úÀk³oÚÂxÎ$ŒÄ¹Ø&'9€NdaCŒzªÒMSÏ‹¼«*½xbŸ;>ìûþ–#0.†ÜÂ?¼ tìóxûËýé•@z†ÁëÞEˆè6æ…}q?d½rKB¦šM@:7´¼.ò%u:¥ñU¤Œ«žY0«©Tžúu<aIö’EÜ­ê
-¾@æ͹üt «OJÊPÞ‘O÷Åg™RÙvÀñ°§0\Œ‡¶XUõQu4èü¸‚k;wN<ò§ÌxGd¢EN4ºÈëÿ“ŸÞÏeÞö®IGEųünŽ3 5зÅÂloŸëœÎêeî”ÂK¿SðêRjè÷[Ñ苯å¯ýµØñs: U–ÉáW[÷ºc¢ìÅ[˜V¦Hÿ/§'» endstream
+xÚÍ]sÛFîÝ¿BòLµ·ß$ïÍMœÖÆé9îLæÚ>ÐmqJ‘:‘ŠãþúX’’iǹ6sg²Ë],€ÅX
+•ez¶9±Îg‰#ÕÉû“õG³a锘´Q"qf¶0V¤@~ ô8I…M¡ºLx£M/TèNÕ*èd.õz]œ.`Éüílíüꪥuþ‘§òš§^“Ðð¿3šj‹eW65}ܯËåš@—MÝ–mǨš[FD“Ê/nÊŽ†êýæ¦ØQÿ¶©ªæ¾XÔÍÃh‘™¯šM^2#u¾)`¡”ÈœÓÃnð8óÕjwªÒyѶ|¾WÜÙ·„š¶ËëU€W4rñÓ8n›Ý&ï¨ß5ÔÂF»ÀץѴ?ì—uWìê¢{„rà?™ÑÉÿ7ÍGîŸòͶâvÝÜ37mù©ßÚ7Ô»/»5³wßí;2^äK†ÁS °kâ‰IDAc}Ìi8}_nÊ*ßUL™oÊ»5j‹âŸÇÆæì ¨¾•M”K_bMƃR{í­é[ù©Í“Ð: ¸¸W¢ZÄ=-¼÷"ñÒ÷ÖgÕÈú”tBÊÌÂÞ†MHa?|?¾z/Þ^\‹ó×?ƒÏÒYâæà”¼”hdÞ)=WRàŸµÇò´>i–€@G´ÿÜvPpÚÛ¯" ÞL:;- ­­0
+({— ’Ï«ïÇ’PóAP8ª­–O‹dDí/Éà±ÿJ«’L¤6ËÐã ™^ÏÜ
+ÀÁlíó·‚—pä¢*Ûç½Oï`F.­ü$žÊ±$Z(”ä„æüc©>õšÁ¿yÊ{±Ï]•·ÈÅmAÌÔì„–Uή°«þ€=L;‘ª Ï× ¥dÒ"
+ êõºl—û¶ ÷Û˜$^•Á·Ëf·j'xÿÚœYeÒ3¼½ž¯Šv¹+o ç 9yؘɯ‹ãm±ûXìxMÛ5´%š+kº…èÒ…ùœáò~mYðP¸vaŒÏ§Ù‡Î² Y]öUøP,àñjºÕ.[ŠÇøêÃC7*œ4Û|וË=\ ü]H»A|Ðl!,½iöx^FF,wåÇ‚'ûëúxQïWé$‡%3±o÷yw’WcÜü†PÃâ†;yuŸ?À~'⢂Чi;  ÀÍØ,á ÆÛm¡Åм2`¡aŒp [—õï4„§tDxuEŸÈ'~ç±å…Û 0²ÍË 
+|ò.ÇÃÑiïufI$؉.Q5gL •‰­ÒñWÅÇ<ØŠµHh¿A©Y!ߊ{õão1p¦ ‡=p%žf^á· Û¡™Ã£†6A».ª-£yh»bÓ2 DK›²æå÷ë"®ƒM¨àGûÑ[75¶„(tàHùi0ï -¨R8è…ã5ꈦ¢‰UQžîè+œ´N…Ù‡3¬9
+‡H½v GT,Ë_¥Ô‘B8L¤ÁÙc È%5Û]ÙìÊŽ‰‡ó¢Ù 1õ
+cŽÃõIÜÁØ—õã}¶4ßE@f(ìðI8}øÃPØ=uGâAØ–`óŽ{Û+ÔéDE5SÁ$
+ðí¨î÷ÕÈIà$7L?+À±yMé+›ÖllÎÆèlôÞÐcÀn°gÙžîr|bm¨6wlÏÅÃÆÞM$KÖH¾œyºè(v1Ù(v1™ó
+¼6û¶›ˆp ¼lÆ3×
+€LNr
+ùhü.väÓwX½ ˆL ;¡µì) *EåÁ¶¼«›Au,èüE ×vœ¸”ÑkdÑerÉÒyŒ×grp½Øߎ®ÉÀEÍ«"µ°ÿlBk`lÛ`ée 3±Ï›‡X
+‰êI‰ÿE”$BYk?#¢TŠÄ¨^BGXž‘~ZDDÜý•"zyañkÜhq©„}aaQ[,W&îùÂbxË‚´ŽòoŠ´e‡Z«-Àxˆ íóDú¤ü¸¤è”PÒÛª™ÁDØQÆ°•ãŸc¬`‰áÔŸAª¤©NcÄŒñjUp5o°Ïœ1lý†ó¿0©Wú0<)¹ÜX%ç&6M|Èj÷ËeòéPäêäbó  Fec± þsJjZ(ú!Çá¡ãÈ.¼-ñY=Qiõ
+}••VßWZ WZß]G)`»¾þñ5U~*óó®Ü‹®YT”ÒÁÉ(‰qç2‘±Q­èƒŠÐásx´óáÑîŽ$î9¸ÜržRpP Á¾.»vLÙã³($êô,£ûž¤Çz“ïJz<K¨ÔôT|:ªßV\QEYJKLLƒ¡·Ì—”`½±Å;À¦,&©R'¡Óº¹§NÕ„ð†r*Z^&uSŒ­âØm3d@fDˆuèu³¯z˜É¢TÙ.ùÝ5dFÉáý“ž‚{•8z¢Äc{h´=ÔÅž,ÿïwñ= ¾TR]žf^þhê"&œRWÅ£8"‡¦d6SZ
+ï¬zÑ;PfD"ó…ï@“«F!¾7¦eòWP\qtÅ=--Rˆ¦]9Ø÷®RZèÔQ¸úþܘÜH<4;¯òP!‚ldh†ål£9Zª¹Ò]ÄPw9—fé«@Ð_A@ñqÊU*qµuÍ;2£{b w®/ö@w(ÔaF×æzc‚nÝ,ÀÅ®Ãø >þòÃëwoÏ..c!Štø6¡ó·Äí†ôì¡Ù?ÿ+†Mþ©ÜìýÜð¾Æ7à .9×Pþ0Ô€5îÚ¡œbÖô¼qã$pæ*Kf#møsúeµZcÈ$ÂJi§~î"gŸ _úãšáFÀIS=­Ð} âB©§ž’Ä‚ÚøjÄúOýðXendstream
endobj
-1443 0 obj <<
+1486 0 obj <<
/Type /Page
-/Contents 1444 0 R
-/Resources 1442 0 R
+/Contents 1487 0 R
+/Resources 1485 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1441 0 R
+/Parent 1484 0 R
>> endobj
-1445 0 obj <<
-/D [1443 0 R /XYZ 56.6929 794.5015 null]
+1488 0 obj <<
+/D [1486 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-486 0 obj <<
-/D [1443 0 R /XYZ 56.6929 769.5949 null]
+1489 0 obj <<
+/D [1486 0 R /XYZ 56.6929 691.0694 null]
>> endobj
-1446 0 obj <<
-/D [1443 0 R /XYZ 56.6929 750.0533 null]
+1490 0 obj <<
+/D [1486 0 R /XYZ 56.6929 679.1143 null]
>> endobj
-1447 0 obj <<
-/D [1443 0 R /XYZ 56.6929 564.5091 null]
+494 0 obj <<
+/D [1486 0 R /XYZ 56.6929 591.4009 null]
>> endobj
-1448 0 obj <<
-/D [1443 0 R /XYZ 56.6929 552.554 null]
+1491 0 obj <<
+/D [1486 0 R /XYZ 56.6929 567.0613 null]
>> endobj
-1449 0 obj <<
-/D [1443 0 R /XYZ 56.6929 384.3846 null]
+1492 0 obj <<
+/D [1486 0 R /XYZ 56.6929 349.274 null]
>> endobj
-1450 0 obj <<
-/D [1443 0 R /XYZ 56.6929 372.4294 null]
+1493 0 obj <<
+/D [1486 0 R /XYZ 56.6929 337.3188 null]
>> endobj
-490 0 obj <<
-/D [1443 0 R /XYZ 56.6929 286.7057 null]
+498 0 obj <<
+/D [1486 0 R /XYZ 56.6929 201.7848 null]
>> endobj
-1451 0 obj <<
-/D [1443 0 R /XYZ 56.6929 262.3661 null]
+1494 0 obj <<
+/D [1486 0 R /XYZ 56.6929 174.4803 null]
>> endobj
-1442 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F47 879 0 R >>
+1495 0 obj <<
+/D [1486 0 R /XYZ 56.6929 133.0078 null]
+>> endobj
+1496 0 obj <<
+/D [1486 0 R /XYZ 56.6929 121.0526 null]
+>> endobj
+1485 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R /F39 873 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1454 0 obj <<
-/Length 2777
+1499 0 obj <<
+/Length 2598
/Filter /FlateDecode
>>
stream
-xÚÍZÝoÛ8Ï_á‡}P€—ߢö­Û¦½,¶IÏÍÅuû ØJ,œ-y-¹iﯿ)ÉŽ¤×[ˆ¨!9ä óEYL8ü‰‰3Œ«\O²\3Ã…™ÌV'|r }¯ND“ÆAéxÔoW'¿¼TÙ$g¹•vru3âåwNL®æï“çÿxöæêlzšJÃËNScyòÛùÅ ¢äôx~yñòüÕ¿¦ÏN3\_^yzöòlzvñüì4J T`ñïË‹3ôòü³ÓW¿Ÿœ]õ[‹%¸ÂýþuòþŸÌAºßO8S¹3“;xáL乜¬N´QÌh¥"eyòöäŸ=ÃQ¯ŸzHMF9fœÌèIªCz29³
-ºPO/› ‰S~*Vëeùë¾HyƸ4r’iÍ´… >E&™3“‰lW¦ÿoVÜŸ¤B°Ü˜v@ó8ð
-Í8c—UeJ3%™zÀU>Ò Ó\¨I¦,œ&·^aAOlÖ¬
-5Lˆ*`Ö¨ %àœ'oË®«ê[âvuõG{`â@Ð̵  yµð‹Û¤«VeÚ5)ŠMÒQ:
-„锞r.Ëåœ^ª–Fôªdz]u¡«îÊ[Ò¸MüÁ•kz´eM˜ô£ˆÁ¶®ºv¼²MÚrÖÔóÖ óhI›¬7ÕªØTËÏA[ø.
-šu“‚›]¤ó¼eM4ôóï^\¾~v~^¨ÁX×MÝ–í!ÜßÐnW„µÏÍ–²ýÞVŧjµ £Ñ×EÙÄè0¨‹ÕŃjy¢è¹i# W ÜôýŒei- fˆ¯ÂYq¨‰R©Xþ`åeœq·Æ2ÉG` #d…™×íOÞYhÈJHÍ
-b1Ñ”ÌÀ/ÑÎH«ØYtôìh4D–fMt?žùÁyêF}=å30‚RoaÑ6¬zÅÁw–7ÅvÙí¹¾å
- ¼,°Â>† íð*ŠÜYÔ•O@ ÎTrö„Éš¡NiB4„Æ¢ðF­‚¤>|oéI.MšP{p‹ðRÕ{#§SŸ‚ZTq嘛±¯;îá( ƒÑÕñÁÕñ±«ãA–à6blê! Œ´û­@ðô"è{U‘C
-žH¾°Òê§íÃErdЂŠÑgxœ*ä<r‰*Ç\I=$ÎËS‘+÷ƒ²M$Ñ|1Ê6µwEÍöv±7XÐYã¬ë°Tùi½¬f•OŒÞ{_JhÀ ÷'ØÊŸŸÔ{aK,?T"Aê\+Ž#eBs¯JСJ8¯ºž¯‹õzˆtÇço>êÇK‡iø¨âg!U¹|H³·]ÕÔÔ‹Ž»[xÿ#*Ò1Ø릨ÛeÆAÏÔqÖù¢óy`ÚR‡?DèÀEƒÏÏ)Nûá»aks¢böÔU k‰œlÔK©³ãGQÕ©_?Ó +6ëâ€^ŒS0±n¹ €•JålòæjJC‹åE&yr©ò &Ñd"›'ìmÁwï¬ÓGDèXór—Ó²„t‹»Ui¥¯•ãžwâa[ÝÖÉŠcœ“CÁ«£SÈÓbÅœF,Ë?VùcAʦº]€×£Îb† TzÆ Y¯×M[u%‘‡…|gäFC©V|&
-¢Ÿ#T”õP´@ÿ¶ÝK_®àìMÕ¥‡Ä®¬™Ob`§[Ä¥âØ2> Dv9E~"{oà)÷á)¾°C€‹d«sÏ TrÐb^Þ¯xÞ9Ù#"úÞÁË€ú~¡")XotØþt¥)û¤ßENP;÷u&PÃîbMï¼øM{ë³’ºw!M#ïâ½
-PŠ® ⨔qý½A”ãÍP1ê¢}îgþ£cñø$`*ŽˆBWâO]AT•¬ÀùWëe˜@Â@cωè/‹ò;høÅ „ÄõE¹êu?žP{ˆ#Q„–²áû×8øyBdÌÞ®Ë>„[)oó¿-©%–Ôx3÷÷ÕÔßì¦zHB¥°LææØ´˜„J¬©)ñ§Ëéù+¼•6Bñd×z7~0'/öu 9Ù÷Ð ×Li.Ó ÏX.­#Çpšº Ôz±àæ¼)`ã¦iþ8Ö+g´ê·RΔ°:NŸž&¬ôšá÷´T f¤}ÚÇw!YŽˆ:f2N1gø¥Æ{JíË`9ËqŒÙô(EÌ¡W@¯
-FE憛Ðuƒ]”ÿód½iN…I>Vá‘„¥(MïF©íQæ>uÃr•ËÝ ÑÔ¾þjK™Q Y@nèó†žuÓ…F9ƒŒR¦öTÅéP”HS?½ "î;gäTÔÞ¶Åm‰â`ŒÓtç<¬F
-€Æ°±c×óPScÀËå|𬠚]¤úºZ4ÒI˜ÑÒsSb5ññj‹=žýÜeÕÒ§h7AøÛª¾çótž1«
+xÚÍ]oÛ8ò=¿Â÷ 5ËI‡²©Óó¢Mz®÷
+l·Š-Çdɵä¤Ù_¿3R–%í^{¸Cj2g†óI‹‡b”DŒ+Ž´ YÄE4ZnÏøèÖ^Ÿ G3ñD“.ÕÏ‹³——J 3±ŒG‹u‡WÂx’ˆÑbõ1¸øçù»Åt>žÈˆ1O¢˜?Ï®^ÆÐçâúêröú×ùùX‡Ábv}Eèùôr:Ÿ^]LÇ¡ÂHåXüv}5%¢ËÙ›éøÓ◳颹«–à
+åý|öñ­@»_Î8S&‰F÷ðgÂ9Úž…‘bQ¨”ÇgïÏþÕ2ì¬Ú­Cf
+¥b±ŒÔhq
+ñô©t‡S; ÊÙ?t"DÈL¤ÑòaȸáGËKÕ±¼‚)¥¢‘Ž ‹¬¡éÿ¶X¼ƒT‰
+›l<Q2q8%u°Ê÷c‘Ù²ÉïÜbÚз!j4ÕŽ0ÕÚ!<Ÿ?ªÒA¿s. Gÿ;øM¶®ˆó ³÷×ç°.{ ‡ÖîT¼¼Q¦‘Õi5XeëôP4tÏVr¿²»lÿà<ÅyØ}ÞlªƒÛ‘Ò§ÞeËÅ\ž0ª³†zNÄ&ãXŽºÿ¾[TF11šx‚é(.¿æ*bZ
+cÍꆀ;Z«`š.7
+Ë-íš½#lºZ9¦5-ØK„<Ô%}Àæµ#_nrmEØ›Ân38‹Ptá£VKež¾Š¼œØó¡s`é~—ØŠ·0‘t·²ª¶inõÑAŠéJ%qðn1'ÀUEªa«Ú HÁRn+l¢Í±+mq"‚]îÓ–DXئ«¬Ï©ÈÒº™4Õd[ÕMy/s¯ ÖùmI¥,-±È%$hfOǤ
+.O‡¥+¢(²µ¥UöZ³Ïo7õ&!×Ðൠ–¾ÊeFd½ÛUuÞd„>d=/G­‚ûô0èøíxEæX·fÀõC}H‹âÁíÞçÍÄjÎû*7YÉl’Ð/§ÊŽ.ƒž„ˆ4Tú m³½sOyêžÒù.H‘L2åT[¯`ÁÕ<ÓžþàXì Q<¢G?ºxé¼¾=¨§y¬‚3ô¥ìt;(ª”ôW%žS¤ƒz㤬“°)!¬óâß>´Xf´Üwi¢¼ßTµ[^¥MJÈcÍ4É }¡ì
+cí%>>O¯¬s-Ö?É1GÂTbo]AXl!ùç»Âm e
+Xh‡¶öF{oû©¯<orß°ã €ÝbiïÉ®ÒÖùå!WAvÆB€Z3 ª7uöù•çv“e%AÙèøWÙŠÑúaƒR=×…µ*ô¬Ñª`_xê¬X;Ø? i]û¡z•íðÌÒ¿Úw(
+ÇÛ'k2¸+Ô6ñÑL$îMÛÆ."Þ–m7Ù „çâ€Ø½(›ôËOr)èËD<X‚¢žÑ4SBöŸ&vRz|x ]Zú‹ø8À z.¡½Ý ÓÛ¢OÜôD¡òŒ> ˆ^3 -¦÷'ýµË=dèï¡ÎëW»«h_3d$ÛIPøÌ{½ˆ<^Ú:…‘ì(+ú¦å‡ò3T*÷G;¿½(¡ dîÜ”vþᲟpÑ,ìàº÷/'^•^ºè<‰ˆb¾6£º!ÑÈNLÝr¾¥§Ã¡¨‚ÖLéÄ 9ˆèÅLÌŽOOxYÔL‡ÐgªÖqŸ§úd“xVÿªÇŠ & #ãý†¢Ô\ÜãF9¤)s¢ú´u%K†]@sW­ÙÉÐΩìµ) D¼x_kûé·}ì ƒ³k]Ø^ØÒ³ÔíaÛ–€Ü—‹¦_6lkf³Ù}@ÍØÀ‚1L†'…s­4ý‘GºÓqî´¼}øðÁ>uñàâêü-þ
+íON(Ô(&_•°(‘z@ô?ÕcÕendstream
endobj
-1453 0 obj <<
+1498 0 obj <<
/Type /Page
-/Contents 1454 0 R
-/Resources 1452 0 R
+/Contents 1499 0 R
+/Resources 1497 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1441 0 R
+/Parent 1484 0 R
>> endobj
-1455 0 obj <<
-/D [1453 0 R /XYZ 85.0394 794.5015 null]
+1500 0 obj <<
+/D [1498 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1456 0 obj <<
-/D [1453 0 R /XYZ 85.0394 756.8229 null]
+502 0 obj <<
+/D [1498 0 R /XYZ 85.0394 647.5054 null]
>> endobj
-1457 0 obj <<
-/D [1453 0 R /XYZ 85.0394 744.8677 null]
+1501 0 obj <<
+/D [1498 0 R /XYZ 85.0394 617.516 null]
>> endobj
-494 0 obj <<
-/D [1453 0 R /XYZ 85.0394 609.3337 null]
+1502 0 obj <<
+/D [1498 0 R /XYZ 85.0394 528.2228 null]
>> endobj
-1458 0 obj <<
-/D [1453 0 R /XYZ 85.0394 582.0292 null]
+1503 0 obj <<
+/D [1498 0 R /XYZ 85.0394 516.2676 null]
>> endobj
-1459 0 obj <<
-/D [1453 0 R /XYZ 85.0394 540.5567 null]
+506 0 obj <<
+/D [1498 0 R /XYZ 85.0394 321.0565 null]
>> endobj
-1460 0 obj <<
-/D [1453 0 R /XYZ 85.0394 528.6015 null]
+1504 0 obj <<
+/D [1498 0 R /XYZ 85.0394 296.4844 null]
>> endobj
-498 0 obj <<
-/D [1453 0 R /XYZ 85.0394 359.8869 null]
+510 0 obj <<
+/D [1498 0 R /XYZ 85.0394 226.88 null]
>> endobj
-1461 0 obj <<
-/D [1453 0 R /XYZ 85.0394 329.8975 null]
+1505 0 obj <<
+/D [1498 0 R /XYZ 85.0394 200.5523 null]
>> endobj
-1462 0 obj <<
-/D [1453 0 R /XYZ 85.0394 240.6043 null]
+1497 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R /F39 873 0 R /F62 1035 0 R /F63 1038 0 R /F53 1002 0 R /F11 1343 0 R >>
+/XObject << /Im2 1024 0 R >>
+/ProcSet [ /PDF /Text ]
>> endobj
-1463 0 obj <<
-/D [1453 0 R /XYZ 85.0394 228.6491 null]
+1508 0 obj <<
+/Length 2207
+/Filter /FlateDecode
+>>
+stream
+xÚµYOs¹¿ûSÌ!¨
+²þŽF{cmœÇ–ó»ÙÚlcfª€!̯¿ýk©%ÌÄK^*•ª¨iõ´º[­îŸd–PøÇ•’Ôp“h#‰¢L%ÓÕMaîÝ 2½(ÔkJý:¹¸¼:1Ĥ<M&󆮌Ð,cÉdö©“Aº vþº º=®hçfx RñÎÕúï'ƒ1N¤Aô×áè9‡«ûÑÍðÝïã~WËÎdx?Böxp3FWƒîçÉoƒÉÞä¦[Œ
+gï—‹OŸi2ï~» D˜L%Oðƒf OVR ¢¤‘³¼øpñß½ÂƬÿ´5LŒ.RÞ'ÉÚâ$5IµÆ8}üø‘ þìß½¿«û;DJÁïQÿn€ä]8ê}ŒÿŒÁõËÞ\€&=©Õ`nÜE8Dœ‚žÉÂbðÞ GW·¿_‡=¹.¶vZ_mÐ'ŽõqIŒdÒëûð¼®ó~iYX(¢Xªà'·_À ª¦F楂Áy±´ë|Õ¶´‚x3X?µ¨  ã’å¶x,Ö-zÀ²,UQì3úܦÎÆ•rÓrµ²ëºEŸd$“{>; ’`„J®“ÓÄ ÜäØæ3XOd|í ÝÙl»,ë”S[U8SûMâoJù2â(ic€2;+d,Ë¢ yX¡˜ãÒE¿Ÿ¬·!,[¬§ËÝÌóŠu]¶Ûå§ó:NAù¦„O eM;ÃyKbp& $€™ÿ¶M(L‹ê«Î0ÐZRI2e\ 1Jq/^ÇÌÞ ´×c#äÞM`=õ¢ÅVi*8Y|?¾ŽÚr@Cêíå*[£Z;7.òÀùš/wö-Ò%X¹}**…1ÝmqCöévd“†Ý×ò{mŠÎïÀg‚¡ZC‘¢ÙqŽbQYÜOcºÊ˜Òégfå*â>=…2_í6Hùˆôd
+uó¹‹<¬·ÙåöôÓ–z“2¢u{½á/ë”1¯ÊõÔ©…Œb)É îgT3‘y惵k¤ÐÏCÛÖ~T…|>§ÿ0NŒQ²½ÿ@ 6‚pž¾¢ ¿£ +ñ‹cU‡v.A
+K'_W6(Ô ½«‡xÆåpÅ“ëJ>EŽ¦fïôãFuÏHÁúÒ@?€í ôÍU·'µé
+™PQ‘*ç8‚y«ðíÄ·(Çœ¢þ YëªÆ}ÛÙê΃xŽÃÌvÔï"ÇÐÓ §páá:ëÌ·å
+)ŸLŽpÉôÉ<9]6¯w[Û…5ä¯t0:?N
+‰L á™É’ÆQý±ÃïÊŒ2Àï앦f=9`/oƒ½Re
+ŽðÊÆ_†wJ¤o]ô<õ7Uœ‡!cj÷PÙ/;lì&¶¶iéÇY…L˜<µ[Ϭ+k¥Üz“Û
+Îœ„ ÿÃ-/‹ÆŒ£X'ß#N`»Ã9:Z¡äëÇ ´Ç™Ô2©ÔÈ©À°õ¬úÆÕ§³ÃVóoouDIM—r ]O46ÖltÊ^Ô׃DcŒ¦ûÔNCb.´wyå˾¿\ þ©íº‚rò ÔÖ€…oÞ F¸öBH'?ñ¦v´Êi2§€Þ©ˆ¾±7ËEÕ†¶8É(?÷p´Ÿ°¸‹ßya[æU›EÚ}¦M󘽼‘‚ÉY´¹~Þ·­JØo8ÿ?åø¿Ø(¸S¨ü毷lØq}âD«T4œ+ @ÊÃjžv¦ÂÖù9•Ý6|ä*Œ(Y•;Ox
+Në„ÓŽ7÷ñzùŒÔ .  2÷¹¿çx[¡›Oá „Ž|Ÿæk 889t~÷Ôvö{Ñë£&ý¯¡’„¥,nÁÔ-&ÒABªCÌÇÅÌ6€ôŒô£];›‚¬?µŽ wÁ
+)I`ê$Nn™_vGëh(É›Mé®P^ãî‰K.›Ã%«
+X*:räýÌ.ícî€Ê¾ÈUÓmñðJ‘c:¡+w˜–øF3€?û××cÒ¿wÁìG}qÒòjA_¤m¸·ú-¸êœà¤¡·OÚ`VØÁIxc=à0ú€#¾½Ù?Ž¥Šq䛓·7„¶WئG±w¸]„[-öO|x%Øœ\
+:l[>oʪpPïôb¨!òÌ褱?–’û c÷9
+5Šš¶¿qÐ=ìýῨ4®šˆ,ãÍg¨rÓìïÍ–á?yp‹z R Óÿ»„m‹endstream
+endobj
+1507 0 obj <<
+/Type /Page
+/Contents 1508 0 R
+/Resources 1506 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1484 0 R
>> endobj
-1452 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F21 658 0 R /F47 879 0 R /F62 995 0 R /F63 998 0 R >>
-/XObject << /Im2 984 0 R >>
+1509 0 obj <<
+/D [1507 0 R /XYZ 56.6929 794.5015 null]
+>> endobj
+514 0 obj <<
+/D [1507 0 R /XYZ 56.6929 720.5366 null]
+>> endobj
+1510 0 obj <<
+/D [1507 0 R /XYZ 56.6929 694.4596 null]
+>> endobj
+518 0 obj <<
+/D [1507 0 R /XYZ 56.6929 472.8118 null]
+>> endobj
+1511 0 obj <<
+/D [1507 0 R /XYZ 56.6929 450.5356 null]
+>> endobj
+522 0 obj <<
+/D [1507 0 R /XYZ 56.6929 369.5968 null]
+>> endobj
+1512 0 obj <<
+/D [1507 0 R /XYZ 56.6929 342.4358 null]
+>> endobj
+1513 0 obj <<
+/D [1507 0 R /XYZ 56.6929 134.5831 null]
+>> endobj
+1514 0 obj <<
+/D [1507 0 R /XYZ 56.6929 122.628 null]
+>> endobj
+1506 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F21 690 0 R /F23 714 0 R /F53 1002 0 R /F62 1035 0 R /F63 1038 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1466 0 obj <<
-/Length 2187
-/Filter /FlateDecode
->>
-stream
-xÚ½Y_sÛ6÷§àCè™
-Å_èÜtÆuäœ:¶ÜsÔ¦Ó4´Gœ‘HG¤âø>ý-¸
-¬B)M¯ÛµÝ¡ŠÖ•õV+7žzQîì²-?ØÆé ÜEt
-45$gBulk÷‘ÖéUÑ´S =+mÒ‹z·-Z}($ʪlËb³yÄוý‹R^ÙU˜ÅOo.Îq
-½µ@…víõîUX£Wè²mìæÎÓ >—›¢ñd ÛÝ»=+¿”DbwÊ@ eÝ=Wýr¿êSÛo÷gvëGj/@/wSlm$ é•ÔD*Ç?ÎNÃÓöR-7û•õGÏ¢£gBgÎ!Ëï®of/gó‘’hî‰ë¾a%‰ÑLF³ùùåo/¦#œ'*ç²ç„ö78fÉ%Bççbq‰†˜ðŒe(DNþ(ó±¶ J áóqðê±j‹?ŽÈ%Q,ScFS£åD0ÎýºU½-ÊjR¹£=Þ<Ó„KâÍ7Ìò°é²ÞnOŽœ#ZŠÀèíˆøf2€€&ïOòs‡zpΡ±mçW,¸+óª9š§•w]7AÆÒ‡£†yçiqßEÕʯ¬ñYTHì«÷ûbS:Á5üi¼&
-# ôÕÙl>y5½ùj£Qp‹÷ 2C¦-?›^78…c™Ÿ| Û“égW¿^NÉùõA¡½(ÙP’áÂã3ÖàZ0A8?‚ðNþ×>ž¯°«¡Prù…whŸAp…câK¼Þ•ïнŸðÉt¦TàÎcìÀ¹Êÿ›„
-¸A¡.yzß¹½´]E3Ÿ@¸ÀÛØwaà«JJýE&cº‡ÂïÐÅlÝż?pØÍb1ãÅ+«7Fäꦋ6L–žù} Ÿ¸äA³tv7Vt0½Ÿ=&
-&Æ4`C&
-Š2ù3j/l„#‘É°=”íz4ÑÀ)Šª¾Ò ƒ÷Ñîñ2”À{닲ÚeÀ‡²±OŠÓO§–ÃéçòïÊ”ß7®¼GÐÏs(S¨–½
-R‡“éhtW¼@šÝL_£
-£)‹k\4t‘àFÃ2•bô¸f]ï7+\é
-t7¶³M[ï¬-îºVÓM ³‚÷dêôÿCáæ'Îùþ@eèæ …òCo(¥JoO9À‚“]f]Npƒ.ܳ)±vqt]ᚇµÅÛ7ˆ&
-{úÉêàéô8B õ5×F'q¬~]ø; QÆ'‡K´¯§!¢( 뢷ã›IN9¶)‹ªSqT.—ßîvÁ1?®ý8ä
-bxkÛáiô¥³^GýEåáÁpà®s? W„ø~|g|ÉÔQû*¾tû-.ÝýÿÝm]lÊhÆQÌ·}^”î~Îô}åÓØÚÕ;ï Ôõ°Ðh‹Læþ*«VÍ3ÍÏà¦?jþüQ‡:)V)ê|1¤p…ÓaÏ(UN¿ ôÔ:ƒê;¸væûp—>~Å8u·° àÉî&* ¿{9OoÎœIÓoƒ]Ž9ƒúŠâ£³Ù¬›ñûHMù—Çx„±œÁõßmÙºkæ‘7š"3¼Áö¤ rÙÓ>Þ{w£
-ºþâÿ›„ÿh% åŠc¿wÐÞ¿úוŽ»6Bk†‘)sˆ/ L¼PNpÍ$?ËþÎsŒqendstream
+1517 0 obj <<
+/Length 3616
+/Filter /FlateDecode
+>>
+stream
+xÚåZÝoÛ8Ï_á‡ç
+nîý'¹™÷ËÛ·÷—Ÿ–¿\Ü,Ûô)¸ÂÝÿëâã'>Kᬿ\p¦â(˜=Á g"Žålw¡Å­”ï).î/þÞì}µS§˜¦¥b¡ Ôl!bÅ"ó²´‡e]S„†)#õhÙ…šÅI„œõ¨“„=I)˜R*˜™ f¡’ÊŠ¢ØÖÈ«zc ’ p ³ÜæõåB >O³z}ÈW™}óf›QõTfê+“ïÜŒF.E4ÏêêhëŒ>SﺲÏÔ-ÔTô\¹Ak•4YÊp¿°388nRÚ-^—'|<¯óò¡ÈÜ‘úÇ€µQ»#½™:4 ÂÀø“<­Š"9xº%ô xM«O»UUÔôé)o¶yIð¬Ï×ÄrãhOó\€" hÒ˜:O3"ŸÐщ>µ÷E²ÎRú¼:Y~,¤
+ÁÌ„ùfP™c—sÉñ©z–ƒ½Ör°{}<j— }±lH
+9ß@ÕëÑ k…›¸ }N³u¾K
+ê³Á«ûö5£M,¦,pŸ¤)…Þ/¾`´Ç§3bˆ¹bį1Â<&y‘¬ŠÌ¶„ڛ갫©ÙÅ:˜ÞíÑ®ðI7‰Gx–§2 wÑ­¸r[X7@œäcÀµóHMòÌ’Š)a¼²U ,P±ì-ˆ.ÍX—fýáT¹=~9³P3­Zƒù2é´n­ eÂà%‹:ÿœ‚
+¢ïÓˆ‡2ÿJ0'°NŸy™æ>úBâq¨†'_ÃlôED¢ç}ÞÐÃ:Ê>ƒÈ±qnpg€;ûÙ¦y
+F4´
+ÚF¾ËMµ(òG×cã~PçG=d%"Foô³LÑ!„[7‘ì u»jêW%4ŽeOVyPŽ«Ì x›òÆ8—l m¢•W äA^R®Ý¨Ãe4?YÍ^OyÖ»Ly©b6 ‹ðH`¼§™ „
+C‘–¹eµ{q‰..aWÆjcùº“Qþ=¨J5Ýv:ƒuûq$NSéÆ}
+†¢ýеÏÀ¨­,¼Ÿµ=3ÿçé^çh[ÄÙC½Ö©õ’- x'ôÉ–æL†*rÉ–v©Vÿç{8¿”q.½ŠäǪŸ>†Âþn0IJ(Àjø_SoQÙ8ºÊ+ôÔuÛŸ—$0rá3VüÒBæ4sÔêìÑ] Ù‰˜7ÉÚ$PZM?¸>ËÉPÒO«,ñ5†êlªsQ ÀWÜÛ¨z!ݾJõÓœá@zÏËuqLýX€&F­«c ñ³¡½ªØ» h=emâñ|5
+5¢Yh°d}ÛP3<œ®\-8DÏ(X)GÂ?Bå³W+œßú“×îGÀÚþòENW¾Ú
+™
+ÒB¶GêY=QE,ˆd;ª·õR+§endstream
endobj
-1465 0 obj <<
+1516 0 obj <<
/Type /Page
-/Contents 1466 0 R
-/Resources 1464 0 R
+/Contents 1517 0 R
+/Resources 1515 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1441 0 R
+/Parent 1484 0 R
>> endobj
-1467 0 obj <<
-/D [1465 0 R /XYZ 56.6929 794.5015 null]
+1518 0 obj <<
+/D [1516 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-502 0 obj <<
-/D [1465 0 R /XYZ 56.6929 769.5949 null]
+526 0 obj <<
+/D [1516 0 R /XYZ 85.0394 408.8853 null]
>> endobj
-1468 0 obj <<
-/D [1465 0 R /XYZ 56.6929 752.162 null]
+1344 0 obj <<
+/D [1516 0 R /XYZ 85.0394 384.5457 null]
>> endobj
-506 0 obj <<
-/D [1465 0 R /XYZ 56.6929 685.5532 null]
+530 0 obj <<
+/D [1516 0 R /XYZ 85.0394 174.3152 null]
>> endobj
-1469 0 obj <<
-/D [1465 0 R /XYZ 56.6929 660.2382 null]
+1519 0 obj <<
+/D [1516 0 R /XYZ 85.0394 142.2096 null]
>> endobj
-510 0 obj <<
-/D [1465 0 R /XYZ 56.6929 468.978 null]
+1520 0 obj <<
+/D [1516 0 R /XYZ 85.0394 79.8825 null]
>> endobj
-1470 0 obj <<
-/D [1465 0 R /XYZ 56.6929 442.1289 null]
+1521 0 obj <<
+/D [1516 0 R /XYZ 85.0394 67.9273 null]
>> endobj
-514 0 obj <<
-/D [1465 0 R /XYZ 56.6929 217.1462 null]
+1515 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F14 717 0 R /F41 910 0 R >>
+/ProcSet [ /PDF /Text ]
>> endobj
-1471 0 obj <<
-/D [1465 0 R /XYZ 56.6929 194.0979 null]
+1524 0 obj <<
+/Length 2855
+/Filter /FlateDecode
+>>
+stream
+xÚÝZMsÛ8½ûWè(W".
+âPăéâ,<@ÝOgÂꌜÒÈ×z?>ûÇ•2ƒ4HµÔƒñ½×W„I"ãÙïCDÁ9ôß¼þždïÆç&¾ÃÿÆïÆ/îÎGišÈáÅÏï>/oYK{ Yb›_Ü\_}üé·[ÛÁÍ5‹o/¯.o/¯/.Ïÿÿrv9î&àOR„
+­ÿ|öûŸá`sýå, TšÄƒGx ‘¦r°8‹bÄ‘RNRžÝýÚuèÕRÓ>§E± ´Œô`¤¢ ñ_7¬L¨ûG #©‚T„Ñó]q»º²En¡öºÅ&ÐB€qFÅ‘"í–T*oI5´NŒ°KjXm\ÒÕ´^Õƒõzþy7m³ïtš Öq4ðGø>£»._°Z hLwÌÏs°Ø¤Ãj½˜ä+,'ÃúžeÅvNðöáúŽ«Wç"º RÕ}½Â™âb¤q,©ó<›ÎÙ7Ÿ.n>\ ˜S*Nè ¸$Œ¶0üK
+¼@ÞÚ$Ú>-ó#`<™~0Bx%:Ž¿aF®Ås`Ô&D”¾Æò=¤{tþͺ}¨_E¿ÿï3y‹Åã6o±èMPŒBÑAËEzv3ŠB¹…"V±p Š±ÔE.5yÕbÉ ï)ÃÖ «1ÏY\Tm¾ª²’Åœ…›ºÜ€Y°å»£0Ñøwà/Ÿ±×—”â¡°)òÇóTŸ‚Ó-Àß8%ë8 ’ˆ»|>
+´ÖJxݯ³Enù^¾Ú¸å¸k³¶hÚbz$ ¼¡N•œ›ß„o¿géH)=œÖk„¥}Ë&\ôò´Ò>g苆%#~š7 49Ê“9áå)Ù+,_+½
+òøEâåXƒ×ô…WÓÖ3_IÄñOŽ/(LyI°8ËÚl’5pþ„³±ôz/ú†h:ÙþÑ$%P=# 0¤(ÐR%þ…âÁÅ¢4I%Jî ™†
+5Ö|à±ê%–Â@Åø>,©Û9Å-(PÐhwo¾¨Û¼|b%ös1á¡!‹ 8hÇz×›"íVr74@<gU•—\IAOâg\ÅA†é¡ l7}ÁšÄ1R{mòmŠ8ÍÍÚY‹„Q€¼rhè÷ ¶[NPÀ­»Éóç¾TEö¥$"vÅu«‡nû>ÌùúG¶§EäÒ7›FŸÚ$¤Ê}k„ F;æìGÖ VöFùØÈáêÁ"´3+ )VÆÝ×DØBÏG" C‹ÀÝ3½_½iƒ.y„03Q Úd…ÊYp¯S U.Mò‡Â‰] ³ð(à¼uÅÿåÿì™[—å²ãÍ›7ýÓøÐØ© nR£Lš¤Qê¹Nõuï}÷’³ýÄÎ[!°ËÌ%QÜ[iŸ?ÀÕÌÞ%p«ßªâ l¥O¥í¹-`#h³Å&®¤.ò¬Yoi"´Èl—M¡1s/]5`ñ—¬Zg«'VoûR¥HMˆ©'ÔÃ+`õ#_°G˜|iÍTJÎçÅ*<3Vá]Þ‰îÀsguA¡¨p£Ó)`q£-Mñú›BFx
+W%xÈeF”´ˆ]ú`dv½Xd˜¸¸jg••Øùº!-XQο¾AYÊûc+‡Ç1ªp¨£+=²˜>h+G¬;»Þö%EÖèòûvQ7h†@óÊõ¢âÂŽp¤*³IžÁ3–7O‹I]²2ß!b‰¬ÂÍQtG.{¥ÂÏ°’;iìH°±†ÃLª\Ÿ¯Ôw›EǬCKùÌ”Z …ÌVÿ<bÉNOPc¹,f$•8J“WÅÃÜz´ä@|}(6¹µÄ6ÂÓ%§4þ½ŒcºÛ‡®£¬gºMÓX ÚYÙÔ,q™ËÞÌîtµ35#¶|ÙHŠ®Éº¥!´×´°º³zºF¢nmXÖtÖxâJ»Bƒ¦D¿ôÁnQψÒOí¢¨ØýÈ
+“¼¥ÝË €l–MŠò=F:E:|7›ؘrhBº¦Øƒâ"{â{‚ûä§N3–vxž–ü8Œ ‡ÿ¡suÖ·V‹b6#¯IÓ –é~¯á2Ìç1§Óto¬> · i‡h-Z–:ظ/õ¬iá͈ïì$v8æ}æ Òîn.½c²KÏ,’}nÙOqoyÑrY®1){~ÜbO;*"Å?mÙ?³„]NþîŸzg0§šç.»K;¶Šç˜.Â@*-–gúÿ)%¦endstream
+endobj
+1523 0 obj <<
+/Type /Page
+/Contents 1524 0 R
+/Resources 1522 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1484 0 R
+/Annots [ 1526 0 R ]
>> endobj
-518 0 obj <<
-/D [1465 0 R /XYZ 56.6929 110.3497 null]
+1526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.6967 418.2465 116.8967 429.6386]
+/Subtype /Link
+/A << /S /GoTo /D (statschannels) >>
>> endobj
-1472 0 obj <<
-/D [1465 0 R /XYZ 56.6929 82.4166 null]
+1525 0 obj <<
+/D [1523 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1464 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F53 962 0 R /F11 1303 0 R /F39 863 0 R /F62 995 0 R /F63 998 0 R >>
-/XObject << /Im2 984 0 R >>
+534 0 obj <<
+/D [1523 0 R /XYZ 56.6929 404.633 null]
+>> endobj
+1237 0 obj <<
+/D [1523 0 R /XYZ 56.6929 381.6542 null]
+>> endobj
+538 0 obj <<
+/D [1523 0 R /XYZ 56.6929 179.3483 null]
+>> endobj
+1527 0 obj <<
+/D [1523 0 R /XYZ 56.6929 154.7696 null]
+>> endobj
+1522 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F48 925 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1475 0 obj <<
-/Length 3204
+1530 0 obj <<
+/Length 2809
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[[oÛ8~ϯ𣠌¹¼_ö­m’n3I㸃bgæAµ•ÖGr%9iö×ï¡HÉ´-[vâF’¦HêðãwnCzþ‘ž3Ã{Êp$0½ñÃî}gïψï3¨; Â^oGgÿºdªg‘TöF÷Á\a­Io4ù3z÷Ÿ7FÃþ€
+IÔ‰£·W×ç®Å¸âÝÍõåÕûÃ7}Å£ÑÕ͵k^\^ /®ß]ôÆh
+ãy0ƒ{7²ƒüÈ»ÑÕ»»þߣ_Ï.FÍÂE̬ôßÎþü÷&°Ö_Ï0bF‹ÞüÀˆC{g\0$8cuËììî춙0xZ mM0„¦ª5JÚPIFY…š](A¤? ãè:~HüZ“ü1É}½ŒËiQNÇ…Ç0[¤e’ë«7v£§8«½Ïâ’®®ýEƒjpo@2BÐíïwã0Lå«õˆÕ©n=E5"L\4ª’ô#HQê¸x÷üð9›õ’Z1H{$};£œFçI1Χórš¥ëH
+ÆáLöü»åëcQæP† Áü€)ݶ Ì¥ðMÖ5øƒ”T<ÃäÛ")ÊGÞpÅx4¼µ
+ÒBjœÞÆ‹Ê}BHNñÅØ.Òb1Ÿgy™L–`»8ÛÂ:‚C
+ìÿ$ãrìá’NvÍ‘T¬#ŒZ#*qFŒkÔ¹ Pß'ŽÖ¾Î@ÔãÂIŽ§¢HÝ$%ó6áÓ}^A)Ddß.‡ÝXþ7K=Œe§Å}}º±Í>t"H}²D•’nÖ7ÉãÆÅ 瓸LQ%e€.´t£{þœÆÓ±s«9^ o úÉ q«·v£+(ÌÏë0¢˜giØ€`ÑÝ›´ØÇ
+¸A¿"I˸-e:Y}‡8U ÚŽgF4Œªü+_¤ãØ&PÝ@ßX²é¨°ï@iO–ˆªj£:â
+¢»ëø˜x7ç/>XÔq?“ïÓDz,Ù;ÅHkÕØòayjÏ1术!m[*cÞ<ñ“V-+v\V[AÎ7¬`›EÏ|NÝnœRxóí‹ì·ô‚)\nƱ¾þ1`©‡è~=¢/L
+ÓqǘBÙØÊOç7¿¿¹ºPá
+¿ñ³„­ûYâý,<©çFî§÷©PÛÌ,Heû¶dK-–ЃkÙÂIöOÓÁ¹FœjúÓ|j¸ §êT©8ð.CG¢†°eV}†Éª½µgâ—O“Û©âÓÜŠñ¢p|a.#¶•Â_¸¬3WΓü>ËB®Õ‚´Ð¥¢3öc2ôœT“qì&ƒæ¿0¦éÄ·Uo­]$ˆ×"AUgô¶ß&kÝÌ/dm®c¶ŒùO£mH‰cùgaRâM¨Gl¡-•Ý Rá6Û8_ÌgÓqõ%†Q&¢!4B[*Ms:Uwx•šª¶—eò0w^ÅöÉ\¹$«óyQºÊdZ Úh3Î|掟$°Ñ•Éw{÷8ýâ~Ùƒ£>‰žÝ/}ÚZ%œ­Õf[»úà'šL<w‹_ÚÞl/dýÂ1ÞKQ]Wm›Â„þqù<OÜÓØj’}:žÅEáÛfî5ñäÙ=ûœTbÛªcl6h;ž²ÇDÕUHiš#(Õ¦rÊá[•íJ&_Ú·‘“fÿ[´ ôQ5=-³sƒö¸0Ø„9ãkhU÷^¿NQ~œî ¹)§‡°”($¹ibãó<›Ï÷ùJÕh›P*º·lÅ«­V̶•Zíl´hEal›U[&ßQ­:æo
+Ö–è ’•
+U劲8¥Azºvöû
+
+éy,:vxN
+Èß´âÍ¡®M#yÒ­B7°‘ð¢6àLÊè¾î6ßW!^ˆ6^HÏ ±í,‹Ø Üø—Þo•nÐôüÉçû!̧z§0ªé ,ÉH¦–—}¾ÛO7ûÞ½¬“ÜÿmÜùñ¸Ž³‡ù,ÙyÅKzÒP±9^Çi¡a{‡×{¾A
+Ó çÇyÀ<Å>ÙØäRÈ“ÅVRvœXÏ€ã+@ó"¹ò{_(9OKû7ˆ„t|ç°¸i4  ÷;7ÜzÓ,ÀÐ7À|»Ðt’žôeM‘²#ïÓÒ®‡`îg,[Üß<’*x
+#‰IGÔ¡8"Z™‰/¥a±í±^‹œF¦ÑꘌHÍÚþ<÷:aÝ÷‘—žÍbZ~gå ) ™=&±sY´´Ø„ÃÿÕ²ïˆþr[NRendstream
+endobj
+1529 0 obj <<
+/Type /Page
+/Contents 1530 0 R
+/Resources 1528 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1535 0 R
+>> endobj
+1531 0 obj <<
+/D [1529 0 R /XYZ 85.0394 794.5015 null]
+>> endobj
+542 0 obj <<
+/D [1529 0 R /XYZ 85.0394 769.5949 null]
+>> endobj
+1532 0 obj <<
+/D [1529 0 R /XYZ 85.0394 752.4444 null]
+>> endobj
+1533 0 obj <<
+/D [1529 0 R /XYZ 85.0394 752.4444 null]
+>> endobj
+1534 0 obj <<
+/D [1529 0 R /XYZ 85.0394 740.4892 null]
+>> endobj
+1528 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F39 873 0 R /F23 714 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1538 0 obj <<
+/Length 2152
/Filter /FlateDecode
>>
stream
-xÚåÛrÛ¸õÝ_¡‡ÌTž±°¸Ù7mb§îdÔv;;Íæa‹³”¨);Î×÷€¤$Èö6»Ó‡Ú€p9À¹_@1âð/Fi̸ʢ‘Î"sæË>º‡¹÷'­™øE“áªoO~¸Pz”±,‘Éèön
-ü,WNw.ÞRG*¡ÿ
-'P³*ošÊ4nçåÕdúîÝ5›^BbN=<€c‰ÊÄåpÍ2bnyññúòý%¨kÂù˜3ÔÉp§†ÝuÈAàžÝ'&Ò æê†Ú›óë_¿aç?Oúôáüu „ÔÔ}CÍÛ«éOnò ãqÙètÄA.>ä•Yµô˜ø 5R» pH‚RâRâ8,H>Kñ ehÝ+¹'_ T¾(¡ÌX©_‹‚[y伡w"‚t4Šµb™LõküƒÊÓ\ïù‡ÿn—¿ «b–&q|ü´,×õ;vAM:¤¬âàXÂÞGHÁ”Rñ(Nbž”È¿ÉW÷& :"‘-½]XíHR²ªØA«Šm½²MÞÚÇš:wõfÙ ŠÀèµù¦4m½v»6Ôöã?4­Y34ˆj|éA-Ü!¿p.7M<e)0´hçÏÐî €×Íð ³Þ]–:ÖƒB+àô(NÆÓª¢‹®ÄK:ˆ€˜¯
-?íA/·ƒ93!Y_×MÙ–æ@0cž2™$r4dá÷‰
- ‚h nh¦´Œ~ÌnËQYSš³$ãéK²&!ÔɢĢ_-šWJú,ïÞšŽ•4^?®0¬À±U¾ôƒw{«cœ>ôÝ‚“—†væõ‘T4MÓF310¾\ÝW&¾Ä@Ú4ÍJoBHƒÆ~Á/<æE]UùÆý_Á˜@Ùçãæi9««†¦Ëva=L ®‡g‹H±$áÚÁÓ\$,Ð¥5MYŸêŸúë*ŸSˆ‘agã)@Jeº ¸˜IõÑý¾tkÐlGÙøÚÆïMKœš7nóŠÚZ½m×[«~°÷©ÞÒèÊP¥\¥€Ùó|mú͇¤ÙÓÆ_P yäè²E@™Ù;B3Ëç¿6K-h«ˆ†[èa"ÝÞU
-ó5h¢¨ÓfP”€ÂK–ö0~…^ò.Ô»³Üi»^“ÌAŸ ›ä)ë­ì‚ÂÜåVºðGï1Å2d|&O Šº[4øn+ÄÏxX[!“Vlµ8ÑÀâÄÒ%:Ñ+¬Áâ#¹8Û)¼UÝR'Ÿ5uµm­úö U´£ä!N£dæ±ñµž
-sbkô°-WEé½/¸!žíW1瀃õ¾hƒ¨©l´â¬Ï›Ýr^G 2cÇSÇaFöi^Ÿ;þ U
-¥"–ÊX½9ªD2%¥“–¶z1s¼Yƒ³†Å0r¹ í”K3iëI©7X‚3ÕùU¾
--w âiz_Ú%ƒo­þâc1 c:Ù*ò6÷ÊeSˆy»íkb| Ú€­b|ÖéMÌž|þ¿–ùæW „+—ÎÜ?f5Uýh9ÌûzJÕØŒJ…™-=.-ad&ð³¦Ó÷y·ÈèuF!sEÇlPìÞ­ øëœÛáàà
-­ñ´šÚ™»Å0ò†Ÿƒò+ äîßé`WUˆ˜LÅ^UÁa®$a-9êªÖ裋 –SÀºø~ßáG œ­·ò°v æ‚­‰32ê¿1›×hKžºOÎü‡_µÿFloKñ—(çô¯€²¥\–àtÂ.߶\´åܾ2ùØÂcüB/ði½_½öCÀþcÈÈVÞeØívîÙ]
-©—ªƒ`Æ1xxõÿ
+xÚÝ›[sÚÈ€ßùz„ªÃœ¹_²l%8vOêìîƒäX»XØH8å¿=Œ„ÆHÕ‰+ †éQ뛞 †? ‰¤¡&R†#‰ˆæw}…ïÞwHÙ§_uêû½ÞÍ:ÿ2d$•ÑìÆK#¬5‰f‹ßºqÔƒp÷Ýh|ez}*pw:ë)Þ½°/³Ñt6ºœöúÆhÚ½üéâÓl0q½¤'èZJñËëñpôþ—I9ÀõØ5OÃÁd0¾ôþ˜ýÜÌvà_$ÁÌjÿÐùí-àZî`ÄŒÑ7ø€1†Fw.œ±ªeÙ™v>ïô¾ÝŠ¾s ¬€LŸiÄ…ÐûOëNá´å!!Èñò¬}Ib FTpE˜ µ›J¼y®Ò¨H ƒ$£l;¿Ü/â"y/>­“uò`óĈ6 °áp.+põ”ÅwéÜ¡Ýl¥s÷aÝ#º›ü•Ì‹dáZ›Ä+÷~ïú¸×‡Mš§EÙã&N—׎^ÍæHE"ÿúNCÆ9CX2õë©
+Î=ÈpIŸOýw UjP"‘â0%}jÂZùóÊr¨ƒÑ`]}E2L‹·ç¹2kxAšb¾[oÑ^Ÿ`Œ»ÿ]e%÷qšIgó²aZÄEš鼜ÕËÕ:¬ó—“¦„¼DR1ª™c20~…kÆðm©Jõ«I>Ù,vÕ—°¨`ÔK‰MS¡")92ÖuXÄÓ§»?WË^_rC»WI>_§÷EºÊ^’Fœ+]Ÿã4½-!¾õÇ à1¹ÏÚv(µã8ï>^éÍÓõ¦xäoxp·JpU:”Ñ'è´5µ ¤~ǘV%O²í§ç©ÕfzÌêËX€ÇÈÀ¿ôä1ôäwÑóÔ:/=rVzàé¸Ð4@Ü'†ÀêÑe'™ž‹Dó$}L zÚµÙ ¤%8dDAvfäs†§à‘ kåÚŒÈì”0ÄƹÇp’üF˜ÍWwiöõF—VÀè)Øâõ,l2i¨:ÌQ†ˆ2eX½¾hH@Ä<l’uzœCô5k±!
+¥ yW`,4äz”`“¥ü]
+$5 xC! ¢R»x|ñe8™$LÐÊøë@æ°¯W›0lqU€,àªaú¾&ØŸ§W›­Ã^=H Ä„v¡xôÆ7jL¯V«Íð ÍÓD‚°`°ãÆŒ?£×ÄöšÓóôjóÒ… OCšÀG ‚TÚÅÞ/7ëéf>Oò<ȯ.)ë8Ëo’õ+†U±#&‹ƒD=UÛlï,CÁúsÃHEt§Ë3â´•³ƒ,=%ÏÅòø¢Ù¨øÎL¼&e3õ¹H×Í8§ˆ õÊf¬,›M’|µ|¬¦âØJYUžå²ZfÔÿ¦ÖxÎ2Ù®àÌ¡Ñ\¼]%«
+Îœ€i+B^WÉl _—4ËvFùÁêÙ®ìŸû\ÅàóbIºÏæv„0…"\ºùrî'Ê…²;~[|—åëàNÙw}å΋œ¡Vˆ*N#dCÈÀÊC(#”ÍzʵØ
+Áó1bÁQ,\Ú ®î~•å‰µ*Ž¥êN&MŒÐ…)7Ä1å šg­i‹qJ†à¿ð”†)ï¿ìxÊf<å©<=U[ T@Ò‰aÇs¨àÈá"óøËÕõÇ‹Ñ"ã¢;Ïa µP‚N7Õr‚ ’LÁD€ Õ€ã2&öFù¯ÃžÝ‹Ñ0L¡yw²'?}ÒJƒHÛ[öVºROÙ#¥AÝŒ„5w¡{x=ù8€•Ýç[›Öë0ÉP€žj- Á
+Å]\§ø¸m»þŽÆðBê<èéÕóùŒµ‚ç¢È¤u¢‰«¨$öQ¤R!EiÀUR#%ÆEïi~ó[0J# v_mîßž”V/CxÝTÙ&ì1)îþç6ÉÜ·ùíê[yø˜Æî Þî‡üÍœ=ÑO³Ù'ˆƒZvsoOj?Ïoã,K–ÿi»¸M«v·WuªÆò„Û¦òÖÕó–÷÷ã»êq‘d½wCœ'óíÎЪìõ§»êÇ´xêXáû­ÉŸ¨ÓæþG.J*RRÂ1Á\˜˜m/|½Éæ±}V*hH³ž±ŽLw+‰ÓrB_ãö:;
+ckBуreOá¢Ç‡­Y*lãÆö8HöÃÎÉ2ù[{mÆÒÓ²½[h
+IŠ=Hañ€Õþ¯°®Ër
+îîˆýóç:Z8vE½‰¾OÖà
+GÁ
endobj
-1474 0 obj <<
+1537 0 obj <<
/Type /Page
-/Contents 1475 0 R
-/Resources 1473 0 R
+/Contents 1538 0 R
+/Resources 1536 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1441 0 R
+/Parent 1535 0 R
>> endobj
-1476 0 obj <<
-/D [1474 0 R /XYZ 85.0394 794.5015 null]
+1539 0 obj <<
+/D [1537 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1477 0 obj <<
-/D [1474 0 R /XYZ 85.0394 586.2823 null]
+546 0 obj <<
+/D [1537 0 R /XYZ 56.6929 710.7531 null]
>> endobj
-1478 0 obj <<
-/D [1474 0 R /XYZ 85.0394 574.3272 null]
+1540 0 obj <<
+/D [1537 0 R /XYZ 56.6929 685.6325 null]
>> endobj
-522 0 obj <<
-/D [1474 0 R /XYZ 85.0394 166.8772 null]
+1541 0 obj <<
+/D [1537 0 R /XYZ 56.6929 685.6325 null]
>> endobj
-1304 0 obj <<
-/D [1474 0 R /XYZ 85.0394 140.1236 null]
+1542 0 obj <<
+/D [1537 0 R /XYZ 56.6929 673.6774 null]
>> endobj
-1473 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F14 685 0 R >>
+550 0 obj <<
+/D [1537 0 R /XYZ 56.6929 460.614 null]
+>> endobj
+1543 0 obj <<
+/D [1537 0 R /XYZ 56.6929 435.4933 null]
+>> endobj
+1544 0 obj <<
+/D [1537 0 R /XYZ 56.6929 435.4933 null]
+>> endobj
+1545 0 obj <<
+/D [1537 0 R /XYZ 56.6929 423.5382 null]
+>> endobj
+1536 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1481 0 obj <<
-/Length 1085
+1548 0 obj <<
+/Length 1029
/Filter /FlateDecode
>>
stream
-xÚ¥VKoã6¾ûWè(ˇ(QÇlêl½(²mê^º»Ú¢m!zU”7ëþú9”‰EQg†Ãy~3‹(ü±Hf$+xåEJ$e2Ú43íàîýŒdRJ.µÞ­f?>ˆ<*H‘ñ,Zm/l)B•bѪügD9X ñŸó„K?,Š‰Tòøþç»_W‹'¼È‚ê»åãO()ð¸ÿøø°|ÿÇÓÝ<OãÕòã#ŠŸ‹§Åãýbþeõa¶XB¾L‹Qáâýköé JÈîÃŒQ(½
-5³T
-"S!&I=û}öÛÉàÅ­z³LŒ.2~£N\ܪ“,H&àÊÕigZ3èÑ”óDdiü™JZm‘ç,ÞW™m74zDz’ÙÞlªÏ”òéõúèN{ã*þÙ…HÏE—CÔÎs£íh÷¼6I0.ƒVœpª¦7]?V] A2tø²7í OYJ¨L³ð¨Õ øÖ´HIÆr´ÊCÓ‡¼\øžø»k}"Q"4@q%Œ‘BJîßlºv4íhz ù ézjtk·“¼ §õ}}¬ÚrýPM*‡¾„¶XâýSð›“B@
-ïÖ‰!H eE¸Ðœ`ZhNZµááMÀÀn!¦èß“Ñô bÀh7 “F?›«XÎõvµÞ<úÏöœæ~ª} Ü-´
+xÚ­WMoÛ8½ûWèhËo‰Ç4k·.°IckÚd‰iØ–jÊ5úï;”(Y²e¥Å.$¤ø8oæÍ ÉÃñB0SÜ Gá%» ö¾ÁÚû q¿ù]Ô»hòvÁO!%©ô¢çŽ­á0$^”~žÞ¸ûÍW3Ÿ
+<•hæ ‰§ï–Õ_Týçþña±|ÿÏênði´||¨?¯æ‹ùjþp?ŸùJ…öóŽ·wÙMnç:ZÞ¯g_£“yÔÐ ’`f½ÿ>ùü{)Äúq‚S¡ðN0Áˆ(E½Ý„ †g¬ù²¬'O­ÁÎjµuH4ÁB$B ¨FÉjB!É(«T³Äg>ÁÔÉwE\f›l›•?ë OYùbÃ|»¢cŒÐ
+N!ÌÇi[Ô
+§ª+(¸ô¼}Î_»þ ·Q|endstream
endobj
-1480 0 obj <<
+1547 0 obj <<
/Type /Page
-/Contents 1481 0 R
-/Resources 1479 0 R
+/Contents 1548 0 R
+/Resources 1546 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1441 0 R
+/Parent 1535 0 R
>> endobj
-1482 0 obj <<
-/D [1480 0 R /XYZ 56.6929 794.5015 null]
+1549 0 obj <<
+/D [1547 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1479 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >>
+554 0 obj <<
+/D [1547 0 R /XYZ 85.0394 769.5949 null]
+>> endobj
+1553 0 obj <<
+/D [1547 0 R /XYZ 85.0394 749.9737 null]
+>> endobj
+1546 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F65 1552 0 R /F23 714 0 R /F39 873 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1485 0 obj <<
+1556 0 obj <<
+/Length 69
+/Filter /FlateDecode
+>>
+stream
+xÚ3T0
+endobj
+1555 0 obj <<
+/Type /Page
+/Contents 1556 0 R
+/Resources 1554 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1535 0 R
+>> endobj
+1557 0 obj <<
+/D [1555 0 R /XYZ 56.6929 794.5015 null]
+>> endobj
+1554 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+1560 0 obj <<
/Length 1324
/Filter /FlateDecode
>>
stream
-xÚ•WKoã6¾çW99@Ĉ¤HIÍi7ÛmS,Š¢›žº=Ð2m ‘EUdÝbÿ{9R¶b!ÛÀ08¿΋]ÄöG™ 1Ï“Eš'DÄT,ŠýE¼ØÚµŸ.¨—I'"áÜNfV#Á3"2–.¢S÷7]°˜HÉÄâa3ê’iJ(gÙâaýçòn§š^·Wñ2½úëáÜ–4K)l‹­Š”ˆœånÃûû_? tŽÃg] mÙpvgê®\ëVõ¥¥F<šžHæñ¤ BrgM¹ŠhÇËwE¡»nDé[SáäSÙõ‰/r’K&=§„3)RØÏ™ßE³%`
-Ñ ç¼–Mÿ˜Ú«ºôØ*½|ÅÕþÍrhü¾½êìµ=kЦ ç¸ÜßœÂß¾%ª>LýÚùf?3d£ÌƒËtNùø»½‹$¼ƒ€V¸ &Ðä9M°&€1ÞŠ–Þ`£ßãlïC˜ u…wìT¤ °vʯ­´®QU¸!KûT£ËZ&°×eÍ–Ýʺ þÅã×eøf„W¢ýûþ "ÑQ?>'ÐXÚ4f⥶ñSö\Ý°Úáhendstream
+xÚ•WKoã6¾çW99@D‹¤DIÍi7ÛmS,Š¢ëžº=Ð2m ‘EUdÝbÿ{9R¶lÁÛÀ08¿΋…æGgiLBžE³$‹HÒx–ïoÂÙÖ¬ýtCLsGœ›ÉÄjó”Ä)KfÁ)ÈûåÍâ#£3!X<[n]"Iå,-×Îw²îTs°8œ'w-ÁmI҄¶ШHHœ±Ìnxÿôë”Îpø¬ò¾)ºÎuÕkÕÈ®0Ô€G#Â#ÁžˆI,¸…3¦Ü4 Ãù»<Wm; t.qò©h;ÄgɈS™ÉïçÌí¿£é0€–üÆá»ÇO­é½añt.­¬Âu¹^ãÔƒíe—ï,0ÝNvHtD.+$Zå–úÚaVk$ª"®äÞ©Úè:ßô]jCß*80‘R’Å1³G,ªÁ¡G7SfdAD–¥~ *ݛÄÏbA¢(Iœðý\DÒXŒÀþîU3‰›˜²·Cºš@KBÂÒ8ûÜ €x ä^[LšÜH©x“}Þ´©0éGÿrUÊüy§K5AFß›A¥™˜"w™A­D×Ȫݘ:¾TÅcQqTekJu9A<¿ÐŒ$<Â"ÿ£-ª­‘¦,M© e­p´Íy :ãN¾(¤¾„!«lGtž?Òù±§_p5œ¿îÜn[9V‡o¨ÃÉaÅ
+ŽÛýâþá-ñÕa|ìkç›üÌYˆ2K›éœòá=4v{Ix ¬°7L ÉsaM
endobj
-1484 0 obj <<
+1559 0 obj <<
/Type /Page
-/Contents 1485 0 R
-/Resources 1483 0 R
+/Contents 1560 0 R
+/Resources 1558 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1489 0 R
+/Parent 1535 0 R
>> endobj
-1486 0 obj <<
-/D [1484 0 R /XYZ 85.0394 794.5015 null]
+1561 0 obj <<
+/D [1559 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-526 0 obj <<
-/D [1484 0 R /XYZ 85.0394 769.5949 null]
+558 0 obj <<
+/D [1559 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1487 0 obj <<
-/D [1484 0 R /XYZ 85.0394 573.0962 null]
+1562 0 obj <<
+/D [1559 0 R /XYZ 85.0394 573.0962 null]
>> endobj
-530 0 obj <<
-/D [1484 0 R /XYZ 85.0394 573.0962 null]
+562 0 obj <<
+/D [1559 0 R /XYZ 85.0394 573.0962 null]
>> endobj
-1488 0 obj <<
-/D [1484 0 R /XYZ 85.0394 542.127 null]
+1563 0 obj <<
+/D [1559 0 R /XYZ 85.0394 542.127 null]
>> endobj
-1483 0 obj <<
-/Font << /F21 658 0 R /F23 682 0 R /F47 879 0 R /F39 863 0 R >>
+1558 0 obj <<
+/Font << /F21 690 0 R /F23 714 0 R /F39 873 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1492 0 obj <<
+1566 0 obj <<
/Length 3437
/Filter /FlateDecode
>>
stream
-xÚ¥Zm£Fþ>¿ÂßÎ#1ý4Ñé¤É¾\&íæv=º‹’|ÀÀØÜbp
-ÙZ´þXÏ‹Ž¨EKóöuÛë2'ªõ' 6·f~¨ˆÆ¡
-¨óN&ÜFŠÈCí'¤[rHðÈ)™Uèqä&çÕsAÓ«]^u´Æ/~àÚ¢Ú°`ÎWåðÔ…zF÷Á=µ‡oÂ1µ®ñdèÇ<ýéP¥vìd»èú„/¡†bOûRƒ
-/Ê/í>O‹§“•I)ee‚œÿ"¥æ<0´ÄÈ÷ŒŒ\ Yt9ö4Åò±¬ë=
-†¹"0óÕ•… ¥IEÏ·y¹§Q±ãØ÷œ¡=µ]¾£ùmžš¢;Ñ“5_÷e’ò&$k×rbÞÉyS-˜ßºþ‡wt2FBp”‘;iå>n‹tKfz,Ê’Fe±+ºs µƒ,Ù%7®+—žØÖG›qœOk·Í]Ñæ™MóhùÃz_Õ°¾¨m®x: $ZÌŸò¤;ô)GûdÇð€ä; pe1o)Á}ýD3Ø €bEÒnS@HÖEiÏØRkºö4\&Kòcœ0›„ïÕ¾)ž‹2ßÇØÝ Î6Äg‚ö=amˆ‚£`k;Д`dmûgþ–ãµIÈÑ}FC×
->a¯ÀŽ ]¯ÎHÌz¹m‚UgB°)WeÎÔ+ØÒAÊ~‡éŒSÙtºÀBeý° -£9Aâ w¬e8ª¢OYL S
-ñªÁ€¨>7^%YäŽGËëæ Q8Êîó¦<ѳ¢r’Є¤éŠôP&,iF\x[à‹S0@õ`×¹›ˆX
-¬ÄôÁ*Á™ò ¸H¿/1 c¢x±Ð#‰5
-U€ÏYÀˆT`_®éšdÿ;´ÝÅzÏIyÈÛ~5{:"Ä°ãã!¬Ô:Ôñ%Œ®'‚mÊÐX/[îDm§ [†.àbTœ
-[(a„i|Ý$Ma Î d±‘Ÿ…´Û#Qœ' .ŠÍü»ú˜ &‚(¾Ï«Œà Ì·ˆÏô- ¤@xÙ©¶ñ±ßQ¡Czê.9Ñl>GcÁå
-—V9aî{ó©6í¥ŒKH!Â%Üe–?/ÿÈ›z
-!(/Šû¶ØTˆÑˆÊôU¾Bí2Äb”~™2+ëÍ }éGgàâjå \¬ î1ϼK tÅnÊMB7uö¦
-ïq©Ø9(6B(n·ÁzÓü#(&¤<´”€Éú.ˆº¾T&¸-¥Û¤ÚäŽn#¨¥C|ÌÛ–+&Û
-â®Î
-œ”º¦!žh³uU?œ a¤ôe¦hþ´À€Û‡òt[§´£¤ËP]í‡ë2×{ŸìµF³Î`?K'ц‚Šóà"ãžÄ ÊvÜ÷TÞ8–¸„rn2÷󛢣Bhª—¬àÔt,ƒ¯j& 8‰0Úd·ŒBL‡á˼è=xñнqÑøë? HÛm…úuÐs¸%€…°Zd2”¤ò¡Ô5òÕWˆ‡‰ù
-þÊù»«.¬ôüHFPƒqHˆƒ°ôì·™ð|ÇŠ& Æv¯ç3°„åÃNÎÞÖ°£Ù`SŽñbÈÙn
-bÏÀ‰  •Ö7°Œ‘†öTw$iGa„=¢°i‡£Àkèd¯bÁh1fÒå(0÷–®`­"ècRûDj†{,öí¤sÅoÉhý`wÔK(Xj‡
-µv°Îøøy”RcNÖ·’úTD€¯Pçec
-å0ïH7MÞv,TÚå<so ðŒ–îm
-9l™¹õW@ôVsB†`±e‰e>7¢F]å0¸uh¬ÍþÑÓ€pþ2ó×¼sìRP§ë³KZÕnžôÑHcÅyNq–{{S*R
--û,ér׬æ¾ã«íê{ðJ(î7¸¾ªóÌñGêùãø)I9ðâ]»­eFã5¿
-e—<Ãö"Q[ pU[s#µÌøÂ0ã#ÌxeÀ<
-žUåiªCw´€-V\×èyVóý–ª)°wÛÒ:i©
-RßcíJ)5ø‘I–Fmù%*º”›©çÛšÊ&E˜4ÿ *&†•Ãitrwì_,dYôS5µê^XzqRÖB/ë¨s ¨LoŠÿ-åð߉n›­y±ƒÅol¯ VõdjLÇþà²9·Ë•
-¸]Žä]ÞmëŒÅ`hœýHpt(åó³Œvv[Ó÷`¬ \Ñ•¤¸_•ËȘéÇoñtl¡¤_˜^¬<i [ÈÀø‰šAk°Ø‘¿/ÛšO¼îzQÇâi$|DZ ó2ö|© kÈ^ÔŒŠ•'e _ÑÌ¢Ÿ>Q›Ã2¶‘d;&tCÂÂ`|²@°VŽèÒ–É3Oí? `ÇŠv¤ÀÞò?"·D€á‘Ê;.Â\û‚7´ûeL‰³H»ê±fÊðSêiS˜‘8-v¶¹rÒu¨ÛŒ®™ÚöÕ`àÜ<PÓÐ ÏœËÁîúŽÆ=ÆSý×=Ü#=¢o-¬x7ü¾mø°Šaz ÀŽÀg›ò/júä0Qëœ=cÏd?øReQnç¾›ø†b:óÄ'ûå[ói-Š8ô%-Än q˜ösš„Yßöï66ôs±ŸÛ&·åDª·ºY3÷´9í»zÓ$û­ë5àãä
+xÚ¥Zm£Fþ>¿ÂßÎ#1ý4Ñé¤É¾\&íæv=º‹’|ÀÀØÜbp
+Êú`ZFs‚ÄîXËpþT7DŸ²˜@§âUƒ;P}n¼J²È—;ÖÍ¢p”ÝçMy¢gEå$¡ IÓé¡LXÒŒ¸ð¶À§`€ê7À®s7±X‰é!ƒU‚3å…Ap‘~_2b@?ÆDñ b¡!Gk
+÷ìúÀWlÇK’?yh{zþžÓíÜíeä7ÈìoTãàZae㳩 HÏE~ÄØ<uÄ€c –_ BÈìAäâfÁëÆñ1Êž#²[›R ~ñ}Yæ„=`g`ËO(ª
+€©À¾\Ó5Éþwh»‹õž“ò·ýjötDˆa% ÆÇCX©u¨ãK>];OÛ”¡;°^¶Ü‰ÚNA¶ ]ÀŨ8@cOm_d :ˆ)w ¼Ð„1.IÓúPqàxr2RËÙJD¢ÅE²z¬x›€ŽE·%$‘'MYþ±8¦åSÑl*@EKº£¡u‹XNû‚eyrü@Qð^ƒø±pòW“GÀœ¨O'¬h@ ŠÅå Z d`.3ÉuDSqßÛ.醒Wuãà<¢]`¹ ÛáE*Ú&¶PÂÓøºIšÂœAÈb#1>! 7h·G¢8O@\›ùwõ14LQ|ŸWÁ˜oŸé[Hð
+²Smã3b¿£B‡ôÔ]r¢Ù|ŽÆ‚Ë2.­rÂÜ÷æSmÚK/—&B„K¸Ë,^þ‘7õBP^÷m±©£•é!«|…Úeˆ Ä(ý35dVÖ›ú.ÒÎÀÅÕʸXÜcžy—:èŠÝ”›…nê6ìM°)å‰(4=0p%üãÍr]cá¿çÒóÏ
+õë ç<pK
+aµÉd(Iå: B ¶k䪯?óü•ówW]Xéù‘Œ (ãaéÙo3áù:ŽMŒí^Ïg` ˇœ½­aG³Á¦ãųÝÄž@+¬o`# í©î,HÒŽÂ{(DaÓG×ÐÉ^Å‚Ñb̤ËQ,`î-]ÁZEÐǤ$ö‰"Ô ÷XìÛIçŠß’ÑúÁþP°Ôj (ì`3ðñ!ó(¥Æœ¬o%$5ô©ˆ
+€è­ æ„ ÁbËË|nDºÊa pêÐXÿšý£§àüeæ¯yçØ¥ N×g—µªÝ<飑Ɗóœâ,÷ö¦T¤Z÷YÒå®YÍ}ÇWÛÕ÷à•PÜop}U!ç™ãÔóÇñS’ràÅ»v[ÊŒÆk~4Ê.y†íE¢¶શæFj˜ñ…3`ÆG˜ñÊ€y <«ÊÓT‡îh[¬¸®Ñó¬æû-US`ï¶7¤uÒR¤(¾ÇÚ•Rjþð#’,#ŒÚòKTt)7SÏ·5•MŠ0iþTL +‡ÓèäîØ¿XȲè§jjÕ½°ô⤬…^ÖQç@P™Þ
+*þ[Êá¿Ý6[ób 0ŠÞØ^¬êÉÕ˜>ŽýÁdsn—+p»É»¼ÛÖ‹Á4(Ð8ûàèPÊçgí춦)îÁX¸¢+I#p¿*—‘)0Ó-ŽßâéØBI¿>0½XyÒ¶ñ5ƒ6Ö`±#_¶5ŸxÝõ¢&ŽÅÓHøˆ´8:çeìùRÖ)¼¨+Oʾ¢™E?}¢6‡el#ÉvL膄…Áød`­Ð¥-“gžÚÀŽìH½å ~Dn‰
+ä¤ëP·=\3µí«ÁÀ¹y ¦¡ž9—‚Ýõ{Œ§ú¯+z¸GzDßZ&Xñnø}Û,ð3`;Ãô€9€Ï6å_:ÔôÉa¢Ö9/zÆžÉ~ð¥Ê¢ÜÎ}37=ð Å0tæ‰O<ö'Ê·æÓZ qèKZˆÝâ0íç4 ³¾íßmlèçb?·Mnˉ To t³fîisÚwõ¦Iö[×kÀÇÉ$¨°ýÐåÌhÍkìò¤š>[4A
endobj
-1491 0 obj <<
+1565 0 obj <<
/Type /Page
-/Contents 1492 0 R
-/Resources 1490 0 R
+/Contents 1566 0 R
+/Resources 1564 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1489 0 R
-/Annots [ 1497 0 R ]
+/Parent 1535 0 R
+/Annots [ 1571 0 R ]
>> endobj
-1497 0 obj <<
+1571 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [63.4454 738.9144 452.088 749.0762]
/Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ftp.auscert.org.au/pub/auscert/advisory/AL-1999.004.dns_dos)>>
>> endobj
-1493 0 obj <<
-/D [1491 0 R /XYZ 56.6929 794.5015 null]
+1567 0 obj <<
+/D [1565 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-534 0 obj <<
-/D [1491 0 R /XYZ 56.6929 723.0302 null]
+566 0 obj <<
+/D [1565 0 R /XYZ 56.6929 723.0302 null]
>> endobj
-1498 0 obj <<
-/D [1491 0 R /XYZ 56.6929 689.3491 null]
+1572 0 obj <<
+/D [1565 0 R /XYZ 56.6929 689.3491 null]
>> endobj
-538 0 obj <<
-/D [1491 0 R /XYZ 56.6929 552.677 null]
+570 0 obj <<
+/D [1565 0 R /XYZ 56.6929 552.677 null]
>> endobj
-1499 0 obj <<
-/D [1491 0 R /XYZ 56.6929 525.9649 null]
+1573 0 obj <<
+/D [1565 0 R /XYZ 56.6929 525.9649 null]
>> endobj
-542 0 obj <<
-/D [1491 0 R /XYZ 56.6929 411.5673 null]
+574 0 obj <<
+/D [1565 0 R /XYZ 56.6929 411.5673 null]
>> endobj
-1500 0 obj <<
-/D [1491 0 R /XYZ 56.6929 383.9327 null]
+1574 0 obj <<
+/D [1565 0 R /XYZ 56.6929 383.9327 null]
>> endobj
-546 0 obj <<
-/D [1491 0 R /XYZ 56.6929 225.6356 null]
+578 0 obj <<
+/D [1565 0 R /XYZ 56.6929 225.6356 null]
>> endobj
-1245 0 obj <<
-/D [1491 0 R /XYZ 56.6929 193.4614 null]
+1285 0 obj <<
+/D [1565 0 R /XYZ 56.6929 193.4614 null]
>> endobj
-1490 0 obj <<
-/Font << /F37 747 0 R /F67 1496 0 R /F23 682 0 R /F47 879 0 R /F11 1303 0 R /F39 863 0 R /F21 658 0 R /F53 962 0 R /F48 885 0 R /F62 995 0 R /F63 998 0 R >>
-/XObject << /Im2 984 0 R >>
+1564 0 obj <<
+/Font << /F37 779 0 R /F69 1570 0 R /F23 714 0 R /F39 873 0 R /F11 1343 0 R /F41 910 0 R /F21 690 0 R /F53 1002 0 R /F48 925 0 R /F62 1035 0 R /F63 1038 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1503 0 obj <<
+1577 0 obj <<
/Length 533
/Filter /FlateDecode
>>
stream
-xÚ¥TM›0½ó+|©¸6Æ`³IÚ²RÓ4a«ÕxT‚Ó@6Úýõµ3·¶ôTEóÆoÞ|x€"b~ Ž “1JeŒ9¡•[ µ9ûêQÇ Ï¤ð–u—{Ÿ¿°I,“(AùË–ÀDŠòêÉÍóé"#Nü!Oˆ—Í&à‘ðXNÇ‹,4þ1[f“éb¤±Ÿga,ˆ0ñÌ)Lg£ïÙøó P§Ôžó{oš_¹m–f»øí==T™žï=‚™ ˜J¡­s†yÌØÙÓxKïçEðæô:4<Îæ"J¦±¡éq‰fŽìô–z«lO‰ßÕ½êÀ,7ZwÎÝkûäþ/¥và)šŒê­-¶uið[xØUE¯*8˜ØyžE_€U· ã`wXUz[€×H¶.²RZ!—{Sô7üÐŽÛôRŠ%çÑ©'ÂTÊä)…Ú{2è]·ÊÜ,#‰Ÿoê˜Çâ- ”úŸ Œ‰I§Àßë]بWÕ\cÁ*uÛ›|u»vx_÷v
+xÚ¥TM›0½ó+|©¸6Æ`³IÚ²RÓ4a«ÕxT‚Ó@6Úýõµ3·¶ôTEóÆoÞ|x€"b~ Ž “1JeŒ9¡•[ µ9ûêQÇ Ï¤ð–u—{Ÿ¿°I,“(AùË–ÀDŠòêÉÍóé"#Nü!Oˆ—Í&à‘ðXNÇ‹,4þ1[f“éb¤±Ÿga,ˆ0ñÌ)Lg£ïÙøó P§Ôžó{oš_¹m–f»øí==T™žï=‚™ ˜J¡­s†yÌØÙÓxKïçEðæô:4<Îæ"J¦±¡éq‰fŽìô–z«lO‰ßÕ½êÀ,7ZwÎÝkûäþ/¥và)šŒê­-¶uið[xØUE¯*8˜ØyžE_€U· ã`wXUz[€×H¶.²RZ!—{Sô7üÐŽÛôRŠ%çÑ©'ÂTÊä)…Ú{2è]·ÊÜ,#‰Ÿoê˜Çâ- ”úŸ Œ‰I§Àßë]بWÕ\cÁ*uÛ›|u»vx_÷v
endobj
-1502 0 obj <<
+1576 0 obj <<
/Type /Page
-/Contents 1503 0 R
-/Resources 1501 0 R
+/Contents 1577 0 R
+/Resources 1575 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1489 0 R
+/Parent 1579 0 R
>> endobj
-1504 0 obj <<
-/D [1502 0 R /XYZ 85.0394 794.5015 null]
+1578 0 obj <<
+/D [1576 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1501 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R >>
+1575 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1507 0 obj <<
+1582 0 obj <<
/Length 69
/Filter /FlateDecode
>>
stream
xÚ3T0
endobj
-1506 0 obj <<
+1581 0 obj <<
/Type /Page
-/Contents 1507 0 R
-/Resources 1505 0 R
+/Contents 1582 0 R
+/Resources 1580 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1489 0 R
+/Parent 1579 0 R
>> endobj
-1508 0 obj <<
-/D [1506 0 R /XYZ 56.6929 794.5015 null]
+1583 0 obj <<
+/D [1581 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1505 0 obj <<
+1580 0 obj <<
/ProcSet [ /PDF ]
>> endobj
-1511 0 obj <<
+1586 0 obj <<
/Length 1964
/Filter /FlateDecode
>>
@@ -6654,86 +6973,87 @@ i ·¥Ý3éÀ–yíˆùðŠ&Â8K<æcø¡›‚hïCû™<»úÐŒ­êhüýÔï Æס\@•‰ó÷w= vV
ýf3GÕ51b‘æi‘diNŒ‘Œâ±ˆ±0·"ð0àâÄßZÕ7’\sÂw"ó‡&0ÍåþF—?$cRÍZº”í(õåŠ:éH^04g¢°û(½À ÙWáÓ7˜¿S,[>°úŒ¹…;î3`ô¦'bÕÀ¤Ö^ ïöEy˜]¹œ­Þv‹íçÞa¯Úák@n@þzh|ÇütÓOÓ0J¿mºã—¿ÞeÚâš(°ÁiÇEðá êÍâÀz҃ѣm§žæˆ§çOŒ$
­è×ØÚ:‰óÎÐÃBYn?z·XdÌqâd¾©Üä¤ÚNí:ørðï»QÕaáƒL·CÕMucVìâªV.Wª4 Û8Hü»Uoy)”@»Zìo+B)ˆ×­©ôD9ƒ©;B.ÊõTyåvÂ)Î6™îZds§¡ÁÓÏMí­µ°r=¶öä&vÓž®é^/yr€¡¶¯ÓP;«y Â1{9B€FãŸà{ËוÂM>p\×-ž‘7>å èWˆÌ¨W
¥Ìrcø-Š¼ûãËü
-“¤%œ¡i±Iæ² —â~ÚøÑŸ/¯6³Âv¡ám’rá÷Î.zïá°ú‹EØûÛxà8KQ”×ñܼÍBw1\­ýÎÆð»•s^ÀÍQŠ’säjMkç/Ú,ÜÚmR¡ÈEzís³ã¾‡ê
+“¤%œ¡i±Iæ² —â~ÚøÑŸ/¯6³Âv¡ámÒ¥ß;»è½‡CÀê/aïoãã<,EQ^Çsór4 ÝÅpµö;[ÃïVÎy7G)JΑOü©5­¿|hW°hpk·IQ„"é5¶ÏÍŽûª‡]Ù)C™‹_Ú‘Âõ%KÄQXDñ¯oʬ±]ªÜïʽe×SX{üâññ|>‡¼+¾,}w¸ÉÀUßÄx³Q³Ô}\Wù¸·ö߶
+ߣ«ª]qöü´Þíâ³äZÄ^d{‘¡Éep …E\æÞ†R&·Þæ÷Í{wÿ¡’Œèendstream
endobj
-1510 0 obj <<
+1585 0 obj <<
/Type /Page
-/Contents 1511 0 R
-/Resources 1509 0 R
+/Contents 1586 0 R
+/Resources 1584 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1489 0 R
-/Annots [ 1518 0 R 1519 0 R ]
+/Parent 1579 0 R
+/Annots [ 1593 0 R 1594 0 R ]
>> endobj
-1518 0 obj <<
+1593 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [348.3486 128.9523 463.9152 141.0119]
/Subtype/Link/A<</Type/Action/S/URI/URI(mailto:info@isc.org)>>
>> endobj
-1519 0 obj <<
+1594 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [147.3629 116.9971 364.5484 129.0567]
/Subtype/Link/A<</Type/Action/S/URI/URI(http://www.isc.org/services/support/)>>
>> endobj
-1512 0 obj <<
-/D [1510 0 R /XYZ 85.0394 794.5015 null]
+1587 0 obj <<
+/D [1585 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-550 0 obj <<
-/D [1510 0 R /XYZ 85.0394 769.5949 null]
+582 0 obj <<
+/D [1585 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1513 0 obj <<
-/D [1510 0 R /XYZ 85.0394 576.7004 null]
+1588 0 obj <<
+/D [1585 0 R /XYZ 85.0394 576.7004 null]
>> endobj
-554 0 obj <<
-/D [1510 0 R /XYZ 85.0394 576.7004 null]
+586 0 obj <<
+/D [1585 0 R /XYZ 85.0394 576.7004 null]
>> endobj
-1514 0 obj <<
-/D [1510 0 R /XYZ 85.0394 548.3785 null]
+1589 0 obj <<
+/D [1585 0 R /XYZ 85.0394 548.3785 null]
>> endobj
-558 0 obj <<
-/D [1510 0 R /XYZ 85.0394 548.3785 null]
+590 0 obj <<
+/D [1585 0 R /XYZ 85.0394 548.3785 null]
>> endobj
-1515 0 obj <<
-/D [1510 0 R /XYZ 85.0394 518.5228 null]
+1590 0 obj <<
+/D [1585 0 R /XYZ 85.0394 518.5228 null]
>> endobj
-562 0 obj <<
-/D [1510 0 R /XYZ 85.0394 460.6968 null]
+594 0 obj <<
+/D [1585 0 R /XYZ 85.0394 460.6968 null]
>> endobj
-1516 0 obj <<
-/D [1510 0 R /XYZ 85.0394 425.0333 null]
+1591 0 obj <<
+/D [1585 0 R /XYZ 85.0394 425.0333 null]
>> endobj
-566 0 obj <<
-/D [1510 0 R /XYZ 85.0394 260.2468 null]
+598 0 obj <<
+/D [1585 0 R /XYZ 85.0394 260.2468 null]
>> endobj
-1517 0 obj <<
-/D [1510 0 R /XYZ 85.0394 224.698 null]
+1592 0 obj <<
+/D [1585 0 R /XYZ 85.0394 224.698 null]
>> endobj
-1509 0 obj <<
-/Font << /F21 658 0 R /F23 682 0 R /F11 1303 0 R /F39 863 0 R >>
+1584 0 obj <<
+/Font << /F21 690 0 R /F23 714 0 R /F11 1343 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1522 0 obj <<
+1597 0 obj <<
/Length 69
/Filter /FlateDecode
>>
stream
xÚ3T0
endobj
-1521 0 obj <<
+1596 0 obj <<
/Type /Page
-/Contents 1522 0 R
-/Resources 1520 0 R
+/Contents 1597 0 R
+/Resources 1595 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1489 0 R
+/Parent 1579 0 R
>> endobj
-1523 0 obj <<
-/D [1521 0 R /XYZ 56.6929 794.5015 null]
+1598 0 obj <<
+/D [1596 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1520 0 obj <<
+1595 0 obj <<
/ProcSet [ /PDF ]
>> endobj
-1526 0 obj <<
+1601 0 obj <<
/Length 2543
/Filter /FlateDecode
>>
@@ -6746,41 +7066,41 @@ RÜŠ1ÏuL~”6`l ¿‚~ZѨ¢<ÓCƒÚ̓
’ r”OœBç=Á 1j"«¢ºÑpQɧUäzý"GöÄÙ G,ØÝfS6ä ÐBdz˜€z²Ó„Q™DÏ B0q
ã”U#7Cã@Q²€.ÿ¾ô
ÝD‘øñðñ^=:\è±æí
-®o¬ƒñ+ñ'E\2}8Ç’;i %Ò‡ï&ª°Wõ\~jÀaÛÍ{³˜¢GË!zeoA_^†NmÞxš^Xð”Ð;’ù‚Ïr{z8Ø'"Hóȃ…×UØNÑô
+®o¬ƒñ+ñ'E\2}8Ç’;i %Ò‡ï&ª°Wõ\~jÀaÛÍ{³˜¢GË!zeoA_^†NmÞxš^Xð”Ð;’ù‚Ïr{z8Ø'"Hóȃ…×UØNÑô
endobj
-1525 0 obj <<
+1600 0 obj <<
/Type /Page
-/Contents 1526 0 R
-/Resources 1524 0 R
+/Contents 1601 0 R
+/Resources 1599 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1531 0 R
+/Parent 1579 0 R
>> endobj
-1527 0 obj <<
-/D [1525 0 R /XYZ 85.0394 794.5015 null]
+1602 0 obj <<
+/D [1600 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-570 0 obj <<
-/D [1525 0 R /XYZ 85.0394 769.5949 null]
+602 0 obj <<
+/D [1600 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1528 0 obj <<
-/D [1525 0 R /XYZ 85.0394 573.5449 null]
+1603 0 obj <<
+/D [1600 0 R /XYZ 85.0394 573.5449 null]
>> endobj
-574 0 obj <<
-/D [1525 0 R /XYZ 85.0394 573.5449 null]
+606 0 obj <<
+/D [1600 0 R /XYZ 85.0394 573.5449 null]
>> endobj
-1529 0 obj <<
-/D [1525 0 R /XYZ 85.0394 539.0037 null]
+1604 0 obj <<
+/D [1600 0 R /XYZ 85.0394 539.0037 null]
>> endobj
-578 0 obj <<
-/D [1525 0 R /XYZ 85.0394 539.0037 null]
+610 0 obj <<
+/D [1600 0 R /XYZ 85.0394 539.0037 null]
>> endobj
-1530 0 obj <<
-/D [1525 0 R /XYZ 85.0394 510.2426 null]
+1605 0 obj <<
+/D [1600 0 R /XYZ 85.0394 510.2426 null]
>> endobj
-1524 0 obj <<
-/Font << /F21 658 0 R /F23 682 0 R >>
+1599 0 obj <<
+/Font << /F21 690 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1534 0 obj <<
+1608 0 obj <<
/Length 2893
/Filter /FlateDecode
>>
@@ -6789,843 +7109,864 @@ xÚ­ksã¸í{~…¿Õ™‰IÔ3ÛéL.›ls×Ë¥‰;íÌíÍ”–h[]Yò‰r²¹__€
'é<%Ø«Ô4hνd®J%µÊ‰¢¨ó¬ö­Ú­TCSßu]"UN ‚yH‚ïäêfÈõµ)ZE¸zMˆJɦ|ãeeÉ õ^e-3³”í–—ª\~ 4
hfáyN†¾9fùVT²"ŸFÒÐg[Ø>k$ŒÓ­%ya4P’~¯$œø#Ìùp
"‡Ï®ëgýFÐ\í‰s&[ÔÂŒjp`‹1ãÄ.}Qe½ß©ª%€Ý)«+]ðq‰§
-~H¿°OQ­4Áæ:“¥$o…Ù=ŠR©–fì-DM¸û"çËm/Èá¤ÝÒÌNßöæ@1t$ê÷Š, s¸b,Â)PøTE&u;aBá9±èèðV$ÑÜ\{؆,CfáCƒUP9 '°ÐßHI"ð掉zÛ›äÄ”‰ïˆDø¼ùuõöžè‚"FHÜm,$BŒëàæV4P}#¡ô
-±AiÏK:·úCÛÅÂñCa×R¾_~à‰-³¤üœö
-É‘9R P)0¦†Œi‚4`(M§6ó'óÃ^S(Wr7dg51™hïŸÏ=¨m/̹?5YŽ¥ÚlË7“ìÌ(Ø… ¾È5o]÷"L¸6xc0¡q²m
-©—´¦5õÃD œ$ŒlH„r«å&Âçݳ5º?¾·hdµÁk+ §/-UçI0>
+~H¿°OQ­4Áæ:“¥$o…Ù=ŠR©–fì-DM¸û"çËm/Èá¤ÝÒÌNßöæ@1t$ê÷Š,ví-#‚؈p
+þU‘IÝN˜PxN,::¼I47׶!ËYøÐ`TÎBÄ ,ôÆ·R’¼¹†c¢Dàö&ù0!eâ;">o~]½½'¤
+æíœH¸>ø8þzduÖ+ž™ ‰èMY¯0† Ð:„™ ¼‰(5Dòâ=@¶«‡›}´ÁãBnÑŠw|º»!&ñÅÔeúìûÁ'ãL'Ž© ‡â àÎläࢩìÒG¯ÃÍq Iôo£´œ²<Ô‰PÓlÏÍ@ÔÁUæÄG» y¿Nxø¸ë=ãÝ=}ÊSK¨+Š˜5†þsºC:¡'¼£ªÜ¦ÂCìDPÚó’έþÐv±püPص”ï8AâÇcË,)?§½Er¤@@Žh T
+$Œ©!cš JÓ©ÍüÉü°×Ê•Ü Ù™E AL&ÚûçÇsjÛ sîOM–c©6ÛòÍ$;³
+v!¨/rÍ[×½® ÞLh܇l›„´¦5õÃD œ$ŒlH„r«å&Âçݳ5º?¾·hdµÁk+ §/-UçI0>
è¾ÏÝG$”uf,Õ­DC¡Æüx¾;˜t
-(–"—ÜYi4¹B™º¦qfèY'ÉíŽÑ–\z ¬nÌ\³&ÊKŸ ‰•v(Äð1“‘㣓Æ|ÒØŠž«Ëˆp}µ6eè£[SWöj›ŸMñ¢Âú`K@®Ö j]¼©VP%Û
-·KÊÿóWÞþCw;"Iüé¸~œ8Ô¥V(<AêŸHn?ŸŠþ_a52…endstream
+(–"—ÜYi4¹B™º¦qfèY'ÉíŽÑ–\z ¬nÌ\³&ÊKŸ ‰•v(Äð1“‘㣓Æ|ÒØŠž«Ëˆp}µ6eè£[SWöj›ŸMñ¢Âú`K@®Ö j]¼©VP%Û
endobj
-1533 0 obj <<
+1607 0 obj <<
/Type /Page
-/Contents 1534 0 R
-/Resources 1532 0 R
+/Contents 1608 0 R
+/Resources 1606 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1531 0 R
-/Annots [ 1538 0 R 1539 0 R ]
+/Parent 1579 0 R
+/Annots [ 1612 0 R 1613 0 R ]
>> endobj
-1538 0 obj <<
+1612 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [253.7995 146.8976 417.685 158.9572]
/Subtype/Link/A<</Type/Action/S/URI/URI(ftp://www.isi.edu/in-notes/)>>
>> endobj
-1539 0 obj <<
+1613 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [63.4454 108.9117 208.8999 119.0735]
/Subtype/Link/A<</Type/Action/S/URI/URI(http://www.ietf.org/rfc/)>>
>> endobj
-1535 0 obj <<
-/D [1533 0 R /XYZ 56.6929 794.5015 null]
+1609 0 obj <<
+/D [1607 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-582 0 obj <<
-/D [1533 0 R /XYZ 56.6929 652.1213 null]
+614 0 obj <<
+/D [1607 0 R /XYZ 56.6929 652.1213 null]
>> endobj
-1536 0 obj <<
-/D [1533 0 R /XYZ 56.6929 614.8935 null]
+1610 0 obj <<
+/D [1607 0 R /XYZ 56.6929 614.8935 null]
>> endobj
-586 0 obj <<
-/D [1533 0 R /XYZ 56.6929 614.8935 null]
+618 0 obj <<
+/D [1607 0 R /XYZ 56.6929 614.8935 null]
>> endobj
-1072 0 obj <<
-/D [1533 0 R /XYZ 56.6929 584.5024 null]
+1112 0 obj <<
+/D [1607 0 R /XYZ 56.6929 584.5024 null]
>> endobj
-590 0 obj <<
-/D [1533 0 R /XYZ 56.6929 289.5256 null]
+622 0 obj <<
+/D [1607 0 R /XYZ 56.6929 289.5256 null]
>> endobj
-1537 0 obj <<
-/D [1533 0 R /XYZ 56.6929 251.3901 null]
+1611 0 obj <<
+/D [1607 0 R /XYZ 56.6929 251.3901 null]
>> endobj
-594 0 obj <<
-/D [1533 0 R /XYZ 56.6929 251.3901 null]
+626 0 obj <<
+/D [1607 0 R /XYZ 56.6929 251.3901 null]
>> endobj
-900 0 obj <<
-/D [1533 0 R /XYZ 56.6929 222.7156 null]
+940 0 obj <<
+/D [1607 0 R /XYZ 56.6929 222.7156 null]
>> endobj
-1540 0 obj <<
-/D [1533 0 R /XYZ 56.6929 53.7852 null]
+1614 0 obj <<
+/D [1607 0 R /XYZ 56.6929 53.7852 null]
>> endobj
-1541 0 obj <<
-/D [1533 0 R /XYZ 56.6929 53.7852 null]
+1615 0 obj <<
+/D [1607 0 R /XYZ 56.6929 53.7852 null]
>> endobj
-1532 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F47 879 0 R /F53 962 0 R /F11 1303 0 R /F39 863 0 R >>
+1606 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R /F53 1002 0 R /F11 1343 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1544 0 obj <<
+1618 0 obj <<
/Length 2824
/Filter /FlateDecode
>>
stream
-xÚµZ]{£6¾Ï¯ð¥ý<-’ KÇö¤É4™4v·Ûα›g0¸g&ýõ{„>äζûä" ôâóžO <òà"†<ÊýQÈ}Ä<ÌFëý•7ÚÂÜíV2×ZèÚ–ºY]ýó Gñ€£Õgk­yQ„G«ÍÇñôéiñ8¿û÷äš0o<E“kæyzt¶XN®Ã€‹ *¦o|swóã݇Ûçéӿʇ~ó˜7}œË›åÏ··‹åj¡nŸÓùÝã-ˆàɧÕýÕbe^ÛþiØ£â¿úøÉmàÞ_yˆòˆ¾Â‡0çd´¿òȨTdWË«ŸÌ‚ÖlýhŸª‹HØ£+‚G#Îi)‹qPBke-«8ßÄÇM9ø[¨(c—h²¤$4í£IK äÏïf $ÿS3EÞÝ m¤Î±}ÛD0c(
+xÚµZ]{£6¾Ï¯ð¥ý<-’ KÇö¤É4™4v·Ûα›g0¸g&ýõ{„>äζûä" ôâóžO <òà"†<ÊýQÈ}Ä<ÌFëý•7ÚÂÜíV2×ZèÚ–ºY]ýó Gñ€£Õgk­yQ„G«ÍÇñôéiñ8¿û÷äš0o<E“kæyzt¶XN®Ã€‹ *¦o|swóã݇Ûçéӿʇ~ó˜7}œË›åÏ··‹åj¡nŸÓùÝã-ˆàɧÕýÕbe^ÛþiØ£â¿úøÉmàÞ_yˆòˆ¾Â‡0çd´¿òȨTdWË«ŸÌ‚ÖlýhŸª‹HØ£+‚G#Îi)‹qPBke-«8ßÄÇM9ø[¨(c—h²¤$4í£IK äÏïf $ÿS3EÞÝ m¤Î±)·°1c(
)kƒÏ‹}œæ’ÐÇxŸ”ŠwBBy5+òur¨Ô8èH^¼‹×i–ViRë«ó3qè!„¼ Àø‡|äi‚ £Érì¡X‰IuLK%õX¼&û—ä(ï0B4ÈÀVüKŒXRF´”Ås0₶éb0bƒ_dänÈ’}’Wq•y‡—å!Y§¿yYËÙsr&@¿ö’#oþ>Š(½@‘-5L‘‘ÒñÐá3N䆡3è~†ZØqš©Xœª4ßv8¨v‰¼°©\¾•U²ïs1Òç¼ÍÇLiÿ)>‚æ7ÛDßÇù)>¾ÕH-ÙŠpׄøˆG Z*~€O꥟ŽÅ¡(m)—^@Eäw–”ƒ;-eÜ‹s‡{9¡-òºØäÙàwùú8ÁÑXzâñ?E®([M0Æãcœ—ŸµkçË>ú|Œp
ªèf1ˆ{²¶À,@^C-·{FæBþ¿9•;yµÈþЉ픽ý&A$¢ä–”ƒ -e˜ ^ä`Âm1ÑÅ`ÂL¶ ÒWÕâõÎT:è~:%Dz›r„I@úSÑ4ßÈÄ÷U×qq=°Þ½GÃz‡¦CP½ wKÊ¡w-eô„.pA[zïbèÝ_|«’¼4 Æ$§²“ŒòE?¼€;Ow½gF¡€ùŸóŽÃô1|‰KÊA–²( 
\Ð]ì
-lðÇ"¿–EWrܧ¹®ÈŒÆe‚©£G²I¥¯ÃC$d´ßfÇø«`VØôëžêÞ^"ˆ|nÝÛRú7RF÷‘洞ÐîÏ°ûuß_&ª* lü>y“M¯UýEÐ䄼JMM’ÒEàBÂEVË»Û!„"/bØâj<nÀCüq:Ácå$”?¨©ÛÓfé»”E¡Ñx®fqY]˼o Zy?‹¿h—£-#0}Û2”_&œŒ“,ƒ\Iœ:XªôD<(›í$QQ~ÁN,)‡h)c'œz;qA[vÒÅ°¼e' i'"}—Uü’¥åN4S®˜¹z¿P;ŠÏÏC¡3âÈçAgÓh®8ô2¸L•µ#áfÈçˆr‰!KÊÁ–²r$2'´ÅP{€!Ü(û9ùý”èf,»ÇŸ…ÚÒmW'ImÙ%׫s\9äÆÔ”ðÿ7[#àKlYR¶´”f‹z^è`Ëm±ÕÅ`ËRZ?ß'jòj¨ -ÀqM†|D·kâF¶k½Á#ƃ6IÎ0×ÞÛssƒ)è7–”ƒ-e¸ œ9ÑmqÓÅàÆ¿Mr¨¯…bÃP•V"Ú…Ü_Óu"§¦Ù¶€©Ý^ÎÉ°'ib%ÜËX =>(–éæT{-éÕp!è¿].e~ót^“§<®\ËÏüN9´Tô¿ÿç}õé­ì
-¶º/ÓÃi&·hÞêß¡fÔ_¦/Å«=sß²²~e|–pu?øCœejîú*ló£ýû›<€æ©»¿Ù4ª mõÖÒwm{RßCKqšµ-5lÖFʘ5!³vB7f}†ÝoÖ-ð»|SÛ˜n+Ÿ“²È^µ¢—§Ã¡8Vgçr1ëËԃرþØ?+ò£¡zž¬Ûá†
-±ŠSzIï–”CïZÊè=¢Ô¡w´¥÷.ö€ÞmðÕNFƒ” /]xœ½•i)Źµfk ®ÕÖ\éL ®íLÐð©p’f¯M¬Šxõ%Í´Ü-ƒ‹g= P’Šàã@wFªžV‹¶êi Ó$“pŒ"^Ø#µ¥†É4RšLßs‘é„nÈ<Ãî'³^Ìí¼€y¾UÉ|\lN*²‹ÑZÁBX”disæлsùбØÅ”ÕĈç§òYèzº†11ú FŒª;òdw$^æ!.ËDGn¹9ª [œ6LjHp•IÿnÐφé0
-=|a¿Ô–rЯ¥,ú1Ô mÑßÅ ßWgU±.Ä.øÌC±él FD¥oíÕbD&&áÈMb‚;¹û}nýlŸ3C¯îs;s,“&,Ú6 3a;²}PâÚ,”G«•[ìëÞ2–Îñò_´ ¨‚™èÌÝvaI9ìBK5vá;΃Ж]t±ì¹TÖó¢8„È#ëB”õMm”F*ÊSU׉‹ÆÄÙì5,>}ñ­}ʸ Þ´#š‰È21ú ÄMŒƒsu\bZFñ÷ÃY‚©À² ¸ ¡£ùÈ
-’Xï*
-endobj
-1543 0 obj <<
-/Type /Page
-/Contents 1544 0 R
-/Resources 1542 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/Parent 1531 0 R
->> endobj
-1545 0 obj <<
-/D [1543 0 R /XYZ 85.0394 794.5015 null]
->> endobj
-1546 0 obj <<
-/D [1543 0 R /XYZ 85.0394 752.3015 null]
->> endobj
-1547 0 obj <<
-/D [1543 0 R /XYZ 85.0394 752.3015 null]
->> endobj
-1548 0 obj <<
-/D [1543 0 R /XYZ 85.0394 752.3015 null]
->> endobj
-1549 0 obj <<
-/D [1543 0 R /XYZ 85.0394 746.3107 null]
->> endobj
-1550 0 obj <<
-/D [1543 0 R /XYZ 85.0394 731.5461 null]
->> endobj
-1551 0 obj <<
-/D [1543 0 R /XYZ 85.0394 728.1497 null]
->> endobj
-1552 0 obj <<
-/D [1543 0 R /XYZ 85.0394 713.3851 null]
->> endobj
-1553 0 obj <<
-/D [1543 0 R /XYZ 85.0394 709.9887 null]
->> endobj
-1554 0 obj <<
-/D [1543 0 R /XYZ 85.0394 651.9592 null]
->> endobj
-1016 0 obj <<
-/D [1543 0 R /XYZ 85.0394 651.9592 null]
->> endobj
-1555 0 obj <<
-/D [1543 0 R /XYZ 85.0394 651.9592 null]
->> endobj
-1556 0 obj <<
-/D [1543 0 R /XYZ 85.0394 648.8377 null]
->> endobj
-1557 0 obj <<
-/D [1543 0 R /XYZ 85.0394 634.0731 null]
->> endobj
-1558 0 obj <<
-/D [1543 0 R /XYZ 85.0394 630.6767 null]
->> endobj
-1559 0 obj <<
-/D [1543 0 R /XYZ 85.0394 615.9121 null]
->> endobj
-1560 0 obj <<
-/D [1543 0 R /XYZ 85.0394 612.5156 null]
->> endobj
-1561 0 obj <<
-/D [1543 0 R /XYZ 85.0394 585.7959 null]
->> endobj
-1562 0 obj <<
-/D [1543 0 R /XYZ 85.0394 582.3994 null]
->> endobj
-1563 0 obj <<
-/D [1543 0 R /XYZ 85.0394 567.6349 null]
->> endobj
-1564 0 obj <<
-/D [1543 0 R /XYZ 85.0394 564.2384 null]
->> endobj
-1565 0 obj <<
-/D [1543 0 R /XYZ 85.0394 549.5337 null]
->> endobj
-1566 0 obj <<
-/D [1543 0 R /XYZ 85.0394 546.0774 null]
->> endobj
-1567 0 obj <<
-/D [1543 0 R /XYZ 85.0394 531.3128 null]
->> endobj
-1568 0 obj <<
-/D [1543 0 R /XYZ 85.0394 527.9163 null]
->> endobj
-1569 0 obj <<
-/D [1543 0 R /XYZ 85.0394 513.1518 null]
->> endobj
-1570 0 obj <<
-/D [1543 0 R /XYZ 85.0394 509.7553 null]
->> endobj
-1571 0 obj <<
-/D [1543 0 R /XYZ 85.0394 483.0356 null]
->> endobj
-1572 0 obj <<
-/D [1543 0 R /XYZ 85.0394 479.6391 null]
->> endobj
-1573 0 obj <<
-/D [1543 0 R /XYZ 85.0394 464.8745 null]
->> endobj
-1574 0 obj <<
-/D [1543 0 R /XYZ 85.0394 461.4781 null]
->> endobj
-1575 0 obj <<
-/D [1543 0 R /XYZ 85.0394 446.7135 null]
->> endobj
-1576 0 obj <<
-/D [1543 0 R /XYZ 85.0394 443.3171 null]
->> endobj
-1577 0 obj <<
-/D [1543 0 R /XYZ 85.0394 428.5525 null]
->> endobj
-1578 0 obj <<
-/D [1543 0 R /XYZ 85.0394 425.156 null]
->> endobj
-1579 0 obj <<
-/D [1543 0 R /XYZ 85.0394 355.0758 null]
->> endobj
-1580 0 obj <<
-/D [1543 0 R /XYZ 85.0394 355.0758 null]
->> endobj
-1581 0 obj <<
-/D [1543 0 R /XYZ 85.0394 355.0758 null]
->> endobj
-1582 0 obj <<
-/D [1543 0 R /XYZ 85.0394 352.0499 null]
->> endobj
-1583 0 obj <<
-/D [1543 0 R /XYZ 85.0394 337.3452 null]
->> endobj
-1584 0 obj <<
-/D [1543 0 R /XYZ 85.0394 333.8889 null]
->> endobj
-1585 0 obj <<
-/D [1543 0 R /XYZ 85.0394 309.8192 null]
->> endobj
-1586 0 obj <<
-/D [1543 0 R /XYZ 85.0394 303.7727 null]
->> endobj
-1587 0 obj <<
-/D [1543 0 R /XYZ 85.0394 278.3282 null]
->> endobj
-1588 0 obj <<
-/D [1543 0 R /XYZ 85.0394 273.6565 null]
->> endobj
-1589 0 obj <<
-/D [1543 0 R /XYZ 85.0394 246.9367 null]
->> endobj
-1590 0 obj <<
-/D [1543 0 R /XYZ 85.0394 243.5403 null]
->> endobj
-1591 0 obj <<
-/D [1543 0 R /XYZ 85.0394 173.5556 null]
->> endobj
-1592 0 obj <<
-/D [1543 0 R /XYZ 85.0394 173.5556 null]
->> endobj
-1593 0 obj <<
-/D [1543 0 R /XYZ 85.0394 173.5556 null]
->> endobj
-1594 0 obj <<
-/D [1543 0 R /XYZ 85.0394 170.4341 null]
->> endobj
-1595 0 obj <<
-/D [1543 0 R /XYZ 85.0394 144.9896 null]
->> endobj
-1596 0 obj <<
-/D [1543 0 R /XYZ 85.0394 140.3179 null]
->> endobj
-1597 0 obj <<
-/D [1543 0 R /XYZ 85.0394 113.5982 null]
->> endobj
-1598 0 obj <<
-/D [1543 0 R /XYZ 85.0394 110.2017 null]
->> endobj
-1599 0 obj <<
-/D [1543 0 R /XYZ 85.0394 95.4372 null]
->> endobj
-1600 0 obj <<
-/D [1543 0 R /XYZ 85.0394 92.0407 null]
->> endobj
-1542 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F47 879 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-1603 0 obj <<
-/Length 2889
-/Filter /FlateDecode
->>
-stream
-xÚµš[w›º€ßó+üh¯Õh£ ·G»‰ÛÄͱ“ž½WwˆMV0¤·Í¿?#tA`Ý笳ò ֧͌ÀþðÄõ’p⇠¹v'Ûý™3ù}WgXÊœ+¡sSêâþì÷ÔŸ„(ôˆ7¹2Æ
-xr¿û2E3Á™^,/n–Ÿ®ÖÑÝõ_³sâ:Ó¿׉Vsq³y¸ºZlîòv½ˆæËÕˆàÙ¹ï…Î4º»[¬æË?EÄGutëåb3ûzÿálq¯_ÛüiØ¡ü¿Ÿ}ùêLvð ?œ9ˆ†;ù 7ÂaH&û3æRä2JUKv¶9û—Ðè­í*ì B=Ò3WO0F¡ë’Öd¹!ò(¡õd­“²8¶‰œ‚d[vâú~3ðöš”ƒ¿’bä»
-vL+õà%ø@ïà)âL/ÑûYH¦HŒ±ø‘f8˜>LJªÀÓÙÕÿÉô6ÞÇ/E){ײ÷!ËöqžËAã|'šïf˜„jðÛbû¿&Õ!…§áý`&Ô+‹e ìãÓ¶*á=jÊ°è4DØ Cxl„°)5LXKi¾ã ¶ªnŸèî%ÜÒ-ÀÂO_m¢;µì¹p0mCèÅ ºýÐ Ì Äÿ[€”æßÄÀÄG“½—E–dY,Ÿér`Ã|ÐO±?ÂÁ²pPRšCàÛ8ØTººû9˜º#¾–ýémƒ9Á¥7}*¢mñ뵦‘”¥˜Lè¼)¶17=!±ÌAx¯¼i*;ªçD\Ì‹}œÊÎU¼—­›·²Jö=X©ƒ‘˽hƒ•b°^9Xü#-e[csÐñyæºÓôWšH‹ÓÃœkÇ £ÝÏ|6Eï:«b)WÅ<ݾ¤yYäRàCœãÛ^Þðº`°í1:fŸ†”e]()µ.ˆã˺°©6ÖEWwÿº0uú ØfJ1«ý/o¨W¿Ø¼&Ûôé­^ü¾FÎ%›%›‹')ž~¤Û¤D=Ô‰"L‰AaîŠù“WÇìñ
-jt¼G¯~c¬úqe×õ‚ÐZ ÂN{»îH`dJY¨*)M{–}ÕªÚ ÚÕÝOÕÔý ,fBò‚‹e^%‡<©Ä
-
-
-þC§)vŽ¶á‘·‘±02Š ÅØâ^-J ~m­ýô­<ÐÝ\GçX`Èl„ÈP—Â%D‹L^àJj±ªÞ£z‹uõ7®G¶Ë
- <¢8´3„†)! Ì -¥›ÞXWq/0S±¨¡þª’¼¬O*a vDMþ—Ç××âP ¡åhü‘JQ6‡F¯¯2ãcäx¡±2âN7H<qÿ\ìE¾À[/eëõ1[eëg]0‡®ešÇy%»D
- ͪ§µµiqLË2í«ÿ
-w,!0¥,””Në(¶ìZVÕ†®î~ ¦îË,.ËL‡‚ËÕy4Ÿ¯Q´Þ%úé†åw&ûZUUÒ]ž('t%w’æU=÷EQu¿Âèx¶æ(¿Ùð¹.†ìÎÁÁȱ½)eA¦¤4²€X¢I«jYWw?2S÷2ºP[/Q$ÛçÜS¦>gÚs'÷¡îaÓCž~?&Ý`ôn:®ç·Á¶e$Q@XÙ±Ô‹"îTÐ~§rÀÏ Æ¾²0„†i)¡¦lB,•j›Þ†UWq/*S±öq,P>Ž…ÜÇÍ ­®Ý ;UL\F«H\]B®î’C<ô}#/iz¤uú#Ö)5<n¦ÔÐl¤Ô¼S
-]Ô…­<Ažÿ»¶¶,Kã½úbQ+iÅþÚX;ŸÙ š–:‹‹ø÷´=“ïè˜ôþlרŠûˆÁ@ðBü
+lðÇ"¿–EWrܧ¹®ÈŒÆe‚©£G²I¥¯ÃC$d´ßfÇø«`VØôëžêÞ^"ˆ|nÝÛRú7RF÷‘洞ÐîÏ°ûuß_&ª* lü>y“M¯UýEÐ䄼JMM’ÒEàBÂEVË»Û!„"/bØâj<nÀCüq:Ácå$”?¨©ÛÓfé»”E¡Ñx®fqY]˼o Zy?‹¿h—£-#0}Û2”_&œŒ“,ƒ\Iœ:XªôD<(›í$QêÝvbI9ìDK;áÔs؉ Ú²“.ö€Øà-;H;黬â—,-w¢™rÅÌÕû…ÚQ|~
+G>:›Fsʼn wÁer¨¬ 7C>GŒK YR†´”Å#‘9¡-†ºØ ÙàFÙÏÉï§D‡4cÙ=þ,Ô–nó¸:Ijˆ,é¼^ãÊ!7ö Ö „ÿ¿Ù¢Ñ
+¼ú’æ
+Zî–Áųž„N(IEHðq ;#UO«E[õ4é’I8F/ì‘ÚRÃd)M¦ï¹ÈtB7dža÷“Ù¯ æv^À<ߪ€d>.6'ÙÅh­`!,J²´9sèݹ‰|èXìbÊ‹jbÄóSù,t=Ý Ã˜}P£?ÆGÕy²;/ó—e¢#·ÜU-N›cD¤¸Ê¤·ègÃô…¾°_jK9è×RýŽꄶèïbÐoƒ«3ŠªXb—|æ¡Øt6P#¢Ò·öj1"“pä&1ÁÜ}‚>·~¶Ï™¡W÷¹¿9–Im›…™°YŒ>(qmÊ£ÕÊ-öuoKçxù/ÚTÁLtæn»°¤v¡¥»ðçÁNhË.ºØvaƒ‹\*ëyQB䇑u!JŒú¦¶J#婪ëÄEcâÎìFöŸ¾øÖ¾ e\oÚ‰ÍDdƒ}Pâ&FˆÁ¹:.1-£ø{Œá¬€ AáT`ÙÜÐÐÑ|ä
+X9Sƒ35ø˜€´I:zÝÏ­Þsç¤Û¡8óf™9ñý>“à"~¸-Â6-Ô|P9N\¸9tû­ÁF^&ÇT•<žškZoI$Uºî«2!3ÿütÖÅ´çâ¸ö{?’ˆ<±¡þ·„†®…š4ïúìË…Û(¼ ܯpÙxÔùiù’ìâ×Td},»…®­Ö LKç„ }R[‹ÈªFïž^y5ݨYÈ°½Ž@óañEXóDý*Å1-wiKIŒ¯„—(™û4ß'©vB½fkÉ>Ü®Þ U‹Op{Të™Üþ—¿ôµvCD£hà0zŠõK‰_ÁÃî››O‚Ï_ý¿m1bªendstream
endobj
-1602 0 obj <<
+1617 0 obj <<
/Type /Page
-/Contents 1603 0 R
-/Resources 1601 0 R
+/Contents 1618 0 R
+/Resources 1616 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1531 0 R
->> endobj
-1604 0 obj <<
-/D [1602 0 R /XYZ 56.6929 794.5015 null]
->> endobj
-1605 0 obj <<
-/D [1602 0 R /XYZ 56.6929 748.5056 null]
->> endobj
-1606 0 obj <<
-/D [1602 0 R /XYZ 56.6929 748.5056 null]
->> endobj
-1607 0 obj <<
-/D [1602 0 R /XYZ 56.6929 748.5056 null]
->> endobj
-1608 0 obj <<
-/D [1602 0 R /XYZ 56.6929 743.7078 null]
->> endobj
-1609 0 obj <<
-/D [1602 0 R /XYZ 56.6929 719.6381 null]
->> endobj
-1610 0 obj <<
-/D [1602 0 R /XYZ 56.6929 711.8197 null]
->> endobj
-1611 0 obj <<
-/D [1602 0 R /XYZ 56.6929 697.0552 null]
->> endobj
-1612 0 obj <<
-/D [1602 0 R /XYZ 56.6929 691.8868 null]
->> endobj
-1613 0 obj <<
-/D [1602 0 R /XYZ 56.6929 665.1671 null]
->> endobj
-1614 0 obj <<
-/D [1602 0 R /XYZ 56.6929 659.9987 null]
->> endobj
-1615 0 obj <<
-/D [1602 0 R /XYZ 56.6929 635.929 null]
->> endobj
-1616 0 obj <<
-/D [1602 0 R /XYZ 56.6929 628.1106 null]
->> endobj
-1617 0 obj <<
-/D [1602 0 R /XYZ 56.6929 601.3909 null]
->> endobj
-1618 0 obj <<
-/D [1602 0 R /XYZ 56.6929 596.2225 null]
+/Parent 1675 0 R
>> endobj
1619 0 obj <<
-/D [1602 0 R /XYZ 56.6929 569.5028 null]
+/D [1617 0 R /XYZ 85.0394 794.5015 null]
>> endobj
1620 0 obj <<
-/D [1602 0 R /XYZ 56.6929 564.3344 null]
+/D [1617 0 R /XYZ 85.0394 752.3015 null]
>> endobj
1621 0 obj <<
-/D [1602 0 R /XYZ 56.6929 549.6297 null]
+/D [1617 0 R /XYZ 85.0394 752.3015 null]
>> endobj
1622 0 obj <<
-/D [1602 0 R /XYZ 56.6929 544.4015 null]
+/D [1617 0 R /XYZ 85.0394 752.3015 null]
>> endobj
1623 0 obj <<
-/D [1602 0 R /XYZ 56.6929 529.6968 null]
+/D [1617 0 R /XYZ 85.0394 746.3107 null]
>> endobj
1624 0 obj <<
-/D [1602 0 R /XYZ 56.6929 524.4686 null]
+/D [1617 0 R /XYZ 85.0394 731.5461 null]
>> endobj
1625 0 obj <<
-/D [1602 0 R /XYZ 56.6929 500.3989 null]
+/D [1617 0 R /XYZ 85.0394 728.1497 null]
>> endobj
1626 0 obj <<
-/D [1602 0 R /XYZ 56.6929 492.5805 null]
+/D [1617 0 R /XYZ 85.0394 713.3851 null]
>> endobj
1627 0 obj <<
-/D [1602 0 R /XYZ 56.6929 467.136 null]
+/D [1617 0 R /XYZ 85.0394 709.9887 null]
>> endobj
1628 0 obj <<
-/D [1602 0 R /XYZ 56.6929 460.6924 null]
+/D [1617 0 R /XYZ 85.0394 651.9592 null]
+>> endobj
+1056 0 obj <<
+/D [1617 0 R /XYZ 85.0394 651.9592 null]
>> endobj
1629 0 obj <<
-/D [1602 0 R /XYZ 56.6929 436.6227 null]
+/D [1617 0 R /XYZ 85.0394 651.9592 null]
>> endobj
1630 0 obj <<
-/D [1602 0 R /XYZ 56.6929 428.8043 null]
+/D [1617 0 R /XYZ 85.0394 648.8377 null]
>> endobj
1631 0 obj <<
-/D [1602 0 R /XYZ 56.6929 414.0996 null]
+/D [1617 0 R /XYZ 85.0394 634.0731 null]
>> endobj
1632 0 obj <<
-/D [1602 0 R /XYZ 56.6929 408.8714 null]
+/D [1617 0 R /XYZ 85.0394 630.6767 null]
>> endobj
1633 0 obj <<
-/D [1602 0 R /XYZ 56.6929 382.1516 null]
+/D [1617 0 R /XYZ 85.0394 615.9121 null]
>> endobj
1634 0 obj <<
-/D [1602 0 R /XYZ 56.6929 376.9833 null]
+/D [1617 0 R /XYZ 85.0394 612.5156 null]
>> endobj
1635 0 obj <<
-/D [1602 0 R /XYZ 56.6929 350.2636 null]
+/D [1617 0 R /XYZ 85.0394 585.7959 null]
>> endobj
1636 0 obj <<
-/D [1602 0 R /XYZ 56.6929 345.0952 null]
+/D [1617 0 R /XYZ 85.0394 582.3994 null]
>> endobj
1637 0 obj <<
-/D [1602 0 R /XYZ 56.6929 321.0255 null]
+/D [1617 0 R /XYZ 85.0394 567.6349 null]
>> endobj
1638 0 obj <<
-/D [1602 0 R /XYZ 56.6929 313.2071 null]
+/D [1617 0 R /XYZ 85.0394 564.2384 null]
>> endobj
1639 0 obj <<
-/D [1602 0 R /XYZ 56.6929 298.5024 null]
+/D [1617 0 R /XYZ 85.0394 549.5337 null]
>> endobj
1640 0 obj <<
-/D [1602 0 R /XYZ 56.6929 293.2742 null]
+/D [1617 0 R /XYZ 85.0394 546.0774 null]
>> endobj
1641 0 obj <<
-/D [1602 0 R /XYZ 56.6929 267.8297 null]
+/D [1617 0 R /XYZ 85.0394 531.3128 null]
>> endobj
1642 0 obj <<
-/D [1602 0 R /XYZ 56.6929 261.3861 null]
+/D [1617 0 R /XYZ 85.0394 527.9163 null]
>> endobj
1643 0 obj <<
-/D [1602 0 R /XYZ 56.6929 199.468 null]
+/D [1617 0 R /XYZ 85.0394 513.1518 null]
>> endobj
1644 0 obj <<
-/D [1602 0 R /XYZ 56.6929 199.468 null]
+/D [1617 0 R /XYZ 85.0394 509.7553 null]
>> endobj
1645 0 obj <<
-/D [1602 0 R /XYZ 56.6929 199.468 null]
+/D [1617 0 R /XYZ 85.0394 483.0356 null]
>> endobj
1646 0 obj <<
-/D [1602 0 R /XYZ 56.6929 191.7053 null]
+/D [1617 0 R /XYZ 85.0394 479.6391 null]
>> endobj
1647 0 obj <<
-/D [1602 0 R /XYZ 56.6929 176.9408 null]
+/D [1617 0 R /XYZ 85.0394 464.8745 null]
>> endobj
1648 0 obj <<
-/D [1602 0 R /XYZ 56.6929 171.7724 null]
+/D [1617 0 R /XYZ 85.0394 461.4781 null]
>> endobj
1649 0 obj <<
-/D [1602 0 R /XYZ 56.6929 157.0677 null]
+/D [1617 0 R /XYZ 85.0394 446.7135 null]
>> endobj
1650 0 obj <<
-/D [1602 0 R /XYZ 56.6929 151.8395 null]
+/D [1617 0 R /XYZ 85.0394 443.3171 null]
>> endobj
1651 0 obj <<
-/D [1602 0 R /XYZ 56.6929 137.1348 null]
+/D [1617 0 R /XYZ 85.0394 428.5525 null]
>> endobj
1652 0 obj <<
-/D [1602 0 R /XYZ 56.6929 131.9066 null]
+/D [1617 0 R /XYZ 85.0394 425.156 null]
>> endobj
1653 0 obj <<
-/D [1602 0 R /XYZ 56.6929 117.2018 null]
+/D [1617 0 R /XYZ 85.0394 355.0758 null]
>> endobj
1654 0 obj <<
-/D [1602 0 R /XYZ 56.6929 111.9736 null]
+/D [1617 0 R /XYZ 85.0394 355.0758 null]
>> endobj
1655 0 obj <<
-/D [1602 0 R /XYZ 56.6929 97.2091 null]
+/D [1617 0 R /XYZ 85.0394 355.0758 null]
>> endobj
1656 0 obj <<
-/D [1602 0 R /XYZ 56.6929 92.0407 null]
+/D [1617 0 R /XYZ 85.0394 352.0499 null]
>> endobj
-1601 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F47 879 0 R >>
-/ProcSet [ /PDF /Text ]
+1657 0 obj <<
+/D [1617 0 R /XYZ 85.0394 337.3452 null]
>> endobj
-1659 0 obj <<
-/Length 2544
-/Filter /FlateDecode
->>
-stream
-xÚ¥ZKs㸾ûWè(U€ øÈM¶l&3¶#y²IÍî–`™ŠTHʳ³¿> âA" É¦|0 4ñýu7º›ÂxS‘$˜DIàQ„éd{¸B“=ÌÝ_a)3WBsSêúùê/w$š$^úáäùÕX+öPãÉóîÛtñôtû°\ýs6÷)š.¼Ùœ"¤Fon7³y&|‚ð©M¯WןW÷ëÅÓlj‡~E-–âfóõþþvó|+o×·‹åêáDðì·çOW·ÏúµÍ­aDø;ÿçêÛoh²ƒ~ºBIb:ù7ÈÃIâOW% Q#ùÕæêïzAc¶}tLU”ÄýhDW>ž`ì%”ú=eÑÄ ‰OZe-6b[GV¥MVµuWÃ[\ Kˈ cd Žþm}wŠ"¿ 11E^œÀû;@µÌ50MSêÅ¡&ì²<¤Y!öîY‘Õ l¾¬j1Vvºhï÷§lÇ<þŽƒ-ázAÆðB|ÝBü‹'þ.Xsjâ¡|g‡V‰;œÄ‘gU6çKr¨Ûr(\Ii•S9Tî‚6”>Ķ¨Ý¿)‡R*^[Þ2mRqu—åL\ݔůùû“àA ÞVÕ ÇSNÓ Ì HŸŠ§ö“©äãš±ªa‡TÎ=n›Ò #!V2ÂúªL);ZJ“‘`ßN†º#ã {œŒø(: ¤¹ôb÷g)ñ1õÂ8öû”,ieúÆ{©fñô”V?4#¡‘vNQ|CÊÁˆ’RŒø##.hƒ‘!¶…üLù7UÖ°*“îñZJc]—e##Jz³aÕ;«êÑ(Åà‚qØçáZòð%-Š¬ØØî9Î?f”N³ß3fñO 0Âhê„,I!M’I\ƒ£°…"ùk-Õ]¾g‘giÍêS¬ù^Vÿî(ʶlœ£0ö"?ÆO’é!Ëåtš¤µœþ…ûQ•íß A‘‚ì%sŸ$¥WÌ߃V¸*Àæ
-i‡ÙL‚™‡&7;kž@£Ä‹¾)˜RvÖµ”¦=ö©v'tÇûö8ñ=ðì< §Ï3Œ10°Ï[½„(ßGSöò×ÙœþtUקÖ
-`¦µxf…ã‡âR+¦[%òñHQ
-ͳpUÉç[BX#îŽ"â6å¶ÌÇ¢.ñ¡Ä<`µ¸ëj¤uk“¹–Ÿ Ó†¾L3Ø¢2ÃTÆd!dõuD^FhK!E: G@vᜀ-”È?1’ÐŽCHGh‡Å.ŽÇ<ÛêôFx5±Z>,TÉ0<& `&„ÁC]
-/¦”O-ÕñIÉ£ºãó {œÏøB÷FßYѵEï”Kɬ`à|*û㽜ÚÑ]9+áU}ŒÖÛtÙî&6Fãà/ƒ)¤Sz9j8®AÊ
-§ý©n4‰•%ˆtÓ`ÙYPBÝ'©ÈQG»p;†Àã˜ÈÂÉb §áY…Hvà¾)ù³¸†A•áÊ8åÀ~/öê»~¬¼VY³âÄ-}¼'`(ŠÌ¦Gœºâ>]ݲòÜ”öÜêF}î<eÆï4>òŸùüÄÓ
-2jëHøÿûYF2òHlë¹B¦žDê¥øæ:|sýË­óWÿ/ÿ÷Ãendstream
-endobj
1658 0 obj <<
-/Type /Page
-/Contents 1659 0 R
-/Resources 1657 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/Parent 1531 0 R
+/D [1617 0 R /XYZ 85.0394 333.8889 null]
+>> endobj
+1659 0 obj <<
+/D [1617 0 R /XYZ 85.0394 309.8192 null]
>> endobj
1660 0 obj <<
-/D [1658 0 R /XYZ 85.0394 794.5015 null]
+/D [1617 0 R /XYZ 85.0394 303.7727 null]
>> endobj
1661 0 obj <<
-/D [1658 0 R /XYZ 85.0394 748.4854 null]
+/D [1617 0 R /XYZ 85.0394 278.3282 null]
>> endobj
1662 0 obj <<
-/D [1658 0 R /XYZ 85.0394 748.4854 null]
+/D [1617 0 R /XYZ 85.0394 273.6565 null]
>> endobj
1663 0 obj <<
-/D [1658 0 R /XYZ 85.0394 748.4854 null]
+/D [1617 0 R /XYZ 85.0394 246.9367 null]
>> endobj
1664 0 obj <<
-/D [1658 0 R /XYZ 85.0394 743.3452 null]
+/D [1617 0 R /XYZ 85.0394 243.5403 null]
>> endobj
1665 0 obj <<
-/D [1658 0 R /XYZ 85.0394 728.6405 null]
+/D [1617 0 R /XYZ 85.0394 173.5556 null]
>> endobj
1666 0 obj <<
-/D [1658 0 R /XYZ 85.0394 723.1655 null]
+/D [1617 0 R /XYZ 85.0394 173.5556 null]
>> endobj
1667 0 obj <<
-/D [1658 0 R /XYZ 85.0394 708.4607 null]
+/D [1617 0 R /XYZ 85.0394 173.5556 null]
>> endobj
1668 0 obj <<
-/D [1658 0 R /XYZ 85.0394 702.9857 null]
+/D [1617 0 R /XYZ 85.0394 170.4341 null]
>> endobj
1669 0 obj <<
-/D [1658 0 R /XYZ 85.0394 688.2211 null]
+/D [1617 0 R /XYZ 85.0394 144.9896 null]
>> endobj
1670 0 obj <<
-/D [1658 0 R /XYZ 85.0394 682.8059 null]
+/D [1617 0 R /XYZ 85.0394 140.3179 null]
>> endobj
1671 0 obj <<
-/D [1658 0 R /XYZ 85.0394 668.0414 null]
+/D [1617 0 R /XYZ 85.0394 113.5982 null]
>> endobj
1672 0 obj <<
-/D [1658 0 R /XYZ 85.0394 662.6262 null]
+/D [1617 0 R /XYZ 85.0394 110.2017 null]
>> endobj
1673 0 obj <<
-/D [1658 0 R /XYZ 85.0394 599.7666 null]
+/D [1617 0 R /XYZ 85.0394 95.4372 null]
>> endobj
1674 0 obj <<
-/D [1658 0 R /XYZ 85.0394 599.7666 null]
->> endobj
-1675 0 obj <<
-/D [1658 0 R /XYZ 85.0394 599.7666 null]
->> endobj
-1676 0 obj <<
-/D [1658 0 R /XYZ 85.0394 591.7571 null]
+/D [1617 0 R /XYZ 85.0394 92.0407 null]
>> endobj
-1677 0 obj <<
-/D [1658 0 R /XYZ 85.0394 565.0374 null]
+1616 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R >>
+/ProcSet [ /PDF /Text ]
>> endobj
1678 0 obj <<
-/D [1658 0 R /XYZ 85.0394 559.6222 null]
+/Length 2889
+/Filter /FlateDecode
+>>
+stream
+xÚµšMsÛ8†ïþ:JU1†
+<
+}w„°i5LX[iÂã¶J7„O´{ ·´Xøé«M|§–=w¦í½˜A;ˆ‚ÈÀ öHü¿HiþM|˜øh²÷²ÈX–%òž.w˜C
+†•…‚²Ò`¯·P°IºÚýLíù&?ýã⯲s¬Ø,¯dSšwç]ù?ý
+?â7?Òù1Щsàží’º(
+ü6¡¹$´HÊ*K^˜l¦µ£ïÞ©s±ðûgM,&†af0 †•…˜²2ˆb6iƒXW»Ÿ˜©½ÞÄÜÎ=ØYEXž(E_q@ü¿Ø&ÁFQã‚Z}ƒ¤Æ¯G¨ù
+\'4v¹@`ã£Ø\ÇÄÆ?5ØÄaFÔÊ'­0ÝÐA>Lº¦i5 S[0-»Uºy¢Ý ³¥½©ŠC½KáˆN/ÙAlapød%osk†¼¯fÈCÞ(ò+Å[Œ0$aH;†ü~Îßkºžã)†Â¦^aüâ“4¾:îöG8ÔÊùŴ‰´ÿÄs]8Ç4 #° + leeÀŽ,°mÒì®v?lS›ÃNÄ>ŠsÁÙô©>µœ_³º2#zas,E*[dè ÐéС7[
+id„ý4¦Õ0m¥Ñ¡¥
+°I+ «Ý¿Lí{Ôu]î‹5e×¥ÓøX=ö[½‰®»"ååÑÇ¡®â»ûµðOÞ_3æ}í¬“wÉä¤?ÈúžÛð†hÁSÃú.•®‘Wä‘ÊïlEÕ {…ø¡Ó;G
+ÛðÈ‘·±±06Š ÅØ^-¢¿¶j?½F•t7×ñ90d6BäQ—Â-D‹L^àJj±ªÞ£z‹uõ7®G¶Ëx8›c°ˆ¿¤uæåE\#þò‚tò&™ª1ZP"¦}Ä Ç‘…£4j@KÝΦkì÷£4„ã&]ÉøZ?$üÑ`'¿¿IËJ¦ž"ö:íbo¸ùáé+‡²w7Jcðì··T#ôB^UlŸOj4V`qÅ‘˜a4 Li`^d) Øt`]á^`¦°¨¡†p"üU±¼¬ŸTÂ숚*ü/¯¯Å¡FË;ÑøƒJQ6‡F¿¯2`äø‘±ºÄ›n¸ãþ¹Ø‹|·^ÊÖëc
+¾šÈÖϺ`]Ë4OòJv‰šU N«µƒiqLË2í«ÿ
+ŒÛÏiueK×±ôƒƒæÏBŽãŒÄaÓj˜¹¶jÞLpð0s«tÃüD»—yK[ÏÇ"ß»ø+Vý,/MÓ­ ~‚é;üd'DÄñCK˜ýl~h½u Äë!ÍTò'/Ø‹PˆÇª¦•…’²j(ÙöK«´A©«ÝOÉÔ^³ïÇTìq{–«íPo‘Í#/þéºÐ湚»×,Ý…ô¦¬+#wŸ[<¹ÂùÅ!Ù±r¹
+…º#õ:ÓÊEYi(^ds›´¥«ÝÅÔOï7ÕḭD˜d™7žmôl‘‡ü€ºíÉÿ ã
+.Wçñ|¾FñZD—øw¦~TЙìkUUIw9SAèJ6î$Í«z꾅щlÍ£ü~dÃÏu1dwGÛ›VdÊJ# ‰å4i•6uµû‘™ÚËøBm¼DÁ¶Ï9„§L½Î´ç1NîC݇MyúýȺ‡ лéz~ÐÛ–±DÇÊŽ§^I§‚ö;•“~f8ö–…a4LK5eb©TÛtV]á^T¦°Žqn¨bœñ7ƒ´ºsnÔ©b‚å2^Åâêr…tÇÉÐû¼¤é“ÖÓ?±N©áv3¥†f#¥æÒè¢.lå¹x òüßµ·eYšìÕ‹Z¤uö×ÎÚyÍnð i©³xˆ¿OÛ3ùŽ>“þϯíUñ
+endobj
+1677 0 obj <<
+/Type /Page
+/Contents 1678 0 R
+/Resources 1676 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1675 0 R
>> endobj
1679 0 obj <<
-/D [1658 0 R /XYZ 85.0394 534.1777 null]
+/D [1677 0 R /XYZ 56.6929 794.5015 null]
>> endobj
1680 0 obj <<
-/D [1658 0 R /XYZ 85.0394 527.4872 null]
+/D [1677 0 R /XYZ 56.6929 748.5056 null]
>> endobj
1681 0 obj <<
-/D [1658 0 R /XYZ 85.0394 502.0427 null]
+/D [1677 0 R /XYZ 56.6929 748.5056 null]
>> endobj
1682 0 obj <<
-/D [1658 0 R /XYZ 85.0394 495.3523 null]
+/D [1677 0 R /XYZ 56.6929 748.5056 null]
>> endobj
1683 0 obj <<
-/D [1658 0 R /XYZ 85.0394 420.5376 null]
+/D [1677 0 R /XYZ 56.6929 743.7078 null]
>> endobj
1684 0 obj <<
-/D [1658 0 R /XYZ 85.0394 420.5376 null]
+/D [1677 0 R /XYZ 56.6929 719.6381 null]
>> endobj
1685 0 obj <<
-/D [1658 0 R /XYZ 85.0394 420.5376 null]
+/D [1677 0 R /XYZ 56.6929 711.8197 null]
>> endobj
1686 0 obj <<
-/D [1658 0 R /XYZ 85.0394 412.5281 null]
+/D [1677 0 R /XYZ 56.6929 697.0552 null]
>> endobj
1687 0 obj <<
-/D [1658 0 R /XYZ 85.0394 388.4584 null]
+/D [1677 0 R /XYZ 56.6929 691.8868 null]
>> endobj
1688 0 obj <<
-/D [1658 0 R /XYZ 85.0394 380.3932 null]
+/D [1677 0 R /XYZ 56.6929 665.1671 null]
>> endobj
1689 0 obj <<
-/D [1658 0 R /XYZ 85.0394 365.6884 null]
+/D [1677 0 R /XYZ 56.6929 659.9987 null]
>> endobj
1690 0 obj <<
-/D [1658 0 R /XYZ 85.0394 360.2134 null]
+/D [1677 0 R /XYZ 56.6929 635.929 null]
>> endobj
1691 0 obj <<
-/D [1658 0 R /XYZ 85.0394 345.4488 null]
+/D [1677 0 R /XYZ 56.6929 628.1106 null]
>> endobj
1692 0 obj <<
-/D [1658 0 R /XYZ 85.0394 340.0336 null]
+/D [1677 0 R /XYZ 56.6929 601.3909 null]
>> endobj
1693 0 obj <<
-/D [1658 0 R /XYZ 85.0394 325.269 null]
+/D [1677 0 R /XYZ 56.6929 596.2225 null]
>> endobj
1694 0 obj <<
-/D [1658 0 R /XYZ 85.0394 319.8539 null]
+/D [1677 0 R /XYZ 56.6929 569.5028 null]
>> endobj
1695 0 obj <<
-/D [1658 0 R /XYZ 85.0394 295.7842 null]
+/D [1677 0 R /XYZ 56.6929 564.3344 null]
>> endobj
1696 0 obj <<
-/D [1658 0 R /XYZ 85.0394 287.7189 null]
+/D [1677 0 R /XYZ 56.6929 549.6297 null]
>> endobj
1697 0 obj <<
-/D [1658 0 R /XYZ 85.0394 272.9543 null]
+/D [1677 0 R /XYZ 56.6929 544.4015 null]
>> endobj
1698 0 obj <<
-/D [1658 0 R /XYZ 85.0394 267.5392 null]
+/D [1677 0 R /XYZ 56.6929 529.6968 null]
>> endobj
1699 0 obj <<
-/D [1658 0 R /XYZ 85.0394 252.7746 null]
+/D [1677 0 R /XYZ 56.6929 524.4686 null]
>> endobj
1700 0 obj <<
-/D [1658 0 R /XYZ 85.0394 247.3594 null]
+/D [1677 0 R /XYZ 56.6929 500.3989 null]
>> endobj
1701 0 obj <<
-/D [1658 0 R /XYZ 85.0394 223.2897 null]
+/D [1677 0 R /XYZ 56.6929 492.5805 null]
>> endobj
1702 0 obj <<
-/D [1658 0 R /XYZ 85.0394 215.2245 null]
+/D [1677 0 R /XYZ 56.6929 467.136 null]
>> endobj
1703 0 obj <<
-/D [1658 0 R /XYZ 85.0394 149.4956 null]
+/D [1677 0 R /XYZ 56.6929 460.6924 null]
>> endobj
1704 0 obj <<
-/D [1658 0 R /XYZ 85.0394 149.4956 null]
+/D [1677 0 R /XYZ 56.6929 436.6227 null]
>> endobj
1705 0 obj <<
-/D [1658 0 R /XYZ 85.0394 149.4956 null]
+/D [1677 0 R /XYZ 56.6929 428.8043 null]
>> endobj
1706 0 obj <<
-/D [1658 0 R /XYZ 85.0394 144.3554 null]
+/D [1677 0 R /XYZ 56.6929 414.0996 null]
>> endobj
1707 0 obj <<
-/D [1658 0 R /XYZ 85.0394 120.2857 null]
+/D [1677 0 R /XYZ 56.6929 408.8714 null]
>> endobj
1708 0 obj <<
-/D [1658 0 R /XYZ 85.0394 112.2205 null]
+/D [1677 0 R /XYZ 56.6929 382.1516 null]
>> endobj
1709 0 obj <<
-/D [1658 0 R /XYZ 85.0394 97.4559 null]
+/D [1677 0 R /XYZ 56.6929 376.9833 null]
>> endobj
1710 0 obj <<
-/D [1658 0 R /XYZ 85.0394 92.0407 null]
+/D [1677 0 R /XYZ 56.6929 350.2636 null]
>> endobj
-1657 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F47 879 0 R >>
-/ProcSet [ /PDF /Text ]
+1711 0 obj <<
+/D [1677 0 R /XYZ 56.6929 345.0952 null]
>> endobj
-1713 0 obj <<
-/Length 2122
-/Filter /FlateDecode
->>
-stream
-xÚ¥YKs㸾ûWèª*Bðà37ÙÒ8žñÚŽå­d33š‚%–)R+RžÑþú4Ð J$µ•”n ?ôQø±‘ç?âÑ(ˆ\âQæ’Í­`ìöŠžIÍ4±¹®_®þöI£ˆD>÷G/o–¬Ð0d£—åWgJƒê\ß]ßß=Þ>OŸþñÛxÂ=ê|£>Ì°³øõöv¾x™›îó|:»{¸6ž~DéÓÓüav÷oŸ*©´¡ÞÌãï/Ÿ¯æ/Ͳí­1*Ôš¿úúŽ–°ÃÏW”ˆ(ôF? C ‹">Ú\¹ž ž+DMÉ®WÿlZ£zj§©%\ø¼ÃVœ#‘çñ–±¼ˆø‚ m¬ÇײÈd%—¸ÇÙÃÂØF&û]ZŒi>Ý”½›.4htG‹ ×&ºp¬¹ÔÒ¾‚VN}ïû©fÆ9XÅ †U7\çº]û 1mݳb§ùxârê<Ä©ZÌYÊJnz4™ÿ¬d^¦E®Ít²;R„ëR²ÿ
-S|á̈™—U¿Ë1Ã×»1 %ê‰sÓ¸1ü_âýÛ&ΔÏq¾w¥¶\+š4°ƒ>8WéEº$Ä£:
-‰"ïÀà—Xw“uƒCÔƒ’Hò’Í5€CÍUã ( pRmápª»[wƒCƒƒjÕ8èvƒƒ'!,æ7˜5GºÊÓ|…é¾Zšÿ'î3HW‘î8w® Nü×8âŽÌ2T:Šqá<ró*wÆêù­(Æ)¥ý˜‰ˆP7º„™Å5€YÍuÄ,¢˜ ©¶0;ÕÝ™­»'7.‚Ý›,Þ¥ß(åI\5ÄúûŸ"¯]®Š«}—Sqð°íUsãU÷òGZv;
-p¹™Ll«ežúï…ÔƒÈyx¡Î³¹ú!m¸H}o
-ÌWP%ºQ…A=-Í@Rà:Mb;4ظýØp¸` ØX\ØÔ\6—¥AÕ6§º»±±u7õ¹[×…ªÕÔçÐÖL5LI}ãE@;ñ"M1^df/B±öå úó¼Ú°ùT¤yuœµ˜?§}ÊâUÎ.»|±ZÇĆڊ‰µs~)²w¼;«ÞgC]$ëìPµŽ„Ž¾}…u£<1PÈ/¼t“°¹úOLÃÕœ˜p¨T}<1gº;OLKwOUzzaÐ>ù³BëB®øZ\ϳéØóœå™S$}*v›¸3ú°ò»mçÀqº_íËê«Ó‡±‰€á2ª!áA¹Gýæ‘' .Î]rsi$Ívñ[ÕULSHÊ.Dæj ֬ЫgA ¾»Yi¬
-ë˜èÊÿ€\åºØg†ªµªÆ«ÄïïûßUQg5 %©!¹Ú>Zcn„½©SŸ!Ñƺû<3þ$)6“.|¶qžjéŒ:¯ü≀Æ2-“,N7:‡ê¸jX óñBçç®:s%võrá‹(+d-K¢øpuüa„ÄøÉÒ7YÂò°§O+|Ëô'66E^­Í\8ïõ¬S¸lvlԬسW ¥´^²“©¶~Ö3¯f*IM=ëÇŒ²38Ðó  LPxuµbá¥ÂÎk±7±âúîav”ëB±ê7r)‰X}y“;åF½Ïì<„RïÂõËæ:O&° lâ(LgÖŸGµóÈ™ÚÎ<ÒÒŠy„zÆ­¨o[Ê^´5Vć9Oñ>ÃIÓ .\œHºSá¤É»ŽпO÷j"s¡âÜvéj­“ˈ!lÀ Õß+Ô¼ '¸ˆàÇ%L8 üöiñ}£ÌëºpØbXWŸ,ŠB\ÛB¾ÆeUl M ÈÞLÿŽ#y†‚43OøÜSºN®tM52…kE’ÂY.{‹8¬ê£¼hs¬ÿïÿ¥¬ê% "컊p°¯‚³(µ—È?[yýÖùÒÿ š¸¥endstream
-endobj
1712 0 obj <<
-/Type /Page
-/Contents 1713 0 R
-/Resources 1711 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/Parent 1531 0 R
+/D [1677 0 R /XYZ 56.6929 321.0255 null]
+>> endobj
+1713 0 obj <<
+/D [1677 0 R /XYZ 56.6929 313.2071 null]
>> endobj
1714 0 obj <<
-/D [1712 0 R /XYZ 56.6929 794.5015 null]
+/D [1677 0 R /XYZ 56.6929 298.5024 null]
>> endobj
1715 0 obj <<
-/D [1712 0 R /XYZ 56.6929 749.4437 null]
+/D [1677 0 R /XYZ 56.6929 293.2742 null]
>> endobj
1716 0 obj <<
-/D [1712 0 R /XYZ 56.6929 749.4437 null]
+/D [1677 0 R /XYZ 56.6929 267.8297 null]
>> endobj
1717 0 obj <<
-/D [1712 0 R /XYZ 56.6929 749.4437 null]
+/D [1677 0 R /XYZ 56.6929 261.3861 null]
>> endobj
1718 0 obj <<
-/D [1712 0 R /XYZ 56.6929 746.6461 null]
+/D [1677 0 R /XYZ 56.6929 199.468 null]
>> endobj
1719 0 obj <<
-/D [1712 0 R /XYZ 56.6929 722.5763 null]
+/D [1677 0 R /XYZ 56.6929 199.468 null]
>> endobj
1720 0 obj <<
-/D [1712 0 R /XYZ 56.6929 716.7581 null]
+/D [1677 0 R /XYZ 56.6929 199.468 null]
>> endobj
1721 0 obj <<
-/D [1712 0 R /XYZ 56.6929 701.9936 null]
+/D [1677 0 R /XYZ 56.6929 191.7053 null]
>> endobj
1722 0 obj <<
-/D [1712 0 R /XYZ 56.6929 698.8254 null]
+/D [1677 0 R /XYZ 56.6929 176.9408 null]
>> endobj
1723 0 obj <<
-/D [1712 0 R /XYZ 56.6929 684.1207 null]
+/D [1677 0 R /XYZ 56.6929 171.7724 null]
>> endobj
1724 0 obj <<
-/D [1712 0 R /XYZ 56.6929 680.8926 null]
+/D [1677 0 R /XYZ 56.6929 157.0677 null]
>> endobj
1725 0 obj <<
-/D [1712 0 R /XYZ 56.6929 656.8229 null]
+/D [1677 0 R /XYZ 56.6929 151.8395 null]
>> endobj
1726 0 obj <<
-/D [1712 0 R /XYZ 56.6929 651.0047 null]
+/D [1677 0 R /XYZ 56.6929 137.1348 null]
>> endobj
1727 0 obj <<
-/D [1712 0 R /XYZ 56.6929 636.3 null]
+/D [1677 0 R /XYZ 56.6929 131.9066 null]
>> endobj
1728 0 obj <<
-/D [1712 0 R /XYZ 56.6929 633.072 null]
+/D [1677 0 R /XYZ 56.6929 117.2018 null]
>> endobj
1729 0 obj <<
-/D [1712 0 R /XYZ 56.6929 609.0023 null]
+/D [1677 0 R /XYZ 56.6929 111.9736 null]
>> endobj
1730 0 obj <<
-/D [1712 0 R /XYZ 56.6929 603.184 null]
+/D [1677 0 R /XYZ 56.6929 97.2091 null]
>> endobj
1731 0 obj <<
-/D [1712 0 R /XYZ 56.6929 579.1143 null]
+/D [1677 0 R /XYZ 56.6929 92.0407 null]
>> endobj
-1732 0 obj <<
-/D [1712 0 R /XYZ 56.6929 573.2961 null]
->> endobj
-1733 0 obj <<
-/D [1712 0 R /XYZ 56.6929 558.5914 null]
+1676 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R >>
+/ProcSet [ /PDF /Text ]
>> endobj
1734 0 obj <<
-/D [1712 0 R /XYZ 56.6929 555.3634 null]
+/Length 2545
+/Filter /FlateDecode
+>>
+stream
+xÚ¥ZKs㸾ûWè(U€ øÈM¶l&3¶#y²IÍî–`™ŠTHʳ³¿> âA" É¦|0 4ñýu7º›ÂxS‘$˜DIàQ„éd{¸B“=ÌÝ_a)3WBsSêúùê/w$š$^úáäùÕX+öPãÉóîÛtñôtû°\ýs6÷)š.¼Ùœ"¤Fon7³y&|‚ð©M¯WןW÷ëÅÓlj‡~E-–âfóõþþvó|+o×·‹åêáDðì·çOW·ÏúµÍ­aDø;ÿçêÛoh²ƒ~ºBIb:ù7ÈÃIâOW% Q#ùÕæêïzAc¶}tLU”ÄýhDW>ž`ì%”ú=eÑÄ ‰OZe-6b[GV¥MVµuWÃ[\ Kˈ cd Žþm}wŠ"¿ 11E^œÀû;@µÌ.;TL©G„š°Ëòf…Øwº;dEV7°ù²ªÅXÙ颽ߟ²óø;¶„Cêqà ñu?ñ/žøÿ¹l`ÍY¨‰‡ò^X%îpGžUÙ@œ/mÈ¡nCÊ¡p%¥UNIäP¹ ÚPúÛ¢vü¦<J©xmyË´IÅÕ]–3quS¿"äïO‚1x[U3O9M#T€2ƒ0 }*žfØO¦’kƪ†R9÷¸mJƒŒ„XÉ èB¨2¥ìdh)MF‚};N莌3ìq2zà£dè0æÒ?ŠÝŸ¥ÄÇÔ ãØïS²Tl¤•éw쥚ÅÓSZýÐŒ„vF"Ø9EñF )#JJ1â#ŒŒ¸  F†ØFLð3åßTYêLºÇk)u]–Œ(éAz̆UשׁG£Tƒ ÆaŸ‡kÉ×´(²b?`»ç8ÿ˜Q:Í~ϘÅs<>Â_ ©r°$…4I>N$9p ŽÀŠ 䯵Twù:pœEž¥5«L=°æ{Yý»£(Û²qŽÂØ‹ü ?I>¦‡,o”Ói’ÖrúîGU¶k,E
+²—Ì}’x”B^1|^DXáª
+D}`k0ùzH‹v:–<ó÷‘<k˜¹mP7,ÏKÍt ²}Ó|Û³"
+Ç;%þ…ànJ9WRåØA¹ Úà|ˆm!ÝçŒ
+cGðiJîú즩ÀÔ–'<1â©+kc?Ÿ‰£|^™Ñqthq'¶éÃ
+;Æù2ãb­–p>óE®é~§Åö5‚ð &PA]:ÍM);áZÊ Ü‘;¡;ÂÏ°Ç ï?ŠÛrÇx
+d¦ÎG7?€…ƒéD)'x·€1·¨^²¦jë!1[i„E7/§Æ<"™U5yªÈWY—5+^ÒÓAŽó£]F ñT/X8«b)k@.”`†E%¤IŒ°£%äÂí8Sh"K.xVÕOâ»N{9í÷œ…‘Áfâa¯<o –PZº@I`Wq
+O¶y)ÒÙÑÖkÚ'áQ· šžöo")3}{” 6_('L)JJAGé„6ˆb[ˆ0Áõ‰ê€_ŠÜ .nÊÃ1-~tâjÍ Þ³w o„‚Ä÷‚Øìî„L?yâɿ嬀“©õµ{ð™_8;eþ*Яp/ç¡þ«_~´AQ>® 9<-b+Ÿ~D½(¼t\˜Rv>µTÇ'u$NèŽÏ3ìq>{à Ý}gE×½S.%³‚ó©ì÷rjGwå¬P„Wõ1þYoÓe»›Øƒ ¼tBZ¤NéQä¨á\¸)` 'òšA5FØÖÈ™-¢¹"Nô:Q•:¢ þ0lyCB»/ÁóêAÓ¯%k”"J¼8 ù÷'IQ猣oHÀ±&B½
+e'´AñÛB± ~úØúœ¾0U3gg'íhM![ –z" ’ñÏ`7UúýUôHv*œö§ºÑ<$V ” ÒMƒ!dgA uŸ¤"GíÂí8S`" '‹1œ†g"Ùû¦äÿÍâeT†+ã<”û½Ø«ïú±ò
+XeÍŠ·ôñ"œ€M (2›q"èŠûtuËÊsS>Øs«õ¹ó”¿ÓøtÊæóO+Ȩ­#àÿïdýÉÈ#±­çBP™z©—â›K’á›ë_n¿ú %÷Üendstream
+endobj
+1733 0 obj <<
+/Type /Page
+/Contents 1734 0 R
+/Resources 1732 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1675 0 R
>> endobj
1735 0 obj <<
-/D [1712 0 R /XYZ 56.6929 540.5988 null]
+/D [1733 0 R /XYZ 85.0394 794.5015 null]
>> endobj
1736 0 obj <<
-/D [1712 0 R /XYZ 56.6929 537.4306 null]
+/D [1733 0 R /XYZ 85.0394 748.4854 null]
>> endobj
1737 0 obj <<
-/D [1712 0 R /XYZ 56.6929 510.7109 null]
+/D [1733 0 R /XYZ 85.0394 748.4854 null]
>> endobj
1738 0 obj <<
-/D [1712 0 R /XYZ 56.6929 507.5427 null]
->> endobj
-598 0 obj <<
-/D [1712 0 R /XYZ 56.6929 477.5928 null]
+/D [1733 0 R /XYZ 85.0394 748.4854 null]
>> endobj
1739 0 obj <<
-/D [1712 0 R /XYZ 56.6929 453.2532 null]
->> endobj
-602 0 obj <<
-/D [1712 0 R /XYZ 56.6929 369.7201 null]
+/D [1733 0 R /XYZ 85.0394 743.3452 null]
>> endobj
1740 0 obj <<
-/D [1712 0 R /XYZ 56.6929 345.3805 null]
+/D [1733 0 R /XYZ 85.0394 728.6405 null]
>> endobj
1741 0 obj <<
-/D [1712 0 R /XYZ 56.6929 310.6805 null]
+/D [1733 0 R /XYZ 85.0394 723.1655 null]
>> endobj
1742 0 obj <<
-/D [1712 0 R /XYZ 56.6929 310.6805 null]
+/D [1733 0 R /XYZ 85.0394 708.4607 null]
>> endobj
1743 0 obj <<
-/D [1712 0 R /XYZ 56.6929 310.6805 null]
+/D [1733 0 R /XYZ 85.0394 702.9857 null]
>> endobj
1744 0 obj <<
-/D [1712 0 R /XYZ 56.6929 310.6805 null]
+/D [1733 0 R /XYZ 85.0394 688.2211 null]
>> endobj
-1711 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F47 879 0 R /F14 685 0 R >>
-/ProcSet [ /PDF /Text ]
+1745 0 obj <<
+/D [1733 0 R /XYZ 85.0394 682.8059 null]
+>> endobj
+1746 0 obj <<
+/D [1733 0 R /XYZ 85.0394 668.0414 null]
>> endobj
1747 0 obj <<
-/Length 1917
+/D [1733 0 R /XYZ 85.0394 662.6262 null]
+>> endobj
+1748 0 obj <<
+/D [1733 0 R /XYZ 85.0394 599.7666 null]
+>> endobj
+1749 0 obj <<
+/D [1733 0 R /XYZ 85.0394 599.7666 null]
+>> endobj
+1750 0 obj <<
+/D [1733 0 R /XYZ 85.0394 599.7666 null]
+>> endobj
+1751 0 obj <<
+/D [1733 0 R /XYZ 85.0394 591.7571 null]
+>> endobj
+1752 0 obj <<
+/D [1733 0 R /XYZ 85.0394 565.0374 null]
+>> endobj
+1753 0 obj <<
+/D [1733 0 R /XYZ 85.0394 559.6222 null]
+>> endobj
+1754 0 obj <<
+/D [1733 0 R /XYZ 85.0394 534.1777 null]
+>> endobj
+1755 0 obj <<
+/D [1733 0 R /XYZ 85.0394 527.4872 null]
+>> endobj
+1756 0 obj <<
+/D [1733 0 R /XYZ 85.0394 502.0427 null]
+>> endobj
+1757 0 obj <<
+/D [1733 0 R /XYZ 85.0394 495.3523 null]
+>> endobj
+1758 0 obj <<
+/D [1733 0 R /XYZ 85.0394 420.5376 null]
+>> endobj
+1759 0 obj <<
+/D [1733 0 R /XYZ 85.0394 420.5376 null]
+>> endobj
+1760 0 obj <<
+/D [1733 0 R /XYZ 85.0394 420.5376 null]
+>> endobj
+1761 0 obj <<
+/D [1733 0 R /XYZ 85.0394 412.5281 null]
+>> endobj
+1762 0 obj <<
+/D [1733 0 R /XYZ 85.0394 388.4584 null]
+>> endobj
+1763 0 obj <<
+/D [1733 0 R /XYZ 85.0394 380.3932 null]
+>> endobj
+1764 0 obj <<
+/D [1733 0 R /XYZ 85.0394 365.6884 null]
+>> endobj
+1765 0 obj <<
+/D [1733 0 R /XYZ 85.0394 360.2134 null]
+>> endobj
+1766 0 obj <<
+/D [1733 0 R /XYZ 85.0394 345.4488 null]
+>> endobj
+1767 0 obj <<
+/D [1733 0 R /XYZ 85.0394 340.0336 null]
+>> endobj
+1768 0 obj <<
+/D [1733 0 R /XYZ 85.0394 325.269 null]
+>> endobj
+1769 0 obj <<
+/D [1733 0 R /XYZ 85.0394 319.8539 null]
+>> endobj
+1770 0 obj <<
+/D [1733 0 R /XYZ 85.0394 295.7842 null]
+>> endobj
+1771 0 obj <<
+/D [1733 0 R /XYZ 85.0394 287.7189 null]
+>> endobj
+1772 0 obj <<
+/D [1733 0 R /XYZ 85.0394 272.9543 null]
+>> endobj
+1773 0 obj <<
+/D [1733 0 R /XYZ 85.0394 267.5392 null]
+>> endobj
+1774 0 obj <<
+/D [1733 0 R /XYZ 85.0394 252.7746 null]
+>> endobj
+1775 0 obj <<
+/D [1733 0 R /XYZ 85.0394 247.3594 null]
+>> endobj
+1776 0 obj <<
+/D [1733 0 R /XYZ 85.0394 223.2897 null]
+>> endobj
+1777 0 obj <<
+/D [1733 0 R /XYZ 85.0394 215.2245 null]
+>> endobj
+1778 0 obj <<
+/D [1733 0 R /XYZ 85.0394 149.4956 null]
+>> endobj
+1779 0 obj <<
+/D [1733 0 R /XYZ 85.0394 149.4956 null]
+>> endobj
+1780 0 obj <<
+/D [1733 0 R /XYZ 85.0394 149.4956 null]
+>> endobj
+1781 0 obj <<
+/D [1733 0 R /XYZ 85.0394 144.3554 null]
+>> endobj
+1782 0 obj <<
+/D [1733 0 R /XYZ 85.0394 120.2857 null]
+>> endobj
+1783 0 obj <<
+/D [1733 0 R /XYZ 85.0394 112.2205 null]
+>> endobj
+1784 0 obj <<
+/D [1733 0 R /XYZ 85.0394 97.4559 null]
+>> endobj
+1785 0 obj <<
+/D [1733 0 R /XYZ 85.0394 92.0407 null]
+>> endobj
+1732 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1788 0 obj <<
+/Length 2121
/Filter /FlateDecode
>>
stream
-xÚµX[Ûº~ϯ0Ð>hˆáE¤¤óÔÜÚì²)š-úìƒÖ¦m!²¤#É»1Šþ÷ÎpHÙòÊÇ(ŠÖäpøq8wJ,8ü‰E¦Wy²Hó„i.ôb¹{ÅXûÛ+áy­˜N”‚ÉÌj¬UÆt&ÓE|
-òîþÕ›¿J±œ#õâ~=žeÒ”ñ|q¿ú½m[[¯ÊŸ7±Ô<zwópÿ+íJXš¥wq8!eFiãv|.ê}Q[ll?î S‰‘~ÑÌp¹=‰ç<Z•äG•2e ‰qWì¬ÇQ‹œåF£SÈŒ\¸Ùû]Ê”Fî¾Ò jšû–Æû¡¬ÊápL°\ë X"˜Ì]æë¡nÚ¾twxõñ~Ô©áL(Ðh" :Wsz §ÔÉ£dœÁíw„p6QùÉ ƒIF®ñž´õí/½ížl÷à§ñ#ÝIŸ*Ið”éÜh87«Ug{o•ÉYpñ,QÂó˜ËL¥Yft€\VÅ, ÌY–¥ù9àú*ຬl=š|*dÊ2ÉÓsÌÿÌv3Vèë:Ëñè5°§mºáO—4ÿvUØ ‚JÅrÁÕ9Þpo8´ÿÞÏ«xèDsx “æ…½Wá¾mwÅò—¼õ/?ìa9ç,ɹ9‡NÆ‘ypy#V€œ+.§öù†Ð•ÆÎuÃä·½íM;0Æ.E¼J%KRñG"þârÄ\Óˆ·—EÓ’™\¥D´ˆß-pMEÛTÍcQÅ-ÆBŽš j½’s?|üúþ·¿¿ýr7rOR¾ÄÇ”ÿ².(ŠGüÎ5_5»¢¬!ý'<*ëuÓ튡l òhÓ݈,jZÛ«ðL=­4ýι²?ËÇÊyhšŠV
-ë.¦‰’vÏnbÅÓèv *rõÄÛœC‡»Lü™ª°*"Ö+H,ž}[O¶–ÈEÝ?ÃqZ ~›“ÕóÐxØwµ]Ñòš®²;£[ ‰nÊíIm¸|„‡#>ÌÐJ»‚+k˜}nú!”ùÓk9])# ¿ìʺ¼Q?tÅÐ8á¼ïíŒK€0ùXg.¸ô@Ê„?48Ð%÷`×~Û4(ºáG1ZZ†Õ]OKvY n¹YÓo9øÕà%Ô^€\ÑkXÈ@ ÅùÂõÈЊ3 RP‰µµC0׸àf÷»Úý€þ#xôlÓ½lrÐC{?´è!D¤ßmñdýìÜh½¯—E5žÖ¬g®0›hþ¾Â–'*Ô>²s²<×pÇœ¥iJÿ¶¶Í~³9*ÑÐg*uÍ´2¥çÁÀUJF5ÆxUpæÔ½"ús9l‰¶lv;Ð~\•µ¥5
-‰Í~gë¡GÓi Æ%î¢êâÚ½'Ñü±–r׬<”³3þBXSªq
-0 ¤PžLÝ~L!1ÅŠ’GrbPÈ´Ô>GCgÇL%+ër‹‰ÞíboMÃ~—î4i<Ñ90ž1U‰C=U‰'9oÂí-^¬æLD·¦Eä7Iô¼µ50¼,òi΄0‰7d¼÷*™Ð
-;‘
-¢ô­]–è„Kš‡²§|Á¸IÈŠ/(yÎàõ!¯)PÂ[Æó<—Uå BØCQú
-o§¾÷Pcµ·ž­¥>"† ÞÑÒÊ® ŒžÖQ¨™ž 5P~DrÍ› ÏC‰z*‹9?€ww¼àÏÿþôåóÇÿ¼a€×-g3ÅLfähg¨ð*ºß†«Rn>½~6æ|â C¹¨D97ù2"ó„%BžÕ®ç&/ÚòÞ*d T×qñrn˜q²YkÞ»ÆJÍíýR7
-ƒ÷Ÿè—¾¸VsAOÔb±*Zšøš £á*ÜдVÙ'[º{ìÕ'i},©9B:u\þŒ™
+xÚ¥YIs㸾ûWèª*B°pÍM¶ÔŽ»=¶cy*™t÷¦`‰eŠÔˆ”»5¿>x J$5•”Äòà}x 6¢ðc#Ï'~Ä£Q¹Ä£Ì%›+:ZÁÜí34“šhbS]¿\ýí“F‰|î^Þ,Y!¡aÈF/˯Δ2 Ô¹¾»¾¿{¼}ž>ýã·ñ„{ÔùF=:}˜agñëíí|ñ27Ýçùtv÷p $l< üˆ:Ó§§ùÃìîß8?URi3z3_Œ¿¿|¾š¿4˶·Æ¨Pkþýêëw:ZÂ?_Q"¢Ðý€%,Šøhsåz‚x®õHvµ¸úg#Кլ¦b”páó[q6bŒDžÇ[Æò"â .´±_Ë"“•\âg c™ìwiu0¦ùtSönV¸Ð Ñ-*\›è±¦RKû
+Z9õ½ï§šç`/VÝPë‘¥›ñ€x<hëž›8ÍÇ—Sç!ÞHÕbÎâPVrƒ£G©™ùÏJæeZäÚL'»c!%Aø°.%û¯Àâ gF k\VYü.Ç g\GìÆ,t–¨'ÎMãÆЉ÷o›87R>Çù>Þ”VØr­hÒÀúà\¤=ê’ê
+›ª‹†ªÃ~4¨úˆÆ™îN8Zº/Û¿h†ý($Š¼ÿƒ_bÝMÖ Q?~H"\ÈK6Õ
+¸÷‹Š{Jð/qYÊŽéZA/‰E©¢
+\§Il‡·îLx‹j
+aÜo汆ÆÙ3¨¢sõd¥Ë*^ÉÛXxùÎR~ȬتýÁŠüˆ9w›m&U¿Øé½cïU¢Àâ,pò¢2ª‹ö6°L@ÎU\¿²q8.€6býN}×I?âL¥°Ž ®üHU®‹}fFµVÕx•øý}_à»*ê¬cIj†\m­17ÂÞÔ©ÏpÐƺû<3ú$)6“.|¶qžjéŒ:¯ü≀Æ2-“,N7:‡ê‰¸jH ññBçç®:s%võrá‹(+$-K¢èp
+uüa„ÄøÉÒ7YÂò°§O+|Ëô'66E^­ /œ÷z‰?Ö)\6;6jVìÙ+†ÎRZ/ÙÉT[?뙉WÃ
+BRSOÄú1£ì ô<(AD]­Xx©°óZìM¬¸¾{˜åºP¬ú\J"VßCÞäN¹Qï3;¡Ô»pý²©Î“ ì‚
+ÓÙ„õç‘A­Ç<r¦¶3´´b¡žq+êÛ–²íC@ …ñç)ÞgÈ4ÍàÂõlj¤8Nš¼ëøýût¯™ çö°KWk\F,an¨þ^¡æ9Á%@?.aÂIàG°O‹îe^×å€ÃúúdQâÚò5.«b[èhAöfúwœyüË3¤™yÂçžÒur¥kª‘)\+’ÎrÙ[tÀaUuàE›cýÿ/eU/aßU„f¿^”6 ¥gK¯ÿÁ:_ûøØendstream
endobj
-1746 0 obj <<
+1787 0 obj <<
/Type /Page
-/Contents 1747 0 R
-/Resources 1745 0 R
+/Contents 1788 0 R
+/Resources 1786 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1754 0 R
+/Parent 1675 0 R
>> endobj
-1748 0 obj <<
-/D [1746 0 R /XYZ 85.0394 794.5015 null]
+1789 0 obj <<
+/D [1787 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-606 0 obj <<
-/D [1746 0 R /XYZ 85.0394 769.5949 null]
+1790 0 obj <<
+/D [1787 0 R /XYZ 56.6929 749.4437 null]
>> endobj
-1749 0 obj <<
-/D [1746 0 R /XYZ 85.0394 573.0107 null]
+1791 0 obj <<
+/D [1787 0 R /XYZ 56.6929 749.4437 null]
>> endobj
-610 0 obj <<
-/D [1746 0 R /XYZ 85.0394 573.0107 null]
+1792 0 obj <<
+/D [1787 0 R /XYZ 56.6929 749.4437 null]
>> endobj
-1750 0 obj <<
-/D [1746 0 R /XYZ 85.0394 538.4209 null]
+1793 0 obj <<
+/D [1787 0 R /XYZ 56.6929 746.6461 null]
>> endobj
-1751 0 obj <<
-/D [1746 0 R /XYZ 85.0394 504.6118 null]
+1794 0 obj <<
+/D [1787 0 R /XYZ 56.6929 722.5763 null]
>> endobj
-1752 0 obj <<
-/D [1746 0 R /XYZ 85.0394 432.7569 null]
+1795 0 obj <<
+/D [1787 0 R /XYZ 56.6929 716.7581 null]
>> endobj
-1753 0 obj <<
-/D [1746 0 R /XYZ 85.0394 303.3232 null]
+1796 0 obj <<
+/D [1787 0 R /XYZ 56.6929 701.9936 null]
>> endobj
-1745 0 obj <<
-/Font << /F21 658 0 R /F23 682 0 R /F39 863 0 R /F53 962 0 R >>
+1797 0 obj <<
+/D [1787 0 R /XYZ 56.6929 698.8254 null]
+>> endobj
+1798 0 obj <<
+/D [1787 0 R /XYZ 56.6929 684.1207 null]
+>> endobj
+1799 0 obj <<
+/D [1787 0 R /XYZ 56.6929 680.8926 null]
+>> endobj
+1800 0 obj <<
+/D [1787 0 R /XYZ 56.6929 656.8229 null]
+>> endobj
+1801 0 obj <<
+/D [1787 0 R /XYZ 56.6929 651.0047 null]
+>> endobj
+1802 0 obj <<
+/D [1787 0 R /XYZ 56.6929 636.3 null]
+>> endobj
+1803 0 obj <<
+/D [1787 0 R /XYZ 56.6929 633.072 null]
+>> endobj
+1804 0 obj <<
+/D [1787 0 R /XYZ 56.6929 609.0023 null]
+>> endobj
+1805 0 obj <<
+/D [1787 0 R /XYZ 56.6929 603.184 null]
+>> endobj
+1806 0 obj <<
+/D [1787 0 R /XYZ 56.6929 579.1143 null]
+>> endobj
+1807 0 obj <<
+/D [1787 0 R /XYZ 56.6929 573.2961 null]
+>> endobj
+1808 0 obj <<
+/D [1787 0 R /XYZ 56.6929 558.5914 null]
+>> endobj
+1809 0 obj <<
+/D [1787 0 R /XYZ 56.6929 555.3634 null]
+>> endobj
+1810 0 obj <<
+/D [1787 0 R /XYZ 56.6929 540.5988 null]
+>> endobj
+1811 0 obj <<
+/D [1787 0 R /XYZ 56.6929 537.4306 null]
+>> endobj
+1812 0 obj <<
+/D [1787 0 R /XYZ 56.6929 510.7109 null]
+>> endobj
+1813 0 obj <<
+/D [1787 0 R /XYZ 56.6929 507.5427 null]
+>> endobj
+630 0 obj <<
+/D [1787 0 R /XYZ 56.6929 477.5928 null]
+>> endobj
+1814 0 obj <<
+/D [1787 0 R /XYZ 56.6929 453.2532 null]
+>> endobj
+634 0 obj <<
+/D [1787 0 R /XYZ 56.6929 369.7201 null]
+>> endobj
+1815 0 obj <<
+/D [1787 0 R /XYZ 56.6929 345.3805 null]
+>> endobj
+1816 0 obj <<
+/D [1787 0 R /XYZ 56.6929 310.6805 null]
+>> endobj
+1817 0 obj <<
+/D [1787 0 R /XYZ 56.6929 310.6805 null]
+>> endobj
+1818 0 obj <<
+/D [1787 0 R /XYZ 56.6929 310.6805 null]
+>> endobj
+1819 0 obj <<
+/D [1787 0 R /XYZ 56.6929 310.6805 null]
+>> endobj
+1786 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R /F14 717 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1757 0 obj <<
-/Length 3971
+1822 0 obj <<
+/Length 1916
/Filter /FlateDecode
>>
stream
-xÚÍZÝsÛ6÷_á™>T™‰X€
-ç\9æ=5`½Z7õ¼êñ¼j×Ëâ©œ'Ç<uf!úéÌ|ÞS÷G÷ÔqîÑ3½·¨I. |vÑ0èpÑÁÉÙ ôOçÃE«ö¨èš»½®`[ߘ ¨32¿ù¾¤ãüM´U
-Æ—K½]6ØçtBؽQŸv…ûÑ{TØŸ[t'ìýEÇ…Ý_´ªç€x:o&N*ðR‚–çÆ·¼ÐáIAÍ7+N‚þ´­¨1'êoij°€òêŸSÇ?ßýÌëË7Ü+OÆœœÓ“"8ƒ#
-“mÃ
-[Á6ÄÚé=¨ôœ>QܼjÃOð`ì™xSÈó×’øEˆL·eÉPÜ š÷ýv—"õrO_v¨÷bÑNV±êl?TkðI.ØOrñ5¤/ ZÆÅsœêñ %Lší«°T¡Ê5\
-)¶;) ~cSÔ-î둾Ò:ºC“b<ˆÈ'ÿÿÝbÎN¾rv¨‡1ýÉA+#¯Óîþ;Ì«Œy•‘!p‰†õ#Æó$@ À‰S‰<8v¼dÚEm˜ù²£¸rÎòz D)û¨zÇÑ㢢0,#ÅTdWòkOýâòê» ~ ßGžÎód’H{Þ¨Ýâi\<å•O.ð?ríd[/)‘3é‘Ð"]ùüNiÿ8r\¹=<®Ýº±O+5ÜËuS‘\E™w‚z¼ç ûç.Û”:·ç*½^Þù0ƒÑM~ð15MûˆÑg{ØõD]> ¼£9Ò "“(‘à(P.~þîCB$º~@bX¨ªg´ÖW|ò žiß=dϧ[0eVþõv˜kÊ^ÕWèz>V RIžŠì„†ƒVíÊcã¶ì"z)ˆ`$^RTÜmþq52¬Dd=ã o1 Ø Y,*í‹èʱE蘈.L6[õ}Ù†¬%ä„ý£:ƒ5z³§!´ª¢ÀU¹WÒ…ÈZ…+Øå3¾ëÄi¾æ(yýãÅñÒïcѹ?d8ŘDùÞ4””>1;‘þEw °=ø¼é§qûU:Û‡†Éw«ÃŽõÎݪÝ5Æ1w ˜Q@ŽG’¤Cw+L
-œk,]IvfRqé`%ýK»q—Ž8$ÏNW`r
-0+–þ*J÷,ø‚¤/€D)ïãúµI$‚éAðe_'œÿ^fĪ0ÊĪ&¼)ÓDªŽ©ª§¨XI±Y£Î7K2mÌàæ–a×+ƒë»j-4ÚI±{!p}ïo>!òe]¹»é-g]õP.Ãw"0
-”Ø¢/Û†H½m„ËH Ž0]um¹¼#"‰*ß+—R‰ÊõÔ¸9.Ã;ÈGtzX†«¡à ±Jôtäj£ ;þ۱ˣ,DŽÅª˜C¹—)‰‚ˆ˜:¾—èuÝÐgØŒé9|ûîâåôÝ«l,§ÌÒw"¨#KñÐx¢@u”'jáÑñwÞFÔÐ ñ`ìA<Å>s"Q2ïC=Lbò
-œÀ4d‹V ½K²Üì]½„Á…s¯I°Måz°“âcÉÝ‹ÐbKöýãjmÁL­8¥×BªÃ>]ÁãsZVM!äm˜¿§ürK?ŠvÇ€oxóEÉSy¤·‡‡ª­|0ÆØ8È9÷]Wá
-ê­yŽvQ.—_3¤¼Ý5TÉ
-weþ>Kô@yðÐd·cá„`
+xÚµÛŽÛºñ=_a }ÐËHI穹µÙdS4[ô!Ù­MÛBdIG’wcý÷ÎpHÙòÊÇ(ŠÖäp8œûEbÁáO,2͸ʓEš'Ls¡ËÝ+¾ØÀÙß^ “hÅt¢lfNc­2¦3™.âS"ïî_½ù« É™1R/î×ã[&MÏ÷«oÑÛ¶µõªüyKÍ£w7÷¿Ò­„¥Y*ð‡Rf”6îÆç¢Þá·ÅÆöã‘0•éïÍ ×™»óŽ‰›XpΣU¹A|DP)SÆwÅÎz:j‘³ÜHãÉ(ÁT<#^vï~—2¥Õ‡»¯´¨šæǾ¥õ~(«r8,×:0–&3AÂ|=ÔMÛ—N†WïG΄&Â0¡s5§w|J\0JÆH/ð¹# g“DœHL2brÐÖ·¿ô¶{²ÝƒßÆ$“>U’à)Ó¹Ñð.^.V«ÎöÞ*“·@ð,QÂã4—34•f™Ñä²*f ÊœeYšŸ\_%¸.+[&Ÿ2™²LòôœæÿÍv†f¬Ð×u–-âÑkàNÛtß.i ;'üÛUf/0*ËWçô†«ô†Cû?Ðûy•:ѽ„IóÂÞ‡«ä¾mwÅò—”ú—ö0C9ç,ɹ9'Œ+óàòF¬€r®¸œÚç’¸¨Œ°v®6¿ímwhÚ1öp)âU*Y’Š?ñ§$.Güˆ5øx{™5-™ÉUúGX;!ñ;¬¬)k›ªy,ªx¢ÅXÈQ³A­Wrî‡_ßÿãöï÷·_îFìIÊ—â˜ò_Ö¥Cñàˆß¹æ«fW”5¤ÿ„Ge½nº]1” Tmº‘EMk;@©§³‚¶ß9WögùXYMSÑ Ð
+dÛ¥ ¯7„IÎ]L;%ížÝÄŠ§Ñí@Pxùê ¯9‡²Lü™ª *,Ö+XH,ž}[¶–ÀEÝ?ÃsZ þšãÕãÐzØwµ]ÑñšDÙ#)DR r{RÉÓ>ìÐJ»‘5ì>7ýÊü©XNWÊÈ/»².oDÔ]14Žy
+‰Í~gë¡GÓi Æ%ì¢êÂÚ½Ñþ±–žä®YyRÎÎø aM©Æ)À$By2uû1…PÄ+JɉA!?Ð!R?øq QÜ3•¬¬Ë-&zK°Gˆ½5-û=ÝhÓx s`|cªGõT%ä¼ ¯·(X?&Ì™ˆn;L‹ˆo’èykkZa:yYäÓœ aoÈx;ïU:3¡ ˆ¤KØð»)Ÿlâký³®Ê–à¶èªÒ
+l0ý"ë¯q›Rv“FGïnï>Fî©îZ~½8¾Ô¬gcf01vÏë’NuðfðÎæ™´'8På"™ÿn_ e[ÙÓèüè˾ß[å'~á‚Ø£xãzb`a6Zì$Ag”ù¾TÊC V+‚¸çâ
+;
+‚ô­]–è„KÚ‡²§|Á¸IÈŠ/(yÎ`ú×(a–ñ8ÏeUyƶÀP”>
+©,ƒqI
+³SßûÆ
+ Î±
+ÙÕu<¼œfœlÖš÷®1„Rs{G¿ÔÂâý'ú¥¯®ÕÅ\дX¬Š–6¾&Ãj¸JnhZ"VÙ'[Œº{OÙ=ªOÒ,úXRs„pê¸ü3`¹>$ð0TOÌ{¤³éÒ·pçžÕÌÈà]ñr¾šI(“jæ”ÏïÐQ¸tº>x å2Aó¼‘Ñ°›!5#Ì…©ò=f¸73­s˜çä8„‡Ï3‡öïóS®Ä:Y
endobj
-1756 0 obj <<
+1821 0 obj <<
/Type /Page
-/Contents 1757 0 R
-/Resources 1755 0 R
+/Contents 1822 0 R
+/Resources 1820 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1754 0 R
+/Parent 1675 0 R
>> endobj
-1758 0 obj <<
-/D [1756 0 R /XYZ 56.6929 794.5015 null]
+1823 0 obj <<
+/D [1821 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1759 0 obj <<
-/D [1756 0 R /XYZ 56.6929 752.2728 null]
+638 0 obj <<
+/D [1821 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1760 0 obj <<
-/D [1756 0 R /XYZ 56.6929 504.0748 null]
+1824 0 obj <<
+/D [1821 0 R /XYZ 85.0394 573.0107 null]
>> endobj
-1755 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F48 885 0 R /F53 962 0 R /F11 1303 0 R >>
+642 0 obj <<
+/D [1821 0 R /XYZ 85.0394 573.0107 null]
+>> endobj
+1825 0 obj <<
+/D [1821 0 R /XYZ 85.0394 538.4209 null]
+>> endobj
+1826 0 obj <<
+/D [1821 0 R /XYZ 85.0394 504.6118 null]
+>> endobj
+1827 0 obj <<
+/D [1821 0 R /XYZ 85.0394 432.7569 null]
+>> endobj
+1828 0 obj <<
+/D [1821 0 R /XYZ 85.0394 303.3232 null]
+>> endobj
+1820 0 obj <<
+/Font << /F21 690 0 R /F23 714 0 R /F41 910 0 R /F53 1002 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1763 0 obj <<
+1831 0 obj <<
+/Length 3970
+/Filter /FlateDecode
+>>
+stream
+xÚÍZÝsÛ6÷_á™>T™‰X€
+@Š$Uy‘@*Ï¥Ll–¥#d6ÉUªœ®/ß½ÿá5íë§kØî ÞTÙ‰sèNTž÷ÊîŸÖõ¬\Òºyhge_· ýnïx9˜D’S 7ϼ¾,&M¢•Îx̲m?v4å²þX}K/èá¬S)u¢3ÝTI
+ÿÂìÓNî_]µy¨6ô£)Wµ€ý*²ü4K¬1ùx®Ç¼/‹ ­?:q™)ósM’kU9!4Žr¤‹ˆŠ†Q¸43¿·¬M“,+ôç—õƒ—íØš$SÖŒ—­QèHiâJeÁ!©ÝÐóò=õ”ó9 §ãwàì½ë©}K´OÛjóôLJ9SSÖNn~õYÙÐØ[~ßývk?è#«×<dÞö}5Ÿ¢äà0áTµ@ ñæ€RÍê•SàBMš¶÷ê ¿hŠ×S¸^ΔñzŠ×S“Y»l›é¼ZÖ«Ï
+;ÓÂNþ³¨x4ÉÝv½^Ö0Þ©b6<eLRX#Ùvš°w€ªHòB[V:öxßZæIV„}“׻߮ª¦g»eã*é±h»OëyÔzA´§­Wy–YRíò¡âuúEÉ+³R@ WNîZL$§usü%–†ÑNk$¨Äi#¢LÁå ´æÓ¢TåiQ¦cQê‚D ϵ{«}¨çÕ<&G+“"ÓéI1Ê<ç1³¶é¶Ë¾‹8?`Ø ï§ßTýì›x/ÝEf†ðþÒPÙ̉ix]ñH9u0\ ‘ĸYw¤á4–.!1¥:Od*åXN7 >6»^>ÑÏ;’ÕÊŸsuä˜÷Ô€õjÝ6ón¬Çóº[/˧jžóÔYÑOgæóžz8긧£pŽé½E ‘äÂ÷gõƒ\‘þé|¼hÝ]{·×å­që³uFæ7ß—t˜¿ ¶JÁârÅ£·ëã»ÓàœN{0ê3Âö£pß>zG…ý¹EwÂÞ_4.ìá¢u3ÄÓ;3±P“´7®å„O
+j®Yópô§mM9QKSƒ-
+ï Ž
+)´w-.ÂÁœ·¼²a¶Êe=nÆ™·‚×­Èò±yãRÅ kÀÞÒª“ j!G.8±|àŒºØ")t!¿
+‹¨íÛ5»¬–ÝQÉP÷"fGIàj
+ëÖþñýÍåWןÞyð¢‡!@Z€ÿÒðF¦·±½b^`}8iקçà_{'OãÝFÂÎúù
+¢QœcÝnz¢¯Ê'jÜ2?Ý`ëoF¡qOÔQ®×8¨Æ);ªÎp[¸âW$i9²lùù{ä(Lbtá8¶'T ´ÚÞšÅI…0•+§Z„ Dòê®ЃY¹ šôÙ²tG
+ÍßD&.¯¨Mf CݱÀAA§¤®š‡·€$6õ|î08üFÁá}Ô¬`Dbeêw5Åí*×éØ®bžYéÄÂÃJÚA|B¾f2ï™=×äM¯Ü^ L~p¶`ßœ)ðÿÒŒO¾dùözϽ­ººÇœ¿á¾|»÷æËEÙv âè»IP¿½Sz.k´Ó\‡™f·{ÏÆǪ‹øþ\ª°'|?°¦Ãy´àò!ªÓ´5O[ö WZ©s'™šå¥36G(ñ!0&¹"Çî-På®ïˆ‚¨
+Ÿœ2Ìœ³BBÀÅ”½B¬’E®ö‚.YŠž 3XV1µKAí¼vÞÕËÊCÔ}w yf*ÌÀÝÚb˜Þ)$}YCºÖtD(éÑlW.‹ÛÐOà {E"$¨¬…tÎ×õ¬©
+ AdMÅ+¾.QâH„`OæžQz $Þm6`GOºE»]Ή~Ën
+'i#ZšÃÔÉ,PfÆ;„mG ñçY»ZA7E)úmqTâ|L F&BA‹ª~ˆÒ”pǧ„°ÖL»&*}€„°wCTôKøtº }..‰Œ÷ p ``q̧*™dªð†7]Ç}ªµÿ‹+kD5yYpØJ CÕWq'kÓ´8Y·ían¿çl°gMùÐá!N•¶‰ÉŠ=e;z˜i±7!|ƒþÌ©U;(¦²ú µd»ä!ΰ<:IXÀèÔ°ëÕÕ55h+Øò[Á6ÄÚé
+â —õw›\Å`@†•ˆl`<0áÍ"$ûb"‹E¥C±
+ÈZ0>ÆB|w'0oë.b\sX3í|9åÒã“øàý†Sò_¨§RsYÉ«r½&/#G·ŸN£DZ;ž™´{¹ô—z8¢«Wà\CéJ²3“êˆK+^ÚÅ]:â<;]ɨ¦ÃÊcÜ߈]%µæÝ8_ ì;DEe+a-Õ^åp\q4|3 O¾‰Þ]7C°ðÃÏéÛ¡Y —ôÆá]² wÐft
+.ÜþbÙ (},‹Å7Äò¼d¸¸‹• )5ÀÄŸå
+îOh…;•šUj÷Á+íî´q âÑræ?_*÷eÏUÒ¾¹¾|ƒ¢~Λ :€FÀF•«Dí]ïâk8(Ÿ|tõPPíP…bà$?–›
+"BVhù^bÐuCŸ`3¤ç8ðí»‹—Ów¯²X0N˜¥5öDPG–¡ðDê(OÔ£ã±'8âÁؽ0xŠ}æD¢d>„z˜(„äŒië|
+qÿu¢È¹šc>âwš¥E˜ ¤ÇmÙUÓ\S_ÕÌÚ9Á'ï Ñþ´ô_Ð.y’ûªÁ‹(œvN”[N`æ «Ù81hÈZ±‡ö6Ér³w9ôÎM¸&Á6•ëÁNÊw?.|‹-ÙõÇÕº
+Ÿ+вz
+!oÃü=uà—;úQv;\Ù/JžÊ#ƒ=<Ô]í‚1þ€ÀƨÀBιï¸
+¨xÛ¯·=] 2(èYw(Yéïù#PVhÍst‹j¹üš!5àí¾¥J–¿+s÷Yb
+endobj
+1830 0 obj <<
+/Type /Page
+/Contents 1831 0 R
+/Resources 1829 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1675 0 R
+>> endobj
+1832 0 obj <<
+/D [1830 0 R /XYZ 56.6929 794.5015 null]
+>> endobj
+1833 0 obj <<
+/D [1830 0 R /XYZ 56.6929 752.2728 null]
+>> endobj
+1834 0 obj <<
+/D [1830 0 R /XYZ 56.6929 504.0748 null]
+>> endobj
+1829 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F48 925 0 R /F53 1002 0 R /F11 1343 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1837 0 obj <<
/Length 2761
/Filter /FlateDecode
>>
@@ -7633,33 +7974,38 @@ stream
xÚ­ZßoÛ8~Ï_áG»QI‘”Äö!m²EÝ6»I=´yP,9jKYKNÎÿý 9Cê‡%åpw(PKÃ!gøñãÌ
_0ølj
˜Ðrk(ÆÕbµ;c‹'hûxÆIçÂ)]tµÞߟ½ûUÄ è(Œ÷ëÎXIÀ’„/î³oËËÛÛëÏW7_„Š-ß犱åï—Ÿ¿^~BÙí¹——¯ïà5R,%nÔ"¶¼ºùxþpÿÛÙõ½w¦ë0gÂxò÷Ù·¶ÈÀïßÎX t¢¯ð®u¸ØI%%…p’íÙÝÙ~ÀN«í:€I ’0A c(Dš u¾É÷f®zÙlÒÆ<%Ë¢FÉ߇|_ä¾”yžÕØÞT(úQV¯®oŽM?ò#JÒ’ú¥Û§j_4›õ%+Ú[yÌ‹ò už¼BDË›[ßß|¾úÙ)꾃YUæ4ÈÑ, rÁy •
-íôž÷ç<YV/EF&Ø2}&áó¾H›Üô x(ÎX ­a03†™*uÑä:`:¤c&;2„ŠA}:”€¥¢È©5àÕ./›ý-Jì"t§Kj&©K™î
-ûþµ²Æiù‘³ù*Ï&z<o4x]<‘¹ïL±‘ |’(Ih;ü4¶qÇ.*À0&ï„Z;ñ¤ëaÖ.œXÄû,2Ž–ÈWÁà ‘‘ì¯'Âdͨå=q“IØ
-fžLA¤FÁ
-ê<æ@ˆÂìcóf¢–Q±”C³øðõê–¨ Žk5Øчr›×nåJü½üë×?)&Sì¾ñ3Éb~¡¡n£zAC¹Ä«´¦(žâ…öTe‰Y¥?0ÖzS4
-EÀB½A£ŽÖ œ–§ÑËê„E!,wªyÃ^ëÔò€EØ&’¾id‘ô,bÄ"éY$=‹˜c‘ä=1Ç"Ùe‘J ã9 °…SÚPiÕŽe“þ ŸŠ¶ªWÊ$‰/@»m˜’x2ÍI±  )C(.T?jt*<JäkÇ·Çtõã5m—%Éî9mŠÇb[4Çsι S‚3ÜFã{Ê—•ùßÕP!Ôƒ‘­R±oé–Æ-¬™Õ¡hLÛ$ßd¬ƒP†jžo]­i¾y-&djŸŸpN1(š¡n™5îµN­÷9§ú’÷ÍßË®ª…³m³?‡SV¹Jq?‘73ÃHbT3<CÌ·Å93vša;fÙNaFù8 Ç<Ô14æ¡6«hÞQL΄îBDg$(êˆR*HÂd˜†ýDL™™ïMvœ !R¨@*-ÞXÒŽÖÌ’:-»¤YµK‹òSOÛÝ8\W<JX<ï×:u¡¿®àCÉ»çÂ)èDäJx¨s„ÇÄc™2¤v*þBnR³Øý~°x[zÆyDˆC1ª¥;Dv'>ðVB
-™+î`…†€TãøÅ}«Ÿó•¯¼my•Ž./„Ђ’§O†®¯ýÓtÈH»`–Tª6…­®">~ VB pGõwy³z·Ïëjû2u¬Ö°*¦Nh'šÐIÑLàyÜ’½þÊðÎÊPˆ\AŠÆð­}¬¸;z „ë$€³€ó÷'cÆ?uÜ‚ZQ‹h¬Ò§$žw÷ÕàTNî)±%†0¿§ºZÓ{Êkù0ÙÎb4LÎoÃä‰õñ0Ù3oS³ I65ƒS³‘`j6Otæн5 ¸¢¦%Ë ­K<2:Žö¤>œª0ø%Fã8}ÚšæQÚBN‡g¥ˆDY:ã®ü¡°‘Œ·‡Mfø‡Uã‘Ξ½l܃@y:åHuåý£;ÿÛ,0Í2uZÄñ,ëhÍ°Ìiµ,ÛT¯L‹e3ñ†^ëÔƒÁ…—†
--Ø»ãžή3®o¡ë#ëXÝÿbð楀¹ØæM^B5<Éa®Â Iâ7Ît]­i{-ÏáÕ<‡g·>±>ÎážyËa`Uð€A‰Ãæ #(<|¸Â_ÃáÕ&_ýÀb
-LCÖ ç©ÐÑš¡‚Ój©°¼!œ5ÜÞžX¿!왾Â/†SÅ!}P|$ÔŸ.ïîÜ…l^v>Ãù"ÑëRmä?‰L€ÇAGo`ÛQš†Ö)µ7‹ ¬ú ¸R ìˆYÃ^éÄrZ ;8õLÿwÈÞßú?áêJe˜¿æ™óäÿç?iÿ$FÆ
+íôž÷ç<YV/EF&Ø2}&áó¾H›Üô x(ÎX ­a03†™*uÑä:`:¤c&;2„ŠA}:”€¥¢È©5àÕ./›ý-Jì"»#Gà¡f’º”é`[UåzdtXí–œT驪i½¸5ð+N`IDŒ!x|½þó\©å?Ñ‘/·÷7_>ßÌ@ã Ö\Ú~Yñ4XðÇäG»0¹™'š˜ŸdYv– ªÖ(34<’è¹)ª’º¼nŠs¾\mh€µr¯|GJ‚è5¥ÎEI‚Má:m«êÇáÙ¹`¢^»4ËIl™Ì7¢^¢^}ØÂ"Ö]¸Éù8áP?oÓ#2šEË»jgú‹'&b3`M¢:o¨mmdÉ¿3&Ò'|~,,9@ÉÎH8ÏD ´mr˜Áþ<–K³}$[ÖÞ~–7ù~W”ôêð€N5ÀG
+ÆØ¥»æá•b<»¼:4ƒžDc§¯u³‡ òTäuà}ÒA‡‰õé:Å¥[Ö$ÄÛÐ2`^Ù
+Y¾N!§ Îc„(Ì>6o&jK94‹_¯n‰ºà¸Vƒ}(·yíV®ÄßË¿~ý“b2Åî/q1“,¶áê6ª4”Kð¸JkŠâ)þX8lKU–˜Uúc­7E£P,TÑ4êhÍÐÈiy½¬NXÂr'¡š7ìµN-XÄm"é›FIÏ"F,’žEÒ³ˆ9IÞcs,’]©:n#°
+š2äâBõ£F§Â£D¾v|{LW?^Ó6qY’ìžÓ¦x,¶Es<眛0%8ÃÍa4¾‡¡|Y™ÿ]
+¤Òâ%íhÍ,©Ó²KšU»´(1õ´ÝÃu…Á£„Åóx­Súë
+>D¼{.Ü™‚ND®T€‡:GxL<‘)Cj§Rá/Äá&5‹Ýï‹·¥gœ×H„9£ZºCdwâo%d¡¹âÖYhH5Ž_¬Ñ·ú9_ùÊÛ6WéÈáòB((yúdèúÚ?M'Œ´ fYA¥jSØê*âãj%!
+wT—7«wû¼®¶/SÇj «bê„v¢ ÍD
+ƒ_b4ŽÓ§­i¥-ätxVŠx@”¥3ÞèÊOÐ
+Éx{Ød†X5éìÙËÆ=”‡ SÞ!€TçQÞ?ºó¿ÍÓ,ƒP§E¿Á²ŽÖ ËœV˲Mõ:Á´X1o8àµN=\xiðRõ]¸Å¼…@ Ûº`QZ{è•ÒC°Í ü}¦=OB,ðlì+v{;5 137Ôú-ˆ;Z3;-1,ðhbTÀȘÉyë^ëÔ|߈±âqßþUî.'Òö¼Ò ÈHغð±¬Êã®-&G"®9†¡îÉã,rè…q@ óÄ]­iˆ½–·¦U¹=NÆÊYãm¬<±>+{æ¡ö¨w¦´NÓ¶6÷—•³¢WÆ3&–øSÐAX“J¼]Gk:§Õn½MŸ¦¡›3Þnh}º®ùËÿ˜n‘†Iú þÁŠlE`J Õ½á•%Aª·@íhÍ€ê´Zï²yPçŒw@ZŸ
+&Ç¥—M±Â¦,mR“ëPá± Alqª”Bö|…’.p W®¯„sçCOÙlض±<¤3G{¸MÝå3$öžÓ¼X"دdÖ9ôÎl¦UÁ ”WÂÏyØ/ÔŒƒ‡”Žß(­Ð‚½;î©áì:ãúº>²ŽÕý/o^
+˜€mÞä%TÓæ* ’$~ãL×Õšæ°×ò^ÍsxÖxËáëãî™·PE
+­*8­–
+ÛÉÂYÃí á‰åñžé+üb8UÒŇABýðéòîÎ]Èæeç3œ/½.ÕFþ“ȸq„qô¶¥ihR{³ØÀªŸ€+eÀŽ˜5ì•N,÷¡•p°ƒCQÏô‡ìýý§ÿ®®TVùkŽ‘Ù1ÿAþþ£‘öObd`ã8N¦lBs甉31tÝÿyÉ©ïÿœ‡®cendstream
endobj
-1762 0 obj <<
+1836 0 obj <<
/Type /Page
-/Contents 1763 0 R
-/Resources 1761 0 R
+/Contents 1837 0 R
+/Resources 1835 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1754 0 R
+/Parent 1840 0 R
>> endobj
-1764 0 obj <<
-/D [1762 0 R /XYZ 85.0394 794.5015 null]
+1838 0 obj <<
+/D [1836 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1765 0 obj <<
-/D [1762 0 R /XYZ 85.0394 695.9587 null]
+1839 0 obj <<
+/D [1836 0 R /XYZ 85.0394 695.9587 null]
>> endobj
-1761 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R /F48 885 0 R /F53 962 0 R >>
+1835 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R /F48 925 0 R /F53 1002 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1768 0 obj <<
+1843 0 obj <<
/Length 2838
/Filter /FlateDecode
>>
@@ -7672,206 +8018,221 @@ xÚ¥Z[oܺ~÷¯ØGITR¼H*ЇIrОº'Z ñƒ¼¢m!Zi³ÒÆp~}‡wR·=m±¢Èg8óÍ…äâ‚Þ1žò2+wyIS†
Y·G†R„Ø…­xHµaKås l6‡Õ³ÉÛç˜óåq7é˜.¹CÓ:¹l®î‘/J­ÐêIÿ ŸrÍ06ûáÏò‡ÊÕO7ù8à¤KPhªZ¼–ÛPìé†æ§p Ö÷4Ú‰íËÄ‹cî¾ÛDǽ€ê¥±Ü?’2ƒzÈ/}A$ócˆ¤›
©Ö䨂¾Ÿ¦|Ë"eä[C3ç:©Š TÏ9‰ÙÞx|©–TLvêº[×—Ýz4×À •ÞÅÕßëõÉìÇ1÷s5¹çøBÁRm˜ÂRySÈ$&h-¸n²÷ÁuÆ9¸FX£È:EÅÖ'n·"Â3¿ŸpÒª·Aìý‹ÞÏUjJ¥qhšÃW˜§2´®|„¶²·›àñ|êtùOKåzë%Ë]´Â+ðìý‹EXøuH ¹ñÉéHT°T¾X‹ï:2H‹œl3wTsî“
;¢ a3¤Z7Œ£ò†1g½ó=Ò¼ÄÛüÕ\€Ø6ࣄ#KàmC­m¨µ lCÝI1J¼ÈêÕ›‡”Ú<T›‡.™åÆ<445æ¡Æ<4:]Þ6ìX‹²¸JCª óX*ožºnäêªvn.ïZòmÕ\‚Ø> ©ÜvGæáÖ<Üš‡GæÉ­yxˆ¬Þ½}(7öáÚ>|É>¥µíÃ}¸±Oî죂)/Óœ“ºhÃh¸„½¢æCªu£9*o´¶]=¥ÛäìOéf¬—Oé"ÞŸ„‰4¶„Û·¢2M)Ò<ê|EˆTëæ4EüÂaF@´¡$C¤o›ƒøËíJ¹¶ÅÓVkS–ËÅZÈt£ðcó¾l€Pœ÷êÄÞõÕ4*ý°Ù^’öKW¢P§ä,·Ç÷· G(î6ü ïê!BYr-“Äg Óøû·V_ë99 é¸ 0¨BpŸn. ;*{6jVëÎ`oÒ!6'éÅ—9HðY/>I ŠV¿Ö ­b—r{»{ ®ÝIê^agÇstaRm ÖR™ ïF sÌz·Þâ¸õ”õŠ[‡¼ tí}—l¸Ãsé¦A–®7O¥jh|~£ö–("s§7ºoœŒ‘´Ä˜m"½ÌXašnEUOä³ÂÑ
-.FËMley9ƒt(¤]A°C',ÉR}øóYý´Í·¥³gð”´$q,ÖqféšÉÿßXOp˜´h«{1=hº}{®§GŒêBÎB=üûÕÊï€/]þÚYçú¿ÿ”çÿrHsȘkw“YÎRø˜[¡¤&0BsÇAiF íÎeÿ/Nýýendstream
+.FËMley9ƒt(¤]A°C',ÉR}øóYý´Í·¥³gð”´$q,ÖqféšÉÿßXOp˜´h«{1=hº}{®§GŒêBÎB=üûÕÊï€/]þÚYçú¿ÿ”çÿrHsȘkw“YÎRø˜[¡¤&
endobj
-1767 0 obj <<
+1842 0 obj <<
/Type /Page
-/Contents 1768 0 R
-/Resources 1766 0 R
+/Contents 1843 0 R
+/Resources 1841 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1754 0 R
+/Parent 1840 0 R
>> endobj
-1769 0 obj <<
-/D [1767 0 R /XYZ 56.6929 794.5015 null]
+1844 0 obj <<
+/D [1842 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1766 0 obj <<
-/Font << /F37 747 0 R /F48 885 0 R /F23 682 0 R /F21 658 0 R /F53 962 0 R >>
+1841 0 obj <<
+/Font << /F37 779 0 R /F48 925 0 R /F23 714 0 R /F21 690 0 R /F53 1002 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1772 0 obj <<
+1847 0 obj <<
/Length 3317
/Filter /FlateDecode
>>
stream
-xÚ­]sÛFîÝ¿B3}¡§Õ†ûśɃS;9·iâÖNïnÚ>P"ms*‘ªH9qý ,EŠ”|Ó^2 w—Øß
-hGôU¶.j@«Š…Š"É@pþø ©Dh4C\Nœ‘
-­•a€ûÚÕöiŽ‚ßaYWM™Ã½e9ßgÑÔ«][<}6WI$”’Èr)Rk•;ùÎñÍŠûl·jiò”­v¼^6ôdÎ9È_ÃPU LwM \«<齃é0lÚ¬-ÖEÅû=cuÚgYb„Ýâ ¿*Úå«mxp·û)YéYø œ˜Àñ pHF…
-`£ ª‰:NA‰àê0©*µŽT¸ S‹+%¿ÙÀ2°7PGx vnŒ >€
-0Èç²}Ä‘ î‹Ï¨ƒ¸èÏ6¨X(>¶j‹í†VZd¥ƒàƒhy•µåSAoª=–¬bèÏåjEK §„À ¾¹¯¦ ŒËGw>¸+§F8
-
-¸Þ¥¸8AÇj bCÄù†¯KE¶|¤Åáh Í¡2šb`#Ä*À»@"jtÚ{Ÿ-Aš˜
-q•”áÚm‚,_<¨#‹R¸W¬‡ŠâIu1÷±Deu™ï´«CwV •ªBKcWÝ´»E³bø¢€*¹í‡ÛUCÔÖžV>ÔqÕé :ÕYP‹ÜƒkhG
-ð`ú:¨1Öâ
-{;$ᢅÂuƒÉpDžBEàFÊf³ÊžyÑ1PH´ètÆqV9]nhæ…É^LF¨l…ίÈþ°ÇÂþà¤lØ BÊ®;Ô JR¹4¯£&ŽÉUõis\¤ uQÇ/ˆ´uB¤ª)„î¦XŽÄiC¨DTry5Æ>'¤5qläýO$ ÊHBÕ ÿöê[‚—¤²Ú=× p+Ï~…s%œ88<ðã÷¼£ä­¿†6¼üÿKšcd”i´ßýñænŠ’¹±"Q‰F¾QŸåyÙBêÒÙ6u5Ž(½DŒRþ#Š ÓP@M~R ö0Ç•€a:hʇåcÖLä8JÄp ¼äïPüPCÆ*Õ}Äß:„s9…”RX³>TY»ëÌQaÃ{!h‹°Qg¸ËÐÐk ·nàÒV…Í·õ¦\9ãêRÍ/'šÀ&Q¤ÚôîøRXAHK’éð¼;ï$C H UŸ!·×ï¾ýçÅíÕqéCÚ aé%ù÷ Nh€‡r:ÐnwØbšÿ^<¿þ
-þŒô ‰Dd}š„jLÃPR)"FC"\í…Ì™»«TðK«‚ÆèÔAØÔÁv¶çI°£îÎ~ÞŒþŸ Þ¹k<ŒÓ‡‰†§6¦]ëìë¾IÐo!í…¤¦kFÍ{å’TD
-F“~JÅèBM:ªñrúo{ªîÄyÿȱ¹*p-±Ôñóÿä­T!?J_HZúPǽUÕE¬¶Þ¸ÆÙ(k‰ ÏÍiìÔýAØ’"¶2âÿ*æ\¹N~Æ¢L÷A ^1éƒ7ÅÓ?šd´.4çV tí¢2ÏZ×ö
-°¸¦ÌfÅ„aŠX:@*Z$_ Øg¡V·Iêãà3Ý’‰ÆŒ”}¦äi"õÐ×Ñýt¨©,§ÏQäÖ§¿<…,:ôás>õG‘Æ©çÍ"k1b"
- Pç2À[â´Þ ˜šã7½XrlEäî 2€´®m…KOp}™1õ‹bOýªtßFa•ô×]Pu'~®Ò}º&Ä ‰P¥…Ъ³‡æÉŽÔÆ—qù¨¥Ê
-hÈð×Φ[Θž²Ê˧2ß¹²E«î:î•'¹`ŠIç¸mˆ+Í3˜ÉçE³Ü– þ2—!Di>yg‹ú©À_i€ScI«¾ »ÚgNî¿ä<÷WO8hZ #óÂv²Á×N68ØËoÿ3Xv¿ kÚ¾à9æ:oÞmxŸS3åÅ›­¦>ôôëÏ›â@G–«¬9Ôw»iê¾ôpÒ<Ö»U>Ì'2¯êý^þ~ËA}y¨¤w«zA‚É$ÿpŸ&Dž.§­i×IÁMž2þ9>÷”ño%Ü¢Ë&ùT°`>jIjˆï›švøc¼1»Rеe\ LõD—IÖØ)î¿.ßÖ®ÓÌÝļ W¤ðýÒ–À`u·Yñ:y!å”B'QÚnh{\Â=݃©d¨Ž’×O6¦™—Æp °>˜~ °\'ÀYIpáT
-…²‘Ü»w&9ãK,øà¶Û2Ï‹Ê÷\AM£$š×âyðAËÝeÞÕ;Kßqi‡Ý–)×쾯¾õßc‹/Fûûµ˜†Ê]멼2ìÒ“¿ýK²ýïäL,4~}ŸL› n àŽôD!_ ’n1+IT<AûœÓ4endstream
+xÚ­ZÝsÛ6÷_¡™¾ÐÓ
+!¾øq3ypj'ç6MÜÚéÝMÛJ¤mN%R)'î_»ØEŠ”|Ó^2 p]
+éë*¯Ûæõåáv¥V"‰B9ë¯9âÜQY+Ýc-u,#xßíù\ë8h jT»õ¢Øb;
+ê{Cù<YƳ'žÑÖôÌ6›â\Ù–ºe…zõÖö¥Pa*¢Ä(ÙWÙº ª¬**Š$Áúã…¤¡ÑLq9±F*´V† îk/TÛ—9
+¼‡e]5eû–IP伟ES¯vm!põÙ\%‘PJâ‘K‘Z«ÜÊwîÜ,œQqŸíV-už²ÕŽÇˆž|rŽò×0T•cÝ]S©UžŒçU|èÐlÚ¬-ÖEÅóýÁÙ?²ÄØâ ¿*Úå«mx°·û©²"2Òá7°vbwNÀC2+€‚ª¦3Ðq
+ ‚­΀EU©u¢ÂnXZ)ù͆áxã
+Ût¨þë²bÚ8u[h¨‰ÞŸícÉ#ƒýB¯ÑЉ¬Õ–ÇŠB#¤‘5Âéêù\J ÈiüŒ!š[Ïu×¢%°NÂ`›ÁùIÇ zÆ®]謁ȧÌÀnCŠáu?¯?³NƒÃ£¹›m º'— ‡rátÀÂÖÛ‚ŒWø“<NM=6HÐZf»†õ1£Þ:µþØÛg^ˆ'.˜–Ìê1]“‰PZ§/èZê„®y*§kE^5¯¿)šŠÀОfÜQ9„/hßt2d} (ïÝi$^ْ
+
+%ÃkŒßÐ)Ä‘%§€ã]ˆ‹4¬26Ä ö7¼u*²å# ÷Dc¨ŽH•Q1VîQ£ÓnÙûl ·‰0‘¬am¾Ü½¡&õÙ
+þŒpD"²‰>-BG5–aˆ†TŠH§ÑP—{a%³pêî2|àЪ 6uÀ«:èÎö< vTÃ>ÈÏ“ÑþâsÁ3w§qx˜(xj#lڕξî«ÄüÂ^jºbÔ\Á²W.HE€æï¯þã œp-Iz0†±Î%À6†Ù—7eëS~_(À¸Vt!k
+ù+Ÿá5Ú””CÖ¬é5Ÿ
+[S¬@ë—ÂVŸçùg¬êúwbp?Y<´1$á]Þçê{=ˆ ø7ÅI)aÃØÏ»8Y˜¢Xy™_^5U"’]ªêLtê i ÿ’, '4”7—0•ÑT#÷5κo®¯âÀN¹‰à îÙ)z;­I;¥b4¡&Ô¸9ý·-U·â¼¿äX]˜–XêxÏù²V*—¥/-}ªãÖª£ê<V[o\álµDg„æ4÷ŽjÌþÀmI[ùÿ 9W®’Ÿq†(Ó½ƒ‡NLz'FíM±Åð:M‡ ͹(]¹¨Ì³Ö•=àzÒC8ÁVWÌÄDÚxhbþÆ$Öuð¦-¦oÆþ}Œùçý%'0†jm”ÝsaÌÙ®n‹÷˜‹Æ`/´ yxº>½ÇôèîúæýmõÇOW?]_ÝN؆ §ûoo
+Ò½7×.±•) ”ëÍÊ}ƒÊ8~3®=¶¨˜ÛHÉ+2õõòf·Ù@:Õ§†*„*àâŠ2› †!bé
+%htèÝç|ê#Ž4"S6‹¬E‰,ÐAË
+£„wNÕ­ø¹bJ÷éšxÐÉH„*=Hì@V=4ß°Kv¢6>ËG%U&˜öÖx)Zû¯
+ÐZBÀ+눊^ã¯1±ÌûgÄg⣜*LüASjû°ão¨À†ìílºáŒå)«¼|*óK[´ê¶ã^y‘ –˜0ÇeCižAM¾P;/šå¶\ð‡¹ ÁãHsðÉ;[ÔOþJŒß´
+é ºË ±çî]â—œçÞ€âì M bd>¢BÚînðµ»lìïoÿ3v¿ kš¾à>Æ:OÞmxžƒ™ò×›­¦>ôô ëÏ›â
endobj
-1771 0 obj <<
+1846 0 obj <<
/Type /Page
-/Contents 1772 0 R
-/Resources 1770 0 R
+/Contents 1847 0 R
+/Resources 1845 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1754 0 R
+/Parent 1840 0 R
>> endobj
-1773 0 obj <<
-/D [1771 0 R /XYZ 85.0394 794.5015 null]
+1848 0 obj <<
+/D [1846 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1774 0 obj <<
-/D [1771 0 R /XYZ 85.0394 204.5196 null]
+1849 0 obj <<
+/D [1846 0 R /XYZ 85.0394 204.5196 null]
>> endobj
-1770 0 obj <<
-/Font << /F37 747 0 R /F48 885 0 R /F23 682 0 R /F53 962 0 R /F39 863 0 R /F21 658 0 R >>
+1845 0 obj <<
+/Font << /F37 779 0 R /F48 925 0 R /F23 714 0 R /F53 1002 0 R /F41 910 0 R /F21 690 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1777 0 obj <<
+1852 0 obj <<
/Length 2180
/Filter /FlateDecode
>>
stream
-xÚ¥ÛrÛÊíÝ_¡‡Î”š­÷Æ[ßœØÉљ۔9í$y IÊâ„E¤ì£vúï»4%Ñ£t:| ‹Åb,.+&>1ñÄ2ž„±f>þ$­.øäæ>\K3sD³!ÕÛåÅå{Nb2˜,W^ãQ$&Ëì‹÷–I6Üûõn±œÎ¤Hî]ÝßßÜ^Ïÿc4@Á¹÷ûÕíç«„»ŸÆÒ»úp³˜~[þvq³ì¥J,¸BQ~\|ùÆ'þÛg*ŽüÉ3 8q,'Õ…öóµRS^,.þÞ3Ìš¥£œIÈ1Äc*Ð! ÂTÓY
-C¦#Xs ºfÓ ˜Gñ¨É?Ø $âÎ…~u])ÀE/31K6›²È3T¹”^Û¶['݈3G’ùQœWœâ“ŽÆÞâ™PÔEW˜“ÃÀYñý«$³”d+
- WÎèTBøõC:(ñ†Ü‚· ÿ'· ‘ãQÜJk.ÿçÛä4Ö˱™¤f2ÂÈ£|‹XÚùõ- °ø|÷iêûÞr<¸KŸÉ8hÕjÄ(1ÿóñ\E±39y›¼‡©€À[ÛÁ®(QÇÚ£ukB’˜€úÊ}fË·u‚N˜”Å¿L
-ÔeBž_Zig±í4òvuûJ¸ r…Û÷óÔ[éû(¾^æ]z¹ÍÛ¦|bpÅW½FL„°?Òüåß¿Þý~óŸK¢nÓ1¸Û›,nnHWwçcüºi;Œ¶ãèZ‰ñ"Cd4@fuÛæéì{¾ÌëÁ¤ÙA[5@-¦{ý}zÿZ)¬4ˆXè÷tã
-–Duê÷íç‹óGßs± 6Ì>€í Ó5 •é—r•€T @3¥g
-Tú˜¨Æ{X
-7tÀâõ¶§z9(6_fÉ»¬¬·íòùé›C¥c¥§Â&A»Ôš–IÛŽö)ÌICÔ3¼aZŠß¹b5Ý«üÂø˜á§ó wÕC>Ú@LJ-Ž9vg9vûÍX¶‘
-¬Íõ1¿?Îò{NŠîU~ªçG-Z zŽË£/³jd—CVeò8¶‹f:ŒN´ {(°U2G¥Á·Ñ *Lâ0h\ß,Þ}šß/çw·#ya$,Ž·JGÃÒ/–4øk‹jƒéHÄQ'Í„©%Øä[€+S¬áØ\gì;$MC®ìëø×°&)KËCÂzÿ¶<¤M9z8?¿·rfÅ@ˆä­-tí,IÕ1”OOEj 1|~HL ¦¼?¨Klmk@
-­;,Z[ymíŸçΰ ½Çâ)¯ßŒ˜BB”àÚw>óš)$„Jß]nÓå¹]lí¸6e†wU•˜Pû6¶„,½{<"…„ø¾xÜ1Û'¥>‹¼QF]'IÂ?Ší”Õɽêñ
+xÚ¥]sÛÈíÝ¿B)5­÷‹_}sb'§›œíFÊ\;Ih’²8¡HE¤ìS;ýï»4)Ñ£t:| ‹Åb,>VL8|bâ,ˆe< cÍ|.üIº¹à“G˜ûp!,ÍÌÍúTo——ïU8‰YÈ`²\õxEŒG‘˜,³/Þ[&Ù8pï×»År:“~ ¹wus{=ÿŽ9Ð
+EùqñåŸd øoœ©8ò'Ï0àLıœl.´¯˜¯•r˜òbqñ÷ŽaoÖ,Õ€àLª@Ž¨@‹1èaH*ÈŠÇé,€óýòcGÀóó3+š”Õ;;“TfÒ_Èqø ÄUcÙU50õ\¾—ª'ŸÌ¬”qh¶oÖõ3¬¡ö
+d’šÉ#òY,bmhç×·$Àâóýýݧ©ï{Ëñà.}&ã  U«£ÄüÏÇsÅÎääm:ð¦oeû¢DkŒÖ® Ibê+÷9˜-ßU :aRÿ2
+ʡɼJ묨idˆ„„}ÈWävÜä•YJÁBrŒ¼á0X`ŒbëÎpWš–&·‘wmM¾{B™®íߪÞ#¡ü¶xBöò:ò6— ˜[žåDpI3q¨÷͈¸,LrïD‚ÿ~WhØ®\cëf(2yŒ9>›B¯Œò 9ÈISW˜-œ.7q7oˆùŸ^n(•¥KM¸÷QÑ)9\ÙØ'~(Y A€Ÿ(;%‹£(/:gÇYŸåiE)9DÏH‡/;£ˆ×óÅÕÛ7cÈg\k¨òê© ³U›c,*á)Ï}(sÌõÒe(PžÑ¹Ñ§Õ¹˜, ³à'¸(³Øa­BÁ0±ÕÔQÄu;Q`+l„mò–
+ÔeBž_Zig±Ý4òöUóJ¸ r…Û÷óÔ[éû(¾^æmz¹Ë›º|bpÅWFL„°?Òüåß¿Þý~óŸK¢îÒ1¸Û›,nnHWwçcüºnZŒ¶ãèZ‰ñ"CdÔCfUÓäéì{~xÌ«Þ¤ÙAÅ}õP‹éNŸÞ¿ƒVÊ+ "úݸ‚%QÇCý¾ýüaqþhà{.Öá’þÀ†Ùp aÚº&`cú%„\e
+ÔDıà浩•>&ªñ–…Bà í±x½…í¨^ŠMç—Yò.+«]³|~úæPéXé©°IÐ.µ¦eÒ4£}
+3AÒu oG‚–¢Àw®Xeuû*¿0>føé<Ãýæ!m &¥ÇÛ³ÛÃv,ÛHÖæú˜ßgù='Eû*?Õñ£-=ÇåÑ—Ùfd—¡@«2yÛE3F'ZÐXˆ*ƒ£ÒàÛhЦ?1 ×7‹wŸæ÷ËùÝíH^ ‹ã-¤ÒQ¿‡„ô‹% þšb³Åt$⨻“fÂÔlóÀS¬áØ\gì;$MC®l ëøW°&)KËCÂzÿ¶<¤M9:œŸß[9³Œb Dòƺö@KRu åÓS‘ÚB ŸSƒ)ïê’
+ ¡Òw—Ûtyn[;®M™aÀýf“˜PûÖ¶„,½{<"…„ø¾xÜ1Û'¥.‹¼QF]'IÂ?Ší”Õɽªñ
+
+!zÆ
endobj
-1776 0 obj <<
+1851 0 obj <<
/Type /Page
-/Contents 1777 0 R
-/Resources 1775 0 R
+/Contents 1852 0 R
+/Resources 1850 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1754 0 R
+/Parent 1840 0 R
>> endobj
-1778 0 obj <<
-/D [1776 0 R /XYZ 56.6929 794.5015 null]
+1853 0 obj <<
+/D [1851 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1779 0 obj <<
-/D [1776 0 R /XYZ 56.6929 626.4701 null]
+1854 0 obj <<
+/D [1851 0 R /XYZ 56.6929 626.4701 null]
>> endobj
-1780 0 obj <<
-/D [1776 0 R /XYZ 56.6929 517.4334 null]
+1855 0 obj <<
+/D [1851 0 R /XYZ 56.6929 517.4334 null]
>> endobj
-1781 0 obj <<
-/D [1776 0 R /XYZ 56.6929 438.0429 null]
+1856 0 obj <<
+/D [1851 0 R /XYZ 56.6929 438.0429 null]
>> endobj
-1782 0 obj <<
-/D [1776 0 R /XYZ 56.6929 376.8269 null]
+1857 0 obj <<
+/D [1851 0 R /XYZ 56.6929 376.8269 null]
>> endobj
-614 0 obj <<
-/D [1776 0 R /XYZ 56.6929 339.1376 null]
+646 0 obj <<
+/D [1851 0 R /XYZ 56.6929 339.1376 null]
>> endobj
-1783 0 obj <<
-/D [1776 0 R /XYZ 56.6929 306.6767 null]
+1858 0 obj <<
+/D [1851 0 R /XYZ 56.6929 306.6767 null]
>> endobj
-1784 0 obj <<
-/D [1776 0 R /XYZ 56.6929 271.6646 null]
+1859 0 obj <<
+/D [1851 0 R /XYZ 56.6929 271.6646 null]
>> endobj
-1785 0 obj <<
-/D [1776 0 R /XYZ 56.6929 207.5268 null]
+1860 0 obj <<
+/D [1851 0 R /XYZ 56.6929 207.5268 null]
>> endobj
-1786 0 obj <<
-/D [1776 0 R /XYZ 56.6929 137.3205 null]
+1861 0 obj <<
+/D [1851 0 R /XYZ 56.6929 137.3205 null]
>> endobj
-1775 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F21 658 0 R /F53 962 0 R /F47 879 0 R >>
+1850 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R /F53 1002 0 R /F39 873 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1789 0 obj <<
-/Length 4062
-/Filter /FlateDecode
->>
-stream
-xÚÍ[[wã¶~÷¯ð[åsV\\ì9}pö’ºMœíÚIÛ“ô’h‹'©);ίï f
-ìVµWS­²IQãÓNšMW5u±bêöJºÉãn]ÖQž—Õ|I]çeÕ-a&OƒëbÍ­†_Ý|à1 ?jÙò÷ÍÃÉoyüºèx9r°X½q9¯gÙ´ÝÈ¢§©†³HUÊ$7F‘–Ínµ ø´+·/Ô¬ê¶+ ¦#{øôìa#0å_n÷i-ýXUðù" EÜè|¥³Äê<ìÁë²›¿Þ–m³zJæMý0Â?,2K¥æìq9ÕZ%Ú s9Uа–tÿø<žR®g6HiZŒÌ!Ó$Mã.¿#ŠÕ
-’—ê5ƒWÅ+-?íª§båµÃ˨ â躪~ì7ÂPÊ*â’¦Og9Úg ¨Y¾Eû+Nt¬N%RKõyµP2qƆ ÷ëâWÞêâH5¢6¼l¸Ïõí¿¯¤”qS`Ì,ÍÝpSþ¹,ÑÀ¤>!4ƒT‘é›1a€ž[™‡ô†Ï][.^ˆ$-”–gD¡’Ô¥¡ÓsµZÑ EוëMÇÌ7øT“EÕnVÅK¿"߸ûášdßóÆ?Ì݃wÐø½©YfÈ€L@Å-sàÀ›Ö½×ƒŸ¡Y3«g–1X½€1aíÁêi3‚}j•NŠ]·l¶UWtÕSI¤à~LoÕH&þ¡á‘oáJ0hhí­ÎÓppúšüZ?^:ܧ™,Ê_„Pu`höfánï¨ß¡PqbèΈ3¯¸Ô›~<4»`.ÁaEoFkàÁ¾Èä6hÉt>®§*ÍÕTKïU·Wn²›w¸tMîßÁ!¥ Â[¿hh å]ÉÉ ýò…ç|U´í˜
-I‘XÜnš|¯ÛP‡òĹè q‚åVÌÕ¼`†g%=Ñ®† ¯šæ×݆h-ÛªY0ƒ[Ò;eMâ¤PÃíy³,š¶.y‹ˆ;ßäxØì|c^îSã†'¨Û‚ _/ʇb·:,øæ›[z¢#¿©»r 3£7?ØlÏÙOÞƒ•ÛYÓúÑìºÍ®£6h'e]n m5õØ×H€ÆXyÖïæÊEgã#yÂ9ê$ƒp”n1)ŒÌ‚ÒmǦÔ&;n`ynz  &$´Õ¼ÀósÃ"ópÏ=´{a’ƒ„/2 ûúCb”IídY 3R©ô²Ú†|ÝSµð
-Xí©7
-rrý‘ê_!y%‘G³œÞŽ#.mÍäJ5æajÒ
-€„àí$uó0"ü©é[yà1No‚Ã=•{ud´Šº|,z ¦ô;-¥yu`z‘ù½ÊÚy °pm°2Ø ó3°™Û¦ž²åî »yâøõiw…é.ˆ-YpקŠævϳÄZ+wÛÚ Ýs“»P'¥ *f§á`œ+pOLï‚øø–¿
-œñj*Gµþ¾ÃEÞë½ÿØ×…yʶk¿®¾¯mLЦéxE"3ò¨¶g gúö¨·‰ÔÙùS(‘Åé½µX¬H¢¬• Ù4n><¥D
-± ˆ^&›fë3«N-ÑŸ‡ÅrØ4û?^c°ÂkÙˆbÇÒhXù×lµI]ðìÓn\ NeG°ŽÓGçølD9òŸH!s 6E^ç"«H{Ù”cØ_Ú,6VAýëˆð
-_Š‡·=öF`“³TaÆç ˜-µ¼Z¬ ¬¹ÿ’»·]±å3ü*‚BÅvÌdñÓ‚¿›…Ïzƒæx‘,
-Œ¯¬ñ¸«¨ã%›bŽïW«æ9T²f/‡•¬ž=‚“Uøp?ÑF¬P&\Åžr:ø‹T:5™u#çÄ{5(èä‹'Üjèù\x3×|S=¸&âü$ñhª&{BSwäuVt§1Õ%ÊîqÉÓŒ[¾Q‰Íb3ýç‰ן Œâõ¨Üƃ˜çSÃdÿá5 üûx|561Y´‚/`-:%Xî©£¼LBü‹ùën»Ñi­ƒÓ:¬¾9eo‘Ø{´€¯Tt7-X]í-Θ|¼¬d4 ­xÆõE£ÒM =Y‘còê@—24à¤}§ G@ê×åkÐOÞÑi‡iK~M×7üá ²ÏÜó-­O:M¢Sí>§$ebðêÀ²{ä”q”·§ok¹Df™=_~T+q|‚ÁË´šªSS¤·Á2]ÀkIÕ°£#^øÝ›*_HeÎFØ衽á}£ 7 6`%üMàÒ2ZËüÆxŸŸ‹ ØÁu™+¶ZÈ
-H?|
+1864 0 obj <<
+/Length 4061
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[Ísã6²¿û¯ðíÉU#>ܪ=8“™¬wgÞØÙÍÖf”DY¬H¤F$í8ýëF7@R¢¢™ÝË›9j‚@£Ñ¿nÀòZÀymM$t_§Y!Íõrw%®ŸàÝwW’ûÌ}§ù°×7Wo?èô:‹²D%×ëÁX6ÖÊëÇÕ¿f·?¾¿ÿöî盹2böMt37BÌ~¸½ÿéö{¢}¼ÉÔìö»÷ø3QØIa·DÌþòãÃãÍ¿ÿzõþ1p3äX
+¬|¾ú׿Åõ
+ÿ땈tfÍõ ü‘Ì2u½»ŠŽL¬µ§l¯®þ7 8xë>’€Ñ62V¥"0zJ&‹­´ASž‹®ãí5ì­³HÊTÁØ­lnæZ%³¼Âg:«÷mYWù–©‡igOÝ®¨Z¢¼lÊ冺úO‹²ÝÀLŽ-"VùŽ[5¿ºûÈc®VnÔ¢áïëõÙoyü:oy9r´X½±¯gS7íĢ籆Kª”QfŒ"!mên»"ø܇Wj–UÓ9Ó‘=|:ö°á™r/CZC?¶%|¾òC7ñg¥“(ՙ߃·E»|{(šzû-ëj=Á?,2‰¥æ"ìq=×ZEÚ
+s=WÐHSÒýGàótJ »ž¤^Jó|bGql,wùE‘o·ð¼T§¼*^iñ¹+Ÿó­Ó'£Ú‹£mËê©ÜC («Kš?_ähÈ@^±|óæWœèT/¬Š¤–êÕBÉÈšÔOà¹ßå¿òVç'ª´áuÏ}nïÿy#¥ ›c&qfÇ›òM&õiÄ ì¤òŒÌßM ô<•ñ‘0pHgˆðìšbõfB i¡´¼
+Å6ö^Êí–ÍÛ¶Øí[f¾Æ§š­Êf¿Í_û¹ÆÃ·Ô û^Öî¹bîÖÎ@ã÷ºb˜12O™ç&ØLa-Á{­Ý õŽYõ<³ŒÁêŒ k÷VO›áíS«x–wí¦>”mÞ–Ï‘¼û1½U#™ø‡†sD®…+Á ¡µ³:GÃÁékòkýxñx<rŸf¶*~BUž¡Å«Ÿ…?º ~ÇBÅŠ±;#ÎœâRoú±®;o.kï°‚7£5ð`_äG²ÔkÉ|9­§*ÎŽÕTKçU7vÖ-[\º&woÈà’á[·hh åÝÈÙ+ýr…çr›7Í”
+I¥¸Ý4ù ÛX‡²ÈÚà q‚å–ÌÕ2g†=Ñ®Æ oëú×nO´¿MY¯˜ÁéJMd¥Pãíy·Éë¦*x‹ˆ;×äxXw®±,†Ô°áê¶ EÃ׫bwÛÓÁ¼o¾»§':ò»ª-03zó£ÍvœýÝy°â°¨7:à€®Ýw-µiÄtöTTÅ!çЖ¢¦žú ð˜T^ô»™²ÁÙ8çˆCžqŽ:J \x¥[MG
+#¯t‡)Å…)µI.„Dž„›^¨ m5ïðüR³ÈÜÜs`€é LrPàïE‚Ab¨0$F™8mrtF*¶ ƒN6@Û“¯{.Wn€BÆŒòå¯/yð¶ønYïöàÓå¶l_9>͵Èfw£áŠç²î]S ÆkxC”éíÐ&†`•è ûË
+ %€}³ø¢M&*àè}q
+û§Å1X—™5ûbY"ÈAã…\˜q
+¾b'ž§ EÖ†~`¼ÇþwŸ¢ v¦àN>‡ÃŽÆí26î>&ÑÝý#ýXÕ»¼¬¨kΟ÷ð‹á;¤Ü
+*‹¸á&Ó|“FqªÌšæ¿!è¼+L)éQ®iʪžfjΊlt$5™9V–•õ8 qàæÓ³{Ø9~éü–k­‹r÷–µ[=ÈÁcòhøÈÊð%‘·œe!¥êg!¿ë¦sîMYòTðl
+šƒ2Rü|4…OöŽr!²õéŠÌq=ÇÏ1®éxoáÚ%;\^ÀÙÊØ€"ýo+;˜ ÇêÔ?€(4áÌNô“¬XÍ~ú+l± í¡,"°)—^Ác‹Í ü¤„dv¼6yõDö¦X<^Tˆ_ö…œOg<”9A/§.D§‘T³«š,aª$¤eµ*— ø¼ØMýÂBÌ$të“Ò‹]^!Ëô¬-w“h à­µV_,—(«“Q¹%Ùï ïUr"û
+NËÝnÁ†[ÕLz*¸çÅû=°ËX[Ž7øÝЧyŽ/\q*0Á
+€ïí$u·žþ<é§òÈcœß‹{*ud´ŠªxÊ{ñ¦ô;-¥~sdzùAemÌ<X¸ÇÖXém†ùÙÌ}]ÍÙr;Ènž9~}în0ÝeÑÞ|àQ %+îú\²ÑœÁîY¥© •»Ãí?…îÆÚÙƒ¯“Ò%³Ó‡p0Î-¸'¦·Þ|ú–¿
+ÿ:ÙfܫݸÀÉè í ¸Šä®é ){‚ Ô 2×C¾=Ê
+j:2s>Ô¸?DšL¾A™\àénÆY$’äòfjé}vçr(• l•âÜ{áÃk–ƒÓQ}.CL(Š‰Êã9%µñ„’RåÂMærxºÄ)h„¿wÌ#
+·—¾µÄ3©“I Mâ±Q;«§µHáÕ5ó)Ã^“f~ª,ƒ
+ @É»`a €7?÷¥ìÀÇb <Ò»/|OJñ¹+ƒÁë²}Ã';]•Â!g|úšÊI­¿/Áp‘÷öçŸúã:?OÑ´Í×Õ÷u´y<]‘HŒ<©í¥„3]{ÒÛˆHêäò)”HÂôÎZR¬H¢¬Uê³i Ý}|Ž‰äcLöõÁe2©:·DwÊaóäÿñm^;H&;”FýÊ¿f«Ml½gŸ·Ób°*99€µœ>ZËg#Ê’ÿD
+™µ)òZXEÚ뾘Âþ2M"‘†*¨;`À-+½—q¸ ]ð<îmðõõSUþNž0ñ'ôæéìÝýíïßk‚äI \”mîáÇ[×QÍî¾ãÖßÞÓñ¯û)gh„ür?ô'Âðé/Ò\ÒÏÀŠò'É–k@éëe“ǹ {ØË®^¦±Ç GnËÍâö©¡©sæ/ßó1ÃþPBJÅÂÈt'*›Ö>Üz·¥ó²òo˜4ÈQ„séHÄâ^CMJãáI4›a•›T€Æ?SŸ£b'v˲٢ãa]EÄfçŽ+TiÙ›û»3z~žpÈWÀ
+hQ„€—k3±>m¸,‚ýÊõ¤¹<È0ËmªO¼é„3¡SÖ 9¶æ+ж]Îì’_uF÷t€KÏö²Þ[[À€öè;öU2Kév$Áho&oñDi–^/Á=x¤n¼b“$ WÒÇÆéj aþnMoó“ȱUsŸ;0hj9éÁs‰
+\Ÿœ~÷¦ÊW
+b™±ÑC'6zèG`ðxh×Èé Gƒ=X ã¹LÍ%ncœßÌDPíè:Ï¥ÿ°šÈ
+H?\?ã7|‚ïQÿÓøË€¿•»nÇ7ø
endobj
-1788 0 obj <<
+1863 0 obj <<
/Type /Page
-/Contents 1789 0 R
-/Resources 1787 0 R
+/Contents 1864 0 R
+/Resources 1862 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1791 0 R
+/Parent 1840 0 R
>> endobj
-1790 0 obj <<
-/D [1788 0 R /XYZ 85.0394 794.5015 null]
+1865 0 obj <<
+/D [1863 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1787 0 obj <<
-/Font << /F37 747 0 R /F53 962 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R /F47 879 0 R >>
+1862 0 obj <<
+/Font << /F37 779 0 R /F53 1002 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R /F39 873 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1794 0 obj <<
-/Length 2137
+1868 0 obj <<
+/Length 2134
/Filter /FlateDecode
>>
stream
-xÚ¥X_sÛ8ϧðÛ)3Ë?¢$î›Û¸­÷Ú4Wygî&ÛE¦MeÉkÉîæ>ý¥H“tæÆ) àÀlFáÇf2&±âj–¨ˆHÊä¬Ø]ÐÙÞ}¼`Ž'ì™Â1×»ÕÅÛ"™)¢bÏV›‘¬”Ð4e³Õú6xG¹ 4¸ºÎ²ÅûðŸ‹ÿ|\\_†L¥Ró››ÅõÕòß—!—˜•ÒàËüúùgÜ»¹T<˜\d—ßW¿_,VƒZcÕF§¿.n¿ÓÙ,øý‚7Ì~‚¦Ÿí.")ˆŒ„èwª‹ìâ_ƒÀÑ[{Ôë
-F 1÷ø‚³cDIÉ'ΊĂ ëŒåÕ5•ýqsóõÛ¥”Áʘ‡ÅÈ‘tò˜¤Œ)<µq<lÄ“’4¢)°Žû¦í<r8#RÖ3å-\Î’àNëÚPipw,«7–Ý=n¢’°õ'•´¬;}¨ó®lê¼*ÿ«×øjÝìòÒ ©óV†oÚã~ߺ7°âQP:éEî˜ó¢Ð{·™×½´²ÝWùƒ×Ô¡±e
-ø‰€°Ü
-V̳÷Ë%p&ìQ  -ñø‰QJT$^ó'4NÇ”ï÷‡KP¥ÙʼÓÕÞQ4õIºÖ­îóC^€wp©ë¢Y—õWÍƯ"RwzÓØ ÜºÕµ=j­f\Ê ®œÙ˜F9pÆ*ÀSuÛáFטgj’ 7Z}8Y€nÜÓùaÁ·&òöÖBXnÐì“}¯Q¸“™D䧈‘öÅCsüÇ™«ò‡«Ïã¡F6ðˆÝL¤*gFe k>~mã§PppQcœ'8w*çmSCŒ ÖAôQ^ë9|û!rFaÀ¡ —î ›»Ïà„Óˆp%Õ,V1(©_NTš¦~8 ‰áX$âæX7NÂÓ(y¼Ù¨xµÌæï>/<ÁIB£ˆ;St}*ñ³Õ;]wè„S‘{Wiƒ§†«{ç<ësëOçs»([| qb­ÝîwCáÃ( PO¿Pâš‘dž­îøyXãA/
-€ž ÄÄ®ÙûoË›Õò뵧0÷9ÔžAj¬
-¸âÁ±uïÜð
-3ñº±¹—¨€ýfæ.3;åî`ˆbÔJio¾±½x‚£<À€µ©ˆÈj§4õÛWËÜ(+±ŸÑÍ=Ù|$ ME³ §ƒê×zm‡ÑàC\²÷ž›Î JBG¼äƒ¿¡ø©(¿©Ù8v0…we‘WÕÃÙx‚áDø£G-*ò-y3 dP¨^ÁŒ× ˜ÑsMšÅ fÀ
-'8 åÑ£àÉKCàSÿ åÉݱêJ
+xÚ¥X_sÛ8ϧðÛ)3Ë¿’¸onã¶ÞkÓ\å¹›l™v4•%¯%»›ûô”"9JÒ™?¤@€€
+F Ÿðg3ƈVŠœ¡4‰ÎË«k4*ýãææë·K¥‚•5 ‹#é,äIÓxjãyØ€'!‰¤ °ZŽûºi'äpF”¬cʸœÅÁ1•¥’àîX”-nþ,Ú{ÜD%aëOªhQµæPemQWYYü׬ñÕºÞe…Re;¬ ß4Çý¾>´o`ÅePxéy晳<7{¿™U´¢Ù—ÙƒWW¡µe
+ø±€°ëÝ
+VÌÓ÷Ë%pÆìQ  ­ ™ð£”h)^ó'4ŠcÏ”í÷‡KP¥ÞŠ¬5åÞ‘×ÕÉÚƯî³C–ƒwpiª¼^ÕWõfZE¤î̦vøuc*wÔY͸ ”A\y³12àŒt€§þ:š¦Å¶¶ÏÄ&n4æpr:]û§÷/(‚-näí…°Ü Ù;/ûÞ p/3–䧈b‘îÅC}üÇ™Ë⇪Ïã¡B6ðˆÝŒ¤jgVe g>më§PppQm'8÷*gM]AŒ ÖAôQ^™9­|÷å( ¸&4æÊa{÷œp* ×JÏ"Rÿ
+ p¢“$™†“°—E:¬éÆiLx"ãÇ›­ŠWËtþîób"X¥"TJîM1Õ©ÀÏVíLÕ¢NDî]i,žB®î½óœÏ?½ÏÝ¢hð-ĉ=´ö»Üõ…£@Y4þBÝMˆkV’}6¦Eâç=`Íz(2þ:|%*Öžép™Çjã°‘144‘NÜ‘ËÏX6Î~†¯oM›¿=˜¦.Or|3uKN ´oþ9ýú:‚¯‹­Sfaò ´h°¶›‰ÝX%‰Qw§„ãkR(šªãºj“‡?ÌÃë´‹€3–ŽõÚ"ͤR
+øâî­¡Á±ñïüð
+7®Ø4¸ûÉ”å.«ºPe²—÷éËü}Ê€‡¸Ž¬‡|tt@
+3ñºv¹ë€ýfç.;;e-î`ˆbÕJhg¾q½xŒ£<À€µ­ˆÈê¦4˵ۗÇÜ}('±›Ñí=é|  My½ ǃê×fm‡ÑàC|²wžÏ JBG¼ä‹¿¡ø±(¿©Ý8¶0…·Ež•åÃÙx‚áDø£C-*²-y3 dP¨^ÁŒ× ˜ÑqšÅfÀ
+hH^Ô­çšPn„LÉx<Ö.Ý›¼p Ñ Ëß,QwwöïKÛü´Ï»¢õlº|ÈàO07MàÇ %T‡U')¿¯‹ÜŒ%¹ÉÃÎpG­ÍBË˯;ùÎ
+"œCÊE’Låñc¿áµTÞ÷jè{X°³¼G­Uçøgþ5††ÓþÕ;‘+´o)þï”ÿ9‡[$É3ešÇŠÀá¨SÊz‡Ñä)ùÿžŸêþ?^Ï‘endstream
endobj
-1793 0 obj <<
+1867 0 obj <<
/Type /Page
-/Contents 1794 0 R
-/Resources 1792 0 R
+/Contents 1868 0 R
+/Resources 1866 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1791 0 R
+/Parent 1840 0 R
>> endobj
-1795 0 obj <<
-/D [1793 0 R /XYZ 56.6929 794.5015 null]
+1869 0 obj <<
+/D [1867 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1796 0 obj <<
-/D [1793 0 R /XYZ 56.6929 751.8114 null]
+1870 0 obj <<
+/D [1867 0 R /XYZ 56.6929 751.8114 null]
>> endobj
-1797 0 obj <<
-/D [1793 0 R /XYZ 56.6929 637.809 null]
+1871 0 obj <<
+/D [1867 0 R /XYZ 56.6929 637.809 null]
>> endobj
-1798 0 obj <<
-/D [1793 0 R /XYZ 56.6929 571.6272 null]
+1872 0 obj <<
+/D [1867 0 R /XYZ 56.6929 571.6272 null]
>> endobj
-618 0 obj <<
-/D [1793 0 R /XYZ 56.6929 530.4875 null]
+650 0 obj <<
+/D [1867 0 R /XYZ 56.6929 530.4875 null]
>> endobj
-1799 0 obj <<
-/D [1793 0 R /XYZ 56.6929 492.9536 null]
+1873 0 obj <<
+/D [1867 0 R /XYZ 56.6929 492.9536 null]
>> endobj
-1800 0 obj <<
-/D [1793 0 R /XYZ 56.6929 459.984 null]
+1874 0 obj <<
+/D [1867 0 R /XYZ 56.6929 459.984 null]
>> endobj
-1801 0 obj <<
-/D [1793 0 R /XYZ 56.6929 390.8804 null]
+1875 0 obj <<
+/D [1867 0 R /XYZ 56.6929 390.8804 null]
>> endobj
-1802 0 obj <<
-/D [1793 0 R /XYZ 56.6929 303.7532 null]
+1876 0 obj <<
+/D [1867 0 R /XYZ 56.6929 303.7532 null]
>> endobj
-1803 0 obj <<
-/D [1793 0 R /XYZ 56.6929 225.6163 null]
+1877 0 obj <<
+/D [1867 0 R /XYZ 56.6929 225.6163 null]
>> endobj
-1792 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F53 962 0 R /F55 970 0 R >>
+1866 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F53 1002 0 R /F55 1010 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1806 0 obj <<
-/Length 2941
+1880 0 obj <<
+/Length 2940
/Filter /FlateDecode
>>
stream
@@ -7879,91 +8240,86 @@ xÚ¥ZmsÛ6þî_¡ò4BðÊ—¹Onâ¼4­‹”¹ëµý@K”Í Eª"e_úëo P DJ9g2
“bHa…
›U¸Ð×ïŒ B°$5 ™…TÙ&o¿oóc­YlL0àpj@:ΩS«(î‹7ßæËâwÎeÞÀöEÉ´}Ê©R¿Tù«éÔ
Gë#Ô·üûµb
-;¬"3]P{:}ÎÊýá«•ÒH31 ‚#¹ g:UÚ7û¦¥aó„ØQýÁÍúŸû»[jù¾®]w†ÃNfŠÇLàÉ ôŸ#íˆDJ
-š5:š5êf„Gî›|w4uøï™jaÔ hrªZ4nâݵ€=£‡eæ!EÕäÕ¬¿ Ú–¦h‹çi%Àqäël_¶ y˜¶¦Òí6Ôh½Æz‡ê98k‹ºb'¾Ætk´ uÞêCÔ¸Õw(kõË!«çL*ð¶Ääe ›qbòÒ0a’ä¼dj@´žÉ+pŒš‹¾l«U±
- 6µSÎZ_Ë©ZÄŠœÒ¦-k[®¨sYWmVTEõxô‘ *ÍS½/ú){Î{89m:—ãGDMàNódúqMmU턲hbÈL¢Ÿ×¢Oéí9)ÕV?ÞQY¸g`öjœJ2™$—ˆ ÎÁ£,N¼zª˜R‰<?¥ Ln0œÌJ¤¦?¥UaÀ»QðœUT~™ßüòÖ¼†bþáFP›wã¯:]¹w¨(É|]kþß-8ʪW',†º Î
-âñ²¬_pÓàÏe;©?—ñAº¶Ê{û㚘¡ “Bó3*8•âÁ´ö‘¤IC+@‘ɧ à[&U·»b“Sumå©7ôò—wo¨Y•Rí¥(Kª=¸Wб¼X»ñê¦)Êüh |Zc øR4†4p¬(Æèrœ¼\³Të 'Fˆ:C^²ä}:914ÓZ_˜Òƒ¦ì)ÓÒMùyWT>¸rÎðÓE³ßl²³øÚ.ä°a‹–™c+t^ì7yDm܇”H)cg•«ªiòå 8lÈ¢ö+ñ®~to4„;Úˆ Ž%DïM‡²{ómloÎNÙíÍé”C{Ó›ò=™•ÓvÜö¾S1à(%²äÏû0&>zm\ƒZ¡¦£  Pg4èQVƒÛ‹éðvW·õ².GÓá³ÂÒáSéÓážxpŠ£ß)\ItNÖ#‘H¶Ëå¶ØiܹAë’ =È ³•&¹Gx¬ö›ÜKlzÈÛ—<¯¨ƒ;˜eµ°Ž”Ç}g&±5w€ƒëß TXpŸÉAì39è»wd‚ªw¨ôÔåu^ØHçÖBÛ[rz£,J?QŒŠJëç±~Þ¸wÜúŽòÜ»“f¿\æÍîÆI¬’”s)
- Qã$îP–Ä»KQèį7«üù”Äxá$äyá:Ô€tý
-%¡X>e»lÙZ78Ò€Cî¨ÄK×föˆw
-·}«¬uƒâí –nv~AKQ)²U_”“hK„Ñ–»ßYøhÂ.2+éüì©.…0 ŽGétéva5|w¨„ð +‚‹:!Û.û öÑƸ]$D·†B΋w
-òC‘Æâ‚Û PgÜŽGY·Ó\¼TjÚ]^=¶O§nG1žŠè¼pj@ºþÙ™0Ë´/Þ‘Ûáž ¥²€•Ì¶ø#”sG”
-Rúd}ºw’.Í8ô„¤ðR2•èähQG’Ȉ núŸ¤3i‰÷$GSß|]|xs÷?g½¢¦»û“Fá‚î@=‘`ç¦ïôîîý»6ÄŠ|p…ÁY䂳¨';4a͸H~ïØ^Šcé‡ÌŠ²h¿÷{³=ôW­U¾›;
-¯„ËÞ ÍN:"wIßaìà:>¯–»ï[ç5qØqÆÃ^(}!¹@gøî@–îÏo}Êü9?Í+` à çÄê@§rõoÜ“&êÉE9E/i^åûÇÇîæ̊źô¸S9Ħzä˜ ¥‰Gïoïn¿Ü -·o»Äp>@zØ@ ¥ùÿzê’ê^.A€Ì3‡tC{}.ëͶÌÉŽãÔÇäë}Y®““‚v,í=]
-’±—šò_Jû{#oܯ
+;¬"3]P{:}ÎÊýá«êJŠ˜‰ØˆÉm8Ó©Ò¸Ù7- › ÄŽênÖÿÜßÝRËïÜðuíº3v2S<fÚ
+þۂ笢òËüæ—·æ5ó7‚Ú¼ÕéʽCEIæûèZóÿnÁQVí¸:¹`1ìÐu¨3êô(«Îõ€]¥,J”7«u™=žX•HX¤ 8+W‡¬gUR±HÀùÙ“lž#acáx•>Ïc<¸Êp3bt|GèC§ J—î-{ä†ÈÃiDCõí(Vî Æ׫ò;Õ<î±*þ©!+°¼(‰úVöiþ‰öÞÖÒáa^<V¿ ÕGL¡ÁKŒI™Òñ–„¨q–t(Ë’Çá˜
+ĢųÂyЀp=¦ðӸݞthŸJêž}âsFÅÛbe9@-ò²Ü õâC`©JK²TloŸÐÑãÂÒbq™Q—eý‚›Ž
+wH‡O¥L‡{âÁ)Ž~K¤Dp%Ñ9YD"Ù.—Ûb§M<zpç­K‚ö ?60Ìb|Tr˜äá±Úop/±é!o_ò¼¢î``j”ÕÂ:R÷™4ÆÔÜRþ ¬ƒRaÁ}&y°Ïä ïÞ‘ ªÞ¡ÒS—×y`#?X m?lÉé²h(ýD1**­ŸÇ
+øyãÞqë;Ês ïNšýr™C6»'±JRfÌ¥(4D“¸CYï.E¡;¿Þ¬òçSã…“ç…ëPÒõ Å —¦/^ïNGq:*©W½·[±Ì©½9–$n•Û4LG†b”Û€Übè;l↺VµŸÇ&mØíØý\¬ÜëÙÀÂè(•Þì_ƒ¶^{J',֘߆œ&!N°
+9/Þ%(ÈE‹ n'@q;eÝNsñR©iwyõØ>ºÅx*¢óÂu¨éúggÂx,Ó¾xGn‡{‚r”Ê
+üâIȬSï jÞ‡&3-Ø5õ­µiÁ zQA½omxçbIT4ý vˆzÁÄð\XÚÏO.Žð+ ¿WuŒøæ¯T‹öè¤éJ6öÅ\(É’dì
endobj
-1805 0 obj <<
+1879 0 obj <<
/Type /Page
-/Contents 1806 0 R
-/Resources 1804 0 R
+/Contents 1880 0 R
+/Resources 1878 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1791 0 R
+/Parent 1883 0 R
>> endobj
-1807 0 obj <<
-/D [1805 0 R /XYZ 85.0394 794.5015 null]
+1881 0 obj <<
+/D [1879 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1808 0 obj <<
-/D [1805 0 R /XYZ 85.0394 181.7045 null]
+1882 0 obj <<
+/D [1879 0 R /XYZ 85.0394 181.7045 null]
>> endobj
-1804 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F55 970 0 R /F23 682 0 R /F39 863 0 R /F14 685 0 R >>
+1878 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F55 1010 0 R /F23 714 0 R /F41 910 0 R /F14 717 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1811 0 obj <<
-/Length 1931
+1886 0 obj <<
+/Length 1932
/Filter /FlateDecode
>>
stream
-xÚ¥XKsã6¾ëWè°¹2D
-©=h„Ô‡—HPXÒh,6J€“G¬D¢(Œb¯yÐê`˜zòBC,-ÓWŒÃ\]‹Ñ²*›$+k3Kô_¤Ñ6ó_&¿™ÁîŠÄ#µ¬ÚÿÔКMÒX!IiOÊ
-i¥ì÷eÕÀ"Ð7¤Ø&yV¯µ*Õ.ÉÍÄn“šÙV튬®³ªôâø¾#y€dˆðõ·}4B‚I‡vR¦~‹ÌÅwY„s)zÑ(D|”˜鉰G5ž
-k«wÔ‡¢PÍ.[š©*—»Ã¶c›Ï:CZ™õ~¹±Ò-å§ÛñµuOÇ' VíÛþÎ@ªžUiFͦگ7nl±Ý?åZ =Ö ¢=x;Ñpšew²VìŸ{àÉÁë‘Ň ;VÚp #I9kÕ™ü:¾½ÿ4ñ Œ`&¥a\èx
-·9¤ÄwEÚ=˜¿HÄÁSÖè DîùØPš@iAÖsF ¤U—Äl×èØÞD_Afí¨þ—Û\¡eUx4Eœ:^.en»æyõ-+×fKQ8aí[µÏSC²ìàä{•þÛ£S
-âh=×OËîg
-ÈCAbþ[Z“ù€,Áršœ¦GoѶZc¿œ&î4ÆOÊÆ:‡‹…;ƒŒ«Õ‰¯e
-ß‘O¶ýåHIôÆô‡P/ë;mÓw
-3wÜw‹¾|1Ä0 ­9ûðzŒCº ¿´Q«i/}»£2ºPð:¶@PÄDº uæŒgb lË7ƒ !q—„» L ò8ã'1ùdóóñŽPxXte€ïÊSïêÏ'6MŽ?Íï.
-…! O%Î.J¬«$€N5KòóÚ¨A‰_Ýê¢thÖÇjw^„9E˜ž6kΕÏB¡ǯ<mÛvž½ú7`ULU¤êùÌýÆüàõeÀ›dל»áJ ¨+:©M7z>«´“ŸC7•”ûëÑV_±„l&edkÛ`a¸áN#„½™Z<‰¡é%“›Éüúaz¿˜ÞÍ<õíÛu•''‚MiÈܽԌ:; Ö–öÐþëÏT¹œŒ¦!¹öÖ2ÎL–„Ó,
-!@¿‹zª"Ü]¢üüúòÐ ù‹ÆqèYL£h•ÒÇ$X¼RÝ=Ô¾ÖýÿÖ·endstream
+xÚ¥XKsã6¾ëWè°¹2D
+©=h„Ô‡—HPXÒh,6JâÇŒ±‰¢0ŠA¾æA¿«ƒaêÉ  ±´L_1suP,F˪l’¬¬Í,Ñ‘FÛÌ™ü× vW$©eÕþ§†Öl’Æ
+IJ3xRF
+U6°Aí7˜Úˆ‘7  1¡Úí.{AxAjHX|
+/#Çð2<JòuµƒsA½UËL3. Ÿª<­µÇáèC{j WOÏYµ·Ÿ×j¹‡ÏfÉ
+¸$ÖÞqÏÞD_Afí¨þLŠm®Ð²*<š
+Ž"N¯F—2·]ó¼ú–•k³%ˆ( œ°ö­Úç©¡?Yvpò½JÿíÑ)…@q´žë§e ÷3€S®µ=ä¡ 1ÿ--áÉü@–`9MNÓ£·è [­±_Nwã'ecÃÅÂÁ
+Þ%¸‹PªC™^í¡œ!vÎÚ U…ª2 š¬ðUã,‚¬‹£S™+Ì€†1â2:i ª}³Ý7Á*Ë}òûåC'Ý6ÝèwÏžpõëns—&ú †-:‹tâòËXHä,['1»(1Ó—ýÙÅÕïzê¤òˆtÅ-±Â[œ¡šH¦è+çøí¢Î¿e (íCA 0dá©ÄÙE‰u•ЩfI~^[5¨ ñ«R]”-ÂúïXí΋0§ÓÓf͹òYˆ#áø•§m»ÑγWÿì Š©ŠT=Ÿ¹ß˜¿¼¾ x“ìšs7œC uåB'µéFÏg•vòsè¦òïr=Úê+–ͤ샬cm, 7Üi„У7óB‹'1”"½dr3™_?LïÓ»™§¾}»®òäD°) ™»—šQggÁÚÒÚý‚*—“Ñ´1$×ÞZƙɒ°`š =<̧ ­ÿÆãdF
+­„&Wé~©úÛjE”•ö¬vuÛ$ë…je_¬Þ=lMÏ!c§5ã¶3Rº‡h,–Ð$~Ñ´] ÐR•«u¢{r»°2f¹Û Óˆ¶8
+Np£àÃáiœ>ËMÖvTVÝÚP]»íÞAŽ`{€£fÜ•·eÕ¾A™If‹«T5úUÅ( ó§Ãé€U¿ÔÄN^òtL\¹NÏãÿР„{^ÒS­ÑQ.“—,ÛÚ‡…diß(,¶êBçžX!èwQOU„»KôŸ__š!Ñ8ý/«
endobj
-1810 0 obj <<
+1885 0 obj <<
/Type /Page
-/Contents 1811 0 R
-/Resources 1809 0 R
+/Contents 1886 0 R
+/Resources 1884 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1791 0 R
+/Parent 1883 0 R
>> endobj
-1812 0 obj <<
-/D [1810 0 R /XYZ 56.6929 794.5015 null]
+1887 0 obj <<
+/D [1885 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1813 0 obj <<
-/D [1810 0 R /XYZ 56.6929 635.5323 null]
+1888 0 obj <<
+/D [1885 0 R /XYZ 56.6929 635.5323 null]
>> endobj
-1814 0 obj <<
-/D [1810 0 R /XYZ 56.6929 476.3563 null]
+1889 0 obj <<
+/D [1885 0 R /XYZ 56.6929 476.3563 null]
>> endobj
-1815 0 obj <<
-/D [1810 0 R /XYZ 56.6929 407.9215 null]
+1890 0 obj <<
+/D [1885 0 R /XYZ 56.6929 407.9215 null]
>> endobj
-622 0 obj <<
-/D [1810 0 R /XYZ 56.6929 365.2162 null]
+654 0 obj <<
+/D [1885 0 R /XYZ 56.6929 365.2162 null]
>> endobj
-1816 0 obj <<
-/D [1810 0 R /XYZ 56.6929 326.9947 null]
+1891 0 obj <<
+/D [1885 0 R /XYZ 56.6929 326.9947 null]
>> endobj
-1817 0 obj <<
-/D [1810 0 R /XYZ 56.6929 293.3376 null]
+1892 0 obj <<
+/D [1885 0 R /XYZ 56.6929 293.3376 null]
>> endobj
-1818 0 obj <<
-/D [1810 0 R /XYZ 56.6929 221.9809 null]
+1893 0 obj <<
+/D [1885 0 R /XYZ 56.6929 221.9809 null]
>> endobj
-1819 0 obj <<
-/D [1810 0 R /XYZ 56.6929 108.6903 null]
+1894 0 obj <<
+/D [1885 0 R /XYZ 56.6929 108.6903 null]
>> endobj
-1809 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F21 658 0 R /F48 885 0 R /F47 879 0 R /F53 962 0 R >>
+1884 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R /F48 925 0 R /F39 873 0 R /F53 1002 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1822 0 obj <<
+1897 0 obj <<
/Length 3191
/Filter /FlateDecode
>>
@@ -7971,170 +8327,171 @@ stream
xÚ¥Z[wÛ6~÷¯ð#}Z±¸’D÷)mÜ4mâdk·»Ý¦´DÛl$Ò©8Þ_¿3˜o¢¤œ³öƒÀÁ
iÏ—›3q~}¯Î$ó,ÓbÈõÝÍÙ7?èôÜÅ.QÉùÍÝ`®,Y&ÏoVD/Þ¿¿¼zùúß eEô]|±°BDo_\ýúâ ÑÞ_8½xuy}±Y*S`2È–ˆèåÕõõå÷‹ëׯ®þóîêòâÏ›ŸÎ.o:Á†ÂK¡Qª¿ÏþøSœ¯`?‰X»Ìž?Áƒˆ¥sê|sf¬Ž­Ñ:PÖg×gÿì&ôú¡sÊ°:‹m¦Òm(y.eì¬U#uX'Zi¯Žwïo^¿»ºÞÛ‰ˆ…¥JÄN¥jÞ Ì´r……g̸pÝE>]ÒéXëL_20Í,©K‚Áµtv¼äoRʨؖwÏdè|½¦Æ}QÛ¼-VôØ”÷UÞî¶2‹Š&>¤›$sq& qT7C®Ãºé¸¼n–¸ä7?X;à”"Vl+<Ër7ÍT0©l,m–—¬ãšm¨C©Á%cÙ®‹eùAU4¤¬ö¡ Ä5H6߬ï&Lÿ­«â°BmÃb§:à:¢ÐÀåúqN¡2ΜլÐÅóž:¥‰³$µÇåê¸f©S‚ g(ÙÍ…9ZÞ^,´’QÓixEÍ7ò†Gtåýµ¬î'Ü@¬·9¯ž'ý°„ÎïD6¥£›‡’g¯Û²®¨½Éy‰Ûb_8Pdì„ÊP Œ3°©ÍnÝ–k6y[nŽ‘´q";aó×›.oóõŒÍ] ÞŸ²ÉWõ&/«=«ƒÛ -’ã’u\3¢ƒdÓe{Åx
J šS%6zùÏ߈Ö-QA@bZ­J² RÛš¨WÐðVÅžÂ
-ˆÄŸ/‡–ä±ÕŠ—¸îfG»k‹v/¨µáûÑ–?>Õ*˜pC$Ömí%Fx•oŠÁO~¾¬ýïê°OØTÁ©'Òã>1ä:ì—÷‰ÕIX•ÛbÙÖÛ}4°"Ná$>*\`šnäÖÆ©4z,Ý›ºþHŠºyAµŒ2€Ç©ëñ
-}Äsæ†l@ÛD2†ê:@59ûdV-ã<tnû“™m«, äSü‡¡dß9íu¦526J&'L;à:bÚÀåM{?“Od.9±d`šYr’Odi:YrÅxü]Ï:yoP:Êõª?
-C·g®7ôĦõm¶«Ñåç²i=¤Ÿ\ñ© ÉÍí(ú6õ§bu8ò ËÐBÙæp1OàòæiN¦4M›oÛžû¡Sš$=.^Ç5#ß(ø؇n¶Ëk|b(¬BcEæš1ûÊ w>=Õˆ_I ÿò T
-ÔÜ7o°á¡Ÿòu †Y(gù0FŽe^Va
-îÝKÈèEEÌá†ìÒóRË˧ðxZ•Ĥ=åö™×§Ÿj·¹ ¢•<ÿïð÷öíË…ß‘Ÿ'/üñíÛëkô÷4ªê6ÇCïxVÉH ø³ ©1P³! ¨²
-<²‰èw<bÍ9©†-&&ù'µ.NS›1+{¤Ñ
-S|=R‰
-’Uc3®è±G  PÅ…s ÈA×Æ¿)ס¾œ€¬´/ì®'“Ã>L0ƒ¾â4j¸;m$ï;ªúé««˜ÚnØ; n*n&Φ^#c8Šì
-Yw9ÔαK[é§>qA2ä:Œ]—Ç®»Ùb9ÉtÐT½kwíâ®\ï£$T&Môqñ:®ùÆé™MÓ±€¾LÕ2‰ª ÿ!£ 4˜†…&þ’M IX"ú ºç…Xh¡Î¥{`mÃÄx‰âDº¥‚\+ífÛƒ·/®XÓ3Ês€–¤±4P9cF)¥b¨¤åØú,Á¡’Nñ{wYùÍöå–à‡}H¸X›ìÄ…Ëëˆ.ïC{ø¸1'– L3KŽ*0Î`'K¾ß–Uˇ~ÎÁC½ee4»Í&ß>¸Œ k®0¸â¢,÷A~¿ÛÝÄ-ÎHÊ8ÀÕ]%U Àì-ˆ¾3cÃÔĉs#?˜³ŽJ3˜×ÈN†\‡­Óqy딧®Ã@•Åªýä|4¶£²u\3““Ú©K÷¯.ÓÈéç‘NOe½kÖÏ‹œØåì[%'yÓ„Þœi>(ðlj>5ñW›Ø¸-† ­ÄÙ
-ÿLLƒí2fFo“Í.t»5 óQ ‡ÖqRÝL3ýçå:”a ÿ”3gÎS€kƒäwtg0©\„g5Méæ‹jaÒ]V£:k_Y¨®²ÈižP×e¬Û¹¦ÏQî àû®õar!h„Íf²Û,/ƒ½·LæÑ4b¸7“ºçV¿OeS»iÊUA#W¼rM¿·¼ª—’®Và©©ëÊOæ<4Ìå.íñ{–Çu¾ä*Ä…PK´ëÏ2 ‰Rw¤H§‚Þ›Û?5ÄÀn¯£¿wq ñq {ÛnÒ’Ü·[-™~[´OEÙ€{ôª‹H*T]vˆÍþ2ªk% âÞÑrÅ—ûñc- …Ô_« <B†?{'Š¸/.jCÈæa¿(ð´¬ ©O[Œür Oc­º´)ÔK ¯5z³îðó–Ëi …›R“rºV§tK„Í„ëa aªŠLUÑisâ ñ”˜@‡?
-…<põ :*¯-ýjØäJæ_+á°¢¿šr
+ˆÄŸ/‡–ä±ÕŠ—¸îfG»k‹v/¨µáûÑ–?>Õ*˜pC$Ömí%Fx•oŠÁO~¾¬ýïê°OØTÁ©'Òã>1ä:ì—÷‰ÕIX•ÛbÙÖÛ}4°"Ná$>*\`šnäÖÆ©4z,Ý›ºþHŠºyAÍpKð8u=^¡x®ÑÜ h›HfÃP]¨&gŸÌªeœ€‡Îm2³Mb•eA€|Šÿ0”ì;§½Î´FÆFÉä„i\GL¸¼iïgò‰Ì%'– L3KNò‰,M'K¢¿ëY'ï JgãC¹^õGaèöÌõ†žØ´¾ÍöÃ`•"ºü\6­‡ô“+>•!¹¹EߦþT¬GdZ({Â<®#æ \Þ<ÍÉ”¦ióm»ÀÓb?ô`J“¤ÇÅë¸fä_ûPÃÍvyO E€Uh¬È¼B3†b_¹áΧ‡¢ñëQ" ô_~JšûFâ-6<ôS¾.Á0 å,Æȱ̫ÀJ
+Ùk’©y€3:N °®ãš‘np
+ -ÜX¼à¤ãCpØò
+!±øüÈYG6½àŽ'@¬9'Õ°ÅÄ$_â¤ÖÅij3fe4ZaŠ¯ÇAê1
+ôpÃ:Nª›i¦ÿ¼\‡Ò",áŸræÌy
+pmüŽî &•ƒ‹ð¬¦)Ý|ñ@-LºËjT‡`bí+ ÕU9ÍêZ Œu;—Ãô9 Ê|ßµ¾"ÌB.°ÙLv›Eãe°÷–É<š¦B ÷f2P÷¼Ãê÷©lŠC`7M¹*häŠW®é÷–WõRÒÕ
+<5u]ùÉœ‡†¹Ü¥=~Ïò¸Î—\…ø¡j‰výY&!QêŽéTÐ
+9ú8Âe,2m«ló§C‹@:/35MçHò“I:Ï—¸Îöç½³Q =nKHNËõ3“!(ý›6ÿD%uB^
+ÏTFb‹‚«gÈòË%=„ôÛáµ’kž†[<ãj·y¤I€l‰d@Œ÷”‚Îœ¼˜­h
+z
+¾ía}…v+†?ìôq
+[ž¶8û÷G üRãã7”À Z †Ç,ƒõ^Éw†öªËUu;—lòárçïL°V(ª¦˜Ü3â&{5‡76Q"sø6C‰ÓaŒL"þ:•·ÿU¶-³³¯±‰Õ¿ÅÞ“kö%öP0JÙU’ôŸ¨$¥—ÙìSžÀGQB¾t«ÏÞè<v`ÿº¼+ðGøNÃG:@g
+ŒÚ?S ¿lš]˜Ö{#ÐøýxÝÄ;Ïá·ÙýVR7M\ñ» ü²!¯
+_”t>ê2ʳP]ÂXÞÆ—Ò@)«%¿ƒì6õLdŠ
endobj
-1821 0 obj <<
+1896 0 obj <<
/Type /Page
-/Contents 1822 0 R
-/Resources 1820 0 R
+/Contents 1897 0 R
+/Resources 1895 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1791 0 R
+/Parent 1883 0 R
>> endobj
-1823 0 obj <<
-/D [1821 0 R /XYZ 85.0394 794.5015 null]
+1898 0 obj <<
+/D [1896 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1824 0 obj <<
-/D [1821 0 R /XYZ 85.0394 751.8312 null]
+1899 0 obj <<
+/D [1896 0 R /XYZ 85.0394 751.8312 null]
>> endobj
-1820 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F55 970 0 R /F39 863 0 R >>
+1895 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F55 1010 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1827 0 obj <<
-/Length 2975
-/Filter /FlateDecode
->>
-stream
-xÚ¥ZÝsÛ6÷_¡·ÊÓÁI
-3wÅ·<Löº¸/Óæx¸f鎵X™˜›„`6†RšÝäD‹üxå›ÇšZõž iV”÷ÔU”kêÛåe“n=®·©ë¢ö}^懔x‚½Õ#ž<ìÇ}3L&I컬Ùå¶Ø䈧_22Ët[WÔÛøo]\þµ©}t (šš~?¦Û"K›êPûuÊÌOÏ@¢GÝ=ûΠ«:ú•×éšÔÇcÈ`wtÇVµ,*œ‚…Š õlS·î½c™\–ÇÝí cÕ†:?†kêû²ªü®¡î¾øÔ2mèëô
-ε=Ð(´d‘0vžÈ5BeOÌZ³äÙ'Ø*âzyóñ
-É’H¢Î jl#ïÅÉt?QòømÂhÈQN¸Æ7+ˆ]ðûU]wÛ¼]V¨éGzò4Ž®,øΓ¾ÿ2ú+Ï÷øs§àÈ-œ¸û¹W5hŠW#»DÜ4¼]=”óN[Ć)Ó
--ÿùªÂ2kÕYõX_ѼL-Ê™…HËO8ÓT Ú%Œ\ÀÙ€ÜÈŽ*A
-駎fØ–p¦¹’/°­ƒša[@MêKw
-.œ±É< -j„†ï@[#ÍmŸˆwÝêp̵uš}þñjk¤÷›‡¢yØA𴮧™«8/’˜ÛAÍ07 ¦®MŸ·¢vÍSТFHèñ–d û4Üäÿ˜£!igt«M˜ OÂdP!Í÷ÕúaÒQA>Å$0jÞQuQÓŽªE9GU‡ *Òmjr(î‹òL7X›yÒZÔmý(Ä0¹dŸ¸ÛÀÈo.Ppltĸp˜/ßm¶ã”9e¯†²hc½ ‰æ|uœºõíÂË(­ëãng†0¶]#Ð5!?¸»Œ+#çå×EM˯E9ù}|)Ѐ„cl¦‚ŒÈà‰ç lQ#ö¤¹7Ü$Ó'ÑIQiîÝ?¶…ŽÚ3D&µƒ·¥I‹²€èÍvµsBÐmt$0~
-:N»Ö4u&èÐwsut4N8oiDã1‡×žÑ(!¶LÛÓDXü>Mí¡™@C: ´8“ˆè ë f4, œ†í‡[& ãV¿°e
-U×ëì$Mé±°!Љ=¾úUSÿ_ùó]Eúžù‘|;¬r©¤SÁq@ä3
-½\÷øýb,ö…+Q`É3ruZø¬ÒCº¦R-àˆy oëáî= YµæǼµã¾¤ß;¿»/ìBOQ‚R¤YŸ”fX[¤«ëùîã§6¾r‡LOU¶ãX][ˆ˜Å"žÈK!Ïid…X”Y±N›¼në{>ZëË‘jÄ.p$=TÇmÖ¶ðÌÓV‡k–Dò…«‹š±:å¬ÎYÔ”(¦¤¶ó[ÐÈ–]^%†)nUËO‡"$tu÷¿Æ<¬_Ð\W»ý6G¿1ɉ5ÉãyŽtQÓiQŽ#/& Ûü1ßžÕ-5–\ä<a4BX?cY@æØ£ ²¶z™gùÝñþ¾ÍuaÓ,‹ ڲ慂`5ò€r,ûv¦D³V˜ù-hdËžAS+ÑßòÝ}YuVÞß¼o³•zv„ª;ÜEjø0Á1LØÎ&
-ÊÒ A¦y) J¿p!»¨^ ƒo@‡
-&Y’h;¿u
-e nYÝ_Ö“ëT=]èObžÁƒ]
-×Ä‘«8½RHiñ±üýõ¿©“HXÓ}tÕ
-¿öˆÖšÑX9ø*øåfCbDk7•ùGÅuSž/…ËSæ4¹öÓ=[®ZÄ?G€NÖæÏ-Ï7hÁú'¨'LJM_ÿvõë§_®G"8„ìÃ%kœà“Òv[=7 þ§º#&Âî_S³ ý‘”;$oŸP À%³õh´Œ~Þ$4 ²Ø¢y Í›@ÔÛ›+jQ†† §ãóòÈËú
-c­ß!+kÈ_W°L wáŽÆ&¼–aã}ç$ì{pß ž‹˜OCN%C7å; Œj!K}ö?vǺ!ȇ¢áHæî(wí6
+1902 0 obj <<
+/Length 2976
+/Filter /FlateDecode
+>>
+stream
+xÚ¥ZÝsÛ6÷_¡·ÊÓÁI
+áÿ-š&?¬·¸2ÌjyXµoŠª¼\)!—õ>__8—yb™R¿_ʵŸŠ2«ž¨Ý<¤ ŸŠí–úîrúë<ó¨Š0‡fîŠoy˜ìuq_¦Íñp)ÌÒk±21366 Ál ¤4ÿº/<ȉùñÊ7Ž5µê=AÒ¬(ï©«(×Ô·ËË&Ýz\oS×Eíû¼Ì)ñ{«G<yØ9ú8f˜L’Øv3X+²Ëm±ÉO¿ÿdd–鶮¨·ñߺ
+¸ük$Rûè@Q45ý~L·E–6Õ¡öë”™Ÿž€Dº{ö6@Wuô+¯Ó5©;ÇÁî莭jY0T8 êÙ¦nÝ{Ç2¹,»;Úƪ uþö\Sß—Uåw u÷ŧ–iC_§¨Óòœƒ¾›Qíü”í–ºÝêv~wY§‰½Ã‘-¹óRÞæµW•uUÞçõIҠ;E§åa?Þg>ü.sTn7©ê*}ýàç6ôÝUu³};x"ÂQ;JÕ³M‚i!’E¢c&µI&l V]™1bX[2cU’]ˆã¸—Ny»P®÷p§„qŽ4˜¯YÂh„°®£Ë¢XÇ}Ênz&(Š½™ˆ"¯kÔ‰ªFƒAÍk9[`}ÐØhùæ™F²|“· h¶Jà2”~ÕÓ
+4±ðÛÖMzhœЦòûæ)Š[YÞäk8{%u±¶ýëôöÓçiÉ*^G˜$ÛAÍH6 œd?ŽI]œö‚­«t6£H·+8×ôt@£Ð’EÂØy"[Ô•=1kÍ"gŸLt`«ˆëåͯWØH–DuQcy/–H¦û‰’Ço@CŽrÂ5¾XAìڀ߯꺸Ûæí"°BM?Ò“§pteÁïpžôåøEÊè¯<ßãwÌ‚#·p>âîs¯jЯFv‰$¸ix»:z(ç&¶ˆ S¦ ZþóU…e*Öª³ê±,¾¢y™Z”3 ‘–Ÿp¦©´K¹€³¹‘U‚
+
+ºmÅüî-jdûž
+‚³N ìÿÎ[î²j-uVl†–Úé§3Ù^?ÝÒOÍ°-áLs%_`[5ö€šÔ—ï\8c“yZÔ =Þ¶FšÛ>ï»!Õ?à˜kë64û퇷ÔÖHï7Eó°ƒài]O3Wq ^$/0·ƒšan@M]›>o%Dí&š§ EÐã-É@÷i¸Éÿ1GCÒÎèV›0ž,„É B›ï«õ䣂|ŠI`Ô¼£ê¢¦U‹rŽªAT¤ÛÔäPÜå™ n°<6󤵨ÚúQˆarÉ>q·‘ß\ àØèˆqá0_¾ß lÇ)sÊ^ eÑÆzAÍùê8uëÛ…—QZ×ÇÝ0Î al»F kB~pwWFÎ˯‹š–_‹ròûõ¥@Žý±™
+2"ƒw$ž'°EPØ“"äÞp“LŸD'E¥¹wÿØ:jÏ@l™Ôb@ Ü–&-Ê¢4WØÕÎ A¶}БÀø)è8íZÓÔ™ CcÜÍÕyÐÑ@>8á¼¥e]ŒÇ^{F£„Ø2mOañCú4µ‡f éD€ÐjàL"¢4¬ƒšÑ°€r¶n™$Œ[ý–4²e÷tÀu®Í`ËÏ5ʲ†}³jE% 삈?mR|zÈKêC=pÎ »I; 7„¡‘t …õ‰ 6iÝPì
+|ïüî¾° =E J‘f}Ršam‘®®ç»ŸÚøÊ2=UÙŽcum!b‹8x"/…l<§Uz`QfÅ:mòº­ïùh­/Gª»À‘ôP·Y?ÚÂ3O[®YÉB¬.jÆꔳ:gQS¢˜’ÚÎo@#[vy•¦¸Uý-?ŠÐÕ Üÿó°~As]íöÛýÆ$G$Ö|$ç9ÒEMs¤E9Ž<¾˜4lóÇ|{V·ÔXr‘ó„ÐaýŒABf™c2ÈÚêAdžåwÇûû6×u„M³,‚hËš
+‚]Ô ËʱìÛ™EÌZaæ·  ‘-{JM­DË÷÷eÕ}Xùpó¡ÍrTêÙªîp©áÃÇ80a;o˜h((_Hƒ0™æ¥H€*ýÂ…ì¢fxPx0 n¼*˜dI¢íüÖ4²u—§ý­[‹ÙÍ»|"±改L²N˜„é8~áævQÓ¬kQÞhŸUsÀNa±uvÏ
+ú¢Z}Á¡}þ•‘'wƒ.@Õw:ôoªcé·NC£û‡«µ?` ’áõé*üÚ ZkFcäà«à—š ‰­ÜTæ×Mux¾B,O˜ÓäÚO÷l¸vjÿü:Y›?·<ß =ëŸ` ž0)5Q|ýûÕ/Ÿ~¾‰Hàh²C—t®q‚OJÛmõDÜ€øœêŽ˜c¸Mͦ}è7ƒr‡äíª¸d¶–ÑÏ›$`ƒ†A[4´yˆzwsE 2ÊÐð¯át#b|^yy@_a¬õ;de ùë
+–€É£á.ÜÑØDƒ×2,b|蜄}Îâ{¡Á³`QóiˆÀ©¤cè¦|‡±Ñ@-d©ÏþÇîX7¹óPÔ!iÂÜ¥à®ÝÆÃ
endobj
-1826 0 obj <<
+1901 0 obj <<
/Type /Page
-/Contents 1827 0 R
-/Resources 1825 0 R
+/Contents 1902 0 R
+/Resources 1900 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1791 0 R
+/Parent 1883 0 R
>> endobj
-1828 0 obj <<
-/D [1826 0 R /XYZ 56.6929 794.5015 null]
+1903 0 obj <<
+/D [1901 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1829 0 obj <<
-/D [1826 0 R /XYZ 56.6929 119.3275 null]
+1904 0 obj <<
+/D [1901 0 R /XYZ 56.6929 119.3275 null]
>> endobj
-1825 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F21 658 0 R /F55 970 0 R /F48 885 0 R >>
+1900 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R /F55 1010 0 R /F48 925 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1832 0 obj <<
+1907 0 obj <<
/Length 1522
/Filter /FlateDecode
>>
stream
-xÚ¥X[oÚH~çWð²¨ëéÜm?Ò„´é…d•Vjóà€o}ÉÚ†–þú=öÌÛ 4Õ*R?Ÿsæ;W› 1ü‘¡'f>º>G1\&<ÜÀ½·¢1Ž9mÔ›Åàõ s‡>ò%•Ãź%ËCØóÈp±ú2šÜßOg×·*ðè ;ãѧÉìóä£Ú»ût4y;âJÆ$*˜Ä£ÙäÓôÚ¹z7½úpu7»?.Þ¦‹Æ°¶ñ³Êª_ñpgx?Àˆùž~‡ ŒˆïÓa2à‚!Á3;ñ`>ø«غ[?j#C0 º66|ÂG’QV³ñÇØ‘püUZáÒ)¢Mú3KCµélôo¦~ÃAò‡h™%ú©'t²÷•0^Ѷ9„ _Z+úÐB¢W³WĥܵA»bQeT¸ê‰66_ßÀQŽ§¬ ’ž+jÈmª|ZnÃjAFÁS¶“‘¾ÒzþÔ‚HKï#B<k›z*v]p xAá—ù˜x£0(âc
-ŸÂ.¥M -w¹v&}©ëe™å‡10@ú{ ¢ ÀòÙ–Ò&ìlÙn1ùb1ya±¤ù êíÔ2lvëó2
-žPo>*¶&çwöúA%ÂPFÛyîÛ„éWØöàÑõ‚wš A›rñævv­ÔøZÛ*‰Ò¨(ó
-tµnf­êBzÙ2„Ž®Æ H .{³o ó:Òi™½ÑNçÞÓ¡“ªE”DqÇÓ g&Õp{.¶ Á‚ƒäåÐjÎG–Õµ?I;¨¾¼¬Ï`Nõu’Î7º]}¶œÛÃ<Ü,Sߪ»§•Þ“!ß±l¿üF%Ö^ÝÀþ;i /[Œ’ËÌ1ç‰×˜š÷ŸÞóè%er¢¬Ç:#¾h+»óu–'h„wMí‡8 V½ÞÇj‘0ŠåÇ×7ìël—ßñN3B†`!ÙK^Ú [®ðÛÃ¥í# LnÕ— +¸éiÿûÊñSTCæygš Ã02Ÿ£*à öû¦7ŸZNmÿãÜ’rendstream
+xÚ¥X[oÚH~çWð²¨ëéÜm?Ò„´é…d•Vjóà€o}ÉÚ†–þú=öÌÛ 4Õ*R?ŸËw.sl2ÄðG†ž@˜ù|èú LÄp™ ðp÷ÞˆÆ8ä´Qoƒ×7ÌúÈ—Të–,aÏ#ÃÅêËhr?]ßþ=v¨À£7hìŒGŸ&³Ï“jï~ìÓÑäít>vˆ+¨`f“OÓkçêÝôêÃÕÝìfü¸x?˜.ÃÚÆÌ*«þ|yÄÃøð~€ó=1üߧÃdÀC‚3fvâÁ|ðW#°u·~ÔF†`u-lpbcCøH2Êj6þ;Ü_¥E."Ú¤?³4T›ÎFÿfê7ü$Ïqˆ–Y¢ŸzB'{_ ã-`›Cò… µ¢-$z…1{E\Ê]´+UF…«.hãaóõ ¸rô²‚xHz®¨!·©Ši¹ «OÙ~LFúJëùS jÓåûˆƒÀÚ¦A§Š]QPøe>&Þ( Ê°è
+Ò]Ûª\zU!H-Þ¦Ÿ#ß#¦ <Ü\)‰T0a‘Ç ¢\¦iXxs¨/ç»]ú&Ÿïî~ÍÛm
+%‘†:3燺ƒîHWYZdyí’£ZŽ—&\œ"׃Î[‰œÂò¤îÎr.¿™fQÇV W
+·Ï
+Á<çÚê¥má.<£ÏEã”źÎÙ"(ò9—]ó®¶õÙ”UÙË°_#§UËaöô¤k¯ïŽ!LYdZè6Ðâ£tïV¡º82ѾšŸk
endobj
-1831 0 obj <<
+1906 0 obj <<
/Type /Page
-/Contents 1832 0 R
-/Resources 1830 0 R
+/Contents 1907 0 R
+/Resources 1905 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1841 0 R
+/Parent 1883 0 R
>> endobj
-1833 0 obj <<
-/D [1831 0 R /XYZ 85.0394 794.5015 null]
+1908 0 obj <<
+/D [1906 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1834 0 obj <<
-/D [1831 0 R /XYZ 85.0394 562.7154 null]
+1909 0 obj <<
+/D [1906 0 R /XYZ 85.0394 562.7154 null]
>> endobj
-1835 0 obj <<
-/D [1831 0 R /XYZ 85.0394 499.03 null]
+1910 0 obj <<
+/D [1906 0 R /XYZ 85.0394 499.03 null]
>> endobj
-626 0 obj <<
-/D [1831 0 R /XYZ 85.0394 459.6249 null]
+658 0 obj <<
+/D [1906 0 R /XYZ 85.0394 459.6249 null]
>> endobj
-1836 0 obj <<
-/D [1831 0 R /XYZ 85.0394 426.4105 null]
+1911 0 obj <<
+/D [1906 0 R /XYZ 85.0394 426.4105 null]
>> endobj
-1837 0 obj <<
-/D [1831 0 R /XYZ 85.0394 390.6449 null]
+1912 0 obj <<
+/D [1906 0 R /XYZ 85.0394 390.6449 null]
>> endobj
-1838 0 obj <<
-/D [1831 0 R /XYZ 85.0394 324.0377 null]
+1913 0 obj <<
+/D [1906 0 R /XYZ 85.0394 324.0377 null]
>> endobj
-1839 0 obj <<
-/D [1831 0 R /XYZ 85.0394 263.3171 null]
+1914 0 obj <<
+/D [1906 0 R /XYZ 85.0394 263.3171 null]
>> endobj
-1840 0 obj <<
-/D [1831 0 R /XYZ 85.0394 199.6317 null]
+1915 0 obj <<
+/D [1906 0 R /XYZ 85.0394 199.6317 null]
>> endobj
-1830 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F21 658 0 R /F47 879 0 R /F53 962 0 R /F55 970 0 R >>
+1905 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R /F53 1002 0 R /F55 1010 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1844 0 obj <<
-/Length 1852
+1918 0 obj <<
+/Length 1850
/Filter /FlateDecode
>>
stream
-xÚíYKsÛ6¾ëWèHÍ„^$Á£b+‰ÓXvm¹éÔÉ!› Eª$eGýõ]<H‘c9‰Ûé¡ãÅb÷Ãî»"C dèùÈi8 BŽ<L¼á|9ÀÃ[˜{3 –Æ­‰Ü6Õ«Ùàåk CúÔÎ-^a!Èp_;¯FÀ;ÓñéäØ=z;9úå³édä’À§ÄŸŸO¦Ç'¿\êa bŒÓñôjüÞŒBêŒßL.GŸfï“Y#X[x‚™’êÏÁõ'<ŒA‡wŒX(¼át0"aH‡Ë÷ò8cõH:¸üÚ0lÍê¥}`pO r`áXýD 2!È(郬¦R¹Ÿwõb4h‘õmYõlÉZ[ú1²î–îdfÀNó(N²[Ó‰Ìç¯<“1¦©4ýbD„#£Øôª;;ü9_Y”šN²°ßÊ|åפ¬J´w„§
-á\tý;Y'ÏìšÿõÀž=³|ψƒ§bO Åôgâðÿq³‰›º×=šÝì‚zð‚l¡óæ=ž\]œœÏNΦߕzÖÁnêɧAóœT”: auý„;å&«¢¯fÐfŠÜI {¹-쳞Ù$”™Ê o2f3U Ä9©ÌàJ*LìmdÊ0´•ƒ;QÙ£'c %¥5¸ZÏí
-1*܉Qq.sÁS`‚Ö¶À$Œ¨¢sBÙ]Rš¹eôEö‰D•ÑéôF×>².åbš}:/‚F+[‚-ª0nPµ:ÜHEos{µÈ–n\s7S¸›9'A×q×Å6Ùº“K[;ÈtUg[a³"Uqdh£€·Rá®Ùa8æ}ãŠÝ×2&º-épa›d™¤‘Öž4µ n5CÈâáÓQ¥1­#Je…pnÖ•ÙOT`«(}ˆ6V†x½\Ù¦1M˜¯¡×©j%³ª&Èíz+þJÎkØá•ræu-Ï–ÀL‘¬Î’öz3™n«\fÆ͵ªŒ1œq u’gQšnF„¥#¡ÖF3Y­ÒD™‡fUɼ‚³ÓS*3‘Ê{™–føfc¾¶§øQuºP¢&4j•B§®,´5Ë×ÕJ¡ÊxU’¦¦¥ªƒê Ö›VTÚof¿óJU`tÛ ¬Z 4Äxf½úfÓc`v"…w 0 ™3ÛVt\S[aV¬—º”nL¯{
+xÚíYKsÛ6¾ëWèHÍD0^$Á£b+‰ÓøQ[n:ur EÈfB‘*IÙQ}R$ÍXN¬vzèxÆÄc±Øý°»À®Èúò ý€#w8_ððæÞˆ¥WDã&ÕëÙàà ó‡
+<ê g‹/°d8‹®×ÈC#à€ÓÉÉôh|ønzøËg§Óјø%Îäü|zztüûhL] ä@Œ±s29½š|0c磀:“·ÓËÑçÙûÁtV Öž`¦¤úspý#Ðáý
+)<Þð&‚ŒƒýOi¯ä?åü@ÉésŽ™G‘àcBPàºT“
+ ì… e( ˜[^ÈRa½tÎ$ >|) &<My1]]œ«ùmDhàL>\çï8Ž©@Ä ÌB-éXãó‘E>¯7"3.Áh kîim«Öj‹2,×v6³MÚ.sÍ'Ë-Ùƒ4|M/’¥œ—2ª6° lY‚äq!ûÑ©ÄmÁs9šÅ“—g=:öò ƒ§Ã?òÊ,m e|»žÖüXÐ4m° ÆHuŽ¯O “ÀŠ-ã|ì7ËÍÐ…\XÒ¹Åá$L׋K QÏóž47m &W³wg»8NK™§Òžèå¦(åÒžÕa–Y^Æëåv[Ž÷¨åÃ}Ø ÔÞdpgaü>í@Ì|$|׸þ© 8Ec‰Àw»«µO'[®âDê ôð'Jým<¶c¨|&q—ÓÓLë@^ øŽ…«ñ2Ë’>ÄqÇæ6i¶*â¢BA_xlH!LúÄï½—hO]¸RŸíM:¾ò¾Ð^Sõ 7{p6×ãèsÕº«[_êÖŸuë¾nÍ n+z]aÖ.çIX=“áÒ5T5ÇEGæ"á¹®%]dù2,ûbp‹¬æøfu(çD]TêÓ å×㸋V$_f‘ìCB±®Ü_wÊýcü–/ãÇ»üNö,_ºgù²Ýçoß7ž¾Å^—gÑâFÁ´2ÇŠr“ÈçÛýåžµ/wò‹â.Ø,ßô0…ºG]ÒeúðO0=ª[{Ø{¶\ÆÙªÓU0ÈLÔ£½åµM è ÏðÔ÷©xQxn°x"<WTðܼƺú'Â2H„]á>',‹îîÙ×ÿ(?f^!’‹ö¡ÿ ëxÏ®ù_ìéžåÛC öŸˆ]Ó—Äáÿãf7u¯}4Ý삺ð‚l¡õæ=š^^ŸÏŽÏN(õ¬2‚nêɧ~ýœT”: aUý„;Å&-ÃofÐfŠÜ‰!{¹Íí³žÙ$”™Ê ¯3f3U Ä9.ÍàJæ*L<ÚÈ”#`h+w¢GOÆ@KJ+pµž=ÚrbTЉQQ&sÁS`‚Ö¶À$Œ¨¢sBÙ]\˜¹eøUö‰D|•ÑiôFW>².äb˜}:/‚F#[‚-ª0nPµ:ÜHEos{µÈ–nÆæn¦p7sNü¶ã®óm²u'—¶vêªÎ¶Âf Dªâ sÈÐF>o¤Âm³Ãp ÌýÎûX{Ș趤cÀ…mâeœ„Z{RׂhÇ_åÁóQ¥1­"Je…pnÖ¥ÙOT`«0y7V†h½\Ù¦1M˜¯ ×©j)Ó²"Èìz+þJÎ+Øá•pæ¶-Ï–ÀL‘¬Ê’ö
endobj
-1843 0 obj <<
+1917 0 obj <<
/Type /Page
-/Contents 1844 0 R
-/Resources 1842 0 R
+/Contents 1918 0 R
+/Resources 1916 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1841 0 R
+/Parent 1883 0 R
>> endobj
-1845 0 obj <<
-/D [1843 0 R /XYZ 56.6929 794.5015 null]
+1919 0 obj <<
+/D [1917 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1846 0 obj <<
-/D [1843 0 R /XYZ 56.6929 644.7852 null]
+1920 0 obj <<
+/D [1917 0 R /XYZ 56.6929 644.7852 null]
>> endobj
-1847 0 obj <<
-/D [1843 0 R /XYZ 56.6929 574.187 null]
+1921 0 obj <<
+/D [1917 0 R /XYZ 56.6929 574.187 null]
>> endobj
-1848 0 obj <<
-/D [1843 0 R /XYZ 56.6929 503.5888 null]
+1922 0 obj <<
+/D [1917 0 R /XYZ 56.6929 503.5888 null]
>> endobj
-630 0 obj <<
-/D [1843 0 R /XYZ 56.6929 459.3803 null]
+662 0 obj <<
+/D [1917 0 R /XYZ 56.6929 459.3803 null]
>> endobj
-1849 0 obj <<
-/D [1843 0 R /XYZ 56.6929 424.0565 null]
+1923 0 obj <<
+/D [1917 0 R /XYZ 56.6929 424.0565 null]
>> endobj
-1850 0 obj <<
-/D [1843 0 R /XYZ 56.6929 386.1814 null]
+1924 0 obj <<
+/D [1917 0 R /XYZ 56.6929 386.1814 null]
>> endobj
-1851 0 obj <<
-/D [1843 0 R /XYZ 56.6929 312.6614 null]
+1925 0 obj <<
+/D [1917 0 R /XYZ 56.6929 312.6614 null]
>> endobj
-1852 0 obj <<
-/D [1843 0 R /XYZ 56.6929 165.1287 null]
+1926 0 obj <<
+/D [1917 0 R /XYZ 56.6929 165.1287 null]
>> endobj
-1842 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F47 879 0 R /F53 962 0 R >>
+1916 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F39 873 0 R /F53 1002 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1855 0 obj <<
+1929 0 obj <<
/Length 2702
/Filter /FlateDecode
>>
@@ -8148,28 +8505,28 @@ D„RÓšE©„jmÛ‡/Ǥ«Ûû§bY®?÷ÌèÔ
‡ ± ‹.`
ÃIÕ¢TB·.\2)Ht•‹paŠûcZ±3hàbÆüC[†<7:Rf¼Õû
-tWµãQ†‰)l 77ÔuïpªF…Áú±:˜JÆ\ßîÖ½…´½#Xø§æµŠ}ðXøÕ"÷·7ÇÒØ´,\vB&p¡éª:…$׺{Ç+¦[­Ï W€œŸj÷²/ ó¨yÀù)€É€gJ6 ð¶Ô8À£”øÛÀTexàܼjÓŠE©„f]€ƒÑ0КŽj¯ *Ý AóbÃüñ
-8“'¾oh M|äæ…lXV§ë{p§1Ñ 49Gg|R³(4T­šÜt?UÖÑíçËŒÏ÷ecR:#¡ýÎð±ˆg–àØ 0ÝýREe±ØÞ@o]žAFˆ ó&^PóaÄpJñ!4?=¥ PfGÊPÖ©¹ ƒ“xP,RqVˆÆö¹ÍfŸƒ5\GÞ Õ €0g&Œ€uüFîln¤KÏØ(ÔoÒ|1Щ¶fŠ¦
-Ÿ×¥cF[U˜¼8Øõ(°CwÎU–¤8~úÅ_©¿Ç—3¥FŽ†9bL“ ”QœÒW=~Ï:ÔýüÃ’=endstream
+8“'¾oh M|äæ…lXV§ë{p§1Ñ 49Gg|R³(4T­šÜt?UÖÑíçËŒÏ÷ecR:#¡ýÎð±ˆg–àØ pÒýREe±ØÞ@o]žAFˆ ó&^PóaÄpJñ!4?=¥ PfGÊPÖ©¹ ƒ“xP,RqVˆÆö¹ÍfŸƒ5\GÞ Õ €0g&Œ€uüFîln¤KÏØ(ÔoÒ|1Щ¶fŠ¦
+Ÿ×¥cF[U˜¼8Øõ(°CwÎU–¤8~úÅ_©¿Ç—3¥FŽ†9bL“ ”Q¼ÙW=~Ï:ÔýÏ’,endstream
endobj
-1854 0 obj <<
+1928 0 obj <<
/Type /Page
-/Contents 1855 0 R
-/Resources 1853 0 R
+/Contents 1929 0 R
+/Resources 1927 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1841 0 R
+/Parent 1932 0 R
>> endobj
-1856 0 obj <<
-/D [1854 0 R /XYZ 85.0394 794.5015 null]
+1930 0 obj <<
+/D [1928 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1857 0 obj <<
-/D [1854 0 R /XYZ 85.0394 751.8354 null]
+1931 0 obj <<
+/D [1928 0 R /XYZ 85.0394 751.8354 null]
>> endobj
-1853 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F55 970 0 R /F39 863 0 R >>
+1927 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F55 1010 0 R /F41 910 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1860 0 obj <<
-/Length 2311
+1935 0 obj <<
+/Length 2310
/Filter /FlateDecode
>>
stream
@@ -8178,310 +8535,315 @@ xÚ­YYoÛH~÷¯°û QOŸd÷£c;³$NÖÇì™<Ð$eC‘Zq<¿~«/Š”Z’]èÅV±ººÎ¯H2Ãð#3¡HQ5‹G
ÆGÒ^’¦:"Eàè¡`”f£x°4/Y }šp1Í\½Mñ\Õͱ
Íb˜²q…F'¡<g¢sÄu":=—‰Î.
*¼²¢ºP7¯ûº¢PD"uZ¹+ Ý¤ÉS
-3¬t¤u™w9„Œ¢¾{›€ d,¤.µºNœø¢JË>Ëí ²±¯›Gë ÎWþ)Ç•Ocˆç:XQ»-ª°t2t¸5È<³õ¢ñˆLëaÒNË]³P•-ýäêbb/m±)ʤ)Ýj:ØÌ€]uÿ8[Bb„YŸŽ­1×ñظLl½„*Ÿ†ÇçcËGÃI宀vÓØR8MÔK×ÚÃ
- Êé(ªŒLUšš‚½b£C»¥Õ Ïþ±IÚ.oÆL–þûÇÛ«O×7ön/2]A“ÖŸ—ºùSWb‚áù†è¯.n\s¬÷Úên}jY¥ÃZH0Åà]ê-aÃÒc2šBñ.'“ 1>3ØŒ¹N§ç2Áy½¿e$¡+vzKÏØr|º˜!˜¢é–×
-›z'Tb¢&v½||øÇ—»SµAö±‚FXå.>î_"oœç¯êª­›®è7»mÁƒ<¢N€x.ãá¥ÿ
-vÞð]…qÝ+ Ç­Ëí€>àF<r°K4JcKM• ×·6o~äMÈ@Øд‰¸×ªÞ¶E»_gT/±`8É1 •èüŠš7K§?ì$ØO&*ô%À1õ¾-ùwOE•:6‰ ÐЇ÷täÏËUQæá!D·{Q3ÈÍrÁV2þEx–?õÏË2ÿ‘—o»¨çÚ¶‚ªqâ_•ÉshîáˆÇ’ìïQä-™¤ˆ0ýBd gþ–nû6$Y!)cµ/y{Ö([H‹<†Ô òÚê’§&Ü…§‘ÃQDÅ!ú³êÂ\Ù„ K£ƒÓÿ¨ŸgµM(ºÇBn:„~?öMTÕâ …‡$þŸ¿÷í¾gjeRÒ0< 1À´SJ+N=Cú”ÁCÝÿ î›|endstream
+3¬t¤uùø`\ !£(¤ïÞ&` éKí„®'¾¨Ò²Ïr{‚lìëæÑ:¨ó•ÊñAåÓ⹇VÔî_‹*, ÝnF 2Ïl=„¨A<"Óz˜´Ór×,$TeK?¹º˜ØK[lŠ2iJ·š63`GW@Ý?ŽÆ–aǧckÌu<¶.[/¡Ê§áñùØòÑpR¹+ Ý4¶”NõÒµö0À!~$¬
+œ€16öÑ2­7ۢ̀K2(=ï* ga®9íª× Wy.㪅ꈀøÁò‚Šƒ‰ñ´^ž) ×þÊ„àSņT#Þ—un&sc\S²TìFXç.!É7E¥=l-Ê,µ]"Ó
endobj
-1859 0 obj <<
+1934 0 obj <<
/Type /Page
-/Contents 1860 0 R
-/Resources 1858 0 R
+/Contents 1935 0 R
+/Resources 1933 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1841 0 R
+/Parent 1932 0 R
>> endobj
-1861 0 obj <<
-/D [1859 0 R /XYZ 56.6929 794.5015 null]
+1936 0 obj <<
+/D [1934 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1862 0 obj <<
-/D [1859 0 R /XYZ 56.6929 381.7644 null]
+1937 0 obj <<
+/D [1934 0 R /XYZ 56.6929 381.7644 null]
>> endobj
-1863 0 obj <<
-/D [1859 0 R /XYZ 56.6929 321.391 null]
+1938 0 obj <<
+/D [1934 0 R /XYZ 56.6929 321.391 null]
>> endobj
-1864 0 obj <<
-/D [1859 0 R /XYZ 56.6929 261.0176 null]
+1939 0 obj <<
+/D [1934 0 R /XYZ 56.6929 261.0176 null]
>> endobj
-634 0 obj <<
-/D [1859 0 R /XYZ 56.6929 223.9137 null]
+666 0 obj <<
+/D [1934 0 R /XYZ 56.6929 223.9137 null]
>> endobj
-1865 0 obj <<
-/D [1859 0 R /XYZ 56.6929 191.71 null]
+1940 0 obj <<
+/D [1934 0 R /XYZ 56.6929 191.71 null]
>> endobj
-1866 0 obj <<
-/D [1859 0 R /XYZ 56.6929 156.955 null]
+1941 0 obj <<
+/D [1934 0 R /XYZ 56.6929 156.955 null]
>> endobj
-1867 0 obj <<
-/D [1859 0 R /XYZ 56.6929 93.6598 null]
+1942 0 obj <<
+/D [1934 0 R /XYZ 56.6929 93.6598 null]
>> endobj
-1858 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F55 970 0 R /F23 682 0 R /F39 863 0 R /F47 879 0 R /F53 962 0 R >>
+1933 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F55 1010 0 R /F23 714 0 R /F41 910 0 R /F39 873 0 R /F53 1002 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1870 0 obj <<
+1945 0 obj <<
/Length 2748
/Filter /FlateDecode
>>
stream
xÚÝZKoÛH¾ûWØÃJ€Ùé'» ,Hl'ð`âxc3ÀÌ(‰’ˆH¢F$d~ýVõƒ")J
-ÙËÚ6›Åêêêz|UQøg#£‰éDE™Í6Wt´„gﮘ§‰QÔ¦zó|õê­Ð£„$1GÏ‹/C¨1lô<ÿmüúññîáöþ×IÄ¿!“HQ:~ÿúáÓëŸÝÜã$áã×ïîžàVJ‘F²˜Ž^¿¿»üñüÓÕÝs#N[dFÊòçÕoÐÑ$ÿ銑5ú7”°$á£Í•T‚()D˜Y_=]ý§aØzj_R†(Ãõ€81F¥xG *!±àÂ*áöîéæãýãóý‡Ü}ç 7:Š¸&TIm‰·é&›{2Ñ"’HI5#U^N"!ãqê.·Å&Í·nü
-:K¶­ þß[ü?²© Úä‚´¨ÎXA ²‚ÏœàJµ§„
-W—«‡cv¼Ûí†t’ïl•n—R„
-ÜZp+h¦“vÿ Ç(&L6ll°>ÅÆ|/€"Å~~Ñ.ò)!,œ„²×áøj‰4EO7ÅuŠžÍ¬úú=@Ã×ó* y¶è§ÜÁ«¢ç¼÷O7}ÃäF*9f|îòü¥f)‡bõ?Ô*ŽQ›å±s…‰ü°2îìýÝû¾ˆT¨bó7ŠØp¼ ¢
-µåÆu|pzåÛz3µ‰_ºÝ -Êïfv>¾dÛÊM¸”ƒÙá ì;Ås« Œ,wàJíýÂÍäžiîW«·¾û$¥G ¶%ߪèÛ»h¹f­¾î"4š=Èìº[áÜ›nã:´ßåàa·ó“îÈ5ĶXÊóîئ:íŽ •uÇÝEwÜûêØ)1R—+ ÈÕ…6yÜìç3mû _? B¬å_<P]Nƒ÷‹Šï8V¿œj¾–zv1;Râô™JI´Ð晶¨Îœi ²gZSÚ€*Î.ˆ–ìS:fqwÉ_ð›Þ>½Œ
-JÅíâ£?G(d’GÕÛÝ´`'^Ýoø趀=ÚÛ
-œ£6k»/½ý ¶h¨qí¿A<¯œ+馟‡c7ñ»³ëÊk‘áÙ¢wæ¾@hTµÿˆŒï$nbžM¿L¸ÂV+ä¿Œ/75ðF‚oî%¢5 þM1aÊ¿7Ê6Disè”â­vᚺˢ®ê}æÆûl½äzd°°
+ÙËÚ6›Åêêêz|UQøg#£‰éDE™Í6Wt´„gﮘ§‰QÔ¦zó|õê­Ð£„$1GÏ‹/C¨1lô<ÿmüúññîáöþ×IÄ¿!“HQ:~ÿúáÓëŸÝÜã$áã×ïîžàVJ‘F²˜Ž^¿¿»üñüÓÕÝs#N[dFÊòçÕoÐÑ$ÿ銑5ú7”°$á£Í•T‚()D˜Y_=]ý§aØzj_R†(Ãõ€81F¥xG *!±àÂ*áöîéæãýãóý‡Ü}ç 7:Š¸&TIm‰·é&›{2Ñ"’HI5#U^N"!ãqê.·Å&Í·nü
+*ýR¯²jöÊJE€Ïb@4 ãé¯Ý9IÅÀ4yï ÚÒ¢†¿¹A¾Í«<]»›yZ¥ý#XƒÙdþLh8ø³ÎöyV’F©-w‚“ !çÆ®ûÁúÐÓQH  #œ˜ Ç‚ G1Oµ©‚G±†
+×dÉD! ?¿d X²­xˆ—‚%ª»ä§ÒÛ÷ýã‹ Þ°öŠÎ^‚óEÏCVEY¹Ñ&­ò­ŸÎ½ÌÒ]:]ûÉbÑ,“âJ‘ÄhæMÂi¡'<CGVÁjð¤LœMé`‰Q|™nuU§ëfë_gëºÌ_2rÊ
+”NàcuÞ
+ÚT§­ ¡:>dg—l¬àxÉ!+è,Ù¶‚øoòÿÈ
+¤&h“ VТ:cÊ
+>s‚+Õœ.
+4n·vÐI¾³Uº]"HKUºr·²âÍ<w˜UÅþ›Ÿª37@qÚ×Ô]vEYæÓA$Á% ¥Ú
+¡±Ó•ƒÑ3°K‹MPhÈ9°‹ó&Ø¢:c‚Êšàâæpx
+º9»d X²sà!qwÉu¿Ð áÐé£÷páU¼tg\‡òkÜœdXy2Pnáf·E*´Óü¯ ‹àÓz¥
+P¡ŠÍß(bÃñ‚ˆ[)Ýñöîͧw¿Â_È(ÞC\¶.gû|šÍ›ð9PäJ³úW^Î^£’Õ¿¿Óœ
+v‚AÙ¥h×¢:î•wÛ‹`ó³]]¼˜äg%k¨Dë¸<5´'ÚG@ÕP@Bͤî‹xŒß(£åa}„‰O0>˜û˜tµ>H?gn&¿¤ÛÊUx`kX¸n nÍwkOtóø©ô_4î=ø¬Üe³Ë™l>Ô.F+¥1½„A¡^ .E/Öø¾1Dí
+3€öû )Ô–×ñÁé•lëÍÔ&~évƒ´(¿›Ùùø’m+7áR> f‡ƒ°ïέ.0²Ü+q´÷ 7“{¦¹_­Þúî“”-Ø–|«¢oï¢äš]´úV¸‹Ðhö ²_èn…swlºëÐ~?”ƒ‡ÝÎOº#×Ûb)Ï»c›ê´;6TÖwÝqWì«co¤ÄHu^®@4 W~@ÚäqO°ŸÏ´í»j‚|ý,±–|ñ@u9 Þ/z(¾ãXýrªùZrèuÚÅìH‰Óg*%ÑB› gÚ¢:s¦Êži9PLiª8»d X²WLé˜ÅÝ%Áozû<ô2Lı‡‰VUZÁ±æ³ò jÇ=–ü
endobj
-1869 0 obj <<
+1944 0 obj <<
/Type /Page
-/Contents 1870 0 R
-/Resources 1868 0 R
+/Contents 1945 0 R
+/Resources 1943 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1841 0 R
+/Parent 1932 0 R
>> endobj
-1871 0 obj <<
-/D [1869 0 R /XYZ 85.0394 794.5015 null]
+1946 0 obj <<
+/D [1944 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1872 0 obj <<
-/D [1869 0 R /XYZ 85.0394 751.7338 null]
+1947 0 obj <<
+/D [1944 0 R /XYZ 85.0394 751.7338 null]
>> endobj
-1873 0 obj <<
-/D [1869 0 R /XYZ 85.0394 641.4745 null]
+1948 0 obj <<
+/D [1944 0 R /XYZ 85.0394 641.4745 null]
>> endobj
-1868 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F55 970 0 R /F53 962 0 R /F62 995 0 R >>
-/XObject << /Im2 984 0 R >>
+1943 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F55 1010 0 R /F53 1002 0 R /F62 1035 0 R >>
+/XObject << /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1876 0 obj <<
-/Length 2377
+1951 0 obj <<
+/Length 2379
/Filter /FlateDecode
>>
stream
xÚÅYëÛ6ÿ¾…¾Ub–/ñ~Ú\6¹-’M.qp´ý µ¹k5¶äZò>þûr(Y²eoiq“Ôp8œ×o†Ë
ÿX’)¢,·‰¶’d”eÉ|}A“{øöî‚EšiK4íS½ž]üøVèÄ«¸Jfw=^†PcX2[ü’¾&šL€Mo.?\½™L¹”B¥—Ÿ>]ݼ¹þÌ3
-D@Biúáòæëå{\û4±<½|wõeòÛìç‹«Y'N_dF…—å‹_~£É$ÿù‚aM–<„f-OÖ2$“B´+«‹/ÿêö¾†­c*Ü%”N@6"hÆþ̱ÂE˜ñci2µ‚H#íi^¸¯8lw YM #™µY2U:#šõ,ÄE±Yƽ‰Œ&\žè È,×ÁDÿö”–dJ2O{2 ßi ¸œLO?‡ÿoà–^wcž¾;´QÄ‚uM51™ ºJþ
-õj2”¥y”t¾ÜVUS”÷~;øž°„S¸gRؘÃ&ÒͶš»ºÆÉv2eYº+K¿5¬äíàçG<]T®.hpٕ˼œ;œÔn¾CEóŒKþÞþw]ÕqGý\7n]ÿ3A[-x§FÙ0ú'À$Ÿ
-ƒÈÏ$e‘>XSgéÂýJ)/ƒÉ`š¯V•?õ1|V^=~¹SŸDëÁÕxã‡båî]ÜÜTøÑÕó|ƒ7œj/…GF€ÀŠwÀñïy±"‡¡!XÐX“ôõûb_@P+ ‰pºÏ_ß—™Àõˆ1Úz‡Å{Œ
-Ì_@AΑ¤,ºœÃFP¡£êÇC–õãc3Í A¸=ÔžåDZ£’þ‰GrµD#r‰ÞiV©í\_\³+Bìso{”±¿Kr¢ûŒ¬¹"†Ù6yæw P–ój½Y¹Ïa¾ÙFw‹GV·Í}¨Cài½›/ñf‘ηfR—7–F>‹Õü›ƒ…&5˼Ám«¢´ŒÜKt`“)áæˆ𻩶M}ä¾-Î(jSÒü%(ND„9©G¡Ðm9…ƒÒ‚wj«_ÀÁ j+dTp3†ƒ”d‚·9úcÀ¾Y@½«S¨— Яߎ¨Çe#ÒõÇ'PŸA½>ç3¨—i$ªPbŸ·¥Jß’1šîž^ż:pjðW¡Z§.ó58Áqö…óLë½ë×ÈÚ§þ0ø6á4 ®ž¥¥[ý07Š4=óÛb…póµ›ÞõÚOuH³~y±­68‚,ŽƒOÑm9ø˜êÀm²6Ü#upžænÓà%T6ÝËàW«Hb<CÈ“n‹rq‘$èdááÀ9ÇŸ¡l âj2•
-îñÍ›“Ûôqéʯ`‘ÌÊ—½Vnz5ƒgÙÖG~f°¸ÕÆœp xÁüÚ*÷)= ŠgéÖGX`
-R´*é3;:²%9²:Ú£=8ò³ó˜è2¦<¸mMLÊÝú½bâò÷T4Gfl¯¹…dæ%õì‰Îh'å<U”h(Ûf"Ÿ/ÝôüP4Æ!Ã{Nçd눎…´€ì ¬H÷¾Ê£jy“ãè.TmÕz¤¢[(-Õ¨ÜÇ)8M©öŠEº“¾µÂnVwßî.ß­¢}
-÷èßWNx’úþç^W^,ð44ëâyåˆNwj¡bâ…âN@'`¬Rï#‡†h%Ä_ÿÈÑç|¦Ü
-Éèþ#‡Èö~¼µ_èÜa†°á{‡ÿõïþÎÀ•ã§Ž‹ÇkÝÅ/% C^Ø ûÕ××7opdñgX5dr+ß×ÔÃ÷Ø6‡,Íò:>„Ix‡ß­[ØB.‘Ò%¶Úyyß.†wmÚ6ün×춓•Ëk‡…Ñ)´é{Ôwùè߀5·§Š›~¢ì¹}›)¡ôm†Ä†öúÝÍåû/#É,Á¡ù‘ ¯½9•!Qí Gu¸Ðõ¤PpÁ  ¹/s_jøÝënåoãÎøŒÆã3
-Ïh °Â=˜à‹/ß ™¸ù)ÊÚéXsÓÖzÛr1k»¡\†ü‰ö¢Kä½úâ|q¸¸0„sÊÎ#WŸê4tuTÑ ÿüúéèaCj;lK4rì
-……ÙÕçGˆ]˜5Zž—¤£e ¾ Ò¶‚hʲÜEè\Tåy%¥$ Pæ_X4±‚·©Ùõ•^w`Ü*½våŸtB}õ¿Â1±æÚ‡ž?½—"Œ‹H´+»×QÒÅU/gP2D[ÿññæíõ»¯Ÿ/½Òg×o^γ¶IØ“Y°§yQ°‚£)SÝûoUzQïw˜n|ß!R¿²
-‰DL‚µ¦ªp€ÏiOøµ‰‹ WÏ·Åm»§lW¡›YáØëÓ[€ø.˜zÜ÷”ñmÎõ¹lö‚àáÒ÷N>ÅÝw3L [؇bÑ>¢=O ×—ƒ¿—eˆ9x}DPOmñçr±.Ê¢n@U4ëgwe/Û@þ—»|5¢\¦Œ¯U¿Ó:4?¤B¸
+D@Biúáòæëå{\û4±<½|wõeòÛìç‹«Y'N_dF…—å‹_~£É$ÿù‚aM–<„f-OÖ2$“B´+«‹/ÿêö¾†­c*Ü%”N@6"hÆþ̱ÂE˜ñci2µ‚H#íi^¸¯8lw YM #™µY2U:#šõ,ÄE±Yƽ‰Œ&\žè È,×ÁDÿö”–dJ2O{2 ßi ¸œLO?‡ÿoà–^wcž¾;´QÄ‚uM51™ ºJþ
+֕L
+sØÂDºÙVsW×8ÙN¦,Kweé·†•¼ýüüˆ§‹ÊÕå .»r™—s‡“ÚÍwÈ¡hžqÉßÛÿ®«:ëÆ­ëŸ`&h«ïÔ(Fÿã˜ä xS%”j€wý•f”ÃlDaù™¤,Òkê,]¸_)åe0LóÕªò§>†ÏÊ«Ç/wêñ“h=¡:
+?ºzžoð†Sí¥ÐâÈXñ8þ=/Vä04¤ k’~ ~_ì je!N÷ùëû2¸1F[ïp࢘cQù (È90’’E—sØ*tTýxȲ~<0bl&¢y!·‡Ú³œHkTÒ?ñH®–hD.Ñ;Íj"µ=ë‹kvEˆ}îm2öwIN4p?ñ€5WÄ0Û&Ïü®ªÀr^­7+â9Ì7ÛènñÈj㶹OuÈ<­wó%~ÂŒ ÒùvÂLêòfÂÒÈb±šs°ÐD¢f™7¸mU@”–‘{‰l2"%Ü|àÀQ
+nÆp’Lð6G Ø7 ¨wu
+õ2úõÛõ¡ lDºþøêñ3¨×ç|õ2 DJìó¶Té{@2FÓÝÓ«˜WN þ*TëÔe¾'8ξpx–i½wýYûÔß&œ¦ÁÕ³´t«&àF‘²g~[¬N`¾vsÀ›¢^û©iÖ//¶ÕGÅqò)º-
+B‚šó• D'ålP٠Ϫ\=ÇZFû,IõQÁ€"Ã=¾ysr›>.]9âµ
+ÃM¯fð,ÛúÈÏ 7°zàÀø‘N˜A/˜_[å>¥gA‘à,Ýú
+ÿ÷I*_kP{¾@ê¨BX=jFAª‘V%}fGG¶D#GöCG{T£G~vóýCÆôƒ·­±éI¹[ߢ·QL\~àžŠæÈŒíÕ!·Ì¼¤ž=ÑíD¢ œ§±ê‘ åcÛLäó¥›ÞƒŠÆ8dxÏéœlѱpb€„UéÞWyTÍ"orÝ…ª­ZT”` ¥¥•ûà8§)Õ^±(CwÒ·VØÃêîàÛÂÝå»U´ïCáýûÊÉORŸÂÿÜëÊ‹ž†f]ü/¯qéâR-ÔAL¼PÜ èŒUêï}äÒ­„øë9úœÏ”{BA ÝäÙþ‘Ãסö ;Ì2|ïð¿þ½Ã¿À¸rüÔqñx£»ø¥$pÈ d¿úúúæ Ž,þ,«&€Lnåûšzø>ÛæE Y^ÇG‚0 ï0ð»uë
+.$÷eîK ÿ±{=ãÑ­üâmÜŸÑx|Fáá­ÁV¸³|ñå4Ó
+Vp4eª{ÿ­J/êýÓï;DêWV¡#‘ˆI°ÖTð9í ¿6qqáêù¶¸m÷”í*t3+{}z ßSûž2¾Í¹>—Í^<\úÞÉç¯Ø¢ûn†©a ûP,ÚG´¢ç)áú
+15Œ£P^x½úQ¢¢P¥ƒŸËþ_á Æ•endstream
endobj
-1875 0 obj <<
+1950 0 obj <<
/Type /Page
-/Contents 1876 0 R
-/Resources 1874 0 R
+/Contents 1951 0 R
+/Resources 1949 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1841 0 R
+/Parent 1932 0 R
>> endobj
-1877 0 obj <<
-/D [1875 0 R /XYZ 56.6929 794.5015 null]
+1952 0 obj <<
+/D [1950 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1878 0 obj <<
-/D [1875 0 R /XYZ 56.6929 285.8256 null]
+1953 0 obj <<
+/D [1950 0 R /XYZ 56.6929 285.8256 null]
>> endobj
-1879 0 obj <<
-/D [1875 0 R /XYZ 56.6929 148.5666 null]
+1954 0 obj <<
+/D [1950 0 R /XYZ 56.6929 148.5666 null]
>> endobj
-1880 0 obj <<
-/D [1875 0 R /XYZ 56.6929 77.061 null]
+1955 0 obj <<
+/D [1950 0 R /XYZ 56.6929 77.061 null]
>> endobj
-1874 0 obj <<
-/Font << /F37 747 0 R /F23 682 0 R /F62 995 0 R /F39 863 0 R /F21 658 0 R /F55 970 0 R /F53 962 0 R /F63 998 0 R /F47 879 0 R >>
-/XObject << /Im3 1108 0 R /Im2 984 0 R >>
+1949 0 obj <<
+/Font << /F37 779 0 R /F23 714 0 R /F62 1035 0 R /F41 910 0 R /F21 690 0 R /F55 1010 0 R /F53 1002 0 R /F63 1038 0 R /F39 873 0 R >>
+/XObject << /Im3 1148 0 R /Im2 1024 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1883 0 obj <<
+1958 0 obj <<
/Length 2318
/Filter /FlateDecode
>>
stream
xÚ­Y[oÛ8~ϯðÛ:À˜åýò˜&™NÓ4›¸‹:}Pe:"KKJ6ûë÷P$eI–³QäÑáÇÃï\H“†?2ÓaføLŽ&b–nÎðìÆ>‘ ³ˆB‹¾ÔÇåÙ‡_™šd$•³åº§K#¬5™-Wßæww×·W7ÿ>_PçÑùB`<ÿ|qûõâßwwnèüâÓõƒ{…ïAH;1‰ç÷·W—çß—¿Ÿ]/;4}Ä3寳oßñlÀ?È-f¯ð‚1†Î6g\0$8c±'?{8ûg§°7Ú~:e.4”ËÙ‚q¤%蘴FXÀºJ$e¸ž²S”rvú`ëôC‘lì
-¥e±¯š(ŽfdÖW}
-J“0Ýkæ …ÃK¶²+ß“Å5ä¡£Í5.Ì`Œ„À42Øo¢Ï1¹M*[Áª8Óó›õx‘æ4‚?fq†˜ŽÏHÃ
-ë»Ë­Û ¢MŠðLZ´ÍÆu©˜aP_û¶» :ƒœTOÎ=ÛѪYvoAÝÚ[j^Êð(9×±DƒMuîmW1´8CÒóˆ¡Ñ‰'/I–'?òðºÇ?’ÎB^¬M“Ø@1‘'Mk „u$ßlš"K“ÚQ‘) îZ-R¦d ´ëŠyҵˮ•øÇòòÎ˃ç6­³s2/ °:Ç
-¾,VYñè%÷¦i?o`¦¢nA¬õÈ¡#ø|•=fuâÒ³LÙc‘ÔM¨¼%9ƒòÃKzkƒTÚìBuTû@_Eˆ°Ãcÿƒ€@µäïr˜c ÚZýâE–·•à„Wø™.¶\•>;æo¾Õg™ÏÅ£à¸q-ÙÐq“ü±Ü 7 Z²ÖÛÜó·Ï—‹ÏWÂÍhÈüõ)KŸüHSÙ “øGõä9èænßmêßkÿîâ¡{Ú$ª°E+ÊÛé:<§ 9R°c’8éDD½ UÅ‚¯ÏƒåÃͧEU¿å­*=6AÛ·v€I'Ôû°á^<ì¿[ÕAGéäé¥êHaüUÿûj ü±?¬ð"ÏMB¯<ýœ»wõfÒ§lŠÎMSÉ1¼
-bñxÁzÇ C»SšÃ}ûÕ§j7Üy©wå°Œ‹ºìàö½md+Àš< 6Õôm
-l8zçr¥ñ\ '/â¦ëÎ ¢ ÒF°£gÁ­ Ì+)6'u"chÃÂI ‰)íaûZÙ‰2›b(7¥8q@è/aZÄSGÒæ8s)m¿wdL­pŠ|0 ’>rdø„ôBeÐUŽF~ã
-Q¨eÂó»Aªï0 çp*ü$²NèÚ`cáü§ `;Ê㮺¦.E:áX†¹2=PËdÊBFž. R¶ßt7Ð:;i:Nl:ijôÁ¦‡‚e„M)¤°ÞßJB L 8Ì 98S 8I%û3ùXUR ‡±ð
-0ºÑ$b~Í\]G‰òu<!¯®|«‹ðì`\ìŸýˆŠU_ï o<²¯-];[ï'ÒbH(ò³^nAkUÚ
-P5ýOOendstream
+¥e±¯š(ŽfdÖW}
+Y´ï 〠\XÌë6C£ÜÚ®Dq¯kÿLü#„h")!¢ŸßÔa  •]ÙžæCԔؠhšiÌ°!Òù¼—‰¡*(MÂt¯I˜'/ÙÊ®|OׇŽ6׸0 €1ÓÈ`¿‰>Çä6©l«âLÏoÖàFšÓþ˜Åb:<s H/ås‹ªõ׬~òÝEé{"7ÚÎ<+¬ï.·nC‚Š6)Â3iÑ>6[Ô¤b†A}í?Øî2è rþQ=9÷lG«fÙ½uko¨y)ãä\Ç 6Õ¹·]Å<Òâ IÏ#†F'ž¼$YžüÈÃëÿH: yi°4Mr`ÅDž49¬Ö‘|³iŠ,MjGE¦D0¸kµH™’Ю+æI×.»VâËË;/žSØ´ÎÎɼ,Àê+ø²XeÅ£—Ü›¦ý¼™Šº±
+Ô †ŽTàóUö˜Õ‰KÏ0eER7¡òr”ä Ê/é­ Ri³ ÕQíG
+sn-&–j~¿Œ}¸tê¾…s´ð¾á0³ñ©ºŸÊWßïÇ[Eu’Ö¡ó)ˆÅãë/h íNi
+ ÷íWŸªÝpç¥Þ•Ã2,것Û÷¶‘®@kò0ØTÓ·xX8}ik¦‡c÷+°áèË•NÄsaêDâEÜtÝDôÃ#AÚvô 2¸uy%Åæ²Nd mX8 $1¥=l_+;QfS å¦'H½à%L‹xêHÚGb.¥í÷ŽŒ©õN‘&AÒG. Ÿ^¨ ºÊ‘ÀÈoœ 'i͇´ùÜäu¶õFVTuR¤¶êWalëØ^w•LtÔ$Ï=ó«Öu›ÎÛX¶Q©ltߥoî^ø¨¤.”ôlÑŠìma«£7~’)sw¾§IÙ“:ÁË(ÕR3¢&†’9Äx 4”³Óø:© €Ãç¢@£Âi‚º#€¶9gôJ²Š÷ØIL`1ÑuƈèÚŽ5Gý‹ÛwbØþópIùËÔ ÃÎ(Q¶wÐ.twWÐc7Ü3%ƒ6n{Øi.ô„ŽS!
+µLx~7Hõï4àNå‚ŸDÖ Bl,œÿT lG9`ÜU×Ô¥È@'Ë0W¦G
+‚á0ž@F7šD̯™«ë(Q¾ƒ'äÕ•oµqžýŒë‘ý³Q±êë}áGöµ¥kgëýàDR E~ÖË á1h­J€eB—jtB°ÿɪûŒ än]&øŒ»òâoÿB¶ÿ»<z¬Æd˜#‹ˆ zˆ”cè‚i¨šÀþ?–•endstream
endobj
-1882 0 obj <<
+1957 0 obj <<
/Type /Page
-/Contents 1883 0 R
-/Resources 1881 0 R
+/Contents 1958 0 R
+/Resources 1956 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1892 0 R
+/Parent 1932 0 R
>> endobj
-1884 0 obj <<
-/D [1882 0 R /XYZ 85.0394 794.5015 null]
+1959 0 obj <<
+/D [1957 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1885 0 obj <<
-/D [1882 0 R /XYZ 85.0394 686.1157 null]
+1960 0 obj <<
+/D [1957 0 R /XYZ 85.0394 686.1157 null]
>> endobj
-1886 0 obj <<
-/D [1882 0 R /XYZ 85.0394 612.8143 null]
+1961 0 obj <<
+/D [1957 0 R /XYZ 85.0394 612.8143 null]
>> endobj
-638 0 obj <<
-/D [1882 0 R /XYZ 85.0394 575.0344 null]
+670 0 obj <<
+/D [1957 0 R /XYZ 85.0394 575.0344 null]
>> endobj
-1887 0 obj <<
-/D [1882 0 R /XYZ 85.0394 542.5339 null]
+1962 0 obj <<
+/D [1957 0 R /XYZ 85.0394 542.5339 null]
>> endobj
-1888 0 obj <<
-/D [1882 0 R /XYZ 85.0394 507.482 null]
+1963 0 obj <<
+/D [1957 0 R /XYZ 85.0394 507.482 null]
>> endobj
-1889 0 obj <<
-/D [1882 0 R /XYZ 85.0394 443.2139 null]
+1964 0 obj <<
+/D [1957 0 R /XYZ 85.0394 443.2139 null]
>> endobj
-1890 0 obj <<
-/D [1882 0 R /XYZ 85.0394 372.8773 null]
+1965 0 obj <<
+/D [1957 0 R /XYZ 85.0394 372.8773 null]
>> endobj
-1891 0 obj <<
-/D [1882 0 R /XYZ 85.0394 191.4417 null]
+1966 0 obj <<
+/D [1957 0 R /XYZ 85.0394 191.4417 null]
>> endobj
-1881 0 obj <<
-/Font << /F37 747 0 R /F48 885 0 R /F23 682 0 R /F21 658 0 R /F47 879 0 R /F39 863 0 R /F53 962 0 R /F55 970 0 R >>
+1956 0 obj <<
+/Font << /F37 779 0 R /F48 925 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R /F41 910 0 R /F53 1002 0 R /F55 1010 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1895 0 obj <<
-/Length 2131
+1969 0 obj <<
+/Length 2135
/Filter /FlateDecode
>>
stream
-xÚ­YÝoÛ6÷_á·Ù@Ìñ[äcÚ¦[†6íw°îA±d[˜,y–œÀÿýîDR–d%ÙС@MNÇ»ß}ðŽaS
-ÿØTi¢-·ÓÈJ¢(SÓÕnB§x÷Ó„yžE`Zt¹Þ,'?¾ÑÔ«¹ž.×Y†PcØt™ü1{C,™ÿ¹üåÇ÷Jtx9#š ò‘éËÝ»·äí§»÷Ž³'•b÷¬×Ÿ?ßܽ»ý}¾àŠ‚ôùBQ:ûx}÷õúƒ£}ž[>»þéæ…Mn–­][hÄß“?þ¤ÓLþeB‰°FMŸàf-Ÿî&R ¢¤’Oî'¿¶;o›OÇ°“ÊÅ¥ÑÕã31L‘0Äj[„9C8p!"‹Êã«:œŒ.ÀQ´*=<¦‡!Œru„)æy.õêy“шD}Åλ‚]vd’2x4«ÀoÖÎêmêE¼ó«òà~ã$9Ì™™¥•ç-׃oü^Íúi›­¶n¹‹ëÕ6õÅ—¬U×é.-j÷˜±«²X Ó…V`ŒXሪ£”oŽ‡¸ÎJøRÞPò×l¶.ƒñ]ˆüÈ›~(’Õ>œ ÏQ5»];¡Eé6
-V lhÇý>ÏÒÄ=9•˜3 «r·‹‹ÄQó¬H¯æ ÉT``³mYÕŽ]àNŽ„\ LŠ>IºŽy½hÁ…D\åñ±JݺA~²°(÷ZåºnÀwë3ó%€\@ºIñ
-„–"à nì»
-¥Wáú)Ës·zðÐ<!ħ©†šÄ´°/çr—ëù\n¹š\Þå2#ƪ`ð¾<ÔC½,'ÒšWô
-L#zu‘³ŸèuŸbÜ4NuAäW—îwùö³[톂[""¡6 ¦‰¤,”…¢ªÓ8éGěۻwneð*øÈ ÚuS)JïÎÕ6.Š4?+wå?‡Òý¬w¥="ùŠw;\/x7p5Þým¸¥†º©¡n¾¸e`Ù²‹^•ZrÝßò¦ˆBCb>”!!ór³ÉŠÍó 0°@Qó
-®@\ §ñTv®ÿ+= Õ2š¨ˆF=µ^;¼¡cÆîExiBO1c‰RV÷MÈ’Ë£”Ådô2l-×nýãÁjÖßõkã:íë5.<Nƒ\S°¤êy,YɨÿG,ƒÀ,{fAE€æ˜C Ï´:´‡k—Ò»ù—Uˆ®ª“ÑÛ3=Œ1ÐþoÀ¯
-E`Gvå‚62ÐMèA ê†9ËšÙ ‰ŒæùÜï«~¿/ýè¡f{?]´/\¨ZÌ“Ø“°9¾BM4jZ8¢dÛÿ6hà‡mó /ËumótrSí[„ŠdÒ³»²Æo© QãÅQ;RámÛÞ:†:Κ áMµ½‰{{NeÏ(xç9=à•(½(×"ãQ©³“ôa¡´f£¤þTƒ
-óÑÙ­ïðªmyÌ“v>pê­ËVMQzÞmüèI›´H±ßØñ¶­¥ŸVž Êyî
-MU_ !(n0•¼û@cÞ7_ÉÈû@j´fŸ§ WMYrãz tŒ*jЋ6h¡ÓؘÃ`⤊ý‡Qñ*lž”óm3¬#\'»¬È fÇu°äKºöh+ÿÙǸ8h¡`'ÃúN àæň0«Qñ3¬é¶ÕàcïB›#¦Â Rœ™8[†7Û4ß»•?PH«Q›VPUÖq8dR’ˆj—kn?Þ.››#üoyûéî~Ĉi˜d˜RòߟI™VƒÀ<¥!š] x[à ÚÉýéŽÅƒiÈŒÎÉš@÷h\Ufñª.бÎò¬>Íc³þPk-W>þáËy°=·®ŽÂïêxð!Tç'Gjª0ü>ÅžP{‚«¹åc–4BB9ƒ7½úÄm¿Õ€gWœ9^è¸ëBÛµZYpªÒ/uyq™Jð¤DO~—ç.ºÝõhW3l-‹Ìyã—º<>’`ò±r]·g¼.Ë?;}0Æ,$¯¦¶_ÄîÓÇsQLçBBûªB¶57ܬòÔ{é0äl4Óh?ÅîonÜ·×î?X=’\l[£Š*ø]ˆ‰fHgOVæf[Ù»`†i+R"Ԩ΃×vP+4¬•@:×Ê¡/5ô{Zëö:o¬$‰¯í &]]þüéËëHÝuz(BM¹?UÐãxϽ…6
-LvÜ÷ÅùP·²Ä(+Ã]½ÇÇt¹ ¼u$»dƒó˜ÀEà]àoä/‚ïðL¿LUØ]pb¬£‚Eÿ&›öÏß8ü¹ƒU-Üü<{Å7zx‰ý=å¾Êª‹’Á`F‚~SCI5zK…Ôòæ’îå “³„Ë
-ÑÞ—x¦ TÆþšç²c»ÒÖàïþKÇùO@2"Â>~qÁ!Œác”BÀìË;&üë`~©û?¥zo«endstream
+xÚ­YÝoÛ6÷_á·Ù@Ìñ[äcÚ¦[†6íw°îA±d[˜,y–œÀÿýîDR–d%ÙÐ!@D‘§ãÝï>xG³)…?6UšhËí4²’(ÊÔtµ›ÐéÖ~š0O³D‹.Õ›åäÇ÷"šZb5×ÓåºÃËj ›.“?foˆ%ó?—¿üø^‰-gDsc?}¹{÷–¼ýt÷ÞQö¸ríâžôúóç›»w·¿Ï\Qà>_(Jg¯ï¾^psŸç–Ï®º¹Gf“›e«GWWF*ñ÷ä?é4•™P"¬QÓ'x¡„Y˧»‰T‚()D˜É'÷“_[†ÕæÓ1ì¤2Dq©EEtDõ8ÂŒDŒQ$ 1‚ÚaÎÆTˆÈ¢òøª%£„ 0”­Jéaˆ£œDfc‚yšK¹zÖd4"QÄD_°ó® F—‰¤ Í*°›µ³z›ºAïü¨<¸gœ$‡93³´ò´åzðß«?m³ÕÖ wq½Ú¦þ£ø’´ªã:Ý¥Eí^³bÀvU T`ºÐŠ€ãŒ«ÀQôo”òÍñ×Y _
+Û™<Å1›­Ë |׆<?òªŠd5‚§DFÂÓ€‡GTÍn׎iQº‚8‡6sÇý>ÏÒĽ9‘˜S'Vån‰›Í³"½š/$S€Í¶eU;R4'|8¹)¤j@—`Rô‘HÒu|ÌëE .â*UêÆ ²ðtÈ Ü#h•{éš×ÖgâK
+0ƌ݋ÀðR…ž`Æ¥¬î«%—G)#ŠÉèeØZªÜúÇ)‚Õ¬¿ë×ÆtÚçkxœ±¦$`IÕóX²‚QÿX†#XöÔ‚Œ"
+ê•+Éjÿ^ ¸±;ì%–o@‘¸z@5õP3di5ÛAaoüŽqž%í9­ü;W«å…à®ÂY¨‡.M-¬‚³‹óçM-‚[€VS‰í…þn[·]–—Ɔ3˜pÃØyçg Õøƒ2Þ‡µ³€¦§Ú§« ý=M®Fê$È–qýJ$ˆ<×I® BÞÈöÐTƒÏŠò/aI;g³ƒÇnÁm¡ÜÃ1z
+%Ñ(iá&}£ Ûú·A?l‹_X,×Y˜h‹ß “ë2h_#” ‘žÝ•5~KmˆÏŽÚ‘D«myëê8k6„•j;}·zeO(Xó”n-à…(=+W"áQ©³(“ô•a¡”f£•¤oþTpƒ
+ãÑÙ­¯ðªmyÌ“¶?pâ­ËVLdQzÚmüè§6i‘b¿±£mKKß­<A–óÔ1$šª">ABQ<Ü +3x÷ʼo¾’‘·Ô¨Í>O0]5i¦ÓÃDGY˜ÅF jÑMX|8µ9 :NªØh¯Âæé@8_6Ôu×É.+2ÈÙq4ù’®=šÅÊö1.Ž
+i%jÃ
+²ªÂ<‡ìBJQíbíÃíÇÛess„ÿ–·ŸîîGÔŸ†N†)%ÿ}ó™”i5pÌS¼Ù9‚×5ô m“Ü‘n[<è†ÌhŸ¬ TßÁÆEe¯ê‚ë,ÏêÓœ16 î¹Öâqåýß)¾ ‘Ûsëò(<Wǃw¡:?¹©& Ãó)öµŸp9·|Ì’†IHg°ÒËOÜöK xwÉ™ã…N£ìi­,Ué—ª<‰¸L%XR¢%¿¿Ês ]ŽÍÁß“ ‹AË"sÞø¥*Ĩ|¬\•Åí¯Ëô“:}‚WSÛOb÷éã9)¦Îr! }
endobj
-1894 0 obj <<
+1968 0 obj <<
/Type /Page
-/Contents 1895 0 R
-/Resources 1893 0 R
+/Contents 1969 0 R
+/Resources 1967 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1892 0 R
+/Parent 1932 0 R
>> endobj
-1896 0 obj <<
-/D [1894 0 R /XYZ 56.6929 794.5015 null]
+1970 0 obj <<
+/D [1968 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1897 0 obj <<
-/D [1894 0 R /XYZ 56.6929 470.8431 null]
+1971 0 obj <<
+/D [1968 0 R /XYZ 56.6929 470.8431 null]
>> endobj
-1898 0 obj <<
-/D [1894 0 R /XYZ 56.6929 355.3786 null]
+1972 0 obj <<
+/D [1968 0 R /XYZ 56.6929 355.3786 null]
>> endobj
-1899 0 obj <<
-/D [1894 0 R /XYZ 56.6929 281.517 null]
+1973 0 obj <<
+/D [1968 0 R /XYZ 56.6929 281.517 null]
>> endobj
-642 0 obj <<
-/D [1894 0 R /XYZ 56.6929 235.0409 null]
+674 0 obj <<
+/D [1968 0 R /XYZ 56.6929 235.0409 null]
>> endobj
-1900 0 obj <<
-/D [1894 0 R /XYZ 56.6929 198.7213 null]
+1974 0 obj <<
+/D [1968 0 R /XYZ 56.6929 198.7213 null]
>> endobj
-1901 0 obj <<
-/D [1894 0 R /XYZ 56.6929 159.8503 null]
+1975 0 obj <<
+/D [1968 0 R /XYZ 56.6929 159.8503 null]
>> endobj
-1902 0 obj <<
-/D [1894 0 R /XYZ 56.6929 83.0669 null]
+1976 0 obj <<
+/D [1968 0 R /XYZ 56.6929 83.0669 null]
>> endobj
-1893 0 obj <<
-/Font << /F37 747 0 R /F53 962 0 R /F21 658 0 R /F55 970 0 R /F23 682 0 R /F39 863 0 R /F47 879 0 R /F48 885 0 R >>
+1967 0 obj <<
+/Font << /F37 779 0 R /F53 1002 0 R /F21 690 0 R /F55 1010 0 R /F23 714 0 R /F41 910 0 R /F39 873 0 R /F48 925 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1905 0 obj <<
-/Length 2901
+1979 0 obj <<
+/Length 2900
/Filter /FlateDecode
>>
stream
-xÚ¥]oÜFîÝ¿b{¨Üf'ó¡’''qz.7׸@^”]Ùª•Ü•Ö®q¸ÿ~䣕ÖÚ8ÅÁqF$‡ßäZ-$ü©…·Bš<]dy*¬Tv±ÚœÈÅ ì}¢øÌ2ZŽO½¹:yùÞd‹\äN»ÅÕõ—Ò{µ¸Zÿ–œ}üx~ùîâ×Ó¥¶2y#N—VÊäÃÙå/g?ìãi®“³ïÏ?Á«Î3‡rqúûÕ/ß[3Boò\d©E®ñÏ—ïÞŠ·?]¾Ç£'çW»ã+)i×?O~û].Öp³N¤0¹·‹x‘Bå¹^lNRk„M‰úäÓÉ¿„£Ýð霈¬ñÂzÍÈH«…R"·VO„dsáŒ6á.ïÎ?½ýùâãÕÅO—tq“.. '‘û”o›õJ¬Ú暎걌l&t.=‹¨êN—ƪ¤¿-q!øêßRê›Ý¶è«¶¡]„Ô|àºÝ2V5ªt*Œ‘£Efhk)ÒÌð™€T9P~sqùŽÈåhŠMI€®ÜÞ—ÛÁ~{ª|ÒÖ´¹ë«ºêO•R ØŽS:¹º¥{Éç*¹-X k 1©…ÌS»X¶ºjSÕÓ6途Ov«~H–-š5o?6}ñ­ûvF/*•Â§.^o´>ª°]P9E/06ùÔ}¹)›¾cÒc>ÊfU·]˜I“ª!èçm±*»Nûr»©ÀÅïU¥ …ÓZG)Oài9
-~S-WmÝ6ÀOjÒäm]ì:Ä®Á#‘"ž
-*D@7â7nÃKݵ|lÀÊßÌ1•«ˆp×튚­Ú bf¾úÇ:r‰àmä.wwwíð¾v½p)ÊvßRp ¸^X”L^~K°o_N?Èèƒï¾›ùä%Áú–ž%Ší5=ëª)ç°ýÒT=E÷¯Äö4
-ï‰o(²û’wÈÑk¼:Æ‚K…´Î2îuy]ìê~ÉxÊŠw˜B5'
-D­b®ÛºnB$·Ïô¤8‹¶ƒì²"M¥š†–6ÄVˆë5©¹ë€&6èÁá_c:UI`7KC`Ô&†xؽm»žVU]Óê3¹ãè{·eÃx[|Ê ~N/°ŽXoªûøAÁ "¾¶ov¬!€ÄØ?I‰±èkR"Þ-µG©3á3íôˆæù«Ë…ÔÖ*Q{¾_>V"@ƒuÎJ@NÎZñ¤Oî€ð‡Û
-CÆgµ‰Th ‡x‹¹ûäJ¨ÌE&ç/¢•Ð2ÍÇŽ±$ãJ5ø–ÕùTÊäŸKç\rŒ;ú~J‚ TqfO»ZÏP7PÕÙÜŽk%—'wT~ÜW`•ëpS
-$„„² ]Ù3 Tª°¸øxŸÒˆr|¼¥þpŇG¥MÙ±;EÞ¦EºÏ…z£ŽMìL³rvÝï‹ò9å¤Jd¼ž‹ËútŸî³ÊC˜X¿ˆµw¬ºc‰<®­éµ‚¾s·.¹ð.¸oè·hï…ú¡Áðb¹Fa'”ðLaR "€Ç ‹¥—Bi{Фäå±J1“ðõ¡£#쌊iø„†
-S
-š²1ÕŽ:Ád¯y¤@šB3¤ì2?pvÁOÆÙ؈•#Éìz©T¹×ÐBÊÜ?Q¤Mó&L(pf‹PæË`&¡Æðú1$P²À&¦„RðÀª [Èx3ï).¢ !ºã¢hc›(2—t›<[ÞD³,ê›v ·ÙÌÏÑ•2Ãmßúb~1ŠŒÑ8¥Ý>Æ:6öHÃë‘yz%“ú§cÃéûC¡š3¡œyu]š¬v[²Œ¦¯i³mh¥“~8{»üðÎòœ,·P}=•eo·¤<ÚɆûž¡Ø³ ´ ×®\=‡ë¡Vºpƒ+@VtåÒ¥i¶k.42rÙñÙA¸ßts}¬‹8Üc³ÂáëUôÇ=É0øãÊÖUç²qô ŒnÝîB ë?wÐeuÇf…Ã[†ýK wèl¨ñÉ’‡â±ã¨%ÈMÙ”[j|ÇÑÀ7B#߸¾S·ý˜ÎtƇšKØábàpN
-A÷ÜBm7´Žú}A¯Tmfû
-zês¹Z]!þÜ
+xÚ¥]oÜFîÝ¿b{¨Üf'ó­Qòä&nÏE“æ(Ð냲+ÛBµ’»ÒÚ5÷ßr´Úµ§8øA#Έäð›\«…„?µNHSØE^Xá¤r‹ÕæD.®aïûÅg–éÐrzêÛË“—ß™|QˆÂk¿¸¼šà
+B† —ëß²³Îß¿½øõt©Ì¾§K'eöîìý/g?ìÃi¡³³ïÏ?«.r‡
+qúûå/¿sf‚Þ…È­C®ñÏïß¾o~zÿ=9¿Ù^IIƒ¼þyòÛïr±†›ýp"…)‚[Ü˪(ôbsbΓ ÍÉÇ“'»ñÓ99„ :Ÿ‘‘V ¥Dáœ>’+„7ÚÄ»¼=ÿøæç‹—?½§‹[5¹¸\€œD,Þ¶ë•XuíÕS¹\èBQÝŸ.SÙpSáBfðÕ¿¥Ô×»m9Ô]K»iøÀU·e¬S”¶Â™3Zd`†¶–Âæ†Ï¼
+ÀX*ù$A õA˜¹(ã7V>Eàä f9Ô*¹tùsâñÒšc=Nb6€žw‰L,<i^7å°ºaa‚ŽDð*zjÝ^Ï(Ýõ¨‘§ÂˆÚÕ…G ®n•)Eþ‚JvL/d\A&OìÉaôä@©!åd ö¶Ô!ÙÑäÐ.¾b:¬~#ÑÃIŠ@,(}ÈSÅ-„lŠ±yþ„kz……º=rM,=f$“[̈|Sz°î Àz°.XŸE¼q5€v´„$ÑV«ïè“h”2ÕØ
+èÔ-x.ÔMjbgš•³«a_”Ï)Ç*‘cðz..èÓƒÝg•û.2±~‘jïTu§yZ[Ók }çn]qá]rß0lÑÞ#( Û†±Áñb¹Fa'–ðLá D
+‚rÏ ®®ôgÝêG é$!÷¨æ¼Ð‘AOJM'1éT×éiù´pò¸uÚì°ÜÖÞPŒ£%i×[Ö‚bÃ
+Ï’ÔFù}àq†°Ç`¸%4©¹LPŠg¸jw›OÑ.8Õ›ý–tž] c‚Œç:&pqu87àéÇ\Ó«Œ^_"i:)Ž3¼ÖT•áM£UÝéÀaäˆ
+à¸úć8^!¾¶ª’_¢ÄS©$†5*&vß&;/£Ú©‘Ê¡oPV9ÅK ¢,ÿ¨hE‡ù²¤ð8¥
++Ñ4¯ã„×q¶e¾Œf‚j ¯b‚@
+cÿôÔð
+÷«~.°Ou‘†{lV8|½Lþ¸'\ÙÀºîÓ\6Þ#”Ñ­»],!pý纬þ©Yá8ÆÇ–aÿ’GÃ;j|òì¾|è¹êr]µÕ–ßic4òÐÄ7®¯âÔm?¦ Äñ¡æR
+›²MCþ(¨6=ǃUu”¨Ï={÷áÇs>Œé6ሡ%þ€Bëq<‘~ºéWP‹íÅ7ùBT68úE7ÑÉXÐIxì ö…=ø¥aé¥Ìþ%“pÏw×\)* ç›nU6ئ½ž ¡ÓÁ3D™. ﯹգôßddÇ·Jdý”ê³LGÊyxž²ú2ʦ‡éûs¤µåá¹-
endobj
-1904 0 obj <<
+1978 0 obj <<
/Type /Page
-/Contents 1905 0 R
-/Resources 1903 0 R
+/Contents 1979 0 R
+/Resources 1977 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1892 0 R
+/Parent 1983 0 R
>> endobj
-1906 0 obj <<
-/D [1904 0 R /XYZ 85.0394 794.5015 null]
+1980 0 obj <<
+/D [1978 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1907 0 obj <<
-/D [1904 0 R /XYZ 85.0394 752.0756 null]
+1981 0 obj <<
+/D [1978 0 R /XYZ 85.0394 752.0756 null]
>> endobj
-1908 0 obj <<
-/D [1904 0 R /XYZ 85.0394 252.6303 null]
+1982 0 obj <<
+/D [1978 0 R /XYZ 85.0394 252.6303 null]
>> endobj
-1903 0 obj <<
-/Font << /F37 747 0 R /F53 962 0 R /F21 658 0 R /F39 863 0 R /F23 682 0 R >>
+1977 0 obj <<
+/Font << /F37 779 0 R /F53 1002 0 R /F21 690 0 R /F41 910 0 R /F23 714 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1911 0 obj <<
-/Length 1788
+1986 0 obj <<
+/Length 1787
/Filter /FlateDecode
>>
stream
-xÚ¥XKsÛ6¾ëWhr)5 QâA€l§Åq%µœÚJ§“Ç&!› E:"UÅIûß»À‚%3µ3,‹}~XˆŽøÑq(‰ŒY<V± a@Ãqºã+X;QÇã·L~ŸëÉbôÓ3®Æ1‰%“ãŲ'+"AÑñ"{ë=!4 xçó§GþÑÙüÙÉñ|âÓX(áM_½:ž?ý9ñY
-•ª
-laî)‹cWÓß.ÎîO~“æY™çÀcw;÷îÀõ¶HíSéˆýÿ¨2wkAñû<q×*#ƒ¹²K‡¯ø\Àû Úè}ïL_/žŸßï–`׺lÁõⶆP»ã :§|³Ú+  ’m4àé«<ŽÚ?N&>5ëÃÎÂK‡i}†ƒì—ŠÝíO¬>ïàÕ³‹Ž°eÛ]$ø@1ÙYUÅ×þ‚eL'7ð‡IÐyö»ÿžÙý %áQĺ^ö;
+xÚ¥XKsÛ6¾ëWhr)5 QâA€l§Åq%µœÚJ§“Ç&!› E:"UÅIûß»À‚%3µ3,–‹}~»ð£ãP³x¬bA€†ãt5
+ÆWpv2¢ŽÇo™ü>דÅè§g\cK&Ç‹eOVD‚(¢ãEöÖ{Bh@& "ðÎçOü£³ù³“ãùħ±P›¾zu<:ûsâ³0
+°†qÉ|!hÏ4€SÊåX…1‘œqëŒ$ËÖº®u=ñ%˜ùE•&ÅuU7¸½©Önòÿ‚Ë1æ}JI†l·0bÝa0ö#a·ê}‹ïÖÉê¦ÐÝö‹e”WÕ:o®W¬×«$õWYØÉï3×:]kÔ4ðÉg§Ë¿?«?‹âö’‰³™fùÉñç¸XÒ¢xqöcñùÑ° ô!64ºn¾ÑùP˜0œóç³è•|òr¿Ùþ¹ó?Þ¼Üüþë¯Ðú§gß]ì}’H†!,"d’a•ö&¯¹Ö°à±—\Vk¤éO6D°~"A-)Jèn„¬Ë,¸‘1…q蘶yQ ÜË[¼*ÓËdS ©Þ¦v
+ &@©õúo½vZ9®^Rò»
+„C¡0Ƽ¦rO{ £{Ú½3
+wÕòk
+}¥à»«¡µ€¨¢ªm ag ϬÚ\ÚHÀúã¦'‘NXD¤â(l¶¨ÖˆÄÐúÅ
+µ@=ßXÄ™E1—w‹XE$ܽ›×øæÕã6¿ÊCA”à÷ãƒRê
endobj
-1910 0 obj <<
+1985 0 obj <<
/Type /Page
-/Contents 1911 0 R
-/Resources 1909 0 R
+/Contents 1986 0 R
+/Resources 1984 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1892 0 R
+/Parent 1983 0 R
>> endobj
-1912 0 obj <<
-/D [1910 0 R /XYZ 56.6929 794.5015 null]
+1987 0 obj <<
+/D [1985 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1913 0 obj <<
-/D [1910 0 R /XYZ 56.6929 343.1761 null]
+1988 0 obj <<
+/D [1985 0 R /XYZ 56.6929 343.1761 null]
>> endobj
-1914 0 obj <<
-/D [1910 0 R /XYZ 56.6929 255.6488 null]
+1989 0 obj <<
+/D [1985 0 R /XYZ 56.6929 255.6488 null]
>> endobj
-1915 0 obj <<
-/D [1910 0 R /XYZ 56.6929 192.0319 null]
+1990 0 obj <<
+/D [1985 0 R /XYZ 56.6929 192.0319 null]
>> endobj
-646 0 obj <<
-/D [1910 0 R /XYZ 56.6929 152.6743 null]
+678 0 obj <<
+/D [1985 0 R /XYZ 56.6929 152.6743 null]
>> endobj
-1916 0 obj <<
-/D [1910 0 R /XYZ 56.6929 115.923 null]
+1991 0 obj <<
+/D [1985 0 R /XYZ 56.6929 115.923 null]
>> endobj
-1917 0 obj <<
-/D [1910 0 R /XYZ 56.6929 83.7361 null]
+1992 0 obj <<
+/D [1985 0 R /XYZ 56.6929 83.7361 null]
>> endobj
-1909 0 obj <<
-/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F21 658 0 R /F48 885 0 R /F47 879 0 R >>
+1984 0 obj <<
+/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R /F48 925 0 R /F39 873 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1920 0 obj <<
+1995 0 obj <<
/Length 3196
/Filter /FlateDecode
>>
@@ -8490,80 +8852,88 @@ xÚ¥ZKoãF¾ûWø(QO?Énìi’™v'³X ›ƒ,Ñ61’¨ˆ”ç×ï×O‘TSò`áÛÍRu±ê«'É®)þصV„
#¯K#‰¢L]/7Wôú÷~ºbf‰æ}ªïï®Þý(ÊkCLÁ‹ë»‡/M¨ÖìúnõûìýçÏ?}¸ýÏÍœ+:ûžÜÌ¥³½ÿôÛûú½Ï7†ÏÞÿôñËÍœYJ1jé
:ûõÓ‡æ?üòéÇŸ>~ºùãîç«wI¬¾èŒ
+ÓŸW¿ÿA¯Wx‚Ÿ¯(F«ëüC 3†_o®¤DI!âÎúêËÕ¿ÃÞ]÷Óœ*”ÐDi^ftÁÙ5cÄ(ÅÊP†‚ §Œ/¯Ûf×ÖíøQ
-È#À´‚Ð’ëÜÑ ŠæJb5%TAåó> o"“3Q¤²Rí·«å|Ùl«íͼ€y~Ÿ/þˆ«{+컕è±a‚áÙ ³-ƒ¯Õk[ÿ]yÂÁy’- t‰ç2ÃS(¢ ¥Ž,êõ7°|J«¯æ…"¥òÈ|»Ø|óÝEyw;Ëðã‚‹Í¿}†ß\ÀK~=O0²ÆYlWÍfBÀVY*=fß^w±Zí«¶}»º‹,—Oû¦éVõ>''<TfÌôp‘é¡­rü¸$¼ÇÎ Ýo.‡3k,4)òÁèÃÇ/?üzûùîö—OéGG®ôzÎ ¢”Q§ná©„S!šj¿èª1M›~ö_Jùã{u³õ›vg)š}F&))"M"dŽæ”È2‚
-‘RòrvÛ…“á´ûÊ_¡Â•_-ÂÑ‹$ãsµ­«møåbÝUû-ä}¿ì}Ù×ÝÜŠýð’-‹!Fëí#(M1ëžr(E¬1.¬¦g"V­™S)%xöúòœáv¡ÜngÙì÷7LϪv×lWV„Œ:¡)®LD
-Níöͺ͜, ‘EaoOËp3D3ÆA$Ã4ÐJäÓv€Än½Ìõ6£žgtdkÓjJ?'%OáäþÕs}‚¸ÄÛG2‰Ü%ÍÐ>ï–]¿Þ0Æfßá—òXÓK@#• 6ö7zv{/u÷äw“y‡jQš0-Ë Õ|‘S %¥PQðfœÜÈÀ»­:¿qØùEFU¥&†2ÖGRÞ ÊÚ½äc ½’åÿÜÔ« ÃSxìmU…-ëž“b0®ˆ*ËAÿøˆ^2êŸEÜ嬉`#)ˈŠÈËhu#BP¨ûM¦¨*ÆP œ×]óXáÁ÷7¨¸H6„2ª‰`b¨Ó/.|~9©ÆB¢$â®.‹óUJŸ*O§UJ¢:âª$ò¥pœ³GF¢Ì‘}e¡d pä
-U”LÎ*­'÷ÇU13~#v !þtĤ‚ê¾±ÀЕ'àjZ{D8{å\·ÙÍë »wåÝz±L~èÓzOÖr¦ce+ ÕÅÈ& A¡Rž
-!çøk±Ù­c
-„"š­¹;pÓt½ò[H={mž }jëDìJïŒ.PDóc*¹Üž*“2´^ƒ
- ê2¸Õú“Wûå¥ù> yU Þdíx.áBåã!UVΞùôÍ9/ߘ²(
-ï4°˜4 7ZnøôYÓô©¦M“¨œi¾¾%Ç7Ù|V¶c >.ƒÒ b°­eƒŠÐ"aáDs+oǯXìj–#[—Ÿ¶Ã(76ß©ô^øËóbí¦gX®šÍ¢Þ% gBð]ÄÕ8gšV;ˆ‘ý6a~Σ‹‹°Qý3½àÑ}ª3°‰T6»‹°‰o‡˜á”Øç;+W$ÊÈ%FItø#Á†Y;ŒçÝ"µãÂôÚq{ÇIêV/¶×tU~Ư)J8^ˆK}¯„0©OZ£—©¶AWu{Qpø2+΃ïä6¹¾KPÂhj·ßøv¤”:ÎElõƒœÇ™|Ce
-Î|KûóbÔB hÄt•\Ä~ä“qš¾*ø¿?Ñ<~Š*í‡Hz¢ƒT! ‹BYÁ3cÑÓÇœ§²ÿ^ŒŠendstream
-endobj
-1919 0 obj <<
+È#À´‚Ð’ëÜÑ ŠæJb5%TAåó> '–d9E*+Õ~»ZΗÍöá±ÚÞÌ ˜ç÷ù⸺·Â¾ûQ‰&ž½Ð8Û2øZ½¶õß•'œ'ÑR°@—x.3<…"ºPêÈò¡^˧´úša^(R*!Ì·‹Í70ß]”w×ì» ?.ˆ±ØñÛgøÍ…ü¸ä×ó#kœÅvÕl&tl•¥ÒcöíEq«Õ¾jÛ·k »Èrù´ošnUïsrÂCUaÆL™Ú*ÇKÂ{ìÁÐýæ‚q8³ÆB“Ò(Œ>|üòï·Ÿïnù”~täJ¯ç¼ Juêžz
+ovÁ)ÀÝ ¼Ûªó‡ßXdTUjb(c}$åÍ ¬ÝK>Ø{ YþÏM½
+2<…ÇÞVUزî9)㊨²Èô€è%£þYÄ]Κ6’²±Œ¨ˆ¼Œv‘Q7"…ºßiŠªb ÅÀyÝ5|ƒŠ‹dC(£šHf!†z0ýâÂç—“j, J"îê²8_¥ô©bñtZ¥$ª#®úG"_
+Ç9{d$ÊÙWJVÁøG~pÁçÐ5¸Ï2c¸¤.ÏlÁy/ õ“ƒ àˆcwOuë[ú¸³Iáv!’Á£TH“_%Ù5Ž€
+ƒ™fí®ZÖVÖ_íF¼ñòdkX»úþöÓ‡°oÞêua™ÿ·ƒ¨®ç˜Õ (>ð´ñÕ]ÀSËs…¢²àì‚é9‘,E¾‰Ä‚g¥Úô3@Ο91Gõ5á1á×ûî°#6p€(‡«K^§á
+m®ÖÃt1™ÙL‘„LáŠÊÙª²ÿmZ©rhu»‹Ãºóÿ,›ÍÆG5,‘°¶ÕÚßI»p²6ƒùàg±h¶Æ®×ÍK>Í †¢QuÑŠšh.—w‚d‡­=²
+:A:C/¦†:qI0ƒ$d)å%Ë "QT÷,gC°Ï:X¬›åbí—OMtȺXm}8ì]¼vÿœÄ';ê'Î5šS‹
+éEÿõ°Ýæõ†ZŸª–†m Òg>•—¨PEÁä¬Òzrïq\3ã7òh×òXáOGL*¨î ]yþ¡¦µG„³WÎu›Ý¼²{WÞ­ËT€á‡>­÷d-g:V¶’P]Œ\a²*àù`è$L‹¢ï¦Œj}áÑyŽED3BFõWÝv¾º¶Ã“ 3õ2ãv ©Ê¤×Ku$âør€/K+x„Ÿ[Ü>Øs}çPÐÙ¦ñÚõ›ÕzqßØÞÇÿ{Úú`¡ö¸ê<—Ø2­üûלIt¸fÐ;ô!j¦!ªË—VAêeþóPûÅÊÚ¤àxŽ¿›Ý:F
+æŸz\{к•en¯Ötöjj¯@(¢Ù*»7M×+¿…Ô³×æà Ú§æ°NÄ®ôÎèE4?¦’Ëí©2)C[à5°^Öll&Ζð¨
+UŽJxËÏ…p÷U8ÁÖðîN§xr[„UËßÒrROòIyê“òÛÑ¿η
+¸X‘dªºE½<"ž­nûTÓÕm¢r*c65T¹6Éà½)[_4f‹óh?+[¢Ê'ÆeØPº/©Ü²p—ÜG(»p¹Uó0º…„>ÈævÏes»¨ÃÆ}ݵvÖ‹Êñ_›ûÜf¯ÝKUJ¸:°a¡· áXüK Œ ´êb±cEs×ÁìŒëIkÛR@+À쬵ûTÓÖNTÎÚËœµáÞ¨dN Ck—„1y^´H”mhkN¨Å×@¶ßBníg«|Ä($N
+³“}¿N…Yêû{¹ÎUò¯±ñMÝ©Xô
+¤ã/ÓälèÿÚ6z—; Y¢¦ežM™žƒ®ÚØ>ÕÓG*§¦§“6V”ŽŒD™#m¬!Ò¾$ùy_‡ˆº nµþdçÕ~y@i¾hFˆ7Y;žK¸PùxH••³g>}sÎË7¦,ŠÂ; ,&MÃM–>}Ö4}ªiÓ$*gš¯o‰ÁñÍA6Ÿ•íƒO…ËÆàtƒlkÙ`£"´HX8ÑÜÊÛ±Gã+»‡åÈÁÖ%ħí0ŠÀÍÁ÷#E*½þò¼X»é–«f³¨·G È™|q5ŽÅ™¦Õbd¿M˜Ÿóèâ"l”@ÿL/xtŸê l"•ƒÍî"lâÛ¡f8%öùÎʉ2r‰Ñ@þH°aÖãy·Hí¸0½vÜÞq’ºÕ‹í5]•ŸñkŠŽâRß+!Lê“ÖèeªmÅUÝ^¾ AÆŠóà;¹M®ï”0šÚí7¾)¥Žs[ý çq&ßPÀ|Ó`Bb3ú–ŽDg ˆ’ö$Rh‘Ü`ð6p
+Ú”{=¾ qÑ¡Cr #bvT¾M§1väÈhV‰®¾,¨Ï[ø?ŒŒ°So‹ÅÊo{ÝÆ‚ÇÙÇY‚ø&Ãç«"”©nJØóPe_Kkt–ýÞZ`•ŸÃK–¾Ÿ¨·+7€ =ŽHF6Ä=gÃ0©1}´#Ô‡Q‚`÷!ÙÚgŸ eLpÂ
+þ;~Eµªí³ùx,à»×~ª¢hL]¾í5©ÉQƒð`듉p_ÄÜ P»)4þ÷ÊZÇog¬
+þïO4Ÿ¢Jû!’žè •DâPVpÆÅXôô1ç©ìÿÁr‹Ïendstream
+endobj
+1994 0 obj <<
/Type /Page
-/Contents 1920 0 R
-/Resources 1918 0 R
+/Contents 1995 0 R
+/Resources 1993 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1892 0 R
+/Parent 1983 0 R
>> endobj
-1921 0 obj <<
-/D [1919 0 R /XYZ 85.0394 794.5015 null]
+1996 0 obj <<
+/D [1994 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1922 0 obj <<
-/D [1919 0 R /XYZ 85.0394 748.9271 null]
+1997 0 obj <<
+/D [1994 0 R /XYZ 85.0394 748.9271 null]
>> endobj
-1923 0 obj <<
-/D [1919 0 R /XYZ 85.0394 674.5821 null]
+1998 0 obj <<
+/D [1994 0 R /XYZ 85.0394 674.5821 null]
>> endobj
-1924 0 obj <<
-/D [1919 0 R /XYZ 85.0394 573.362 null]
+1999 0 obj <<
+/D [1994 0 R /XYZ 85.0394 573.362 null]
>> endobj
-1918 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F39 863 0 R /F53 962 0 R /F23 682 0 R /F55 970 0 R >>
+1993 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F41 910 0 R /F53 1002 0 R /F23 714 0 R /F55 1010 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1927 0 obj <<
+2002 0 obj <<
/Length 961
/Filter /FlateDecode
>>
stream
-xÚ¥VMoÛ8½ûWè(+–ß"NâdS$N6v€mª-;ÂÊ”×’äßw(’Žì2ÈaÀJÃyofÞ" †?’‰¤¦:É5G‘,·#œlàÝ͈xŸ,8eC¯‹ÅèË5Ë´¤2Y¬±ÂJ‘d±úž^ ‚ÑBàôivu™]>Ì®o¦³qF4Ïy:y|œÎ®n¿3*08ƒ'Æéýdö<¹sÏÇš¦“›é|üsñu4]i ©Ì,§ÿFßâd|aÄ´É+,0"ZÓd;â‚!Á OêÑ|ôÏ1ààm¿5V
-.”K(
-E
-Óx½Ê Ÿœà¨ßëEI¬^ÁËÖ+;Ø<¿\ 1ð$)-€XïrhËýy14E\+™ ÿàœ"¼Ø
+xÚ¥VMoÛ8½ûWè(+–ß"NâdS$N6v€mª-;ÂÊ”×’äßw(’Žì2ÈaÀIÃyofÞŒD $IMu’kŽ&"YnG8ÙÀ³›ñ>Ypʆ^‹Ñ—k–'iIe²Xb)„•"Ébõ=½@£1„ÀéÓìê2»|˜]ßLgãŒhžótòø8]Ý~gT`pOŒÓûÉìyrçî=Ž5M'7Óùøçâëhº8ÒR'˜YNÿ¾ÿÄÉ
+2ø:ˆi%’W¸ÀˆhM“íˆ †g,Ü©GóÑ?Ç€ƒ§ýÑX)¸PHP.¡()Lãõ"('|rN€£~¯%±z/[¯ì`óür-ÄÀ“¤´
+ï2D
+æ±oùËgpBË ,ã}¶…9µOµ1¶Š›4ä÷—»»«ô`¼ªÔ
+ÞDÊË5â8€›b cðQ}µÝp¡Ÿ*‡`ˆ]¨K'2nøtÎæөÙÜÍ>6ýXÁ ƒdì1xÐ';ðÒá%‚¦.ngWî¨ö¤VÛÊTm³ÔøUòT®K§1³ô£yïÆ/Òx©•Ð3>¾~¼58¼{Oë2y^üýðôyAnMWîMéWâü­mùýwÙ˜¶ÙwÕaûÑ'
endobj
-1926 0 obj <<
+2001 0 obj <<
/Type /Page
-/Contents 1927 0 R
-/Resources 1925 0 R
+/Contents 2002 0 R
+/Resources 2000 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1892 0 R
+/Parent 1983 0 R
>> endobj
-1928 0 obj <<
-/D [1926 0 R /XYZ 56.6929 794.5015 null]
+2003 0 obj <<
+/D [2001 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1929 0 obj <<
-/D [1926 0 R /XYZ 56.6929 687.41 null]
+2004 0 obj <<
+/D [2001 0 R /XYZ 56.6929 687.41 null]
>> endobj
-1930 0 obj <<
-/D [1926 0 R /XYZ 56.6929 561.6045 null]
+2005 0 obj <<
+/D [2001 0 R /XYZ 56.6929 561.6045 null]
>> endobj
-1931 0 obj <<
-/D [1926 0 R /XYZ 56.6929 501.5525 null]
+2006 0 obj <<
+/D [2001 0 R /XYZ 56.6929 501.5525 null]
>> endobj
-1925 0 obj <<
-/Font << /F37 747 0 R /F21 658 0 R /F55 970 0 R /F23 682 0 R /F39 863 0 R /F48 885 0 R /F47 879 0 R >>
+2000 0 obj <<
+/Font << /F37 779 0 R /F21 690 0 R /F55 1010 0 R /F23 714 0 R /F41 910 0 R /F48 925 0 R /F39 873 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1134 0 obj
-[650 0 R /Fit]
+1174 0 obj
+[682 0 R /Fit]
endobj
-1932 0 obj <<
+2007 0 obj <<
/Type /Encoding
/Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
>> endobj
-1495 0 obj <<
+1569 0 obj <<
/Length1 1628
/Length2 8040
/Length3 532
@@ -8573,7 +8943,7 @@ endobj
stream
xÚíte\Ôí¶6Ò ˆtÃÐÝÝÝÝ¡Ä0 00Ì ÝÝÝÝ’‚R"‚´t ÒÈ‹>ïÞûüž³?³?½¿w¾Ìÿ^×Z׺î7¶‡Œ5Ü
¬‡¹rðpr‹ t´P(ÐWç…C­fL9g0ЇÉ]Á¢
-Äü{fXE
+Äü{fXE
0Üú÷äè¹aÖÃöOÃoäæìüØã?ûÿxýœÿŒ=ì a.ÌÁAb¡ö™9Y® Ä£ò/z{xÂœ*Þè—ÖÁ»2#×Dj,ïêÃ8›ÇEµyÍî;Ýoª²n öA™ºÓÁß‹(üèX>ã.3v±ms™W`gÅúϨ¯"›
rn­êèš—ß¡RŽwð9£_²Ò¹Ð_8=óe4%v>oFÀk(Ù?`LÙ½¼`êú4ð±ûåÃ&9[~ƒ˜;26cLà«|r)Sƒj…×Íl(ßÛ
b¬Å7ÎßÊçÏVð™h9Žù,¢I‚°RÊ• e®äß·RÆ%=²ìÙ êt›œ(†Ì%³LÇî)®Ž>1Ù¥‘„µ…^Ñ2¼éˆO£Ý %õ‰>•pjÕr{2–ÂwÍ<–g¬™-j—!3cäáakIè,AŒ$ÁLˆÇÆ‹J¯³nöùU»Ïm›Þ‰D3
@@ -8596,82 +8966,137 @@ $OíœàÅ€DÈ
t‡Í=žÝbóÆÃwî6ß"£“˵?”JËOP2RÐ oQo+†â1)©w†¦ÜèådîI½ÈZ¿VÍ­(e÷åû È"QÔüFØs(úF$'‘qL ®/¶!õÔ ¤HvkÖ‰Œh¼È‰¬ê؉á¶o?Ùa:Šÿ±qêcŒ° gã!_QÇ~ÏWê¡1üaœ¯UÝGmã§Yñmn%ìRãr9÷¬ß0qˆ5†/‚E…(êÚ“†,W‚˜$Ù½ï¶åçLxËÎÔ|ú奕£w†Z|ÂV€ãž÷,éOd
ÞyŠGÝ ŽÎ¨Ý3lÍ4©¿Î\×T2Zª½Ag—.7Ù#ÏPæï™v¼eŦQLÞ»±Oþ¼Ô\’ ¬ÿĵJÅñ¾(š3Ç].Å*,MÎ>ÛBx(ÃSÃó|D³uû‚Þ¡ï†{:Ò‘Á¨2G9¡Cê{É•<|?ÒK áéá@F)Ø,êw÷ó?È ¸¢Ëa„Çh%Ù±o^Œñ{‹6™Ý @¥-«ä%Å~jÉwXjz1îi´·î¬%uÕ3^¿±g¸`d+ÎK[ŽDe—„]âò†YèÖýÇ?Ï>£³HjË,èkѸÍhÔ8Š” ™v_Å [ªJÖ®²9m=·âú?\‹k>¼à¬‡¤*³Ñ³ž,Y ê<‹ý¹uÓ Z/ZV$S·é#ƒmNOš¨5M@¿§rãÝ0Hõ7¬&7[àçŽAØñêOõƧÈêÚ5±pE6~d»Ž^.x¨T1¬µ¤$£Í7¿ÿ4òÆêüj§‹G1¬èípoóÌ3³QýÐZ:œNÍÆéç,0½‹Š‡Zg‹ðâ£à)‹Q©¯³‹X""œÛÆ0ÏÁ¾äBvFA‚)Y9(ÎYÖý…ì¬S…|¸Ôü¾“qbæÇN.LÔX§…_ï‚¿œ%%½¥åŒìé|°D>W²7}C–Í#—ZR¸­$º`bÛGο…a¿9gÝS%\”Á/œîñhC|?s§ Ø…šg¯ÎÙÈ)ª¬m}ÐvÖËk†Ÿ.bÉ&O
üõí+uqfº`Îa‡„°£â,I§ã¯½/‘˜÷ÇÝ›Á¤'P6ߢH‚Ú?÷›½šÙ¹˜Žà9¦ŠmHr7:pMRYŸ#£ 'æW¥¿ðKCß|-¡mWÝ躖nᲶË0–«ÞÐ3äÛÙ=j’¸Ë-,n–³e±€¢üb½iÙ;‘˜Hâ°l<)žL.ßÐYÖÿ°Ú·)wL=(‚Œ£± L|)=å'ÀÆ-Å@²öò¾µ<ÃNrä³6îµEôʃ3±d¶kÓ»¬ÿ‹%ôµøü·(kD~ô(¬_yñ‡Í; ¯åä²fùOî{&*‰äyÒ¯9ÛB±T¨d>è.<Sâ¢éX3p7«Á~ª"럽Ÿ“lË´ÍÔDQÿfŒ°Ì
-*s"}Y ;Ò‰¢ú{YÌÝÇí]p¶Òݯ€Ž¶Xo³êÙ}
+*s"}Y ;Ò‰¢ú{YÌÝÇí]p¶Òݯ€Ž¶Xo³êÙ}
endobj
-1496 0 obj <<
+1570 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 1932 0 R
+/Encoding 2007 0 R
/FirstChar 67
/LastChar 85
-/Widths 1933 0 R
-/BaseFont /UEKZXT+URWPalladioL-Bold-Slant_167
-/FontDescriptor 1494 0 R
+/Widths 2008 0 R
+/BaseFont /MWGRYO+URWPalladioL-Bold-Slant_167
+/FontDescriptor 1568 0 R
>> endobj
-1494 0 obj <<
+1568 0 obj <<
/Ascent 708
/CapHeight 672
/Descent -266
-/FontName /UEKZXT+URWPalladioL-Bold-Slant_167
+/FontName /MWGRYO+URWPalladioL-Bold-Slant_167
/ItalicAngle -9
/StemV 123
/XHeight 471
/FontBBox [-152 -301 1000 935]
/Flags 4
/CharSet (/C/D/E/H/I/O/R/S/T/U)
-/FontFile 1495 0 R
+/FontFile 1569 0 R
>> endobj
-1933 0 obj
+2008 0 obj
[722 833 611 0 0 833 389 0 0 0 0 0 833 0 0 722 611 667 778 ]
endobj
-1302 0 obj <<
+1551 0 obj <<
+/Length1 1630
+/Length2 6133
+/Length3 532
+/Length 6982
+/Filter /FlateDecode
+>>
+stream
+xÚíVuTÔí¶VA!¤†n†n”.IéΆ˜f(‘N)én$†FJ Á!¤[:%•$.úÝï|g}÷üuÏùë®;kͬ߻Ÿ½Ÿýìø½ki5´8¥¬á–y8 ÉÉÃÅ-
+Òy¦§aáèha …«pJí•Ž H
+±@Bá0Y $D¤±ÉB¬@¼¼ 
+µµC‚XnxXÙÙ9þ²ürYzý‰ÜD" ¶0Ó̓;Äîì!o(þ×ZiÙ@! u %5‹‚šHƒ¸Þ¡áf鵩@­ 0„dw9þq
+³rt³þ%àÆnÿ-ÈÙ~ãátƒÝiÀH„•+Ô ºÉª!+ÿ‡N¤òWnôÁmn<­áVn¿JúÝÐÜ H ( BB<‘¿rYB@ÖP„³£…×Mî2gWèon(Ìö/ Wˆ­…«µ#¸¡¹áþÕ¿êýSõÎÎŽ^¿£á¿½þ¡ŠD@m¸
+ÿóü{é!Oˆ`zn%lŸš‘†¬"Ïéé—5úÐÁƒÑâ\\£ý:ß¿Þî—¾(Rf~QÂU;(zÕä5¾í|¹ªÌ¶ÖÛAæÈÜž ÙË£ò¡g}ŸO4ÏôNˆ}-lZŒŸöU/Ê{LeÓP[wm©_ó™iÑÅ=àà;>WìýSVz÷|R†g_«”·¯´ÖÞ"®*ØþÊ”°yzÂÜÕ÷±§»ýðîûUJöìW8Œbî˜øL‘þ.Ù”O uJåÊߪݎË;BbubÁï<_^Ë¿Å`i¢KÙÅy¨yc@–‰Ÿ'\;ø$·®Q;S-”âs/, 9D¦Ô#,9ƦïKv²±SÐúê¿»èçö‰%…÷²õ-âÁ]3ëãÝ“±Ñ][™CæºÊlëŠÑLü‹¦ëÀ¢€5‘ؽrô›ìç3üÜ°˜üDÑSjÛðôä)Wï8Ž*öÜŸèž“3@'}~+ÏÝ6‘žˆ•Ø\Žpµ<züuÚ>AbåPóبLbZ÷a3ÒYÍEœVÁ= ¾‹­{·^®2<¿}5aq€©ÿ_5¹Ûðòµ÷>›À¥´ê$C}ÀXŠ¹­œÕ÷ji—û­€G‡/§Œdû-!j¹;Ë6#ÔÜŠ.Oé­×ôÎc´¼$z¾I(ñØÇ/ Wj®½"¹ßKÒÿ¾ð{Lš¿ÞH¥hԻí:iÓFRF<g] Û39}—ÞÞF™8|à0­‰å
+b݇a›yKÜ£%t×TcaÖËF˨?B:äÐ 3ÚZP ‚ÌÆŠ} fñφôˆƒTU‡J鉽žj:»«Ï‹ºôN)/ÂÕ äE½¬^gº‹ ^/«k¯&6Ö7%³"”-ήQËòÍ“ ñÆ‘r¾“'#
+ñÀèHvo»Vüy½¼Òç³³”ÎjÁÕŸ,_Âh^§–p³/â#Ó„HÊÀç„»ûÄŒ[‡¤Ê»B8Ò¬’%PË ™#¹&}Ô7uo(à–îu•úµÒ95ÀŒ¾?ËêcÕ8—ÄñâθÑ,™ê:f”†.‡Ðà¡ÝõÁ41hÀ›3):«;Ícƒ·ú‘¶Þ,èðY½:Nç5u…QEð ‰rŸ–²ÌûŠ!&.ÜYâü×É ú;á$¤`×yme~b©@{•3*¹
+·³®pBk¾j0ĵ¹Žjœßç]ZÙŸB dŠÌÓš­U•
+ÂIÛ9ä‚·œãƒÂè©õß½n^(Á•Ýh´7C¶¦2„K~V')Ïï±^š}zTÉúÔu?£F-!z_‚¬šÉÉ/U‚og4²Š’.§N™EhôáÍÎËåÔŒL^ѽð¹œfCÛïPI†^ÔLʸðˆ§/çÓö±’¾¿Ÿ\S ³©»ï™ή0‰Ú·˜O%”çp×ù1ÔA?P(åÞ.¤gÔ>
+ó¥ªÕl^Œ¨­Ý)e»ò3Pp[´dbõ¬ðVŠÿÒ³Ü4Å+β&VÊBÔ eŒCuOé‚¿# U9fiêCl·\r«ÒzÃÐWü®6êb1~i“EÉ5ÚÒ A¦¹§üÑœNƒÇ=< l””íyIæj%‡¨äÄiñ(<ÈO› õ;Zõ}¾TªL’[î^åÛA€Z…êþHKJühØûñœq/fóÄf¢8³?€æ¢%K]TkcÑøKEÄL1‡•·FÆîšÃºåØ KCÂCkÇxG®ï[v“
+‰ÌÙd%JWܽóµÈT¿È$ÿ$H~@²&jM¤Iòüé.‡¿÷ywúÜB½ÐÛŠFög„”p¾áÚÀ7sº‰&RDî(ŠpÅ3¯ƒgƒL«Œ˜–)\°¯b„îeý¡u1ì9ÔaºÔ0•i l]˜dÞÊNºwÚøw T甼T ­31&Óãâå"q è{•tjIõOÙ#u‰Uð¤û/qA©SˆËÕ[7Š·oÑ4Ʀ^žÔ™Q™¦¤îŠ»Lzò9QT1q†}«caK"ªQv[‘,P.£d¡ù:üœFª±î¤R=éY@A
+‡¶úL9’00#†ô}à…Ú¬ëè¾>€à)…fbˆû†7sÓ¿×ÄÅ}ä׊³ÒgÍ¿?FІæIP›˜ké÷2è´à2|Ö§™¥£[¶WBMåtè³<èù:28¢Ä;Xf1S§³EŠ&´×å0Ä0d—5ŤÐ4|ylæ©@Är˜léË@È}±}µ\"òSÐd5ŒÓkùp ü3ʇÏÎ
++˜^h€&9I‰òÝ3¥–\—qaâ)&J™NBb0šNí`Ò.'39ë4^€îg(}*v–õ
+d ¯òˆ¦:ôw
+ýL¡T÷Æ{ši®G3È¥ã"y+â3’§[cͽ<å†Q@òæì+}·÷¼Íñ0þ’Dâ%ßéfL¹7®‡SìD nŸe‹ïãF cé¯ÿäφ=jýúÑ…fìÁµAÌ^He±œÆÌ€PP‹@Sò˜ÈÈ5D7Âþ˃¯íãìoÎ64ÒŽY›]l_o%а¤ÒÉSŽšŒæ©óAüŸhöUù»ÐyèvíS¬ÐD=ËOÃxýa“²I;ÊÃÖ‰do“LÈÁd<±~ŒÞg®¨ÙÏØÃîpðzÕ±5õ*¨2Ò1·2BÏ`«ùñG8nå^{bh…Þƒ1K÷©éVZ˜gí"2eF˜ˆA4”ÈTøxzrA¤ÚØ?ß]íÝÇKÚ
+ö”bÇЃ 9µ³+&ì“[8Y)
+ ‘x£´J60>y®ê$´7An¦“_ƒúµZ³+i5ºÅ‡Á) ¿{iR`FªFý“Sð™ñå»ÿa%€ðeå÷uì†Ò*ড়ÅÊÎ9 |ÀÑå|,´­Hƒèn_ÙË%i·˜³¼Ã'µ+c% ü麖‘Ý@;¶zu@ Ëf#[2aPàØÄë üSÑò“ëùIý1›„túÉb¯Mˆ·gÃÞç+kÚ:ÙîSRc;¦ EKZªâ¤ØjU¡ª†z­iRûRž2ã ­¾~æ9 ¶hKI<üORdÑ*ãAŸYëêà“ºñp0Ÿéj<°÷8KgQ»$`¹dÌù4à|ÐÈ¥ñ„î±ÃäÂñœð*S
+(Z¢`‘®~VpùEaAzy÷UwJ­s÷Œ?´½‹š|: }ÒH»a‚º¾g)o}³=‹rrµM3v-ï€Ä@ Ùì'pÅXßÒ–×
+ÕB¾ª\h~8©$‰¼¼·ý˜7!g;É¥ƒ\®cf>}7›ùâžÐÙZسãÁÖ–Ü^-Už&(
+ÖËÓ»ÜIFÙØS­˜õOV_ºhýÐn-®
+X{$¢½‰¼û£@–rlZ™âɞˊ1o(­¶¨mèö¡Ðé»÷ÝõäIŒ]Œ_-ô‹ ¸Þû ò'zŸT¶n76Gت–·& úìIĆ‹7ÎÔ‰‰f¾<B‡›&ª½úŒ×ž´)„Æc+¤ œ?µÆ(_¹à™ñ0áNZ¬/ˆ_c24íŒË¢—'{.ö¥dÖî§Çz̓¯ÛKÃ{u`‡:s±¹ Á<º'—0— HMq±LåRnC@x›ôs̈W6ß>uä3¾õˆ;)EO4,Źk&l‰#õŽ¾„˜¬Ù¶³ ½höâiF] ‹œx'´ÅfÊb\ñê{Ý?¬¹¶=ê3¤XTÕW©*®§‰\Ee¶©x‘@†Dz:ƒ!¡X¾ÂK ”G½èß>c{BŒÍCŒ±¹0šUÕ¼ƒ¿ªÝ•5xfœéÉU“Nhèòã»Z–$8û훎·òБÞåú¸;ß¾2~%~QÍ÷*|6οÀ.©ó¶H&l]ážçµÐ[èù%¥κƬ!ÙrOxÆ!.B˜“zuW,Ôêr‹9å™ÊT°CHÖ‘_e‘‰ÿð:û5r€û3.ñ4v—W”ò]ª[)ïó–äÙÀ—݈H¾ÌûùSŽ¸+¹ºfS4çHõ¿ÞzyàÂ*/ç%Šâ׻͠Ï8ôæãmº'7…\ì°Å÷K)8ÐÁ@£bÅî\ç±ÄÝÊ‚×[g“©»5é«ÅÖ¡’'¯ÔíÌ¥ºégˆ<‚â¢Ï8TŠqùœ_U å=¢¦#fœÞ*ª6í¶²*æ›\oi›–•`ûlj[ÛW*ˆ»ºœ2Ž(ËtŒp{ˆ¥6Í]š†}„¯>{?'CÆà§5zíEëÝÚÓÞ&vø¾öŠ ÷dYcØL‰8àÇÉu°à•GËÝšÎñtûëV²­ˆ’eÓëû­&KÅàჃ‘oS*.m•»8ÕîŒWQì3ÊDÌûj OpHY²ï®f>×¼ù‰_ôŸö‘Ƥ‰´»ø|EÀ’=PzêîXDƒ%½+C£ˆ1_ù¶‡=AýYœ:&Aaú;æ¬U¾öÝ*“ÍXJ·=à²ùˆ1¦¬ý<ð»©,|# O'Cƒµë“M]í¼æf°ºÜS4‡AÇ÷Mj€“Ò·ÐökxõÊáž™ËG‡ÞÕéú,óÔ92‚¬ ߸gp0o9)ÁM£«&ChVF=Vv¯ñõ­Åž¡üÜÈT·Žïvä(Ê´ãé¿7jzä­ ¾¹Â6]E³ÚŸÉÞeIGOIùç…&˜+ÊZ Sl©
+Í`ƒ©c½G¯Lsé:JθÿÍàÿ þOX9B,\‘p' WÀkœy½endstream
+endobj
+1552 0 obj <<
+/Type /Font
+/Subtype /Type1
+/Encoding 2007 0 R
+/FirstChar 66
+/LastChar 78
+/Widths 2009 0 R
+/BaseFont /OTTUUC+URWPalladioL-BoldItal
+/FontDescriptor 1550 0 R
+>> endobj
+1550 0 obj <<
+/Ascent 728
+/CapHeight 669
+/Descent -256
+/FontName /OTTUUC+URWPalladioL-BoldItal
+/ItalicAngle -9.9
+/StemV 114
+/XHeight 469
+/FontBBox [-170 -300 1073 935]
+/Flags 4
+/CharSet (/B/D/I/N)
+/FontFile 1551 0 R
+>> endobj
+2009 0 obj
+[667 0 778 0 0 0 0 389 0 0 0 0 778 ]
+endobj
+1342 0 obj <<
/Length1 771
/Length2 1151
/Length3 532
-/Length 1713
+/Length 1712
/Filter /FlateDecode
>>
stream
-xÚíRkTSW‘ª¡¬òRIÕzX%2yj   b( ‰¹7ä–ä^z¹¤D|PIU–EltÉST”
-«Š@} Ô«0|‘VXŽƒT­Š€¯¹`]]¥?g~ÍšsþœýíïìýïlšG”Œ!‚°p(† “#ÁR©„Ãä™Í¦ÐhÁ8¬  Q°p°Z§Ü€ÍòVy|
- céIUÀ+˜>Iâ‘Æ¥R¡†µd ¥Bd˜ ˆ4°nòFXgÀx& 1)€%6©JaMj’ * ðßÂ.ý]*Æ3HQÀkJ&"! Õ
-ídù)§þ’Wháw¦M×0¤ãètj,üVœ†vzVB(4ˆR„¦j`Àà¬d²W¾Å‘ŒPDCQ¡T•B“Oá0
-MWBú7¥ƒ%Œ‘ÅxÿþµSÉ(‚цt°ÿ`OÅœ?bÒ$у6“ÍæDr¿;%Mk&F•„ ©€Ëó
-W(ä‘9
-Ã)“ÿêÃ, œ‘1‰¾¸€•:9{¤{“Ø_Ÿ„éŒ\ÀàòÈV앾€Ïcçü‰¨Ôá8ŒSãCô.V!¤§0¬‡•ëMLé·õÓ}§·×䊫:ÙÓ3šlm?¿í”Ù9Üëçroü)þè7çmΟ"ÇJF"¾aA*^õ´(Ûb”±¶õ8[Ýèûe³*‡“g\.kký@{pÇ=ëâÁôFï‡?{>»›yÞ¾nÍ}¿’:R8³æÖÍWOrÓ6uôY¾†<‡J(IegÖì…åÿ¼[tuâAV…Y«/ÏOÜÿÌõµ•Úz§;í¶£Y`*“ÚÝ0û¿œÃ¦ëUýδÅÖ¸RÁj™pöBŸëòr3°ùÐßÃÐÜ!ýuö@]0àa~¿[’ŸS+‰]p¬ÂEY³@ãVMµ…ë[×·hЋƒõkó]Òê;¹þÅœôƽ´u)ã¯h¿-Ù9óiÒ‹½Ïߘ¨-•F÷3b½}fzyÓÛÙTûk_X<âê¯î¢Àð^‡U¦6íßû³›Ç¤ Np#ÏíæÑ/<­\Ê}á¸v_ùߤ뽿m²ìIëmñ—Ðû+ýëR‹é
-ôÜçGã:òíÞÏ)\M¥~†š–Öé÷×…—öÝy)+æÃË]/¹{©¸äµm¼¼n¨Ý¶,ñ0WèÒ¨l¬7í¹XYìø±\Œ—Fç+Ûn'oY=,­k8±Ûaç:»¸knAó¬…;7ÿìöxY¦¬âëõçùù™òs¡¼¾À9ß{..RPrÎÉ¡"qõÁÔ{âžðìç?|
+xÚíRiTSבª¡¬2©¤j=,Œ‚”$7BB„A ¢a”Abî ¹%¹—^n i
+(vš.tkŠî+Îf;pÇÇxè~á3øcI´±qø°×‚\ëÁÍóÒv2ïG-Õyÿnu.¼6EÛé]{Âøýœ%{á¨lÏ5{ÓŽÕ„×lSiñgí9ʯY•gŸ}"lúN^F:·ðO—º·1Ö_®}DÚE>¯LañþgZZ13Óerά^ÏõIL}ÕíwxíÁjÝ®Ý\¾`ûzšÀ¦¿g€OO}Z’ûzËHOˆÚÆ^ÔÔž`Âî5Üþ¾ål>{Ð^íê÷Õb¿zÝù_FW¬ñäØË£tle¼G¡eÿ8n®TÕ:1`'ó¥
+0Éâ°SÊ¥ÓnO}\âl~Jl:p5”×P¾ö¿U¹n¤bÜ÷N׸:ÏñòpaÇϧ—‰åâ× ’=)såYZM眬¦®Òyvåš@O·-§Wë>ç|qJ߸Éb c©hßvÍñJhŒ­
+ÚË×pž‰ëÈ·z7§p%þ ¦_\7ªÙWZjî;²ãbVôûÆ;n1Î¥¢’W–ñ1uƒí–e‰‡8‡FYc½~÷…ÊbÛb”DiT¾¬íVòæ•C⺆ã»l¶CÙÅ]³ šgÌß±é'§GK2%_®ó;ÇËÏŒ9ÌíóŸõ­ëÂ" 'çœ,UH½+ê Í~æÿÝ{ð;ÖA#‹Çž1<7+zO{—‡ ]îÞlÝͨíR6U—ìÏ®qXÿNˆÝ¡öË‚«v¾»Ú‹Û¹Ÿ´Ñ—/^%œ\êôµ6¥
+êÖ? iY•c‡[ð ÛˆÞF‡6f^ž°4 ëúÎaErCǵ²¼Ÿ±hI}¼­jß,(:å×6ƒXÈ·šqïƒ+ñŸ~“RÍ=/jIºÚóùÈš¼¦$–{R‘§”\ÑÍcÚð$+òP~½¶Ÿý.Úÿ üO))Aâ*)‘FûVŒ¯endstream
endobj
-1303 0 obj <<
+1343 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 1934 0 R
+/Encoding 2010 0 R
/FirstChar 60
/LastChar 62
-/Widths 1935 0 R
-/BaseFont /VNUSBU+CMMI10
-/FontDescriptor 1301 0 R
+/Widths 2011 0 R
+/BaseFont /OKNSTP+CMMI10
+/FontDescriptor 1341 0 R
>> endobj
-1301 0 obj <<
+1341 0 obj <<
/Ascent 694
/CapHeight 683
/Descent -194
-/FontName /VNUSBU+CMMI10
+/FontName /OKNSTP+CMMI10
/ItalicAngle -14.04
/StemV 72
/XHeight 431
/FontBBox [-32 -250 1048 750]
/Flags 4
/CharSet (/less/greater)
-/FontFile 1302 0 R
+/FontFile 1342 0 R
>> endobj
-1935 0 obj
+2011 0 obj
[778 0 778 ]
endobj
-1934 0 obj <<
+2010 0 obj <<
/Type /Encoding
/Differences [ 0 /.notdef 60/less 61/.notdef 62/greater 63/.notdef]
>> endobj
-997 0 obj <<
+1037 0 obj <<
/Length1 1608
/Length2 7939
/Length3 532
@@ -8682,127 +9107,139 @@ stream
xÚívgPTݶ-HPPÉ™&çÐÉ™–œƒº–††î&K(HÎQÉH ’sÎ 9#$ˆ€øÐïžsn}ïüº÷üzõvÕ®ÚkιÆsŽ¹VmVF-]^Yª„p@óùž4`ö–Î(]°ƒ¯ÜEXYå‘P0†pP
G8ÚCзÿãºP(
²BÂÑ€Û¬Z
-JñDÛ‚Ñ¿s£`·n
-uƒZ|™BX‰¼LLIB—Qdt (<okbu:æ}Ò{ŸíûÑ쓼,Vôâº4¯rèéMûäŽãÏõg\=-äpöæxèA­3gkö£¶Qî ~ó<¤]ÃpÏà µ%l“Ç+Ú:æ¹×w醄x‡ß9}™]²}IYΉ¼­*"ÉVb—åìì²Å|ý~ÎÞÑÛÝÕÙ|ŒÓºNÉÏ*î‚MÈæë”N#m¢_äa™ ŒéøÛÔªÏ!´0sL^µ$0ÙÂÿTh5ë¹[­Fúù{ª\™ÏíßÉúÐâ¦Ùé%üföC ~–fí*!Î:‰EvýÔzð­´÷Û6гßÕ•Ü 곺£Âgü«e‰;}ƒv©b]ùßÖÒï6”‡ùÚ}sø.Gj¢T«$Kñ£•I âQ–®‹Â~ÒìEÛ1w.ì*Çbr|¬½}$oÖ‡·Gs]> Ã?V1ñŸx£+w¿³^õ9’e‡Ð†ŠÚ¥ÍäÊu””7œœ¸äN­Ñ÷ˆ¨/ùŠõ.‹ú…'Ð)á0äPùÝÚ…ke
-¸éÛR§ö
-]8sô&sß±­|*åŸî#>cÕ¯‡‹úœ‚ œEëÑymeê÷AÆ€>8m„ 1œ4¬jõõr¦XÜâd8„²³¤¿V>M¼çÀ7ÁÜ&N\€*ÄJÒÜOµøï8•^Ýçôáö¼J%qõ‡ ‘®.µ&у;ìXBÒ0ÊÚcVKŸ0-SÛ·ߌG?óí·Eƒòñ(€(§¸Ëš’=´øô•ú+y\J6.æꔋ‚œÞ»ó^eúÞ‚·V„(õb*$Ã=AÁžéÌmEéïa9žoñ€Rý3™ÙÑS×!÷8ÎãÒ9‹ÅÕçÜrƒÅ£‘C™Äù\‹-ÕÕ²k±ò¡øáÃÍ8
-ušÅ?Ó<–“G¬
-hEá$=k
-jK‹ê\ô#Œ²Ô_j$ø>Û}~';Äë08~Ⱥ:{¤j7l˜ŒEÖÉ/‘ÕØô 5³î*Tô#ÛýêŒm¥(Ÿ¡\B½MÈb\Zk³u
-ÂKJ^'W²Ù3FÁå¤éÉ.ðÊüÊÕúìðã‹’c=,®¬3jÉ/Ì ¬}橃”.‡Ó6Š& êÝîU¸¨Ûkh•kgݺKÙ!ì`M«a'x0¡ƒÌ ùts«,t-¥§†ìC+µýÝû¡ÝÒ^aâBý" ðf°Üpû š±›õvV¥³ƒÃ÷Ì ×pJs®a¯—ÀœÉAgÔ6tå„è/ZÅkQ^î›íF“’Ô¯[t#¾]°rÛÅ‹60^Ùý” ðzFYËP’OI*ÄmÉ×d«òñ¦¾âWfÖòûé!ou¾qÊÜCZhµ ÐÞ“iQ'÷|(D¦¶xÙ*ª÷d_R½˜Ñ%8Z?Èb+
-à‹)קw&¬š>òÕäø° DxùAt€næ£`öVkøqvëð1']/¸t ¡yô8,TÎ.a Os%/i5
-ÉzY`yÖP@-ª¤9¯ŸÇæžÓçý¤>Vo€Ì¢éªd>Í/ˆöõÏ}êY
-³¸~h—•¸8˸ƒŒFF¹õ•Šû?ih
-vžj ×`­Ú[­›öÇ|-…>°ë=].žàŽJ,}”›­ûÈi±ð!æÛ‹õÛ‰ÌJ«—–r•øœEk±9,ð”ˆO’ܽ…n®Ðq !páxÓ“1¶¥©~à]ÙDXÞÑTtÿ Xwd‰–¸rϽ”T…³k«eÛ?ƒ6òg¶òõPªj~«YÏZš{JÃÁp´hü@AÓœlú)ÿ€úBè×@aS‡ž”Y2(õ¡r‹¼û^*84å¹uÞVi¢¾¡HÑÂé…ØÊÏ–)ŸÃ;c4¢ž/{Ž¬Ûe/HìEˆ…jŽÚ¼9CÖ•Š ‚ŒüsB—W¨Èòè!&÷E*l.\ÙÈL4´ÚËÚ÷h„¢Æ·GñZÍŽ<çYÎz9†CÅŸäá¦TKñÅ3c/ÕQYV;Ò+Q%_Vªdá¸ô¿ð‘8ܳ v4e$2iä*õ Œ9csõ3k~YžØaí¼zf¡äö•Á’±¥;Éb1ª"(GO_XLô>ÅGçë%:}¨=Â[#™µ¿Nôp½vCžªÂíu>N1 ¬Ê¼íQù„8¬ì¨`æWn-aö­§m+´Y¬~5A”XĽh§"hV לÞ_9æJqB—¡Ìh'·ïžrs)¤<ÃÑ!]‚ŒšÙZ~\ÍHÒzU´NÏh“[€Hái3
-RgT­$vÊ®éï9‡á׺ù§ßWŸa|…psØ´"ÀÅÑÁñgð~¸¿Õxy¿oA‹z¾Â¼âÕëPúí
-GZ÷± Z6ÂlƒÝI§(²‡
-?Uôü¬Ë÷
-žä¶5Äõv!.[7$›\ÙÌù ö %Ü-DÇ9øÓ\¯ÔÍŸÄ7& Oâ×ÏžÅÚÅ8“£òÅff\Æ
--â×6™…ÈXÓØø¬ï¾ÆÇ„)h}YÆð–êA±>–?qhYêJÁoȯü¸"Š˜‰œñµŠýVw$ˆÇÑ5-C¶Ãö&šg ŸI}2Ñ»5ãùáö¶DăuéBÿ;¤»¥ªïÕ\rþhüæx€Í?‚^z:“Å„ê!Ïå¨Ú
-DЃqB[äßTœB<ug(°Ø˦×ý9J~¿|º#ß*ý2üÌ‘ÔLÉ{¾OO±ÏïùƒiÌ‚øœÎ'=Ú‰dž•TŸT¿ÇÍ8ÕíÌ¿Þó£œÁ8©È«ÚÁZ±€,m³2ÓDŽñC£{p›® Î>*«ic:5uª ÍÐåS;ùEÑÎÙÀHoÑÏWçx ×ØÄИ0uÎlPÎ5 —¢ú½»<>ÕW:‹ƒoY2’˜HJyf€ÇòTcª§Y½ªÄæ'Jçx{êI_Í[¾ÆuE^n¥ñÙ±pmËISDx°ñ¸U
-JŠ+Y–¾^#Y%ÿ GpXŽÒ0Nãˆ&^-`iªiðŸ;ÐNU‡UîS’7K±Åüð[Žç&“vñ;ÁsZ§â§u‰ö´{§¸àôò‡ëòÔˆBW ×B‹CóáiòT£ÊÚÿ“±'ŒÒÞÚ¾ ZwÕ¢‰?UÛ.[ h‡)qŒÐÇ
-¯5Áƒ ¨“¹Ýa%µxkÐÏ_WÃp)ÉâüdÃS<C&fåc—Åo FÏT±Õ„ú°
-)è@#{ë>Y]K¢þäWOk‹à0É
-m›Hi‘œô d„†q. „WôâPløFûÐÀî±Ü"“­[¹É`¬?sòŠô£NÙêqüiv Ž&#‘ÑPb6G¨4Ùpòã¹>¼¾_$”ì¹J‘Nx?~«=!ädœGû¥ªw³
-‡¯0&;ì8u¶IýÚ¼ü?"¦ûø}¶lÞK©#«ÞÓBüFçõ'Ã÷bc-~Žò8îêÜÕ, |¦,kÏ%äq†Ö‰~^÷ŽÓ×™E°~r¥¡˜[©¹Ùéù _T¾lÌâÍî
-ù¡M½Þöxhá,ÿ
-áHQ þY»Bå<GJÞ,6]JOU?ÀÕ«Uh´\ï MNñÂçzŽùy¬˜+߸+¤ „#äoàùØÈ)ÏøÅ PØ
-Û9ÔB1®¥Ò[Yù=cÁ­öâS§¹óp—ü›ÏUÞYKf†mˆ¡ãž\%¬,Ü1õ È<o«»—ÆØ1D*@„ã¯O‡¿q¡ùî)uô¼ÍÌâýükjgWØ!›ÖöÎÏb¶wéÜ/žbmS`¼•9yì>ÕjªâD^ûÐ."ß·ƽú5Zï°Æ溱@²¬®fµ4ðÎ^‚›M²¸©ým|ÿ ¯©‰É«ê4
-$L¦nW`6»SN™’h܉¥::`í ?ä·¾:*Q “ן”„y·±,ˆÅ’·õç ?‘²}ùT{·BV°£3ëÉZmmsÇBkÙ-’Ãøá+@™d׾€ËM¥Üšô³lŒ~‹ûÛ«/xôñTpïÅM~âÓ¶•˜IÓAéoc_3¥KNI/6Và&âûßÕ{´adÂ{Þ@:C&] [°A=Ûe¾¶5YØøJ>ªí®(íPãHš(b"»,ŸÚšíÑ)„Ï\˺_ºw‘©¿cð>b»¨Oœ»ÛybôÃ$N`ðöL~kñ^óÛSïž]Þ ÙXƒ‚AW°}´e•!]¨µØìà×fÏH Í·Œš’ ƒGïa:Õsg«1ì8ñÍÑ –äiöÉñhCìò´g¯Ë8ßêô-Ì–~‘9V|T±&Nn·äML†‘§ÚDü”¹Ú>I^Ž”[û•ÞJ¶½ÕÉò< ë•Zv·yÁ<ü0ˆ¤5ºŒ„hO!ƒÈ÷sÿððd‡åÁúÌ´Jb+"ä(2mfƒ77Ê¿”Í
-8*v4ºÏÄ^±ûà+h5zê2¶;šÞþ,-õQü! C$yw9†CšJO ™ňq\`±"H,Þ)T<icº ¿ª}ZþK§{«Þ®ûªè&4CSQ~åâ7ê
-QH;ǘ¢&šùŸe“ô¿žUÙ|µ°Sc0R2YE]¨
-‡á{__bçâ.°ßþ
-LóÃI8GU–¿Bã¡\‚–Ÿˆ{éõ´Sû›7M‹Š–…;ûÛ䃵h¹0GQœ&÷ <‹"œ_ý¼ÈAze‰ÀN2ÿPÜJ"u]©¶ÕLòs.}æQùü‰iõHö5¨ñ‹‚‘öqLðëƒýUj[’ =Á®…1Ñè²YÆHOŠåoq ’„!¿‡RÒ¯¸ð%ê«~u¯ ³¿0Š×·6î;>nE=m½aÔ\{\ÄcïQq”&T/bµ^þü‹}m“¹ò A’ü陈×O/ÍI>c×b%ÒÌ&ìýºªú· ¶mJ;û7žb{ª6eC‰Æô_è<@ÀbW’+Q'‘šäçÚU›‚ݧ/ˆ+ƒË°a
-<¤þdÑ _IÒõ.˜ê¢Ï\9¾§é-xÚÖ-9?›ìÐv_ wóý}¾éH`…Ñ'>Êß4¬>äŽT‹¬ÌÛúGäµGÔà…$Í ï‚7LI›u`žUJ2ì„΃79ç¯~f´lá­ÊΚìïW 5?|¸':U—.ûrJo ÇÓlÔË5áAÜçxE ³º×ا‰3Ç•ÚTñ#åKþtâ•.iKW@ö/É›ÔÑ÷ ûj&Q ¦Œ²È˜¥t°Èð§Äh-ؤ1íý b?e¾™F Š– ÉXrÙ/&Šjz©¨rAÁM°re.2Òe%ÉÍ£™6"5[¹(H4 :\mdb“™[i:ýP½2“¿Ýä÷ö0JÑ»pÕh¯QšQ¨ý±Qó_»Ã7;mþã«÷Aú^ÁÐ; Ó èvñ¡Õñ¥ã«*’Hóß¹,QëtT½}…ÁbWý€g”ùxÔ$Ó¬GÞ×™®'}¡uÞói õ´’D§ùõ; ¼xðÞÔ¡Æ°~. °öâ%ÅÅ4O”˜»ª¡ Þ»Bï­\ÿÆÈæ 
-†ìvm…$t§³ÎLd?莑ˆ+í–«I&VñZ"-¿35MGöÊìä§7À Ñ4‰>ÅauA×W¯½r‚…`Hã×W{Ûw1Û®­¹E¥^["W¬%BŽ… >«íÜMÑ#nNCuy‹¼Hû %Tž,TÜþ0]4.ïdîžk0œPañœ„5ðY ÓëF–?ªU'?Õ‹«žäfü¸Š·Ö¤qCr®až1j,†º¿÷2Ó“=²õáÿ¶D4ÏØeÊÀ¿I Üóv¼vþ´b„dîÿ¼ø)xý)\+"oÜ´¦ÜD1å[|)h$úØûeGUeŸ?õ¾†Ó<åízznKB†Éd–¬ö…Àÿò!øÿ
+JñDÛ‚Ñ¿s£`·n
+œ6B†NšVµúz9S,nq2BÙYÒ_+Ÿ¦Þsà›`n'.@b%iî§ZüwœJ¯îsúð {^¥’¸úCHW —Z “èŒÁv,!ieí1«¥O˜–©í[oF‹£‡y‚öƒÛ¢Aùx@”SÜeMIƒZ|
+úˆJý€•<.%sõ JŽÅ?ANïÝy¯2}oÁ[+B”z1’áž ‚`Ïtf¶¢tÈwŒ°ÏŽ·xÀ©þ™Ììè)‰ë{çqéœÅâêsn¹ÁâÑÈ!áLâ|®Å–êjÙµXùPüðáæN…:ÍâŸiËÉ#V
+.¡Þ&ä± .­µÙ:á%%¯ÆƒÀ+Ùì£àrÒôdxå ~åj}vøñÅ
+E“õî ÷*\ÔíÀ5´Êµ³nÝ¥¿ìv°¦Õ°“@<˜ÐÀÁæ„|º‡¹Uº–ÒSCö¡•Z„þîýÐni¯0q¡~‘
+5¿Õ¬g-Í=¥á`8Z4~  iN6ý”@}!ôk °)„COÊ,”úP¹EÞ}/šòÜ:o«4QßФháôBlågË”O„á1 QÏ—= GÖíÎ2‹$ö"Ä‚B5GmÞœ!kÊ€ÅÁFþ9¡Ë+TdùGô“Àû"6®ld&Zíeí{4BQãÛ£x­æ
+Çžó,g½Ã!‰âŒOòpÓª¥øℱ—ê¨,«镨’/+U²ðN\ú_øHîÙ;š2™´@r•zPÆœ±¹ú™5¿,Oì°v^=³ŽÐŽrûÊ`ÉØÒd±‡U”£'„/,&z‰â£óõ¾ Ôá­ÌÚ_'z8ƒ^»‚!OUáö:§˜VeÞö¨|BVvÔ0ó+·–0ûÖÓ¶Ú,V¿š J,â^´S´+kNï¯s¥8¡ËÐ f´“[„wO¹¹Ržáè.ÁFFM„l-¿?®f$i½*Z§g´É-@$ˆð‰´…G©3ªV;eW„ôÆwœÃðÇkÝüÓï«Ï0¾B¸9lZàâèàø3 x?Üßj¼¼ß· E=_a^ñêu(ýv
+-gھ蟖¤§I„²kZKéä”ð
+›û,¥ñ­º“Ûý ÙU@žXÒÖrÝ}Â;´w`D­.à™Œ«ž¥ÅÇ3\™»ølð­…Ébñƒ¥‚U³¢ÌöMÌœÞÎÛJ”…¶WkÓhý j¢’«qµD¹Kz瑳³B|óG\Caî+þ¹*ÊÛ~¡ñ¥ÎGÙ§}–ΪJæÄäû§ W÷HíÚ>ÛÀaòœúò4ó üN$ÕYYšžÇï_œ••W+vqƒÛSš:± 0ZÌ©„›a‚â[‹”%sˆ{¬Þd?zä­7~ÞÛsý3M{öži17ÍÖ‚\"éýGeã3mì7
+Kygm/®SÉçÍÄ\ÊqÈbO;z¸‰ð «-4'¤§€+k=ž~(6¸hLìÈÒúô<6»¯´yjÊ^"þxNLÝ°Ç%3jz˾‘e2 ÃÏfĺEÎ>_žÝ(¸š¤²uy•“®ƒ›{!Þ4l"ùíóQtñÚIÝE°ºÙu² ¯‡Ån¹¹ÄùÂGˈÃÄ ›
+?y“w¾ G$ÜË×ß™‹<Ê™2ãtÏ¢Þ}ÿ†­ @´yIGbc‚²Kê·HŸ|ëÖ x°–Ñx½Ùþ2—€_M”+=‘Û~d˜„“•/tŸ†ò³vLFd*°Ä¾ù±b«&} ¢¥çË/à¥2 ?‘©"B¾,|BÊ1û楛æŽÈkf}°¿Åø«þŒ„g“IÆÞyã8‚© .ͲmhïF`”ÜN‚”ƺʨjÊéž=wþ¼æuußÆ?ÀTÓˆ½~.%º·2¢_½¥’()“5”ôe-èÍÜhxlšŒS+é\d®ýÞ¢Ïd=ºñbfýFÇO¹!3‚"Ž±6÷'íjCœ´¾X‰Œ]Š*ÅÂBùwK‡õiŽ€hn"d²¦…Œ·âg쎓š™Îë`ÎÓp¦»²'UJfaþ»f[Ĉ]ˆ•á®þÍz´&—À$ñZ¼¡®i¾—fG‹LßÇzbÕû\dÊÅï격|X“Ý\sÉ•ŠØÊ+¾ÿ fÜŸ|>„%ýHÎÌÚ`=6"æ’P«ô9#Ñ\ Ó#3z-Rô|%ñ¨$¾Gc^¤‹M]÷²³Ôú{'¢_ýDÊû1éÍ*õ,θÈêÝþ²â³Gƒg¸LMa2B Æ»é»*+M[TÏ•´lm§2!ž7V¦Ôˆ·nŠæ‘’¸†pj7ŒÙ>ò"$›XêÐ:{—­¶^˜u^9Ì’„‡DW¬9%%^ ÑËå,W0ß²¦ÜÝ™ZÒ×ý/õ{øúÆ>²Ý” à/"ŽDkúmù0§_ì>WTxìÑéƹœ ‹›
+zƒ½Ê-%¯Oà¸L5“‡û’ªV,î½øÊáÃz‡>ò&ïw¼´rY6Ç—ÆJwŽGƒ ±Â*ÜA5ƒ
+ëšSùSÕi…Ÿ*z~Öå{OrÛÎâ¿z»—­’M®læ|Pû„î"‡ãüi®WêæˆOâ›Ð'ñëgÏbíbœŒÉQùb³ 3.ã…ñk›ÌBd¬ilüÖw_ãcÂŒ´¾,ã Ž
+¢&tG÷ü©Ï¾2¤ûôþÌÓ(v'«.Š
+òôÿÑü0íû¾€Žˆtß
+sožbrÌûvE ²ÁÅ/ÍWRÙu/w¦ØÒÕÛïòxœ‘ h<LšøÖ‘píÇâa ®”Y
+Kqh|>6œÊ³(æÀ’ßë.
+ a‰ñµoWkrŸÔgÔÅÖº›Ð˜wÜ6îÂÞN¾Ùö i± XüÐ~ýÅ´á´ÙÞVó Þ³6÷³Ý>EŽ
+‹^±Šî±nl#šñ‰65%,ç_°Oê”+µNý%Ùz¯>W7¶]•fzã}A}H›ÎÀSÝÀ~ƒQrNÉ)îs¬þr]Lf¸á“
+<á¼ØËûò Aê)¡³k¯×ývuSøGlVªs#Nu¥¬·OŠE•?.j?ø ÿ©ÓwGä“øݺ23oªkvSÛë>Ñ=¶ Ðz¸^"èÁ8¡-òo*N¡žº3Xl‰eÓk‹þœ %¿_>
+Ý‘o•~~æHj¦ä=ß‚§§Øç÷üÁ4fA|Nç“ž@íD2ÏJªÏ ªßãfœêvæ_ïùQÎ`œTäUí`­Ø@–¶Y™i"Çø¡Ñ=¸M×g•Õ´1š:Uпƒfèò©ü¢hçˆ Šl`‡N¤·èç«s¼„klbhL˜:g6(皊…KQ}ÈÞ]Ÿjƒ+ÅÁ7„,IL$¥<³ Àãyª1ÕÓ¬^Ubó¥s¼=õ¤¯æ-_ãº"/·ÒøìX¸¶å¤)"<XŠxÜ*%Å•€,Kß‹?¯‘¬’ÿ„Ç#8,Gi§ñ
+D¯°4Õ4øO‰h§ª‚Ã*÷)É›%ŠØb~ø-GÈs“I»øNà9-ŽSqÈÓºD {Ú½S\pzùÃuyjD¡«†k!ÈÅ¡ùð4yªQemˆÿÉX‡Fiomß­¿»jÑÄŒŸ*m—­´Ã”8Fèc…ךÆàAÔÉÜî°’Z¼5è篫a¸”dñF~²á)ž!“F³ò±Ëâ7£gªØjB}X€‰/‘'™“š"ZtÍCöEqË’¼R7ö¿Õð®ÒÂö@.)¨F…t ‘½uŸ¬®%Qò«§µEp˜Çd€™ÑÛkï#ÝýFø‡‰0A³KE*3Æ€F ‚é®0BÖLqÄ`nÿ‚Š%P爉䅟Ú*›X‹²Å·jÔi÷b¶‹ôRáó"¿¬žû6vTZRœÌ°T3 Séèv\ã«%øÜýI ¯”Þ¯é¡ëæ®ZÖ·mpßú”Qn?ø&Å—Â#Ôߟ›ì}ÅÀ^í° ª"Á"çt{RH:†×¼woŽ¸ÏhFO°™§éç€oÊC£B÷~”…
+ sœçã¸!q?Oƒ¶•G¯îW̳ŒÔ)HænÉøoÌF–A£Êå{Ç‘æä8£jýäUu;W+Aà¢ïóÇ;X;{¥ð”ÇÎwÆ}x" Æš=×N¿nc}& ±Éy[µ~œ ¿öµh¨»š«¢³ñ©"Ì‹üEmÊ`;µ
+Lj
+â³ß
+Ì Q=w¾?‰¦6ª~ûá¤àõd‰xW/aéÒÛ‹†Cú\»UÒâàfÒ~…¶‡Í
+¤´HNú2HBÃ8—GÂ+zq(6|£}h`wŽXn‘ÉÖ­\ƒd0ÖŸ9yEúQ§lõ8þ4»G“‘Èh(1›‚#Tšl8ùñ\^ß/Jö\¥H§¼¿Õž‹r2Σ}‰RÕ»Y€|áCžÓ|ƒi xCªݪÌZ-›Çð0ÜJLÕ—D9dkùåΞ‹üÀu !!‘}U?³9Ü«eŒiÒF̦ì½Äõ–çwNRi¸Ž~ÑqÂzÊ—eh )¶M# ±M¤µ.?¶%aÿ5ßóÀ€L]t“ö´ƒÓÈÙ‹CM³S­ê£²lµ^÷³²ÚfÉÔë'7±‹÷bqÛG2®K œ¾’j…Ã×?“ vœ:Û¤~í ^~ŒÓ}ü>[6ï¥Ô‘Uïi!~£óú“á{±±?Gywuîj>S–µ¿ƒÆçò8CëD?¯‹{ÇéëˆLŠ"X?¹ÒPÌ­ÔÜìô|/*_6fñfw
+=ÂRŸó>ÍjóðÔv)Ùyÿ¹[G¼Ü5)­…ðwÃä¼Ar«òqsV
+…üЦ^o{<´p–…p¤(„¬Ý¡òž#%
+o– ›.%§ª¿ƒàêÕÎ*4Z®÷„&§xás=G‡ü<ṼǕoÜRŠÂò7ð|lä”güâ(l€Â(Ù‘(8Å|)ÿ¿wÆô/þQL™ uG«ØâÐÏœÎÎ~N*{cÀt(û6HÝB=viˆÀ%ŒÐ/ÌÐà>^P䶊ŧ¡¯ÕrȈ=ÂÆé2¾ldÔD4“kêœÐw§3\Wd†@$B}vÓmwÝK&à#ýÁ?¡e6êœÿ¸¥*IÖÔ*Àií¨²Q„É¿åAFÜd@+íy‡íj¡×Ré­¬üž±àV{ñ)„ÓÜy¸K þÍç*ï¬%3Ã6ÄÐqO®Vîz
+Pdž·ÕŽÝKcì" ÂñקÃ߸Ð|÷”: úaAÞffñ~þµGµ³+ìMk{çg1Û»tîO±¶)0ÞÊœ<vŸj5Uq"¯}h‘ïÎ[ ã^ý­ŒwXcsÝX YVW³Zxg/ÁÍ& YÜÔŠþ6¾ÿ„×ÔĈäUu&S·+0›Ý)§LI4îÄR°vò[_•(ÉëOJ¼‡ŽÛXÄbÉÛú󅟃HÙ¾üª½[!+ØÑ™õd­¶¶¹c ¡µìÉŠaüð L²ëb_Àå¦RnMúY6F¿ÅýíÕ<úx*¸÷â&?ñiÛJÌ¤éŠ Žô·Î±¯‰Ò%§¤+Ž pñýïê=Ú02á=o !“®…-‰NØ ží2_Ûš,l|%ÕvW”v¨q$M1‘]–OmÍöèÂg®eÝ/Ý»ÈÔß1x±]Ô'ÎÝíÎ<± úa’'0x{&¿µx¯ùí©wÏ.o†l¬AÁ +Øο>Ú²Ê.ÔZlvp‡k³g¤…æ[FMIÁ‹£÷0ê¹³ÕvœøæhPKò´ ûäx´!vyÚ³×eœï?uúfK¿ŠÈ+>ªX'·[ò&&ÇŒÈSm"~Ê\mŸ$¯ GÊ-ˆýJo%ÛÞêdyž†õJ-»Û¼`~DÒ]FB´§Aäû¹xx²Ãò`}fZ%±ÆÈr™6³Á‡å_Êf
+í&2PƒóuíIŸ[^|uÊàïíŽl«0x¦ŸøpÙ(ÈÅ%mé…ÆÃð½/¯ ±sqØo
+ŠÉËQfþNÒúðÄCzòÛgêg_åD6ºq¸I“ª¸ÊFØ2Ëv­Ö¦™˜¤Pé¿g¦Uu䂱~Õ#ÉUz$¼
+ÇHÄ•vËÕ$«x-‘–ß™š¦#{eöòÓ`ÐhšDŸâ°º ë«×^9ÁB0¤ñ뫽‡í»˜m×ÖÜ¢Ò ¯-‘+ÖŒ!ÇBPŸÕvî¦è ·?§¡ºƒ¼E^$‡ý…’*O*n˜.—Çw2wÏ5N¨°xNÂø,†éõG#ËÕ€ª“ŸêÅUOr3~\Å[kÒ¸! 9×0ϵ
+CÝ_‹{™éÉYŠúð["šgì2eàß$‹îy;Þ;Ú
+_ƒ ÃižòÆv==·%!Ãd2KVûBàùü€ÿ'
endobj
-998 0 obj <<
+1038 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 1932 0 R
+/Encoding 2007 0 R
/FirstChar 36
/LastChar 121
-/Widths 1936 0 R
-/BaseFont /VUTBGQ+NimbusSanL-Bold
-/FontDescriptor 996 0 R
+/Widths 2012 0 R
+/BaseFont /HHFDIQ+NimbusSanL-Bold
+/FontDescriptor 1036 0 R
>> endobj
-996 0 obj <<
+1036 0 obj <<
/Ascent 722
/CapHeight 722
/Descent -217
-/FontName /VUTBGQ+NimbusSanL-Bold
+/FontName /HHFDIQ+NimbusSanL-Bold
/ItalicAngle 0
/StemV 141
/XHeight 532
/FontBBox [-173 -307 1003 949]
/Flags 4
/CharSet (/dollar/hyphen/semicolon/C/D/E/F/G/I/L/N/O/R/T/U/Y/a/c/d/e/f/g/h/i/l/m/n/o/p/q/r/s/t/u/w/y)
-/FontFile 997 0 R
+/FontFile 1037 0 R
>> endobj
-1936 0 obj
+2012 0 obj
[556 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 722 722 667 611 778 0 278 0 0 611 0 722 778 0 0 722 0 611 722 0 0 0 667 0 0 0 0 0 0 0 556 0 556 611 556 333 611 611 278 0 0 278 889 611 611 611 611 389 556 333 611 0 778 0 556 ]
endobj
-994 0 obj <<
+1034 0 obj <<
/Length1 1166
-/Length2 8264
+/Length2 8309
/Length3 544
-/Length 9079
-/Filter /FlateDecode
->>
-stream
-xÚízUX\[Ö-4Á½p'hpw×*(¤€*Ü!‚»înÁ]ƒ»kÜÝ/çôºoŸîûtßîw«öZcÌ=æœcÍýíz(*r%U&3[ÐG[¨+3 
-në3Áù
-|ØGè´£ÇÀNâ¨Ð× éÛb®=R‡äEÚTBbCøª¶DÞ¤W:›[öŠ¨$dEY%Š[Ót¼/oü¥¬½”ùP'û[Ä–~ X2­µc×42:Xµ{—%ÍøFSÓ]¢8œÞ“’˜•G&$ÚÜ|-C­l7…à›ò~»,Nv}»Æî,@HíŒÅfMè\ƒ•jLw~˜,rÿMüF]_©
-ýÍ8¶öOáÏoëÓ‚úïLîÓ¼¿œ+è¶kÎ6ÙAÝ$=43Žºoô°Jü¨rOwVsr¶Ê¬ðšz¾Ž~ÿ²ºþëÁ‹êËõ-!蔄Wd=R9‹ò”l:VŽhÔïÀ³¼LôÃaìtþ8QIVæyU&Á¡û«ü\ žj_E‘{<óéYàôDËæúløa½ê£D–Îîç„xô?¹é$Ì|’"Xûü"rø—Xu[ÊÚ6·èNâ÷AŒ»®qmƒ½Éý¢¹Hx7žMxÃ_Õ[±½z
-¼*K«™Zú¹úÕ°×Wý¢Øø¹.ÔR¯æES úLkéDÐ?«áäv%.
-šI-b´zŸŒU íÑ—þDÅyMß\…‹ÙCó«ïÓÖSätRR˜…$ ùÛˆFy/Áê}äYeOÈZñ¸ÕÏ«¥¬øïc}͹ü< ÂåŠ^úRX¿T[ÅgÝñF/yo\ky“Wb“Ë·Ú{že”Ã_¥b1‰¯ç(17•®LsT/“ks¸àýÄR–Ê8à׆h0ƒÄcsâð]€¡í"Z°p¬Ì¥`ÓTÚÕ¼V£ˆ™×Þš¥”¾Îé;»WžÄi%(¶ØÄ5œ™,—»ì>N*Yƒ?åïyÚóíʈfüλ» ²ɽø7ãáFWqÊZS>M…ùdT„Ǫ;£Qס3˱_‹§ÙL_¥Ÿ€(U}Üh-²CöF;5 œ} ó.T²¶/0žyÖ]±!3f\CÕ1WR|#¯o‚Ǧ?}Fq?¯ÓfÏ ‰²¾RŒ2Á œðäÞ"#
-hŠÚ?åðP‘­||èuæsSQ2¨•PbHRóŠêÐ8ꎜ¹MS^MýÜÝ´ Ó›û¶ÈnØU´]IÜl(óš–ªÉô˜ÔpXò,Î%0Œ1µky„Òæ®qú§°Ä ßÉ`hˆ Y›½ goû[rð`jϾªN¸tÇ\®»–ü»bIBj¬÷¯Âµ^‘•HÝ{”é·ÄÞê
-Ô +¸'º]÷ñ@f̼ÀÜGgìdô—éËùêÛðFÔ!k£«Ã*.$|™/mßFàŽùyAO&—2Ö…Õªõ¾1Ù«<Žø+vˆý–­Dce”­µEx`Iµ5úÐçK:™¢¦ïÝOÜtó‡ž.erƧbÛ,H/«äíuåí™RrŠò–WW“OF3³gÃ)‡¬Då"\ßžâjèßÓ”võVسïuÔt2C «Æh]W*é„g̯%ä"‡È@Šr¤Bqf„•4†Fóó<ÐP+]°¹Ng…8à„q/•ãȼ¹b–Òdù&Ê´ºdVN šùÞÕç6bÎNé?ï…çPÒZWïn›vÊ
-bší‘v\aۺΤ:×}¸½øÚ"¤#"tl~–ŠÂó5‚ws¬@ö|KéêyÏ’4%Óù|ô}É=ƒ-RK¨Ö{Öˆ“¤‹xwwa@­â©Ûæí‰ûÂŽKˆ0oýwËŠµºÕ6©M8³q¡ºïˆoâ³·àßYF¤i{#ØHjî˜/„†HP,9;]D»¢ôc¢bÓ* ÃzøüÆísüe¹ÔÊâ°?»ÔÎTùw}ãΗÊâÜšTÆýjy¡<w¹ï…ʼOŽ  âé MÉwï¿ÆUQ8øx¬È¬¿àñÆ3…}ð^ëaÑÄà|Ý’¯¼~¢Zw(í
-kA,Èž¼ÃR*(^?X5ðÙä,|í0&æ)q¡35QýQ”>1(`ãóŸ©3;çó~•…jffl¯©È{>ë²SÕ†¬[ZÆ€ñí^m5
-îlúôü4  }
-¸iÛ¬[
-AEÂiæ·Ü¾^Ápš¡¶²S‹q”)ä—®}ÀÈ™’X¦‘Ñê ½ž¹I|&åYöd§œçI»Á~hÜ%i}ºZùñfǤXÂx,¯ðçÝÀŠÆTÀ;=ÝJi×î^‡É¦Öèz,€h?R9Ìó;@Öÿj—þY) Ƀp9:•Iß­¸ùG«
-gwoÔЇ¼V}ŽCsg@ˆÑÕ†šÒm ^©‰iÙ;4
-ú‹®fºÐ61^Ô˜±õƒøåiBž•1•ƒ—ÛÉŽ¸ïõ+üèªicöe 3+âòÖÛ'˜–ÍN¥ê“7ðÉi˜ì§ï´½~2¤bêó²ãò½õþ•`×Êê¯áÞØC?¹ÕÔÌ=u¤ÛˆU¸…Í"â#øŽ\f£N2ú
-wŸè’¡µ¸§¶”¬Õ¾Ï®HÁ=ˆÒT“³šÌ6X’>3¡6º­1•üVŽ mjƒ3/7¯=Íôþ &!nIy<<QDð"'É[nt”;D[sZæZÿÄŽ¥¾v™•8`±ÝÆfF—ÚsÔ|¯ï7G 9Î+ ?Iæ†]KkÛdìÓ½çÓô+(–¶ÿ5ß(äþCT°‚\ÚŸ§l±npOhÃíÜ@tþ¹3´6PäUi·QñGŸð*íwõÌx¿©1)mvj"§f6¦F0±ÎýèªêµÌY™i õÞK÷òUQNÉg_;;C4‹±o­%bT èŠÍ†d^âF G ÐÛk—W·>`e%aŠ{ƒ#0SÌ=²\:×Ñòz¤ØGàU%˜YMçËá.žÜÃ_bÔõ~¬›ÖwŸXöçÏ×{7¨‡¬MÅ6ê£BÊæz‘×´‡ïÝpä÷¹QØì‡G2n2ªDö.×hE#£“ Z½¼Y‘ñ&ÐëE\(ÃES¥cùlgK„ŽT@â91D±èc™×Àj…¤ÐiÞÚDÅëÁ»ÂЯ0Tµµ£bÅ$㪌íéyÑdö¸Ì„ýn&¢›\ ‹Hè^¶ÙôX\JÆÇH?!Ê
-F‘PÖçhé!ÍFµù„複ì‚4ãE¢Q¢ªÈŒ êË¿$Æ£}IÅD0I>àÅlPól&ÕFXÞáÅâ‹×Ž^ì÷êÑ!W‹ é·qV`ç¥Óz"!׌_j¯Ñò«E’µeä —QúŸŠGÌå«P•['ïkÈôZðÛ5%K…š†Â¸ª¾àÛ㼿°è/©äG Z­Ö¸µ²¤Ë›w f§þĺ#7^•Ÿ?<Žàa¶Úñ9" ç*‹æz]à•Öˆ·Ñôv–ý £-ÉTqÿ.åó%‚8Þkeÿ3¿[M£6ò¢@Gò‰ƒXúÞ¥çˆS&2ØŸjF[fzØ.½„ø'eCL`KI
-g.£Êù5õ\Ïc¯ªO]ffå,§m¾¼@+¬—q[¹ ,<¸¡ÎIPŸ©if8§”MIe({—Jœ~À$:­`š‘ -éé;±‘¬y~`²ŸâÑjr+Ö-±˜…>IEƒfçl±¢ZV­®ô ÛûUM½5 ßOÇRòˆœN@Èd£èF_ó³òÌu³Gö–l0êYiQ¶ˆrœÔÑeY$î9Ùq+SÊbÁ9+²ÀYƒŒá— )mdA( Å”µˆm;ÞUÓ ŠÊˆm-Œ/=ŠÉ?ˆ)CH ÙrS¶Ô-“×ìª0Kƒk}öW­jõ‰9‡ý@F#iÍKû½D;¦$*µ±¯ˆ:vÍuš
- ¢6G4ÚWó÷mq£Mo’¾íü0zt™ žà[ΛÙóïÄ3ÕÝZsÆÈP:dVÔ/fyŨV³Œ§²· ÞŽ%Ÿð G5¤ÆA«ÀÞ«§hÏ}Kœ¤=ª4¢a3¨˜– xMPn”ªÇ#qp´ų́çxk lƒ<¶ä¥ùÁãÊ¿aLÆòË+&ç0qwl$^dnÜðy(ÙBÓ¶ûo‘#@¹×M±®@S#8±CjQðç} ékŠ»*lí,¡µ =êïΘexí¬„¢h‹®•ëö¥°gЇ™N¬/U tùM-w*Û¼¿<ý\ɽ~,($ۥDzÁÏ5dèrР®Ê º=¸’+•"‹~tó%Ê"â…,iãä,
-àÑè.šoÏx­g6åëÚ†ÇËVDU±N…;ZÆÒ5oùOhú­—Ð>IîÌ:h^$¼Ôlz×ÚÁÓT @ÿ}&YƒHõEŒ(=‹qåö6õÙ¨ôW=wš’xsDs‰¼:ŒëöÊ-¶¿{´1öFi”"}±FêÃLf_ÜÅÅ;FO5æøþ|y~U¦Î ‡ëÄCš¢Õ„’+ê´Èø–u{Ó&d¹¿*¯’E牊ô‡Mâ‰t/&%Ï©H6ÛÒ¥Š‡¬GJ×:Ìøö•¿ÒÒ•ß:–”eˆº —ýq«É(LdOÅ"^$·u1§&j¶ÀZ¬
-Ú=;ˆðá:ØÓÏäÁÏ/én¼¡,*¢`\ÜäK}["ÊHTÆÞˆo`ÝÙýz„N¢ &j¸'µ2ó‹|K×c6Qén)' üÖœëv?.ßüê´–®PÌ£§åZ]GOŸIªvIbŒµ³ÉЄH\Ô‡óÉ}vÆé¾°å1ù{'¾ógâ݇ûmœ‡½*œ‰VákÑJÃÙ9ÿ¾<§µÈi¥ßgCL‚¶áX±rX¯=Gó‹Ûìö.BÒÓ oû~o‡´~8:_ª˜WzåHTº{‚,×d?u-ôR,ýá²ÍþcQk®‰î•üâŒ'ÄݹQ쪡³¾§Æç‰g\&ÚQ„#J©Yð#Õ²á[ƒËEßE(@˵¸x†üœ³/ö®:g]!$…US ](%v¨ åÑÜ팼`‰jî&^Ûœ?-ó@öùàjÙ÷<³ïlY?XRr$Š™£-ÑTù†~ŠÇ/0‰ÌB¯7Ù×ìYSB{@&A^UE s $DH@
-٦ϭÓ%"Òð9Ó
--ý¸Bçhµ0ÊnnL¿ñE~„éMÇv¡“LYd< gñÕ¾ìQ±íÅ EþoÉ|Ľ„\cvê´
-Y É4j"¼ÒÜçÞ»6ð¯ø»(~7qBËb“½L*&=¤ö4P'©ð·@Xáѧ†÷§€R§ ÙiîÌ#k]3§&M<~èêÆŽ¬y×–=¶÷.Ö}ìh"rr²Ë«À±æ <³$wt•°CnEÕ@¸*ùwN.߆Z r™LŽ:øõŒªOâTãPêŽ".!ÉMù?dð<Ÿ½h·Õð¯=B­›B] oº×dûJèoÛ°Æ°­TFØQêP¢úC@qSÁÅùÖ÷¥7_±¸Ôˆ ²»ÞÌ3å³_Ž¾«š’ñ #¼Ì‚ ¸~sOsÔ|ùƱ-J?§>8_@1.æXIg5ßRic¹Rc
+/Length 9124
+/Filter /FlateDecode
+>>
+stream
+xÚízeTÛÖ-–
+Ìj +àsÛ@C£†Ùþ~ÄA¦0°DÂöŒkX»
+r¶Cž! s{¦îâèhY¨ .Îæ (ÐòyeÿY(îàèá ¶²†é4Õ´é™þaçååšyü…
+²spü£Ò3…4r~^´Å¹*–¦’`Øíé¬a0G>VVGKSÐsŒjÉÁXéŸ* ±w°ÿƒ
+øC3 °3Èü¹)Ö¿ëf qpƒxýGØ ±ø³% GVMØÉ$+ñ?ÉÏ!À¿bV ›ƒ—r‚ÜÍ­Yÿ(©ááúdÿ#l
+±ðörtpZšÚAAÞ`KÐóà5uaÎ. o¯ÿø÷€h6‡Í@VÏÛð/öç0ÈòsES˜3بÏÆÂÆÆdûãÿÏ‘áó†Z8@ì<þ•®dj²ªJ)ª«I3þ½÷f‰‰9<S2³¿ã2s¼ç~vÊ3#/7çßÿ©Å_:üU1ÿÏ:ÙþE) ±t
+ÝØ)[7q\ä딬Ÿâ}2Ç”¥Wº4BâÃ8êÁø¾d7z»{NÊ/IÈKsËQ•÷fèy eì|Tù^N ~“`³ IA“k¯¿¥•ÓC«?¸Æ-oÃ1™žéÃàö
+–ÀªOÌHt‹ßñ}n縳.i±¼«tÌå–ã4t\dêÍFÔÏZïÖEη2Úú`¿Lè-Š²FsŽ]Ä!JÞlø*@çìwÓ>ׇ&ª©æˆy²¥@¥]kU>=­rEÞ-çŠÇ™°V£¨ÙaQmL1!h²R%^×àj¸Öl;ÓÛì^R‹
+8ÆßÆûOvj(øÏñTÔ¤\¥+Ö#2\…¿n5;ÿH¯i}¤ß®£Ñå~º9$m`Ƶ'4É)ù6b›•½.†eC[•+ÚËG}*”µ>A¼­dÏGæjøf¬%€Ê4ìªÉ$›Š ÛwÃPoÄd‰÷ú´ÊÈÓƒ8~Gžõ‘÷<Yqðæ3z©ÞÆ 2[¢ÉIJIH>Èe¦_h‘Q¤Ç‹×g\<©‡3Ѿ¯òJ­’ûÁ«‘e‚gìº N¦bŽO+ÞÀ“îS­™c­Hœ4ÞCØKH÷²m:§dÔ’ÆC»t½€!…Âæ©.—IóÉ^!Øæ¾ÔD’ZÐZ¢˜ÝËMïQ•¦ùÜȇ®CÄTÄZÅ‚zŽz­‹Ä#EÄ7ÏLm}.éF?:ÃÓ¬v­Ä3*ŸH“¾˜sLfZžÓ$Vf‹B4®»%DÚ”6òÛì!Ó7ôRI¿S{ŽØ¸Õü ØKÒG;ë¢Od€V@Sp¾¿–_
+eÀ_±2äÀéŠê×Ü÷qóºÄÃfhÙzÇð#e6Pw=3vd[¼¶#mýç;±ýO߇P÷LèLI Š `ßy·bgh¶£ûô•À|ª¿2Õ 1äÔ@ßX ˆãàç¹ÒH_Li¹=YK/0¯§E ÒÀ(èù\²ÈÖ«:˜ðCÃkX[ÐBf µÝ÷l¼
+¥ô€áëÖKŒ× m5X€>ÚíÀ½ æؙԄ(QjiVJÒ˜˜¢`ßÛCÄ9UoðzÙ„íÖðWvªD+ž
+VËkþy…Šä]WzÃÈ”} ÑDE\Mó½}º Ÿ záuÙ Ë
+Ec'b£cƒâºb+"±¡ežê±3<}M ëMÖM6À–è¿ùùn¬¹˜¶´30ÿ= ùƨÔc¿¯¸§šŠQ½¤
+cª†O\—aðIoìì}¦êZzPoë
+Û¸Áü—%N㞺°Åøjâ6c¹×tÔ¶­æ§dÆ#ÒÎIî!QLé=+£oì·Ìl‰Hžñ EF˜‘gr8™!söw’RZ¥÷ªëEËpÍxé(R”Iã½E£"ŒÖ!$ÿŠ+3þà\aø-ñ^Ønàêdb{QÉ°n«D75¡¤Ý`:4ä¾é-TËu—6"Ä;ü¶·M9—sïôñ«£#ÚO1èÒ{!Ìá8„‚_Ü2ähh.‚LjÚqÍŒè• hê1€RàZlƒ‰N?Lä&ÍÀ÷ÝÛ@Tý¾‘VÒb\0í¡ë0ÿª…É0N‚%»î•+1¶•Ì1ÁÙ7Lûêš_Ô>X–ÙG]td1KâƒÑŠQ¶SF$‰·U¥8:ï¾Ó5Ÿ½OÜÇ'vp¦3gGp|wã›À„J÷Wó¯c¶LLËFÊY7pŠäh·nK.q ¥'Œ/®Â9bŽ‡±Ïw 9_2ÇÐfÊê¶VWdÞ·¸áË™w7‰œ"Óù}R4T˾jVø?âó~:Ãí1~uÊæ|*€Ó”ʱŒ«HÂ@pÎúNšú 7¹á8[³?p~¨y4Ñ5r€»ö£õ5C6Œæѵ,âM˜“ÕQÓ8®‚ùÐùU7 ¬Ûþ§>S+zâŸ[VÑUŠ<¥< s²Ê&:Nð )ÎIJÀÃTãÃX×ò
+ÓsñŸ¬5ŠN!úŠNÌJiJ¥…+kkŸÏÆròæ¢ß ÛŠ)Äxžcé\Œ>Ð~í.í¯râ<èªëf׌Óy¬VÑ‹ÌYÝn§ FÈK Rd"1f…U´†ÇŠŠ”> ¿¬öH‰Bç9Ÿâ‚â%¨„$‘ûò$,gÊóMV0êôÈ­ž·ñQÔ‡‡´
+åƒb3èu¯ÃízSHø”Ç!=ÐSV«ènÞèõÐ`åÍ’ª;qg?Ìj†o+ÌÊ€/F;=!`ž· ÀË!¢Ëþiú)*z‘ñÄïø.ëœØ½ 8Òà4AgÉ—õ:fÞv\JÞ
+L^e°ls›NäºÔ§ßýšR6úù¤Û°éµÁkkùéÓü½I°±U-«a¾rBïñØ;e9Ïx¡‹K€q("Ãßj¯mµW.~ØÛüÔÚuf«ù)ýûU=¼?R‹ï7éÙ5ĺºWéŽò¹ÊaÉ[Ð4Œ@Çrßg|óy¢X–%}ƒ _l3÷ó*CÈz:â0ÂÈ(PóÇŽZÝô†vÌ£1Í5KUFêçöóÉ„¨Bß¹DóV¿ý\öâ•GþÐò$uI“!š›*«±5í1ÀÌD(©u›P¹©üò®¤Ãóãõ€2^DõÚTnÀo—£AÜžÈ77lŽ×¿2+ó33£‚…VØsùÜÁ&ùK
+
+ ×yLˆßº§(Pœ(4Ä3dBmÝkÇ–?v7‹]çì£ PܹïÏ›ËèÓ}
+ð(8ôðY&Ò”}„yäÖ5ð±KêÑ&Ek)Oá†x°ñîs=BˆFÆðïDœxѯÁÛìÍ㓶‹]Õ¼ô½Ó lIÃÏ6<<*°OÖehÞÁ»GÝ„1S¯¿–Z
+4; ÃkÊZTwïG¶¾htû»Ï4êªÖR¡Þ'­ DIn>˜Qâܤ¹*'_I¦äÆ6 ¦æ>»\<º¿UQ, ‘baà&#ç^ËmÛÝ[oâù$Ç©e$òÔqµ=¿=jY ÄPs˜³ûD<‰™*Jß–¡£fo,_mSBºØɾ z ªS Q_øi¼ÔR@¯KFÀ®+µ™øìiåÁMwš”¶µ<ñiÒ^ìjg–Öëã~f쇬òÑK§kY¤Ó
+
+j¤¹‹4;X£O<eïc¯¿ðK’s…]䆎sÇï#ó ThäP•©îyÙú¼Ø ¤× ‰"i§ ¿wç}¨Þ‡ø Û¾yI¨A¤ÚáTŸÑ8{Z/|&jêãõ®Ý>]ãPò÷2× EQà{‚°rëáÞ8,~;;ÁWâŒÄ¯Fõ9ŠCá•
+j[ÕeÀUoóOõe¹#´M7îL°”XËzÛƒñ…Œ‚´Wvû¼‰¼†Æ«<¶eªhYÃ<ÀæþÆêè²o¦ B‹Ï¯¢:YAW󹄛é_³óöÛЛë7.ï.¹m{(Az>oɧÊé^˜ë@Zc—‰7*wÈê
+›»WVö]°dÙ®ã\öý™fÛµ‰t9¶¤V}îñìÝØì¾Vᱸ¨Ô3Z( -ógWÎà iÔ“g±Âî1µúnG¿Õi/ Ö®aª\z6wH5VkÃÂXŒYg týSH}vˆqé-ÂY/Dbø¼ýdyP8s
+$RÇÌvé…h'w$K´|†·í…§™;Y¸ñç?óg›+HGÓðF~pQD=YwW´äL;v£ˆ§&Ì3p}OG_½¼¯2y¼¢@Õï·URåo<õ4"¶ÐþÁ€àþ2½öÝCI;¥ €)ª¤ÿéì¼Íµ¾ZnùˆÛ„œß~‹øŒþ—¢@™ðÔ6!†%ÿKu9Èš¸ØA`ŸÊŒa¦ ±¾!¿¯yÙ´FmîLRÂöqu8.ó‹j5Žó®Ö?ÍžÉÎÅ¿ïÅ4‡ôc…g96·¼ oìŽ~¬ðBGÆY6-¹ª…M6õÐêY Z`–ÄR:´t‰¡¼JÆB ÂP™\µÔäœöF-<u¯Âû]ÍÞ¨6ÆÚÚ”u0ÜôæN;q3ŒN³Pq]Øw'çjªóMõÜA0”‰R‡Àâ=ùé.Ùèí'wÜÒÛD†äúŸu®ûÍ£\y6EGíŽC¾ô/èÆbIÝ72Š#ÜrnTözêñ k7Ób’Q|{wy™ÉsŠBd‰êqzðõåñ·D‹,j1^U‰pðá—‚[vžgVD#vR…ôz¤uí3íë œ¬ûvªÈ¤©³q.ÑA øƒ„£Â«|Ìon<oÌaJ‚P4„¶@“ bIðò)R!%|rÏOì6&Ö¡‡Í
+s–¬7ôäP"sÌœ9|p]\ÉlfÏ'ªv7K¶iÍÕ$¸Áî}S[ÜVK cب0D×”ê0Ø5ò«¤gitËZhg7ñí­¢•dÞÚÇ_ê¶~XD¦pô§Æ%=Ñ*F꟱–⯹ߟþžª+ ýê»\~d+Gϼ%OÙU2ª©³g(÷|˜KÞ8åº~ý=M¿¨U;µ
+ëAv4>ÂâÉb[&èëÛXåõ‡ R'䄉¥ü"Üñý"É)¥F{WqÜj³‡h!YNéðˆ~~ò"ÙÐ5Œ©»Xçà ‡‹-Ýxä%ñqÉ>ÿó1¹rP*#7
+¶²çìÞê’ñ¬Õ(àmÆÊÞš± ~µnH¤a0³•JT½6‹’¾eËŒL£õ•ÃSóM <zÉÞ7B“Ü¿‡Ì/ñd=£TªÂ÷!Ö«7#.lG‘e‚ª'6;?3n*Ìö{<^iÿyŸÇ5½ÆL ž›4Ûã6P_††
+Ëȯúô$ šü=Z¤ïs£öjïM ­È"±óBc!¤d³£©Ëb”ű‰„g²@›€³y‹u
+¢ï,Ý™Š£°ƒûüµ±ÒI‡c&”ü¼ün®'ñ°~ÅH¿ßýø ‡é+RúŸRû#Ì»’ŒŒ[È1Z‚«„äî<úüEþ„þ'¢DEPˆ¨½|”‘s¼j#U(»1é·–½,ÝÓ4Ešç×Ü WŸuÓ‚S{:D¦àæ }ª¯ÏB%Ö^‰$—Y –Œ8Ǹ %³šc&h˜!ç¹ÙG£ÀŽ–+([;3ˆý¡ŸA`´ž°ç£G°øªlV˜SÞRÿS”W~V'¦—,É*ZÊÿëH™­ >FþrRZ§³¹™ª$@!È¿Æf'%N¯Íqg'á4¤ÄÛeù+¡D‚A¿x0J1»ôÖ©Cøp:©¡Ý69‡Ñr;âš>ã|º‹Úˆ²;h“Ùé gÖÐŒíõÒ½Ó’iH)è¿iŸö&Iû RKÈÜ-‹Åx°VÅ Ec°ÖH·1ÁïX™hF¸íµnQtCç¬``*<L5f¾ž‹•3®h¥ÞÞÃI‡€Ú;¿ ñXú¡}JlZaÒÝO—˜‹s1ä¥gH—Mî\åœàdH
+_„á}<É!‹à¨'…K^y‚ë:­C†j½Åê%½2šI‚£Dϵé¼H
+Å2ÑÈùðîì”í êzTóM¥ŸýØc¶ªáq_Ø™
endobj
-995 0 obj <<
+1035 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 1932 0 R
+/Encoding 2007 0 R
/FirstChar 2
/LastChar 151
-/Widths 1937 0 R
-/BaseFont /UXHWAQ+NimbusSanL-Regu
-/FontDescriptor 993 0 R
+/Widths 2013 0 R
+/BaseFont /QFMSRG+NimbusSanL-Regu
+/FontDescriptor 1033 0 R
>> endobj
-993 0 obj <<
+1033 0 obj <<
/Ascent 712
/CapHeight 712
/Descent -213
-/FontName /UXHWAQ+NimbusSanL-Regu
+/FontName /QFMSRG+NimbusSanL-Regu
/ItalicAngle 0
/StemV 85
/XHeight 523
/FontBBox [-174 -285 1001 953]
/Flags 4
-/CharSet (/fi/quoteright/parenleft/parenright/comma/hyphen/period/zero/one/two/three/five/eight/nine/semicolon/A/B/C/D/F/I/L/N/O/P/R/S/T/U/Y/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/quotedblright/emdash)
-/FontFile 994 0 R
+/CharSet (/fi/quoteright/parenleft/parenright/comma/hyphen/period/zero/one/two/three/five/eight/nine/semicolon/A/B/C/D/F/I/L/N/O/P/R/S/T/U/Y/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/quotedblright/endash/emdash)
+/FontFile 1034 0 R
>> endobj
-1937 0 obj
-[500 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 222 333 333 0 0 278 333 278 0 556 556 556 556 0 556 0 0 556 556 0 278 0 0 0 0 0 667 667 722 722 0 611 0 0 278 0 0 556 0 722 778 667 0 722 667 611 722 0 0 0 667 0 0 0 0 0 0 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 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 333 0 0 1000 ]
+2013 0 obj
+[500 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 222 333 333 0 0 278 333 278 0 556 556 556 556 0 556 0 0 556 556 0 278 0 0 0 0 0 667 667 722 722 0 611 0 0 278 0 0 556 0 722 778 667 0 722 667 611 722 0 0 0 667 0 0 0 0 0 0 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 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 333 0 556 1000 ]
endobj
-969 0 obj <<
+1009 0 obj <<
/Length1 1624
/Length2 8351
/Length3 532
@@ -8814,138 +9251,158 @@ xÚíweT›ë¶.R´¸;A‹»Cq-î‡ H!P¼x‘Bq)-îîPZ(VÜÝݵ-íº{ï3ÖÝ¿ÎÙ¿î¸#ß;Ÿ9Ÿ©ï_˜è´t9
‚l
°…Â
qòØ€l1¹5 ðG—
-úhÄÃó7LÏ t„ü.¿à_bó÷Øõ'rn}%¹Æìÿn·þÑÔzœ¸ž— ðܪCmþyøÍ#+ õøp
-ñ8ù„E
-â6/ÄN;0|ës2©¶òÄXˆÇ`kmH[Ǽà*õp+? ýä†5€Á#/€ˆñÚǘRóŽ¸ ¯ *ÿ€9a÷æúÙ—þ¯½=g(Ÿ6)Ù³Þa0‰{<ÁfŽ
-pÍ¢”2Ö/õ‰`”TèÄjš 3L¿àƒíá!ŠH»  s…?VLãT‘¹Jˆ&‰g: ÉÒѧLy‰À¸Šge0å+÷&|ÂýÀê~sóTšù‡²©ttÔRmñIëëd°9:6+¶@›ÿ䧗%«ŠA~ªÎA ý¨£±bíè0TóYòs¢1…Ðg{Ü™ü_8X—Áx!Öy4´Ê3æmü,qÕ¡Fôž¸Uœ1”=Ê™gÊ™gÆȲüwâEÉw#A¯òøJàú•BþS›•¤ònë®”{w‘?ßW#·TæJZ…å˜>}‡Ñ•ÁJJù‹”ºŠÑäÊj¿¸°[f"­u¬x^Ø( HHŠ}Q¡‚ßaŽRz8Œ¶¦µ“;jÇÐ:šÈƒÏó%^%QÓ±¬­v˜iŒ¼Æ¤|hÉÊUq”J÷¹ù »Ìã:aẖ²Åà2]½Rô¶°÷\xT; µ7L4T3FÁ°.ÌkÛ4ä»Ïuä‰qÑÅÓÅŠ ›c´ã¨ˆ“Ÿ¾Ú:‰Á˃NG!òç»EŽfµ4ƒvZi•M –Þc’þÆXÓ"Ã-­íêÆáP‡³ÕÌ$’_?Nˆyéå…ÓÕ½mÞ+à„_½‘sãÙ ’I%pazÏl›€ÿ¶uçU« ·\Û×Ðbjêìb>U¸)}{QŸNßà—¨ªw%=Ák±äfZ%Åêos[1øÉ]·êñZ¬w¹­fsƒ\û¾cx‰¾¾‰ŽµMÌ(}–"Ú\ñ|1wNkõTƒh,.Wèçh7)m|°Íü'gˆ5’S¯ŠJ2ÇM<'sÖ+ ±UÇR·¬§ëÁµ&I"AkËðÖíƒÜc»Êþª'ºø®¾bÒ^XÛÒV¶ãž‹c&jžü õ«{Aî.5ûÛd
-Ž{âA‚ݧL3bü J?ÙnÁ›C#ŒGÖ:ÂûSÅŸ†¸XJ½·5^9%4•Õó’‚Ò¨î_Zúäu¼AÁÜ݇€,23sËÛZÉzÎgIÞf­35TìQ›Ã_ ?Ôn¹)-ödÙ­¤!á-æÔ‡$J›½Àzö‚õ˜»‹Š)Nü‹:¸¶’{ý[}ð|ͯÍ*Úe™à€\‡v,­:j±ªÖÙH’R<[ݧ¹}I¡ÊíÐRò´hst4ý¯3¥{Þë— à e¶A¥ÆÈ)f!ÁîÎÈWn];FuéÅTK&|Õ‹æ¾\c…GîàèE9#½‘lý¤z‡X,¾t8íèëàvO¿šåj›@’ò»²·1Z1–ÈÈWc7Ü^q7÷õÛHm®#Í4š‹9.<qÆ–7]Ï>é"घ»Ž;ʆW=™PNïÞmMj§%·™Gô(àØ/õ]-÷'?E4œ¥ºŸê ЗBáNIV}f…×–Ÿý•‰ÓBýó®aˈ
-ÝìËI–Ø+¥®kª+…k{p¶MÍÍ$]Lj&”?M(ìzŽh¾ÏöÄÝá6è g*⪈}Æôš.lÄÕÉ^wïkæXÏ7eKxvù»‡ù5QÁ°Ç•Ê.ܥ˯ŒZKòQóÂsÅhã˜\«l>[êß Ý“Ñ"bÇ
-idguÊ ÛáÜ‚Ñ 9¤ëË‘'jM.~×ÿfêKÃÔŸ’ SêkÉ'ë,Fèø.JìíÜÎXѶ%Ænvâš’¤¼ò\¤ëVù¹r >guΆɩ,hè‡ÓbѤÏ_9¶¯Ë`ÔT •#ÅW}gƒ|³f<×­ð8²ÿ5È âõm`cÚ—}çêã[ÿoöþ-ΣÆgLÊôµF&Žzê_Ùºœ['Xæ tqu“G.¢/­bŸºâi$g¿Ð ÿ
-#ÄÎÝSDº“l ¹ügTù®„B'æ|pÙž2SXÁÖ =‹ç~õÎK–DÛ+Ïk¢·­ÀICÇCÜ0SApðäcZ:³ísž÷½Z÷•âKíÀDÙl”osúòÖ'+˜EŒ;úØÏb ]RN;-¿Œº(·]({5ׄX’³øö÷ô~™Ÿ=ÇŒpy¾7rB>Ý#ÛÁr{Yƒ©3ßrƒlšê¼õ~±Y¬Ø)Õ`qyûT±ŸIJ\^Òº2¶5ù¶…ŒÂ¨ÆÙ½C+âa¹ÜmyüÊ€=YÙGzm’ÕŸ>ÖÃI)ª~•¢•¾·wZ䥗QyyŒRÂfff8û“‚
-¸ÜÏ„e) ªÔ5‡Ðz}Í=1¶à‡v‰ÓG<˜'}îpÂ/òʨ^ärÁÍ)¤ƒÇ¼V²YYÍsSsôaÛA ŽPWôÔ /U®øGÎ8G”„X×ö¥ïôgd” ŸŸËÀ¿ÚrsŸc¡W8DN0|’t&sõ™9©~ }Y%ÛZˆÝñ4Ã@hÁwKÇÊ0º7ñ¤‡>–"OhIåà"5àÊtþ]ÛŸe»ÝÁ†UyåÞå¼ë\_¹j†œO" o‰¾é~iŒµb âÔwyu«•¾Ö:
-ÓEWº?Kûß“IœñáÕtÍ{Be-ë Uu£tië9ÙVåøë_onw®YH°íy‚Þ|˯©KâÉ'zÙuLÔ‚™I…¾?Cfà.mQn%¥Ÿ•I\zQ[°³D]Yí7öT¬$&+ázªŠÜ^„§P•àÇ´ômÖSXS„α¿çd±³Á¡Y>RêÑ™½²†ò…*Ÿ~ûzr”46:bŒ*Ç´H]ÅúÉ êXË—P/f Îëîw¸ÑV%.Ð-HÙ¤œùÍØÁ°ù¦µŸÏ™¿Ï³Ú/€V>ÖG—ç™~]I§ÐRúå”ù5ÝÙo<…zÅ•—Ã!rÀÜC)4ÜKÿªdÞÌ5YG¨Ò!ŠUa dV¦Ä`ȆՃ¶å|þFĹšÆ#\XZ­•c…–exÍØ⻫‹
-ðŠâÅI´ÁAM8îe¹åÌ 4+Ÿ`,NÍ|
-‘†“u
-jT­C©i–Tu #s¥§Ú'¨jzÇ¢’‡‘]ž>û Ó›ãé4ý}AB1ö‰pvs!œÀZý¶Ù0¸øÖ5 =YÙ‘Õ®¨=×`«²Š©«åU:¯
-$¨éå,3£¨{Q¾Qê5¨§6µh¸‰Üüß <ü‡ŸP1[½;džFoU—%÷UÒÞ,²Éš5Vo1
-=JƒË¬À<2Í¢îÿ¸£»|µºÂmïÝa²‡kv¼@ˆw÷ÎÖý¢AŸyÆ«ïÌvÒDYœ32²
-©òc¦Y +«Æ€§Qùsýò:ŽrM£ÅÈ*iÀ· Kö î0ÐÇkøÄ<æçó|;€^QÞâÝ@öE<YÍ4Ë.8XÉË@¶ÞIǽL» ïk[¯irWÏE/f؇jÈ)RàXý¯œvb~ƒŸCL?;Yt^8+¾ç/*7í2êì)É=fIï#!½öôžcháîÌÃ{ØV°#ré\šùˆ58»ƒ¬«1Éz—xÝ…È®ÊÖ¡@Ñüâ—¿GÈvÄ­ð*†b>
-ăڙ~»À?(Ç«Ì_aè3µœÌÀq•Ò·'ZÍMÈòqZ£¹§ËSÅv8à‚¼Ô[=Ä2MV*ÇE¸ì¬Ömpx†“‘ò°Œ¢Ç¸ +4a¯ã§À!¾Â2J ’¯Ôc2Ä»îú£ GЙÓØQö(„ªž0ôéÊ ÕZÅÅ`¹‰ÞÍ>QqÜY·TÓlFrÙ9Ä>‚$s™|
-cúÝå99¯ vµI÷ðJÐ?½›ÉÇÎlâ—2ãÁ¯Ú÷ýŒ€%Í4ïÚ]zôMy\U¯_éCùÅ‘Oaðáׯ™I m>jzX <Pû0[:?Ñú"§¤ùñ’¤\H)Ìn®ö£d©üN_ºmíDÕã?³íÙÑÎ*–=ï;ÜRO†vhÁnOxŸŒ={ƒ³{oà¢;ËùNÅZϧ&ˆœ–#)¶[>P’·ž¿Á©Øô©:Ïûô.)¿¨h^iyˆpdÎ<öL#ÑÆ¥{¨Òܺ¾E¨ózÛ'¦îIÐÔñ`Ïõ®±G‘
-F¸lqF÷wã!ïlgVc8Agbf–FLD¿¦x9Š|s ý5þi.ñ½5ò.–so–¾¨ìû4§e5<eÑ”7t>CÚ±CŠH›zrŒøòx³÷ÛÅ»+Vˆ-j¼pÎén J™m–›Ñs°pЭ@úEƒsFÚ-V^@6êI]§gIëEJ‚J[eƒÏ%K\ñ¸\%kÕבÊ}½Ï±ª·—´Æs‡2ßwýÕk“Òhý€×U%'ˆW(“ûh?œGØâˆÏlíä7+#ÐÖO'›Þÿ²ºéúÅç78' K*ûTâàÃF\Úÿq$qƒqê¦tMŠ+éM4Îâ§7·!… û9B²cr˜xÔ©*ÑEö¬!ü¯¹Š G_á¹É³Ìkñ¹ïEãA GþHŸ#ÑÙfÓT¼äû<û˜}!gÆÁ¥¬…X Wϲlq*¿ˆé©°MWfüp]ýÕST”i;Çéyù>.¯GxfœÕÛ[$« LTmç¨m–fîîe¬¢¦§P*†tÑ5[=ÑTQ3<“)u k¥ }²ùbâŽ4¯w
-E,˜µ´´&¾Þ6º„¢ï¨Í$¹°ÁÜ<ÊÅ|˜oÏLŽ8ßx'%ì-ià_~±úáÚuY߉•ü]<ócÉÞ„Ä:g}ä­A™l=iÜ’Ù›Añþèuúéצ<Û­O˜àmæ5 ÜT… ò‘êÕkjÕ‹IG ¦X%-úú\¶qŸt§D Љ64>–_ÚÒâ[Nlòí3«KRÁp²–Âb]ÌJ—^»6m4×Ë'rÕÏ"d^D›y!!o<¥fN¸È%PZQ¯÷nœ•7Je( æ%.ÜÆÐFœ—Q Ú›v¢î*ï&Q_Ç1éÇ»OµMí÷S]Ðê—âO
-,öŠú"Erq‰3×{1NÛZ2ú ©ôeeE?qx
-‡N$ÝE¾ã!Nz(Ý}Xn×ü½aב´˜S€¯q=! ÆUwŽÛ-ÁWá‚}Ø\dæ”Qf¨ÛÁsZY THƒ-´/â«Î-k×ÖôïÒÉRZ¤™2ûx°.[ÿªt8HÕ«XE¥2‡U-äbO¶’g×Vs£I5üŒõ¤JÒ´Ù¼ëâ#LAôfvñͳýn™ÖM6H·Þî,ÙŒšípŸBIN"±Š…:2 íÀlÇV=+èw9fš ÷˜±ÁÕ"ÙÛ½ìøù<´ÓÇ™R]Y4B²,LˆéIL ׶—=™ùôÜ3BÍ]²'ÿÔ¨ ’]döŽ
-ÝݦDJ)ÙŒáÉ¡fl°«Sa¬c€²cý×Øh}ë –7‘:©„ÑÅeƒ+"Ï ^Œæ?õl^}âï.<œEÖöþÒë’QzM‚iDÓÂÂLTª¬õºÒk=mùP©ú'·UŒ´/€›0òû
-ä–“Tf0kˆ¯¨éÞ6¡"¸FÂéq$îDY7Êôµíª‡æ¢_Ä+ùXDLI¨#%ò8ß[”: ¨ËA|’z,¯
-ø¿BówÚ]ŒßxÅ®ª ÙÒš›
-rÒÛdê9ñb÷Cæ½óG„á·|9]°Qˆí3ˆ¥8ö•'|2 jK¢´”6¾Y¦·ü–ū؆Mì{"¶¶¤~lú…W²ÌÅ£¥ZI¼ýÇCLTb¼Ø¨ñÉ®-üGOdfEæ—ôk'Ì,³q½Š°ÊšBa›=As_|û¢Õå|šEñ ¦Ùá`uͶ‰:ïp0nÚ”Û+•¥`¯|,_
-Q^ ±ëkB˶ÉÝÏW)´XI6°,}¥¬>Ñ­
-ff|óéæîDÈ[(-’°1MXü’µÌǨæ¹Ð1½æÄCÍ`SN¡‡ÒÅ»ïaÏB±³7,PÄ_ˆ•Žp²Ï‰çó×CG®t¹=6Jøwº‡P×±f×öËÌŸ õò–ÙÍ·¿)—UôÑþN¶Õ2¤C.®;—ÿÔvcƒ‹&çî¼Ð›íø¡¢ ?’!sÛ yvØ·ïœÒÎkYiÌçhbÏ0¾IDê.¶Y_^¤+<@<«Nk¿±eopô³…+¥ºêhC‹0Hó³cŒÆÜHf Õ»uÎTÉ "[1ò™8ÍQ áMBšHiô*ó]ƽ ¨Y©ipá8i­Þñó°žÇª<FßèÍNa¼°ã¹Q[£ðbd Yfwp“—µ©Â·{äBŽT.‡)çN¨5# Ü\8£ ¦oåc—j9^ ÐbYHËoùIà3Ò"¾œ½OÒU›7œëí Ú£xÖ°´ =|MÆË•’ëé÷\Êã®›½›ÊLs (iï*{–2w}À ‚Sq¤”œz¬4XBc°ˆ/­ùšNߧ}‹ÆO"¼¸ò^µ¯Å•m¹•÷h„‰rd,ŒÛà½ûJtF ˆÛÑW¤\ʯ¡q—9-1;Š ’‡Vû·U¢“Äç
- a¤)•Y°žeDÿ­ö‡Ú—«~‰ÕofØB8ûzIÅ‹‹—ç"ç6ZŠõæ ï?|ÙÊËûêÞVÓjˆóý ª¾$ù…è¾™A_%ãè
-½=7c…ÙG¬èÎ35µmªâÊÉmqZ†\B‘[›¸46ÊÎõÉé1‹äp#T‹ÀY̼†Ü¼²µ8c1@Ìõb$ýZÃ>ËA‡ýÿ Z*9/‹[ qM%ÛZîÔ3Ÿ"Å÷OÙýklT¢HFkmºYüéA3—¾OpkÄ·\;±©ô‰ãìµêOX.š²ÃÙZ|©9K>ø
-[L-‘×_ÎlrÉÁ~Õ?·åSç& ‰Å¬}+ž¾†¸WfÊ5na­¸À®ª|êkS=öê[¢8ˆžºÐ(ú°Oæ*ÔØ…ª\LêÊ°_PÄê:‚܆Ÿ0
-o¶d©W<DÐ?§|)"¶úšzœ8…û>r‘ÓÕ$EŠÚÜÍyÆokjÄÀ”*€Ò¤'ñË']Çåú®8šŸªBžß%[Ž1FôõU~zË7†Ÿ¿Ñ&¤”D·=.Eå°¹úiˆH× |v`—þ /õ«”WÕw°õ‚I ¾ª@+a®ó(©±ãA5¡=y=£­ñxç>USåD»<çÆÍMUÔ›€ÙlE— û†wRŽ{ÞÉíkGo-îçDq±¯R®¾  …ù ¤í€‹p¼ ìoB:04B»Ëß *pº¤¯O*=¾oFäÉ°ïCÀIüŠkú$ÛÆò wLv'
-OêX¡gŠÛm9#Êó2Ôq
-ÓRLvÏÍŒÆ/Ï7Xy!r8Ë!MÔ4ócK v&½›Ä4á”UO-EyÂTóT­âÑÕì}3Þ5ªV¡H·>”œ³"M*œjnøÏ3°ï|Ú÷×’4²{óÝéL¬!àW”¬Pfœ«ÙýFGó¼Õ‰}j™j컓íRÜAñÓ5Ý«rà)vw º'-¢ßGrËpnvÙ1AÛõ ·ºó\<užèÃbð‡ÖhQjÄcñž­Š:DqŽz,|¸>1sNñ&b®]?Mr)smWÅ€ÑûäÌ uQØÉ
-aàùÚîjäßÜš¨SÞ‚{ÈTvø…ùî)x“›”Vˆc†šçùÁüÿÿO
-æˆù_ØŠÐTendstream
+úhÄÃó7LÏ t„ü.¿à_bó÷Øõ'rnY#%#ö·[ÿhj=Î
+hçëÔðUÑRË_•¡\uÃb÷Í^Sû.w›/ضúºHœžu&ƒŽs©üX?åá/1·
+³oq›b§¾õ9™T[yb,Äc°µ6¤­c^ð •z¸•†~rÃÀà‘@Äxí‚ãL©yG܆W‡@P•¿Àœ°{sýìKÿ×ÞžÎ3”O›”ìYï0˜Ä=ž`3G¸fQJë—úD0J*ôâ?5M¦_ðÁöðE¤]ÐιÂ+¦qªHŽ‹\%D“Ä3ÐdéèS¦¼D`\ų2˜ò•{>á~`u¿¹y*ÍüCYT::j©¶ø$‹õu2Ø›[ ÍòÓË’UÅ ?Uç „¿~ÔÑX±¿vt˜@ªù,ù9QŽ˜Bè³=îLþ/¬Ë`¼ë<Zåó6~–‡¸êP#zOܪ Θ ÊåÌ3åLƒ3cdYþ;q¢‚仑 ×‰Fy|%pýJ!ÿ‡)‡ÍJR
+y·uWʽ»ÈŸï«‘[*s%­ÂrLŸ¾ÃèÊ`%¥üÅNJ]Åhreµ_\Ø-3‘Ö:V</lP$$E>Š¨PÁï0G)=F[ÓÚIµchMäÁçù/È’¨ia‡XÖV;Ì4F^cR>´de„ª8J¥ûÜü…]æq°p]KÙbp™®^)z[Ø{.<ª†Z‚&ª#ƒ`XæµmòÝç:òĸèâébEÍ1ÚqTŠGÄÉO_mÄàåA§£ùóÝ"G³ZšA;­´Ê¦… Kï1Ic ¬i‘á–Öö
+uãp¨ÃÙjfɯ'Ä‹¼ôòÂéêÞ6ï pB‰¯Þȹñìɤ¸0½g¶MÀÛºóªÕ†À[®íkh1 5uv1Ÿ*Ü”¾½Ž¨O§oðKTÕ»’žàµXòN3­’bõ·¹-‡ üä®[õx-Ö»ÜV³¹A®}ß±¼D_ßDÇÚ¦ f”>Km®x¾˜;§µzªA4—+ôs´›”6>؇fþ“3DŒÉ©WE%™ã&ž‚¹@ë†Øªc©[ÖÓõ`Z“$‘ µåaXëöAîDZ]eÕ]|W_1i/¬mi+ÛqÏÅ15O
+þ…záÕ½ w—šým2Ç=ñ ÁîS¦1 þ¥Ÿl·‰àÍ¡Æ#káý)‹âOC\
+¬?¥^‰Û¯œƒÊêyIAiT÷/-}ò:Þ àFîîà @™™¹åm­d=ç³$o³Ö™*öŒ¨Íƒá¯…†j·\Ž”{²ìVÒðsêC¥Í^`={ÁzÌÝEÅ'þE\[ɽþ­>x¾æ×fí²Lp@®Ã ;–Ö@µXUk„l$I)ž­îÓܾ¤Ðåvh)ù€ Z´¹:šþ×™R‰=ïõËp†2Û Rcä³`÷
+gä«
+õµä“u#tü%övnç¬hÛc7;qMIR^y.Òu«ü\¹Ÿ³:gÃäT4ôÃi±hÒgŒ¯Û×e0jª…ʑ⫾ˆ³A¾Y3žëVxÙÿä ñú60ƒ±?í˃¾sõñ­ÿ7û‹  çQc‰3&eúZ#“G=õƒ¯l]έŒ“ ,sPº¸ŠºÉ#Ñ—V±O]ñ4’³_ h€RøP/2³Vî¶ü3oÙáný™0>u˜`²X£¼¨‚Ö:·bÀ; mH
+¥FÌÏ?-UtË´·(o¨u¨È ÞÉorì¹JØn-%^sj¦ø=DÎïæº: ¦MiG¼@Œ
+ÄøÀŽ"”™“/8*î©Þ|Ts8ó•^®¼öÀ;d¯0{í‡r 1¶¢1µi¹<CPb¤Ø"ô‘$BºÂ™vwvJÀî,6-u³T/‚Àßé µû^å]F9»Ï]­V,gÀœ¥‡iw¶X Ï‹ø´ðÞª^uËg˱7,ÎJà‡¥ÏVšþjÁIäÏ‹´Èò8¤î<Au¿ô²Kzª#^7Ù{•ÙÅïÈR€‡…³Ö©Mõ¶‰GÙ¬5ØÊÑãúBbI·w|ˆ^àTm‡ ôº8³®Ü¤%>‰Ë¬ÛµDª¥­:O,±"A"ã÷ã)%~-ñ…ãziÝÚ´Š™v~ÊÃüZ/hÒœn{ ˆ]`|CèÖð{Ly ü…;Nú—­PbF.¿àÈÀWŸ™žiÊ€ÑÞËTàtR‰¬"8Q°†ÄШlTIÝ0W½b^OeoN½³ó>Þè‘*Éþt…bçî)"ÝI6‰†\þ3ª|×B¡s>¸lO™)¬` k†žÅs¿zç%K¢í•ç5ÑÛVडã!n˜© 8xò±?-Yö9Ïû^­ûJñ¥v`¢l6Ê·9}yë“Ì"ÆN}lˆg1†.‚)§–_F]”Û.”½‚kB,ÉY|û{z?„ÌÏžcF¸<ßH9!Ÿ‡î‘í`¹½Œ¬ÁÔ™o¹A6 MuÞz?Ø,Vlƒ”j°¸¼}ªØÏ$%./ia]Ûš|ÛBÆGaTãìÞŽ¡ñ°\î¶<~eÀž¬ì#½6ÉêOkŽá¤”U¿JÑJßÛ;-òÒË(ȼ<F)a³@33œýIA…\îg²UêšCh½¾æž¿ÛðC;ƒÄé#ÌŠ“>w8a‚yeT/r¹àæÒÁc^+Ù¬¬æ¹©9ú°¿í PG¨« zê…—*Wü#gœ#JB¬kûÒwú32JÐÏÏeà_m¹¹Ï±Ð+"'>I:“¹‰úÌœT?о¬’m-Äîxša ´à»¥ceÝxÒCK‘'´¤rppe:ÿ®íϲÝî`꼃roŽrÞu®¯\5CÎ'‘„·Dßt¿Ž4ÆZ±…Gñ 껼ºUH‡J_k
+|»;Hƒ>«]®™_Êæ¬æ
+ö¿µ‚Û%ÛJØ¡ñƽˆã‚ÑÜ–;2ÓÝçù(ƒ^|2äÜsŸª(®¾é†çp™fv͹$Ø ÆŸà—FÜL2qøÆ-粿vkÅÒÑX¥RpΧ±|ª`Æ-õ³Y²©ã[‘–ýæÛíÑn©3kKYìÀ ‹Ã_°0;p7K_Â…v˜w× t*ˆch
+ä¥Ç³˜Å'GNø-žÌôÞz¥öIÛ(úÝ‹*óýŒ^Ï96|®®ù’]V~w}9Y˜ÝèvýHáÐ×:6D-ÕRò ýÈ›µ·¾':­±^n$ -Q-p†Ä5H_†QÞ&Ð`¢Sðš¬úCŠö÷±¢¥)QuûÙ±T«ÁþSÒgׄ¥ê½ÉF=’wEp(% ØîÎõËâÑÅHo¸vöTŽD 7ç÷¥okækÙÕOõã£T £ï‡œc›® ¾Ý”^«¢qmN„؉1§[×rò4mnU…é¢+ÝŸ¥}ˆïÉ$Îøðjºæ½G¡²–ˆõ„€ªºQº´u‰œl«rüõ¯7·;׬$Øö<Ao¾áÅ׉Ô%ñä½ì:&jÁ̤Bߟ!3p—6‡(·’ÒÏÊ$.½¨-ØŠY¢®Œ¬ö{*V“•p=UEn/ÂS¨JðcÚú6ë)¬)BçØßs2‰ØÙàÐ,)õèÌ^YCùB•O¿}=9JšN1F•cZ¤®‡býäu¬ƒåK¨3g‰u÷;Üh«è¤ì RÎüfì`ØÀ|SƒÚÏçÌßçYíŽ@+ ë£ËóL?®¤Sh)ýrÊüšîì7žB½âÊËaŠ9 `î¡î¥U2ofŽˆš¬#TéŪÀ°2+Sb0dÃêAÛr>#â\MãÇ‚.,­ÖʱŠBË2¼flñÝÕExEñâ$Úà &÷²Ürfš•O0§f>ŠHÃÉ:
+ãƉbT†§I:Ÿêj2Œë±¸` H[¢|~e=ãØX]Ê:Y
+6ô£¡L«Á°’ÐÙ¯WiŠñD½ÕÑ•©x}Àç
+ioHÙŒdÍ«·
+ù1Ó,Š•UcÀÆÓ¨ü¹~yG¹¦Q‹bd•4à[Ð%{ÐFwèã5üNbóóy¾@¯(oñn Fû"ž¬fše¬äe [ï¤ã^¦]Ð÷µ­×4¹«ç¢3ìC5ä)ðF¬þWN;1¿AŽÇÏ!¦Ÿ,:/œßó•›vuö”䳿¤÷‘^{zÏ1´pwæá=l+عt.Í|DœÝAÖƒÕ˜d½Ë¼îBdWeëP h~q‰Ëß#d»aÂVxC1Ÿ@âAíL¿]àŸ”ãˆUæ/‰0ô‡™ZNfà¸JéÛ­æ&dù8­ÑÜÓe©b;pA^ꀭb ™€&+ã"\vV붿 8<ÃÉHyXFÑc܆š°×ñSà_a¥IáWê1â]wýÑ„Ž#èÌiì({BUOúôePƒj­âb°ÜDo‹fŸ¨Œ¸ î¬[ªi6#¹ìbA’¹L>1ýîòŽÎŠœW;„Ú¤{x%èŸÞÍäcg6ñK™ñàWíû~FÀ’fšwíÆ.
+=ú¦Œ<®ª×¯ô!ˆüâ‡È§0xÈðë×̤Œ…6ŸG5=¬ P¨}˜-Ÿh}‘SÒüxIR.¤f7a
+WûQˆŽ?²TþÆG§¯ݶv¢êñŸÙöìhgKƒž÷îG)'C;´`·'¼OÆž‡½ÁÙ½7pÑ€å|§b­çSDNË‘Ûˆ-(ÉÛÏßàTlúTç}z—”_T4¯´<D82g{¦‘hãÒ=Tin]ß"Ôy½í“S÷$hj‹x°çÆz×Ø£H€ïtNDº,"˜\`JP˜-Z9¢M
+Ä5 ^¸çt·¥Ì6ËÍèÀ9X8èV ý¢Á9#í+/ õ¤®Ó³¤õ"%A¥­²Áç’%®x\®’µêëHå¾ÞçXÕÛKZã¹Ã
+™ï»þêµIi´~À몒Ä+”Éý ´‚Î#
+lqÄg¶vò„•Šh맓ŒMïYÝô ýâó›œ%•}*qða#.íÿ8’¸Á8uSº&Å•ô&gñÓ›Û†ý!Ù19L<êT•è"ûNÖþ×\Å„£¯ðÜä‡Y浃øÜ÷¢ˆq‰ „£
+¤Ï‘èl³Ži*^rˆ}ž}̾3ãàÒ@ÖB¬†«gY¶8•_ÄôTXŽ¦«3~¸®þê)*JŽ´ãô¼|—×#<³GÎêí-’Õ&ª¶sÔ6K3w÷2VQÓS( Cºèš‰­žhª¨™žÉ”º‰…µÒŒ>Ù|1qGš×;…"ÌZZÚ _o]BÑwT‹f’\Øà@nåb¾Lƒ·g&Gœo¼“ö–4ð/¿Xýpíº¬ïÄJþ®FHžù±ŒdoBâG³>òÖ L¶ž4nÉìÍ xô:ýtkSŠíÖ'Lð6óš
+PnªByŽHõêµ
+µêŤ£S¬’€}}.Û¸¿Ï ºS¢èDË/íNiñ-'6ùö™Õ%©`8YKa±.f%Ë ¯]‹6šëå¹êg2/¢Îͼ·ž¿R3§F\ä’N(­¨×{7ÎJ¥2ónˆ?ch#Î˨GíM;Q÷•÷ “¨Fˆ¯ã˜ô‡ã]Š§Ú¦öû©.hõKñ'{E}‘"9Œ¸Ä™ˆë½§m-ý€†Tú²²¢Ÿ8<…C'’‰î"ßñ§=”î>,·kþŠÞ°ëHZÌ)À׸žãª;Çí–à+pÁ>l.2sÊÎ(3Ôíà9­,P*¤ÁÚ ñUç–µkkúwéd© -ÒL™ý<X—ÇÆ­U:¤êU¬¢R™Ãªr±'[I‡‰³k«„¹ŽÆѤ~ÆzR%iÚl^‹uñ¦ z3»øæÙ~·Lë&¤[o÷N–lFÍv¸O¡$'‚¿XEŽB
+Ðv`6Žã«žô;3M Ðû
+ÌØàj‘ìíÞGvü|ÚéãL©®,!Y&Äô¤¦…k ÛËžÌ|zî¡æ.Ù“jTPI‰.2{G…înS"¥lÆðäP36ØÕ©0Ö1@Ù±þkl´¾õË›HTÂèâ²Á‘ç/Fó„z6¯>ñ÷Î"k{éuÉ(½&Á4¢iaa&*UÖz]鵞¶|¨T}“Û*FÚÀMù}rËI*3˜5ÄWÔto›‹P\#áô8 ’w¢¬åGúÚvÕÃsÑ/â•|,"¦$Ô‘yœï­
+ŠèÑüXÔùågF¨f«% ²ÞŸV$>`"õÏ,‹Š"Š ¾"ªmè•&«Uzˆ=õSº ‘™‰žâÉêýŠÍjÇê‘Î8,”–0·õÏÛsïSuïÂ9Ú|L8)³[P7·ë±‰ù=žs†=÷3¥žÈ³8Ö¸(IŽÁ»I_ é½s§µ1EhXÌ+Öµ±’iªà‘Z×ß ùåŽx 3lú>ÉÃø¥ÚüŸ¦àÆ%m©‡Ä}¢ýVÌ^ø&ž3uÍ >'ÇFx†÷~Ÿ®²åí:ú×ÅlF" j› ã;Ñ`_õdû©m™J$ÖÎù§)ˆEÙzûÊ…MD´dz"–Ý'“9ºáj-ž˜M8¼f¦^ñÕ±ûevÂÄGçMò›ícÜ=iàfg.»lȹüê;É8yÜÁÅ1šTFã›w£rSmèmʼnö‹ùJ…¹
+Œ¢âêôYÜ[aßå¶@GEoaY8½nퟴχû³±¯Ù»³éx[$>_ñŽbt½wí¸û"ÈÊë-AÑø©~Óqšý`à-®æj0{“IŽ4…(¯„Øõ5¡eÛäîç«Z¬¤ X–¾RVŸèV… 33¾ytsw"ä-Iؘ&,~ÉZæcTó\è˜^sâ¡f°)§Ðà ébÈÝ÷°g¡ØÙ(âÆ/ÄJG¸NÙçÄsŠùë¡#WºÜ%ü;ÝÇC¨ëX³kûeæOÐzyËìæÆÛ_‚”Ë*úh 'ÛjÒ!×Ëj»±ÁE“s÷ ^èÍvüPQɹí„<;ìÛÆwNi絬4æó
+§0Þ@
+Øñܨ­Qx1²†,³;¸ÉËÚ
+ŠTáÛ=r!Gª —Ôs'Ôš‘Pn.œÑÓ·‚ò±Kµ/h±,¤e‚·ü$ði_ÎÞ'éªÍÎõöíQ <k XZо&ãåJÉõÀô{.åñ×MŒÞMe¦9”´w•=K™»>`Á©8RJN=V,¡1XÄ—Öü
+N57üçØw>
+íûkIÙǽùît&Öð+JV(3ÎÕì~££yÞêÄ>µL5öÝ@ˆÉv)nŒ øéšîU9ð»;PÝ“Ñï#¹ƒe87»ì˜ íŒzÐ[Ýy.ž:Oôa±aØCk´¨G5b‹±xÏVE¢8G=–>\Ÿ˜9§x1×®Ÿ&¹”¹¶«bÀè}ò
+ãL5Å8!á—˜ÐÀÀ7fyVY¨Qº9‚8Fìó3i›‘w˜z¦¼×£ý° MÊ£Nõi0vŸýp%”ZX÷–£ ìL <ó«lj#–:¢‹ÁË9ºÐÊžÖ“gtõÔ©b¸¾¥’`w<®¢£å&W&ªÐ!ð_$Sl£× ‰ïm¼Eáκ5cá:ŽÉ¥‡M°„~<hÇ]-È0ð|mw5òonMÔ)oÁ=d*;üÂ|÷¼ÉMJ+Ä1CÍó¿ü`þ‚ÿ'€N +êlsÄü/´ÓÐSendstream
endobj
-970 0 obj <<
+1010 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 1932 0 R
+/Encoding 2007 0 R
/FirstChar 35
/LastChar 122
-/Widths 1938 0 R
-/BaseFont /RUGCJZ+NimbusMonL-BoldObli
-/FontDescriptor 968 0 R
+/Widths 2014 0 R
+/BaseFont /BXRIGX+NimbusMonL-BoldObli
+/FontDescriptor 1008 0 R
>> endobj
-968 0 obj <<
+1008 0 obj <<
/Ascent 624
/CapHeight 552
/Descent -126
-/FontName /RUGCJZ+NimbusMonL-BoldObli
+/FontName /BXRIGX+NimbusMonL-BoldObli
/ItalicAngle -12
/StemV 103
/XHeight 439
/FontBBox [-61 -278 840 871]
/Flags 4
/CharSet (/numbersign/hyphen/period/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/y/z)
-/FontFile 969 0 R
+/FontFile 1009 0 R
>> endobj
-1938 0 obj
+2014 0 obj
[600 0 0 0 0 0 0 0 0 0 600 600 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600 600 ]
endobj
-961 0 obj <<
+1001 0 obj <<
/Length1 1630
/Length2 10420
/Length3 532
-/Length 11283
-/Filter /FlateDecode
->>
-stream
-xÚíteTœí’-îîNÜ%¸{pw·iÜÝÝÝ݃kp×
-äh-
-×u”ø¦ñWÉê!r6Y—fü…øÙGRŸ¾yKR‰vUå)0o+Xä
- ø`8ï&-Ô§|_wñ˜7¦æ 奿i®™ÀÂÆC6K’kФZqÿ©Üõ-„8ª±Ïë½=Iæ¾xV@f³6Å-ýwËÄÎûñÌq#Eûu$u±ë5Äel&Qül‰x„ù»ƒ#MeȦ’9ázÚð¤Æ¯ëÃÈ E¸½ëâíŸ+óˆ°×CˆØ³Üg¨´ä·[¾Ñ÷pÒ!ìSðŸò“Ø›9"ÐbòMÀ8Õëq]yZsY£4îV ¯—…d<¥siáøÞù%Þ«¯ÔˆÝ¤qg'ä·„ãKä´¾ÀGq!»:½mQ!!&ßa?F±1Ž»ÁÞ¥Y†eP.hNø­1!/­öã÷œ½ð&  ‚¸a©7hèÛûŒýóÇÙ‡\š¯+D®ÉÑÐ Zƒœ0üÓvÄùØEýÉO¼ö~&ÙRm³ŽÊø=q¶qÊ¥¥»5ôÌ”ëb_ ¸mÓa…©!RÇ<Ê)¯$KåT¾C’"ú3Lº wìóÏ #uCm…›®££¥b·B_iÊîð¼ ]7‰Œõ• ðeQ ,®€”]®ì­|va!Ø;ýF‰E=ÅÑ8³¬5)Å¢u, ûÕðì^È ›Âê‡V+ƉC~~UY›¿> %<{ïè—ÒQs…ñpbÈNÖi¿KÚëC/`_IL»/\x7´×´mÂdšØÒeÖίð¸‡^ìë!>ûÙ;æ ê¹MQU,¯ÕêÓÉKQBäg~—šö–S£,QØú¹¸_ìMjŽCçqTlÉJ6È£¾šø (Ü×}Yô*NY&X ìs'«Q·’RïÍnƒa°1³'ù¶¢;\ ´ý6§eã3Qº7¢RÜ
-ã>õû~
-[`Ï—Ì/ù®—o MyYU‹â¢/ÿ¼Ý›Âœ¢ÝˆÓ[³¶MlÆ
-ËšÕ˜±{[½¤-üyª!Ø¥ò6¯Ë,ÝÏ–r‡{ŠÒþŽ•ðRö¢i³ 4:»ŒNt8¬¼GrØ¿š&¦².ÌP˜ã®—ae‘©Ö’ГÖNTX/ïbmåV¡îé1âûœ9åì¾ú;‘ùÑ­[BvÞÄÏdär{,‹&z¨½tEÒ2]A fS0ò}úö4kwçXN!ZÔ¿£I5·›_m—Ákˆìˆ±—|šÓC„8Ìx^]·=´–(LHž I3(ed7iwã—â ‹ª%ú£%wÚS?{drS[nA½G›;õ>Òi´ý'mLG:dŒhfL{¤ÞzÚGÛH,UAw™Ö PÖê=µàŒ dn¶h˜¥‚Jï ¡ßÜè{ruIîÏžçS?èôQÚØŒjT3§Ïñ¤ ŽYΡ¯jã"»t¡EM>í'ÎÄ—·pýèþÉR ?©0 o‹Oï|Ï‚®š!\Õsø” ¶ìOߨùu
-/À/„¡œ‹œãWÃ5t/‡…û’ÀÈÍL´ÀhDÔËá磑À÷7
-Ö«LA‘G´D©(aÿ à;ÔAG´Õ JU;_^\‡uç.-©¤î,+»¼Z‘=•¿RæŸÐò…FIجóÔ~ÅÇ›º1“|÷dÈ…¾^¢§ =Ô**sç «n-Ø[”Ú¶Q¶ñ¦D•œ1ÃØu®KÁ¦¿µÜ†y€´Pä†c(âÏnh0(iX²w¬N¸×õ¡ÍI˜û„ùÒ¥Èæbd¶ùq0«s°ö؆¿-ÆN™¦}ümšŒ­ü‡+ÈŽšœ=zàë…qãWÈÅ+¯|jeÅ5ÎtÿwˆŠoµé¼’{„Ùdã å”=\bHv8†Nt{„¿_å<˜m«3²”K,Í"ëT)(ãú`ÙP¸&«Âo˜«·õ£C·’=ø V–ŽŽ‚ä±à Ë1>F,.6¬z&·!^ ý‚÷ž·9š/–_Ý‹ROnOs!ºð±
- ÍœçIËýMãèY=±Dˆ*
-Xÿ÷Ô­&?=b¬;”½î‚™ ¬«zGn£P6í±ÿû±Ù‘,œPýgµƒ6å Åù„ ˜:vn‹
-®õg JŒGâÖÜ3ûRÄë,’ Órw¨¾}óã”sᓱx&á=¥Ì\_ Îƈ߾lz'¦vC>_ €1Ä8ïÁ'nX«ÄÿÔ_>E듸è3cióú‚"“š¿X.,\Œ:ÚÎä½s¿ ‹Šs©h‰74’žÅïM$úÚ”t¹A¬Å‰V%è¼Úï¯àFð¥ìÌšjIp0!{»¢”§îYý2™‡5¥C)›¬ÜgªïvPc,ØÖ1#H¼l€àT3%H°øófØúï{l;¸¼ûüÓ ¿@vt MrO;¨|¡–Ï즪ègY§Óùî îÆô[q£¿èÄ" …W²Èj7ð!¸ÇŸ nV¼ð’"ꘕ¤i$| ðæjlF
-ÃÚ¶lóE7÷³3™N/,*+¿PC.m.>ÊÖSyüŠô¥–ƒ®v«~@ P2ÝÒf­NMTP-OÏ<a-€…>oIBeqì†bHpæÔt‡“ŽÄqj µ¥u!Œ»MB“†#z«Vk™…ó³;¨b„èC5ãAÆyÝYïØ ü£D@ìpøÃò¾×{àOÅvcwQŠrøŽ €e·52åeú/ ZLé¹ÉË`~>\‚hX"'N¡Ã$wõ¶!•õ[5ièÑsh7â”›Ž›ã¥ä»l—Ý~ú,;>Â|¡bŒ»-挟 B—ík.D¿ÛµËïÅÓ€”ÖWQ”‘]H‰Õ÷gÆPіتïS+ØT ‹§y3ÕúÑ›:u–ù§™Ã ×&_¡TT}4ÞÝÛ˜­¤¢ÓM2²%Òì½#øE=
-;½N
-¸»v ½Ê…éÔÔqKoœâ\¶Ý€×Ÿ0 hïóÚR
-¨T5=š€áÅ
-•½*V^¾º1êrðŒ*
-®é/Š)T,¯}«2lÍ,ʽÆÎ[ÙŸMÕ° Ú~(¤ÞQò«Žã¶ÚœuÁ3° QÑ•×46™›œö¬}Ù6tF-„zôôÏ
-x0Æà K¾'¯g~y÷ý|Ž°ž¡CCëLFRçÔûCx“U2x’ì¤Ú€òzô8i½‚“ÀÀºP &&åËk剺âi-`JÜ&â,¿Ý¦¯˜Á¦¯z‚+Ý°G…˜Ö¬l†0ÏüÜÖ9oHƒT>vüŠ"nC1Ç=ˆ§XØ„?ýËzñŽ7½Ò!·51 ضMcÿekxnºÒº1Èv&ÿ%V¯Œ Q¶Ù¾¡cÑ4~€Úgo¡ =;?§‹c6vÖÂ5NCÞ0è+wµ ý¶NùLCª•û‰­r,Ïbj¿ÞÀ×Otm‹yã«÷Q±âm·/SVæK |“D|VïáEV<Q¡)…xú—7'Õ^'å´U6æAÂÉ¡ehSÃQúÙì6p5 =‚ÔKÅ´t,ý‰> ¯-¢A–×pE¸6¥]“ ¼á£Ê h3–©pD’&ä£Ä É +k«ût‹2üWŽÜª|nÈ<~'>m8MUš™Ö²Z†>?nÆšfcBeµvG5?ÛbêÀ:' ñ” "en<Ma f'2$ûÌ]R_­I¬‹ÃXż #—ˆd}lu>ërv×Mq(‘¦aíÅýv&…æäüá —<šµWˆ¼üe®vz{óü·ÄÜÓ òŽ¦G§IDÃ"b_Ö Í%ËŒ‚²¢êx‡Ê^‘$Û„ù…üÆy uÁéQ_p$@ÖU/Èãˆ(w¡id-êl¡å¾kT
-K§4xÈÔP¶—ÛÛ‰Õ[û‹ÕÇo›_¶¤uÃwü`@Àr4ýÃ¥Šùâu.Çc^ʈ~¢{ªŽËûb²OÁw}ñx×—`c™ãø?$?q;a—C¸GKÁCÐJ&Ÿò"t¸§'¥=€gh¥Þ¹ê ýs§H½Q”þ¯ÙN0ViT®I‚ÀRÜ#Š,šõ@¯»Ï„S; —nÑ´„(ÁPþ±Óí'ó±÷t—¢ç©¤ç‹ûø?0õK*`ÁÎöÄË’&8¡ßçöìd„ÌV  }¼·Õ0£¢²Ü}çŽ 3ѬÅ@‘Òµ13LëÃAÏNÓó.WN8™œ `c¥ý
-üm££O<+„ºlMË´p~Mý™[ñ©ø·hÊW·N–&9_ 9øÂåÖ ÒgÙ0ª¸Lt»ÈéX+sÿõ„&ûI*ofʸèÊ /ŒÀÐÀƒÔ[ü"¤}.¸ûæ¥c‘çäß>3D|åOVη}ðî
-(ª4rQ¹!Yzˆ‘Yù_‡u¼‡Ó´Q½Þˆ®¸ËÛÌ«
-|ø2C¸Yƒ~Y¤¬BþLŽË¬ðLÕûvè÷Í ³˜U@âçÖ¾”5Ù¹~ÜCåýŽœ—® ‘ë†<…¡ÚÉ¡È„¿ ;÷Un¹ù¼‡ ã à™9 ZTêS½D,f¥‘j@xqÒ–iEÐ+ž²J>`ýáìÃÕ´Eñϼœ#ÄñN%€õÐ7
-l^¹C8I‘èe«3ÅA¤Ã¯ðÿØòk¾Z¬nk¢ªh±¡FÃ]ðÙ›·²îtxrJ¼‰Ù¿bo
-d©‘¯l};¥ZòM«yŽÏ‚ÐÛe´Æ;Î÷kßíªêÂ×¢èCsú?êÂr؇VÚýV.K“.ÅÍ"ûUg§ ™áön~ vµ2Äv gè"àÃ\ôAm»)Zÿh”RøÉR¼.|y÷¹'"ˆ*&–ç>™#xr§cm¦Æö0žœn³‘=ǤslF&~k2E«jlþ¬ Ƈf„ÃLbJ&ÆRXc6¦KnÄÎäÖ¹˜O"êûðΕ¦#{äÚª|^3ŨÊ;è44Âr1f5)·g¼_ ì(1%Õ
-rÒŽ½wÂø’>;Slêô‰‘5s¼uÖ²Å#&ëA¬!­ø5çÈÔúÉÂbªªF%.ïîÐ{ãRU©ÉàëNyÐÒ6½/ÚÓNEg“É·Û¯êÏò¼hžNº–Ž¡]Șùj©<}crÑ¥d­!]ìÜÎò>þ ÞÄ ÷{€m6"ûªùø@P¡S†¸s}'V%ó.£zùˆí]¡I^(ÛùÌ6…–¯ƒÑ|4âsæþ>êYÈ-Ï:´¢Ù2åÁÅs(×±@¢ =}Åæ—U·n6 ÈBC¯>Ç!Âû@u=å<²—1i=íÉú=ƒ-¨òZ—ÅM ­Â4÷–@tõJæv‘q½ãû´yç¾vr«Ï„¾VnEø„}j*7Si‹{=‹Áï£!æXàý1±J ='»Ê`W¸îÌÒìì;ïD}Âv-wŒ$ØM0½(ðö¨ÍéM$ÀzCç§ 3ß3XôåB£
-°œâ‘1é#V~Ö¤›½hBñ åùjtw“bsYŸ´5 ¬˜ºÿ“,W²ýÖ»X,+'z7ÂàOe~a.!dÊ«+¼˜å¡ñÊVóÎçõîú…*>3 þ»m'¯¼ŽpFTYDº9HÁ†“lPËÁsà–Žý„Ä&ä’ÍåìƒÔ„¶“MÊBW{a
-œây[ƒËu¦YÚr!ƒô$l³Ø a£.†þÌGƒaW]èPj©"!w¦k?…Bm$¯œ:#ϯ˜R¡~+Oø0¹`5ÌP(ÅÍé=vÛ „ú"þÀ‘—Ñî1+…¸Ý¸&ߘ óÚ*-‰Š ”8ÕÐYNÒcŸ˜¾üJìsMQj[F¸‹kzéú¸ä(ŽÀK¹öëÎá½ gnä@@m35N-Í˨d²äí«hV]¨Áà^ƒì÷¾­Þ uŸ÷ÚÖ¦k‰-¾·UÉ[~¡‰è%?Ôé·SrJvı}Ñ™¾Ä=3¯rêÅÀØ›uYoaQ•L}F¡©›§ü¡à:Ežir¢,sÊÜ[<z˜¦öÚwR–o'«èC=Rp3s* £_Ë•Fª!Ñ ŒLïЋ˜¦)§í>¸©¿ÄG€ÇàðÿÀï>Â6SGÄT¤®I;@|&ÞHJstÊk=Lig¤5è‰,þm!7ÿîág=ò"Œ
-<uHîPe£C³PÍ2EíäÁ|ËM ó«QX³g9(bçŠvà‹÷µ/’TÂèó¹ÂûàEÔ’÷¼¡¿J£ºV]CG ;f¥/ÁàL­÷mˆª©’’ùê#°ð¯¸1¹C‚U=è3TnÌó´sS_vçahîÖ5ImŒ=_²ž‘•9–ãÆ›Öo!|>i÷.T+=a9?wô²ÅùÄ˺éN¡¼‡Q²¡\Ýq.¿³lߣ¯ÚÌMú‘á£óäPêç@lʼnT
-¨JUŠÆ•ý¿Ñu3·àp G„‡ùbÃéÏÝDŒ%çwì´¯ïª9áÌ ó5SsÕþ†ˆKë†Üœ¼e}Vô™¡)‹$?·,V§¨$Uã½cNùÕTD ½³#éˆF»œ±´Å(EB‰w%È {|(¬3-I™¢m8W‘r…XÍe«àÞVLL¥Q.*Gõt¹IÚ¯±™^_Ø“’ÚÖÈûR˜Sö «îÒžÿk./·9Ï•ÅyÊo •ÓwÉ×°ïJwYâ‘ϱî¸6eÉÑœEɈeósS}¯E±X8‚ÕË#¤y 㼟KuEüì£!o´öUöä”óÏéŽÃZX©¨,M|eÍóÉÝ)ƒ^»D¥?O­Ü]De×a$p*£<Ôu¸-‡•²·HÈÁÉ'. JØ QíH2³&šÞ–é{IênÊf›êòËŽêõ0]\³Ç¸,Y|egσÜÍ–Ø,’ä¥à¦¥\ÂO°ÌA%hP ŽmÀÙ3Y'Ä]ÄhÌýð±ÕÞì²›ODPxþõnº”å“]ç7CåÎm gªô÷ËÜÆu“óm‚ 5 :ª4kíusD󰈪KÀs¢'·»^Rå”XÄ ) >M“£<Áp©E^ˆž+vxE$¶ÆöÕ¸œ eMÁ$ ÷Š¡|¨•ùìü–îøÈp¹[䢧ªT«-ĺ ô{~Êfª~ý WÑ8æôQT“yi¬W%>ùàw—3+¶ë‡IÕæŒ}'Î '>š! ^ËÉ´¯ƒT%¼àn=0Z€ÞOi°nŠŒƒÔ'ó'~
-\´)(ä t‹hß÷çuÌîÈÕyêáTÅD_.àÞM`¦_}\_i¥ê#k?×ziÓÍà‰Á¼­zñ)90¥7€•ØIgx¶}/b
-(Ñ-ì@¹ÀËq²<Þl™xüú0·¨gOyP} Å¥\’`ÀxªÃÆ°6‹9)ü<»^íéîä>ƒ@1è¥ôk5 ê¥5a*ìH¹4}YÕ #|ÿ§¦}ý68w…Ëj*6Ã㸟QmŽECÁ¬œ“§ÄƒOoül“³æoC’rR>s”Ù°ký“Xâ²Tþ--i»ê‘7`ù`/N…›'¶1 h <þS°=xÇ4î×ÚT¡ëÛÇÍs=@· 1~_¶ý)î;ÎnoŸ*CHÖÏÄÒú `^¨VY©êKŒ·€’ÃN±ÍÉÿ£†-$Û:5š›B§>™ÌwÍ?
-qÒ¸#q¹àÞMn¢¾ƒ†ÇU­ÛòA ö5 îQ¤±£-•²x^€’ÙtÉ¥óçw¸_Ü ý‡ýZ;Ô4ò#qó)ùtƒ/UåÐnp©á„Ͷ5ž‚B²W  ÎQÝNk›‹v<§sïU'¦J*"Ñx«xóoŽú ¡…ÁÇ••×ÕqƧÇãç‘œ^¬³“RöéEhæå)ôd6ºØ¦Nr ?â¿®¼Ä½`„ˆÇÐS#£‹c†MéáßÞÀ>RÝNf¹h}ù)æ_Èt€½
-endobj
-962 0 obj <<
+/Length 11285
+/Filter /FlateDecode
+>>
+stream
+xÚíteTœí’-î\›à.ÁÝ qwm ‘ÆÝÝ]‚»®Á]ƒ» 'HpÈ%ß7gάsç×Ìùu×íµÞ^ïS»jWÕ³ë-Je5qs{SŒ=Ä……ƒ•]
+dàäpðóó£Ð
+ÃÂÁÉÊþ·ì,ö
+¼|ñ\8rxþ.Ǹ7ÒƒoK×:+ õ¥bè-ÄÞ mçeÚ b3,CÏ8ÖŠñ>ŸnÂéò°kîmUQ5,}B ›lç„t~Ë@åV€K}ã€ágö±>¯«
+§¶èè˜6ùàö†n`txh°û¾÷; Sn<2 :mt€c.‰¨®F¥w$Ó.LÝE\oR ŽÅ™Ì}jþD`ú|E¾Š†ú%_G®O¶</lij§ê¤RÃ_9ÖxíY„âWQ5^;4ùÞ¤Ö¸?›my˜Äö&ˤ˟‘D¹a}?þVÚY%ø•Óóë9ëÙ²Âe°}7Ú ‘pWª<9à‘€D^Åu’÷èáÍ.Þ,ƒ‹«ºAÄÑÝäa«¡ºh«ot×}GäÑû0öûß´<k…rQ#m˾àL…t9$óÿðo÷G¡z)üøTšÒAy ‰\•îj^U×P¹˜Ä ^&©ËYg\˜
+ädJùæ%E-Ö^ždÙšg "yc9í$ÎÕ¤æ}_svŸ5¢á ác¸n¨Åyƒ,Žjš(W«A½äöS5¨ý[0Id]·ç;QÒô=‰ ÿô-Ê†ï½ mÇv#ñØφp
+vk(jœâW«È‹o˜Å2%ãfo÷ý4” ™‹fDjèÂëz=¬  ‚çv¯
+µ~.Í"Ã_õ#¿™â9E§£¸Ùô¹ºÓG æGü’s;ñ»…ÔZÄÔ‰›αF—ûÒÊgz•Ê¨C!¬FQ¬é,(„Þ¹‘ó{CÄt.¢gw±!‡XýÖVØwׇ,ÐqmŽŸò\vyb˼LR8Tž Õn(”r}o£G£G¿TÈŒè[]|NjÕçïYûºaõ k$ ƒb/pÿ·w÷ΦîkñhW–ˆ]“¢°`5×ûʸàÎ&ÌmIr¡ßô$=ò}´ó…2Δn–œrP"èì}ˆµ‰U*.Þ©Tg`¡Z_Ñç±I €¡J ëw/E®£º´—*–SžûM†ìÇœ7æv¤?к'0sØ{„Ò³f²†‰‘ò¦ ö¼@C6`[÷¥_øª^t¸û´è°—?ƒm~ ¬ä|igÉè½Å®Ðæ;D"æ!ŒÁ•a¥A%¥maУŠoûL[ZÓ¿\6BüsEyuöê4„¼ïô GZ[Õ%ÎÝ‘13I»åj8q·3c)!õ.îíhàný–1³IBc»is˜
+–ꢼ
+ÍY%Nþi«+™%Y«·«ru-ŠÄ”N×U¡˜ªe˜ÏϤêÞo¢ziM‘£Ðq~š?”%‚äýaúv`Žoœ§1AŠ±Bë
+8WÐz¹úVµë¿Ëyʧš2߇[;BBfÕt
+0CªˆC……¹Qdp±“wwÖ)<³ªX`>Xð¤>öðºE$Õ7gçÕ¸²»Ñì¡œD2ÜsÑE·¦A׉¥G·D讥~¶‰ÀQr“Ëá\ƒd-ßÚÑM
+AggŠ…Z
+ÒÊ|
+Î_µW°]œæn ‚ƒ×“Q‚Cá‘Ï_Þ]ƒµýékçy»Ô3£ú‡™“k¸Ò†Ê‘*8}¨Òþ?(O}^\R%‘¥û_ú”ùJÄvwøñ…ôv1~­ ¸«šŸDGktRÐ*5
+!dlÆ)ºü4÷­1ߌ
+[â4Uǘ¤‚$yH\62Ì]”¥¥7˜IÜ ÕŸÉŠõ=éXaÓ5ß”,
+ï½Ç‰D{¬üNNiYZ­†ˆ€9²>Ae[ÖS´®X»¦ìM°OeOÑ^vô}!í%Œ µñTW
+>òf$ØþÄï5'“öù&òøÒ¤œpTËRƒû·7´ŸXNvg'¢d{&Ý©v(3dcoáw†¶!Á•2MY‹‰Jðײַ»­ÃÂtìV¿Í˜ÞÃc½7­Õ<†*4¨<”Û¶- ZdpÇêeû©CüOJbº¹½²èÌg½Ep|)— +@®•Äuôöñ§ewÔ$ÈïàÎÙe‚õxFM¸Ç–Ö[Éìõø >æ±Ð÷ùÌhw“ñ™è,;€½u1’¦ÑÎ,ÎŒS²]¦ ‰>`$HWˆÀùUJ‚Þ¢÷9`,þP,ßž~vЙ¹° –¾µøÔîÙ„ê¡´B•{LÇD)i½Æ[µ‚‹ˆ?~1h*õöÑ€)/l­H)&(Óß"öáÖ^ÒTµ%>/½e­d çE….5iŠµã:P1œü†áÆb îÚ\A
+±@ ³¶V¿¨vÁΡ"þNÇ›.+~æ ös»»³¡éÆ羜Rì¾Zø#+8æhP(UF¨ÖÑ· röÒ.`[
+Ž¨Þ•s£º[Ïàó>ù”OeW¸=ßݡʾU¥ñIíe’Ô–Rur‹£Øâ´:êÒïý~‘sg‰g²©ø˜¡TdaQ­BIÛ ÏŽÆ=VvÍR±¥²™äáÏ·´px(ƒHTŠõ9|~¾vÙ#©ù¼ÿT˜×$¤ÄÙp¾øüàVrR{s’ ÕN€“o`ê”0KöPêgËÀæ#J\xóá`vNí7„©¡)•ŒìÒ^RPo® ÑüÊÆž63qì®ìþæÞFwƒÔú –6–¬SOÿA2Wt`¨Õ®ãa|¢ Í´sëä{7ÉÓG¬!Å°e“|…Ž˜ëÙŒ¹6¾«»Ñ×_ÔBë瞥çÁ©$Âä!8«ÎÏ–8jjÆ·Öª6ÊÖ@oGºíÝ™ÆQÖ#‡‡»~ºT݈˙O VÔý!˜~dܶ÷¶—
+w-ÛèÞ¥Ãcù2ø> ‰ºÕçýÁ³²q‰¡Â-ó„ÒbÖÎ>ßÌ—18“íï,Ÿ#.ãÅÌǤÜx?#`ìS|uýš_x+|§Ý<Q8ÍôÐŒhã…6LX²FF|ÞÞŸ2ºuÚ¾¬þìU²NoX„I^ðP†èÝb;Tå'tú3ל±ãÅ‚t€!§±ÖÀ’ ÷½ï< äaDj?«i쵨Ž)ÏÞ#­ÃUs0ò˜û»Ü—”òyP˜ÒXÐsP—ßS¤´³þìà&*ã8Gs:B½ºbµªßTK¼„åŠi'§¢\pïõÒÄ7÷½Ud4ÂÆ÷ãôti½úò°ÒÀ°…âdL4¸ç߻Š½Ìb…[~ 9Á„Eèãg0he>ˆ]ÕÆ3µ·<ðxðqkšÖ½æäè3ÞØ]å0§]vpòzya…ú!÷.¢v6p¾\Ÿ¦oˆRMlÉdm×8ÜæÖ!‹Ä<$ŒÖa>ëÂ' išû esþ.÷æ@¦ü ‚õ„cÙ md*¢Iäýþè"ÏÖw‚²Îø2Õ¬\žz?Hæ¹Ï½Eôñf¡ég#Z´{ÂæÌÇBøËŠ­óbG9¸¦eãó¸Sþ£‘D:Ñ=Õ‡]„DþFÜõAß=Mø´6l­Ú\þVR
+J;³6Æ ×s›fþÂè¸ÅcåÅSÁì6¾°4OsüØ]–*UWx[:?QÖ4OBòÐö)z£ÄäÍú…Η¡ £7°Fª½ âD
+ðãFÁ{;r  ½­± þT³Y™Š5ƒq-Aµá°1RL±Í~Ñá«Çºí-²/δÓhÆôU&dÑ®ò\4à»m£‘ün-XqmýG ù¹´xMOz45]‘Ú к¼¯P"ùЋ¹Êq˜ÂÄž¸­Äw$Õ D´0^QVñV{gmR°”‚I?ÆÄž@»û–´÷M/¼J~–Žã–0Z9j¶¹‘!羽ò4š2ôd‡j­j™Ü§½ohv|Æã§ëÚ·3N2Í
+Y4TÚPëq‘Ó\5s”cI² f"±ý³Œš7ÅŸ8H£©0wÜÚS°L-ó£ÊÍÃH§–.™Ÿj_Ïå”n¯^Fa+‹
+å¤isµ ¢OïÀ¤#Øx´x*Ì+—wÐ!ý$Ú.LæancL·f‡o—O“l”C0×U –<Àô=že‘ókáðSÃÁ=.¹våmËÊÝ[¼P¿ n£C!ʺÆ6SyC~.ŽÍ€Dö&¸r]|;‘0·>¿jÕ_Èóݪ ÷胾KvÙ¢_ëAŽ¾hí²³ Ö€«pÎR#4-hß–½Ü`Éõ‰ Ð¼%×Àf5è)›\X“×$OJCü¼Q %~r•ö
+×Rô¤ÊPìÑ ;,ŸäÄÖ†$oUDo“ Ì@Cº ºâ†s\øS•bD–
+¿´G|½GŠÖÙr<Þ
+jÞ¢µ›žÄ˜BXƒýdUh3™û£[BŽ,ÛjWÛ:o×Kã½;—×’™›ÕÎ93eî’J¯.o¸ÂS!Ä°¥]:Y›bévl£û€ƒ\‚Þ£Û»ò…¾y>gdù.2F¢ùæyÜRÝlaŽŒ˜ßòã¢è’:,•0owÀâƘšà˘œ–òÆÈ,P$)¤c| R/“á’±Sˆfa´Žžu +Á[°ö¥Q,Ðâ
+¿+*¯ï±7g3n}¹Fº•¬¦÷ëáú©èYÍ!¯6ØÚðG‰Â¼¥B(éëcÄX虉ŒñGÞ34—«’„kp–ÑϨ¨E¢Ÿ›œNÛÜt’í‹dhÙºð¾Jc8:½ßbë‚P§gª&¶6Î~KÎ,0?£nk¸·‡×Î#wgLÒ^°N•TFZ•w ¤ØG…ÍÎå×Ï*iòN»ƒºé¡².ºî‡ÄÙHõƒ«‘§swíC‚ˆZC@lŠêN­‰%³OCŒzjÂZÉ“RV™/²œ| ,)Çu‚zWÈùT‚‹Mß>¶o¸Ð0Âœ!ÁÄKqù¬¢±¶É@úM d»x¼Ù¼´¦-?Û˜Þ”Ñ Ûö…ƒZ½)0ô¶·)g ×Û¶ø¨Â{ˆï¨[/¶ï
+iÉ¿ÝvÇá_]pBŒ>Åû¢øJØŠ8ç <XãZ€—j±ù•~@a"<>*î<B>éž©<3<µ‰ÖFêýXéÍt„³L¥vIãÂQfЮxÞ~]'ß;wˆ¥ÆG
+… 7šl=š-‰¿£¿»?ûL-3[Ø-0/ôž¹GJaÿMüTgœ,Y¼#šÑ]vçöÇà©ŠA´þÏ·}#6ê¦ Ô;oÝ°áF4)s‚Û×'è¼98h;ßÆàɉ$Q0¬-µ^@¿­µ¹$X1Âè‹VtÌëHWþaW4oQy®P
+‹%¯¸¶±ÖËùHÊ!æ/6?¡É†RǦcÚFLtÂ[šùÍ©Å×ÛÑR{±Pm#D}Z÷Ä
+ ØO¹!˜d$FÙãF¸kX8í}Júí 5‰DÌ_ŠôhétÓèDSÉ£•‹ÌÎÐEŽÈÈ…ZÐöHÕB÷dŒ%ºšã)m6E-Ïó
+ì§ó°þ2O^†þ™û±¯Ì#EWüÛSì7GìB6A¨Ÿ‡8{ÒVägz±ŒŸî¶å<uœ‰]Öå) üzR¬EGý>pð\f—
+›Íº3]žØYÑ`Ť¿ÔHÆ`²%Vñ+LÜ4) \`ÃWRάݟ¾¿œ0/ü™“uˆ<Ò¦°êÿ
+gQ…’v}ÂöS)®¨RFAÖºûV„@
+Ë{{œ]!!¢òsV­—öj¦Dø(S ˜-¸‰ ò •F/ID\EÅ°È™òí-fWlŠ
+u9b5‘Âý /f|ê†òyKê‰ØTÅVËeÍiŽ'Ê>íãq;ÊBü¬39 µ‡Ot6¦´ì‘´K¯­ëiÎׯ¿aÂê¹~÷²¯Ñ…g^V¢í Û>´­íòÆ(§ß~¬XF=d›oœÂÈ~6¹E©éÉgo8…ü”¾·‡~|ûÆ+£`z‰JµþÞ Æe8€x]pWV¡áyÙu½ƒ :ß
+FU,¥oÕ
+<Êr'Ùm¾Á±·t$dp%
+úRâêL®´¼Ä§]w¯d9ëtV㦗¯ì= î¹Ýrzæ´†1¡Ë"ÓÏ@ Õgº‡Zô¹5¶îÅ'Ô£m¼/åè£!²«W¾Ü UrIälö-V›dhÉ÷1²O½™ r6(óc9ì ½losÇ„QM ¾m3Yý)b-uéØqvÉ,˜ì
+ÂÅA²œ¹¹‘‡÷žLOÅ:¢¾vQÐך{Ê»rJ9}gôG¡lÔÔÆ>²f¹}nT/íb2_Ç—®IÉÏ#3«±â¹Ðî«Ûà\C‹9%åäú$­1¨·¥XØLnJô<¥t6>dšèÈév2Ÿ_qD;/˜¯ppä@ïdÊßoHñQòÐQ-Ä[ôe¡6…«ÅÔâbÏ£Õg~xÛhm´ÛÎ& ŸÞG¾]å„-fýbÛöÍ@©m Ä•"óÈó<3ƒuUïËrü@CŠ‰nËHwÕÞ0 ªËîìÿ”àÁ㦛…òi\¼Sòš Ž€¶ÞAžp Ø<'ÌÀ3°$S çF÷bÔÉ𗶢d–BxÁR:PLr}Ks¸O`ò¿Ø)ð
+Ö†(–Ãk ³m€|ï…3™+^~#”Õ ;~ÓàgYnÅSŽKÚÿÝîÄÆüÆåý˜JÃÇ=G®uGB~Ú~I>‹±Ô•ð>ê">H‡.Ã_·ß»8H'ùƒ½ô³GJ<ŒqÔsLó(Ÿwg­Õ”,n¨î9ja’öÔ…ÄÓçoG±Ó.?¯-5Qw“·œi>7ë|äƾ)ö.Ú7aЇ—ÜNc|²z'ªƒ28É ñÈ/ÜÄ‹E"¾»* ?}Oâ3uë!ÛÀ|i?ºRaaÀï~›§U˜èNz°³ÅHn÷õgè Éä0&¥sciøªçÔ„ª‚^^iSþŸ¬ Îj[/ó!Û• ª—ˆí…;3i2qz”ðSð¸‹M,Våt—•D‘Dö ö á̓]}œ
+!C¢…ØÙe䄃þ
+^Öus•“7É7÷˜"}L˜ Q”9AøX$„…jd5eneÙÅÖ‡cè£'0Ü)qÂDçÃ=ùzüykx n
+'²š[3z‡3¤?íTÂaéü€¾Ýbš4‚²ªíëNN3GrÕŒš%T+hè5³V'Ĺ5NãÅB´#ù²ïûéçìZG¾Ç ÉáÂæ¥ ãVÓ?ý±D¦ò¤Aü3ežboÙ(CHÎàðÃIöá Ú0ŽŽ'Jì‚ðHÓ'm­fGAéÆ
+j8¬=1¥ªâ;ÞŠÛëVcMLùL]i”_7ãRñHh:d€"üV´sü,G‹£Æч•û™y];ªýê¨}in¥¢x}¦mvnÿÕ)è1‘§©µê(7¯D·I$Ê>OÅ_ËþåÏMñ㡇JÅi‹*ŽXa{?5ìj¶ Ù;hÜ–ã1Ýz˜TgXÕ¦¥\¼EîøBü#ßàë4~–’ñ›¡M…^1êÇ”¼§öklLÝßQW‹¸†Èyr¯Ù‡%aÍñN vm“Ø_«ÓèÂW7½gº€ q@BÜž]ËcìwÜ®nÆàŒŸ d5A9!š%Å*§¬Ñ^‚ŠöÛ…ÖÇûÞX6ÐìÓô„ª´ÖùPŽÝÒß6ü
+iLÚ®5­
+š÷uJI—)Úg¿ñJ¡®ÝšE]#êc̦ Jó€éú–©K¬åûÍ`ú Ÿu #ùG¦MVK îÌWÙF5˜y¾e¥ —/0z!µ‹äfTþ¼+éSÇ1ßÉy‡Kãç7oѽ缉ÙÒ6}žox|T§2¨E…À­â¢Eu•Æ˜Â· ,ŒÏ†G¦çÄ TPë¸7úx„©µ?¦9B#dî‰ÔàÓðEéRϖꜚ âÿ6æ½äTéwèS
+Oìòv˜d_B³-aFªö‘ÍÝÅô®<>¡ß·ÑÑ{o°É¡ 0^ÖxÙ²m£Vl¡Ïù,§Å³¬ûqÀèê—÷9J†ýUÖ§Cd侻Ŏå°9.h¯'ZéÚ/V*þëkñ™ £½Õ4!׆£©­IGÃ*³;>Š¦]åß9¬Ë˜ë°¡+›ËÊßÅÅËFR'@`m8Üïý–œB.ç"ž$ØÆÝóû”ÙÍðJá4jœ’ý ®èÙJf[ØÏ' ¥[¢B.,EæåÅ:c”XÏ
+µ†æ¹±úô]B¿%£pú““Ò÷c_ mmõ².Œ7«+笠r3 ²ä晴±ÿ/(ÿŸàÿ 3[‰“‹½‰“ ÊÿŸ–lendstream
+endobj
+1002 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 1932 0 R
+/Encoding 2007 0 R
/FirstChar 34
/LastChar 122
-/Widths 1939 0 R
-/BaseFont /HXIEUZ+NimbusMonL-ReguObli
-/FontDescriptor 960 0 R
+/Widths 2015 0 R
+/BaseFont /LNTDLS+NimbusMonL-ReguObli
+/FontDescriptor 1000 0 R
>> endobj
-960 0 obj <<
+1000 0 obj <<
/Ascent 625
/CapHeight 557
/Descent -147
-/FontName /HXIEUZ+NimbusMonL-ReguObli
+/FontName /LNTDLS+NimbusMonL-ReguObli
/ItalicAngle -12
/StemV 43
/XHeight 426
/FontBBox [-61 -237 774 811]
/Flags 4
/CharSet (/quotedbl/numbersign/parenleft/parenright/plus/hyphen/period/colon/B/C/D/F/N/O/R/T/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
-/FontFile 961 0 R
+/FontFile 1001 0 R
>> endobj
-1939 0 obj
+2015 0 obj
[600 600 0 0 0 0 600 600 0 600 0 600 600 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 600 600 600 0 600 0 0 0 0 0 0 0 600 600 0 0 600 0 600 0 0 0 0 0 0 600 0 600 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ]
endobj
-884 0 obj <<
+924 0 obj <<
/Length1 1606
/Length2 16437
/Length3 532
@@ -8956,7 +9413,7 @@ stream
xÚ¬¶ct§_Ó%Ûv~1:¶mÛ¶í¤ÃŽmÛ¶Ó±mÛìØzûß3ó̺ßù4ó|¸ÖºNU]»j×9ë)(Ó
šØ™ŠÙÛ¹Ð2Ò1pä,m\eíídh…ìmL
7µ3u2´(¸ÙXd,MíœM©
-öÎ.ÎÆN–.€¿YDÄþÍÓÅÂÐåŸÜΖÝ
+öÎ.ÎÆN–.€¿YDÄþÍÓÅÂÐåŸÜΖÝ
UwQñtøKìÔ!koò¿ÿ` Ù{
¤×+…O¿Pò¾^”ÙÓbcP;Ú›TTÒ+ù€ÀŸîdv‚º~¦ò'q+ðG#}r@ð5NmˆEïBjB©+<¿ O<}~¢ê¹ï;Äý‘ MÆíOé˯¥ZéN½tœ1>iƒ!pÁ`Þ3,Éñ€Á¶ÆƽU9ìþóæÝ©<¾2숽â0‘륵“W`_â\¯?Î`Bç~@“ùo¢»êÎO4ñÄkW©s}¼uf¤S^¼4 8³åºáhI·ðèì¾¼h`˜“§hžÝÒ=h$!‰‰Æ_@¿¯Ãå>³’ÔÎT)mÐdù>æ‘nkÜH‘<»ûÒ9«Rè`ËPY³Ðë|\–ÎBbˆÌÏ‘ÓçñÊ}¶n»ƒÔÉqè<¿JºÄU݇ž~‰vE?
+¨S7r+øv¿-Ž(Õò
@@ -9025,35 +9482,153 @@ kSè%ŒG’~z.KWa§2ó …Kº¯Ÿ–½4I Œ?}Ï}Úïx7_m¥‚vèÖ(@J6”)õ(FKˆÖBEZŸÒTûA-„_­
”}âJu¬ÍzݨºÙê–ë-VæS;'# rÛL¨y¼o·Ã¯óó;ö©tù^F'É2óyîh"+ȲJ5JÔÛga1Þ?µØ³ —hÖäJ„1‹þvE9ûÖ–‚X
¢6y`8E„gÕÂÞn"Ý—{QwÕZšpœîQ»MÐ×±û÷¡F"”ªMa[üMr†NÂ=ˆÌ œ°ÿ‡IÓð‰ß
'…)LÕÆ·_õ<Îün W¹±’‹;<V®­®Vê«4«×Âõþ-•ÙÇåqjVŶƶ£)û©‡›'Gò¹Üþ·|B6¥ÛL!/:Í£ˆs-Ì)Ø|:ßx#mmRg‹sÂüU~qëà¨k
-ű ïô¡ÿÁvú±3ÇãøïVÐTöíÈ¡Ìf À-7ÖÊË¢Ô¹òí1ú黳ÄH+ÎÊh½TÙ8MÈbQí‡PáÄ´Á%§kùÍÏÏ‹_…âË+Î@dí×>rÍÕ4¯Þ1HÍÅw]¿lh–ò(ÑÂBšùªŒîÖÊ?SÔúFi O¿±¡æŒ#HnjMa±1§„‡ýù[Õ³0Ýàd.åÓûäè•O%êLþ¿•»íÒkž‘¼r¦„òª7¯fõîËbÞáÙ´­Ùÿ €¿Ñ†Ò¥z¼ÛT¦|–Ùb°ÊîOôÔ3§féUÝ9Žþž0ÁË&C­‚emŒ@õ—Ù¼)bG~´…~´; ä5¿ åìâuUë9·•°ìuØíivñ~P¾ëÖÄ­ïϱ˜Ì,2™2ÿwQÈöSŽ_ß(,)øÿÁ¬ã¾G>s865ÏdšŸT¹B`©`݃À…g×Jq³kMâez몾-³éÓ“õžlÂçè-Þ¤Qý¸ÒSÉl¯—î¹E.¹awÃ6ü+ ]ãÅýdi¯CÛ7þ÷o_Zê6×kƒÀ¿Ú3×…O<ڕľ>.ÇT~IÜÏ$_ûo—>FNy¼êSÒE “?«¦Em| 5Í™Sš¯ýñœ•›{æ￯z­|fá› Ù1'2• ™'o¼iºýĆÿ!é¥ïnI¶N{_µ²èñ›òy¹¥Ißß³Ÿœæ±/+JqçtEþ+Œa¶ŽßߧÕÜ0ÖPùéw%bþâ~=ý‰ëV´0·… ³>ç•ߥ˜žµ²vÛ›ÙǦ<¸eq-ëEj+˹)S¯2œÿJ%¼YjÒJÜc¢yÇ÷¾¸²™Ç}…ZköµÛ5>›÷-\þ-t~fÙÕ˜É6ÿ“µÓO/¿{±©ïšÿ£É?L•W–ÌpØ+ö®Í’ßLÄÄþbF¬-WÝëã¡â«§•\ÐÛ:£ë¹tϦ̣’,«ŽGßLŠyz½3»|Ê›'=íSìÖOH­=k·Æ4íÒÚÛ-Âïþï°’K}x­]›Y¨ÍªÂçÁ댈Àƒ?-*Z²åNÊú'/yw¬úd:a~rszòu¿*×ãÌW .Ÿºc´íó‚Gj¡7ÖX¼07 p0, HÎIM,*ÉÏM,Êæ
+ű ïô¡ÿÁvú±3ÇãøïVÐTöíÈ¡Ìf À-7ÖÊË¢Ô¹òí1ú黳ÄH+ÎÊh½TÙ8MÈbQí‡PáÄ´Á%§kùÍÏÏ‹_…âË+Î@dí×>rÍÕ4¯Þ1HÍÅw]¿lh–ò(ÑÂBšùªŒîÖÊ?SÔúFi O¿±¡æŒ#HnjMa±1§„‡ýù[Õ³0Ýàd.åÓûäè•O%êLþ¿•»íÒkž‘¼r¦„òª7¯fõîËbÞáÙ´­Ùÿ €¿Ñ†Ò¥z¼ÛT¦|–Ùb°ÊîOôÔ3§féUÝ9Žþž0ÁË&C­‚emŒ@õ—Ù¼)bG~´…~´; ä5¿ åìâuUë9·•°ìuØíivñ~P¾ëÖÄ­ïϱ˜Ì,2™2ÿwQÈöSŽ_ß(,)øÿÁ¬ã¾G>s865ÏdšŸT¹B`©`݃À…g×Jq³kMâez몾-³éÓ“õžlÂçè-Þ¤Qý¸ÒSÉl¯—î¹E.¹awÃ6ü+ ]ãÅýdi¯CÛ7þ÷o_Zê6×kƒÀ¿Ú3×…O<ڕľ>.ÇT~IÜÏ$_ûo—>FNy¼êSÒE “?«¦Em| 5Í™Sš¯ýñœ•›{æ￯z­|fá› Ù1'2• ™'o¼iºýĆÿ!é¥ïnI¶N{_µ²èñ›òy¹¥Ißß³Ÿœæ±/+JqçtEþ+Œa¶ŽßߧÕÜ0ÖPùéw%bþâ~=ý‰ëV´0·… ³>ç•ߥ˜žµ²vÛ›ÙǦ<¸eq-ëEj+˹)S¯2œÿJ%¼YjÒJÜc¢yÇ÷¾¸²™Ç}…ZköµÛ5>›÷-\þ-t~fÙÕ˜É6ÿ“µÓO/¿{±©ïšÿ£É?L•W–ÌpØ+ö®Í’ßLÄÄþbF¬-WÝëã¡â«§•\ÐÛ:£ë¹tϦ̣’,«ŽGßLŠyz½3»|Ê›'=íSìÖOH­=k·Æ4íÒÚÛ-Âïþï°’K}x­]›Y¨ÍªÂçÁ댈Àƒ?-*Z²åNÊú'/yw¬úd:a~rszòu¿*×ãÌW .Ÿºc´íó‚Gj¡7ÖX¼07 p0, HÎIM,*ÉÏM,Êæ
endobj
-885 0 obj <<
+925 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 1932 0 R
+/Encoding 2007 0 R
/FirstChar 34
/LastChar 125
-/Widths 1940 0 R
-/BaseFont /ISSFGP+NimbusMonL-Bold
-/FontDescriptor 883 0 R
+/Widths 2016 0 R
+/BaseFont /RERPYV+NimbusMonL-Bold
+/FontDescriptor 923 0 R
>> endobj
-883 0 obj <<
+923 0 obj <<
/Ascent 624
/CapHeight 552
/Descent -126
-/FontName /ISSFGP+NimbusMonL-Bold
+/FontName /RERPYV+NimbusMonL-Bold
/ItalicAngle 0
/StemV 101
/XHeight 439
/FontBBox [-43 -278 681 871]
/Flags 4
/CharSet (/quotedbl/numbersign/plus/hyphen/period/slash/zero/one/two/three/five/six/seven/eight/semicolon/equal/at/A/B/D/E/F/G/H/K/M/N/O/R/S/T/W/Z/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright)
-/FontFile 884 0 R
+/FontFile 924 0 R
>> endobj
-1940 0 obj
+2016 0 obj
[600 600 0 0 0 0 0 0 0 600 0 600 600 600 600 600 600 600 0 600 600 600 600 0 0 600 0 600 0 0 600 600 600 0 600 600 600 600 600 0 0 600 0 600 600 600 0 0 600 600 600 0 0 600 0 0 600 600 0 600 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ]
endobj
-878 0 obj <<
+909 0 obj <<
+/Length1 1612
+/Length2 18760
+/Length3 532
+/Length 19672
+/Filter /FlateDecode
+>>
+stream
+xÚ¬·ctåßÖ&›£’Û¶mWœT²cÛ¶m§bÛ¶]±*¶­[ÿsºûíqnß/}ß{Œßšxæ3ç3×c“)ªÐ ÛþŠÛÚ8Ñ1Ñ3räÍ­:;ÊÙÚÈÒ)Mlpdd"@C's[QC' 7@h ˜™L\\\pd
+ŠšRò
+üªm{|ÓÂv¸* Þk‚駹?ÛÜ—Ní>ö¥©F{1­(zR€—ùøÞ$T}¨›ä4 z%ˆégQžW‹²ÛZìŒê»“JÊzÅïPߧ;X`®ž¨üH\
+üÐIí|ŒRëc1:QA¾Õžž‘'?=R Ž õÜ@öíãÑäÄÂ’ñ¸@ ’GúÙçà h©Ux†SA¥7!àÝ´_}jt{êå‘‘â’FX˾*šæ¯Ù´Ë¾'A¦· ð&Ê9H¶îWþÀ¼žŸŽäJœæšËýZw&sÄâmŸ
+쿵$ œÉ„®'~
+j8+¼="HOló‰à|V”LôIŽÅ_y·1A‘T5dSoEy%|Dm3N†Á‡P¥{ú¼ÞÆÙˆ
+šÔ0ã#¢DËFwˆ(¤ ÙÓ§~¾f%ž©Y·˜"<Ø™Él¶‹Ç¹ÿúä2Ý©²HˆîKöÿ¢Õê’2|Cu˜Äï4‡Ùb
+dÇ$[ß4˜h3iï*#§†]Y·6_¡$l¥—\5Š´
+ÖƒGÒgÏt7êz \ÄØSÂèÑÝá Kz¬Å~»šF£¦s>y{­)ÕCóaÑýû²Ú7× Ý#ÓF¾o¯Q2v3äòÔן¼xÒ¾#x9s¬(ÃÇÊÒ÷öUX7Žqb‘ŠŒHö;QºÙö³ˆÊëí:²5p,sÍŠ˜VÚÜýXQý3j .jWô…¼¬[Ç2#oîä2’«²6¢£yé0O ÙÓËø8³)Kz¡l„ïzä^骟|‚gOH)àY îó¸¢e¾,Ùê›Ì,ðŒ‚þ²Êsźy&Ê⥄ñϤì*“@bKiyäúk@WÁ»¾/ÿë÷îÆ5 Ï##êáù@¹‡ŽRƒ;ÇË6ÈV|¶å9{<)¼ç QU+ó؉¬@"9ãå·¾9Ì-–†Æ¬»î³ØŽÈ³¼…„e†t Y.ž±áWËÔÀ;žš¹„PfÙWÐBNûŠX÷a|nÓd5ÕR©¡Ûo÷¿]fǧ_$¿å0[^ž‚IpƒVzrEÄsÜó^Á¤ÑÏJó„½Ë®Ïô—qŠž€3«Çþt¿ipôøɼïÆ/ÑøµÑ7d™§©M’°{<1†/ß{€"Ãg'”Dnnë«J0 VkÜ„},j6ä²6”ª ’nå'Ž`gâ[ö
+õ Ò””d³3þˆA*ú<ì;»ãçëȈÏÞr‘U¦Ξƒ ¸R64yEIÝ#ب[@“4ÂS»Ð¯«±÷è(pÖg/ä/ÄX»ÐÖ@­Å»b¾äcŠÅIî n¿¿„îçç3Ã"çU=^ó»\XºwV¯”¡ûB:Ï‘
+[—ÒØ$ ´zEø}:µ`s(éHô‚Å+X—³÷¶*5Â^ÁmøÆÊ$¶ïÉéGH
+>êò:Û†ç-àñwN‰
+3“7º]Ç }"}xt¿-i7Ÿè¹½‚•
+üƉ¾ÏÑüІž@S&_#‰= ]Œ% ešPŠ†¼RŽ”oQÈJt{¸œñàº0ê8&ò½A"zXXª‰„^i$º@õÁh0škm}…“u­@îK/²OÊ\®zOóu#«"ùÈR.¯AÇ„ŠòÙôÐJ©4I°muþ`*?섨0­V2
+p‡÷/ó¢nD(0ÂD
+[Õ%:P+t¦*5Gil@ÐvmY‘ ‚œÁ‰~¦S JÖjn5£ë—ðys¬Ø0ÒÉð¹¼tOC»¯‰æ÷­™ÄiÐDX¯Ð
+Ù¿®;ªôŠD™r]9@èšÌˆ“ÖS|æ[Û, ('|f¤~}Ã!Ónëw¦©®n”Š\8ÖgK½Uz:'=*"Ô›%FWHO´­Ú³ÒèÒõÖDÐ_|ÌÎ\ê\Û
+qá‚ú a¾ýGŸºî“•e
+™âîÑ~)Ü“U‚™$¹ß“ñA=‡C“ü‘:³œW•Pv Æû§hbÖ¼ð»AàlmoÎUÁùË7…¹í \~3È
+ÂÏå±äÑs‰TNŸ +Ã<ˆ•9O¶¥fÈËDˆF§‹ÑÉöY廙l›¸·°6¿33ïáð\1ôb° a÷ Á{ó|³m«é*Ê›}½"é?Yš,µÔ¹‹ e§úPh‹ŽŸXEô¸º\©çÜ[ëgøV3C^à ±çSø¥$š ƒÛáÃ:“É»®’´ ð¾ˆïÅ^ƒÑÁ´‹¶ù´ë¬†)à!jáìKøGR~ŽCkCœùŒBΔí!$ÐdÕˆV`¨­\ ©n¿»Gó§æHðnê Úïvœ&ëÌŠ":—íÞÕ^"Æ;bÊz³N¾0UÅÕ–ûÖ1ÃÁ,Ծ㢫|7ßoV};º:Mý³éØc£ôÂà¤=™MhüCÔgaì‘7¨²Âˆ±b®5_¡·¸/ H:L« >r>Õ²"™y£6o„Aù±RQ ¼“_;N\¾L©µá%7¸àÀ‘¾g$µc [ž Ü80›=~Øü.¥T¿†ñ¥™^šW`/ž$8¢%S>ô”æý XÞ$'ñ.ά¡¥„2Éÿoƒã;At«!Äò‚´žÖ&\Åžã™dn£˜kjÓ¥³< -YRç˜oiæUìÚÆ‘ÌY Kî%?ê5TXrz¶ë[È/¨£=gU0‰Ü„€UShW´1ûºzcw™>ÔXê1§†S\»²3Š‘ÎBaʉ@,ŒëÂ?/ßu3u¤ð;…®MXÛ;Í0¾z“ƒE9–T¨ÕÖ[x,ÐÏsô1Æ÷Ìó–Q£×©VNcÌ…ËrÖs,¨ ³“eeµ‚l€N0j—;î
+??zÜ…¤Ÿ'PìE¶e6¹-Vƒú£ò>áÂPe†–½Í•Gèf5©{AuÔ¦JÑø^V¡ÌP
+:Ù‰4GÌCe*Z­:?ß"íÖŠS$`ë¾*~=QîFf†£¾d5 ?Užaú9v¢÷"“T!KÈ õð;[ùÛ
+ðþ¿$ vCÎÛš,Ù‡¦_¡ÌÐpvœY4Ô}ay=,”¸Ý
+׌’üïa,ZÆ¢O>c!Ö’&,î—AØ$l‹ˆ4`¿Ì™é„G ‘9h{±I K­àôáî·3ÂF£Ýйô±Peûw
+ 8ø=ÇC¦ñÙ"ê®ÒL¨ì:0%»¸vÕ´HƒŒ?˜ø¾âù¢õ3™VF _?Òí)Û÷³qoTŒ²>ô£‚ùvî[±~á+Ó ñ¢øøhÂ…ª>çV©Ã{‰iÜÁɾ,ÓPhF°1J4‘÷Ò.’×l"ü<KÑ*ÊûY•eûÊ]XODÏ^,@+Ý4‘‚èbiœüÙÄÛù§ô¥‘mJ÷e g§÷H9×-7,z3’ '‘nKÜ‹)«ZÞu¯,Ú.«9¡²ûÚ3Ö¥$¯Ü šc
+9P “½¥Þ8€Fl‘…RÜ⎩r«'¶&ÍÖr+v¤Ì•³7_¾‡ßm/!ÚûÑ9òÌÀæAVÔ•I°ÃL"ö„O]á²Â!³™¦WD§w<·¿ `Ÿœõ[ï ¼¡°)!䛽'2Rj:PCøÄfűbü]–¬L¡ÅpÝ·mñª}pÜf†Ë ÑSYá‚ë^0Ñx‘Ê·€ýÍEÛÝöEô7N‚)ÕmÑŒªæÀ á7Š•U÷ↇK›—ß²9¯É,‡…ŒŸX¨<™¡ÌÅ…cÆ"ûgÚùÏ=j³é b«*"ìëLZaì{oFðÂ{¹†âMAÆ ßQƒ(°Á0ÖkøcÇǦŽtDþ<`N%ìy0ÉB´¨þ•PPˆ?Ĭ‰…šåxùVày»—.Jª“ÈÌë/vg`ž0zðõà~¬ |ôiÄlTªœXöA¥j–çW¸ӷôµœñø€l/^ôŠ^ÿ‘XÕH6«3d"Èî:¤úá_T`‚¨KÆ÷Xž³¬¦€­À›†ÚÐt¨bØ×82ºÙ‹°Y
+g–w¸Ò_ÍÑf4…,lÕF¯tçÜ äÊåšv…è0 ‚Z„•åIÝX®E˜w²b!ZhÙ”áÉTëkS¸¼SÉômз}P¼½ËiGýÖ´b Â/ÚãzNÓŸylQ]*+ ºÞ"†V!™s¾Ð›Íáüô¸Hм‘ôCÕ93Š+-q¤Õ01=*ã±ù¬uŸrÀeÂËÇ
+{ÃbFg#‚˜–lyù>.i¾™?#E¬4*872lºGÝ›ü”òóÕƒ¹óšAúa§¢+lµh ›¹cÿ[ÅU‚·_Q'ï–íMÇ7&U6æØ‹{tÍ3_ŸÔ_óerˆ$q¿E½â>$zr,¾.ÄBËëDÒ‰ú@û‡ÍDü”Ä­wPL+w1xàKDTjã_žKU÷‡Š¿÷ðN€úè±=©C; ]‹‰ØÑ\z©r¸úÕ~ÈK*¼Æf:²}䥳ý]°¤Bu›B<+2¦ø¥Ø×Iÿ§½²¿S©ôûü¨·zM­<ƒïˆn1•ùu›Ó÷^Vú#:.æ?¿yÙž®ïµá§ðƒ£|`q^ Iš©åâ:kÓãZFMd§Í‡ˆ¨><…÷Å4I)'16TØ͆Nß°`‹ð` [€r óz‡ÅÜl8±§ ’¹Ll[@Æh_ëí; Hk¢ÉjLÁf'‘Ö%З&så@µTýb[Ojöß 0®šm-Z‡µ<"ÂVç­wSp#H¸Í°ÿ,3L\g*±Ý¾–Ýçpg¡’^uІªH%a€ÃuQlàÎZK‡B£vHÕqe·lAW`¬úÑ–îxüFÁŽ¸“Õ7º¼Î IhB($y{³ÓËòMSô~¥ã # Z|Ѻ6Æ×c>ÁB’Y”ï‚*¤ÓµEkèið„ûܲ²ê6ë#¥ÊxNÛµqqŠ®k%:ЂÃÏý0{Â4Û¤8¿ŸJØTá‡ð~UâjçµDg,Vå|ÌÙ)îmÛ ÁÎ n$;ùâßÎWûË)6{ô2÷Å1§ßÿ2_Q.4ÓZxWG)ûqŠ·óGŠõ{RÜh¯ºÎW¦ãrzÞõÈÐKËDä]Üw¹Qöº¯G…\å# n—ë{aæÆŸð»Â¯U"¨k;`aEw}øŽ¦¢´Äætf µŒu &ßéæsÜk¶Qk¥pxNšnL’v’Ô(|)²FðcˆÇY£0c…‚Ø0cX{Ò}hƒ¸eÐúƒKŸ:†ohÁhdYÔ}îw¼Vj¾]½¹cû¦wní†PžQY@V)[7ôU5:Ò³ûÑ
+¢ðBîBZYø ¡QÚ÷¥Ä:_}ÒbeÚ*r³9ò”¯Ô¿åÏ{ݘéËáªÝ]1÷WšeÂ…5âo#”‰Nb… ¨ô>¶ïÓAÎì·¼žíÉzàá]M¸Q»„)ˆ'°&má"²‡8øg+Gž‹-¯ðJÁÙ¶(!‚d%šò÷F¨é’‹Íü0ÓK^žŒð §.Úf9Õºi"‚Bœ‘תÂh<MÆOOìu h9ž&ZO{èìxö6"÷rWNÕ6Ù$Çøâ0™…´žUîÇ>‚0æ£Þ·/Dž¿V™¹6j©Û̇‡o—
+_0ß9ø™Ü®Á³@3&i ¯)BBD‚Òr8ª¯sÿ’¶þø¶6ù5EåÇÁ‡›3§ŸÒûišI©R«‹ª]S¯Ðeÿzý!KþãÑÑÛ7çÙ96@:áO´ˆE(Q`¡W¡ÐêgÉCIචœ7·@ªÁ×N~ðOÎÏL ÔšîÑ„6t>æ€ñtFt&QòŒõk©ú¡Ì: ZBw˜0.•Ö
+X˜DöBà矉uƒRá±êëŒãù³"‹‡»½øS,VëUgÈÓÑ×Hë‡ Ö•Ø®ôh3ßõ½@gYa°«¯ÃK}\)ÚÖ„èoô}7dÔ{Â+ä’רþ‘ǟúiæpC8[bk%u‘I0: ]¯úíŽI*]¬NꌕԲî<'âÌ€Dq¥1öYßþù4ˆù;4Ù´Ô˜¥^ðžöE›:ãZ”¢‡ÖãßhSÁÒ"”‘æeGq ¿¸ú‚Ò®ˆ÷ñ"‰v=}ç¾ÌÅ%ű;>RÕw´ºÊuú)DãPèñåVÂ-{ i¢87£rC ~zIu(a=/åÓ`éÇ
+`JVæ€ÝM?Ë-*\šFì\q¬w÷4³Ç"Ây'LÜi æI²úвTxÝCxEåÇ7#Í=䬯šÐ]ÏÂ)9™šj^wpŸiuØ•°I/9c½šÙ;ˆ†YÂV%íÇ’:ðgEFÙÒ·O(–qS”•=ŽM.A¥ó¾5Æ·ôŸ·¸PF×/ *ÝXåï·Dê,oö°`ÐO„&ÄÓú1¢ç)ã”au§4‚x­¦"ô£šVKnþ?af¿½ðÒâº-©Þ(äM×4jý€‘âª[ Âx06Ä–3± ÊbV®gG¬$¨ˆX”£þÙ]0ML]B@! !k“ö'9iH„%7ØdÇýý³ê«VÂiH€ð‹Lêõº «§ÜTÉMÓ´1=1TäöÅ¢ÕæûH&LÏ5« "ŒúÞ¶jªÏa1¾5e‘ׯŠ9³dfƒC|—fS}½Á¢^3²Ry€!©ìcÊ^Ù±•CyÞ>æäŸGY›µöLˆ²Í+ðüw…¯‰‡›]E™†ÏIœº#½Á”“W¿ig/€¶0@hçnlÊäª5Áç®ýF6PI¥pKˆÈKUëqßoÁÎJôƒED=§É*óS½PlBø±a`
+^ñ2Ý9á4GÌMdHä:a,h&y að;!Ù$õÖaÖ8|Z2ÃdÞ‹J‰Óc—…6‘Ñ}Äu"åÈÄ7)õ)ÚÞ”L#mõ0n—Ü^žÇl¡~c[øïz¡AèÖЕ–êÍ™qùÐEm)PF½÷¢xŠÔ–ŒisØ€ç³D6 &œ<ÝÍYï’Úl¥ç¬œs·ÚCò£ypKWFsš£jƒ“ÃÉs ÈÚË~
+¸š4?æ·q|CÇÂ[9ËÞnÑŽ¯U…”kCWvܾOøHB ÔfGpÊñ¦Ú™uw"£Û¬‘M+<ÂREÍœËâ`Ôщ) SßêÓk3—ÌŒÊy‰m:ãs‚êf“Bܲþà ĨÙþ†¨4ÃJ´§ ¹=µ¬l%Ž»Wa*ÂÎK6#º=\{œ˜{áÒBz[òaey}1i%œ1ˆpÊeDNi±`à6^¥
+“V-Á …ê©>Zw>î^’:ðëÖ£,AÎó=a¼PP?N}“­8s3zxC4-áÙ'Ð@¢¯Äa0½ÌåŠ&vù& Ê«¹jÐ-OB;ó¹bîAl/­äÝÈ»÷ #o«²#yÁ?.¶Üè© ®Ï²
+sf"7íȘ'z½½Aܬù;˜-Ø„º5½ŸPoö’RnÃã—§cÄ­d>­Õ‚ëmOévXš}Ý…["äC»Îµš Ú·ñfº ?jÊ…Šs$!ϧmAb÷yg‘Õ3–ã¾ú©Ÿ™ì‰YÊIÚÓjû[«Òaî ë—e·Ù{/ûÀjÂé‰õÙÊZXÀüì˜à äa.ð–Ïæ\àß›¶üؼ¾~ ê¶Éþ¶ü5öZ š‘X’oJQ˜iOÎãÅ[=Z)é!³»&ç–ÃîIëBå\Ý;»"B7›§ c)Œ—†Þa%ó‡ŸTÚÅLn_´´i·‘c•udg/U†Å=7
+BÎA>ȨÅt»î„ÞñMt7¡Š:»ùœ=2>ï((Ÿ!{GÅo’8DiåGÍlœ ÊãVÍÒUŒÖº‘jÜ”Õíë
+ÞÐõ)δ¨ŠP=¥ŠúçÇ ºÚiÓNRŠÓ€„™m:ô¹¾@1??¡– ­”x!MÕT•ÛŸAsË•-&I˜·ö@ãݪƒêE!F_Õç5²î´ÛT² «ô±.è-ó°{m”´YÐßžëÈC&ÐöºoÕ¬ìêW5iø·Š ¹Ž–ðûï~dÏFœöN{uÍUg¿a`BFtCÙ¾VØ-¯Vâe*ï@ì @uòQµ ä8L°4§2Ir©¶Ð“†¤o§¿Ù §¥ëÁIÆtPÕ'ÆiÎâsëŽÉÇTЃF`Þ™0Úu­5hJ»½ Ù‡,KíÜкÔP¡f|éO7§Hf|dÑr^kç Žß¼¥'@>¢íð@‘…„—Ä”ÄÄJÄÞ¿Ý>3„Œµ¬èZˆ›Ù¡R^XÚ9ÈÍjÕy0”Nš¯s„gA‚îWˆ™[Uú £™2õÞzבl‡KØ6`ñ
+î†Å×°æËùß'™+¹O?àªH‡q@…
+…eȤ½øÛ ]Ûq};—¼¿ý%W[J¨÷¡¼–Þè aÁþ[Ò-@^ŸFðGH¿ ìÏÈÜ°<·eÕ@wô¨‰Îy«(‘«xd;{”«‰U¸otÁªDÕL
+˜ªˆÍ|Îóp—aÜ^§9Lî÷‹¥¨`=1OþL
+^ú”ãh@RÄfíÁ•6—U
+×qóp&+yPå°1¦àÙÂ¥å Xˆ|¿ð$6Uç»’ÄŽ¸%¼ûm'v»!†æ^™íç Åä.°¥6q2Œ\õº«CÛ7E.ÄÔ—¨lwBÂæ8=÷_so09Fµtéf²ÅoÊRaáÜJýèb;†xŸ)ォG œþW¤ÈùQw¤ØØV„K˜7µºy$•o5MåÐà,=²æ_³4¥ñ3ž•÷°Ÿ
+áB«¦¨Û$EZk°`ë¥Y 5qÁ[œù¥ëÂF… :ÁƒN„´®jîܨ€›JV[‘
+ü™±8Ébº¢¾9àѲœ&Â&9 h°¼§!`Z„ù“½M$¨'Ì é·Ç ˆ‰b|ö]·[EÍ\çtHL”.=MSeî{F"ä(ËfIÜ
+ˆ4ƬÆx»ák&ªˆü• “KѡڪƎ5soõUKæU6Û‹m™³Ó<{WûFgsü2‘“+tëÑɇ¡ˆ§Ç—–Fë¹mù¨ö9¥ûŒí¬ ( Q«¿˜?©Fߧ$‹OÌr?ãZJŠM¿{m9ùœÄ1+É°‡!¨Ú‚§¨næòY:ŸAÈ‹Wv¿ ˜iq“~ˆRŠ
+íqÃoØ8\"ÉÄø‰m~'8 £Éùª¤\"~Ķº…puX‚8R±·ù;¤‡,qÞ\;1´L AÈ›œ>lϴʘƒš¶ü¸\UÆækèK¬ôó(29÷ðJ3ôûõrï˜O²âåMçÑñBu”蓼!þ*²‰ñØx“–ãfðÔƒªáFb6ä([N£+þe÷#Ìó,+CðÇUÓ3Mcf‘ÐAñn0Ja¸Þ.H”#ÓJ>U³ÂåbFµîV?4™;>
+Û Ì_÷cvDMÄȺ„‘)˜3,fÅ·„@sž?X³¡˜ò\ªå$@Š$ÈW;ö=W!za(NGv È(èᇓÃY†CõdQ1”On?S9Ç>Oµ
+dõ›#.
+óÕu«ðaxÍ'¢T´Æ49¿}
+„¹ƒ°yeàêÙÔSYãæœjî×]…)Å’ÀY¡vSWòÀ­¢ÒGÕîUê£ ãþh4× ¯DTÚè¢Ë ¾ŠŒ}dœœ'.ßñ»c)sùÂ4E©”€cr'L’q!2XdêFÒ±!NMi€âñ¢ÂdÖ |H—^ÉuÞõ“ù¦?aÈísNfBèÈ(û;Ÿ>§[Q-„- ï$àKor§ËûI’;G¸],˜úJâAžXÚ€àvÞ9g•0žh}[ü £Å‹—T€%/WHþî×Dªÿ~Å!¬„ŒµWJQ;dZUüÁˆo 7êU ‰iT†dGà!y×"?αLÛuº·Ô~¡šŒ{U#[Ö÷g_SÚ®s·ßñs=„Ñý}Ž´þ^W@ƒ¨IÙ9¼£ýè@‡}Ó$0_>)’¤Èz®Ep,—ðóõè¦
+ÈïQš4Zl’€AÍMNÒ1B.NèL·YÏ¥£ÌÊ©“0d›±)š„¢«ëOØF'Í<I('Ó.DÁ=Œ”³‡pEd­ùØøõmQÜÛÓ
+~z#ë6 å˜Mmné©^«ŠÒŽ†y§×ù{?¤¾ó ÃN[„!H-Èâ–‘Ôyúê³Ból«nsªYòU4Mö¤ ©0lÕÜ´~µÇê½æ`
+chô„, 3 ‹ ï‘“#•ÃùG ÖÑŠ9$5à »l|ëQλM}ž¥’>‚ÈÔ!¦}™n¿°B=…_½' qŠ=ò¼²D½JQ:|4ù "V&71¢‡»Ê´XGŽÌ˜Û6¸XÉLjðD^«Pìˆ,0ª°>«ÇŒzK „Uê• Á;ð# zJí™ÛG ÃLtåk ­' , 2ýòô™ÏªÍÑk|Õ[~>'}A–ž­h¦M$™O¤{É™™aý|Fo¾á¦›\basmç­‚‹ÝjM߃½€—RÚ·Ž¤`W<Tº;ˆˆ³õì&> 5YC¶]Þœ}ËA… IñFÝi„—¤>4Å1 <ÏÜïQ»ÔäJ!¼@ïµ/g”Æ
+¹?¯²YÉLµOÿº“oc€ùÃ^vu?ÂYáQbâÔò%hñ£›Þ|ù:µ˜Âôʼn "¶®œ%v ¾õ
+U¨!š»N}œ Ñ“;æJ›ªÙCĵ?ûœôý+¼<¹è¾ŒÐp—³[»õþAN
+ç´hô@ª{âN'H_È9S(rÚ·kEü&ßÏ•tÛª.Ü,çx>A(wYœÐ%
+ ±(ø'E5 Í0Á{'­WÈÐÐlûù 4·Oÿæþk¨ÕÏÙ€œ“æ¬)Tlý¼SM¢ÌºtÙö:ʇOI[|¹,™á
+¸} ³i¼<nU·ƒÊ'D†7Òz;%s}S°l<•’y°46Ê–TZ¹eÛ]DÕ\Y¹ñ}˜en|(xèn)<¸ËŒ¢G/Çê‚«þf$'„ƒ":èuë ìðx/’<€Â?‰CòSÁ064qcZŒz¸ÙÝü\! ;‰^ ¼·'PZÖ‰EvdŒ¢bòjGYþ=Ñh/«¹È´®ŸË $8éÈ'kê¼²à
+%gsðùB§*÷Ä•TÝþô¶VÔ½~Þgÿ°s-Ãê¾ù¤‡I3ôÀâʨbŠÅ4ZŨǾdzçÏ—à Áç‰÷ø׳ŠX]"ïe‰¥?ÂÛjš…<®ÛsÒfÔAgV+¢ÔŸ8ýdÚ¥_ÜÌl:ɶ™q
+L! … a¥,C-CŒ}M¾~šÞƒÔCzâë—ò '|;¦DÜ‹ Ž‹¼”ýû·NsŠŠô c‹Ð9T#qY%%ËGð 0Ù¥*÷f’
+.³ã׋ÏLH]DÒ.½Å¦œÈçûNcxï*ÿÍRŒõjHGmwr$Æ›~üzXÉõ½c7G9±fRpÂÔ›õñ`ç¾/ŽFöøÍ¡Sësöe‘Ä¡ûůjrv±K ±‚º‹—li¬@b Á̧òÓµ¬FÁ§”L¡s¾´_úm\9G›8+¥£XmK‰^γ³æ&„m©œtðÞì]ª_l„Š@O3º] q—ÃX;Ü3œåá›
+kƒãåxÄüÁ‡¹C ¥"QPf¦CY_vŠÓÑô|‚ŸŽîdœîÃ: eФÛw‘éûe« VÑê–†P-o‰ ã¶*‚½—€:GçMøŸ¥ÀOr¿/CîlMk[6qÉŠP·eÙ0ÿ¸•Ëzý?TRÈõó·—Ï(ªå8“j$27BjߺÌèÖ–õ¦òãȹÿäâÌ-:N ^TüÚO`bŒvï ×o(<>yýeþðHó‚Tƒƒ2¸¹ÁíåÞ(å2Çæ¬9½³g¦F³Ù å’Ë?q…ÃNßJšPZØcš¹ÔiΑ88›ï…wäD&oô\<朕çÞ‡.'cve‰kÎþšØuôI¡]Èš‡þý+‡¨§Ä ~¸db D:{‹ÛÖq •¢j+˜ZÖ+·?ÜT±æ­ºŸÀÜÀ!
+û:%é5¾¯åV¾çu™J°5Jòb´â"2jþä³àí=j¹ òüÅÍ·½OÖ±¼×Ñi¥Réqødoeל}½j(áIaRFT¼‡{°˜Të‰n°‹W÷'½y@,}H5»A¬8ÑLØÑ]ƒ5ævYÛÐD"ßïŽÊDʺ°z¡Ž »z}ð…ˆÇÄ_@ïO>s0<#gr¹ñ´»f!bºÛèÊ5ƒ¢Ã–x¦ÐJÚ./°A>x»! jm–²sÞ7vÁßC}AœíÁ÷}Žn4XìÅVÄés¡%›†¹¢{Pû< ´éÔ Ì7¹d±·ÝÖ.´?²s1‹t¯}¼;¯±Ý½’×Gû»{UÔ.!ó!T-ºž¸9Çݯ~_’*gûkèŽvª»¦$û¦ÝU‰ô¥5Sü¼
+¨ïÃÌ'l¿:¦ðè;{3¦Íäeµ—Ä;»¯McÕÒÚ-ÿXON´Â½²ùr0‘õC€ƒºÆ…L9ꉱSWËñÛÖþN2¼‹ÆvÃñ’ýÐ È*ö{ä•k^‡jogÊ"oØÊglÂóIüPÚ}tq(½Ÿ
+QCm6õ
+Ê’¸È˜”m€¿™»_–pÛD‹KÅ|iVWeeÀÀ«‰ „lÐÁôÿê4èT0Éëë]Ïd‹;PL¹£¥e!D*%)f­­Ð¾ì {ÄùíÐîòsÃÕ|0ŠLï-ûÈØÀªY‚èZ`ä<Üu´N!ìÆÂçaæ¨ÞôIJE OÕFÚØÙ‚™O¥ì鲟‹„œ*+aB5*êëˆYš0MŽŒ£>ÂãðSΚb¤³(=nìj‘·æÑ4W­ÁÂ-ÕÏ·­_ѱîíô‡Çº™·` î%âg›«ïW‘iІJmøª º¢Ô††ß‘$1½ÑØ“](snr…„L¹Rœ±¹UbµVfn3]ú‘ÛÀáˆÿ3È9ÆTÄk›“¯Bšž«µW¯ôoäˆ9u“lܲ‡vxvèô3Õ ÖÞlQ;, ÿ®w½ß,Öf9z ïï‹?ŽJ¬äl* +pË(ÑMÁ™ž eF×gº‡@‰<·5ð˜MêÍ jmòÏ °ñksŒ]VY:zÅPÆ]•a£¿u_d„‰ê`”]&6ú‚–2#³ëb…S–ä|_'UBÉ9ÇØÔ*+‹©´ËY[–µ²zŽ’w
+Áë±(`°1BøÍéÑ÷kL»;B„/ˆ,à  G70“›(Y:¥ö
+ùµi¸ŸÔ§îwX\Ÿy=rû„7"¬ˆiÝe6ÕÈý`Cõì¥oØ?g`ÍF朌‹ÀH‹†ò×ÓÕÏ‘`ñ» ‚ƒT~65Î.96,`³xõµôlë Ä\θ;&¦!kÇ×å ÆæÁJôV>ÓÛnQ3­‹c…8¤„½aGãÐ$îÉ(»çf†A*"CÛï}„:¾¹ Ìl{‹7nN^ÐÊ`„påƒå˘ÌV—Ûyþ2>÷{Ή =½"ž;ôl`¦GS=)ÅhhR:ê bÞ°ã}µ;íYÏHey~aN'¡¦o¦NQ»ð%`\ô?G°2™9×Á>ìSŠ¬7…¾»Ù6ò_qÛ§ÍȒΊŽ¤¦vغä.Ù#*Íõ¹²G-–à°Ã~3º½øÕNôdàÐH¬|ò€Ò>I6]ñs˜öüåÛ{ñ7cÌ a8d?‡ÉNV¦æWíûê^ÙŸ\W’é†;ˆwÒ`–v0zA…füA©‰õ§$=›Ò¥˜ÖÒGVöašMŒs*(±Ó8üì¹äô¶^d•àŒ1÷·»s®ÛCºDdq
+I¢BŸîÙ¿¿²ÊXãÞLbÁcÔÅã‡Î0¸±hÿŸvæû
+‡
+ïÔ2AÆìöâ©eîÛ›Ó¦;»ŠÞ¹‘°!¸„è`Ò]åU-YñÌëŸò¬ùM5ÁF³·&RGßw´+ùûè8šŒÁÈfïyFW OU£wÀº$¾¿@i¼ù9ºùr¹>ÒHÝÂö§õÆe¢Íw{˜¡Ù
+,ùÌçÖ6ºþ‘ß‘—§ìä*ƒšA>SxÏå’ò§Oœ•Ãøjäwcâ]o¸‡´×ç?e•é%Iôm ßÞl)·œ?Þ4‹™æI¿´—.¦Äì Ê×AÖŒqh}Ä_J¬Qêõu‘¦ZX´y7³xÄ,i’¸«^飯\µ1) Ík„ÝÅ TÅ>¹Þðô3¥Ÿ¦õ1!}KGf³[ZdɦÚ^Ýs>¶ì¨¹…ç›ý˜“]û·çÁ ~V\Yƒ°ÕæÆÐ¥–tQrÿ=<e¢w†|hó$¿åÜ£ëØÁSä<þxØI'è÷¤ïëÚ_tšd¯„§wòÒs_×àdI#ØÙÒ¿˜
+ogÓƒ1GC6E®Í]cdv®l}©µžÆÍE*û‚Xí øVr,À8è–>7%×5/ÔQz 6@^î$Æ
+Ìkª¸â§hDlU¼v7X}ñÂúZ%fòb+†Î5ƒ;TÅHÿ$IÀÒR.X/+ùeÌö2¸Õ4•õ…6È(z¡ØîõÉìg,Í¢ÛäZ}~û JmÕg(±èe{u›"&Œ›Å?c
+áò¼\¶¿ûë¦n
+Ý)¥ÀÓ,Ú €ž–ñ;Þ©x%ŽÇ*:Gï­Ì‘bàÞšÈÚ±ÓÀ'“(' ø·&ᦗ„Bfs^0©^T
+i¿5xÑ@>,Ïu> w?tiÓ¶0ûôIÏä#%(ù‰ö
+©«ˆ|LO†D¨Å÷¦gîÑå¼Þ8vÉC÷I~®O–ÙÍ>mŒáõÞ¢‰‘}‚
+^hâŒð·¹ œ£“hZ™Í/øÅ_à7œÀ+P¸¸&&êåî$+Nȶp®Ô ~I(–»c¹ÚŸYªÓÅg¶%ø¥p%ö>­’H¾iL¿\ÚõÐß(¦µâ_«8Cƒ—R{‹
+Žµrð¦ëØíû‹0Ê{‡˜ÊQê¸2‰«Zœa‰ƒ†*7Äc¹äJî„I›ÏüìÒ]©æÁ 1=Š¡å©òñS€MX¡¥GMøªéþP¢‹:*½ÙOT9†ÜD¨*ÀzÞÃ*Úž“¬ÿ°Ë_hg
+‚œ«ê9ŸjˆŠ"J7Þ®(ðhT(ìâ ª¦¼ÜðÊ™§Ä‹V¬áÝq
+oò]ç }£¯9B‘7õ· öœH{È­’ëæi`T&éVÇãs"¹‡‡ªÃßÛçVMo¼iá÷׈â{C„^×;¿_g¿`,·÷þ2 Ún“ R ɫǶ]ÅjÍuib°ƒãÏV!QÏÆ>²¦aO<ö”ñOÁxƒªH²$áófe°§Åû›ê¥úКxÇÑiêÅà>ò$­–Ìy"-Ú-ŵ ôý‰¤Ëq ¸ŠÖˆÕ"™[Ø m¥cA¸¶¹"t8Q+PK¥ìó÷Ñ”¶ëÛãh_“ ®$+ƒº‡¼S¾ÎúÜþµ$áØ™éezv~7EhÅZÞ‚¥ÓªãHÝåûm®Ý‘(ãŸÄ"Þïòwnúê›»ÉÕ”^«¦
+endobj
+910 0 obj <<
+/Type /Font
+/Subtype /Type1
+/Encoding 2007 0 R
+/FirstChar 33
+/LastChar 125
+/Widths 2017 0 R
+/BaseFont /VVDTAK+NimbusMonL-Regu
+/FontDescriptor 908 0 R
+>> endobj
+908 0 obj <<
+/Ascent 625
+/CapHeight 557
+/Descent -147
+/FontName /VVDTAK+NimbusMonL-Regu
+/ItalicAngle 0
+/StemV 41
+/XHeight 426
+/FontBBox [-12 -237 650 811]
+/Flags 4
+/CharSet (/exclam/quotedbl/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright)
+/FontFile 909 0 R
+>> endobj
+2017 0 obj
+[600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ]
+endobj
+872 0 obj <<
/Length1 1620
/Length2 20127
/Length3 532
@@ -9061,76 +9636,66 @@ endobj
/Filter /FlateDecode
>>
stream
-xÚ¬ºct¤]·.Ûv*I§cul'ÛFÅNÅFǶm۶͎í¤cwý¼ï·÷>cŸóëœý£jÜk^s^×Zë5FQ’)ª0›Ú%ìí@ ,ŒÌ<
-…ü5Òß1‡PP[­B¼ªùÕy{Ju ¡glŸÏßüC(»ƒ¢ÈrÓÛFÁ÷jð§fÌÁpC`¶
-f†é”/–é„ÐaÆ)¹–ìÉT_ÄAÇDÆ@G’_²V ú¿IÂ>^"òœ’£\žpÖk×Ñí HNZl¸Š”»Ào{ö«OŠ—©™}½ŽÈïqM gÀÁõ@‰Î
-vÌó™\Ÿäsi‹ ø'o0=ÆK‘ wnÕÉÙë)ÕiÞ8©dÆî¦uË͈âL8{8yŸì'!HÄ`9õ'žz6±VÁ‹Ã Dp.µh4ÇÛÛ8ôÌÊv]ÊB‡ºŒŒžš¿ØKÕËËÃÙÏ£€_ë%ç=ùäÚâô%N¥¡[é ¡Zß—”Ž8¸³OÊÖÚvAÔÊ
-ųÎ:]Ní®¯jï‚?Ú1Ü¡}ú߬Eþ·ß™ã…°ä]x‰©9
-¾@£dJî'¾T¨×
-z õÊøjØNE'·M¼¼² _ÉHËq zÎ9W±O´à¼¢\Y`Gà^ùa“ñóQýÕùÒ^mš¿RDÓyYÕãľ¤w§fküV¥_d•ôúÁï¡qUåM»n<%ò„é±D}^õ…ï9ÜÚ™/˜zšâ.Øè×)ú/…0×Ο· ×rþ¦›§›Ü:;Òé:of\ÛsG§ys÷ÌäxQåç!X[EsèAm®¿NB(^WÄÌoÑÎÉ…qeQoP½'“ÀäŠÛ±vÅTäŠËÔ›Ê`Þ£>G}òxeVÈ#E²Á¯¶b@:4ÖëOØ,Û“œÖ˜ w÷Ý@)Æ óeîG£J (P å[ývÞ²zž¹<ú JŠ ÔÂY­CµŸÐÝ^R°¼k eMÒ]@KòB ™ŽtF ò°…&eð
-îïø`—÷¹K³†>E9‰ú¢%óeKšb¥6$O÷Àw¯sjºN«–'šuYv™ÁuC0=õOS‘GQ‰þ¯Âì{êMüqûÊ¿ûw^³4)pD^W¾i 22øQæBæeëðÄø8Ü+Î(ä€#x2dßë~r%³õç:9ÿ8¯%è5.Ý‹IáÊ9ƒnò )6Ý(€É7ÇÅåÑ Ú:T÷ ¼$Ó­jæÏI,n›Ýƒ0C5r ¦Ð{Ûôù4uJS·1Q¾àIÞ[°šùq™B·ã§ThBŒ¢$¹*3„
-j)ÔˆÀ9”‰©P͸\‘<«Cz„ w$;48™un¤£Üó
-yÍ:
-Þäâ¨Mœj‚ñí*Ã;øí3ÈñÈmľÎV¤>û¢{Ž'ûh„³vÁ›¤ÊŒ=N(ßÔ™Þ‡RÆÇâ-ë-U¸Õ¡AÉ^³Ø1!>•…k;oI ™&Z£Åó²A`þH¤Žš“´¹žÞù=&¬;îõ4vŸ ]Â÷žå·£Ë Z±ÔNnbáÓ1¦[^ÏÂëMᬯij ç_ÓTô²È§šl`îS ñö—›.²XˆGe(p¤.¿¡ CžFêJ)ËÂÀ€z®Œæ×Ô9øè¹'ÆÂ-ÉÆÞGܶ• [|ÛþTÿÞ l©5· BZ«àà"—䬩¹9£ÈµÿT*qq„ÏÏ4dG<éZS{Ëèœz 2T$g€ E‡úÅ3P&¶ãäQ,À‹é$‡(YÐF¥›Ýúg¾ÙþËœ;HGŸ€UÏ0/ˆF®A¶¢ºhÝÂüÏɬSŠ›?…ð.zì$ƒþ¾‰OøBw F9.é»°{IÛÖ]µYÎÙÛö>….¹©i>Öª®¤Á¹º·t’ÞѱûªÜI r<Xh[_lÒíÅU1î¤â(ÛŸŒÙÂp—)^ðC7¾è£½k¡ú»¥FÑ…ÝL”ŽˆÃSù8Ø'ȸŽô‹òôÝ´àvÛ\ûƒªH(dÎWs<eúJR˜)[ÈùÒ;.ŒÛ=õM"%Z
-H;\æ ¦oyd÷5/‚ZY¦ØßY‚x/ ÜI(ê_SVò÷O”ßmÛQ(±Ò´È{u½î}"ƒª7àú(˜"äa-/ÅGSkA˜M™É~¥S/D+âˆä5‘<šèaŒÒeÍž€RŠÕªµ«™£Ö½KxfÕ%S_olË+ÇééG~Žá^׎ÉñHž‹cCñ ûKÅ r„i/©ÁX¨ Eå[-6áËM*µÖ‡ßQ‘ÒY 3œœüÎ$c;¸™îÎôœóð!¢¸†„À×Ü—Ç+šž\[²7¸¹7ÚÆȈ€Cà[VZÉŽ6|íd›®y>vWL«Ýa%´§AX™ée‹ÇXço^´¡€KE-éÍBòŸ’Þ®ü1Ò^Þ€8ä„áU„4‡Ü46
-`YzY,lsÿtψSòé’üZQ”²8 !Êó@¨`öžnBîàñÃ`N€¥Nw§©Ç!ô$ÕæõÎ%¢ˆ(­Ùâ ÐκÒC$‚é‹Q
-=öRþ÷y:×S¨‡ÎG~.Ílñõ¤1Õß«Øg½ ?o!==çxQWP8?®~|˜Üÿ¸¾x¿¾tW õ/ŸU®kdY¸Åã–„ ¯iHxºâñ¸l±˜“¾ž?b™qé®yx@cÏ·è£P(&—.!ÕGÑ‚¢™þ=Wc7Ü1WÏ28'ƒ;2[.ˆxý‘×µèÀw,ÔE h@¡3§>WYˆ}ðùaæNy´59ƒ‚Oà
-Û#ñ=X6µÈøÌý/ùj¨5§äÕ‰X¦NëxþU¢lµÅ•¬A2fNyë BåK@z«1ÅÓÅ¿fÍÈnÿÙÒ©ê¹4mmÒmyŸ;þ-áu
-¶Šy­ŒØœX6$ XbLÖ¯Æë6SÅGó´»k%¾PjãdÉ\c_¼œMMâ›7IJÑ1è‡ÛÒŒÆî C¡oÖ)ëÆ
-‰} âx†Ü²t¼Væ–67Î5¥ðž)‹ôÇ“‚õ\æb—qå‘!̸øglnëNò4ü ˆ
-/ô Ä@þåí‰e2bƆwU†ŽUöq`æïâðÅFŽÓ⊂™¼ná{™š¢5¿áPƒ
-\ÅT»à^7–4N’’Ÿ»$$Tƒ-L3éΚ¹¼Ìè-h’T8 @½Okè#ÁMÁ[¯/³xO:"¨4áxüåäL—<kcèyÇÛb¢q¯ÐRÐŒñyn–yÍ Õ4ë1qÑŽ{¦í¾1'.ämŽNèÇ!Êâhkjìšû?nP:±³4¸§†ÅÜ9´mºAº‰=¥“º,fÂêhI­ ôNÖ»ïü'hä<Vk
-Á³‰Ek-˜B©äöVZq*ÜO³«ișꓛê¬ïžŽð°Á©ôÄÄ ;Òª_俽Qì˜ÎcNµ{pÝïbÔNÏ£….Öï³J–Þ­†+–½º5©jµÊâ?ÁGtiÉBs¸¯vëÔm)«[™ïE»yŒãn6Ägî¹ÖªÐR“?Áµ7ßûx ãcå«B55Ö°0§¾ê cu Çð'}
-
-ä+N‰Ø5ÞNj4xÐ]›€¨áàݵmï+Zf;ˆ?Çåe³ÝöPà·oŸÒÃüµ—¢I¹ë¼“F<{½*-5 …)ôcÚ
-#oÓÂíç ç‚
-
-8À#D=ÐÚ–'¼ËÆ€7aî^MXÛsänjã„h1B–¤ÖÑØÞt\§´äŠúã=/t2K(¦­H÷±X į̀W2­ál“åÇ W÷íÀyŠ|¸`¡ïì¹Æî§È…çÁ™kÙYÔë:½ |â­±ôÈìÓDáw E)³*j³sý«‹ÛV]öŠSl|œf&EÔô5L‘VÑ V ºZ™ÜŠ2Mù…%VÐ`ß¿1¹¦²¿‡T@@jLªPèȘ֨s*ô½§ Ëâå®è
-I³ÙêéœÆ–T©-˜Q§5߇[„þÚ@ÂÇŒçoT§÷sa‘‚‚Ÿ£;?®IÖB,$Êq®G¶qÞâ¯PIJ •£Æ»¨(¡àœ•SÕ`RHáRp”·Í/i¼™É6vÁ³ªÈ»ÚôÎvñoU;]äW¸é­ysQ†$Z k›oÀëãõO„ö¤Î£ýÁË2Uø˜>¼sUàtO?úp '@úÂÜdÛ¹KuŸCí½ìe½oÄÜóÏrž‹ëéEÓ3ŒžÈèÎ#$ûYjŒ²äØyÇúÚIÂOÁu )–8 Çúƒ}Ú |þ84G'.«2c2´GÂdL¡ÌàŽ6(­1¥²ò&µÂgùð‘ôrœP$A€+ÒádˆÐíçÁ¼_äÓôèä8\áä'wÇT`S^JkÊ_HÿΡ ÇÐïK”.±®:¤vìÓîÓcˆä"AŽ¥Øm¤.l¬È¤÷4³å)¸
-4=_A€ï CÎyëºnlT÷SIÆlBŽãÇD‰gÿ¸e‡Ýl‚È¢s›y|œRJ¥sáŸÆ%÷›oßú§gªDT+êg&Ÿ‡
-ÀáRLæÃ2–6çW0*¯bö"QÛ 8Òœ3,´~~ý¨yܵ±®ƒ!èk÷}“IU?û
-^ºö.ÕÊ;â˜<\éæjB† :æ‹ãk‡o™ùžËýta˜A=«(ÓÔ'ŸÔÐH•ÄN!z^“kðw¢ëKËŽÌ´«öߪ&ZÎØS³_­ž!¡ÑÐ9†˜mx,by5À,Ù{Ô´9s†s_=ªŒBÑ3ú§ÉÅé7˜MgðRSÙ aÅL4äÆÍœdä’¶î¡ÁZ’Ô§q½ ¸‚’6ˆõA3†Švbwq]o§æö§%¡×+DðXÚ2ˆPvêð7?³Í®=Dø"EL‰ÁÀ} §Û#WYççÕ"ú­Cø(øºÕèa ,Ù`­}Ta¼R›L΋ÜW’ï“9Ž˜oÖ”c/9ŠÈÀ°º·‹*£ÈpOˆjêû‹ ª`= à^SVnæ¶ô@&2†4.Ê0h-5zPÖz.Îxúƒ)Ë+™ÆÁ·ÙÃ!îˆF°²VóöqÓA#õ:ãF½À=Ca祥…1‰d1xýº¿ìø2ï«9Œ)Cí$§øV„" Æ1‰F¢rnêOèó$9žíÞŠòZ «>’qXøŒúÑú‡¶úIÛ¦Q!yˆ|¨(wàÌh"¾n£K²ñúB©
-/5ˆÝï9éŠ1)ëM÷çY¤Ò\Þ5ö £yLU!?䡳ìšýõÀªi›Ž}Ìn‹‘f^;àQb ù¸RÿBr Ï¿I-9:5Å·À2>ÁÐ3d±†Fˆc,<oäæ£Ocî1ü±St~»|Yù51DP!£í¶“°P ¾¢®tþkºô¡ßk˜8Á¦ÌØ$õc°ã9­•Qæ3EåŠü±¹ÙÞ–q«¿tÔîÙÛCCY^"fLzJ
-ÛnÊ÷Ù'Î{ü®ÒÿŒŒ®AiL–Xg…¸N
-£2„‡Œ°±hdw,}ýåÒps9KuN4ÒÝœ°T×£bK؆F–i$Ÿ‹‹'p‘}¾Ÿt¥™´ðÞɨ"3±Ut¢¡úx²Ø&x4D K¬ZógÜVú‘xC¶‹]äÂØý9¦yóï³t¶Úxæ‘…HÞ#ü¡ æh
-ø>_@[›cQƒY«]®Á²´%!
-ÚÕìΨwtŠÓ ?oAZdævò6I‡¼)’þ‰èRUÇÜ (Á@Ú”µ²âi·¦Ð£ñ ÛåºÛšÖ/ì¢ó&Å%é±ACF÷Àa¾šƒ;öùZjûâ×QBÙŒãωÎYIN«ä{Ïy|—hT®t²RML‡WK&q¨aMPjÍ–_ê›Í2ÖÝmYL¡£Ý§ÎŒrîgs7¨NãÚ‹+Aׇ²‚·`¨ëÞÊN óoé…%¦~aÝ–o¥­~F¼».û#3{9D«Áä9;â ´æÍôQ¤m£ÆgsHœ;“¯0C[µÐñû8Z¹Ô€î>¿œáƒ¨ÃY„Üá€ø¨e{MA\\ˆbi©O»‚›îöŽÁAø¡Ö3
-'ˆqqµi½á¢C°z³(†Jœ=ã€àˆœý]ÔÞ8§š¶±×†3`žbµ^0Ï »©uDA"e‰57 "jÍLLÇXÝ'N-ëZnˆhK$%JrrÛ­‹y¬ewyä¬ÏÖlv-‡åƒÑ‚ûvô¿L‡|ä‹N*<‹c)u4¢×é²=hIë&a‰ ét•ÎÉV¢z*ºìÃfÞaJž¿+uÍçWâèÚK}¤¦
-cþ1α¼ZÞÃbi÷cžç„ Š¢c;Ï\ºFý‚I ¤Ø-óÒF ¡Ù¡·ŒhÌ$‹™òjLjÚ¹ÕTãŸLàIHJ+øæö‡dPßÜlvÈåAÞñ GΓ[ãŽ`Ñ#&ûîR…j—ܬ'VuUÎÔ‡íëÌÒ†·r€"˜Ž†(¾WwPßSè¤u‚3ØRUê·€¥~²ýbæ³u«jJäþnÏ×íºÁëi¯™ê'‡¹IÀ&JIÔô0>e¾dÞ>#Ç<®å³Ü±éúÞv‘¹‚ΪçñæWêÕ‰½˜¥‹ÞÛd ³ªÐçÄsFÞLÖ÷ÍÝ">nfhx¬ºqŠ~K~áåÔZçW
-D9ÐÄ×ý«ÌNc­ü
-4Æg÷ÎüôL¬¾¾Ò?Âlœá¶_±Ã؈õ†ëî$àÝ-:ÇDpBÝu£Cbî›#13º;Ï
-*‡Kò·¶‡;¾-’"+ܦ˳-ý<ÎÈôXüöYëÁ’áJÁ‚¡$üé¥Ò.&>Ùe¸R¸¡3ŸÁÿ]u7üaÂõñ.R8‹zAµÓã~nTLûçpYTÓìª[7ÒøUÒð=|¹üº*ÚÂ_AŒ/–*CØ¿?CÞúh67÷ Wáïx,V[ýªŽ?RÆò^oH–èÈ;Ǩ=käàkáÕÊu3®ÉẇNbnN’²‹Y)êctž-yá¬JHÇd`‹“mó®úí}KÕ4¬½9«–øWù… YÚá•M3 |•Ð§D N¿"æµdYDé@ÖáÄúÑ¥õÇ*1öEÒ.úMµü–r± ÒüØ
-Á4õ5’+Äó}†#‘.ç­¤‹R‹ë
-õS׸­oïÖ‚•fx{ì—?]Ž{øjA}øé{v$õFBÇÃh¾/oF"U¹»ý´P‡SkwUŽçî0€8â…lù9|2öêlá˜,RºÆ,;?…Y¦y$…䯠‰+aÍB•¨ì5šEÇ婳Ž÷õ¾Ióþ†n$ŸJ±šÿHbN±ãHÿ­^Ù’Ÿ¨aêºV§hÞšW>#žµºra·‰áWvdyóEúC ‰ÙãÃ/c7>+΄É6¸ôªû,,V>'$úÒµe P¹…'›ð3f3
-J̺6I>ìß $‘–HåÇ(ÃÈ;LØAB¿ªƒKéíqrm”ü¼Ëµ˜+ู؂۾Ó&§døäNÃ0I¿r!7%tj[®†ð¼¸ ‡¿¬e°¢zñ÷pöZù¹Üvi3l*.p.&€Ñ· Kóâd¹¨É
-ÃŽ¿N õÆç*匶ölIUQ8(± J 8a•˜· 5«X~+Õøëam:Êœ·jP¤^Jœ§î‘¸ÃsÀÿ‰û‡FmA@ [r«@æ [¼¼'O24ö‰¨-ç¯Ô‰Qy"ð빟z¿–2¯\ÅC ]õõtQŸ;G@
-ƒmÕR¯ Ö$õì ÔÛ6Áò´K·8} bS5Û €UÞXÈs^ƒ=$Bÿ©†Þ‚€`õ©£X&ýµ§=²w3ØÔ]ö§ã^êÌNóÊ»Aøðc0ÎäÚ5¯uÈòtœ) ¼Ã؆Fê|ZEò‹Vjê¹Cç‚¡þË€y·rûÌÂqëBªUèü õÉK%©BIhs”¨ƒr¾‰Ÿc\už…L}dþlùÅ#œsþµÝ
-­­Ûä¾xP1S'¢Ä”ÀÏ/m*5blð•šZh—E5Ú°ZÊ‚?7/ ö®Ê¼¢¾Ø‡ç]Ï|Ö;ŠÔBùúéíôý'rUS”ÂŒ,ù³Ç?»FöÌ’±ÛõÚ$Ämk¥kˆ"ƒVa+±<•šºa¶>Sû%­äù‡¸’øVî™ÏáEü4¬:ÀðÊT?ëðÎhx®‘ÕÓéUDÂãÚ%†è(
-Djà&$ >g÷5«d(
-x­áO¶S.eƒ›»NÄÑűn5wÔÖ‹IêÞ(ˆÂ8ãÞ×Àn†hºkͬ½P#éQ'ÕíîaT¿£þ$RyÉà–&S(v±8m`iʽ]rþù¦³<zlVlÉ—œÂ`5”ËR¼Ï>íJùQ5x9–Bgaàž}x’2ÍDÑÔ1 IÐÏ4—ÆÇûèr¶
-´¡é LŠ.Ô»4,›æË…Ü)]Ã*Vi}¾I&È éà1ƒs¸g´YÄ1Rë}}ã$¬Ë¶Ò|>”OÙ‰@½)Ûá`LÓïËñyŒoãwk5±ÈVð…SŠËm‘í ¬Í‡Ÿê)"q%U æ#}VíÈ·ŽGØlxR×{häYÏøç%»Œk#’–ñ
-°û€‚ß_7ÖˆýõƯ¤øÖe÷®eßêT\qÓýÖ®Épswþ
-Ü$( Wgœî‘·xeµ§²Þ¢Q«:p¶ÐšaBš³·ØÄ ô¥7'‡Îò Ì[H›†{ ±_‡*ºŸñ´í!NTúû[ìD_lïñ (bÂ/Ý}¤)mR¼™~pÁþØL®†PèK¶ M5”ð?Æ®*äQF2±g™#ªûغà>~‚;H°‹¨-ƒô9ü·—5ûÎG 9„õKƒ[Óc÷­~@H"…°Î–E(Mõˆ@å4/”š0ù{oNcáKC¹¶un˜íÌ——*ÕˆÏh1+(¸Ôýd04—DËÓ`IRïÐðý„ã‚çNÝÝ45öH3‚-]º5û`EJd>¯3Ãæ B­gÍR™n"éK`~[›J:4qð7v®`=RŽ}EñŽ:è¼süôŒÍ˜4¹nÏñÈôQr,É¢ï°ÍkÄêãÉÌ^Iö-ûØLƒÙ£1#iÕ³q{ÁðÅÔ#…·¦˜&#¹–æÆÌ0žpk+«£
-†é68û½3¿âØ €ÙAehD¡–~ØioÔQbØFÈöyÍpR<‰˜ÈfÏâŒ&a›æ(z
-YìT”ÄÐ_ïCŽÆ} _zA-nuò®Z˜ÄögúvXPô‹•5tº ÁúOÌ]šÛæÞÄUhN'u6V‹3án[ }¶ŽMïm9¤‚Ü.QÒ(Æ‚Ølšõ3EȽ¹²FÕ7CÇ¡¥ŸµÂü‹›¸¡• Ò†Ô·X>År­V¤«´þœùÈ87‹Ðæ^’Ü#ž³Ä…*[Ã00Άºª\-zÂ0³•CÄx:M«»ÄãVNcÇICÃOgUÛ¼¬*¶@ÚU·ae’+b˜ÀèÌ¥¯é¶QñóP/Anžóu–ÇúeÙM"èzpJ™Ïò®­"U‰ ñ+“ãé?§ÙÂf%%íl¿çkíæ¿„òLO^‰ªãÃFÒò’Âiú,ÞTõg1ª
-l•"\\â„o8½²b¯‰{åIPwví ËQæH¶$ÜÉ´¦ÕL`e·©ѲÂJ»ýT‚Ε^jr˜²:ª×»‹¾n
-¼ë0åà®ÏØÿîZŸÜªc~;Qwµê4è©HšñqÇÔø°7ò=­³ž‰’ ç™òÆú˜“duˆ?.Õ+rÞ9kÃf6q§œaÞÎ^bÁ;ÐÞ“ªC=?JÅЕd›dg‡|ÜÔúˆËz@øeaªCšs5ú QoFÐé­Dú÷8È«âX²DÛíŽO@Ñ% U÷Méd>kZ|èdü%Î0 ,cYÎ]o5ÊÓÓˆP|øTëZBŒåæxM~`Ôä×P
-Ïoé†-«ûç²`¹ Y¶ñ­Î±‹èÞÛ°ëÙC¼aßèß7åv¸×^
-뜻%CÁÌ‚¬UÖ´‰Maü€¤Ï¹uñçó„áÜê :œð؃C»(|cºÉ& §ëéòɼ¯È8'Ùx被 Šóp<]BÌý «›[¤„
-¡à£"Ð<‘gÏ[îD~^ººÓÂÙ?Zn\Æ$ÿM­Œù–1Äœ)Á×Bň£EGâcQóh¨X*úêÊÊ_>(”ëw+ÇœðaÚ¨F~¶zñyþþ{ ‡>gS(êá9‡&IdÑX2)Fžb¡8ÚËp¤«PX,Gæ(xõš2œsPº% fajU‰ªh.,w¤Ñ«
-cLÇý2 Ža®
-L­ysN<q›Žé;u %ý¡xCߥi67k]ýÔ•ðÓ*‰I
-Ñ\‚°îÙª [ˆ|¾[4Ã_ÆvNy|ü(—æl²½Fï·ïÊ»i¤ºõ–l
-]ë4PH§rüIbÕä-àIæ<Œf)$Ü=¼ð~WÝ>Rú?]œã|DuVò=Â+÷œõç°üdË,󴵋¨t}ïæBÖ 9Q’Ž¹¡¥PÖ•g$±»ÖùW7‡È0‰dÐs`Å/]N˜Cñh¿5÷‹$YlÄžìžvÌ6èëZü¾Žñ:á3~|±‰Q¤ãïÛ_6tºs´“WÛïµÈßFgùè`æ} |5*¦
-…3© ¤ 0.aõÃ’ AÜÿJ&ªƒ0C|R*ü(ô¯[ \eZ¢¬ ÏÑZ àú½á´sÅ%¶_,sEjâ’ñƒ]]¹QÙÄäã¤Óoxé{×ùÒT¬ ¬>ÔDu±:eƒ„Ž¬‹C5áj¬QjCìé÷¤›ìÐ̆£Y•Ãé²{G ·$7wA”_sïâPs±¢Sš˜=ÍêïxEJI7z˜³LYò>‚Ý'ò.ä?4û™36L®PæØi¸Êfá]Y­IÍuÅSÛÁý²n’YWºjRdúAùú†ÄMw¼NÆÒ`´­Š&'"—cxŒ?¦¾©Žd[ºhxB{ü¼ãXæ}•£689®ªíV3*àV,´NÃIæ®ÎúÄ’Ÿ]ñ]Ì&ßkÏ—Ê­!ØEø>µBGD“ÊÚ DÄ`ŽÀzë†ÿD9ÜD•^ãP¹¹¡ÒC`pÞ¸q¶SÏ/@j»_»;Æ),H¿¥ÌNeÊ„cwLˆ^ŒM\Ú‘/Q„Ýr½Î«D¦F¡CzmbÍ$cÁïW %—õÛà”\Ù’æ’.îrËäU+ôŠÖ½U©+A´5ŸJ¤Ï)ªãÿä;z_{®ðø– ©ŒJ !uêˆÉ3e|Yüê*¹ˆcËûõ);ß.†úðò#ãDhö€ö‹G¸èFyç;u=2_–\?c«î¤~‘
-ƒÅÊ~Ïz_úà)ë¨R÷Ãfæ4Vf™k+{Çc–®ŸSxéüýpŸÀ–éò¢Žú‘›B6Uß\•AM{ƒo—áŧÜùþ1÷¹ž ƒG‹KÕeºd´fÙà&ö÷- ¹÷ŸÞ ŸLHÁ¹‰àT­Lq> ã3ïçÙuÐ3õ.°ó»ÏDkr%[’û V! =?(F‹V>Då†TÜ'LÞ»tðþDì0åœjiJWù¦¯:•º?˜ákÅtð·Dt,e¹Cëàì8´­~¶^Wìh÷ðá²› ó&pÀs–K‘v£yª¤}ÜYhÇû/q˜š\—1άÄ.5HLUcß|{¨8óŠò^ß4à`äô·ÅPß½Q5ãŽèz”=ûý¯`ôô«î½A$äÆô¥=ÿ7<‰†ÐZLLSXëNŠ}Db6¶Ð,èÿv;=›#˜‡Ãc“(í„FrEƒÎUA7Á¾ºñ°¤‘ïÁ¼ Ÿ³ËÔ 0
-·•—Vh/†¸MƒD:•ÄÇNñú°•:#Þþ>PLÇÒwðQ5GbÌñ Ò禪ð@` Ìf(iVþÉOëµ6 ‘
-’Yý”:®”èAèÂûXqQ¾®ãÜþŸœß,è'ì-¦E“qàO¹)• ìG³VÍ4ºf,§œR¢X=ÒÄ"Æ œVpÕŽà"ç¸Éü 4¥^Ëdw3{ñ¾T ¨Œþ)þ1²ðùfäI>EÄ ÷ó…>W¹;A©jæG’òÛB¿¶ä®.L)y{kÂ^×ö ,”K@[ âŸdOÜŲÝ_t NÖm,b
-É´ C™Ñ.ïðÖJ®{Ò¦sŽyZÍÊ;±êÈÂìÄk´3ѤFÈZ‰FÝmp ÷:%•Ùd
-Ü)„lk2'¨ á"”Öë±âµ|syùͱÕu€\çÊZ'YýMªI­‘_£ƒ~Æ)bfÓíÝt=–ÙáÅbSÅ#Uk.`«
-S­‚DÍ( »(ë%ªUÎ)7%g:F—°ÞÆ {¡ßk·1SÊ» „]«
-G7üæôÆn}Ò{«óef‚‰@ƃÚZt'ˆD©Ñuèb ÕËáÿkŸ,Ûš
+xÚ¬ºct¤]·.Ûv*I§cul'[£b§bÛ¶mÛ¶­Ží¤cwý¼ï·÷>cŸóëœý£jÜk^s^×Zë5FQ’)ª0›Ø%ìlA ,ŒÌ<
+šþô­¯œtGLz¥ÈéQž7K²;P?8˜Õö¦””õJ>`ˆg:Yánžiü(\
+ü°¾<Ù£ø§6Äbw¡5aÔž_|M<}~¢î½…î?$¤Ë‰…§äuBþéçC(øC­B¼ªùÕi{Ju ¡glŸÏÏìC(»ƒ¢ÈbÓËZÁçjð§fÌÁpC@¶
+¦éÂú”/é„ÐaF)¹ìÉT_Äü AÇDF@’_²– z¿IÂ>^"ò“£œŸpÖj×Ñm¡HNZ¬¹Šù—;Ão{ô«OŠ—©š}¾ŽÈïqM gÀÁõ@‰Î
+vÌó_ŸäsýðKÞ`zŒ—6$Aïܪ“³ÖUª Ô¼qTÉŒ!ÝNë”›Å/˜4ú#pöpò>ÙMBˆÁrêM<õlb®‚‡é‹à\jÑhŽ!··qèš–í:—… u>5±“ª——‡³›G¿:×MÎ{òεÁéKœJC·Ò@µ¾/)qpgŸ”­µí‚ ¨•Šgý´»Û]^ÕÞƒÛ1Ü ½û߬Dþµß™á…°ä]xŠ©9
+b¤H#øÕV h@û€€Æjý)ûƒe{’Ó
+3 á"Å8a¶ÌýhC©Š‚¡|«ßÎ[ÖGÏ3“GDBI‘Z8«µ¯öºÛK
+’wi¡ ´NºóoI^0Õ–ÎÈ!C6פ  AÅjc›a˜LÁýäü>wiúÁЧ('Q_´d¶lAS¬Ôæ‡äaíøîyNM×iÙòD³."KÂ.38°n
+ݱÍAïOÇ4å|cå žä½Ë™à˺_…¤Bcbœp%ÉU™xíŒ`#Ë}Cºûð¥H"¹ºå)çØÑYi#,ج¿ßÁ;QÝqç·Äjí(^&+ MÌøkRÐ,7÷u¾!+o­¹-}iC¼HBbÛ*1'O. Íþ~6'jïý˜ñ+gt5û¢PVÔÿ¤˜¿T?ÚãÔR¨s(S¡šq¹"yV‡ôî@v¨„3ëÔHG¹çòšu´ÉÅQ›8 Ô%âÛV†w>ðÛeã‘[‹}­H}öA÷4OöÖgí
+„7N•{œP¾©3¹¥Œ/Ä[Ö]ªp­Cƒ’½f±eB8|* ÿá´%Q0d’hyŽÏË9€œH7þ5'i}=½ó{LXwÜëaä6Aº„ï5Ëo7F—Aµbñ#¹‰…O[?ˆny= ¯7…³¾ÏÆ_žMSÑÓ<Ÿj²¹O-ÄËOrlºÈ|!•¡ÀºüV„, y©+¥, ßê¹2š_Sûà£#üåž ·${qÛF2<üm=àmûS}ü{/°¥ÖÌ:i­‚ƒ‹\’³¦ææŒ"×îS©ÄÙM>?gЀñ¤kMí!,£sê-Ð@‘œm
+ï™°H¯Ñq<)XÍe.vUÀŒ‹Ææ6¼j÷(OóÈŠ¨ð"AÏ@ ä_ÞžX$#–alxUeh[fdþ.Þ_lÔæ8-®(˜ÙÉë¾—©)ZóÕŸ
+Ôû´Þܼõz2‹÷¤#‚JÇ_N‚aºäYCÏ>\z…„–gĈÏs³Ìjd¨¦!X¸ˆÓ wÜ2mö8Ùp!os´C?yTÿ@[Qc×Üÿq…ÒŽ¥Á=5(æΡm³× ÔIìÑ/Ôa1VGKj]Ø w´Ú}oä¿8A#çÁ°\SêœM,ZkyÀºHí(¨ ·³ÔŠSñçöš]MC~ÌTŸÜ¤Pg}÷p€‡€ J¥'Þ fØ‘Vý"‡øíbÇdsªÝë~£vz-t±~ŸU²ôn5\±ìÕµIýS«Uÿ >¢KóHšÃmµ[»nKYݼ øËÈ|(ÚÍs@w³™ >sϽ°V…–šü ®ÙÞÇ+×Xª‰‘†€9õUW«K8†?é `(zšŒÜ›×Io_eîÁ‘Í>&p×$ÏoLòŠJß´/õý…›R-“ÃOÃÄ,Á‰ þØFáÒÓýâùu.Í­Ž©X€²£ÝF:ûL@¥å߸‰+¸CVçD§›î$2ܘ±­¤‚Tô¦:‡4Oòü?ŒÙì7ØC *™VBÆò6Vjó­šÛ¾§ ÷fÝÆ1÷ídž ¿ô |ÒÞÞ@OBG À§˜«T ˜Ã1=Úuø1&\ÛTĉº(Ð64Ï›§¼ì¥—¿ž6ÇnÚ4~ÆcÅÛ[zFbÆ’RJ»žƒ.¶¡ÖkŽãÃÞDþÈÉ+GâzƒîÔ¹m_C|øþ0/–­Xµ³-`_1+Rå¬Ë¸ƒðžM*&`*ó|ÜTF-ò\<óãT¢
+
+
+à+N‰Ø5ÚNjÔÐY›€¨áàݵiï+Zf;ˆ?Çåe³ÙvWà·kŸÒÅüµ—¢I¹ë´“F4{½*-5 …)<m‰‘·iîúó…sA€fÌTljò‰¹^›]¿w›H.’îŠI†m¸_|óÚ»b \ÝÛè#Úžƒð ž1Êê ×åã–μmœh³fË]­Ú¸¤„ž¯\ÇišÒ}EK¶ õ»›õx}3sŵÈûÔM¿=i‹ƒ)»o)=26¢QžÉªËC†;ß5T]hQ€Ð^šŸmúà|‰Z›!ç˜8ºs±S°È¾J¬f?Ý ëÞìoåCˆ€ßlOŒ‰¯¸1 ]§Uxœ<Šzæ᥀•áç=ˆÎmòò‰¿½PÓ1ú”¢>2x¤iÎ#§·5ž.‰©sV ñº^ñ¼ëÓýªÀ›`õVÙÅ¢UR¸¼ûpœ“åæ41$ûFÐ8ªŸ8 lV{v”ƒîÞw©³î~¯ìýý«&À꾃~èôÓEKå½ây­ Dj”¹÷-vá'†H=~€Œøä“þܦð!UMÌÆ‚qzÝKs"œÏòçžNIZÇ&s™/í}‡•‚ðQE´¶åï¼1àE˜»×AÖö¹›€Ú8!ZŒ%©u4¶7×)-¹¢þxÏ ÌŠi#Ò},V{ 3ê™Lk0Ûd±À1èÙýåÇN@ˆ<E¾=\Ðwö\#·Sä‡ó Ìµì¬ j‰um‚Þ>ñ€ÖXzdöi¢ð»†¢”YµÇÙ¹þÕ‚ÅmË.»ÎÅ)6>NSã"jú¦HËèË­LnE™ƒ¦üÂKh°ï_ŽÆˆ\RÙßC* 5¦ T(´eLjÔ9úÞÓ…eñrWtA…¤ÙlõtŽcKª¿ÔL©ÓšïÃÍCm á‚cÆó7ªÓû:³HAÁÏÑ×$k!å8Õ#[;mñW¨$¥„ÊQã]T”PpÎÊ©j0)¤p)8H‹Ûä—4ÞÌd9ãYVä]mze;ûµª.ò+ÜôÖƼ9+C­…ŒµÍ7ÈÀaÀõñú%B{PçÑó²ŒG>¦ï\8ÞÓ>\ùë
+¾07ÙtîRÝçP{myZí2÷<ijœçâzxÒô £'2ºñÉþD–£,9tÞ±¾vR§ðSpCŠ%è²³O»¢‘χæhÇeUfL†öH)”éßѦ"¥2¦TVÞ¤Vx/>’^Ž³Š$pEÚŸ ºþ<˜÷|š‡+œüäî˜j
+º.F5|EKÖ_kßU­†Ä&“ó"÷•€äûdÎ…#æ›5åØK"20¬.Fí¢Jà(2\࢚z~"‚*X¸×”•›¹-=‰Œ!‹2 ZK …‹3…~`ÊòJ&qðmvpˆ;¢¬¬Õ¼}ÜtЈD½N¸Q/pÏÐ@Øy)diDÿD¡
+ÛIX¨_QW:ÿµ ]úÐÀï9Lœ`]fd„ú1ØñœÖʨó™¢r
+EþØÜlgøÕ_:jûìe ‚¡¡¬
+M q‚8IoÜ•ªÅö›ÍL-Ô…`€ToÞ½*Pvz:N“x ›ÝžÜ™3*IŸeÀ4µô
+;S9Á%]9Ao¢ÁN©‡’p6/€ôJš6:7õ"élÈ2îqœÞ܃A«ñ)Û«Â!F—?+Íõ­ÙV³d$7ÁÌ&áýWW(Þg0 ÎÜ#Úž8¤;ßJì­¯ý‰Ù¡L¹ŒÙOÝ5 oYÖá˜
+AÒà}…a™5‚>ÂÃNFØX4²–€žÞri¸™½‹…:'é‹NÎXªËQ±lC#Ë4’w‰ùŸÈ>ßOºÒLZx¯dTH‘™‡Ø*:ÑP=<Ylc<¢„%V­ù3nË ½H¼!›Å.raìþ“¼ù÷Y:›Îxf‘…H^#ü¡ æh
+ø>@[›CQƒi«m®þ²´!
+ÚÕìΨWtŠã ?oAZdævò6I›¼)’þ‰èRUÛÌ(Á@Ú”µ²âa»¦Ð£ñ Ûå²ÛšÖ/ì¬ý&Å%é¾ACF÷êÏa¶šƒ;öùZjûâÛQBÙ„ãljÎYIN«ä…{Ïy|—hX®t²RML‡WK&q¨aEPjÍ–_ê›Í2ÒÙmYL¡£Ý§ÎŒrêgsÓ¯NãÚ‹+A׃²„7g¨ëÞÊN óké…%¦~aÝ–o¥­~F¼».û#3{9D«Áä1;â´æ ÍôQôÃZÏú8w&_a†¶j¡ã÷q ´r©>Ý}~9ÃQ‡“¹ýñQËöš‚¸¸ÅÒRß
+nº_Ø;úáW„ZÏ(œd ÆÅÕ>¤õ„‹ÁêÍ¢*qöŒ‚#röwQ;£œjÚÆ^kNÿyŠÕzÁ<S€\ìæ¬#
+) ¬¹YQkfb
+<Æê> tjY×rCD[")Q’£#˜Øn]Ìcõ(ð(»CÈ=g}¶F`³k940Œܧk¤ÿe:ä#_tRáY L©£½N‡íAKZ' KLH§£tvH¶ÐSÑe6óSò<ø]©k>¿2 GÇNê#u0UóQŽÅÕòK»/ó<'\`ÛyæÒ5êLZ íèÄn™çšz‹ˆÆL²˜)ÏvŒX¡[M5þÉž„¤´‚o®HõÌLg‡œQäzä<¸±5î6Ýc²±ï.U¨vÉM{bUWåL¼Ù¾Î,mxÙ*û+‚ikX‚â{uõ<„NZ'8ƒ,T¥~ Xè%{2Ñ/f>[µª¦Dîïö|Ý¡±šöœ©.q´Ÿ›l¢”„AMãSæKæí3r,ÁãZ<Ë›¬ïám)œ+h¯zìÏa~¥^Ø‹Yºxà½M67­
+}¾Q@<gäÍd}ßÜ-âãf††Çª§è·à^.@­uz¥@”M|Ý°Ìì4ÒÊ
+à™<=²!>°ë_Â! ¡nÒ q£^c7Nh?–Dbk]z‘Zøù·Íà[ÛX=mÅ›P :žž‰ÍW½G°tC#<áß×V Â'¦ŠÒyÞÄ1ò\ðÎòˆ¿ƒˆ§9&åŒÂT«âÞ°;¯oQ
+Äd²’Ø[EÜ­°¿ÈÇ`n—ÅædþǦiBŠFtù£¿ mŽ<{ töJD|Ï;±Æ&G‚iþco§Àå²-çaA3©±W(æ‚2MYÕô(mò¤ œFã³{gþz&V__éa6ÎÇp›¯ØalĺÃuwðnæc"8¡n‡:Ñ!1w‡Í‘˜Ý¿g•Ã ˆ%ù[ÛÃÞI‘nÓåÙ–~gdº/~û¬ugÉp¡`ÁPþôTiHŸì2\)ÜЙÍàÿ®ºþ0æ‡zx)œE½ Úéq;7,¦ýs¸ƒ,ª‡izÕ­éü*ið¾\~]•mî§Æ Æ K•!ì†ß!ou4›¿›û‹†«ðw<«^UG‰/)cy¯$Ë‹> täCÔž•6rеð‚jåº)×ä; æC'17'IÙŬõ1:Ï–¼pV%¤»Ã
+2°ÅѦyWýö¾¥jÖÎŒUËü«üÂ@¹,íðÊ&©¾JèS"§oóZ²,¢t
+’ú C¡ãa4Ÿ—7C‘ªÜ݃~Z¨‹ˆÃ©µ»*‡‚s· @qp![~_£Œ¿:[8&‹”ŽËNp€0ËtÃ"¤ü4q%¬i¨•F³høð¡<uÖñ¾î7iÞßÐäS)–óãIÌ)¶é¿Õ+[ò5L\Ö*ãÍZóÊgDسö@WÎìÖ1üÊ,o>HÁ81äј=Þü2¶ã³âL˜lƒK¯:ÏÂiåsB¢/]ûP6
+Q+ª''a¯¥¯óm@6úâçòg}»°4ï N–³š¬0ìHñëà´Po|®RÎhkÏ–T…£¿» ”àá€#V‰Y R³ŠÅ·Rßx°îV&£Ìy«úEê¥Äyêî‰;|0üŸ¸Opˆ`Ôæ:5 ×
+dž°Åû€{ò$#ïˆÚrþ÷øúø
+Ažˆ+‰o徑ù^ÄWòó
+þ¤a;åR6¨¹;áD]ëVsGm½˜¤îý‚(Œ3î} ìfˆ¦»ÖÔÊËÅ!’uÒPPÝöF5ñ;êO"•— ni2õˆbg+€ã–¦ÜÛ%çŸoÚˣǦÅ|É) –C¹,Å‹ñìSÑ.”Qƒ—#l )tæúnÙ‡')ó×LMšýLsi|¼n°Q!g ZŠƒp2Äòf;|d·sJ5[èOú»·r•
+¹0>“Q80ƒÁ˜jU¥9Ãüró5½C£öñ²·Ëä—A<Õ¦¡1RÁgó[¼X- ?¼§µebÑ×k^6*Ù J ¬(І¦7Ü1)ºPïNଛ/r§t ªX¥õø&™ ¥ƒÆôÏážµÓfÇH­öõŒ’°.ÛJó9øP>µe't§l†ƒì1M¾#,Çä1¾#Ü­ÕÄš#[ÀN).·E¶/°6~ª§ˆÄ•T1˜ôY¶#ß:a³áI]ï¡‘g=㟗ì26®HZÄ+ØÃîk
+z|~ÝX!ö×½’F`à[m”Ý»”}«SqÁM÷]»&ÃÍÝùԛꚥ‘ü…@ÏHÈúû Ónê
+c—™XúAÒœü.; ®¯˜›'·Œ©½C›ˆ^zºnõâ塳ýæzI‡•
+RÐ%åØWÔ糖Î;ÇOÏØŒI“ëöL%Ç’,úÛ¼F¬>žÜÁ|á™ôaײÍ4˜m?3’V=·_L=Rx;`‚i<’kav`Ä óè·¶²ú0
+pºs*Å"øVŸûå¦ä!¥`˜nƒ³ß+ó+ŽµÐ
+çøx£ƒ®Ñãz#ú€½ãJÿy‘ÃEäºF•“Róª»ÿø†D¯11tü@Ct´Y$Á¼šGj™¯%?¼äX+å•?L¤ÔÛ˜‡Í”_´Ò#(?Êô\˜ã@¨nw"àYl™À<”w„ÙY)ª5avQÿÊ%éömŒ—êÆ5=–AâŒ*$$–-Ò{OcŒËüŒÖ3n¡÷j¦&•3ì£Ç€ÄY+÷U&‡Zg\'ãMnÿ@÷W¢4’: zvlAÚ”‘…‡’>é„Üo¦˜Vü_Ù¹šÇ};*ˆux’ÆC,(¨ƒ|ýÜñ¹Ú÷zw¹
+£fÍ6•9í]ØTÉ°bµ÷áú1K/š&‘9€‡e×¢hœj4Šß.Î[)Z
+dCŽREm46¬8Ó¥N¸ «Ô6<É,ÆÐÍÉÎæi:ýx(¥Ët8ÐËn ÿ`’®!
+¼ë0å ®ÏØ¿îZïܪc~[Q7µê4è©Hšñq‡Ôø°7ò=­³ž‰’ §™òÆú˜“duˆ?ÎÕ+r^9kæÖq槜a^NžbÁ:ÐÞ“ªC=>JÅЕd›dg‡¼]ÕúˆËz@øeaªCšs5z Q/FÐé­Dú÷8È«âX²D›íŽO@Ñ% U÷Méd>kZ|èdü%ÎÐ?,cYÎMw5ÊÃÃP|øTëZBŒåæxM~`Ô•ä×P
+Ïoé†-Ë»ç² ¹ Y¶ñ­Î±‹èÞÛ°ëÙC¼aŸèß7嶸מ
+뜻%CAÌ‚¬UV´‰Maü€¤Ï¹uñçó„áÜêÀ:œð؃CÛ(|#ºÉ& ÇëéòɼÏÈ8GÙx被 Š³p<BÌýÀ«›[¤Êñ+ÇÕ˳ž8b׈×[ÍT|­¥#NùæQߧCW;Gˆ|SmÿFÞÖil±^õãþ™ef C¹‡¸·á¢y JòëL;˜L]¸îÙÙeÂAÚbˆPAIÛdðIÔPîÅ
+×·³÷ŒAÿÞ]ÿ¹:#¥µIä
+ÑÅÛ±åprkBÙûCzÆaÑÓ3ëÌ"!²2ö]3¾v{ÌÆY­»G «Œs» Oå×náR¤C2¾&`ñNƒ§Eƒ“\ÙÍ9È&Bê.üŒ¶Ù· nRV'“BV’äýáú%h:¾.l¶CÑy%4KÉÂTÙfÝ4„T·:ùÔÖ4_'áULšj€žXËÜý¤öiû ÃÆûêç”´c§=`²¨øqªe˜ßC´Ü¥îóÚlméòù
+H¦Ö¼9Gž¸M‡ôº„þP¼¡ïÒ4Š›µ.¾êJøiˆG•Ä$ …hÎX÷lÕ-DÞßÍ›á/c;§Ü?‚Ë¥9‡l®Ñ{Ä­Æ»òni†n½$›B×:õÒ©~’Xv
+ w/¼ÞU·O§”~EÁÏAç8Q•|ðŒGÇ=gý9,?YÁ2Ë<må,*]ß»¹5HN”¤mf`!”uåIì¦uþÕÕ>2L"ôÄEñK‡æPüÚ÷AÍí"I1„'{†§³ úº¿¯c¼NøŒß_lbéøûö— m„nĜɫí÷Zäo£‚³|t0ó>ú>S‹Â™ÔRú—°zaI¿ î%ÕA˜">© •N~ú‚×-† ®2-QVçh-‰úó ýÞpܹâÛ/–¹"5vÎf—GWnT66þ8éô^úÞu¾4+k‹O
+ Òo)³S™2áØ¢c—¶FäKa·\®ó*‡©‘@èž›XsIÅXðûh‰ðeýÖ8%W6¤¹¤‹»Ü²yÕŠ½¢uoUêJP'mͧésŠêø?¹ÄÆŽÞמ+Ü¿eB*£HH:`rÀL]¿ºH.âØð~}Êη¡>¼üHÇ8š½D ýâ.ºQÞùÎ_]Ì—%×Ïت3©W$@2?d…°Õã¾Â`¾²ß³Þ׆>xÊ:ªÔý°™9•YæÒÊßÞñ˜¥ãë^:?Ü'°‡eIº¼¨-„~ä˦MÕ7W¥_ÓÞàÁ¥MxqÅß)w¾€Ì}®+È Á‘ÄâGu™.­Y6¸D£‰ý}KCîý§WçRPn"8U+Sœ÷ÂøÌûyvÝôL½3ìüî3QÁš\É–ä>¨UHC{ϊѼ•€Q¹!÷Å“÷.¼?;L9§ZšÒE¾é«v¥Ž}03|­˜6þ–ˆ¶9£,whœ-ÇËŸ­×;?zøpÙÍ„y8àŽ9Ë¥H»Ñ<TÒ>HîÍÄû-q˜˜\—1άÄ.5HLUcß|{¨8óŒòZßÔç`äô³ÁPß½Q5åŽèz”=ûŒW0zúU÷Þ r còRˆžÿžDCh-&¦)¬u#Å>"1™k–ôÿ »žÍÌÃá±N”vD#¹¢A窠›`_ÝxXÒÈwgÞ„ÏÙå 솋ÛÈK+´CܦA"Ê
+âc§x~XÃJo(¦cé;‚÷ÿ¨š#1âŽøé}SUx °f=”4+ÿ䎧õZ›…H
+—€_úØî*Ý– ·£ý7<³Y6ªãvl¤ÎݱæŒú‹Ù¸™‡ÈÈc?m·Ò†h¡ˆÕ©Åç•¥RäÍ×”»L|âÊLwõø Ρò°¤¼AçYKr¼Ï¹ÙÖJÑkW½b%òyQ·ŠTæ9æ‹Ló"$N¬½ôž‡9ȯòL¡åùö;û¿ZÆMú›¦Ýj{wAÆILTI¨£%èÔ&ëö…ôâÞ %§½(1ã:«/h•¶µôÕ9óUÖô”‘­Í¡i¬rÝxUæ¸ÂÝPÂ#á61”#,*@Š –üb±·Tx8ÙÄç{ëG79yçÐê°ÀCþ“væ$Põ`Ò匀V–ƒÿþu6®%…Ùqc†¬Ó:†wtÎì•NôwØÒPÄv©*û&<û'ývýЊâ¹!ÔA"OýMBð¼"ðÛQܸ…ÍK) z²>Ç'áØóô-oâŠÌ#°±ÛÓ­ÀD/&Ësg k7/;ô^D÷‡ÞKÉÁ¤ ŸCH-²oS<ÛõCoõšÂÛw˜´øŒª"ØK–_Š­"H‘¬ûVpÆsáõpa¡£_Ì×SÈÚua¯õ°Ü±l|ÚV±{+ wókÎ:¤6= s÷(HfUôRê¸zP¢[E  ïcYÄEùºŽsûr~3§Ÿ°3ŸMÆ?å¦T‚°ÍZ5ÕèR˜±˜rL‰buO[ˆ`×w\ÁU·?‚‹œWà&ó+Дzu(“ Ø!ÌìÅûR% 2ú§8xdßÿó <ÌЃ|Šˆîç }®rw‚RÕ:Mp’òÛBÿÉ]˜RòöÖ„½®íX((gÿ¶Ä?ɸ‹e»¿è­ÚXÄ
+ܯ*ù V}ÒD¦ÿôð¥ÎÈ
+}ˆÒçq=G/¦8õ6ÙüÍ/]Z?ó{P>yêU•œµú}éË2&@žÊå:Þä®þ;TÆ
+݂Ư9ÎÖïSftt7,-–‘hV©©< ®ÙÒ]+,àŒA‡Ø  •;…ÔzEå]þ<Ïßý‹Ìɤ C™Ñ6ïðÖR®{ÒºsŽyZÍÒ+±êÈÜôÄk´ѤFÈZ‰!FÝmP€×:%•éd
+Ü)„lk2'¨ á"€”Öó±âµ|syùͱÕe€\ûÊJ;YýMªI­‘_£ƒ~Æ1bfÓõÝd=–ÙþÅ|SÅ=UkΫ
+S­‚DÍ0
+G7ôæøÆnuÒ{«ýef‚‰@ÆÚJt'D©Ñeèb ÕÓþÿkŸ,Ûš
ÅGÕkX:gׂ še£¤xu®ôØ\CùqKå1¦g ¡lø 7[Ù²Ì4Òÿ¹[PÞÿøç¥ÏFÔ´²ÿšûI#pŒ"­ªºóöWwxN¥&ÿÊYGúéÆ„¾åoK?\aùt@½=¥¢D#UŠ&ÐmÂ΃:Kó#˜´ÏÙf`ÃN¯Ú¬5}=ÿúfy$V·‹Id”-é%#©¾¯{z²5…رF’oö¾!²’»÷ØIáMØïä†H}ØÝÖR´x`î/Æ]è›Òª^3±Í7é¶ûñâ¬Â^µñŠ
·(FLH³~å¶ÞÖ@Õ6Jäó¾xÌ0V?K£ÈÕJÑ}gy,‹¨†/ã©$þ¸Ì~“Æp\!#…þö/»-ñæ –Ú3Uv+l•EM ´Dýý_O‰uò!÷¶:) G‚·Ñ é91¬ÄdÐ~í@§q&±ÑŸ<¹¥ËŠ)üÁžjÄÆpîp ãO`6ÿÓaÌ€“Ê ‰bœ›³ƒø*Ln<rüME‰J¬#Å<ÝþŽð»Z–êÞ§é
Ö/y³¤¥6f,¹yK@ðcõÏ’bÖ3Jca~Äï¬]+)T!¿hê (ò‹gÙ׺Ñ9QÀî/LÆ. |ºy‹ÔOIûè{£dç*ÇU6j—áÅ+”S•ÙÏ=¡ …–› öHL
@@ -9145,158 +9710,35 @@ K› ÀöYt^¬evQ&57Ñ„t9Æ©‘;ØQLV2²ûËI2­U^¹¨%Ô~ŸŒ×ˆzW
p
íSß»bò7+֘ߠáænÍwˆ'£#µE°nx‹¢PšL~|ö4KQ¦–!¯jn£ÕªîØãVBGE”}œœ Žý­Ð{ƒéV³”Vã0¾ô.¶Tv‚Ì|` °SU[¸U!&ýø7 >hI£YÉì0…òÇ*껪¦úݳj€í¨ž¨ß`Ù?8sGx9g3ÎîèñÙt÷:n:—SúluHx‹œ›ÍÉPo·«ÃJAüÕh€ß¾ÅW'ˆÃô´B ¶q…¡Jˆ`“ý kaæ®´bg>–MO”¶æB8uk—ÄþÙ7)Çê®Ü¿5GVQ(ë¿P­m-FG*åTA¸¡WK2z)· Ž×?3Ì›QOl
-¹ƒ%ÔÕÝÙêjý÷áöendstream
+¹ƒ%ÔÕÝÙêjý‹´áåendstream
endobj
-879 0 obj <<
+873 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 1932 0 R
+/Encoding 2007 0 R
/FirstChar 2
/LastChar 151
-/Widths 1941 0 R
-/BaseFont /IAZDVK+URWPalladioL-Ital
-/FontDescriptor 877 0 R
+/Widths 2018 0 R
+/BaseFont /EIFYGD+URWPalladioL-Ital
+/FontDescriptor 871 0 R
>> endobj
-877 0 obj <<
+871 0 obj <<
/Ascent 722
/CapHeight 693
/Descent -261
-/FontName /IAZDVK+URWPalladioL-Ital
+/FontName /EIFYGD+URWPalladioL-Ital
/ItalicAngle -9.5
/StemV 78
/XHeight 482
/FontBBox [-170 -305 1010 941]
/Flags 4
/CharSet (/fi/fl/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/emdash)
-/FontFile 878 0 R
+/FontFile 872 0 R
>> endobj
-1941 0 obj
+2018 0 obj
[528 545 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 333 333 0 0 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 0 0 0 0 0 0 722 611 667 778 611 556 722 778 333 0 667 556 944 778 778 611 778 667 556 611 778 722 944 722 667 667 0 0 0 0 0 0 444 463 407 500 389 278 500 500 278 0 444 278 778 556 444 500 463 389 389 333 556 500 722 500 500 444 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 1000 ]
endobj
-862 0 obj <<
-/Length1 1612
-/Length2 18760
-/Length3 532
-/Length 19672
-/Filter /FlateDecode
->>
-stream
-xÚ¬·ctåßÖ&›£’Û¶mWœT²cÛ¶m§bÛ¶]±*¶­[ÿsºûíqnß/}ß{Œßšxæ3ç3×c“)ªÐ ÛþŠÛÚ8Ñ1Ñ3räÍ­:;ÊÙÚÈÒ)Mlpdd"@C's[QC' 7@h ˜™L\\\pd
-ŠšRò
-P7É;8hôJÓÏ4¢<¯e·!´ØÕv'•”õŠß¡¾Ow°8À\=Qù‘¸ø¡“>Ú!ù¥ÖÇbt¢4‚|«-<=#O<~z¤ê¹ìÛǣɉ…%ãq@$ô³ÏÁÐR«ð §‚JoBÀ»i¿ú$ÔèöÔË##Å%°–}U4Í_³i—}O‚LoàM”slݯüy=?É+”8Í5—ûµîL&æˆÅÛ„?Ø;kI8“ ]O0ü
-ôX‹ýv5FMç|.òöZSª‡æâû÷eµo® ºG¦|ß^£dìfÈ婯?ÿxñ¤}GðrçXQ†•¥ïí«°nãÄ"‘ì v¢t³íg•×ÛudkàXþæš1­´¹û±¢þúgÔ\Ô®:è'&
-yY·ŽeFÞÜÉe$WemDGóÒaž@²§—ñqfS–ô6BÙßõȽÒU?ùÏ žRÀ=²ÜçqEË4|Y²Õ7˜Yàýe•çŠuóL*”ÅK 㟠$HÙU&Ä–ÒòÈõ×€® 8ƒw}_þ×ïÝk0žGFÔÃó'€r¥wŽ—m­ølËsöxRxÏ¢ªVæ±YD
-rÆËo}s˜[, Yw?Üg±‘g x :Ë é²\<cï:—©w<5s ¡Ì²¯ … œö!±îÃøܦÉjª¥RC·Þî+~»ÌŽO¿H~Ëa&¶¼<“à­ô䊈ç¸ÿ潂I£Ÿ•æ {—]Ÿé10.ã=gVýé~Óàèñ“yß_¢‡qk£.nÈ2OS›0$a÷xb _¾÷
-'ëZ;/€Ü –^dŸ”¹\ ô 0:ŸæëFVEò‘¥0\^ƒŽ å³Ý1wé¡•>Rh’`ÛêüÁT~Ø QaZ­d
-U~-UÙ1`¿ôB}èÿ[à|ýÛ¢˜‘èþà éz]n¡·†ätœÍOîø
-é+¦ÞâwªÉ"=ÖšTÂb.Ê;9§D¿KBr•ZDIé°É¬/$h-5…œë¼_àï_æE݈P`„‰
-eŸCN[hÀÌ"¯5sß¡¶s«ÒVÛBfžáœD(˜Ü¤胢&BˆóáÛ§Œ—=Ü9bª©s ß¨nZîÉÄõn^’¡ïg^í*ªüdïfº×D°>M*|™vži­}ç`1;s~ŸNÀê~m©Ó±‡„æ\£"éc ã9D^ŸÍ1ÿ˜,F»9ÿÙªø¥só=Ê>çR³¿N§EUÝ£¾ÊPäý60|õ‘³9& x¿«é:d=ˆ“ºª¯’!êö9šu96¯¬|ö
- œÉò;Fª¥)Ò—³ö­nEä ûÆÀ%g5HF¢´`Æ÷‘1
-S4DB~Öõ‚iJìÞóex
-r€Ð5™'­§øÌ·¶YPNøÌHý ú†C¦ÝÖïLS]Ý(…3¹p¬Ï–z«ôtNzTD¨7KŒ:®žh[µg¥Ñ¤ë­‰ ¿ø˜¹Ô¹¶âÂõA?Â}û Ž>uÝ'9*Ë25 ÄÜ£ýR¹'«3Ir¿'ãƒz‡&ù#uf9¯*¡ì@ Œ÷OÑĬyáw‚ÀÙÚÞœ«‚ó—o
-s%Ú¸üf„ŸËcÉ£ç ©œ>V† x*sžlKÍ?–‰N£“í³Þ;TÙ6qoam~gfÞÃá¹b:èÅ `Âî ƒ3öæùfÛVÓT”75"úzEÒ²4Yj©sÊNõ Ñ?±Šèqu""¸RϹ·ÖÏð­f†¼ÀA'bϧð!KI4 @·Ã‡u&“w]!&$ià}ߊ½£ƒimói×Y +RÀCÔÂÙ—ð¤ü‡Ö†8ó1…œ)ÛC0H Éª­ÀP[¹@SÝ~w0æOÍ‘àÝÔ´#Þ%ì8MÖ™E
-t.Û½«½DŒ/vÄ”õf&|aªŠ«-÷­c†ƒY¨}ÇEWùn¾ß¬úvtÿtšúgÓ±ÇFé…ÁI{>2›Ðø‡¨ÏÂØ#7nPe…cÄ\k¾Boq_„t˜V/|å|ªeE2óFm<Þƒòc):¥¢@y'¿v4œ¸}!™RkÃKnpÁÿ"}ÏHj/Æ*.@¶<A¹;p`6{ü°ù]J©84~ ãK3½4¯À_<IpDK¦|è)ÍûA±¼INâ\œ%XCK e’ÿÞÇw‚è2V1Bˆå1 h=­M¸Š=Ç3ÉÜF1×Ô¦Kgy@[²¤Î1ßÒ̪ص;#=˜³8–ÜK~.Ô/j¨°äôl×·_PG{
-Î(ª`¹ «8¦Ð®2hcöuõÆîþ2}¨±*ÔcN §¸veg "…”…X×…^¾ëfêHá?v
-]›°¶wša|õ&‹r, ¨<P«¬ ¶ð.X ŸçècŒ#î™ç-£F¯Sÿ¬œÆ˜ —å¬çXPAf'ËÊjÙ
-T´Zu~¾EÚ­§HÀÖ}Uüz¢ÜÌ G}!Éj@6ª<ÃôsìDïD&©B–%êáw¶0&ò·†j·e£ÉIø’+ÿG"ºb nYˆ#ÎÊ…5Æ|èZ:éŸ_ xØ0g÷à?§û3â£8®ˆÜ˲À˜Qïü±Ç7×X¨œÞmÙCìc#y¨àýIì&†œ·5Y²M¿>B™¡áì8³h¨ûÂò0:z$X(q»®%ù9ÞÃX*´ŒEŸ|ÆB¬-$MXÜ/ƒ°I,Ø iÀ~™3Ó &"sÐöb“–ZÁéÃÝog„F#º¡séc¡Êöïpð{Ž‡Lã³EÔ]¥™PÙu`Jvqíªi‘0ñ}ÅóEëg2!­Œ:¾~¤ÛS¶ïgãÞ¨e}èGóíÜ+¶býÂW¦âEñ%,ðÑ„ U |έR †÷Ó¸ ‚“7|Y0¦¡ÐŒ`c”h"ï¥]$¯ÙDøy–¢U”÷³*Ëö;•»°žˆž½X€Vºi<„#ÑÅÒ8ù³‰·5òNéK#Û”îËÏNï‘r®[nXôf$AO"Ý–¸SVµ¼7ê^Y´]VsBe÷ ´g¬KI^¹A5Çr &&# zK½q*
-´ÂØ÷þÞŒ4à…÷r Å› ‚$Œ¾£Q`ƒ-`¬×ðÇŽMéˆüyÀœJØ ò`’…hQý)*¡ $ˆY
-5Ëñò­Àóv3.]”T'‘™×_ìÎ"À<aôàëÁýXø èÒˆÙ¨>T'8±ìƒJÕ2,ί„q;§oék9ãñÙ^¼è½þ#±ª‘l VgÈDÝ/tHõÿ¨ÀQ—Œï±<=fYM[=€7 µ¡éPÅ°¯qdt³a³
-x^ðÁ=‰/‰Ž³'Bhùb£ÏX‚ghÃF/çœBÀî™ñ(qF¦ü¦S>à6æŒ#°ÅóŽùI4MœÑb¸ï=pû{níÒË%ˆfcY¨¬×¿þécaöyqÌÝ1¯Æ ì—n7
-4?äÀYÜ
-Yت^éιAÈ•Ë5í
-Ñaµ+Ë“º±\‹0ïdÅ C´Ð²(Ó©Öצpy§’éÛ …oû x#z–ÓŽú­iÅ6„_´'Æõœ¦?óØ&¢6ºT&V@t½E ­B:3ç|¡7›Ãù)èq‘ y#釪sfWZâH«abzTÆcóY!ë>=ä€Ë„—ö†ÅŒÎF1-Ùòò}\Ò|3GŠXi
-TpndØtº7ù)åç«sç/4ƒ8ôÃNE#.VØjÑ6sÇþ·Šª,o¿¢N(Þ-Ú›:ŽoLªḻ9ö8èš?&f¾>©¾*æËäIâ~‹zÅ}HôäX|]ˆ…–5Ö‰¤õö3›‰ø/(‰[ï ˜Vîb6ðÀ—ˆ¨ÔÆ¿<—ªîïá
-ï‹i’6RNbl¨°› (¾/`Á%àÁ¶
-èýJÇF@´ø¢umŒ¯Æ8|‚…$³(ßUH§k‹ÖÐÓà ÷¹eeÕmÖGJ•#𠜶k%ââ];$ÖJt ‡Ÿû?`ö„i¶Iq~?•°©Âá/üªÄÕÎk‰ÎX¬Êù˜³SÜÛ¶‚ÜHvòÅ¿¯ö—Slöèeî‹*bN¿ÿe¾¢\h¦µð®ŽRöã
-oçë÷¤¸Ñ^u¯LÇåô¼ë‘¡—–‰È/º¸ïr£ìu_
-¹ÊGÜ.×÷ÂÌ?áw…_«DP×vÀÊîúðMEi‰Í;èÌjêL¾ÓÍç¸×l£ÖJáðœ4ݘ$í$©QøRdàdzFaÆ
-±aÆ°ö¤ûÐq#Ê õ;–>u ßЂÑȲ¨ûÜ î(x­Ô>|»zsÇöMïÜÚ ¡<£²€*¬R¶nè«jt¤g6ö!;¢
-AQé}lߧ‚>œ'Øoy=Û“õÀ!»šp£v SO`MÚ
-ÂEdqðÏVŽ<[^/à•‚³mQB(ÉJ4åïPÓ%›ù5`¦—¼<áN]´ÍrªuÓD…8#¯U…ÑxšŒŸžþØë$@Ñr<M´žöÐÙñìlDîå®
-œ8ªm²IŽñÅa&2 i=-ªÜÿ: Ž}aÌG½o_ˆ<­2smÔR·™ß.;¾ `¾sð3¹]ƒß9mg!€fLÒ ^R„„>ˆ ¥åpT_ç6þ3$$mýñmmòk ŠÊƒ!7gN?¥÷Ó
-4“R¥VU»4¦^¡ËþõúB–üLJ#£·nγsl€tŸh‹P¢ÀB¯B¡1ÔÏ’‡’ÀmA8onTƒ¯üàŸœŸ™@©5Ý£ m>è|Ìãé$Œè8L¢äë×RõC™u´„î0a\*;­A° 0‰ì…ÀÏ?'ê=¤†CcÕ×ÇógEw{ñ§X<¬Ö«Î§¢¯‘Ö/¬+±]éÐf¾ë{Î"²Â.`W_‡—ú¸R2´  ¬ ÑßèûnȨ÷„W:È%¯Qý#?‡uÓÌá†8p¶ÄÖKê"“`t@ º^õÛ“TºXÔ+©eÝy,NÄ™‰âJcì³¾ýóiówh²i©1K½à#<í‹6uƵ(E
-¬Ç¿Ñ¦‚¤E(#ÍËŽâ~qõ¥]ïãDí
-zúÎ}™‹KŠcw|¤ªïhu•ëôSˆÆ¡ÐãË­„[ö:Ò-DqnFå†üô’êP>Âz^ʧÁÒÀ”¬Ì»›~–[T¸4عâXïîif%ŽE„óN˜¸þÒ:Í“dõ¡#d©ðº+†ðŠÊoFš{ÈY_5¡»$ž…Sr25Õ¼îà>Ó ë°+a“^r8Æz5³w ³„­JÚ%uàÏŠŒ²¥oŸP,ã¦8(+{(š\‚J)æ}kŒné?op¡Œ®_@U<º°4Êßo‰ÔYÞ<ìaÁ ŸMˆ§õcDÏSÆ)ÃêNiñZMEèG5­:—ÜüÂ.Ì{á¥Åu[R½Q0È›®iÔú#ÅU·@„ñ`lˆ-gb”Ŭ\ÏŽXIP'°(Gý³»`š˜º„€B@BÖ&íOrÒKn°ÉŽ‡{ûgÕ.V­„Ó
-.^7=º6Š2#0 Ÿ“8uGzƒ)?&¯~Ó&Î^
-)׆þ®ì¸}Ÿð‘„¨ÍŽà”ÿâMµ3ëîDþþF·X#›Vx„¥Šš9—ÅÁ¨¢S@§¾Õ§+Öf.;™•óÛtÆçÕÍ&…¸eýÁˆQ³ý Qi†•hOr{jY%ÙJw¯ÂT„—lFt{¸ö81÷(Â¥…ô¶äÃÊòûb2ÒJ8cá”ˈÒbÁÀm¼J&­Z‚A
-Õ!R3|´î|ܽ$uà×­GY‚œ æ{Âx¡  ~.œú&[qæfôð†hZ³O D_‰Ã`z™7ÊMìòMA•WsÕ [ž„væsÅÜ!ƒØ^ZÉ»‘wïFÞVeGò‚\l¹ÑS\Ÿeæ"þÌDnÚ‘15Nôz{ƒ¸Yów0[° ukz?¡Þì%¥
-Ü0†Ç/OLj[É|Z«×Ûž<Òí°4ûº ·Dɇvk5A´oã ÌtAÔ”
-çHBžO+Ú‚ÄîóÎ"«g,Ç}õS?3Ù³”“´§+Ôö·V¥+ÂÜÖ/'Ên³÷^ö/€Õ…Óÿ곕µ°€ùÙ?"0ÁAÉÃ\(à-ŸÍ¹À/¾7mù±y}ýÔm“ýmùkìµ4#±$ß”
-¢0ÓžœÇ‹·z´RÒCfwMÎ-‡Ý ’օʹºwvE:…n6OAÆR . ½Ã Kæÿ>©´‹™Ü¾hiÓn#Ç*ëÈÎ^ª ‹{n„œƒ|Q‹évÝ 5¼ã›ènB uv%ò9{d|ÞQP>CöŽŠß$qˆÒÊšÙ8”Ç­š¥«­u#Õ¸)«Û×¼¡ëSœiQ¡zJõÏA*tµÓ¦¤§ 3;Ûtès-|b~0~B-Z)ñBšª©*·?ƒæ–+[L’0o!ìÆ»UÕ‹B"Œ¾ªÏ5jdÝi·©dVéc]Ð[æa÷Ú(i³ ¿=ב;†L íu߆+YÙÔ¯jÒðoAs-á÷!Þ;ýÈž8íöêš«Î~à 0 À„
-Œè†²}­°[^­ÄÊ"<TÞØ€êä£jÈq˜`iNe“äR'l¡' Iß<N³NK×?‚ÿ’Œé ªOŒÓœÅçÖ“© <À ½2a´/êZkДv{²Y–Ú¹¡u©¡ BÍøÒŸnN;‘ÌøÈ¢+ä¼ÖοyKO€|DÛ/à5€" /‰)‰‰•ˆ½~» |fkYѵ7³C¥¼°´s›Ôªó`(4_çÏ‚5ܯ3·ªôF3eê)¼õ®#Ù —°mÀâÜ ‹¯aÍ—ó¿O(2Wr'ž~ÀU‘,ã€
-+
-Brãx­€V¿…{x=p m9‡ãCäb Á¼lº•ùWß Ç¸(Nn@¬vt&4Å03§Ø=: ËI{ñ·A
-º¶ãúv$.yûK®¶”Pï By-½Ñ‚ý·¤[€¼?.à~ØŸ)¹aynË"ª ïèQóVQ"WñÈvö(W«pßè‚U‰ª™0U7šùœçá.¸½Ns˜ÜïKQÁzbžü™
-ó½ýÙ ÍËF£jkN°3½WäfÜÁ)8+í':º/¨%²+žG%$Åw·í=¾tÀÜ~ÆéÁúäi*¨ÐuÙ>lû2{†X’GVM"¹ï§¿äØÞóŠ-I¦./q*#Ú-ÍÌûS­n®Þ~¿5f58O&Ó=ƒSµ@·ŒVÓÃܧçOPkÓÿ hÙ)&ÒªîÏWfzv,Þ6ì,Ïp¸êÉã7­ ‡ixÔÆ­SÆ;Øc¹}¤ÛUŸV¼ðœxç.»wQ~ßÓJ3CÙNcYB»Ñƒ¤3Æ›õ?­ÔæuÅXŽÝʇÌ®þÈ}‹b×"¼ô)ÿÆ;Ñ€¤ˆÍ
-Ú‚+m.'ª®ãæáLVò ÊacL-À³…KË+@±ù~àI mªÎw3$‰/pKx÷ÛNìv þB ͽ2ÛÏA‹É]`Kmâd¹êuW‡¶oŠ\ˆ©/QÙî„„!'Ìqzî¿æÞ`rŒjéÒÍd‹ß”¥
-¹•úÑÅ0v ñ>R0Þ{W8ý34®H‘ó£îH±±­
-—0oj+tóH*ßj<šÊ¡ÁYzdÍ¿f1hJãg<+ïa??Â…VMQ·IŠ´Ö`ÁÖK)²jâ‚·8óK×…
-t‚i]ÕܹQ7•¬¶">ø'2cq’ÅuE}sÀ£e9L&„MrÐ`yOCÀ´ó'{›HPO˜ÒoÅø8ì»n·Šš¹Î1è˜(]zš¦ÊÜ÷ŒDÈQ–Í’>¸iŒYñvÃ×LT%ù+0&—¢1BµUkæÞê«–Ì«l
-¶Û2g§yö$®ö*Îæøe"'WèÖ£“C N1.-ÖsÛòQí5rJ÷ÛYAQ&¢V1R7Œ¾'NI,Ÿ*˜å~Ƶ”›~÷Úrò9!ˆcV†aCPµO;;PÝÌå³(t>ƒ ¯ì~0Óâ&ý¥tdW)T?&ÔzISÆ—µ Ñéô9óóŒl|—T¶·ô¤+NÓÄn“4üÑ«#éÜ‘ñÑÄüÁÉ֕aã_.›+A¯@™øêSÈ3•'üp‡IøÐÌySzùO ‡´æìÍ®¼Ck;ë2O3Ô‰áy/sT²—»ŸŸhŸúĈäomg…Zˆ­‰fº9ðþÒnjĹ.&i&ß7AŸÀ’\aö(±V­J¸ãnÔœm> ØŸ) þêy…ñålkMO¸éX8VEdàŸs][» NÆoñ3F_ 4å`}†v,ïˆnd ‚ì’تLÚB+;1‹h²QÀú·î´¢f)²kß8OÒ# õ:‰É°*NøG0Úðž{Ï·¸Gâ3]ÒB]ÝãŸeõÊUút–Zä¡ÛQ*He'3u}š&ºaVÙ0nÂ_å · Ø5J泧Þ;R~&ôc5Æ¥:3…/ïì&Ó¢.AðáÁÎƸÃÄžR¿nÈ€¦ã~E2Kâèš”¾³klÌM"÷mkòù¶Bˆ)™öøï¿¿ÓIF{/õð·לuù[Š“‹ÜhV¥<õ!1QÏG)9ì(Å¥ ÒtM ËëqÌõþ¸]%tƒP]¦ûtàÆ&Ks:!lg‡€†)®7ì,èøÔ:Åaäæá·ãäQùÔò=•ÃýnÙ,×À­¼kZ^IºgàÁô.uQ³÷ },Œz“¸»•dA@{â^@±ÝƒžÅ&ýþ°Æ¹rVL*ç‹jïRf§ž¦|ú¦ØhwFjPÜ{tnã𠞸Â1LM‰ðg6þ>¬€ä¨è!³ßO’N·3PsÞvz¤' W›Bb×÷d•ª;ì;Ъ"j7Ž”‹98ô©å,³ÑÕ4ÛÕ-뀌éÂçË+[ã®fΠ´=5"ëO_Z§ÝQýJå÷# ;~Æ×:¦ùOuP2Ãþû9¿™Úã†ß°q¸D’!ˆñÛü"Np G“ó TI¹Düˆmu áê°q¤boówH/Xâ¼¹vbh™‚79}Øži• 0!5mù'p¸ªŒÍ-ÖЗXéçQdrîá•fè÷ëåÞ1ŸdÅ˛Σã…ê(?ÞOCüUd;â±ñ.&- ÆÍ á©UÃ&ÄlÈQ¶œFWü ÊîG˜ç;!:XV†à Ž«¦g.šÆÌ" ƒâÝ`”Âp¼](G¦•|ªf?„ËÄŒjݬ~h2w|¶A™¿îÇ숚ˆ‘u #S0g0XÌŠo æ< ~°fC1å¹TËI€I¯v8ì{0®BôÂPœŽì>@;QÐÃ'‡³ †êÉ2$¢b(ŸÜ~¦r Ž}žjÈê 6G\æ«ëVáÃðšOD©h#Œir ~7úsaóÊÀ?Ô³©§²ÆÍ9Õܯ»
-%*RŠ 8$ ²Bí¦®ä[D¥ªÝ«ÔGÆ;üÑh<®^‰¨´ÑE—@$|ûÈ89O\2¾ãw3ÆRæò…iŠR)ÇäN(˜$ âBd ±ÈÔ: ¤cCœšÒ
-БQöw>}N·>¢Z[@ß HÀ—ÞäN—÷“$wŽp»X0õ•Äƒ<±´Áí¼sÎ*`<Ñú¶øAF‹/©
-¦£Ò턳`à*ùê™>÷)›td¾ñlË•]“î×=í
-9l¿»YªjËŠÍa™°Tt÷W.™”Õ>/žú„ VݪdspÏ#¸îú§+^üƺ§h¥ÔS-b©\LÔåg› llª¦¢,#Un¥`ÙD2ïÑw^´îWƒ…jžÚòHƒ,ߣ4i´Ø$ƒšš4œ¤c„\œÐ9˜n³žK=F™•S'a&È6cS4 EV×#ž°Nšy’ QN¦]ˆ‚{4)gáŠÈZó±ñëÛ¢¸$¶§”tÖ©ç< K·fÐ2o„mê„‘iª:Ï”)Ðö¬ ×ø,m/@=ÉFËi‚tÖ²$Q."]å+&•²jjÄD™Þ}Û­n38e(Ö²õ²·™s,ÒõáÙĽëÃîñ¦Öà#”
-, kÉ÷´éhÏ·.rLgâ×hž„—pZ??ÎË;@·aQÞ¦fÍ‘Á£˜ÁüÒ,_g+õÇDê–[ÖË`lƒÿmjC“½ µ‰¹ñ•«ßyÁÙUe°M ©P21=ÑAC6R²ãxÖ¢Ó»ÌiI˜µnþ¡twÙW|$Ø©Ýv;Œ4âcƒäy.,üôFÖm@Ë1›ÚÜÒS½V%¥ òN)®#ò÷~H}ç†/œ¶C<ZÅ-#©óô;=Ôg…æÙVÝæ<T³4ä5ªhš íIRaت¹iýjÕ{Í!Á
-ÛhÆ‚p!Þ 7©ÃïsíÝ!³Vðû”Sr«­r ÏýØÛ 6ç¼ÓÆÐè Y2f@Þ#'G*)†ó¬£sHj†AvÙøÖ£œw›ú<K%}9©CLû2Ý~a…z
-¿zN@â{äye‰z•¢tø8h(òD¬LnbDw•i±Ž™1·mq±’™Õà‰¼V¡ØY`Ta}Võ–«Ô+@<‚wàGô*”Ú3·†™èÊ×ZO@X@eúåé3Ÿ!U›£×øª·ü|Nú‚,=[ÑLšH2ŸH÷’3?2Ã<ú1øŒÞ|/ÂM'6¹ÄÂæÚÎ[»Õš¾{/".¤´oIÁ®x¨tw!g;ëÙM|@j²†l»¼!9û–ƒ
- ’â;ŒºÓ/I}hŠb@xž¹ß£vÿ¨É•BxÞk_Î(7Œ˜
-—M±ñdr%´/™&HñæQÕ´+ y–›=PÎ3këЗìº;KNrÉ CMH°è-ª»Êìü9!… [ZÖ´DvI—4ê!\†Cj.©­eœ’ 0
-ÂJY†Z†ûš|ý4-¼©‡ôÄÖ/äNø&vL‰¸y)û÷oæéÆ¡s¨Fâ²JJ–à!`²K-TîÍ$\ \8fÇ®Ÿ™ºˆ¤]z‹9L9‘Ïÿö4ÆðÞ/Tþ&š¥ëÕŽÛîäHŒ7ýø1ô°’ë{ÇnŽrbÍ¤à„©7ëã!ÀÎ|#^ìñ›C§.Öçì1Ê"‰ >B÷‹=^Õäìb—bu/ÙÒXÄ‚™Oå§kY‚O)™:&Bç|i¿ôÚ¸rŽ:7q.8VJG±Ú–=
-¼œggÍMÛR9éà½Ù»T¿Ø6žft»@ã.‡±v¸g8ËÃ7ÖÇËñˆùƒs‡@JE¢ ÌL‡²¾ì§£é-ø?ÝÉ8݇uÊ I·ï*"3 Ò÷ËVA¬¢Õ- ¡Z"ÞÆmU{/)tŽÎ›ð?KŸä~_†ÜÙš Ö¶lâ’¡n˲aþq+—ôú¨¤ë1æo/+žQTËq&ÕHdn„Ô¾u ˜Ñ­-ëMåÇ‘sÿÉÅ™[tœ¼¨øµŸÀÄíÞ®ßPx|òúËüá‘æ/¨-epsƒÛ;ʽQÊeŽÍYszgÏLf²Ê%—â
-‡3¾•þ4¡´°Ç4s©Ó(œ#qp6ß ïȈLÞè¹xÌ9ÿ*Ͻ-+\NÆ"ìÊלý 4±ëè“B»5ýû/VQO‰Aüp ÈÄ@ˆtö·­ã*EÕV0µ¬7Vn¸¨bÍ[u?¹CöuJ4,Òk|_Ë­|Ïë2•`k”äÅhÅEdÔ<üÉgÁÛ{Ôrä5ø‹›o{Ÿ¬cy¯£ÓJ¥Ò/âðÉÞ28Ê8®9!úzÕP“¤¨x÷6`1©ÖÝ`¯îOzó€Xú8jvƒXq¢™°£»kÌí²¶¡‰2D¾ß•‰”uaôBAwõúà ‰¿
-€ÞŸ|æ`xFÎärãiwÍBÄt·Ñ9”kE‡-ñL¡•´]^`ƒ|ðv?B@ÕÚ,eç¼oì.9‚¿‡ú‚8ÛƒïûÝ
-2h°Ø‹­ˆÓçBJ6 rD÷ öy@hÓ©A˜orÉbo»­]hdçb;é^ûxw^c»{$¯öw÷ª(:©]Bæ?0B¨Zt=qsŽ»_ý¾$UÎö×ÐíT! vMIöM»ªéKk¦øy"Óî“hŸQ¨¿tHg½Å#v³ Ë¢¹(^Ë×"F¸Cáß Úï~µÍO[ŸåÇ•ÖZ²Æ~!íg‚dö¯hÙ¿¿«ðÉ×_j¼ºÞÑñ¯EAåƒß€MŽ›_ô?¸M¼½Ñ¹t~ŒÜ+ì SVáu¤T…r©¡l®¥Uƒ0P;Þ‡™OØ~uLáÑwöÞ5gL›É+Êj/1ˆwv_›Æª¥µ[þ±žœh…{eóåa"ë‡
-É5w½‚'☺²¡tg‚ÉGѺÐäQ`Æ9vÉlpúÿÖ§ÿ¢^ʆÁ.¸7%Ò` ã±¬Fœ}a<õŽÞµªž2Ȇ´h¶”RÒ`k‰ÉÓUúÞê¤/˜÷¢ú¹«É«¿ð\”)$q‘1)Û
- !˜s¥8cs;ªÄj­ÌÜfºô#·Ãÿg:‘s2$Œ©ˆ×6'?^1„4=Wk¯^éßÈsê&Ù¸e;ìðìÐégªA¬½Ù¢vXþ]ïz¿Y¬ÍrôÞ=
- Þ?”XÉÙTVà†Q¢›‚3=A(ÊŒ®?Ît??xnkà1›Ô›ÔÚ äŸA`ã×0滬²tôŠ¡Œ»*!ÂFë¾ÈÕÁ(»L lô-eFf×Å
-§,Éù¾Nª„8’sŽ±©U WSi—³¶,keõ%ï"‚×cQ:Á`c„†3p› Ò£ïט vv„_Y†)„A(@n`'7)$P²tJíòkÓp? ¨OÝï°¸>ózäö o"DXÓº3Êlª‘ûÁ†êÙKß±6ÎÀš9ŒÌ9‘ 寧«Ÿ#Áâw©üljœ]rlXÀfñêjéÙÖ ˆ¹œqwLLCÖŽ¯ËAŒÍƒ•è­0|¦·Ý¢fZ/Ç
-qH {ÃŽÆ¡I<Ü“QvÏÍ ‚TD†¶ßûu|s˜ÙöoÜœ¼ •ÁáÊË—1™­.·óüe|î÷œzzE<wèÙÀ
-L¦zRŠÑФtÔļaÇ;újwÛ³
-ž‘ÊòüÂœNBMßL¢váKÀ$¸èŽ`e2s®5‚}ا:Yo
-} v³m"ä¿â¶O›‘%)6HMí°uÉ]²GTšëseZ,Áa‡ýft{ñ«èÉÀ¡?*Xù å¥}’lºâç0íùË·=öâoÆ,˜ÂpÈ~“ œ¬L+̯Ú÷;Õ½²?¹®$Ó wï¤Á,í`ô‚
-ÍøƒRëOIz6¥K1#:­¥¬ìÃ4›çTPb§qø/:ÙsÉém½ É*Ácîowæ\·‡t‰Èâ’D…>Ý³Ý U1d•1°Æ½™Ä<‚Ǩ‹Ç/œapbÑþ?íÌ÷?
-eËè2R¼ÄûÛûyŸ?à ·Cžtж‰ä€¢rªØt°W¨ÂÃ^Ã>
-ŒÙí?ÄSËÜ·7 ¦Mwv½ r#aCp ÑÁ¤»Ê«Z²â™×?åYó›j‚foM¤Ž¾ïhWò÷%Ñq.4ƒ5ÍÞóŒ®:žªFï€uI|Òxóstóår}¤‘(º…íOëËD›ïö0C³Xò™Ï­mtý#¿#/OÙÉU5ƒ|¦ðžË%åOŸ8+‡!ðÕÈïÆÄ»Þpi¯ÏÊ*ÓK(’èÛ¾½ÙR„n9 ½i3Í“~i/]L‰ÙA•+®ƒ¬-ãÐúˆ¿”X£Ôëë"M3µ°hónf;ñˆYþÒ$qW½ÒG_¹jcR2š×»‹7¨Š}r ¼áègJ?%Lë9bBú<–ŽÌ&f·´È’Mµ½>ºç|lÙQs-
-Ï7û1'»öoσAü¬¸²a«Í¡K-é¢äþ{." xÊDï ùÐæI~˹G=Ö±?‚§>Èyüñ°“NÐ%îIß×µ¿è4É^)Oïä¥ç¾®ÁÉ’F°³¥1ŽžzÓ€SÚóJîi¸g_ ~`ñ›1E!ûŽ±Ö]Óhcotí¿AàçUpö„ß*&"-š{~gò&ú{ …rO]ÉOœ…È”[‰„î£-•;J×VAЊü$JJX&Ê×"é 5
-¼ØñÆV¼_±  ’™c€AÆ
-€~g´¦™L#ZeöܬðrF
-¨ì¿öžÓpÇ£†äH¶Õ2Señϵt(å¶õOÖt†Ò[ \„¢73}ñƒça-ø{û9…Ô8‚Ãõa8K<ªä-™£UÍZˆjzìɲ¦Omuã–‹
-|BÖÝB|kæZÄ@ºÛt7B5úÿü¥/Òµ׃1šòò‚Æû±®¸—ÜQZÖ¿S^©Àþz?§â7*¬UÌ‘Ž´Á9a¸|ø2DyúQZg‰?D[á4m|‚B–*õ¹÷kîìDRºÚ0„¾ýç–É­wó~ýØÒPÇü>?
-»ë~÷aœ¿nïOÝp}ê#Æ)f’’¦„?BË`„ú ~R(hà'Ùç¾óì ØÉ»žOÛšù.»ûe<™“1êÌÇÒïÒÂfÔÕóÏ“¤òÞ!°(íTLÈÃÖ¥råúDÌ|–ÐÅ8Gä|}¥|è+ÏTPDpƒˆíJN5ª,»sa}èàÝ!/ÿhEî:±‰–ÂÖuL¥èmzÍŒÈ%áØß+pJ^‚…®Ù†V§óÕ7ƒ° 3¡‘ áâ9zU¯Ì…‰ò;é–Ÿ·(Nâ°­|&=×ÝÉEr4GîÇ4ê˽/Vñùén :,'劘ʕc(x^µ@$<B'Ϙ½23n
-ͬm wðôš].{aëyjø0}ïuÁ¸lƒÁ'ŽC»£"éƒíK±Ú¢@=Ñ~ºÈµÔÁ'pî,¿,Çî×/¶'™¯æµ‘Ʊiá«‘ œGäÂôÞtµoyOYú÷zšH™
-ŠwêˆVM¤¬Èôv£äGÓtøu #£yå\x¦CžšƒÇŸÇ˜ZçU.æ@ÈÄôÄe²˜=æ÷ÉáyÜuù^é"HÄÇ׬íôœ™Í ®h;@‰¦$ˆ;ï¼ã>ÛL‰†¸æVìP¤ýÄJÍÏD{¤>pV$QJ¬©ô=˜Ð9 Úp€Õâ«ùD¤å0ù_‡b>éRêVtÃÖ ÄM
-Úð­,6äX€qÐ-}nJ®k^¨£ô@l€¼ÜI>Œ˜×TqÅOшتxín°úâ…õµ4JÌäÅV kw¨Š‘þI’€¥¤\°^0Vò˘íep«%"h* ê mQôB±Ýë“ÙÏXšEÿ¶Éµú0üöA•ÚªÏPbÑËöê6EL7‹:Æ6
-ϥ
-mŽ[A±Ræ¦ØíŸeµ1£¿YÝÒ~kð¢|Xžë,|@î~èÒ<¦maöè“žÉGJPòíRWù˜ž ‰P ŠïMÏÜ£Ëÿx½qì’‡î“ü\Ÿ,³›}ÛÃë½E#û¼ÐÄ!áosA8G'Ñ´2›_ð‹¿Ào8V  qqML2ÔËÜIVœmá\©ü:’P -wÇrµ? ²T§‹ÏlKðKáJì}Z%=|Ó˜~¹´ê¡¿QL-jÅ¿Vq†/¥ökåàM×±Û÷a”÷1•£Ôq/dWµ8à UnˆÇrÉ•Ü “6ŸùÙ¥»R̓AczCËSåã§
-endobj
-863 0 obj <<
-/Type /Font
-/Subtype /Type1
-/Encoding 1932 0 R
-/FirstChar 33
-/LastChar 125
-/Widths 1942 0 R
-/BaseFont /XFBGNO+NimbusMonL-Regu
-/FontDescriptor 861 0 R
->> endobj
-861 0 obj <<
-/Ascent 625
-/CapHeight 557
-/Descent -147
-/FontName /XFBGNO+NimbusMonL-Regu
-/ItalicAngle 0
-/StemV 41
-/XHeight 426
-/FontBBox [-12 -237 650 811]
-/Flags 4
-/CharSet (/exclam/quotedbl/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright)
-/FontFile 862 0 R
->> endobj
-1942 0 obj
-[600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ]
-endobj
-746 0 obj <<
+778 0 obj <<
/Length1 1630
/Length2 15892
/Length3 532
@@ -9307,7 +9749,7 @@ stream
xÚ¬¹cx¥]³-Ûv¯ØfǶm¯$+6:ìض“Žm;éØè°culãëç}ÏÞû\ûœ_çÛ¿Ö=kTªY£æ¼îûZ”¤ÊjŒ"æ¦@I{WFV&^€†ª–²‰­­‰9ÈAžQÕÁÎð×̉@I)æ 4q9Ø‹›¸yZ@s€8Ð ÀÆ`ýúõ+%@ÌÁÑËdiå
 ùËAKOÏð_–\
ø›UY\òßuºZ™¸þ“Ûô8Xüõ4w0sûgKÿÂþÒüE]M@ö.
-`abû·Wÿ²kØ›mAöÀ¿šþ«
+`abû·Wÿ²kØ›mAöÀ¿šþ«
™**À)—PHW£B¢ªU³m·WÛÔOrí]VÉ• $«ùqyĤ"õÂzŒf<0ëûë£Îðf}/Ÿí¤>bêFè,VØUd‹ÕƒæÔJlNÍo’©+¬OXÏ1Ï-¼§c-NÂ1ipÝ›í\AÖ
úêì`uvdé,RHžê$žkK‚>&Y ¤ºÛ”OØ&â„o™kâÆœm§Ù WëÙÉ
¨œ/û«Ð[BÒó´`Ûtä¯äÍN¿GfáĈHªýmVéDÇÏ“Ÿ”Ä÷¦Y_kÉóÍ+èü1pÇÒ¨åÁ³ñÂjD•jÊ
@@ -9369,208 +9811,210 @@ MIª\ÂuTØjGI-gýÂÓ–GâydføæÅxÃÃ,oÛ.رÌ*_ùSÕúƒóØCkëÚ™­¨·>]ÙrÿÅ:K¥ÓS%œx
¿n$rÝ XðD˜t ÎõÓ…”2§—n„sÞmOÆ„ ˆ;²ÃßshuåU9ñÖ&;y-sõP~K*ªÅz4rnp´}ª÷œõ)RB—+«å—>¢cI£Ž¹w× éhz€Ì\mm £MúHþ×<×|Ìï­&‰ Ÿw³s£Üë+\?VË´<=yò‹ØH»M'²ñÑ67Cøoí+A5x5½·x¯'_Ë
c!vÜ~óÓ4¶bIpµP]ãH^ŒúÀnkLßYßÙ„æÀ,•‰)tCœrÀ‘ Çi†Ï±m$hýÈn.ÿ¶»öO¿ªWÂ[–{OFChÓ'žWùÆ*6L‡1±’g^H]u Ââa3ð¸g@—TÕL_1@d7¾ùÁ“†µ‹Œ:…‘XF.ÿ§Òfb1\ÄñSÙ£Ö®TÁIS ÒŽã{9.´ v´ôPš_$ ƒºÃ™.T€Áj”¤RÚ.zàÂiXÎ^;-”ûkwå0HMKyÃûSc-‘tkâôk'a.*bí Û¶4ŠdÇ&ž*qÉŸX‡ÒÝÓä"c°4 *+9‚3£
cáE¢Lg%ãŸïÁó§KíÚï©=ëg‡~Q)œu‘Še7@ô`­¥¡c˜„s2¬ìe/ï´Ã÷5ØI*·[ÔrHîD4;"«hntRÉ´c¬¥ŸýÝ„u å{ÿÁØ }hë …
-¯41¶{ºQµÚâl·Pãg;‹($@QQ~:ú4¥ /麞e„¼æª't“Ê>~œÍÆTÂ={š÷ÈcW ä­ë6Å͆ÇIjË‚¶{Al ¸¸ ²œís è¹”Lª £ÈàýÞùqœöÇ=*Y€þK
+¯41¶{ºQµÚâl·Pãg;‹($@QQ~:ú4¥ /麞e„¼æª't“Ê>~œÍÆTÂ={š÷ÈcW ä­ë6Å͆ÇIjË‚¶{Al ¸¸ ²œís è¹”Lª £ÈàýÞùqœöÇ=*Y€þK
endobj
-747 0 obj <<
+779 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 1932 0 R
+/Encoding 2007 0 R
/FirstChar 40
/LastChar 90
-/Widths 1943 0 R
-/BaseFont /RBWNCJ+URWPalladioL-Roma-Slant_167
-/FontDescriptor 745 0 R
+/Widths 2019 0 R
+/BaseFont /JYYGJL+URWPalladioL-Roma-Slant_167
+/FontDescriptor 777 0 R
>> endobj
-745 0 obj <<
+777 0 obj <<
/Ascent 715
/CapHeight 680
/Descent -282
-/FontName /RBWNCJ+URWPalladioL-Roma-Slant_167
+/FontName /JYYGJL+URWPalladioL-Roma-Slant_167
/ItalicAngle -9
/StemV 84
/XHeight 469
/FontBBox [-166 -283 1021 943]
/Flags 4
/CharSet (/parenleft/parenright/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/X/Y/Z)
-/FontFile 746 0 R
+/FontFile 778 0 R
>> endobj
-1943 0 obj
+2019 0 obj
[333 333 0 0 0 333 250 0 500 500 500 500 500 500 500 500 500 500 0 0 0 0 0 0 0 778 611 709 774 611 556 763 832 337 0 726 611 946 831 786 604 786 668 525 613 778 722 0 667 667 667 ]
endobj
-684 0 obj <<
+716 0 obj <<
/Length1 862
/Length2 1251
/Length3 532
-/Length 1860
+/Length 1861
/Filter /FlateDecode
>>
stream
xÚíUkTgnõJÀ+Å€€¸
-æ2@ Š&X4-w¤2$H20I0@(PÁ Bå"Pi¥´^€ÊÅ`EÁS#BAn¬\uÝôØ¥?wíÙ™?ó>Ïó½ß3Ïûó™™xxèl$vF„bHi€“«÷A €D2ÎÌÌ …!1îÄ0
-‰¹°
-`ÃÉ Áö‚1'ÿ S+›;Kø|7H°Ø~)¥¿ð€Çz£@á1Œ®F…+¥¾ð²9W˜Í“V²L1Äç±èÂ> @"ÙšºLðDÎ<)Ìöà‰Y\€ñEð Ù+­`ñ-!Ñé>þôƒVoæºDz@<¡xT8 ß©—jð]¥„ò¤@
-Eá°„UT xB6,`)æ˜D"bl €Esà (nq¬ 5@bñPf-NM¼È.T€Œeÿ "S0 …X0æü¶~/ýn‹áúÀ2À
-³p½ÝË!)4¯:¹"ö³s·¿ÿ€¤õ¢­RÝ«ÙìW›Ïcõ¦žõ4 —Ž+¯—ãÃúŸ³Nꢗ 2ÜÒ¿œ.ѽp%­¨Ü/+žÚDìñÆG%¦ÉÖ¼²2eÊ#|N|­4¤5¡Ï|³m{ïô¶¸6³lÃÿ\ãÜ`·öFK¯–¦›ízÏk¼¿ 5ð¸sëdm\Þõ¬‰[÷\˜x‘sš¹‚ã¨< Í>Âr"
-+ÏzË]•òˆ>{~½{zS€ô‰qªiŠÙ³VïréLZ¬aÌï7Ã5ñwRÇ2Šg¾r×Â53® Ü–']W’2ã÷6»µ=´æ¾ÜÜfå&û(„<h½êâH­A{è£?W)¯Uš›ËbŸ—Ca5¹Æ{žDG|W¿sî
-%üc94¡ÜÜ—=7âjp¢ŒûLé^çP]flBìµ·Kê Ä9¢²¤våš'øÖAþûîSŒ#â²GŒ™xh躗Ë.;h'$Ô\—-”…Ìî°‰°œV*¦…­FÔ=2À5½[wì™üPûR×ÈÉ?ª)–’Öokö³ƒîOWØô:ÓçYC?÷£°èÎú©_FäÍVS¹Ëúä—pïç7J¿üñ·¡ÒɈõùWoʯʉ΄։Öþ›E¶TÅ‘“Êk•×Ç$ 7Ìe$å-Ê„ÓYì€Ò<ß ?¨Ý£X—Uªš{êæS‚E áÐ]EÕÇ´y”óÔy¼Âa²²4€ö©÷¾_ã¨bÎ úó_N’^'v?רk••ù2ªR¦¦K´Z_oõÈjrÔ“ÍYY2(Õk$ûš @šýî~Ã{8sç—Ú·¬÷U$ÆØëx…4:á,?ÔyòÓæݯ¸ùOiĤȇ‹øÄu÷T«TêSFá´{òÀŠ1b]aÚù_Ýv*S’ç#·ä]k¬Øå“Çlöny`wlÃlÓËD Õ7™U¦«‹ûJ*ƶábuÁÀ$ñö²×}Â(5ñiQBCG„ÇÀ\—$§!7!ÇM~9šœù¸)ökµÑ)Ç÷Ä\uo€£Újoÿ=ÕñH׺™;wáÔúBÙ˜‹jUŒfŸîNç²QÝÖ…Zöî–[£Ž¡Cô«Z’`~›æO 2ÿ¦@àï›—®9c³!1ÉIï.Ø®o¸.Ûh/‰ÃÀ‡7ÍãSÌnõ´ŸÊ¦Ñó›1ŠÇ!1çL~ø:ú°j$`mÄèÏ}-úªººÃ§:»’}c]LçÚ¥)§•Sw¶wŽïÊvÄ<Ñ÷9Ãå´Fÿœ\kuRy,»#´Þ;(é9ší¥Ñ+㬠êͭ༧CþÜÿüO4À®n# Ãý Y|þaendstream
+æ2@ Š,š
+„›‚"•!™@’I‚ÊeE *T.•VJëX`¹¬(xÖˆP›FÁ+W]Aw
+¸!l®”úÂËæÜ`6O"XÉ2ÄŸÇróa€
+ø“‰d2ˆ ±÷ÝWÀŠÍ¾²6O P¨¶
+ ÅKg‹ÿ]Íáa#ƒa)ÌÂõv#,‡¤¼êäŠØ/Îßùá#’Ö˶Ju¯f³_ml>ãM=çi,.-V^=!LJ*ô¿d9œÒE¯d¸§5]¢{ñjZQ¹_V<µ‰ØãLL“­yme>ʇ<]ðÒÖ„>:ûí¶í½ÓÛâÚtαUôÃç绵7Zz´4Ýl×{AsàÃMøÈ'['kãònìdMܾïÊðÀ‹\ÒÌGí ihö1.€¡PXyŽ8µÜS)é³ç×3Ó›ü¥OSMSÌž·z—KgÒb £»¦‰¿›:–Q<ó5S ×dL¿>pGžtCIÊŒßÛhìjÔöÈšûjs›•»ì“`ò õªK#µí!üR¦¼Qin.‹}Q…Ôäïyþ}ýιøŒâþêÓ‡ž•Ö˵»ëõ@Ý]÷z3_j¹wh¤QÜ$WgeµÜc$üð¸MG÷½¥âè|÷µg@ .ƒ ¹¼ÖÈh<~=Œ¢e*ë²32ÿêà+Æêòµ¢‹M¢’Kñc‰´þc`ÕÍÎ.ðj<ãHN,c’‘¦—|-Æ‘ãí«,›7ÊêôzjÎÊä}:Æšýʬ(=…‰¬RÈãœÑžÍLÏðp÷ôÛ¯w¤9/)€ð\­î{Qñ¬ 9»clK˜¯:™q¢õåà„Õ”hÜ[›v©«Ô/ÅÐ<¾Ôàh3S éT~v½Š¡@rÚoÒý.útq “³¹QS©çþaú2nð÷Éï7…~Š¶šÐ@níËž‰q38YÆ}®dÖ9T—›{íÇí’zB"pŽ¨,©]¹æ)þ¦u`çá}(ÆáqYGÃÇL<4t™å²+Ú 5×u e!³;t"4矕Šia«õS pMïÖ{&?Ö¾\à5rjÇOjŠ¥¤õ»vàƒéê›Þd|ÞA×Ïý$ôoº³~êWáyóG‡ÕÇULYŸü2îÃüFé‚ßÿ2T:¾>ÿÚ-ù59Ñ…Ð:ÑÚ«È–ª8öpRy½òƘ¤á¦ƒ¹Œ¤¼M9p&‹í_šç{ñG53’uEeñ¸ª©±§n>%pP´ÝST}J›G9Ï\Æ+&+KýiŸ{ïû5Ž*æœtzñ÷S¤7‰Ý/4êZ¥Fe¾ôª”©é­Ö7[=²Ú‡˜ƒz²9+K:¥zd_3H³ßÝo¸cgîÂoRû–u㾊Äh{¯àFgœåÇ:O¾Û¼û57ÿÙqèùpŸ¸Îÿ¾j•J}Ú(Œv_P1F¬+L»ð«û®BeJò|Ä–ü¡ë»æ1š½[Úß0Ûô*ÑBõmf•‡éjãâ¾…’J€¾m¸X]0ðI¼½lÀ-\Ÿ0JcM|^”ÐÐî10×%ÉiÈMÈq—_‰"g>)EŠýZmtÊñÅ=Ñ—EÝà(£¶š†€;Mu<Öµnæî=8µ¾P6æªZ­Ùg {·Ó¥lT·u¡–½»åö¨cÈÓ5-I¿MóçÙá¦
endobj
-685 0 obj <<
+717 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 1944 0 R
+/Encoding 2020 0 R
/FirstChar 13
/LastChar 110
-/Widths 1945 0 R
-/BaseFont /AAVZAY+CMSY10
-/FontDescriptor 683 0 R
+/Widths 2021 0 R
+/BaseFont /BOTYKT+CMSY10
+/FontDescriptor 715 0 R
>> endobj
-683 0 obj <<
+715 0 obj <<
/Ascent 750
/CapHeight 683
/Descent -194
-/FontName /AAVZAY+CMSY10
+/FontName /BOTYKT+CMSY10
/ItalicAngle -14.035
/StemV 85
/XHeight 431
/FontBBox [-29 -960 1116 775]
/Flags 4
/CharSet (/circlecopyrt/bullet/braceleft/braceright/bar/backslash)
-/FontFile 684 0 R
+/FontFile 716 0 R
>> endobj
-1945 0 obj
+2021 0 obj
[1000 0 500 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 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 500 0 0 278 0 0 0 500 ]
endobj
-1944 0 obj <<
+2020 0 obj <<
/Type /Encoding
/Differences [ 0 /.notdef 13/circlecopyrt 14/.notdef 15/bullet 16/.notdef 102/braceleft/braceright 104/.notdef 106/bar 107/.notdef 110/backslash 111/.notdef]
>> endobj
-681 0 obj <<
+713 0 obj <<
/Length1 1616
-/Length2 25291
+/Length2 25334
/Length3 532
-/Length 26183
-/Filter /FlateDecode
->>
-stream
-xÚ¬ºc”¤]°%\]èª.uÙȲmÛ¶]YV—mÛ¶mtÙ¶ºlÛÖ×ï{çÎug~Í7?r­çDÄÙ±#ö9±Ö“™$òJ4ƶ†@Q[GZzN€Š¢š¼••±¹­4¢­µ௙š„DÈhàhnk#làä¨Â@#
-Ó¿rÐÓÒÿ‡ÑÜAÔÜh,oîhd01°úÛ§í*6Æ@{+sà_=ÿm%€†žþ¿ù”ÍÌ,mþi<˸€6Æÿû_‰þeN§&)!¯)Nõ¿ÏÔãäÿjï¨ìf÷—Úÿ(EÆÖø.þA´uxÐ0°²hÙ™þ^9F
-4‚^ùckÄh‘š‘æX‹ž34!¬Õ×Ã
-¥$T³ØÄ^×âs:‰¿„³Ót»©È i+3«0€Ö~Z¦Ò‹Áº*ã¹®.òzbdÄhn“<£c¿§¯
-ë³ü>Ëä1os´˜™(ÏÂß_Ø⟣
-Üiv^ëå‚áßcHdð8âzî‡ù&v'ö@¹v
-Ý}ÈâJK3î„ÕžÖõlµüÁçÓDÓRfd‚ICÖFJ$GKó¾¯D˜ü‘·vŽ+À$kPSöc«¶U|R·Æ ‹‡hX'œQýSÁàØœ¸5£
-•LŒ{Œ›h1X+ðaÃ1©GÌ$“ñ¥l&HÝoÿÃ5Ÿ©qΧ©uAÑÇÁÛ9+.ÅÌAK¯lrD‡2||ÀÞW™òqo ÅU{´@ÎÜ^ËÜqøHΧ6U½SN0} ì Šz,sE¬˜¶a;<Zt$N}Dzë³õPô:–šÕú. Nž³¤Ftȥ͜hR=l>eŽE/Í:P–ÒÝH“OïQ\ÉŒm–Õ›ÝèIY湪 F'}P¡Éô”ÆiR¤ÞÑî •¼Æ-D1dšMZa·ø»ooÄPe0™ù{à3X|ªÕ(Æ5rcˆí“ªCch³Áó€n']íõ%®$Á÷pÙC$äg´ž/qº–Q„¬{kÐÝy¡ »ä(örïZÔ”*"ILÎÑŒè¹ÐbG. /“!C¡U†RmÊfB,@²¼NïÊ;ÉE–•@’O}64jÂ(æcŠ
-M J9‚®»˜=¾EMì¥Ç§SëøüªæÊgg æ·g˜èô\ %#B9%´®©b]c A=Ô
-‹“Û,o2ˆC½³Ò=ÙÖk•/ØØK‘ÕœƒjŸQªÊ„·¨Ãy
-@†Ä¿ØÜôH ¢ì’×Z²øPAçGÆKX•©Èë7ÿŒQŒ±f´ý1ÜF-Ùw|¤$»\ÃD¿‰x¼ È€Ñ"õ†t?oånŒFÖÙ»s¤‡V@•RÈ2Sx p]½ùö]¼¦ÊCRë ".zî¼å§ð©PGŠŠ Ôƒ H>öé%WÀD|rÀ©ñËE`…zôGfìí¢t•„9—šÏ¶3Í7„  ir6s¼ŸÏ‹¼Á†(»µ›œM•_Ï^–8%ÃÒÌh<TÏø<G‰& žÕsŠŒï}x4ž"Ø`ñ ã?70„029t3™aŒh ~Áع‹&ì*ÇcGí\¤Šn <_‰HB÷nV ^?z^ 6~pÈ“!Tþ( Q4Î×"‹>§Üs: žlwÇjèQ›–óž…-á’æØŽ¬£öI:(i>·QÄJé|]ˆgZC—º’¢0'¡Üœó7Á¿†pyfãÎCûâtˆí&ž?¨Ó[åÏ蘚ç>÷bE‰ÌiòK)¿Oµ…µËÃmžÒÃúÔˆÒÒ³ü}'ð– ixiªûÂcá‰|^"íÆÅ>p&ÄñâüGÚ:[>´ŠX>µlºZ‹ÿZ9Ð[:ž}€Àe‡Fk;èpO ©¿=–õySɱ¤T‰‚í)Üs<ZvkHJÉ=žEFék Ê[} ´ÇHeˆ"y0OÍÁJzÍ 4M¬˜×Ír|L_hàüKå[ÃÔéê…ë˜Ùc™ØSF¶Ñò]ö™c(Î=©à=ñÁîEù©y†øÏ$¸«]K¶ç…­ðšµ¯Ô>m%¾äËï¨OZ¥8!'Ú76 ÅuþöÍqCS) (Ág-˜¾"Ÿmå:ºWV¶õÇ/ã|ÅÂY¿,F}ØÛu/Ÿˤ°¨570]ç 4eCØ¢Yøí–² ó—Z
-Jë Ø
-{Œ¥«KqHM+~ÏBO¨Ÿ?oiµxÍ+«7g7[*‰F]4HxD½I·È-÷€ðÚѦîº-v€á*hûT°ž½ g$+ªíá?t"+<äµ +zÒ´ÊßÇKÙ’«fÍ¡Ù”ø…È^fx—wÝ¡×Ú‘Q!·úwxm$, ãûùyïìC8@„S+®dtóWÚ³æѶ9ÊN-*h³ÞºE¨‹@­åðòuAIÒØždé°&#t›ÿ xªÅæQ§„ ó
-9µÝ.Ý0{Z[Cdiî×É!âOø^)kUIÑhäëºCiµá{¾ç&KÚéçýoû›ÆîZ—‰ÜËlÓîÔù—6lÂKR:¶;y>ñuj u¶ M¯²á3Ú©*cð!¼cpäï ½¿§$+7æ,ÌŸ; o&ÁÈbÓZlÑ~ËwÔ»¤¶”Y¶ˆ~ÂÞÉ)X‡[u­çÌSX‰&©ìÈ-D rÄ-‘7Œ¿îV5Û—nþÙÓž­ÍÔÞš£÷âËì›tŽƒ‚õGQbEˆD>¤*꯴Â[@ÁÖ5Ƥö*>›9%§úýDHÔy µff3@h?L;¬îFÂð¡Íϸ/;*s ˆ¯cOåU®BÚ½/âAñ.kþÚ sHFC®Ü¨¬J½¯1þFn^×áöƒ¿¢WW)ËNV¹ŸQO‘Âömœi}Ü8åÑñ¶;áî=Ÿ8;2{¶†^ÜóJE9£n(tòx~˜Jþká)5þ–ÞBʨnŽ8Ʋ>>•m‹jS#®YR«—Í´…Á­‰Ù\ñGkï¬1_d:mN;ªž‚˜"a’žq€‹©°Ê?ÌÐÄ#ìÕãÙ{½=#Ç™‰¢Òò¢äè{¶Êl¯=¨çPÒDZÒ‹Ýlļ÷Ù-:ñeD8å=ü*$YTÔO½xÑÜúÜ]µ©ÑÚˆ”I5ãþ±×©_)ºNÈ3¨6«äµõ«‰Nó"äD1¬ù „®ê0ö°7®<4ö(Ìuæ´SˆQÁ“pR/Á®E©`SŒ^ôÈÅÙ@D‚±ñ–§æxÌä}ú”:»º¶¥uÒpp—§QÿКÓ
-ÒÎ&rs¿:Ÿ°ôåÌÄÜÏVèy.<Ó!f•ÛËiQØg:0ÖáéãÍs_E©3dΑ¹Ÿ:A=Ë×8‹´dÍAƒʽïêÛRØ-À×SÄÂ'ãBØ\eá~›"›ÙRrD|©}Ýÿd¯qyIÇð1ó6§µ(‹‚hQCÀÛ#÷œ—é[6ED€ó‹%±˜úÍ<ZL9ÉAÒê“sõ“7\wêm’’¹Ù·—¬˜9ðwב0Êpø¢Ày&NߧBm4D”SD"«4*Èwît£&ˆÞWÄŠWÈžèHÌËKv3†;a4¥QoÚ®ÓA.óÎ`L›&<v×2•M\ü;C‰ï!Uê›^e_Å Ú*Ù³ä_ª¤Ø¶•ð
-¢á`7z´|„yð•Ý™íýîkn:ð˜|— ý
-ã;[Ȳœ]P¿“ؤ¸›äNßñÕ§Ü ÿH¬Ù|.´=hÄÎdr †E#†UPQE^}ÿv€ê¡þ˜(#û¢2ôVÌìôü“£ βÄÏcH®çy³>•q‘óýÁµÚi¦týL6OcG!,çj§eD­=G83˜ø®eÁ鯑´^4ÒršXýŽ2Nä@È“mï†óD¼ <ÔýÙíŠÎ±6øpv\èÚž”%¦3+è¢W,K…êÙœçEÛhÃï`vÐyù'5‰$ع$rñ‹’ŸÅ[
-Ý(~®$"·jJZ«ö0V;XÁÖ9àL[ö÷ŽÃ=ú\µ$ÔeKE²¦ë•*VÃ% TÚÓì—£ácÒ㢎¯ô­1 6`hÒÀ7>œm¸>/ÿge–‰—sªè²àÔ2Vú¤ yîpwí¡úÜkÆƱg¬¯Ð·ˆ½P…ÊÔÆöÐGWð%!Žl sŒÒe £•;‹8Ù1Ëk²àÚ>Ø?Fõ$é;wͺn­æœÌ^Ü”/˜÷RºñTš„ŽzÇWÒU~WW›G0a– @8§OQvˆk?UJ_xJ”³&ûˆ#p;'+ÍUv˜á#9¾}¶Qý•þÇ%ë<"w9>O“d°FT´pü;í&w°nð-gùo …ÁŸÒ3íâDã»­;ÖC+Ò¸ïÅf@Ô
-Æ°
-á[xœŒ†÷\KQ}Þ£{ânUÃ{¨ƒÁÅð(¸ixJ
-/ÀÅÜÍôx¢Pt|‚£»ŽPûβJÿ´ÌΧ•Í[…† %®§íßW´¦ú‡Ñá´L±ŒZLys)5œb[vb§¦ÖKÃB¬ÐüŽÛ|Å2Þ>‚µ¡XÉK©o[rHÔ\ñíq˜²? ßyæ ùíoædÏfN/Ê ÎMB-£ÁPˆ,÷#”|¬7a•´“YE8n¤ Hõ¥ ¨ùIHÿD}ž†‘#×Àä:>ƒŒlØ)_Æ1}N šLŠýö]ùNp’›±=’“j †/Gîr¶Ò£1,Â;c|6Ž 4Õ‘a 'ýq*v¥Ú³§ '|iú‚â®ìL5³ÇI"wè{À,•|XÐì¯/û(3Âö-4Ø—•0dT@N&‚†E|ð4þç.ùiÛÑœÈ1àü[Ò pJÓT †šžs;ícñU\ÂKÁ/m¨@‘§M=ò]“’Jí‚% ë_JXñÒ¹Žìhuó{¨øy¬–z­¼ÍAWô{iaz¢˜š–mŽÜ󺳘;¨2¨/ˆþ/»ÄcÆѶˆäó?™Nû¸°Ü F`® ^å±Z§ôv»ÜÃR4êI¯d¸'|ß|ºÐzëÔ%†=-ÉjÅÐÕï¡ó-‡Õ´;ÌXåpMž8Ìæ-<
-QPÓ-áê“&eÃÜÓªŠ^" q\SVÁkøD÷>©Ìp8ð=·[5<‚K‹ “óç/=¨^ï{"~jhõ^Z ×
-TSõ÷Ò‘òÍ?¡n¢‡ Ì>bO³3ÙØÈ#wÈVßÊ[½6´Éû‰V˜5xy`ï’ÙFC±èëŠY &³»ïÙXºÜR>Ñí.Ž ù’Bpe­Œ ¹Ž•®¶ºÁ¼ž¾ÖM‡çÃ{‰(Lv¹%Û<ÃDì¼Ù ÑÄ@^m„ï}(}屩 A?N'´89}¡ãÕ°àahg›ò…NyF=Ø,¨E$ª=ˆ
-‡?wÔ]™{†]°á³Í4jÕâŠ”P)ssW;RëË„‘#•m“>®~Fí&û[¾
-Êçx™>]ù‘³±”íìÕÄõ3OSF}óÞn+QýíPR»Š¦½Ý5­¨VÅÅ ç„þªeh—‡ÇŠûFe]mÿ‚e¤e¤RÕƒÓI¤MQÈ›.·—~#v‰XÇJ€Ë¦ïu»wgß´»Ù²
-^>íª$¡‚ªN³°jQtˆâ ¡'§"»BKº-¯”¬ØfOUÎ51½D:e;…"YE­"^gŽLÖIÜ)Éæ#S|^o´¨/‘feý •á€•‰¶ 4ê|¶%ýý .–î´0¶&Û$LèÐÛýÏk¨MLèOöc«¨ðæ[›L3xÒZsýZ”Óîd42)wàÐ!É5³ ­%aû+|ã=Ê.ÜÓ¹3ÜÙ8Þ- pˆh’•™ž^¿W¯ïEvÃhdBdwü¨øPy>h†L r%@÷CøÆ#œ(|HD‰ñÝ ¾W6ÀG~ùç+¢m+ç®_#É€'[.ÕF­ ö Ô9”f÷iõD
-ÇEE‹S9WM3×!ídòÔmAfoçõÄmî¦Ð[Òd‘F$ØíRUJt·äýÀ ÷
-0ê
-‚‚DqÓÚ»uJ‡$m¨Ëâ\5%wËxƒëá¤ÝŠc×Ãäçò‘ ¾¶Ï·
-:âP ÉÜgú–ÁÏÛç-R^üÀ#¥w…÷n²Q1šû£ö2ü8
-ßU‰òãTç[Fèšx],Z·Éðšsðð½Š+šž ÈS&×9hÁô œp4mYKØ…Ðl]ë³.)µ~gRšŽ_•Ÿ(ºë÷˜te“c»¼x„Ÿ×ŽÆ¡â]ôî2xÂÂ4–ÙO®°¤ë梨áq.svÞ}µØüDváð - 7—s‹fYn‘iÌŽR0Ö˜Áp§¡G~)!×R%e¼k/“‡£%A0Ê|&á8¬ ºàµoŒ/t!„ÈÏ$»g¤—«â½Ú'xÆý+ß=Fœ‘è¦y@õST~£Ì½´,Ò~”B”Ê¥ ¦µ|ø2H‹%È_Øò'5Yh ÂE8i´ÞÅ ï…Ø)uô_ƒ¯ òÉ`XÇ˶b”ëÈó“Ëã$]TÖHõŒn0F’¯h-òðíìaÝÛR]ÐÉËæ½PÉ$¯ Ðêm<²ètL?Y=àGWr&`Ðñ°êà8Cº+Ú š!xr(<:Ž¶Üº±‚=6ûP.'…ºŸfzh?9>^.~-죦ª îêê>. ó¾_þAC鈮ëø:%cý6{L™n&¾[™˜â¨†énC–rMÌÒ( ¿Zv›ptúˆ c2{d„q¡D|ýü¢ó䊇•©|„¦3Ì‹ÀŒ¶¹S(·’ ÖÿÎV‰Ò‡CýîδÐCM*y]?œeàq1œ®=à¨Ì>xÞd?O-G¼®·²µñ¤ç¿òºáåÞ¿ï¯ý _ŠS߃Ø#”ÍÝÈÞc³7—½û9˜X'!yf¿ÑìfÝ;ˆg3³Œ0¬`ÛemrG¨^²üzë ÓãÓÉ×eI’ÚuÓV¨™Wk))5ü÷pÝ3`ÜŠŽâf~€)`â¸ÒÉê ¦GñF¬&ÐœíçMÃD@«UJ¾ k¶¦» Öê^ŠdÔ«©ÒmÞ~9OºðQ†4Â>…£”ÈX>®è8#c
-ÿ^÷É
- ŽM·«*T$à&N_Òò,j5%
-œì_ØË\ŸŽdµíY|ï—ô(®iÙ˜ï÷_ <{‚ßnSéÓ7T³®lpá/Å=[ü][Ë6S[ÑM¹–3$`êMIuÀØR{,ÅWþ¤”µΖg-ÿqjòIý˜=ßôY÷idᜒÑtR˜)¸z éôªóe;úOt+%«Àã†Ù²ÇÙWË7pž>\¦ ÅxÑÍŸ*L³bæüQÄ'QÛ\˜èõžx˜:S,Q@²úIyîÛIÿAË)i^í·’ê#\>¡²ˆ×k¸ôpÀ/ðânoMe™3²ÌB¤ÿÆ]Ò§F¿"Ûà5~·±µÐÇVS´Öþ,&Tqx`•GYú®F/Í âå=TЉ¦ê&Ô%³S¬À#¯]âëI–7•„
-öšûDG¹_× óæÕõôðªØtx˜†&ÍRueŠÖï:FŸ‚sy.!À\Ùs‡‡k¯EÁ€Ó•sö«x×CíÕ<©t¹KrgÆ/Y4Žö<KSUGYþúÌôJŠ>•V«‹§K¯€Kb1¸Ž†¤”,M1}}A­ÖW2Œ…á¤ÊùÛ8x¼3tã×Ã3Ï<º›©¼U³GüÖ†¤|D‘‚ZÚD…ûú÷÷>Ìâ’¾ÃÁÊ:ºŸømõA‘ÚõØ'º\ÝöH+Ì»tô¤H¿€áÖNÛstàmœŽ'1LÞd˜Í8¿Ê!©£lÄö'`•,áO›>Ö SÃâ<Ú…Ì¢î±D»Lôyº*mpÐœŸUžâ™Jš:‘¢`6Í؈÷+ÒÜ\ñ2¬aÃUÃ?wéöÛ<ÚÊë4'ž’!lž¾T§brÖœ-1_/&âXcb®ÓiÇD8ûæþŽu†åfmk7ÔõvüZ­ÏÅ¢ã|$b ŒAnÕ·Íê…¸bQ&¢½ÁRîX[ÂÅѸ¶ ¿øE·Ë¬[oÙ¶žÚ[£Ê«ïÌw>w¦{3ÿD)¯Iÿ#Ó)°Ó'×J‡£ÀŒÏF™¡ã×ö£M÷ß4ÙËáZuT»Ø²n“€9DDt”¾ôb5Û1g8õ!2õ¬j<­è+Íy" $¬ï¡1!‰ùœ«l_.‰‰´—k3q,7’•ˆ³F÷F¹¡ï_z=F¨ïœ:Gß¿q€*F yDÓ³–R3¡ÞPaZ¥~CRœúsF]ñµ«†,
-áŠD(A~«ÌiðÔ–Eó—1+¥^¨„iyÖ¡dõgVs¥Ý_Çë t\û¥[Vƒ‹¢ ãŸž4Ž«EUwS¦€˜”ÍƵßT÷Ün¯ °"@æs÷‚Ù¡h B^#ÓÞ€Ý~aG&gta­LÉ uò§p€ºf¦Î
-ë`H“@$ÕflÕ=nUúÕ5îÙù-2?—+{žj•ð¡Òj›W b>H°ÿØ…9ŠÌïh‹æv =f÷{fÕüVì:Ç1["rù”SêƒoÑõ¾Ç’€šlOÕ‘äÌ]ªãuƒ0êôXPðkµ»9Ð…Ø:ÿÖ‹\þ±Öãà–{áÍÜÒ#ú}B*Q½‘W¢¢´ž…tZ…xœêÆ/*ÖV’^oá?Z‘F ‰Ô7” :ã øcj¿?‰zz1ÿÍ^yãývÍð¿\û0Æò±ŒÄ†]dqá=¤¿@‚Öº›3IoÝûÂ"Ãp™çMLò"–Îw»h=y|+Õ(¹2#g‰DÛkœþUhÉ«ýƒh+V2™¹,ÈÎ*MYcœ´ð¬äOæ~‚ gï.ícfÛèMM““!TêÕ6ƒ8 .ƒ)¡ éU¾ïmS‹"Œ§Ô°5” L4ûöã¾:‘Oìc³5hFWG8 sË›æs-¡ëûç";÷\¬ã2•„ys8‹×ªlºP²XÎL|¹©‰ü4ÍÞ̯v9êNvsr‰…Â+xCü>c¯Xç§Ë'­}ֲ߱ß1TÝçu#ß2çÓ
-+¦É¿ìÚÖŠ^Ú®/\—sjÇOŒ¤+G4Õ–¬¨9
-,Ù°U× g­·ù;ŸÐôl"•R’uEc°VÁ2^ºBRA4MæÀQ‰ç‰¶·#ÂÊ€ó#Šh­5¾;•b‡§XæD ””gX]åF¥"yM…Y@ÅZéxaxÕ49ìÍ|ÑÞŒ>‹ŠçââD’ü2¼C%4öÿ/ô»ènÙt§ÄŠeýú2nš±t =_~ ¼}RÉ~>Ë »a0¬n.¿Î¥µ#M HöíTiCÕNjŽØÃsûÖ‘ýaç_ÒÈ£ÑxF‰“Ô EG^Èn Ý=†¨Œr&ª‡C0ŒwCÀ“`>ÒUÜFæœØXîØ}6ø[·ìfÇ·fíŒz¼–ç‡ñVÉSçä‘¿Ôìi€ÐgoLúº¨6UtY–S ýS´,ãþXppjIíWÀž8›‘ÊsÇÞwZ„EyB¦È˜Ê}°w9zÌ^Ù®(ÿ÷ôÈЩÛ<KäVÕø>Q/ÚÜ#ï×Ø·¢yû!«oø~Aòô­%“#¹ö÷ƒ¼BzÁ˜»ªŒï?_"’ ë‘Úë?w0ºŠüvˆ_…¡"=%_U[Œˆ|ð <"á6ìZƒ UcèzA²¿¯5`¢\î~ê×Sù©å¡ïÕšPÄëŠó+™ë
-1·ð€š2åªvÙz¥›Ž³AfW­æ› îs÷óK—i&ê¯Ózy¿ðƒþ#t°ZÚ)þƒÝ6Ö
-kÈä+>x‡ÅôŸåÞ„PÁ EEo-B1ЦL¥ŠñãÝÖ›²Ö›ï{ƒÎûZq"Cöá±âši¨èbyÇû[&Èïd_†/
-ÁÑ™i-j´ã/¾fXØü€ßÙ(‡.V’+®¿ ²
-½JTàÇÊcŒ†úJ$1³Ù«B«“HûS•° î{ƒ)E˜ï@Ä|èÈö,›G|8fäUÜêg¾dÊÊSð õÀPÒ”¬^Ÿ¢õ±ûJ#„ÉòvÖœ¶2W¡ýâ­Vø~-…3RüzÌýÝ÷
-3Üdc ×›+°É'©z8údÆÕùÛüÌ[Tòw@ÿŽ¦žÍ…gM/Ù›ƒéFŽ]á,ˆø½Åžlx+d±‹ 9²ðä~OêÌKC†«hMŒú%ÎvkøæþÒ(„¼MW{B %8T ØdaèÒ…`[Ô¥Ýy¬CCtt?èhîÑâðïä÷`ãß1>ëÕÙu•î$= ›gSg¸W‚Åw‚¾H. Þ¬¬_ÕLz£x­÷þç…«ˆ9ú¼Q³:²sðÖ9v®A%ý˲ùïß¡ãë’!CÒ¶è‰)YXP›Äî­é•1*A‹EöRSîŸùÆš¦ÿ8L?#ºOYI(¬c,F‡n¿ô¤@É«ïE6ÊPdw9^Öäv] ô%cND·y§;£ÙP™äµQFaØ®›qF?Æh¿µÚëè-Å×›ÞË#ôý<ë)%™<åàiÙFÏ
-{@[s0Ÿ"¥²ŽÌdbÔǘ–´EVðMh^±i5q×B2¯^JO ^Ìê£oÜ'‹âØL¥ÆdýT<“ø­ê²fjí7Dµ• 1­X}2†7›€¤c½Bbá/?ãÒIxPp%‡Œ©SíCÖ…“La2ì‹i½I[«E8Ššå½¸çÌ Þ@Âî\ǸŸ29SQTw*ÑB1ï¼Ðå+Uïh®¼Ä¡Ê/þ­‘Cå y[üAôŒŸ#2‰oLú *ÇÇUqQ½
-ó|,šZŠK§ -J˜UÀ·~SsÜ1Á¥Ã3ûtâ’”§ ¿ømƒQDf"x~ˆîd÷ôM”prB!4¥”N½Ëïb«@äÒë³q §àάAÃêÕµhÛ„Œ°Ç³8vˆti¤E¥ÌU$ÕƒF#ãlˆè‹2Ž55JÁÆû
-W—‰ÊGo#Jܤ±ÐLê yNב]IïðÔfñ+ZMv‡ï7{ä¶Ãê‚øíXºžXäó½Ý‹`*‹Ò‚jpj÷´?+›
-|B@†-›&±í ä5‰tkfÏ?B~½b:%Yñóà6uέ£þ˜”£LA®ªˆðÁëX‹ÀÌWÿªïÏ,Ñoðö»¶ƒ1´†Ö®ûM")ûŠ’8H_Q@)­ÃûÌßj”Yã*Fô&ù2ÙüB‘çÇ.Œ%nåÁ\Û†_ØO˜Aê;)çÓjÙ7 ÊíåÛsoÒ쪰1¯3Yjè@á³fæåE#ÚQÔYï”zpÒáš×,£»e‹\nÆnCþÙPÛöXC­ƒ
-Û .]¿1èf‹Þ$‰V™ÇŒ[óN<š?ÜY ætLçN¢“v} «˜&…yncú(Å:ÉZ£Ÿœî,Õ„wJo ØŸq”é»»2ÛÔŒR⩽(Òue†·¦³‰Â€D…%ô¿Á„Ä a÷uZG“9ì4éÓ¤uy Ù¡]&PžàfÌeAÔ>X õ®pøN·¶±R`ÿläC‰ÚHlÐ$ðô²NæPh7»˜ è›LfŒ¨“a h¿Ïy8 ¨ã q˜ác )ÿ_~1iSÕˆC¢aH ”Ó‰k0zÉæ.@ÉÕ—Rû“µl‚‘¿R §´ù½Lý¥tû(Iðd˜î |ëm´ ØÿSáB÷ÈVG:ý†®§DÚƒ?s¼Úö˜ ÎTëýô?ÿ?ˆ ¹×”-.ûdÜ7”ˆì¾.îÐ
-q·
-<Š´yçö{e¯(×6鈔I»îbyö„•ZA„I³ªÙÆç`¼ÏÎS¼^™AáRup:ÓäGW@-!Äø«ƒèÕßèËs=aË‹Ü'vÉRýl+}¦Á_¾u0
-Öÿ“^)~ƒpàÕ²ô*²ÿ‰sY:ûyé×6Å€$ŒÝº½Å{‡êÑi×rL#¯(T‹PÆvœ·Qr†¤óVJôkH0¥rÔIV€«´*$ã®/
-ëÙO³!õxÉRdíhÜ!] úãUK+<7Öœjã«/ªM;Ë>ú‘ÕÃ}„ý甂ÜZV
-bù‰æ1²y†#Ö6yéRØÙ`sßUJ öà‚Hø.ß°›GßôýMŒek½„¾Û º¦¥CŽšËž…l^§¿\<…‡6ÂK̹çø$‡’vçÏ %hf¥Ëm°¥sô |G'Æ[fûý/Ša¥¬3µrž®gS¬Ê~9^éÈŠSìꦘÏéNÐó á¢M>À]àpÀ
-䀚Œ5åèÓíöRŠÙRÒ
-Ì‚StRóùa¼âæøïŸm+ŽÞ¾µ¬¼/†m@”«†fDä)”y â­XDl_`p ˜3‰Õé"p£ ùÓ½r§à‡¬i3N€‚_ø+iÝ‚WQô¥ˆlò÷ÅK¯Ë.XÐ :îîÐ0 ûvפ¹, aÑ;‰<e8“z Uö¯ùšÒø\j^íÂÖ"œ‰7 s.G쯸‘U,™Ç‘–ÚUõ ê…¶,?àE jÏ2
-K¼BPÒÇMÆÍÖßx)<¨„Ó«à?j¨¨[âs£
-#!ÕŸ­ÝS‰ ¾¡Ú±á$j',göbõÓËÍÅ!:Ñi¼|ÓÜîÊûJpÙ‘ýéÞÇœ*ðáˆR7¢O&½¶$nÄP$sn¢ä+ouu*„Û“A–’ ã†ò/% £¸¾älÛñËÔk|*“š HîÀ²äk|ßm: ÕU¥Õ6ØŸo£;§h™:Á„tè÷!©N|çÊ?÷`~Y`¶V­G?Ãça}4¨äIßž=6Î,ºJ¥ÀV9uÖ”!þÈjYA‹¯ÏdJõæÕ…2–ÎÊ/«âÖV0ÙF­ì­Œù.}3}ä–Ü&q—ó?xúœ¾˜þsóp¿]×U‡|y #çjr¶24°E_ôaà´¢u¨‰C¡^¡Óå’&BŒ‹‚•M}ŽÀÙz) Ü…tMJXŧòŽ©:õCbX(—Ârj´¶45õèÚ{ ,3¶jòWó0_±Žª
-þ®£¥?]ÄýŽ<ꯞ'°á1ÛÃC ÃæKtð(Õ‚Ã'%ÔŸ8“ÓM¼æcûÕz&CA3þ×E®rÒÝ,”BªyK¤åNÉ×%‘/);ÐÖS˧‡v!ï]Àÿ_›ÓdðŒ¶6ýCŠŸTÝçÌôûî*®¥e轜Ódv*LáOhfòÕúÓ€oMºÜ¸‡_õxB5(Ceõº%-n„ôVDÆ„ ç™6j®Ž\åoÕ”ƒº B¬çýû[ÝÌ ›_œÿr¸HÔ;6é×ÑðÀ¼!Çrª¬ ±£
-éNÀÐq „Ê•GÄ`“Ïx]SJãõ_ê»G1ÁmÃðé²]„5½R)%hÃ+Ñ]
-we:‰¢}‡”ëâ.ðUöÉ›±-ÏÒõwKP–ŒxÊÙl×Ê´ Õ®Hi¸®Àð”á6Ãìؼyn¼
-#"±91cÓ…†5BZÌ¡U Q}‚Û’á“ÓiþçáœBpØ÷=:¸Œ=ĪÈÃýïVƒ®Ì¾‡¡¤ã<Å‘J*= ó2",^†B;TË}Ç\å€S ´rV„-ã•£‘c?5ä圣9zL’ž1dpAP³¡Ÿ63—ó[%Ò MD´j&z\%djÕ2žS)Ü‚í:cExòCU}SÄ\ºáz&¶ð,GÂ{k˳Ô:•³D"¸ ²„?.¤V5’0_‚Üö»Hñ ´é¦Èݼ+ÙŽÚñ#ü™ëÊ°øm;•HP^vø+ˆoo|ú²®Ë7¨õ$0‚b…çþç<nhœBmWf¡Áy°+‘›¸Uë«Ð-‘±ôwhÒýi‰›õž+æ/Ã={W¬ÎZð|,'‘¿ó#hQlÍüyïírT¶Ô‰ƒ"~1]¹²?::·ç3ÝÛ¨wÎC
-Òðš¦}dÔF\•È]Œ9@òµñ…¿[¡Ô´]z›»•K½Ÿ³™µŸ Pù
-‚Ï€oD‚¯õ!ä]OZg*µ@D©(ú¢é¯NVÓX.ò_šï¾Ü@Üú$4Ü "_=‚1«qÓTnÌhž¹ÈuÑRý
-lj »•ª nÀC›žFåÔã€ë(RX¦ðròÚ…ïØÈzš¹]3èm8Y)HRï˜*w;6ü-$9Ô7ÈbVu|sÀùñ¯ªã°}¨$\ˆ%¼®ËDq–îÑAÃ÷Ð&8Ýß«ñ¨Âµ”(Æo™­;Z{ŠrA y¤÷>[€Äß‘yO(³ÿ®™3hwr粂ˆ¢†;D¾J#Hù]øÝ/˜[>@çÆŒt.<‘I×S=RÌZ`Ï3Uó%ÖÑõ,Á>!ßÀÄt$9·žÒ›Q6óâ‚:ÕEðµ$î£?u&ÌIßIUŒûÍÛÜ¡½Àý—#û&y-
-tkR¦ ÍûÀVùŒ
-+Eª0»¹§“Í 3M‡rN?ZeÜÔhSžK½c#B¯š`”Ž+ÞÁ?í@žâM¹ÓØ%qndzF¯ðIÏE8ú£ÖÚ¥dó½ëH’›Tz]¾7]37Ô—ãß?2œœÕ˜`‹Óý5ŒVY7Žâv‡ ébŸ
-2ã$5nµD錥öI …5;£·‘³â¥œš½œ¹ÎœI—¼ŠP¶–z ¬{çÙÏšÐQÅhÆ- [/µ/þ%Á4¾Ù^—a‚ªßvè¨1 ¡x™6LÚëI –œ©n¾4âzEÍçõ3ù¬ßÇÖ%r—±(×Ù[!yŒk»¬Fy›˜µ›e5kWâìŒ(¯(j¶Y9›oæÔjCBçO›ƒ±æä9?}0‹ÀÃÒéstQ Óútƒy QÆä*¥[ ~R¨[E†¼Íx#è{¬=6OKâ#s‚{oq“7ë­[›¹<nÃœ!é“q’§€ %ã¼ ×$21Ó‚åûˆY£®ƒ;YÕj įb§E »iœs'hœüÓò
-xá¢,FÅ×V¢u=;”ZØn†•îµ"ÊÖÔêvС՛¶õÝäa®r¿=Ia‰›qììY˜f ‚¤ H¸¸ÃซqõÛ#ø¢tÞDײØ)b»„
-•±ÒAëågѪ‡Öö-Ñ©3 …
-iâwˆ]SwC''/ˆŽ‰~ðs
-
-ñ 8þ~|²oßÅ3ôv<*gÅײî_ÈŠZœëÁ
-jf«Õ Iˆ7ÛÑt":¤Ê˜f÷ºá|¥Ýn«8ËiòÙºi=7"*ÆZ÷T…½ƒ Jœ[É©L~¯ä÷úxô|×ôjƒsm #ƒYmèu#Œì .¨lÝPXUòÑ,‹÷âÐysËÓJàläy¨›Èß¾gVmè|Yɺ™IÎoÆÙ¥Ã}xªhx R§ªœØD"áíñmóC/·Û]Ë#ìß’œ|rÝB>ý†›Ýe‚gظ%ÛâÂ¥FK#¼Ü
-VKëÏ°@öMêhµÕ{íÓ«k
-ýñWÖ͸uòóɃɋ,In“„È ÷úÏh¬Záßrž×wç3÷¡nã)8FÕ°=ÀËÈS¬‡5÷*ÎoÕ`!Ú\:âÀÉGàb¸ØÖ:*™°Wɬ)÷Ðõáñµ.Åzxï¶Q+u
-ßoÕüŠèg|)¢Ý”+媀B}lzr}/LŸè×Z
- ¸Ä¦~Vyg²åŒ¡°uÆJ°Ê×´fM-€8 ¥K¬Ÿ«äCËš, J½| šj_6R#/&]ääæ|e@¸(óã#š' ò{Ì¿’˜qå »|ð¹L¹¹j
-
-0ís ¬¦¬×&0/¾Ét‹ÕŸóëå;”Û9t;ÎÑÛ¶niaóÀvñ~¶"‘_ŒNëÁÚGM] Ñ#·8-z;aaZJpÙ ½kš
-²°׳^Kè„…žåÖ#Ö »*0N” u ^8~=“²BÑóCŒüÛr/CÎà-À;0|ûÇ£‡gÊÒMNÄéa`œËßwª@É#—0ñŸ}Åà¦Åÿ“[Ž5^3H¸>x«0Ò"†„TÛp»
-ÓhÙ$ål$zQœ€ì=´ö‚1d–®ÓÃû"sx(Ú*1¨ø¶z,ˆÒ'݇v!²§ðI1Õ΃ñ¦©»g [ÞC¡ç1Q1SÑÄl»Iz_TŸÊé–Éü¢Í«¹>Ð¥Gâ­È…¬oa¦Ý—ÞëZ¼êɬÿDW•¸¼‹Uô‰ ù;VtWí½ªŒä´p€4oUû¤I67Â]¯KÃ%µôN”ph»ÈØ O{ViÂÔFìË¿ú°È‹!”éH8-“¨š
-:B‡ŒlŽgú‚2ºaÒ"¦¹?|  ÿ¢ t+ë+ˆùR–~h ,“Ø‚_s
-h<…È™¸gß W ¯@Wç™áÜ;_y"ÙCü :mM`¢= ã;òtçÊXÈê ~Ô“'–6Ç3mœÄAÛ÷1­Á¦±ÙMæŽW‰¡Þ®jjÚÔ2ä,Êb¡¦³ÿÊ<)yh+oÕ QÑv‘j—3¦‘„å&‰
-ÃGÖÏ:¾åîø§¡û­2M.ˆºD7–c ùWkx6Š„N+§Ls£ÙȶVaŽkŸ ÓÜ øœy#‡-ôØ¢xofiRTÚ´µlQNí¸ ÙÕULÓ‚Mæ&ò“2ç‚‹D‡u£®#}J¡4×pÚ4emØ
-ÖVxæ]"ÊÕ=¤¿Ëós÷ç~ÿ—41‚ó¸%ÊO:F§£43†Y\ô¹³*lT¶Š‚Tò3®³¡Ž¨Å°¸n«¼ AoœsíêrO¼±¶5åd­1 ¢~ìËQ¢¸¾»Æ)56(ù×ÖÂ<ìÖåZ‰G¬LQ„pyC¯gŠ÷).è1 οy™ëßáÖO–‚\7ŒTQ|§uÎC†wv#†ææ¤M ÊØrÌ\÷˜›d†À¡f¤Æ1`ˆ×J8>ùÔ~ÐõÔ&­Ø`Y£Í˜¡cç?›2¡e‰ð D/Ô(–+ÉP×½L-Íaž
-Z¦Ûæûa„Ék6kUqèL£%hp—´rÛ° ÍèE–r:-ÃdÆÊHP:ì‡2;P®…ÓêF{Ư<Q,JšãÁ~ +¡h[ÅRN]~¾…L„ÁßïüÉíä-—Ù¥ìŸ
-»áY€»}€cù‡Câˤêðq£þ¤ÂeSê]èûgÚò6\LÀž/*X«–Ü>ДÏ@ÏœüO©ªtºG©÷Ž’4Å%ü’Y×ÞöPðüid‘˃8LÖU/p„h[×ÿ1õ˜åô×îE¥JP(òCˆ¤‚§t¢8ꜧÝÎQ‹‚j%U×¼±†ÙŸJXµ¿LF-.=5†Oí~Ñ
-\jË9gWØÅ."FˆmßÝÔÇ‘ÓßAÌõ|ˆWj p7MÐ"Kc20ȧåOh]9J°F®×Ò‡õíTNì)mC\Rà‰æ8èÄЗ|- µÂ¸ÅæßËlÏB@\ë®4Ʋó˜•k™_̦CÍö˜T!Ô½\!ƒÂD×$×&m iÀ槻ÁLÝ¢»?a|ÿ¤þë™ ú*$÷¼66ÛëðÞºR¨p`N‹8¹Îs©2õóŸÉ×®aLç%¢)K–9CJN
-iÿót:ùÃûxxñÍš6ïÛ÷ÄKZ·ÏlŽ¸ŠŒbd|Oá±–kË¥þÎÏB™E‹¤»
-èlLäšOnRZ~‡î&I°=w¦}æ‰l§b””Î÷g ÅTÍ‘ûûÁ{Ë1LxméÌ­?b†‘Ü€±%Öé]¶çÛ'$5ˆç }~Ü‹{Á47 ŒCS
+/Length 26225
+/Filter /FlateDecode
+>>
+stream
+xÚ¬ºc”¤]°%\]î²,Û¶mÛvuÙ¶mÛ¶m£ËU]¶í¯ß÷Î;ëÎüšo~äZωˆ³cGìsb­'3Iä•hŒí MDílhhé9*ŠjòÖÖÆvÒ4Šv6€¿f(!' ;[a'N€š‰1@ØÄÀÈ`ààà€"ÙÙ»;X˜™;ÈÿbPPQQÿ—埀¡ûzþît´0³þ}p1±¶³·1±uú ñ½QÉÄàdn0µ°6ÉÉkHÈŠÈÅdU
+üPˆŸìá|ŒRbQ»š€ê
+ÏÎIOžŸÈ†ÆGG†{oÁú°©rb’p¹€Â’FúýÊÁæÓT©©jUmÛëÕb3ô]ÿ””sÂ
+Îl~^õ­H¹²çŸÈôÿbاÑÙ®ï岞ÒæNHÙ ™C ½‰h1R^iC«ÙÂ{»AùÖˆqwÛÁxyÒWcÁ·ÿ¡y÷'‡—ÁOéTñ´šŸ­wôêuòÓsPMTUËçýNÀ(5±†ÅÄ ö¶‘ÛMüc,‚¨×]EI[™Y… ¸îˆ0^ ÆMÏm}™× Ë 3ž@óÉ ª0öGƺ°>KÛyE‡“åÜTh6þÁØŸøÐJ¢w¢§æ_[c ³öB8xÕ¾Vk”Ô‚—I¯¿ä„÷gÞk‰òŒ+(}‘²Å+åýdä„P9Œ,U•äD¡&w("Z·´U¾D£|yÛ)Õ‚þ0ŽÖ)¹` Á6l¬NÒµ½žŒÍ&²˜ W
+€gÍý¬ÌV” C†û3æèºnMp»-˜…Z‘˜æj¤¯gÜ\}–ʈ}—}ÍšP«¤{}ò#U/ÉXÑ…€¼ðk¬¾ëÜV­Ð<´eÁºµýt.<Á0œ7Íw©~‹A“1²Ù°¢%îßD?âÝjÑä¤[,È4ý©
+ÔI™Èüíç‘,ª!Û^ó&I|ú,~C¼ð O¯JëŽs/)'UgL—æªöÛ'ŒŸKnõætÉËÁ!;ÙÜ\õýâÚõþ#ˆ%æÈMµB”j!ˆªÎŒ o¢†PU&ø’¿ß¹PÃ$Þ;Ž‘»w©*t!Šꌄ|Õj”1íw-¡LÕÙ—›ö‚ߎ…>ßË>#ÈQƒ›a"¦´Ú×5ù“97Û
+Ïþu¿^ù5cÔÃ[î˜4mô–CÌb^Ûe m¦Ýìž88ç}gõi.Ó 6Û²¡{ÇÙº[·:±’‚~s¼r^®µ{×y"j¾À`UŠ2f5?+ún ¸ ¼â@œî׿…@“%5£shàî‚Œš¶{++¬#ÂЙH¼GH–T l™!Ñ+PH­ÞPË9­«·Ä[ZYIçi\eyr*–¨Ö{Gnðx*yçK ’„èD2JG«L¸Vä±èG6<… †Žçð9‡X¹;‹X‡ã$]Hñ8ÇR™¿}t%بêŸZ¥
+´êÄÐÓ
+Þkvßèåà?`Hdò8Ÿáz„û%u•$õAºu™\<bxÂ0×í°–h¹ÚU\£ÑÈÖ{¥ß\«E²È²æx,3wר•Ù.$UÚr¸kÀrJ“»Ü$œ)»
+'Þõ¹TÒktÊ1 ÊYµœóý–,‚Å w†Åáù.Ûå•OسÐ-Ž^ö}ÃÊÔ§4¼°…ï¿•U;hŒIv@™È8Too?â.i¾NFNû²O *¿‹Ÿ9áäu7é8ã›
+|V뛚¢”ø±W’\úyëªb™=)ÎþWà öûI¢¥Í|ûBŸx§/i¾Úæ3“"¬ì!óYº&4«?©eL:ˆ˜¨^lHëž|´XÁSº)7x}:Z=n¸Ö‚žäQÊü˜‚>›+Gr*|wݨWÔÐæ>zuÚÐÜHq…ȃŠ0?‰Ù“]¢¨=+ûfUˆb9TV¶54ç,Te5®Åj
+–€íÖ—ݯUÛˆ¢¿ß$»Zµg-SÃ]‚.(#º™‡`¿ Ât´Üæ 6¿mà¯ò™9M}§’ˆù'WÃÙð´£ÜNæÜ‚é§$# ÁIÀq¯¹
+ýl…;œë‚$#¥Rј'ûBYâSö JLj N·—“\ð“ë¨zå0y¥~Сª{úë#Òsa¢¸²ÆfÙà´ñéöªðc~ßâ} ]˜ V42lï
+T ›+=Ý"N¸F{VwÜ«Ýê'O¼o3Mk¹‘)& Y)‘-ÍÇaÊgþÆ®
+˜r ]w9jr‡šØ[O§ÎéåMÍÏÞ@Í?éÀ0ÕíµDJF„rFhS[ͺ.ÆŠz¤9dR’XL
+fÎ$Ë\nÞq94e#q0r±MnJïù» 1ç5Gö>
+ª *Aº\Õ@^¿>V1Ö†ÑîçhµäÀɱ~°ìj-ýflâÉL8D¼ÈV©§p¤‡Ekc4²îþÝc=´BªÔ"–¹² + „›šíwp ‹ÚjOI­{4°ؘ…‹VxáOR¡®TÈGA ì³+ ®À©„”À3ã×ËbÀõøϬ¸»eéj .5ß?.4?‚w1¤ÉÙ,ðà_–yC Qöê¶9›«¾_¼­pJ-G¥™Ñx¨^ð5xŽ“L¼<k -Ÿ>ðh¼D°A€'áO¶0„0²8t³˜¡hÀ~AÛ{ˆ&î)'`Gï^¦‰m ½\‹HBõoW"Þ<y]7}rÈ“!Vý, U4.Ð"‹¹ Üw9… ÆžîôÀjìS›•ó™…)å’æøUOí›|XÚr
+j«ˆ•Úý¶”À´.u-EaAB´=?`Š)/ æúÂÆ=šöÌé×K¼xX¯·ÎŸÙ5½È}áÍŠ•ÛìŸZñf6nŸÛ2£‚õ¥­¥gÕv/ð^€ ax e¦÷Êcé…|Q*íÎÅ>t.Äñ˜êò[Ê&G>¬šX>­|¶F‹ÿF9ÈG:
+}ˆÀu‰‡FëOðѾÒ`g!ë˶’Si™Ûs„×dŒìΈ”’G‹ŒÒ÷¤úPXŸ‘ÊX*òp¾š£µô†;pšX ¯»Õ䄾ÐÐÅ·.ÊÆ™³õK· ó§r±çÌg<¢åûœs§0œRÁãýËdò3‹Lqø%$ØDë=+¶X—¥ˆÚHï´m%¾”+pÔg­2œÐSíÛ&ÛÆ’ú
+ˆ!Ýkk»†“×ÉÇ.¾á®ì6Ëq_6…áNÝ«—6™T¶Sµ–F¦›–‰0;4Kÿ½26aþ2+Ai};bŸÀ‰ŒIu)I£YÅï“y¨)õ‹—­VïEeõ–œ+e"ÑèËF ÏèwéV¹Õ> ^;"ZÀÌ}¯å®I„
+ÚŒW?ð9ÉšjgÄO¤¨Ê£%Oy-¨Ê¾ÆÃt­ŠÉ2¶”êy (6eÅF~!²×9ÞÕ=¨NdÔ_Èí]Þ[‰+£øþþ>»`.‡`ÔŠk™½¼CæêU¬ùôÃÅN²3Ë
+Ú¬wî‘ê"¹¼|=’4v§Ù:¬)ÈÝ%¿Ÿë°yÔÅ)aÆÃ=Ax•qÊ8úçUûƒòM[iñÊŽBËE7ø·džŒ¿_SMé)7ç \=aY„2Ǹ,DôÝØÌ¿ðÿtöÒãž¿â K‚7Ö–ªëÏ«wV÷ž®a@¡ §¶¦Û£;4É™ÕÖYYøuzD×/e£*)£‘ò9fS$ 6úÀ÷ÒlE;ûrðã`Û¸ËCë*‰{•mÖƒºàÊ–Mx¥PJÇn7ß7Á±^m©Þ®;±ùM6ÂqN;Me.”·k–ü¸¿mF²jkÁÒ⥠êv„,Î8½Õ­Mþk´«Á5­ ÜªUô æ^NÁ&ºg3w‘²X4YeWn)•#~…¼qòõh¯jH¨Åö¤Tpû÷ؾö|]–öÎ…¸GxÖÀ´K<$L
+ÔUñ`•5Þ
+¶¾¨1&µwÉù|ì9UÛ39TQ÷䆹í| ¡Ã(=̨º; GLâ§6ÿãì¸Ì¡"¾Ž•w…B|(iïˆ'Å'º¬ú[7ô ¹r+£²*iÌÆä;¹E}—ûOþÊF\]¦l{YåAF=AD
+»÷I¦aôIãÔ'§»ÞÄû✨œùZzñ
+´afÓ´s!(ˆ)§é‡¸˜Š  Mí0Âß<_°7;3s]˜(ª¬Þ)JÁsTæû°€½F’§Ò“_íç#¹ÏïЉ¯"#(àÖ!È¢‹ù£áõDóòöÔfÆë"S§ÔtN'Þf~¥ê:#Ï¡Ú®“×5¬'9/ŠŲ
+1«¬Ù]͊¼аŽÎžl_ø)J%r˜#sŽ-Àë÷­Ýà,Ó’µÿV¨ðyºoèLLe·rÝLû—‚ f{ûc†lî %Gä·Ú÷<{­ëk†¯¹­ey4X«Þ>¹×¢ìØÀª"¬‰åLóp å4I»{lî5<o„îÌû4%s‹_?Y sP[ϱ0Êh5è²ÀEÎÀ—B] X´sd«3*8w†çñOSDŸkâHÅkd/t$æÕû9ÃÝpš®²èwm·Ù`×E¦mSû™ªf.þÝ‘¤ÐjõmïòïË`m•œyò§oURl»î*8
+©~ó lP}EH¦à%ÄM¼·¾t›t‡¥âÐ{cöÞBÑP ,Ì6@–0®ª7ëSB¢sÐãiÃ]î“
+á¹×»­còh¹ÂY!Ä÷­Kο™x¤õbVÑÄŠéw‘q¢†BŸíú·\¦å!ÎïÖt–N´AGsƒaÃ6ö¥¬0%˜Y—½ãX*íUϼ.;ÆëÚBØåŸÕ$’a’ÉÅ/KáKv2zQü ÜIDîÔ”´Ö# ­w±Bl*sA™vœFûô¹êH¨ËWŠeÍ6«T¬GK¨´gÙ¯Æ#&¤'E¶ÞèÛƒbmAФMÞùpþÀx¼(³L½†^PÅ”‡¤•ã°Ò'_ÊsGÈxh4ÒçÝ06‰½`}‡­¹Gî‡)U¦5u†=¹‰€®qäXZ`”…*ƒ}^­Ý›ZÆËYÝ…Ô ÀüF0j ÉؽoÑuo·àd¶lŠôæ¦|•À|ÒM ÒÐ$<tÒ;¹–®ö¿¾Þ~<€·j4uuþe»ñW¥”ñƒ£D9ovˆ<Õ¹çp¶Ö\g‡=–ã;`×_LtZ±É'òãó2MiBE‹À¿×jö
+rÂWf¯(¾ Ê.Tsûœ$rG~‡ÌR)G…-ú²O2cl?ÂBüX CÇäd"iXćÏà÷ÈÏ:ŽDN
+ä¶Ôñ{mƸM¯ýœîdßË
+‹¬)Ì Ÿž6Ö=jÖdÃ;í¡Ô¶„µ¼n:_>;y""¸ü,߸藵’ðȲd Ëd¨Q TÇëìÙÚÏÜ­•ïØ`.ø|Mõíº$õ´#É*šö7 ´¢Z•—Ã^SúëVa=žBžk#UõuƒKVQVQJÕÞL§Q¶Å¡ïºÜöÞÖøMØ¥b]k®Ûý7>ݳd«,B?.ÿ@uÏD®3uçæM ‰0).WòòÉÈhW' Vws˜‡×ˆ¢ƒ•\
+=;3؇ZÑíx§fÇu1{©‚qnˆé%Ñ)(Û+Ë*jóºpd±NãÎH¶›áóú E‹´Ø*ë_ªŒ®MuL¡Q°­èlq±ô¦‡³ý4ýCÂ4Š
+õgðeµ™ ýÙabÎbg›iÏRZkaPC+ˆrÖƒŒF&õ*4¥vè°½4ü`o²O¹Û•{6oŽ;ǧ5M²*ËË»mýæAd/œvH&TvןŠ•×èë§fè"W"Ô ˜_©§D´ß-ê{IU#\Ôw€18_1mGwÃI&Ùj™6j%µΑ4»o»R.*Z¼Ê…jº…i7“—n+2{'oœnó„É^*½mp`6id¢ýU•DoPþO z¯@@W7Q!˜ã¯º| —qu ËNƒò,ÖÆ8þÉòê’xÅ“œ-LÂæ“š¤Ö,Q‘ݾŠY]ò:ú©s¸÷8UsÞ ð„Œ)ü<²oD¹B2Â
+Q9ÁïÕ@[E£©ë|å»Þ¡–åq¡¢ pȫУá'¨h æl¥ËˆxKw,Š–Z=S÷z ë‹TgÔèŸ)¸ yXɶÚj"С~Ù·©y¾Wjǵ­
+)˜Y?þÄô‰H;§#ËaY‹zv,„krÇ)Æ-¼›è™«Ÿg\VÆAÜ®ô ×f-²”x éH9ØM±·‘úÕ¿)ÇDEðHÅ#Àë-WΈbe8Ôç˜y•ÛaÈÓ¶#„ŠB€s¨Ô[¿Ñ¬å=%*žÞ$ŠÞµmu|6$)!¨z°ŸøǸô†áîÊMÌ]Ê„hf⃕ðH!
+Z_!ÎØÏ™P°‚ž§TÙ s§ÌÛ ˆo{V®!(H”4o|ؤvIÒ†¹./ÔPÒùä³L6ŠH±ÞNÛ¯9s=N­ âkûrë¡¡ #Ž™.|eìÀ‡Ú½ìðâ+}(|ô’‹Ñ<w–ãÇûpÌ'ä çEFeÆZ
+O>´?ˆw]°÷¨Ãæ'²€n]*¼½ZX6ÏvJgv’‚¶Á =£;–ðO ½‘*-ŸâÝx>G( †Væ3ÀamÔ­{b|¥ %D~!Ù;'½Xï×>Å{2\ôsA¢›åÖOUiCYxm]¦ý,+“+ÎLïûôcK”¿´ãOn¶Ó†2pÖh¿EßµWê¼Ý†a#’Á°ImǨÐ5<,”ç'—ÇI$º¬ªêßbŒ>"1^ÓZ-âáÛÝ-ƺ%·£¹¤“—Í¥’IÙ ÕÛzbÑéš}¶~Ä©âLÄ6 ãaÕÁqðP2´6GðâPx,ro½sayjñ¥\Mó8Ë49öÑ~q|¾^þZ:@MSAÜÓÕ}$\æý¸ú†
+ÔSßõ}FÆúcþ„"Ã\|¯*)ÕI ÓÔ–,õ†˜¥I"
+n½ü.ñø*ì AÆtþØãR‰øæåUçÙ +KùMg”m{·Hn-dðƒ­
+'´ ‡úÃi©šTâ¦a4ÛÀór4C{$ÐI™}ø¢Ù>a‘Z(žxSomgìY/àOêÛ–·Go<Ü;œö£~NCbŸPT{ŸíþBÎÞ×pR½P¤ä¹ÃV‹»MÿpžíÜ*¨‚]”Yè=¡zéêÛCœ£LŸ3t7_>&IZoômG‘f~•¤Ôóþ{àMßq;:Š»Åu ¦€©ÓZOk˜ˆ<´XmümŸãT`»u6J+kŽ¦‡+Ö3ê~ªdô›™Ò]þAO†ðq†Â…“”ÈH®è$#c*ÿ1^ïÉ’^‹ÍR¹aéc‚ç'JžÂF°úÝŽH18LVÙë`¨çòö«;nQRGí\vß]"zÊ°¼~Ë *¬‰@ÔàÀ°··¹K
+ª`Ί‹šXN”ÀU?Ž¢®ºëÈ5ËXrB0n9½âà!§æ®»u*PSçoiyµÚÒLNöolU®/'²ºNl¾+
+z·ô̇oŠ%ž}Áwiô[ªÙ׶K¸pWâ^­níåÛiíèf.\«™CÐ f¤: l©N}Vâk¿3 Ê[‹æ+>C²W97û&Î_lûnú6±pÎÈè?9+Ì^?…ö z×û±·ÝIÉ*ð¸ãEu…nÄsA´Ç×ñ^dŒ–kC2^FvBñ§ Ó¬Yƒ¸†|óIÔµ%y$¥Í•Èƒ’¬¿BPÞƒúuÓ?fÒrJZÔø¯e¢ú
+WL©,ãõ®<ò ¼z8ØAÚBeåŽýAf!Òç.P£MX“mtŠž¼ßZ‰^`«-Þè|‘ ª<:´N†„¥,ûP£—ærÌö)ìÆFSuê‘Ù-Qà‘×®
+õó"KŒŸIF€¥%(³–_@k°„
+j-éù•_"R§‡7D.àúœµÁK`RŠcàÅRÓ¶µËê‘V¡€Â‚¾±Ð ‡‰ŸV':–ðê$íôÃDgènº¾Í·ìM‡k/‡&ŽNYúÞVÆ3‚tӾݭæ;["Û‰`Ëk•¬‡~bŒók-<ÓLÄHsH‡X®¡Ê%¨};É„ÞÌ“Äo·ç™HV²[]û:ûýã÷ön±Út‹©¯¼€ x-0å­ ¤ò3(×|–¤á#¸Úª$xœ£“µ[=~©øwBˆ¢ÞЦîx´-«’Â@iaéLß
+–qÇÙ¶â(ŽÇwû',»_eßùÈvôÕÝU]wùd}ðy0=˜$IyO›ÍÈ€œ=»U9e~5ÉŒœ¼uo{´Ñä¬nEhÕkPía˺OoÑQ2úˆ9Ôì&\`}ÕGÈÔ³ktð´bÖ¬5‰\5 °ÀÃbC“
+8×Ù¾]“’h·À¯6æâYn%«çŒò2Ã>¾õúŒP?$8uŽÁp
+ ™ðˆfd;®"¤¹dA¾£B·KµAPùsF_óuª†. áŠD*Aü¨ÊiðÔ•Çð—3+¥]ª„kyÕ£dfÕp¥ß†ÜŒ&è tÝøgXÕ€Š¢ ãŸ6MªE×ôR¦™–/œÅOtÞÖôÝýÙbE€(àºè±GÑ@…¸A¦½¹ûÆŽJÉìÁÚ ˜‘êæ§p„¼a¦ÎïbH—@$ÕflÕ?îTù×7íÛ|¯œ1¿T({i•ò¡Òj[T b>J°ÿ܃>Ž.èh‹æ
+v¡=å ze׶)ö\à˜¯y€Š|É) Àµêú<`I@Nw¦éŠHræ­Ôóºƒuy.)ø·Û‰Ýê‚í\üèG®øÜè 8tÏ»ôanퟒJRo╨,ëE…cc!U!ž¤ºõN±“¤×[zçQ¤QC"5ä ã‚Ê|7ù9s0˜L½I½\ðî §¼õq·aø‹_®sÅ$Ö꩜Ė]dyé=t°P‚Ö¦—3YoÝçÒ2Ëp•ç]Lò2†ÎïOñfÊäNªQJUfî‰8¶÷$ý›°‰¯öOv¢8ÉæòLvViÊZã¬à¥Wf¥
+<”â׭Ҫܹçò3¼+çÓ2> $´‰G£éœ'¹’Ž¼ˆÔ
+ªwQå\T1‡`ï–*!7Ñb¬§¤ƒÌ%©©Â+¨÷|¸M·äv×·vã„z²Žç§ñN4És÷ôq€ÔüY ÐW<o9tƦ7°6UL¡y¶s-ýsŒ,ÓÁDHHZiÝwà¾8›5‘ÊK×>8­-²¼
+!STlÕȇ=f¿lOtÀGF­FTØÌ]¾Žr»j€¨7mÞ±Ï[Üû)ѢÈõ|ÿ`yzŠöÒé±<‡‡a^!½Ì=UÆø×ÈÂúa¤Î†¯=Æ%L€®"¿ý%âwQ˜H_éwõ#"ÜH„-»Ö0PõºÞ¥@°lÛt´+Ã=¼~•¬Z>ñ~)E‚®8¿’…@ Å²!tiv6diü•â¨n© J@u˜$íoá}ÝÉ–i3Áñ§EÊ®äK„o«9 ‘9Px¶:lrÔpÊÕ²²`¸uÓ/µo­î’h±†™º¤Õá¤Üôƒa30 ?GÝf× k!{h¢Ræ×;ì]OËÄ(«‹ž<üÓÎÃijW$Ä,= B‘Å)HS†b@‚ÕIw´«–¨;¬Ùlͨn³]]CþÃzÃÅH4¯9¦d˜«çï¡~¬ˆÊ \ES ·Â>VjPÈ7³ßtë™LËYýUå€(ÉxpЋØÁß`›¿ÃTdߢ}éøO Éñ¬1°y°‰¼wx;l¦"–SH{ïÚË“°ØéÆÛ'µ‚ ‰œõO
+‘xÑ6@·î“ü <SË~m!¾áº™Àƒøu’°ag¥Þ¼ÃæÚ ñŠw­“ë•Î2z­B•CÜ.7 `˜Uy̨²Bzx’qê/›ä?º—d¾¨¢ ѧcŠA×<38æª"<ž ‚õÆ—½
+;i÷¤ð =¨?³F‰%dr,¯Ô=wxŽ$Ì„½‹eÐQ˜ } èax>,¢RÔ÷ÕüMoÖ+&Dù ={ùfs9 µ¨<|ó\¡Ð’0së·§!Æì¡K^j1®!çóã7ƒÂF!2ùš/ÞQ ýW…!dHc±g±Ä{«£Pa,†S™"GÂd¯Íçe䶬ÍöáÇþ°ËV¼Èˆ€CaDÜøçf:*ºXþÉÁŽ)2Å·áV׫ÂPHLVz륚íä«Ÿ96? Í2åÈÕZrÍ­Í »È»Tn¢"Öhd T3‡½:¬&™t0M ;Éà¡?„R„ùHÌ÷ŽlߪeÌ—cN^Žaî[¦|©"ÏP%]Éúí9F{ ,R˜,wÃy'kÊ?Ázï×J#ů§¼¶7èÑf[ØÖ¸Ü8m>é,Õ£ñgsöèîǼ–Ÿ >¢’mƒ»šz¶‡–œµýdïŽf[¹öEódd@â?õ–ûn±áH¬‘YÄ.·äÈ"R½¨³® ®c41V8;MmàZË¢ò·ÝHu0”`QMĦ‹Â‘.;¢¯|í/âcbÇóŽ—GÛR>BŒÛb}7krê«<Hú€·Ïg†Îq¯Kîý \—|XY¿k˜ôÆñÚ.ŠÖ§ rõy£çu‚dàlríÝ‚KWe >À¡꓃ BÓwè‰)YXP›Ålè•1«€KDà©)ÎýâÌ2~eœM=¤®%Õ3– Cu^yQ ä7ô£¿˜ e*²»ž¬js»¯ù‘1'¡Û~POœÓü T™æ·UFaØ­ŸsA?Áè¼³Þïê/Ã×›Ý/ˆ' xû:ï+#™>ãàiýƒžþˆ¶ âh1CJi•ÅĨ 0+íˆ ªä›Ò¼fÓjæ®3„":b^¿’ž¾>œ ÒGßzHűI ŠÍ2‚W<—ø­î±aj4Dµ“ 5«\6†3Ÿ‚ c½Fbá¯8çÒIzTp…!‡ˆ­W@Ö…•Le2ˆm¿MߨC8Žžç¾|à̤ÞBÂîÞÄx˜1=WUTw.ÒB²è¾Ôç+Sïj©zx¡Ê-iSŒÌ¥ŠvÔ¼+ù$zÁÏ™FK0&}–ã㪼¬Y‡~9M+Ã¥SÐ%Ì.äÛ¼­=éšâÒá™>uMÎWÐ_Jú±Å("3²8Bwú÷7Ôm´pJ°B4¥”Nƒk[‰urÙÍù¤†sH÷Ö°aÍúFŒÆ]bføÓy<;X†4Ò²RÖ:’êa“‘qXL¢e9G膥`ÓC®%…›ëTÕ“PnòDXup­<§Û­Èž¤ODZ‹ø5­¦/»#øí>¹Ý¨€º ~'–®y×âSï2ˆÊ²„´` l—Ú-|Us¡o(ШUó4¶ƒ¼&‘níüÅçcè¯7Lçdk~Üæî…MTx€iÊL1ĺŠœŽõ‰4Ábͯ†Á¬R=ÐFÿ‡ hC(íú6IÙÇ0”¬ aúÊBJiÞþv£¬zh7ùp¢wÉ×é–WŠ|WXva,qkOæê¸ü¢AÂLR¿i9ßv«!Uno¿¾Ó7…­EýØé2CGÊHß soo¹°®âîç´ÃÓ.·ü‰XÝ[ä
+sŽ[ò¯ÆºŽÏ ZªT˜Fu醭aw;ôfI´ª|fÜÚâñ‚ÑîB5ç:ô›C]Åt)´¨ [³')Öá(Ö²Xý” ©A8çŒFŠƒ9'™ûkóm Áh%žºË!]Çqf°pPŠpÛh T€[LœPv?çM4™£nÓMZw ×Ð]ÚUå)nÆ<DíÃÐ0ŸJç!pº­µB‡#_JÔ&bƒfç×M2ÇjH@§ùåAßÄt
+Ópd½Ô[`çCDîãY`=O¨ã<IÅÿò‹I‡ªF< óPZä„N|£Ñkÿh!Jž¾”Ú§x¼¬ÃÇ`3´üµj¥mÛ*õ·ÒÝ“$Á³a†£òÑ*ààw¥+}ü[=5êÔ;ºžiþÜÉzÇS^ dSuœÏóÿüÿ,.Ä2lsŽ¸@î³ñÀH²Ç¦¸c;däýHŽˆEpcæ2®ªÉ'ýœ²( HñíÀfº6¢~ãÍè’6yÏØlêÖ¿Œ·ð‘®ª_0°—j†BƒLgxN†N¼¸4tãr&ð$Òá“×⳦\׬#RdBÚsdz/¬Ôü(Lš]ÓÄ>º
+Á¸ç‡ÂúIo>¢ž Y†¬ƒ;¢+A²neçΚ[czýMµm/p5@?¶~t€pð’ºF°‹[Ç
+ }W—ÔÖ¤í®dÏê3Æ­­Ò‡¿$ºÕVP› øÅVc%3¥@¡íä&žH˜.ÀýÁ6vÀáõ£…z…BqÛNÉš›2•TûD:½õ®àxü\Æ/(tùDѦ$C‹%Ð}B–ÌCÀèçQÅÞ §ŠµHËÅL9Ú~[[f︙¼mZŒ=6% Ù]NÐu¤s0E‚ÿYð»\I'T‹p>̵†ƒ"H= ‘ª-ùQLO*I!P9RÖ° ´
+tE$ úoÜK‚†¥ocÙÙ E/¥ïµ
+žž3¬ªA9^éH_ˆÊ3ìšæدÙnà‹)áâm>À}ÐhàÄšŒ åø3ÓÝŸ•Tw²•ä!l}òrû´žMßÁž}µe¤Ä¨(ÔvÇ µþ«Š ÉpÝ8})Z¯ìfä8»8Iƒ~±žH.<³»k—Ã¥ÌdÕ¹<™Xð’hɤbÕs!÷Müÿ´/$¥nŒñIpƒR{Ä„'âcêRIÙ=\XÌDçl„ñÙ7<²´-œà SæÞ’ÇVûñâ¸bå#É^e‚ÏÙþ*Y¥µ
+÷5bóWŸüÕôt³C9D$š)I®«K$j tR(PPÀ"“‰ìXjÄrÍq=L7Dã`f*n^˜ÑééÍz˜`ÕîÊ_Òºn°u|ù5Öe3Œ?Ä‚! ×J„·LR8“*'²¸¢hŽ•ˆã€AŒe~ô"ž^'Ô®qiÙ&­´fˆÄãow^xvÁoóÏRvÎ?îè†÷ÖlùÑ2ú«4Nc|mOdòpÝ.#8£²#îK²nd¹!6Hßçw¿Mï;ž†‚ìÞ BUuו€‚CTl®´ÔZ¡ØlAi!Lëö.¨N«¬œÏÂðNÕ ÷?õaØÞ&.8ï †‹Gq2x4Sâ@ò~ê–œ%´Æ­j¤«¦³úN‚Ó˜N SˆWVµêYkÇ°¬5²¥áŽ¥ôbûz\séeñ½kQZy¤h*Z–E(ÚRˆ3 Fè~˜;ã|$ªÓÃ[®ÍÖ-˜N]ˆÉáÙP<|Å:³èôFÎõSº6¾Ï,)£Tÿ¨²š
+ÑåêB:­ÃÖŠ Êx$To9@H¸%±.¨Ì~jô&+A 7—ê³Óê®ãO ºQœß ÝÓ¼UëªðKŒGf´Â8Jý?âá~«¦°,i´KRQFÈ:çZÔ²öhÚO>Oɽfx‡2ȪA™`dµjg ÞqÚþæb[{e=?_)ºüDÁêÊl[TÌ37Æ8)Ñn+àAíMõ­¨Š"z´CE'h˜¹BÅQqzïªö0|#aÄ—loàÊ—v’³XfŒ´xè@—zÁÄJ/Ÿa‰¹­2ŸÝ¥1%~¬uÂ…ÚÐ63íè4(ÖOHv´Éã‡6ø‚æ *ñ;yŸÄp+íKÈG?üþúI‹À7 \sNw%Ø’‰î;J¸To•Ö!NÉSenéN†£²p¬î“‹
+4­úWM‹~©¡CÏßÊÿU-Ÿ}ìŽY¾†¢á_±@Yh€íu›øbÔnW,ø”=ízt<îKfp¥]“ŸqæÅÞ-3Æn’aZ|ìŠï|=AW?~†ŠŠ¬‘-šë\ïb;üšsî¶j÷Žmùé4§xßîh&ô¥ü"{kƒ³é|‡l#g nl+Ï7#R±´Ö>õŒ™Y©âeë:@³Í¿xçc…/}RÖ¸g´µõIßârÎëýM•4yþ^Ú'ȇ·ø§–ýͬ&‘^×Á7È:6'ó'r2!LÇ1¤Abw>ñg²*¯Ž¾O‚Gk(9ïu
+%¶íV,ÜQòQÛÆtäf‡ÅuZý~J´A{3’ÀJ™‰&Ð0M\ý\¶XÀö1S¤³ô;5¯EaÏôJ0·/›Í4j³}
+eOLÌq3©¶Ô}ÅÂù„×
+³ÝMB®Oá÷£…ˆ¾b4Ûm5Ðo{\ˆciÿ™ÇWáÿ3Î%üg©çŽŒ¸Û¹J…QÒ‚Q ]¢À›ÿБ:™¾††4§VõÏ_$2}Y뤩ØÝððÙ ÿ¶cÚ¨"yog2ÃŽ‘} º8SJ)ì"Ko™†øžJ/ Æ´“+b<7H @,U¸)‹}ȼŒë§ü`J†g¹÷ûŠ¡tm
+…™¡é*®ïÏZžx;À-Ïåìƒ"ïÚ†ùòù·)*¤¥3ËÚ^ý=äÜúP~Ø.†ÜT Ë ‹ùæ(Õ¯ ^þkΛ±¢é ¤TrÌ°íåZãÒm5Xî3·#xæÓÄ·¼+»b{ÿÃ0œ}-å1˜Ë¾•áQÎÁz‰Â¬ÊÞ¹tEpyIêY`à7¢K KÀ½1«Òâ
++aëØ “)¯[L’ïµ' ò+Ÿ°Ÿl‘\ñ™ÛtôÍ<ÌÖëwÊ¢bð59Ð*ßCdŠã•Q¦T¹/®¬“¯}%%§º/»ï³t.fÌ fMÚ˜Õ]Õ4}/ ÃÆѾ9ÿ5$ÉýÓ\úP/eë1WÞ³…Óv`ÓHT»Š@NùÛèjÔø«Â2¬ËXì^â{ËÆmô«—Ä 3¥è)Ç UGø:ÿ‚|…o?W6Á~ÇÈ!]ØâgÆ®±ê3_áoxFP²¾Nµ¢CŸs|’u(ÙR«ãòâü)ÞNcZöÒ¼°nPF›‘úâP‰6úÓ(1êv¾o*ï›”|QÐù#$!4SzâS#Ž·uþI6Då%3פx{ˆé´¯KKÁçÌ®CÌ|HuæË‚Þ
+mèLj¿I¼Äyê4¢“xC‹´¾}í_dšÈb‡a¼Ð˜,ÇÁ”jÿ»¡|
+ôÏ™¶ôúû¿
+h?IOø¿{EÁk–X4~Ôåqp „DuNLi’ã¨L’¸œKŒ}ƒ—Öxåp·UÚ¡e=.L,¾uêÀ±Ó>Ø6¶Ëh ¾­I ©¥2ÈæýkæYל2oíˆ6KîØà|ž °
+4£|í 4öî #a`ãåƱÂcJN¿$DÁäÊ:ß÷”¶Sù¿š0'x\n)|”"<jÈàlZñL|ìó “ ¨EëhÈ`TdÈægòㄲ'{°›ö…`*ÌñN¦ÈKìí111—Q'ÁX¢‡^¡8fŽ$°}d+xÑW_Ìñ÷õ•Â  Rö>ü?ëáˆò$ƒ‚EÍ›z`…Ó.´ïîÞ9C˜Lö*¸`b@åMlå½/O‹EW9
+¦?Ä›Q‰ìó
+€u“¶o-ռζÈFE£ð.åƒÊŠë>{‰*¨òwµš°s÷ãÁ±A
+Ä¡gK°–jྤvÖ?”lMöV([®™4úÊáD3p½$V¶Å,t‰#”ò·k¼Í_y´©¡4A{;D9"š;ó;ée$X|9T7N®åüok½µÏÝ3äñ= àŠŸœó ,çPzìýªk,AUóÚd¢`VX¬@a!G»¸¬³^„žÍdSïÄâzy’_W}T kÓˆ}¯µj,BMðî´¥{¦XS~§aN·¶®žc“£Ô‘«8³s&ëÊ‹·Å &èñÜ”?äý«>ÀÞ×]Q´®óP™Øk`ßäÕÝf û®‹Y×Z«ruì=È3€1\&ÀHCNXùlu[80ëFÝŨïØìNÄ]©
+˜%0œÒAJ^ý´¼%¤w}/ ö‡î²òAæìQæãžûnúéùÎÕŽÙPÒòçÌÃzÈ/Z;ž)\x‘ÚìëÖÞ9”U.‰Ó_>ò_øá5Uûc-­@6 QEæ*D}X2a/GúGc1§OMc-Œ¾2å\¶ý„ÆP¶ó2¥‡`1”{݆àYšU!²TQŒywµÄB´¶BSÒhឤ2šA1±3_oyPüTIŠ¼û«õ[»TW”—¡6ŠÅ~u‘#·ëõpmðI„#³ZÕY$Øóyø2XõþÇ0†¸-{ñÍ·¾ªå¼2ñåÐèœ/ûY-T !ÓXÈ`lgÀðß‹Ù§¦ß
+_ÃýS‡µ )1ŒÊOesLQ²
+Ôqµwˆlød {ŽÞ‹t¢ Þâ+ïí[^.\1} )ÃÌÚtú¢à›%×ùRO|cÇŠˆ?ô€L]£µúem˜m…pRn7+o“Þ«¶›4s·Í –çë:yÊtôÒ² ê+ã\æ—‹HöɈD#|q™eѺTÀ?È6@å¦}Òú”¶¢§†ñ®ÐJÛ?ûÝ(
+!N™<‘cÞšó¬1¬
+Jµ¸Q
+¸* ÞNK
+Ä'Εo äNïçÊòHª,—üw*»ú.|¶0ÚIÐ ž4[Vƒç›-Gy2½ û{(b'óXèŽïÝÕˆYzåeø’ºkSoðÕzN
+…Ï\{¥?!݈¿Q 圲,é“Ó{Ü™Óó½%·‡ƒR™ØKY,áëÎú¤ÌLŠšàßÎÐc+t_5ñ‡^€ ¨aà¹3n<‰¨ t6.ôÌö›Šûƒì-w\£ÐZÆ.ž(¯íôúDÀëôèT!þYÑPêÒ•m‘Q•ôƒMƒhØ›‹Öš– Z¿,ÃCó
+ËÝ@Á¢gßqìöD€¶þ¸µÿO™ë&Ñsu€r“·NŽ¸¬¸Ü/½à=Nº&F¼«F_ L-C§ˆ}yï=]Ií˵¦² †¤Ä,Õmza­®4@Aĺ@q‘s “†D(7–Øuç´qçGªw=cP Ïú#ÆÅ·¹ªËPl²Uø¾d¤GË^ôë/mŠ¯,¾RÁ
+¶Èãé©t²„4å¼н”n_0gþZXßåì…×bKÀ!È*Š¢Só±[¸ùq]²Q¨ù
+R㻯ÙQôÏŽ}Ô Z—7“Á ¬¤jžé ñ"FOiŠ>?ÎyÛ!änQT)Æd§ Õ©Jü[—p1}àn‹߯¶ñˆ#ªU{¹SV}¿W†yT¼"~,*0W‰™ý.ÜXxäݾw‚”ÕÏ#hïyª ?N8,¬Ÿ¢Ò‚÷†—ó]ÅŒPpFÅKÕ~G‹kýj Ý¿þKIÕ$õºÁÞº©‰uVé¡OýC±ÉåMìi ž2C´gyƒ?’ËvH4åËÌŠJ ÂCéØK!ÄÕãþIêf|ÐÝþs/ô³@Ä:÷8=]׆ËlÙím1qGoi{tÒ-3î.¡¡¡)òË“–š1®”9c¿X;È:Œ5ð4‘t# `bK)qA¢ ©˜æš ›c´­5ÁzZ1ŠÞÖª)\“²1ì×±u27Õ@}}·f RÙáÝoW9Ç\P¦0»EÆ}UB%×/y×—¶¤^â¡26ýù,bÍŽóPI2ƒM<¦éË:ª‚ »û­h¡1¢Yâl8.ì4„ãGóqj#ÊÑY
+bJÁœ>ZÔ¶X-wJÂp²u©âÆ0S§±sª3KÅæóì“#‹yžÇ­¶÷ âÙØn¼ú}åÔ\C"…}ñõkRO‘"ÆÉصCŸ°Ç&î—»ýl#˜LV¢n÷‘¡ÈÀ)5~ÁrioΟeÓH²ƒ'¨ŠÒc~1GÙÏVÛÔ&¶b®Æz†­(óÞçy]µu9Û³·ºSß<ñ‘¨¥ÔÆúµ•†Š·ý]n>+`½÷£¯´¢w¬lŤŸÊPh;w#7Ž®vUs Ë0 ÒÕ1©HÖW¦Bü0%Ï x4î/ƤúEGû ¤y+Ë(§ÛH·ïv²x¹1= ›uBCpƒÉŒ5¾ÂÇ™Ò{A•0žÑ5'†:]+³ lYô9²Ÿo Û;O%í§æe½;ió]…J.Å*¸½ÚWféë]šÆ¨’IFD>’!(š 9$˜Õ{è{W»‰êå|rg,fi©†Yœž›V™êkS3ððŠ³Œê£s(h"ñÞJÚ¹‚ërG×ȃ®Ÿ¦Ô\ãûö! ]aX
+=ÄWDe1ˆ¦H”L9ʳ‹Šâ(ÉLU~f 3Š^ùž©DÃUBAB´m0Ap ÿØÁ÷4@-ð³ÅÌO­‰D^¯-;<BÖ6÷¨qs LâãÔ#½×ÄoQ ,Lñ¹½
+A™âõ2ѶŠŸÓ¶Äøí÷w6Ê+–IºÓœnµq×oúWïkN)ï‡mÖ8/1aÀÈ[­ø'! ´ŒÄPxÉ¢rB<–ðœØEÔ?Pr|7°™2­²3Dá ÄWUOš9¬hÓÄ5@)NI´°›s0ÇÖnŸ[fö½U¹fHɸ>›»|¾¸¬{ü*ÄØ*X‰À¤ø‹Ã’mdñ„]8Î̱r¯éúë$Ÿ5îyôÅ 1™ú&àv(WØáñªLŽe½pò‰õTàb{´ŠÄB!ð¸YRE!ɾdä\ÁÔ|
+Äôò} 0á·Ï<ðx­×³5(©²ÓÇXõ̼‰h8L©m¢Í°]ºÓŒx$“
+­u|Ðí8t^ˆš/€‹MÝp­_’<{*ñ>Jn ÐÅ—6¹s²R¯aÆ‹úr×€]9ä¯:²(`\‰áÉlA7¾ĦK”ž·†9z8nb64Ë¢jE¢$µ1V|·ZBËÐöX#Y»ͪföWßqYûlf/ö»­8Fj…›ë_X1¡ÁèínÕ (N1©þ¢CÑð´ýÆ9(AÄEêÞ–«ôáÃÉ€ÖÜÑf}_¢£J¾:¤ íéJ$<ÂBÿˆSUÅöìMø›Yr¤˜¾ÃÈ×`Qíå?›Ù±VƒÝŽˆ½¸ÂˆÚÖñhÃÙƒXÔ‡7Ó¶,Í!Á•FÿÁEè^F ¸¯xÀÁ¦ÿàB*·ÛvªR&¤N<•ê`¢µ+çN¼é¬
+g¤£Ê¾2f~mû„m}…i
+'óP4I×¥ŸÐ?`b¬FH. ÷R}ÿÀ#] «iÀAñ7FÌÐ5øùq6O‰ Ç/êúWbõÑFåq-¢´ð §]xžök%˜Ã–td˜¯‘ŒÎ¼r¿
+ä&oH[œ¯A•9f
endobj
-682 0 obj <<
+714 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 1932 0 R
+/Encoding 2007 0 R
/FirstChar 2
/LastChar 216
-/Widths 1946 0 R
-/BaseFont /WJIPZH+URWPalladioL-Roma
-/FontDescriptor 680 0 R
+/Widths 2022 0 R
+/BaseFont /BKPCDN+URWPalladioL-Roma
+/FontDescriptor 712 0 R
>> endobj
-680 0 obj <<
+712 0 obj <<
/Ascent 715
/CapHeight 680
/Descent -282
-/FontName /WJIPZH+URWPalladioL-Roma
+/FontName /BKPCDN+URWPalladioL-Roma
/ItalicAngle 0
/StemV 84
/XHeight 469
/FontBBox [-166 -283 1021 943]
/Flags 4
-/CharSet (/fi/fl/exclam/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/bracketright/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/circumflex/quotedblright/emdash/Oslash)
-/FontFile 681 0 R
+/CharSet (/fi/fl/exclam/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/bracketright/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/circumflex/quotedblright/endash/emdash/Oslash)
+/FontFile 713 0 R
>> endobj
-1946 0 obj
-[605 608 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 278 0 500 500 840 0 278 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 0 606 0 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 0 333 0 0 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 500 0 0 1000 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 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 833 ]
+2022 0 obj
+[605 608 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 278 0 500 500 840 0 278 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 0 606 0 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 0 333 0 0 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 500 0 500 1000 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 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 833 ]
endobj
-657 0 obj <<
+689 0 obj <<
/Length1 1614
/Length2 24766
/Length3 532
@@ -9578,7 +10022,7 @@ endobj
/Filter /FlateDecode
>>
stream
-xÚ¬zSm]³eÙ¶]uʶmÛ¶mÛö)Û¶mÛæ)ó”«ëû¯:n÷S÷}Xkfæ92GÎ{G,RBy%c;CQ;[gZzNE5ykkc ;iA;kc‚3 )©£‰³…­°³ 'š‰1°‰##)½‡£…™¹3ùõYþ !0ôøÏÏN' 3[²ŸWk;{[çˆÿçJ&&Îæ&¦Ö&Brò²bäb²*b&¶&ŽÖò.†ÖFÒF&¶N&¦vŽÖÿ¶ 0²³5¶ø§4'Ú,''{#‹Ÿm&îF&öÿ¸¨ ìMm,œœ~Þ ,œÌ lzàlG`akdíbü»©Ý¿Ù;ÚýDØüø~Àä휜Œ-ì ~²Ê ‹þOgsçr;Yü¸ ìL"íŒ\þ)é_¾˜¯³…­³‰»ó?¹ MŒ-œì­ <~rÿ€Ù;Zü‹†‹“…­Ù1 &p413p4¶6qrúùÁþ§;ÿU'ÁÿV½½½µÇ¿vÛý+ê?9X8;™X›ÒB10þä4rþÉmfa E÷ϨHØšÚ0Ðÿ›ÝØÅþ?|®&Žÿjù?3CñCÂÀØÎÖÚƒÀØÄŠNÖÎù'%ùÿ›Ê´ÿs"ÿHü?"ðÿˆ¼ÿâþwþ·Cüÿ{žÿ;´¨‹µµ¬É¿6üÇC MðÏ%óØXX{üßÂÿ{¤šÉ¿qü¿¡H8ü4BÀÖìG zZú3Z8‰Z¸›Ë[8™˜Xÿté_v[cGk [“5ÿÕHzúÿæS6·0²²ý§í,ÿæ2±5þïÔúq:eq!%qªÿóFýWœüòÎÊö?Ôþ½;ãÿ\üƒ"(hçNàEÃÀÂH@ÃDÏðsà~øp0±øü_2þ ˆá¿Ö2ÎŽîZ?eÿìü§øþk¥óß`DlìŒÿ™%g[ãŸñúOÃ?n#GÇUÿuâŠþõ¿ÝÄÄÝÄj}ÅΈ+Ø2ýw†szîÈ”°Ö@ðHˆ}i£rQ]¯_zøG¥þGmmÓ çW»ÇòûÏ#IÊã±>4ë_½©&×ù8>ÄýˆÛdlTÇtº¥°jÑ^7KÒ» š¬ôªÇûS
+xÚ¬zSm]³eÙ¶]uʶmÛ¶mÛö)Û¶mÛæ)ó”«ëû¯:n÷S÷}Xkfæ92GÎ{G,RBy%c;CQ;[gZzNE5ykkc ;iA;kc‚3 )©£‰³…­°³ 'š‰1°‰##)½‡£…™¹3ùõYþ !0ôøÏÏN' 3[²ŸWk;{[çˆÿçJ&&Îæ&¦Ö&Brò²bäb²*b&¶&ŽÖò.†ÖFÒF&¶N&¦vŽÖÿ¶ 0²³5¶ø§4'Ú,''{#‹Ÿm&îF&öÿ¸¨ ìMm,œœ~Þ ,œÌ lzàlG`akdíbü»©Ý¿Ù;ÚýDØüø~Àä휜Œ-ì ~²Ê ‹þOgsçr;Yü¸ ìL"íŒ\þ)é_¾˜¯³…­³‰»ó?¹ MŒ-œì­ <~rÿ€Ù;Zü‹†‹“…­Ù1 &p413p4¶6qrúùÁþ§;ÿU'ÁÿV½½½µÇ¿vÛý+ê?9X8;™X›ÒB10þä4rþÉmfa E÷ϨHØšÚ0Ðÿ›ÝØÅþ?|®&Žÿjù?3CñCÂÀØÎÖÚƒÀØÄŠNÖÎù'%ùÿ›Ê´ÿs"ÿHü?"ðÿˆ¼ÿâþwþ·Cüÿ{žÿ;´¨‹µµ¬É¿6üÇC MðÏ%óØXX{üßÂÿ{¤šÉ¿qü¿¡H8ü4BÀÖìG zZú3Z8‰Z¸›Ë[8™˜Xÿté_v[cGk [“5ÿÕHzúÿæS6·0²²ý§í,ÿæ2±5þïÔúq:iYi!ªÿóFýWœüòÎÊö?Ôþ½;ãÿ\üƒ"(hçNàEÃÀÂH@ÃDÏðsà~øp0±øü_2þ ˆá¿Ö2ÎŽîZ?eÿìü§øþk¥óß`DlìŒÿ™%g[ãŸñúOÃ?n#GÇUÿuâŠþõ¿ÝÄÄÝÄj}ÅΈ+Ø2ýw†szîÈ”°Ö@ðHˆ}i£rQ]¯_zøG¥þGmmÓ çW»ÇòûÏ#IÊã±>4ë_½©&×ù8>ÄýˆÛdlTÇtº¥°jÑ^7KÒ» š¬ôªÇûS
Šº%`¸3LŽ7)ü‰] üQHžíá|ÒâP»š
ÿ\%ý}þ54>:2Ü{Ú„M•IÊå
KåïƒÍ§©R!RÕDzÝžeÌ}øØ"œ³\ʤ!g?5íµ Îk“T $f}QìŒ}}œ7Ãë–aI­zQ£Ø`{1®ËÊ›¡9sõ‰ór5úË<#¤=ø…ˆ´±36…è4Ó+òŽÇ¾a‘Ïp:‰é"“|:[5P6“Ó<M`IÍÍÍLÕ‘˜‡‰ŠŒDa_gÁ¡Ãœá½]é–§ 9ç8sêÓšÆô e¬bô:miØ*N±«z|+hytHOÛV77Ùa‰
@@ -9677,541 +10121,605 @@ Iö×~pºóE¦f}^!˜tQ°Ù’‹ƒEäì>‰ n|'ÆV²5D9_äå‹7â̬FJvõ˜2È­ÛŒ’ý;Û£K¿>Z&ú‰Àš¤þØɉ,
y‘üP'càÜ^M#R°·ñÃ4 {LJ B«œ»×ën¾HïŸMc–9|þ*S5ïV®ñKãÁ“üvÚJ¦‰‡’à°áR‹ÁPKw©ä;ÉͳðåH-ºOÖ²ÉâØÉ*Wü—¼éýšö•p…+èó®a7AÔºº;˜âR·~4ÿÕ|S®‘mƒ®W•~ ©Ãâ‡}DL×WF5J‰åéØ|¨i÷>#\2®˜
šÒ30D”€`Ÿ†§¾ç4}&1xÒ¤Ö¥ ÎdP•Ý‹$ȾCO‡Ù’jÛvëö?`C&W'aÔCJ•I'sŠFðìM˼k©¡¨»°+X ŠcAÐÀ«á¥£ùr!<s%!ÈbˆÀNÑ* d3³Ê6†Ø0´+3ïÍNYÀ8îj•ÛP³7Þ¨VäÎc=$0€Ž9€òõ «£…WCÒ¸1å Ô²9L±ž±~óŸ –äWÚyüInÐäöÀ'¼I3 ú]`+ò7vÃÝ!’ÔËö—k«Zœ–(&4¨j„¸`é+àpôxÿÅë«SüWâ$åM7ƒ[IZÒýš®ê~‚VƒÍ:Ø\é«…Œ€Øy_à£öý
.ÈëÃ6‹û¯™ÅSßcŽ¾Q&É5 fd
-ön’“,6"”@K;\ÿŸÁüø¯
+ön’“,6"”@K;\ÿŸÁüø¯
endobj
-658 0 obj <<
+690 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 1932 0 R
+/Encoding 2007 0 R
/FirstChar 2
/LastChar 151
-/Widths 1947 0 R
-/BaseFont /THCASH+URWPalladioL-Bold
-/FontDescriptor 656 0 R
+/Widths 2023 0 R
+/BaseFont /LUNULC+URWPalladioL-Bold
+/FontDescriptor 688 0 R
>> endobj
-656 0 obj <<
+688 0 obj <<
/Ascent 708
/CapHeight 672
/Descent -266
-/FontName /THCASH+URWPalladioL-Bold
+/FontName /LUNULC+URWPalladioL-Bold
/ItalicAngle 0
/StemV 123
/XHeight 471
/FontBBox [-152 -301 1000 935]
/Flags 4
/CharSet (/fi/fl/exclam/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/question/at/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/quotedblright/emdash)
-/FontFile 657 0 R
+/FontFile 689 0 R
>> endobj
-1947 0 obj
+2023 0 obj
[611 611 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 278 0 0 500 889 0 278 333 333 444 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 0 0 0 444 747 778 667 722 833 611 556 833 833 389 0 778 611 1000 833 833 611 833 722 611 667 778 778 1000 667 667 667 333 0 333 0 0 0 500 611 444 611 500 389 556 611 333 333 611 333 889 611 556 611 611 389 444 333 611 556 833 500 556 500 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 500 0 0 1000 ]
endobj
-659 0 obj <<
+691 0 obj <<
/Type /Pages
/Count 6
-/Parent 1948 0 R
-/Kids [650 0 R 677 0 R 687 0 R 742 0 R 806 0 R 867 0 R]
+/Parent 2024 0 R
+/Kids [682 0 R 709 0 R 719 0 R 774 0 R 838 0 R 900 0 R]
>> endobj
-886 0 obj <<
+926 0 obj <<
/Type /Pages
/Count 6
-/Parent 1948 0 R
-/Kids [871 0 R 888 0 R 902 0 R 913 0 R 920 0 R 932 0 R]
+/Parent 2024 0 R
+/Kids [914 0 R 928 0 R 942 0 R 953 0 R 960 0 R 972 0 R]
>> endobj
-944 0 obj <<
+984 0 obj <<
/Type /Pages
/Count 6
-/Parent 1948 0 R
-/Kids [937 0 R 946 0 R 957 0 R 965 0 R 972 0 R 978 0 R]
+/Parent 2024 0 R
+/Kids [977 0 R 986 0 R 997 0 R 1005 0 R 1012 0 R 1018 0 R]
>> endobj
-1001 0 obj <<
+1041 0 obj <<
/Type /Pages
/Count 6
-/Parent 1948 0 R
-/Kids [986 0 R 1008 0 R 1018 0 R 1023 0 R 1027 0 R 1034 0 R]
+/Parent 2024 0 R
+/Kids [1026 0 R 1048 0 R 1058 0 R 1063 0 R 1067 0 R 1074 0 R]
>> endobj
-1050 0 obj <<
+1090 0 obj <<
/Type /Pages
/Count 6
-/Parent 1948 0 R
-/Kids [1042 0 R 1053 0 R 1060 0 R 1065 0 R 1074 0 R 1081 0 R]
+/Parent 2024 0 R
+/Kids [1082 0 R 1093 0 R 1100 0 R 1105 0 R 1114 0 R 1121 0 R]
>> endobj
-1093 0 obj <<
+1133 0 obj <<
/Type /Pages
/Count 6
-/Parent 1948 0 R
-/Kids [1085 0 R 1096 0 R 1102 0 R 1110 0 R 1117 0 R 1126 0 R]
+/Parent 2024 0 R
+/Kids [1125 0 R 1136 0 R 1142 0 R 1150 0 R 1157 0 R 1166 0 R]
>> endobj
-1145 0 obj <<
+1185 0 obj <<
/Type /Pages
/Count 6
-/Parent 1949 0 R
-/Kids [1136 0 R 1147 0 R 1152 0 R 1158 0 R 1164 0 R 1169 0 R]
+/Parent 2025 0 R
+/Kids [1176 0 R 1187 0 R 1192 0 R 1198 0 R 1204 0 R 1209 0 R]
>> endobj
-1182 0 obj <<
+1222 0 obj <<
/Type /Pages
/Count 6
-/Parent 1949 0 R
-/Kids [1179 0 R 1184 0 R 1188 0 R 1193 0 R 1199 0 R 1205 0 R]
+/Parent 2025 0 R
+/Kids [1219 0 R 1224 0 R 1228 0 R 1233 0 R 1239 0 R 1245 0 R]
>> endobj
-1218 0 obj <<
+1258 0 obj <<
/Type /Pages
/Count 6
-/Parent 1949 0 R
-/Kids [1210 0 R 1221 0 R 1225 0 R 1230 0 R 1239 0 R 1247 0 R]
+/Parent 2025 0 R
+/Kids [1250 0 R 1261 0 R 1265 0 R 1270 0 R 1279 0 R 1287 0 R]
>> endobj
-1255 0 obj <<
+1295 0 obj <<
/Type /Pages
/Count 6
-/Parent 1949 0 R
-/Kids [1252 0 R 1257 0 R 1261 0 R 1268 0 R 1275 0 R 1282 0 R]
+/Parent 2025 0 R
+/Kids [1292 0 R 1297 0 R 1301 0 R 1308 0 R 1315 0 R 1321 0 R]
>> endobj
-1294 0 obj <<
+1334 0 obj <<
/Type /Pages
/Count 6
-/Parent 1949 0 R
-/Kids [1288 0 R 1296 0 R 1306 0 R 1314 0 R 1318 0 R 1324 0 R]
+/Parent 2025 0 R
+/Kids [1327 0 R 1336 0 R 1346 0 R 1354 0 R 1358 0 R 1363 0 R]
>> endobj
-1334 0 obj <<
+1374 0 obj <<
/Type /Pages
/Count 6
-/Parent 1949 0 R
-/Kids [1329 0 R 1336 0 R 1344 0 R 1348 0 R 1352 0 R 1356 0 R]
+/Parent 2025 0 R
+/Kids [1369 0 R 1376 0 R 1384 0 R 1388 0 R 1392 0 R 1396 0 R]
>> endobj
-1368 0 obj <<
+1416 0 obj <<
/Type /Pages
/Count 6
-/Parent 1950 0 R
-/Kids [1364 0 R 1370 0 R 1389 0 R 1402 0 R 1418 0 R 1430 0 R]
+/Parent 2026 0 R
+/Kids [1404 0 R 1418 0 R 1430 0 R 1452 0 R 1460 0 R 1472 0 R]
>> endobj
-1441 0 obj <<
+1484 0 obj <<
/Type /Pages
/Count 6
-/Parent 1950 0 R
-/Kids [1436 0 R 1443 0 R 1453 0 R 1465 0 R 1474 0 R 1480 0 R]
+/Parent 2026 0 R
+/Kids [1476 0 R 1486 0 R 1498 0 R 1507 0 R 1516 0 R 1523 0 R]
>> endobj
-1489 0 obj <<
+1535 0 obj <<
/Type /Pages
/Count 6
-/Parent 1950 0 R
-/Kids [1484 0 R 1491 0 R 1502 0 R 1506 0 R 1510 0 R 1521 0 R]
+/Parent 2026 0 R
+/Kids [1529 0 R 1537 0 R 1547 0 R 1555 0 R 1559 0 R 1565 0 R]
>> endobj
-1531 0 obj <<
+1579 0 obj <<
/Type /Pages
/Count 6
-/Parent 1950 0 R
-/Kids [1525 0 R 1533 0 R 1543 0 R 1602 0 R 1658 0 R 1712 0 R]
+/Parent 2026 0 R
+/Kids [1576 0 R 1581 0 R 1585 0 R 1596 0 R 1600 0 R 1607 0 R]
>> endobj
-1754 0 obj <<
+1675 0 obj <<
/Type /Pages
/Count 6
-/Parent 1950 0 R
-/Kids [1746 0 R 1756 0 R 1762 0 R 1767 0 R 1771 0 R 1776 0 R]
+/Parent 2026 0 R
+/Kids [1617 0 R 1677 0 R 1733 0 R 1787 0 R 1821 0 R 1830 0 R]
>> endobj
-1791 0 obj <<
+1840 0 obj <<
/Type /Pages
/Count 6
-/Parent 1950 0 R
-/Kids [1788 0 R 1793 0 R 1805 0 R 1810 0 R 1821 0 R 1826 0 R]
+/Parent 2026 0 R
+/Kids [1836 0 R 1842 0 R 1846 0 R 1851 0 R 1863 0 R 1867 0 R]
>> endobj
-1841 0 obj <<
+1883 0 obj <<
/Type /Pages
/Count 6
-/Parent 1951 0 R
-/Kids [1831 0 R 1843 0 R 1854 0 R 1859 0 R 1869 0 R 1875 0 R]
+/Parent 2027 0 R
+/Kids [1879 0 R 1885 0 R 1896 0 R 1901 0 R 1906 0 R 1917 0 R]
>> endobj
-1892 0 obj <<
+1932 0 obj <<
/Type /Pages
/Count 6
-/Parent 1951 0 R
-/Kids [1882 0 R 1894 0 R 1904 0 R 1910 0 R 1919 0 R 1926 0 R]
+/Parent 2027 0 R
+/Kids [1928 0 R 1934 0 R 1944 0 R 1950 0 R 1957 0 R 1968 0 R]
>> endobj
-1948 0 obj <<
+1983 0 obj <<
+/Type /Pages
+/Count 4
+/Parent 2027 0 R
+/Kids [1978 0 R 1985 0 R 1994 0 R 2001 0 R]
+>> endobj
+2024 0 obj <<
/Type /Pages
/Count 36
-/Parent 1952 0 R
-/Kids [659 0 R 886 0 R 944 0 R 1001 0 R 1050 0 R 1093 0 R]
+/Parent 2028 0 R
+/Kids [691 0 R 926 0 R 984 0 R 1041 0 R 1090 0 R 1133 0 R]
>> endobj
-1949 0 obj <<
+2025 0 obj <<
/Type /Pages
/Count 36
-/Parent 1952 0 R
-/Kids [1145 0 R 1182 0 R 1218 0 R 1255 0 R 1294 0 R 1334 0 R]
+/Parent 2028 0 R
+/Kids [1185 0 R 1222 0 R 1258 0 R 1295 0 R 1334 0 R 1374 0 R]
>> endobj
-1950 0 obj <<
+2026 0 obj <<
/Type /Pages
/Count 36
-/Parent 1952 0 R
-/Kids [1368 0 R 1441 0 R 1489 0 R 1531 0 R 1754 0 R 1791 0 R]
+/Parent 2028 0 R
+/Kids [1416 0 R 1484 0 R 1535 0 R 1579 0 R 1675 0 R 1840 0 R]
>> endobj
-1951 0 obj <<
+2027 0 obj <<
/Type /Pages
-/Count 12
-/Parent 1952 0 R
-/Kids [1841 0 R 1892 0 R]
+/Count 16
+/Parent 2028 0 R
+/Kids [1883 0 R 1932 0 R 1983 0 R]
>> endobj
-1952 0 obj <<
+2028 0 obj <<
/Type /Pages
-/Count 120
-/Kids [1948 0 R 1949 0 R 1950 0 R 1951 0 R]
+/Count 124
+/Kids [2024 0 R 2025 0 R 2026 0 R 2027 0 R]
>> endobj
-1953 0 obj <<
+2029 0 obj <<
/Type /Outlines
/First 7 0 R
-/Last 607 0 R
+/Last 639 0 R
/Count 10
>> endobj
+679 0 obj <<
+/Title 680 0 R
+/A 677 0 R
+/Parent 639 0 R
+/Prev 675 0 R
+>> endobj
+675 0 obj <<
+/Title 676 0 R
+/A 673 0 R
+/Parent 639 0 R
+/Prev 671 0 R
+/Next 679 0 R
+>> endobj
+671 0 obj <<
+/Title 672 0 R
+/A 669 0 R
+/Parent 639 0 R
+/Prev 667 0 R
+/Next 675 0 R
+>> endobj
+667 0 obj <<
+/Title 668 0 R
+/A 665 0 R
+/Parent 639 0 R
+/Prev 663 0 R
+/Next 671 0 R
+>> endobj
+663 0 obj <<
+/Title 664 0 R
+/A 661 0 R
+/Parent 639 0 R
+/Prev 659 0 R
+/Next 667 0 R
+>> endobj
+659 0 obj <<
+/Title 660 0 R
+/A 657 0 R
+/Parent 639 0 R
+/Prev 655 0 R
+/Next 663 0 R
+>> endobj
+655 0 obj <<
+/Title 656 0 R
+/A 653 0 R
+/Parent 639 0 R
+/Prev 651 0 R
+/Next 659 0 R
+>> endobj
+651 0 obj <<
+/Title 652 0 R
+/A 649 0 R
+/Parent 639 0 R
+/Prev 647 0 R
+/Next 655 0 R
+>> endobj
647 0 obj <<
/Title 648 0 R
/A 645 0 R
-/Parent 607 0 R
+/Parent 639 0 R
/Prev 643 0 R
+/Next 651 0 R
>> endobj
643 0 obj <<
/Title 644 0 R
/A 641 0 R
-/Parent 607 0 R
-/Prev 639 0 R
+/Parent 639 0 R
/Next 647 0 R
>> endobj
639 0 obj <<
/Title 640 0 R
/A 637 0 R
-/Parent 607 0 R
-/Prev 635 0 R
-/Next 643 0 R
+/Parent 2029 0 R
+/Prev 603 0 R
+/First 643 0 R
+/Last 679 0 R
+/Count -10
>> endobj
635 0 obj <<
/Title 636 0 R
/A 633 0 R
-/Parent 607 0 R
+/Parent 623 0 R
/Prev 631 0 R
-/Next 639 0 R
>> endobj
631 0 obj <<
/Title 632 0 R
/A 629 0 R
-/Parent 607 0 R
+/Parent 623 0 R
/Prev 627 0 R
/Next 635 0 R
>> endobj
627 0 obj <<
/Title 628 0 R
/A 625 0 R
-/Parent 607 0 R
-/Prev 623 0 R
+/Parent 623 0 R
/Next 631 0 R
>> endobj
623 0 obj <<
/Title 624 0 R
/A 621 0 R
-/Parent 607 0 R
-/Prev 619 0 R
-/Next 627 0 R
+/Parent 603 0 R
+/Prev 615 0 R
+/First 627 0 R
+/Last 635 0 R
+/Count -3
>> endobj
619 0 obj <<
/Title 620 0 R
/A 617 0 R
-/Parent 607 0 R
-/Prev 615 0 R
-/Next 623 0 R
+/Parent 615 0 R
>> endobj
615 0 obj <<
/Title 616 0 R
/A 613 0 R
-/Parent 607 0 R
-/Prev 611 0 R
-/Next 619 0 R
+/Parent 603 0 R
+/Prev 607 0 R
+/Next 623 0 R
+/First 619 0 R
+/Last 619 0 R
+/Count -1
>> endobj
611 0 obj <<
/Title 612 0 R
/A 609 0 R
/Parent 607 0 R
-/Next 615 0 R
>> endobj
607 0 obj <<
/Title 608 0 R
/A 605 0 R
-/Parent 1953 0 R
-/Prev 571 0 R
+/Parent 603 0 R
+/Next 615 0 R
/First 611 0 R
-/Last 647 0 R
-/Count -10
+/Last 611 0 R
+/Count -1
>> endobj
603 0 obj <<
/Title 604 0 R
/A 601 0 R
-/Parent 591 0 R
-/Prev 599 0 R
+/Parent 2029 0 R
+/Prev 583 0 R
+/Next 639 0 R
+/First 607 0 R
+/Last 623 0 R
+/Count -3
>> endobj
599 0 obj <<
/Title 600 0 R
/A 597 0 R
-/Parent 591 0 R
+/Parent 583 0 R
/Prev 595 0 R
-/Next 603 0 R
>> endobj
595 0 obj <<
/Title 596 0 R
/A 593 0 R
-/Parent 591 0 R
+/Parent 583 0 R
+/Prev 587 0 R
/Next 599 0 R
>> endobj
591 0 obj <<
/Title 592 0 R
/A 589 0 R
-/Parent 571 0 R
-/Prev 583 0 R
-/First 595 0 R
-/Last 603 0 R
-/Count -3
+/Parent 587 0 R
>> endobj
587 0 obj <<
/Title 588 0 R
/A 585 0 R
/Parent 583 0 R
+/Next 595 0 R
+/First 591 0 R
+/Last 591 0 R
+/Count -1
>> endobj
583 0 obj <<
/Title 584 0 R
/A 581 0 R
-/Parent 571 0 R
-/Prev 575 0 R
-/Next 591 0 R
+/Parent 2029 0 R
+/Prev 559 0 R
+/Next 603 0 R
/First 587 0 R
-/Last 587 0 R
-/Count -1
+/Last 599 0 R
+/Count -3
>> endobj
579 0 obj <<
/Title 580 0 R
/A 577 0 R
-/Parent 575 0 R
+/Parent 559 0 R
+/Prev 567 0 R
>> endobj
575 0 obj <<
/Title 576 0 R
/A 573 0 R
-/Parent 571 0 R
-/Next 583 0 R
-/First 579 0 R
-/Last 579 0 R
-/Count -1
+/Parent 567 0 R
+/Prev 571 0 R
>> endobj
571 0 obj <<
/Title 572 0 R
/A 569 0 R
-/Parent 1953 0 R
-/Prev 551 0 R
-/Next 607 0 R
-/First 575 0 R
-/Last 591 0 R
-/Count -3
+/Parent 567 0 R
+/Next 575 0 R
>> endobj
567 0 obj <<
/Title 568 0 R
/A 565 0 R
-/Parent 551 0 R
+/Parent 559 0 R
/Prev 563 0 R
+/Next 579 0 R
+/First 571 0 R
+/Last 575 0 R
+/Count -2
>> endobj
563 0 obj <<
/Title 564 0 R
/A 561 0 R
-/Parent 551 0 R
-/Prev 555 0 R
+/Parent 559 0 R
/Next 567 0 R
>> endobj
559 0 obj <<
/Title 560 0 R
/A 557 0 R
-/Parent 555 0 R
+/Parent 2029 0 R
+/Prev 243 0 R
+/Next 583 0 R
+/First 563 0 R
+/Last 579 0 R
+/Count -3
>> endobj
555 0 obj <<
/Title 556 0 R
/A 553 0 R
-/Parent 551 0 R
-/Next 563 0 R
-/First 559 0 R
-/Last 559 0 R
-/Count -1
+/Parent 539 0 R
+/Prev 551 0 R
>> endobj
551 0 obj <<
/Title 552 0 R
/A 549 0 R
-/Parent 1953 0 R
-/Prev 527 0 R
-/Next 571 0 R
-/First 555 0 R
-/Last 567 0 R
-/Count -3
+/Parent 539 0 R
+/Prev 547 0 R
+/Next 555 0 R
>> endobj
547 0 obj <<
/Title 548 0 R
/A 545 0 R
-/Parent 527 0 R
-/Prev 535 0 R
+/Parent 539 0 R
+/Prev 543 0 R
+/Next 551 0 R
>> endobj
543 0 obj <<
/Title 544 0 R
/A 541 0 R
-/Parent 535 0 R
-/Prev 539 0 R
+/Parent 539 0 R
+/Next 547 0 R
>> endobj
539 0 obj <<
/Title 540 0 R
/A 537 0 R
-/Parent 535 0 R
-/Next 543 0 R
+/Parent 531 0 R
+/Prev 535 0 R
+/First 543 0 R
+/Last 555 0 R
+/Count -4
>> endobj
535 0 obj <<
/Title 536 0 R
/A 533 0 R
-/Parent 527 0 R
-/Prev 531 0 R
-/Next 547 0 R
-/First 539 0 R
-/Last 543 0 R
-/Count -2
+/Parent 531 0 R
+/Next 539 0 R
>> endobj
531 0 obj <<
/Title 532 0 R
/A 529 0 R
-/Parent 527 0 R
-/Next 535 0 R
+/Parent 243 0 R
+/Prev 479 0 R
+/First 535 0 R
+/Last 539 0 R
+/Count -2
>> endobj
527 0 obj <<
/Title 528 0 R
/A 525 0 R
-/Parent 1953 0 R
-/Prev 243 0 R
-/Next 551 0 R
-/First 531 0 R
-/Last 547 0 R
-/Count -3
+/Parent 479 0 R
+/Prev 523 0 R
>> endobj
523 0 obj <<
/Title 524 0 R
/A 521 0 R
-/Parent 475 0 R
-/Prev 519 0 R
+/Parent 479 0 R
+/Prev 507 0 R
+/Next 527 0 R
>> endobj
519 0 obj <<
/Title 520 0 R
/A 517 0 R
-/Parent 475 0 R
-/Prev 503 0 R
-/Next 523 0 R
+/Parent 507 0 R
+/Prev 515 0 R
>> endobj
515 0 obj <<
/Title 516 0 R
/A 513 0 R
-/Parent 503 0 R
+/Parent 507 0 R
/Prev 511 0 R
+/Next 519 0 R
>> endobj
511 0 obj <<
/Title 512 0 R
/A 509 0 R
-/Parent 503 0 R
-/Prev 507 0 R
+/Parent 507 0 R
/Next 515 0 R
>> endobj
507 0 obj <<
/Title 508 0 R
/A 505 0 R
-/Parent 503 0 R
-/Next 511 0 R
+/Parent 479 0 R
+/Prev 503 0 R
+/Next 523 0 R
+/First 511 0 R
+/Last 519 0 R
+/Count -3
>> endobj
503 0 obj <<
/Title 504 0 R
/A 501 0 R
-/Parent 475 0 R
+/Parent 479 0 R
/Prev 499 0 R
-/Next 519 0 R
-/First 507 0 R
-/Last 515 0 R
-/Count -3
+/Next 507 0 R
>> endobj
499 0 obj <<
/Title 500 0 R
/A 497 0 R
-/Parent 475 0 R
+/Parent 479 0 R
/Prev 495 0 R
/Next 503 0 R
>> endobj
495 0 obj <<
/Title 496 0 R
/A 493 0 R
-/Parent 475 0 R
-/Prev 491 0 R
+/Parent 479 0 R
+/Prev 483 0 R
/Next 499 0 R
>> endobj
491 0 obj <<
/Title 492 0 R
/A 489 0 R
-/Parent 475 0 R
-/Prev 479 0 R
-/Next 495 0 R
+/Parent 483 0 R
+/Prev 487 0 R
>> endobj
487 0 obj <<
/Title 488 0 R
/A 485 0 R
-/Parent 479 0 R
-/Prev 483 0 R
+/Parent 483 0 R
+/Next 491 0 R
>> endobj
483 0 obj <<
/Title 484 0 R
/A 481 0 R
/Parent 479 0 R
-/Next 487 0 R
+/Next 495 0 R
+/First 487 0 R
+/Last 491 0 R
+/Count -2
>> endobj
479 0 obj <<
/Title 480 0 R
/A 477 0 R
-/Parent 475 0 R
-/Next 491 0 R
+/Parent 243 0 R
+/Prev 275 0 R
+/Next 531 0 R
/First 483 0 R
-/Last 487 0 R
-/Count -2
+/Last 527 0 R
+/Count -7
>> endobj
475 0 obj <<
/Title 476 0 R
/A 473 0 R
-/Parent 243 0 R
-/Prev 275 0 R
-/First 479 0 R
-/Last 523 0 R
-/Count -7
+/Parent 459 0 R
+/Prev 471 0 R
>> endobj
471 0 obj <<
/Title 472 0 R
/A 469 0 R
-/Parent 455 0 R
+/Parent 459 0 R
/Prev 467 0 R
+/Next 475 0 R
>> endobj
467 0 obj <<
/Title 468 0 R
/A 465 0 R
-/Parent 455 0 R
+/Parent 459 0 R
/Prev 463 0 R
/Next 471 0 R
>> endobj
463 0 obj <<
/Title 464 0 R
/A 461 0 R
-/Parent 455 0 R
-/Prev 459 0 R
+/Parent 459 0 R
/Next 467 0 R
>> endobj
459 0 obj <<
/Title 460 0 R
/A 457 0 R
-/Parent 455 0 R
-/Next 463 0 R
+/Parent 275 0 R
+/Prev 455 0 R
+/First 463 0 R
+/Last 475 0 R
+/Count -4
>> endobj
455 0 obj <<
/Title 456 0 R
/A 453 0 R
/Parent 275 0 R
/Prev 451 0 R
-/First 459 0 R
-/Last 471 0 R
-/Count -4
+/Next 459 0 R
>> endobj
451 0 obj <<
/Title 452 0 R
@@ -10259,21 +10767,21 @@ endobj
/Title 428 0 R
/A 425 0 R
/Parent 275 0 R
-/Prev 347 0 R
+/Prev 423 0 R
/Next 431 0 R
>> endobj
423 0 obj <<
/Title 424 0 R
/A 421 0 R
-/Parent 347 0 R
-/Prev 419 0 R
+/Parent 275 0 R
+/Prev 347 0 R
+/Next 427 0 R
>> endobj
419 0 obj <<
/Title 420 0 R
/A 417 0 R
/Parent 347 0 R
/Prev 415 0 R
-/Next 423 0 R
>> endobj
415 0 obj <<
/Title 416 0 R
@@ -10398,10 +10906,10 @@ endobj
/A 345 0 R
/Parent 275 0 R
/Prev 343 0 R
-/Next 427 0 R
+/Next 423 0 R
/First 351 0 R
-/Last 423 0 R
-/Count -19
+/Last 419 0 R
+/Count -18
>> endobj
343 0 obj <<
/Title 344 0 R
@@ -10527,10 +11035,10 @@ endobj
/A 273 0 R
/Parent 243 0 R
/Prev 247 0 R
-/Next 475 0 R
+/Next 479 0 R
/First 279 0 R
-/Last 455 0 R
-/Count -24
+/Last 459 0 R
+/Count -26
>> endobj
271 0 obj <<
/Title 272 0 R
@@ -10586,12 +11094,12 @@ endobj
243 0 obj <<
/Title 244 0 R
/A 241 0 R
-/Parent 1953 0 R
+/Parent 2029 0 R
/Prev 231 0 R
-/Next 527 0 R
+/Next 559 0 R
/First 247 0 R
-/Last 475 0 R
-/Count -3
+/Last 531 0 R
+/Count -4
>> endobj
239 0 obj <<
/Title 240 0 R
@@ -10608,7 +11116,7 @@ endobj
231 0 obj <<
/Title 232 0 R
/A 229 0 R
-/Parent 1953 0 R
+/Parent 2029 0 R
/Prev 131 0 R
/Next 243 0 R
/First 235 0 R
@@ -10790,7 +11298,7 @@ endobj
131 0 obj <<
/Title 132 0 R
/A 129 0 R
-/Parent 1953 0 R
+/Parent 2029 0 R
/Prev 91 0 R
/Next 231 0 R
/First 135 0 R
@@ -10864,7 +11372,7 @@ endobj
91 0 obj <<
/Title 92 0 R
/A 89 0 R
-/Parent 1953 0 R
+/Parent 2029 0 R
/Prev 67 0 R
/Next 131 0 R
/First 95 0 R
@@ -10907,7 +11415,7 @@ endobj
67 0 obj <<
/Title 68 0 R
/A 65 0 R
-/Parent 1953 0 R
+/Parent 2029 0 R
/Prev 7 0 R
/Next 91 0 R
/First 71 0 R
@@ -11016,2003 +11524,2079 @@ endobj
7 0 obj <<
/Title 8 0 R
/A 5 0 R
-/Parent 1953 0 R
+/Parent 2029 0 R
/Next 67 0 R
/First 11 0 R
/Last 23 0 R
/Count -4
>> endobj
-1954 0 obj <<
-/Names [(Access_Control_Lists) 1488 0 R (Bv9ARM.ch01) 874 0 R (Bv9ARM.ch02) 923 0 R (Bv9ARM.ch03) 940 0 R (Bv9ARM.ch04) 989 0 R (Bv9ARM.ch05) 1077 0 R (Bv9ARM.ch06) 1088 0 R (Bv9ARM.ch07) 1487 0 R (Bv9ARM.ch08) 1513 0 R (Bv9ARM.ch09) 1528 0 R (Bv9ARM.ch10) 1749 0 R (Configuration_File_Grammar) 1113 0 R (DNSSEC) 1056 0 R (Doc-Start) 655 0 R (Setting_TTLs) 1458 0 R (acache) 930 0 R (access_control) 1235 0 R (acl) 1121 0 R (address_match_lists) 1094 0 R (admin_tools) 963 0 R (appendix.A) 570 0 R (appendix.B) 606 0 R (bibliography) 1537 0 R (boolean_options) 1005 0 R (builtin) 1309 0 R (chapter*.1) 690 0 R (chapter.1) 6 0 R (chapter.2) 66 0 R (chapter.3) 90 0 R (chapter.4) 130 0 R (chapter.5) 230 0 R (chapter.6) 242 0 R (chapter.7) 526 0 R (chapter.8) 550 0 R (cite.RFC1033) 1664 0 R (cite.RFC1034) 1549 0 R (cite.RFC1035) 1551 0 R (cite.RFC1101) 1646 0 R (cite.RFC1123) 1648 0 R (cite.RFC1183) 1608 0 R (cite.RFC1464) 1686 0 R (cite.RFC1535) 1594 0 R (cite.RFC1536) 1596 0 R (cite.RFC1537) 1666 0 R (cite.RFC1591) 1650 0 R (cite.RFC1706) 1610 0 R (cite.RFC1712) 1706 0 R (cite.RFC1713) 1688 0 R (cite.RFC1794) 1690 0 R (cite.RFC1876) 1612 0 R (cite.RFC1912) 1668 0 R (cite.RFC1982) 1598 0 R (cite.RFC1995) 1556 0 R (cite.RFC1996) 1558 0 R (cite.RFC2010) 1670 0 R (cite.RFC2052) 1614 0 R (cite.RFC2065) 1718 0 R (cite.RFC2136) 1560 0 R (cite.RFC2137) 1720 0 R (cite.RFC2163) 1616 0 R (cite.RFC2168) 1618 0 R (cite.RFC2181) 1562 0 R (cite.RFC2219) 1672 0 R (cite.RFC2230) 1620 0 R (cite.RFC2240) 1692 0 R (cite.RFC2308) 1564 0 R (cite.RFC2317) 1652 0 R (cite.RFC2345) 1694 0 R (cite.RFC2352) 1696 0 R (cite.RFC2535) 1722 0 R (cite.RFC2536) 1622 0 R (cite.RFC2537) 1624 0 R (cite.RFC2538) 1626 0 R (cite.RFC2539) 1628 0 R (cite.RFC2540) 1630 0 R (cite.RFC2671) 1566 0 R (cite.RFC2672) 1568 0 R (cite.RFC2673) 1708 0 R (cite.RFC2782) 1632 0 R (cite.RFC2825) 1676 0 R (cite.RFC2826) 1654 0 R (cite.RFC2845) 1570 0 R (cite.RFC2874) 1710 0 R (cite.RFC2915) 1634 0 R (cite.RFC2929) 1656 0 R (cite.RFC2930) 1572 0 R (cite.RFC2931) 1574 0 R (cite.RFC3007) 1576 0 R (cite.RFC3008) 1724 0 R (cite.RFC3071) 1698 0 R (cite.RFC3090) 1726 0 R (cite.RFC3110) 1636 0 R (cite.RFC3123) 1638 0 R (cite.RFC3225) 1582 0 R (cite.RFC3258) 1700 0 R (cite.RFC3445) 1728 0 R (cite.RFC3490) 1678 0 R (cite.RFC3491) 1680 0 R (cite.RFC3492) 1682 0 R (cite.RFC3596) 1640 0 R (cite.RFC3597) 1642 0 R (cite.RFC3645) 1578 0 R (cite.RFC3655) 1730 0 R (cite.RFC3658) 1732 0 R (cite.RFC3755) 1734 0 R (cite.RFC3757) 1736 0 R (cite.RFC3833) 1584 0 R (cite.RFC3845) 1738 0 R (cite.RFC3901) 1702 0 R (cite.RFC4033) 1586 0 R (cite.RFC4035) 1588 0 R (cite.RFC4044) 1590 0 R (cite.RFC4074) 1600 0 R (cite.RFC974) 1553 0 R (cite.id2500250) 1743 0 R (configuration_file_elements) 1089 0 R (controls_statement_definition_and_usage) 976 0 R (diagnostic_tools) 911 0 R (dynamic_update) 999 0 R (dynamic_update_policies) 1051 0 R (dynamic_update_security) 1245 0 R (empty) 1311 0 R (historical_dns_information) 1530 0 R (id2465026) 875 0 R (id2466484) 876 0 R (id2467305) 880 0 R (id2467506) 881 0 R (id2467714) 891 0 R (id2467891) 893 0 R (id2467912) 894 0 R (id2467946) 895 0 R (id2468030) 898 0 R (id2470292) 905 0 R (id2470315) 908 0 R (id2470345) 909 0 R (id2470435) 910 0 R (id2470465) 916 0 R (id2470500) 917 0 R (id2470595) 918 0 R (id2470629) 924 0 R (id2470656) 925 0 R (id2470668) 926 0 R (id2470694) 929 0 R (id2470705) 935 0 R (id2470805) 942 0 R (id2470821) 943 0 R (id2470843) 949 0 R (id2470860) 950 0 R (id2471334) 953 0 R (id2471339) 954 0 R (id2473122) 981 0 R (id2473133) 982 0 R (id2473527) 1014 0 R (id2473545) 1015 0 R (id2473980) 1031 0 R (id2473997) 1032 0 R (id2474036) 1037 0 R (id2474122) 1038 0 R (id2474133) 1039 0 R (id2474172) 1040 0 R (id2474230) 1045 0 R (id2474343) 1047 0 R (id2474357) 1048 0 R (id2474542) 1049 0 R (id2474679) 1057 0 R (id2474748) 1058 0 R (id2474827) 1063 0 R (id2474970) 1068 0 R (id2475169) 1070 0 R (id2475190) 1071 0 R (id2475223) 1078 0 R (id2475370) 1090 0 R (id2476166) 1099 0 R (id2476194) 1100 0 R (id2476388) 1105 0 R (id2476403) 1106 0 R (id2476433) 1107 0 R (id2476584) 1114 0 R (id2476932) 1120 0 R (id2476974) 1122 0 R (id2477190) 1124 0 R (id2477550) 1131 0 R (id2477565) 1132 0 R (id2477589) 1133 0 R (id2477678) 1139 0 R (id2477837) 1143 0 R (id2477963) 1144 0 R (id2478084) 1150 0 R (id2478777) 1161 0 R (id2479480) 1167 0 R (id2479554) 1172 0 R (id2479618) 1175 0 R (id2479661) 1176 0 R (id2479676) 1177 0 R (id2481882) 1202 0 R (id2483682) 1228 0 R (id2483740) 1234 0 R (id2484373) 1244 0 R (id2485408) 1264 0 R (id2485422) 1265 0 R (id2485538) 1271 0 R (id2485739) 1273 0 R (id2486307) 1291 0 R (id2487541) 1321 0 R (id2488731) 1339 0 R (id2488780) 1340 0 R (id2488860) 1342 0 R (id2490419) 1359 0 R (id2490426) 1360 0 R (id2490432) 1361 0 R (id2490777) 1367 0 R (id2490810) 1373 0 R (id2492304) 1421 0 R (id2492629) 1423 0 R (id2492647) 1424 0 R (id2492667) 1427 0 R (id2492972) 1433 0 R (id2493933) 1439 0 R (id2494061) 1446 0 R (id2494083) 1447 0 R (id2494445) 1449 0 R (id2494582) 1451 0 R (id2494673) 1456 0 R (id2495077) 1459 0 R (id2495270) 1461 0 R (id2495285) 1462 0 R (id2495397) 1468 0 R (id2495419) 1469 0 R (id2495480) 1470 0 R (id2495618) 1471 0 R (id2495654) 1472 0 R (id2495716) 1477 0 R (id2496338) 1498 0 R (id2496414) 1499 0 R (id2496474) 1500 0 R (id2496554) 1514 0 R (id2496560) 1515 0 R (id2496571) 1516 0 R (id2496725) 1517 0 R (id2496787) 1529 0 R (id2496958) 1536 0 R (id2497214) 1541 0 R (id2497217) 1547 0 R (id2497225) 1552 0 R (id2497249) 1548 0 R (id2497272) 1550 0 R (id2497308) 1561 0 R (id2497335) 1563 0 R (id2497361) 1555 0 R (id2497385) 1557 0 R (id2497477) 1559 0 R (id2497532) 1565 0 R (id2497559) 1567 0 R (id2497586) 1569 0 R (id2497648) 1571 0 R (id2497677) 1573 0 R (id2497707) 1575 0 R (id2497734) 1577 0 R (id2497809) 1580 0 R (id2497816) 1581 0 R (id2497843) 1583 0 R (id2497879) 1585 0 R (id2497944) 1589 0 R (id2498009) 1587 0 R (id2498074) 1592 0 R (id2498083) 1593 0 R (id2498108) 1595 0 R (id2498177) 1597 0 R (id2498212) 1599 0 R (id2498252) 1606 0 R (id2498258) 1607 0 R (id2498315) 1609 0 R (id2498353) 1617 0 R (id2498388) 1611 0 R (id2498442) 1613 0 R (id2498481) 1615 0 R (id2498506) 1619 0 R (id2498532) 1621 0 R (id2498558) 1623 0 R (id2498585) 1625 0 R (id2498625) 1627 0 R (id2498654) 1629 0 R (id2498684) 1631 0 R (id2498727) 1633 0 R (id2498760) 1635 0 R (id2498787) 1637 0 R (id2498810) 1639 0 R (id2498868) 1641 0 R (id2498892) 1644 0 R (id2498900) 1645 0 R (id2498925) 1647 0 R (id2498948) 1649 0 R (id2498971) 1651 0 R (id2499017) 1653 0 R (id2499041) 1655 0 R (id2499091) 1662 0 R (id2499098) 1663 0 R (id2499122) 1665 0 R (id2499148) 1667 0 R (id2499175) 1669 0 R (id2499211) 1671 0 R (id2499252) 1674 0 R (id2499257) 1675 0 R (id2499289) 1677 0 R (id2499335) 1679 0 R (id2499370) 1681 0 R (id2499397) 1684 0 R (id2499415) 1685 0 R (id2499437) 1687 0 R (id2499463) 1689 0 R (id2499489) 1691 0 R (id2499512) 1693 0 R (id2499558) 1695 0 R (id2499581) 1697 0 R (id2499608) 1699 0 R (id2499634) 1701 0 R (id2499671) 1704 0 R (id2499677) 1705 0 R (id2499803) 1707 0 R (id2499830) 1709 0 R (id2499866) 1716 0 R (id2499878) 1717 0 R (id2499917) 1719 0 R (id2499944) 1721 0 R (id2499974) 1723 0 R (id2500000) 1725 0 R (id2500026) 1727 0 R (id2500062) 1729 0 R (id2500099) 1731 0 R (id2500125) 1733 0 R (id2500152) 1735 0 R (id2500197) 1737 0 R (id2500238) 1740 0 R (id2500248) 1742 0 R (id2500250) 1744 0 R (incremental_zone_transfers) 1011 0 R (internet_drafts) 1739 0 R (ipv6addresses) 1072 0 R (journal) 1000 0 R (lwresd) 1079 0 R (man.dig) 1750 0 R (man.dnssec-keygen) 1799 0 R (man.dnssec-signzone) 1816 0 R (man.host) 1783 0 R (man.named) 1865 0 R (man.named-checkconf) 1836 0 R (man.named-checkzone) 1849 0 R (man.rndc) 1887 0 R (man.rndc-confgen) 1916 0 R (man.rndc.conf) 1900 0 R (notify) 990 0 R (options) 1191 0 R (page.1) 654 0 R (page.10) 915 0 R (page.100) 1769 0 R (page.101) 1773 0 R (page.102) 1778 0 R (page.103) 1790 0 R (page.104) 1795 0 R (page.105) 1807 0 R (page.106) 1812 0 R (page.107) 1823 0 R (page.108) 1828 0 R (page.109) 1833 0 R (page.11) 922 0 R (page.110) 1845 0 R (page.111) 1856 0 R (page.112) 1861 0 R (page.113) 1871 0 R (page.114) 1877 0 R (page.115) 1884 0 R (page.116) 1896 0 R (page.117) 1906 0 R (page.118) 1912 0 R (page.119) 1921 0 R (page.12) 934 0 R (page.120) 1928 0 R (page.13) 939 0 R (page.14) 948 0 R (page.15) 959 0 R (page.16) 967 0 R (page.17) 974 0 R (page.18) 980 0 R (page.19) 988 0 R (page.2) 679 0 R (page.20) 1010 0 R (page.21) 1020 0 R (page.22) 1025 0 R (page.23) 1029 0 R (page.24) 1036 0 R (page.25) 1044 0 R (page.26) 1055 0 R (page.27) 1062 0 R (page.28) 1067 0 R (page.29) 1076 0 R (page.3) 689 0 R (page.30) 1083 0 R (page.31) 1087 0 R (page.32) 1098 0 R (page.33) 1104 0 R (page.34) 1112 0 R (page.35) 1119 0 R (page.36) 1128 0 R (page.37) 1138 0 R (page.38) 1149 0 R (page.39) 1154 0 R (page.4) 744 0 R (page.40) 1160 0 R (page.41) 1166 0 R (page.42) 1171 0 R (page.43) 1181 0 R (page.44) 1186 0 R (page.45) 1190 0 R (page.46) 1195 0 R (page.47) 1201 0 R (page.48) 1207 0 R (page.49) 1212 0 R (page.5) 808 0 R (page.50) 1223 0 R (page.51) 1227 0 R (page.52) 1232 0 R (page.53) 1241 0 R (page.54) 1249 0 R (page.55) 1254 0 R (page.56) 1259 0 R (page.57) 1263 0 R (page.58) 1270 0 R (page.59) 1277 0 R (page.6) 869 0 R (page.60) 1284 0 R (page.61) 1290 0 R (page.62) 1298 0 R (page.63) 1308 0 R (page.64) 1316 0 R (page.65) 1320 0 R (page.66) 1326 0 R (page.67) 1331 0 R (page.68) 1338 0 R (page.69) 1346 0 R (page.7) 873 0 R (page.70) 1350 0 R (page.71) 1354 0 R (page.72) 1358 0 R (page.73) 1366 0 R (page.74) 1372 0 R (page.75) 1391 0 R (page.76) 1404 0 R (page.77) 1420 0 R (page.78) 1432 0 R (page.79) 1438 0 R (page.8) 890 0 R (page.80) 1445 0 R (page.81) 1455 0 R (page.82) 1467 0 R (page.83) 1476 0 R (page.84) 1482 0 R (page.85) 1486 0 R (page.86) 1493 0 R (page.87) 1504 0 R (page.88) 1508 0 R (page.89) 1512 0 R (page.9) 904 0 R (page.90) 1523 0 R (page.91) 1527 0 R (page.92) 1535 0 R (page.93) 1545 0 R (page.94) 1604 0 R (page.95) 1660 0 R (page.96) 1714 0 R (page.97) 1748 0 R (page.98) 1758 0 R (page.99) 1764 0 R (proposed_standards) 1016 0 R (query_address) 1250 0 R (rfcs) 900 0 R (rndc) 1134 0 R (rrset_ordering) 955 0 R (sample_configuration) 941 0 R (section*.10) 1673 0 R (section*.11) 1683 0 R (section*.12) 1703 0 R (section*.13) 1715 0 R (section*.14) 1741 0 R (section*.15) 1751 0 R (section*.16) 1752 0 R (section*.17) 1753 0 R (section*.18) 1759 0 R (section*.19) 1760 0 R (section*.2) 1540 0 R (section*.20) 1765 0 R (section*.21) 1774 0 R (section*.22) 1779 0 R (section*.23) 1780 0 R (section*.24) 1781 0 R (section*.25) 1782 0 R (section*.26) 1784 0 R (section*.27) 1785 0 R (section*.28) 1786 0 R (section*.29) 1796 0 R (section*.3) 1546 0 R (section*.30) 1797 0 R (section*.31) 1798 0 R (section*.32) 1800 0 R (section*.33) 1801 0 R (section*.34) 1802 0 R (section*.35) 1803 0 R (section*.36) 1808 0 R (section*.37) 1813 0 R (section*.38) 1814 0 R (section*.39) 1815 0 R (section*.4) 1554 0 R (section*.40) 1817 0 R (section*.41) 1818 0 R (section*.42) 1819 0 R (section*.43) 1824 0 R (section*.44) 1829 0 R (section*.45) 1834 0 R (section*.46) 1835 0 R (section*.47) 1837 0 R (section*.48) 1838 0 R (section*.49) 1839 0 R (section*.5) 1579 0 R (section*.50) 1840 0 R (section*.51) 1846 0 R (section*.52) 1847 0 R (section*.53) 1848 0 R (section*.54) 1850 0 R (section*.55) 1851 0 R (section*.56) 1852 0 R (section*.57) 1857 0 R (section*.58) 1862 0 R (section*.59) 1863 0 R (section*.6) 1591 0 R (section*.60) 1864 0 R (section*.61) 1866 0 R (section*.62) 1867 0 R (section*.63) 1872 0 R (section*.64) 1873 0 R (section*.65) 1878 0 R (section*.66) 1879 0 R (section*.67) 1880 0 R (section*.68) 1885 0 R (section*.69) 1886 0 R (section*.7) 1605 0 R (section*.70) 1888 0 R (section*.71) 1889 0 R (section*.72) 1890 0 R (section*.73) 1891 0 R (section*.74) 1897 0 R (section*.75) 1898 0 R (section*.76) 1899 0 R (section*.77) 1901 0 R (section*.78) 1902 0 R (section*.79) 1907 0 R (section*.8) 1643 0 R (section*.80) 1908 0 R (section*.81) 1913 0 R (section*.82) 1914 0 R (section*.83) 1915 0 R (section*.84) 1917 0 R (section*.85) 1922 0 R (section*.86) 1923 0 R (section*.87) 1924 0 R (section*.88) 1929 0 R (section*.89) 1930 0 R (section*.9) 1661 0 R (section*.90) 1931 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.1.3) 18 0 R (section.1.4) 22 0 R (section.2.1) 70 0 R (section.2.2) 74 0 R (section.2.3) 78 0 R (section.2.4) 82 0 R (section.2.5) 86 0 R (section.3.1) 94 0 R (section.3.2) 106 0 R (section.3.3) 110 0 R (section.4.1) 134 0 R (section.4.2) 138 0 R (section.4.3) 146 0 R (section.4.4) 150 0 R (section.4.5) 158 0 R (section.4.6) 194 0 R (section.4.7) 198 0 R (section.4.8) 202 0 R (section.4.9) 218 0 R (section.5.1) 234 0 R (section.5.2) 238 0 R (section.6.1) 246 0 R (section.6.2) 274 0 R (section.6.3) 474 0 R (section.7.1) 530 0 R (section.7.2) 534 0 R (section.7.3) 546 0 R (section.8.1) 554 0 R (section.8.2) 562 0 R (section.8.3) 566 0 R (section.A.1) 574 0 R (section.A.2) 582 0 R (section.A.3) 590 0 R (section.B.1) 610 0 R (section.B.10) 646 0 R (section.B.2) 614 0 R (section.B.3) 618 0 R (section.B.4) 622 0 R (section.B.5) 626 0 R (section.B.6) 630 0 R (section.B.7) 634 0 R (section.B.8) 638 0 R (section.B.9) 642 0 R (server_statement_definition_and_usage) 1219 0 R (server_statement_grammar) 1327 0 R (statsfile) 1197 0 R (subsection.1.4.1) 26 0 R (subsection.1.4.2) 30 0 R (subsection.1.4.3) 34 0 R (subsection.1.4.4) 38 0 R (subsection.1.4.5) 54 0 R (subsection.1.4.6) 62 0 R (subsection.3.1.1) 98 0 R (subsection.3.1.2) 102 0 R (subsection.3.3.1) 114 0 R (subsection.3.3.2) 126 0 R (subsection.4.2.1) 142 0 R (subsection.4.4.1) 154 0 R (subsection.4.5.1) 162 0 R (subsection.4.5.2) 174 0 R (subsection.4.5.3) 178 0 R (subsection.4.5.4) 182 0 R (subsection.4.5.5) 186 0 R (subsection.4.5.6) 190 0 R (subsection.4.8.1) 206 0 R (subsection.4.8.2) 210 0 R (subsection.4.8.3) 214 0 R (subsection.4.9.1) 222 0 R (subsection.4.9.2) 226 0 R (subsection.6.1.1) 250 0 R (subsection.6.1.2) 262 0 R (subsection.6.2.1) 278 0 R (subsection.6.2.10) 314 0 R (subsection.6.2.11) 326 0 R (subsection.6.2.12) 330 0 R (subsection.6.2.13) 334 0 R (subsection.6.2.14) 338 0 R (subsection.6.2.15) 342 0 R (subsection.6.2.16) 346 0 R (subsection.6.2.17) 426 0 R (subsection.6.2.18) 430 0 R (subsection.6.2.19) 434 0 R (subsection.6.2.2) 282 0 R (subsection.6.2.20) 438 0 R (subsection.6.2.21) 442 0 R (subsection.6.2.22) 446 0 R (subsection.6.2.23) 450 0 R (subsection.6.2.24) 454 0 R (subsection.6.2.3) 286 0 R (subsection.6.2.4) 290 0 R (subsection.6.2.5) 294 0 R (subsection.6.2.6) 298 0 R (subsection.6.2.7) 302 0 R (subsection.6.2.8) 306 0 R (subsection.6.2.9) 310 0 R (subsection.6.3.1) 478 0 R (subsection.6.3.2) 490 0 R (subsection.6.3.3) 494 0 R (subsection.6.3.4) 498 0 R (subsection.6.3.5) 502 0 R (subsection.6.3.6) 518 0 R (subsection.6.3.7) 522 0 R (subsection.7.2.1) 538 0 R (subsection.7.2.2) 542 0 R (subsection.8.1.1) 558 0 R (subsection.A.1.1) 578 0 R (subsection.A.2.1) 586 0 R (subsection.A.3.1) 594 0 R (subsection.A.3.2) 598 0 R (subsection.A.3.3) 602 0 R (subsubsection.1.4.4.1) 42 0 R (subsubsection.1.4.4.2) 46 0 R (subsubsection.1.4.4.3) 50 0 R (subsubsection.1.4.5.1) 58 0 R (subsubsection.3.3.1.1) 118 0 R (subsubsection.3.3.1.2) 122 0 R (subsubsection.4.5.1.1) 166 0 R (subsubsection.4.5.1.2) 170 0 R (subsubsection.6.1.1.1) 254 0 R (subsubsection.6.1.1.2) 258 0 R (subsubsection.6.1.2.1) 266 0 R (subsubsection.6.1.2.2) 270 0 R (subsubsection.6.2.10.1) 318 0 R (subsubsection.6.2.10.2) 322 0 R (subsubsection.6.2.16.1) 350 0 R (subsubsection.6.2.16.10) 386 0 R (subsubsection.6.2.16.11) 390 0 R (subsubsection.6.2.16.12) 394 0 R (subsubsection.6.2.16.13) 398 0 R (subsubsection.6.2.16.14) 402 0 R (subsubsection.6.2.16.15) 406 0 R (subsubsection.6.2.16.16) 410 0 R (subsubsection.6.2.16.17) 414 0 R (subsubsection.6.2.16.18) 418 0 R (subsubsection.6.2.16.19) 422 0 R (subsubsection.6.2.16.2) 354 0 R (subsubsection.6.2.16.3) 358 0 R (subsubsection.6.2.16.4) 362 0 R (subsubsection.6.2.16.5) 366 0 R (subsubsection.6.2.16.6) 370 0 R (subsubsection.6.2.16.7) 374 0 R (subsubsection.6.2.16.8) 378 0 R (subsubsection.6.2.16.9) 382 0 R (subsubsection.6.2.24.1) 458 0 R (subsubsection.6.2.24.2) 462 0 R (subsubsection.6.2.24.3) 466 0 R (subsubsection.6.2.24.4) 470 0 R (subsubsection.6.3.1.1) 482 0 R (subsubsection.6.3.1.2) 486 0 R (subsubsection.6.3.5.1) 506 0 R (subsubsection.6.3.5.2) 510 0 R (subsubsection.6.3.5.3) 514 0 R (table.1.1) 882 0 R (table.1.2) 892 0 R (table.3.1) 951 0 R (table.3.2) 983 0 R (table.6.1) 1091 0 R (table.6.10) 1428 0 R (table.6.11) 1434 0 R (table.6.12) 1440 0 R (table.6.13) 1448 0 R (table.6.14) 1450 0 R (table.6.15) 1457 0 R (table.6.16) 1460 0 R (table.6.17) 1463 0 R (table.6.18) 1478 0 R (table.6.2) 1115 0 R (table.6.3) 1123 0 R (table.6.4) 1162 0 R (table.6.5) 1203 0 R (table.6.6) 1292 0 R (table.6.7) 1322 0 R (table.6.8) 1362 0 R (table.6.9) 1422 0 R (the_category_phrase) 1156 0 R (the_sortlist_statement) 1279 0 R (topology) 1278 0 R (tsig) 1030 0 R (tuning) 1293 0 R (types_of_resource_records_and_when_to_use_them) 899 0 R (view_statement_grammar) 1312 0 R (zone_statement_grammar) 1237 0 R (zone_transfers) 1006 0 R (zonefile_format) 1304 0 R]
+2030 0 obj <<
+/Names [(Access_Control_Lists) 1563 0 R (Bv9ARM.ch01) 917 0 R (Bv9ARM.ch02) 963 0 R (Bv9ARM.ch03) 980 0 R (Bv9ARM.ch04) 1029 0 R (Bv9ARM.ch05) 1117 0 R (Bv9ARM.ch06) 1128 0 R (Bv9ARM.ch07) 1562 0 R (Bv9ARM.ch08) 1588 0 R (Bv9ARM.ch09) 1603 0 R (Bv9ARM.ch10) 1824 0 R (Configuration_File_Grammar) 1153 0 R (DNSSEC) 1096 0 R (Doc-Start) 687 0 R (Setting_TTLs) 1494 0 R (acache) 970 0 R (access_control) 1275 0 R (acl) 1161 0 R (address_match_lists) 1134 0 R (admin_tools) 1003 0 R (appendix.A) 602 0 R (appendix.B) 638 0 R (bibliography) 1611 0 R (boolean_options) 1045 0 R (builtin) 1349 0 R (chapter*.1) 722 0 R (chapter.1) 6 0 R (chapter.2) 66 0 R (chapter.3) 90 0 R (chapter.4) 130 0 R (chapter.5) 230 0 R (chapter.6) 242 0 R (chapter.7) 558 0 R (chapter.8) 582 0 R (cite.RFC1033) 1739 0 R (cite.RFC1034) 1623 0 R (cite.RFC1035) 1625 0 R (cite.RFC1101) 1721 0 R (cite.RFC1123) 1723 0 R (cite.RFC1183) 1683 0 R (cite.RFC1464) 1761 0 R (cite.RFC1535) 1668 0 R (cite.RFC1536) 1670 0 R (cite.RFC1537) 1741 0 R (cite.RFC1591) 1725 0 R (cite.RFC1706) 1685 0 R (cite.RFC1712) 1781 0 R (cite.RFC1713) 1763 0 R (cite.RFC1794) 1765 0 R (cite.RFC1876) 1687 0 R (cite.RFC1912) 1743 0 R (cite.RFC1982) 1672 0 R (cite.RFC1995) 1630 0 R (cite.RFC1996) 1632 0 R (cite.RFC2010) 1745 0 R (cite.RFC2052) 1689 0 R (cite.RFC2065) 1793 0 R (cite.RFC2136) 1634 0 R (cite.RFC2137) 1795 0 R (cite.RFC2163) 1691 0 R (cite.RFC2168) 1693 0 R (cite.RFC2181) 1636 0 R (cite.RFC2219) 1747 0 R (cite.RFC2230) 1695 0 R (cite.RFC2240) 1767 0 R (cite.RFC2308) 1638 0 R (cite.RFC2317) 1727 0 R (cite.RFC2345) 1769 0 R (cite.RFC2352) 1771 0 R (cite.RFC2535) 1797 0 R (cite.RFC2536) 1697 0 R (cite.RFC2537) 1699 0 R (cite.RFC2538) 1701 0 R (cite.RFC2539) 1703 0 R (cite.RFC2540) 1705 0 R (cite.RFC2671) 1640 0 R (cite.RFC2672) 1642 0 R (cite.RFC2673) 1783 0 R (cite.RFC2782) 1707 0 R (cite.RFC2825) 1751 0 R (cite.RFC2826) 1729 0 R (cite.RFC2845) 1644 0 R (cite.RFC2874) 1785 0 R (cite.RFC2915) 1709 0 R (cite.RFC2929) 1731 0 R (cite.RFC2930) 1646 0 R (cite.RFC2931) 1648 0 R (cite.RFC3007) 1650 0 R (cite.RFC3008) 1799 0 R (cite.RFC3071) 1773 0 R (cite.RFC3090) 1801 0 R (cite.RFC3110) 1711 0 R (cite.RFC3123) 1713 0 R (cite.RFC3225) 1656 0 R (cite.RFC3258) 1775 0 R (cite.RFC3445) 1803 0 R (cite.RFC3490) 1753 0 R (cite.RFC3491) 1755 0 R (cite.RFC3492) 1757 0 R (cite.RFC3596) 1715 0 R (cite.RFC3597) 1717 0 R (cite.RFC3645) 1652 0 R (cite.RFC3655) 1805 0 R (cite.RFC3658) 1807 0 R (cite.RFC3755) 1809 0 R (cite.RFC3757) 1811 0 R (cite.RFC3833) 1658 0 R (cite.RFC3845) 1813 0 R (cite.RFC3901) 1777 0 R (cite.RFC4033) 1660 0 R (cite.RFC4035) 1662 0 R (cite.RFC4044) 1664 0 R (cite.RFC4074) 1674 0 R (cite.RFC974) 1627 0 R (cite.id2503298) 1818 0 R (configuration_file_elements) 1129 0 R (controls_statement_definition_and_usage) 1016 0 R (diagnostic_tools) 951 0 R (dynamic_update) 1039 0 R (dynamic_update_policies) 1091 0 R (dynamic_update_security) 1285 0 R (empty) 1351 0 R (historical_dns_information) 1605 0 R (id2464966) 918 0 R (id2466572) 919 0 R (id2467531) 920 0 R (id2467541) 921 0 R (id2467713) 933 0 R (id2467734) 934 0 R (id2467768) 935 0 R (id2467852) 938 0 R (id2467945) 931 0 R (id2470250) 945 0 R (id2470274) 948 0 R (id2470372) 949 0 R (id2470393) 950 0 R (id2470423) 956 0 R (id2470526) 957 0 R (id2470553) 958 0 R (id2470587) 964 0 R (id2470614) 965 0 R (id2470627) 966 0 R (id2470721) 969 0 R (id2470731) 975 0 R (id2470763) 982 0 R (id2470779) 983 0 R (id2470802) 989 0 R (id2470819) 990 0 R (id2471156) 993 0 R (id2471161) 994 0 R (id2473080) 1021 0 R (id2473092) 1022 0 R (id2473485) 1054 0 R (id2473504) 1055 0 R (id2474007) 1071 0 R (id2474024) 1072 0 R (id2474062) 1077 0 R (id2474081) 1078 0 R (id2474091) 1079 0 R (id2474199) 1080 0 R (id2474325) 1085 0 R (id2474370) 1087 0 R (id2474384) 1088 0 R (id2474501) 1089 0 R (id2474569) 1097 0 R (id2474707) 1098 0 R (id2474786) 1103 0 R (id2474860) 1108 0 R (id2474990) 1110 0 R (id2475148) 1111 0 R (id2475181) 1118 0 R (id2475329) 1130 0 R (id2476124) 1139 0 R (id2476152) 1140 0 R (id2476346) 1145 0 R (id2476361) 1146 0 R (id2476391) 1147 0 R (id2476542) 1154 0 R (id2476917) 1160 0 R (id2476960) 1162 0 R (id2477175) 1164 0 R (id2477604) 1171 0 R (id2477621) 1172 0 R (id2477644) 1173 0 R (id2477668) 1179 0 R (id2477827) 1183 0 R (id2477953) 1184 0 R (id2478005) 1190 0 R (id2478766) 1201 0 R (id2479401) 1207 0 R (id2479611) 1212 0 R (id2479675) 1215 0 R (id2479719) 1216 0 R (id2479734) 1217 0 R (id2481874) 1242 0 R (id2483741) 1268 0 R (id2483800) 1274 0 R (id2484364) 1284 0 R (id2485399) 1304 0 R (id2485414) 1305 0 R (id2485529) 1311 0 R (id2485662) 1313 0 R (id2486233) 1331 0 R (id2487651) 1366 0 R (id2488403) 1379 0 R (id2488454) 1380 0 R (id2488673) 1382 0 R (id2490165) 1399 0 R (id2490172) 1400 0 R (id2490178) 1401 0 R (id2490592) 1407 0 R (id2490625) 1408 0 R (id2491981) 1457 0 R (id2492238) 1463 0 R (id2492257) 1464 0 R (id2492277) 1467 0 R (id2492718) 1469 0 R (id2493680) 1479 0 R (id2493808) 1481 0 R (id2493829) 1482 0 R (id2494260) 1489 0 R (id2494396) 1491 0 R (id2494419) 1492 0 R (id2494823) 1495 0 R (id2494948) 1501 0 R (id2494963) 1502 0 R (id2495075) 1504 0 R (id2495165) 1505 0 R (id2495226) 1510 0 R (id2495296) 1511 0 R (id2495332) 1512 0 R (id2495394) 1513 0 R (id2495800) 1519 0 R (id2495822) 1520 0 R (id2496217) 1527 0 R (id2496233) 1532 0 R (id2496307) 1533 0 R (id2497825) 1540 0 R (id2497831) 1541 0 R (id2498208) 1543 0 R (id2498213) 1544 0 R (id2499129) 1553 0 R (id2499317) 1572 0 R (id2499394) 1573 0 R (id2499522) 1574 0 R (id2499602) 1589 0 R (id2499607) 1590 0 R (id2499619) 1591 0 R (id2499636) 1592 0 R (id2499698) 1604 0 R (id2500006) 1610 0 R (id2500194) 1615 0 R (id2500196) 1621 0 R (id2500273) 1626 0 R (id2500296) 1622 0 R (id2500320) 1624 0 R (id2500356) 1635 0 R (id2500382) 1637 0 R (id2500408) 1629 0 R (id2500433) 1631 0 R (id2500456) 1633 0 R (id2500512) 1639 0 R (id2500538) 1641 0 R (id2500565) 1643 0 R (id2500627) 1645 0 R (id2500657) 1647 0 R (id2500686) 1649 0 R (id2500713) 1651 0 R (id2500788) 1654 0 R (id2500795) 1655 0 R (id2500822) 1657 0 R (id2500858) 1659 0 R (id2500923) 1663 0 R (id2500988) 1661 0 R (id2501053) 1666 0 R (id2501062) 1667 0 R (id2501088) 1669 0 R (id2501156) 1671 0 R (id2501191) 1673 0 R (id2501232) 1681 0 R (id2501237) 1682 0 R (id2501294) 1684 0 R (id2501332) 1692 0 R (id2501435) 1686 0 R (id2501490) 1688 0 R (id2501528) 1690 0 R (id2501554) 1694 0 R (id2501579) 1696 0 R (id2501606) 1698 0 R (id2501633) 1700 0 R (id2501672) 1702 0 R (id2501702) 1704 0 R (id2501732) 1706 0 R (id2501774) 1708 0 R (id2501808) 1710 0 R (id2501834) 1712 0 R (id2501858) 1714 0 R (id2501915) 1716 0 R (id2501940) 1719 0 R (id2501947) 1720 0 R (id2501973) 1722 0 R (id2501995) 1724 0 R (id2502019) 1726 0 R (id2502065) 1728 0 R (id2502088) 1730 0 R (id2502138) 1737 0 R (id2502146) 1738 0 R (id2502169) 1740 0 R (id2502196) 1742 0 R (id2502222) 1744 0 R (id2502259) 1746 0 R (id2502299) 1749 0 R (id2502305) 1750 0 R (id2502337) 1752 0 R (id2502382) 1754 0 R (id2502418) 1756 0 R (id2502444) 1759 0 R (id2502462) 1760 0 R (id2502485) 1762 0 R (id2502510) 1764 0 R (id2502536) 1766 0 R (id2502560) 1768 0 R (id2502605) 1770 0 R (id2502629) 1772 0 R (id2502656) 1774 0 R (id2502681) 1776 0 R (id2502718) 1779 0 R (id2502725) 1780 0 R (id2502782) 1782 0 R (id2502809) 1784 0 R (id2502845) 1791 0 R (id2502857) 1792 0 R (id2502897) 1794 0 R (id2502923) 1796 0 R (id2502953) 1798 0 R (id2502979) 1800 0 R (id2503074) 1802 0 R (id2503110) 1804 0 R (id2503146) 1806 0 R (id2503173) 1808 0 R (id2503200) 1810 0 R (id2503244) 1812 0 R (id2503286) 1815 0 R (id2503296) 1817 0 R (id2503298) 1819 0 R (incremental_zone_transfers) 1051 0 R (internet_drafts) 1814 0 R (ipv6addresses) 1112 0 R (journal) 1040 0 R (lwresd) 1119 0 R (man.dig) 1825 0 R (man.dnssec-keygen) 1873 0 R (man.dnssec-signzone) 1891 0 R (man.host) 1858 0 R (man.named) 1940 0 R (man.named-checkconf) 1911 0 R (man.named-checkzone) 1923 0 R (man.rndc) 1962 0 R (man.rndc-confgen) 1991 0 R (man.rndc.conf) 1974 0 R (notify) 1030 0 R (options) 1231 0 R (page.1) 686 0 R (page.10) 955 0 R (page.100) 1789 0 R (page.101) 1823 0 R (page.102) 1832 0 R (page.103) 1838 0 R (page.104) 1844 0 R (page.105) 1848 0 R (page.106) 1853 0 R (page.107) 1865 0 R (page.108) 1869 0 R (page.109) 1881 0 R (page.11) 962 0 R (page.110) 1887 0 R (page.111) 1898 0 R (page.112) 1903 0 R (page.113) 1908 0 R (page.114) 1919 0 R (page.115) 1930 0 R (page.116) 1936 0 R (page.117) 1946 0 R (page.118) 1952 0 R (page.119) 1959 0 R (page.12) 974 0 R (page.120) 1970 0 R (page.121) 1980 0 R (page.122) 1987 0 R (page.123) 1996 0 R (page.124) 2003 0 R (page.13) 979 0 R (page.14) 988 0 R (page.15) 999 0 R (page.16) 1007 0 R (page.17) 1014 0 R (page.18) 1020 0 R (page.19) 1028 0 R (page.2) 711 0 R (page.20) 1050 0 R (page.21) 1060 0 R (page.22) 1065 0 R (page.23) 1069 0 R (page.24) 1076 0 R (page.25) 1084 0 R (page.26) 1095 0 R (page.27) 1102 0 R (page.28) 1107 0 R (page.29) 1116 0 R (page.3) 721 0 R (page.30) 1123 0 R (page.31) 1127 0 R (page.32) 1138 0 R (page.33) 1144 0 R (page.34) 1152 0 R (page.35) 1159 0 R (page.36) 1168 0 R (page.37) 1178 0 R (page.38) 1189 0 R (page.39) 1194 0 R (page.4) 776 0 R (page.40) 1200 0 R (page.41) 1206 0 R (page.42) 1211 0 R (page.43) 1221 0 R (page.44) 1226 0 R (page.45) 1230 0 R (page.46) 1235 0 R (page.47) 1241 0 R (page.48) 1247 0 R (page.49) 1252 0 R (page.5) 840 0 R (page.50) 1263 0 R (page.51) 1267 0 R (page.52) 1272 0 R (page.53) 1281 0 R (page.54) 1289 0 R (page.55) 1294 0 R (page.56) 1299 0 R (page.57) 1303 0 R (page.58) 1310 0 R (page.59) 1317 0 R (page.6) 902 0 R (page.60) 1323 0 R (page.61) 1329 0 R (page.62) 1338 0 R (page.63) 1348 0 R (page.64) 1356 0 R (page.65) 1360 0 R (page.66) 1365 0 R (page.67) 1371 0 R (page.68) 1378 0 R (page.69) 1386 0 R (page.7) 916 0 R (page.70) 1390 0 R (page.71) 1394 0 R (page.72) 1398 0 R (page.73) 1406 0 R (page.74) 1420 0 R (page.75) 1432 0 R (page.76) 1454 0 R (page.77) 1462 0 R (page.78) 1474 0 R (page.79) 1478 0 R (page.8) 930 0 R (page.80) 1488 0 R (page.81) 1500 0 R (page.82) 1509 0 R (page.83) 1518 0 R (page.84) 1525 0 R (page.85) 1531 0 R (page.86) 1539 0 R (page.87) 1549 0 R (page.88) 1557 0 R (page.89) 1561 0 R (page.9) 944 0 R (page.90) 1567 0 R (page.91) 1578 0 R (page.92) 1583 0 R (page.93) 1587 0 R (page.94) 1598 0 R (page.95) 1602 0 R (page.96) 1609 0 R (page.97) 1619 0 R (page.98) 1679 0 R (page.99) 1735 0 R (proposed_standards) 1056 0 R (query_address) 1290 0 R (rfcs) 940 0 R (rndc) 1174 0 R (rrset_ordering) 995 0 R (sample_configuration) 981 0 R (section*.10) 1748 0 R (section*.11) 1758 0 R (section*.12) 1778 0 R (section*.13) 1790 0 R (section*.14) 1816 0 R (section*.15) 1826 0 R (section*.16) 1827 0 R (section*.17) 1828 0 R (section*.18) 1833 0 R (section*.19) 1834 0 R (section*.2) 1614 0 R (section*.20) 1839 0 R (section*.21) 1849 0 R (section*.22) 1854 0 R (section*.23) 1855 0 R (section*.24) 1856 0 R (section*.25) 1857 0 R (section*.26) 1859 0 R (section*.27) 1860 0 R (section*.28) 1861 0 R (section*.29) 1870 0 R (section*.3) 1620 0 R (section*.30) 1871 0 R (section*.31) 1872 0 R (section*.32) 1874 0 R (section*.33) 1875 0 R (section*.34) 1876 0 R (section*.35) 1877 0 R (section*.36) 1882 0 R (section*.37) 1888 0 R (section*.38) 1889 0 R (section*.39) 1890 0 R (section*.4) 1628 0 R (section*.40) 1892 0 R (section*.41) 1893 0 R (section*.42) 1894 0 R (section*.43) 1899 0 R (section*.44) 1904 0 R (section*.45) 1909 0 R (section*.46) 1910 0 R (section*.47) 1912 0 R (section*.48) 1913 0 R (section*.49) 1914 0 R (section*.5) 1653 0 R (section*.50) 1915 0 R (section*.51) 1920 0 R (section*.52) 1921 0 R (section*.53) 1922 0 R (section*.54) 1924 0 R (section*.55) 1925 0 R (section*.56) 1926 0 R (section*.57) 1931 0 R (section*.58) 1937 0 R (section*.59) 1938 0 R (section*.6) 1665 0 R (section*.60) 1939 0 R (section*.61) 1941 0 R (section*.62) 1942 0 R (section*.63) 1947 0 R (section*.64) 1948 0 R (section*.65) 1953 0 R (section*.66) 1954 0 R (section*.67) 1955 0 R (section*.68) 1960 0 R (section*.69) 1961 0 R (section*.7) 1680 0 R (section*.70) 1963 0 R (section*.71) 1964 0 R (section*.72) 1965 0 R (section*.73) 1966 0 R (section*.74) 1971 0 R (section*.75) 1972 0 R (section*.76) 1973 0 R (section*.77) 1975 0 R (section*.78) 1976 0 R (section*.79) 1981 0 R (section*.8) 1718 0 R (section*.80) 1982 0 R (section*.81) 1988 0 R (section*.82) 1989 0 R (section*.83) 1990 0 R (section*.84) 1992 0 R (section*.85) 1997 0 R (section*.86) 1998 0 R (section*.87) 1999 0 R (section*.88) 2004 0 R (section*.89) 2005 0 R (section*.9) 1736 0 R (section*.90) 2006 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.1.3) 18 0 R (section.1.4) 22 0 R (section.2.1) 70 0 R (section.2.2) 74 0 R (section.2.3) 78 0 R (section.2.4) 82 0 R (section.2.5) 86 0 R (section.3.1) 94 0 R (section.3.2) 106 0 R (section.3.3) 110 0 R (section.4.1) 134 0 R (section.4.2) 138 0 R (section.4.3) 146 0 R (section.4.4) 150 0 R (section.4.5) 158 0 R (section.4.6) 194 0 R (section.4.7) 198 0 R (section.4.8) 202 0 R (section.4.9) 218 0 R (section.5.1) 234 0 R (section.5.2) 238 0 R (section.6.1) 246 0 R (section.6.2) 274 0 R (section.6.3) 478 0 R (section.6.4) 530 0 R (section.7.1) 562 0 R (section.7.2) 566 0 R (section.7.3) 578 0 R (section.8.1) 586 0 R (section.8.2) 594 0 R (section.8.3) 598 0 R (section.A.1) 606 0 R (section.A.2) 614 0 R (section.A.3) 622 0 R (section.B.1) 642 0 R (section.B.10) 678 0 R (section.B.2) 646 0 R (section.B.3) 650 0 R (section.B.4) 654 0 R (section.B.5) 658 0 R (section.B.6) 662 0 R (section.B.7) 666 0 R (section.B.8) 670 0 R (section.B.9) 674 0 R (server_statement_definition_and_usage) 1259 0 R (server_statement_grammar) 1367 0 R (statschannels) 1361 0 R (statsfile) 1237 0 R (subsection.1.4.1) 26 0 R (subsection.1.4.2) 30 0 R (subsection.1.4.3) 34 0 R (subsection.1.4.4) 38 0 R (subsection.1.4.5) 54 0 R (subsection.1.4.6) 62 0 R (subsection.3.1.1) 98 0 R (subsection.3.1.2) 102 0 R (subsection.3.3.1) 114 0 R (subsection.3.3.2) 126 0 R (subsection.4.2.1) 142 0 R (subsection.4.4.1) 154 0 R (subsection.4.5.1) 162 0 R (subsection.4.5.2) 174 0 R (subsection.4.5.3) 178 0 R (subsection.4.5.4) 182 0 R (subsection.4.5.5) 186 0 R (subsection.4.5.6) 190 0 R (subsection.4.8.1) 206 0 R (subsection.4.8.2) 210 0 R (subsection.4.8.3) 214 0 R (subsection.4.9.1) 222 0 R (subsection.4.9.2) 226 0 R (subsection.6.1.1) 250 0 R (subsection.6.1.2) 262 0 R (subsection.6.2.1) 278 0 R (subsection.6.2.10) 314 0 R (subsection.6.2.11) 326 0 R (subsection.6.2.12) 330 0 R (subsection.6.2.13) 334 0 R (subsection.6.2.14) 338 0 R (subsection.6.2.15) 342 0 R (subsection.6.2.16) 346 0 R (subsection.6.2.17) 422 0 R (subsection.6.2.18) 426 0 R (subsection.6.2.19) 430 0 R (subsection.6.2.2) 282 0 R (subsection.6.2.20) 434 0 R (subsection.6.2.21) 438 0 R (subsection.6.2.22) 442 0 R (subsection.6.2.23) 446 0 R (subsection.6.2.24) 450 0 R (subsection.6.2.25) 454 0 R (subsection.6.2.26) 458 0 R (subsection.6.2.3) 286 0 R (subsection.6.2.4) 290 0 R (subsection.6.2.5) 294 0 R (subsection.6.2.6) 298 0 R (subsection.6.2.7) 302 0 R (subsection.6.2.8) 306 0 R (subsection.6.2.9) 310 0 R (subsection.6.3.1) 482 0 R (subsection.6.3.2) 494 0 R (subsection.6.3.3) 498 0 R (subsection.6.3.4) 502 0 R (subsection.6.3.5) 506 0 R (subsection.6.3.6) 522 0 R (subsection.6.3.7) 526 0 R (subsection.6.4.1) 538 0 R (subsection.7.2.1) 570 0 R (subsection.7.2.2) 574 0 R (subsection.8.1.1) 590 0 R (subsection.A.1.1) 610 0 R (subsection.A.2.1) 618 0 R (subsection.A.3.1) 626 0 R (subsection.A.3.2) 630 0 R (subsection.A.3.3) 634 0 R (subsubsection.1.4.4.1) 42 0 R (subsubsection.1.4.4.2) 46 0 R (subsubsection.1.4.4.3) 50 0 R (subsubsection.1.4.5.1) 58 0 R (subsubsection.3.3.1.1) 118 0 R (subsubsection.3.3.1.2) 122 0 R (subsubsection.4.5.1.1) 166 0 R (subsubsection.4.5.1.2) 170 0 R (subsubsection.6.1.1.1) 254 0 R (subsubsection.6.1.1.2) 258 0 R (subsubsection.6.1.2.1) 266 0 R (subsubsection.6.1.2.2) 270 0 R (subsubsection.6.2.10.1) 318 0 R (subsubsection.6.2.10.2) 322 0 R (subsubsection.6.2.16.1) 350 0 R (subsubsection.6.2.16.10) 386 0 R (subsubsection.6.2.16.11) 390 0 R (subsubsection.6.2.16.12) 394 0 R (subsubsection.6.2.16.13) 398 0 R (subsubsection.6.2.16.14) 402 0 R (subsubsection.6.2.16.15) 406 0 R (subsubsection.6.2.16.16) 410 0 R (subsubsection.6.2.16.17) 414 0 R (subsubsection.6.2.16.18) 418 0 R (subsubsection.6.2.16.2) 354 0 R (subsubsection.6.2.16.3) 358 0 R (subsubsection.6.2.16.4) 362 0 R (subsubsection.6.2.16.5) 366 0 R (subsubsection.6.2.16.6) 370 0 R (subsubsection.6.2.16.7) 374 0 R (subsubsection.6.2.16.8) 378 0 R (subsubsection.6.2.16.9) 382 0 R (subsubsection.6.2.26.1) 462 0 R (subsubsection.6.2.26.2) 466 0 R (subsubsection.6.2.26.3) 470 0 R (subsubsection.6.2.26.4) 474 0 R (subsubsection.6.3.1.1) 486 0 R (subsubsection.6.3.1.2) 490 0 R (subsubsection.6.3.5.1) 510 0 R (subsubsection.6.3.5.2) 514 0 R (subsubsection.6.3.5.3) 518 0 R (subsubsection.6.4.0.1) 534 0 R (subsubsection.6.4.1.1) 542 0 R (subsubsection.6.4.1.2) 546 0 R (subsubsection.6.4.1.3) 550 0 R (subsubsection.6.4.1.4) 554 0 R (table.1.1) 922 0 R (table.1.2) 932 0 R (table.3.1) 991 0 R (table.3.2) 1023 0 R (table.6.1) 1131 0 R (table.6.10) 1470 0 R (table.6.11) 1480 0 R (table.6.12) 1483 0 R (table.6.13) 1490 0 R (table.6.14) 1493 0 R (table.6.15) 1496 0 R (table.6.16) 1503 0 R (table.6.17) 1514 0 R (table.6.18) 1521 0 R (table.6.19) 1534 0 R (table.6.2) 1155 0 R (table.6.20) 1542 0 R (table.6.21) 1545 0 R (table.6.3) 1163 0 R (table.6.4) 1202 0 R (table.6.5) 1243 0 R (table.6.6) 1332 0 R (table.6.7) 1402 0 R (table.6.8) 1458 0 R (table.6.9) 1468 0 R (the_category_phrase) 1196 0 R (the_sortlist_statement) 1319 0 R (topology) 1318 0 R (tsig) 1070 0 R (tuning) 1333 0 R (types_of_resource_records_and_when_to_use_them) 939 0 R (view_statement_grammar) 1352 0 R (zone_statement_grammar) 1277 0 R (zone_transfers) 1046 0 R (zonefile_format) 1344 0 R]
/Limits [(Access_Control_Lists) (zonefile_format)]
>> endobj
-1955 0 obj <<
-/Kids [1954 0 R]
+2031 0 obj <<
+/Kids [2030 0 R]
>> endobj
-1956 0 obj <<
-/Dests 1955 0 R
+2032 0 obj <<
+/Dests 2031 0 R
>> endobj
-1957 0 obj <<
+2033 0 obj <<
/Type /Catalog
-/Pages 1952 0 R
-/Outlines 1953 0 R
-/Names 1956 0 R
+/Pages 2028 0 R
+/Outlines 2029 0 R
+/Names 2032 0 R
/PageMode /UseOutlines
-/OpenAction 649 0 R
+/OpenAction 681 0 R
>> endobj
-1958 0 obj <<
+2034 0 obj <<
/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords()
-/CreationDate (D:20071031133547+11'00')
+/CreationDate (D:20080506014144Z)
/PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4)
>> endobj
xref
-0 1959
+0 2035
0000000001 65535 f
0000000002 00000 f
0000000003 00000 f
0000000004 00000 f
0000000000 00000 f
0000000009 00000 n
-0000066894 00000 n
-0000672242 00000 n
+0000069906 00000 n
+0000696437 00000 n
0000000054 00000 n
0000000086 00000 n
-0000067018 00000 n
-0000672170 00000 n
+0000070030 00000 n
+0000696365 00000 n
0000000133 00000 n
0000000173 00000 n
-0000067143 00000 n
-0000672084 00000 n
+0000070155 00000 n
+0000696279 00000 n
0000000221 00000 n
0000000273 00000 n
-0000067268 00000 n
-0000671998 00000 n
+0000070280 00000 n
+0000696193 00000 n
0000000321 00000 n
0000000377 00000 n
-0000071531 00000 n
-0000671888 00000 n
+0000074544 00000 n
+0000696083 00000 n
0000000425 00000 n
0000000478 00000 n
-0000071656 00000 n
-0000671814 00000 n
+0000074669 00000 n
+0000696009 00000 n
0000000531 00000 n
0000000572 00000 n
-0000071781 00000 n
-0000671727 00000 n
+0000074794 00000 n
+0000695922 00000 n
0000000625 00000 n
0000000674 00000 n
-0000071906 00000 n
-0000671640 00000 n
+0000074919 00000 n
+0000695835 00000 n
0000000727 00000 n
0000000757 00000 n
-0000076184 00000 n
-0000671516 00000 n
+0000079198 00000 n
+0000695711 00000 n
0000000810 00000 n
0000000861 00000 n
-0000076309 00000 n
-0000671442 00000 n
+0000079323 00000 n
+0000695637 00000 n
0000000919 00000 n
0000000964 00000 n
-0000076434 00000 n
-0000671355 00000 n
+0000079448 00000 n
+0000695550 00000 n
0000001022 00000 n
0000001062 00000 n
-0000076559 00000 n
-0000671281 00000 n
+0000079573 00000 n
+0000695476 00000 n
0000001120 00000 n
0000001162 00000 n
-0000079531 00000 n
-0000671157 00000 n
+0000082545 00000 n
+0000695352 00000 n
0000001215 00000 n
0000001260 00000 n
-0000079656 00000 n
-0000671096 00000 n
+0000082670 00000 n
+0000695291 00000 n
0000001318 00000 n
0000001355 00000 n
-0000079781 00000 n
-0000671022 00000 n
+0000082795 00000 n
+0000695217 00000 n
0000001408 00000 n
0000001463 00000 n
-0000082709 00000 n
-0000670897 00000 n
+0000085723 00000 n
+0000695092 00000 n
0000001509 00000 n
0000001556 00000 n
-0000082834 00000 n
-0000670823 00000 n
+0000085848 00000 n
+0000695018 00000 n
0000001604 00000 n
0000001648 00000 n
-0000082959 00000 n
-0000670736 00000 n
+0000085973 00000 n
+0000694931 00000 n
0000001696 00000 n
0000001735 00000 n
-0000083084 00000 n
-0000670649 00000 n
+0000086098 00000 n
+0000694844 00000 n
0000001783 00000 n
0000001825 00000 n
-0000083208 00000 n
-0000670562 00000 n
+0000086222 00000 n
+0000694757 00000 n
0000001873 00000 n
0000001936 00000 n
-0000084294 00000 n
-0000670488 00000 n
+0000087308 00000 n
+0000694683 00000 n
0000001984 00000 n
0000002034 00000 n
-0000086004 00000 n
-0000670360 00000 n
+0000089018 00000 n
+0000694555 00000 n
0000002080 00000 n
0000002126 00000 n
-0000086128 00000 n
-0000670247 00000 n
+0000089142 00000 n
+0000694442 00000 n
0000002174 00000 n
0000002218 00000 n
-0000086253 00000 n
-0000670171 00000 n
+0000089267 00000 n
+0000694366 00000 n
0000002271 00000 n
0000002323 00000 n
-0000086378 00000 n
-0000670094 00000 n
+0000089392 00000 n
+0000694289 00000 n
0000002377 00000 n
0000002436 00000 n
-0000088906 00000 n
-0000670003 00000 n
+0000091921 00000 n
+0000694198 00000 n
0000002485 00000 n
0000002523 00000 n
-0000089158 00000 n
-0000669886 00000 n
+0000092173 00000 n
+0000694081 00000 n
0000002572 00000 n
0000002618 00000 n
-0000089284 00000 n
-0000669768 00000 n
+0000092299 00000 n
+0000693963 00000 n
0000002672 00000 n
0000002739 00000 n
-0000092491 00000 n
-0000669689 00000 n
+0000095505 00000 n
+0000693884 00000 n
0000002798 00000 n
0000002842 00000 n
-0000092617 00000 n
-0000669610 00000 n
+0000095631 00000 n
+0000693805 00000 n
0000002901 00000 n
0000002949 00000 n
-0000102946 00000 n
-0000669531 00000 n
+0000105984 00000 n
+0000693726 00000 n
0000003003 00000 n
0000003036 00000 n
-0000107915 00000 n
-0000669399 00000 n
+0000110971 00000 n
+0000693594 00000 n
0000003083 00000 n
0000003126 00000 n
-0000108041 00000 n
-0000669320 00000 n
+0000111100 00000 n
+0000693515 00000 n
0000003175 00000 n
0000003205 00000 n
-0000108167 00000 n
-0000669188 00000 n
+0000111229 00000 n
+0000693383 00000 n
0000003254 00000 n
0000003292 00000 n
-0000108293 00000 n
-0000669123 00000 n
+0000111358 00000 n
+0000693318 00000 n
0000003346 00000 n
0000003388 00000 n
-0000112549 00000 n
-0000669030 00000 n
+0000115620 00000 n
+0000693225 00000 n
0000003437 00000 n
0000003496 00000 n
-0000112678 00000 n
-0000668898 00000 n
+0000115749 00000 n
+0000693093 00000 n
0000003545 00000 n
0000003578 00000 n
-0000112807 00000 n
-0000668833 00000 n
+0000115878 00000 n
+0000693028 00000 n
0000003632 00000 n
0000003681 00000 n
-0000120116 00000 n
-0000668701 00000 n
+0000123188 00000 n
+0000692896 00000 n
0000003730 00000 n
0000003758 00000 n
-0000120245 00000 n
-0000668583 00000 n
+0000123317 00000 n
+0000692778 00000 n
0000003812 00000 n
0000003881 00000 n
-0000120374 00000 n
-0000668504 00000 n
+0000123446 00000 n
+0000692699 00000 n
0000003940 00000 n
0000003988 00000 n
-0000123205 00000 n
-0000668425 00000 n
+0000126280 00000 n
+0000692620 00000 n
0000004047 00000 n
0000004092 00000 n
-0000123334 00000 n
-0000668332 00000 n
+0000126409 00000 n
+0000692527 00000 n
0000004146 00000 n
0000004214 00000 n
-0000123463 00000 n
-0000668239 00000 n
+0000126538 00000 n
+0000692434 00000 n
0000004268 00000 n
0000004338 00000 n
-0000123592 00000 n
-0000668146 00000 n
+0000126667 00000 n
+0000692341 00000 n
0000004392 00000 n
0000004455 00000 n
-0000127494 00000 n
-0000668053 00000 n
+0000130570 00000 n
+0000692248 00000 n
0000004509 00000 n
0000004564 00000 n
-0000127623 00000 n
-0000667974 00000 n
+0000130699 00000 n
+0000692169 00000 n
0000004618 00000 n
0000004650 00000 n
-0000127752 00000 n
-0000667881 00000 n
+0000130828 00000 n
+0000692076 00000 n
0000004699 00000 n
0000004727 00000 n
-0000127881 00000 n
-0000667788 00000 n
+0000130957 00000 n
+0000691983 00000 n
0000004776 00000 n
0000004808 00000 n
-0000131500 00000 n
-0000667656 00000 n
+0000134576 00000 n
+0000691851 00000 n
0000004857 00000 n
0000004887 00000 n
-0000131629 00000 n
-0000667577 00000 n
+0000134705 00000 n
+0000691772 00000 n
0000004941 00000 n
0000004982 00000 n
-0000131757 00000 n
-0000667484 00000 n
+0000134833 00000 n
+0000691679 00000 n
0000005036 00000 n
0000005078 00000 n
-0000135199 00000 n
-0000667405 00000 n
+0000138274 00000 n
+0000691600 00000 n
0000005132 00000 n
0000005177 00000 n
-0000138273 00000 n
-0000667287 00000 n
+0000141349 00000 n
+0000691482 00000 n
0000005226 00000 n
0000005272 00000 n
-0000138402 00000 n
-0000667208 00000 n
+0000141478 00000 n
+0000691403 00000 n
0000005326 00000 n
0000005386 00000 n
-0000138530 00000 n
-0000667129 00000 n
+0000141606 00000 n
+0000691324 00000 n
0000005440 00000 n
0000005509 00000 n
-0000141010 00000 n
-0000666996 00000 n
+0000144088 00000 n
+0000691191 00000 n
0000005556 00000 n
0000005609 00000 n
-0000141139 00000 n
-0000666917 00000 n
+0000144217 00000 n
+0000691112 00000 n
0000005658 00000 n
0000005714 00000 n
-0000141268 00000 n
-0000666838 00000 n
+0000144346 00000 n
+0000691033 00000 n
0000005763 00000 n
0000005812 00000 n
-0000145452 00000 n
-0000666705 00000 n
+0000148530 00000 n
+0000690900 00000 n
0000005859 00000 n
0000005911 00000 n
-0000145581 00000 n
-0000666587 00000 n
+0000148659 00000 n
+0000690782 00000 n
0000005960 00000 n
0000006011 00000 n
-0000149858 00000 n
-0000666469 00000 n
+0000152938 00000 n
+0000690664 00000 n
0000006065 00000 n
0000006110 00000 n
-0000149987 00000 n
-0000666390 00000 n
+0000153067 00000 n
+0000690585 00000 n
0000006169 00000 n
0000006203 00000 n
-0000150116 00000 n
-0000666311 00000 n
+0000153196 00000 n
+0000690506 00000 n
0000006262 00000 n
0000006310 00000 n
-0000153650 00000 n
-0000666193 00000 n
+0000156728 00000 n
+0000690388 00000 n
0000006364 00000 n
0000006404 00000 n
-0000153779 00000 n
-0000666114 00000 n
+0000156857 00000 n
+0000690309 00000 n
0000006463 00000 n
0000006497 00000 n
-0000153908 00000 n
-0000666035 00000 n
+0000156986 00000 n
+0000690230 00000 n
0000006556 00000 n
0000006604 00000 n
-0000157771 00000 n
-0000665902 00000 n
+0000160851 00000 n
+0000690097 00000 n
0000006653 00000 n
0000006703 00000 n
-0000160870 00000 n
-0000665823 00000 n
+0000163735 00000 n
+0000690018 00000 n
0000006757 00000 n
0000006804 00000 n
-0000160998 00000 n
-0000665730 00000 n
+0000163864 00000 n
+0000689925 00000 n
0000006858 00000 n
0000006918 00000 n
-0000161257 00000 n
-0000665637 00000 n
+0000164123 00000 n
+0000689832 00000 n
0000006972 00000 n
0000007024 00000 n
-0000161386 00000 n
-0000665544 00000 n
+0000164252 00000 n
+0000689739 00000 n
0000007078 00000 n
0000007143 00000 n
-0000166285 00000 n
-0000665451 00000 n
+0000169432 00000 n
+0000689646 00000 n
0000007197 00000 n
0000007248 00000 n
-0000166414 00000 n
-0000665358 00000 n
+0000169561 00000 n
+0000689553 00000 n
0000007302 00000 n
0000007366 00000 n
-0000166543 00000 n
-0000665265 00000 n
+0000169690 00000 n
+0000689460 00000 n
0000007420 00000 n
0000007467 00000 n
-0000170308 00000 n
-0000665172 00000 n
+0000173305 00000 n
+0000689367 00000 n
0000007521 00000 n
0000007581 00000 n
-0000170437 00000 n
-0000665079 00000 n
+0000173434 00000 n
+0000689274 00000 n
0000007635 00000 n
0000007686 00000 n
-0000170566 00000 n
-0000664947 00000 n
+0000173563 00000 n
+0000689142 00000 n
0000007741 00000 n
0000007806 00000 n
-0000175098 00000 n
-0000664868 00000 n
+0000177956 00000 n
+0000689063 00000 n
0000007866 00000 n
0000007913 00000 n
-0000181525 00000 n
-0000664789 00000 n
+0000184266 00000 n
+0000688984 00000 n
0000007973 00000 n
0000008021 00000 n
-0000184795 00000 n
-0000664696 00000 n
+0000187786 00000 n
+0000688891 00000 n
0000008076 00000 n
0000008126 00000 n
-0000187652 00000 n
-0000664603 00000 n
+0000190633 00000 n
+0000688798 00000 n
0000008181 00000 n
0000008244 00000 n
-0000187781 00000 n
-0000664510 00000 n
+0000190762 00000 n
+0000688705 00000 n
0000008299 00000 n
0000008351 00000 n
-0000187909 00000 n
-0000664417 00000 n
+0000190891 00000 n
+0000688612 00000 n
0000008406 00000 n
0000008471 00000 n
-0000188037 00000 n
-0000664324 00000 n
+0000191020 00000 n
+0000688519 00000 n
0000008526 00000 n
0000008578 00000 n
-0000194604 00000 n
-0000664191 00000 n
+0000197034 00000 n
+0000688386 00000 n
0000008633 00000 n
0000008698 00000 n
-0000202603 00000 n
-0000664112 00000 n
+0000205352 00000 n
+0000688307 00000 n
0000008758 00000 n
0000008802 00000 n
-0000219854 00000 n
-0000664019 00000 n
+0000222778 00000 n
+0000688214 00000 n
0000008862 00000 n
0000008901 00000 n
-0000223372 00000 n
-0000663926 00000 n
+0000226450 00000 n
+0000688121 00000 n
0000008961 00000 n
0000009008 00000 n
-0000223499 00000 n
-0000663833 00000 n
+0000226577 00000 n
+0000688028 00000 n
0000009068 00000 n
0000009111 00000 n
-0000227712 00000 n
-0000663740 00000 n
+0000230855 00000 n
+0000687935 00000 n
0000009171 00000 n
0000009210 00000 n
-0000230808 00000 n
-0000663647 00000 n
+0000234179 00000 n
+0000687842 00000 n
0000009270 00000 n
0000009312 00000 n
-0000233931 00000 n
-0000663554 00000 n
+0000237215 00000 n
+0000687749 00000 n
0000009372 00000 n
0000009415 00000 n
-0000241657 00000 n
-0000663461 00000 n
+0000245043 00000 n
+0000687656 00000 n
0000009475 00000 n
0000009522 00000 n
-0000241786 00000 n
-0000663368 00000 n
+0000245172 00000 n
+0000687563 00000 n
0000009582 00000 n
0000009643 00000 n
-0000245605 00000 n
-0000663275 00000 n
+0000249012 00000 n
+0000687470 00000 n
0000009704 00000 n
0000009756 00000 n
-0000245734 00000 n
-0000663182 00000 n
+0000249141 00000 n
+0000687377 00000 n
0000009817 00000 n
0000009870 00000 n
-0000248983 00000 n
-0000663089 00000 n
+0000252166 00000 n
+0000687284 00000 n
0000009931 00000 n
0000009969 00000 n
-0000249112 00000 n
-0000662996 00000 n
+0000252295 00000 n
+0000687191 00000 n
0000010030 00000 n
0000010082 00000 n
-0000253078 00000 n
-0000662903 00000 n
+0000256271 00000 n
+0000687098 00000 n
0000010143 00000 n
0000010187 00000 n
-0000256388 00000 n
-0000662810 00000 n
+0000260104 00000 n
+0000687005 00000 n
0000010248 00000 n
0000010284 00000 n
-0000264852 00000 n
-0000662717 00000 n
+0000268639 00000 n
+0000686912 00000 n
0000010345 00000 n
0000010408 00000 n
-0000264981 00000 n
-0000662624 00000 n
+0000268768 00000 n
+0000686819 00000 n
0000010469 00000 n
0000010519 00000 n
-0000270896 00000 n
-0000662531 00000 n
+0000274993 00000 n
+0000686740 00000 n
0000010580 00000 n
-0000010629 00000 n
-0000271155 00000 n
-0000662452 00000 n
-0000010690 00000 n
-0000010746 00000 n
-0000274528 00000 n
-0000662359 00000 n
-0000010801 00000 n
-0000010852 00000 n
-0000279551 00000 n
-0000662266 00000 n
-0000010907 00000 n
-0000010971 00000 n
-0000283053 00000 n
-0000662173 00000 n
-0000011026 00000 n
-0000011083 00000 n
-0000283182 00000 n
-0000662080 00000 n
-0000011138 00000 n
-0000011208 00000 n
-0000283311 00000 n
-0000661987 00000 n
-0000011263 00000 n
-0000011312 00000 n
-0000283440 00000 n
-0000661894 00000 n
-0000011367 00000 n
-0000011429 00000 n
-0000286034 00000 n
-0000661801 00000 n
-0000011484 00000 n
-0000011533 00000 n
-0000291265 00000 n
-0000661683 00000 n
-0000011588 00000 n
-0000011650 00000 n
-0000291394 00000 n
-0000661604 00000 n
-0000011710 00000 n
-0000011749 00000 n
-0000295447 00000 n
-0000661511 00000 n
-0000011809 00000 n
-0000011843 00000 n
-0000301339 00000 n
-0000661418 00000 n
-0000011903 00000 n
-0000011944 00000 n
-0000311696 00000 n
-0000661339 00000 n
-0000012004 00000 n
-0000012056 00000 n
-0000315963 00000 n
-0000661221 00000 n
-0000012105 00000 n
-0000012138 00000 n
-0000316092 00000 n
-0000661103 00000 n
-0000012192 00000 n
-0000012264 00000 n
-0000316220 00000 n
-0000661024 00000 n
-0000012323 00000 n
-0000012367 00000 n
-0000327286 00000 n
-0000660945 00000 n
-0000012426 00000 n
-0000012479 00000 n
-0000327674 00000 n
-0000660852 00000 n
-0000012533 00000 n
-0000012583 00000 n
-0000331107 00000 n
-0000660759 00000 n
-0000012637 00000 n
-0000012675 00000 n
-0000331366 00000 n
-0000660666 00000 n
-0000012729 00000 n
+0000010636 00000 n
+0000275121 00000 n
+0000686647 00000 n
+0000010691 00000 n
+0000010755 00000 n
+0000278582 00000 n
+0000686554 00000 n
+0000010810 00000 n
+0000010887 00000 n
+0000278711 00000 n
+0000686461 00000 n
+0000010942 00000 n
+0000010993 00000 n
+0000278840 00000 n
+0000686368 00000 n
+0000011048 00000 n
+0000011112 00000 n
+0000287116 00000 n
+0000686275 00000 n
+0000011167 00000 n
+0000011224 00000 n
+0000287245 00000 n
+0000686182 00000 n
+0000011279 00000 n
+0000011349 00000 n
+0000287373 00000 n
+0000686089 00000 n
+0000011404 00000 n
+0000011453 00000 n
+0000287502 00000 n
+0000685996 00000 n
+0000011508 00000 n
+0000011570 00000 n
+0000289734 00000 n
+0000685903 00000 n
+0000011625 00000 n
+0000011674 00000 n
+0000295929 00000 n
+0000685785 00000 n
+0000011729 00000 n
+0000011791 00000 n
+0000296058 00000 n
+0000685706 00000 n
+0000011851 00000 n
+0000011890 00000 n
+0000301098 00000 n
+0000685613 00000 n
+0000011950 00000 n
+0000011984 00000 n
+0000301226 00000 n
+0000685520 00000 n
+0000012044 00000 n
+0000012085 00000 n
+0000316788 00000 n
+0000685441 00000 n
+0000012145 00000 n
+0000012197 00000 n
+0000320751 00000 n
+0000685309 00000 n
+0000012246 00000 n
+0000012279 00000 n
+0000320880 00000 n
+0000685191 00000 n
+0000012333 00000 n
+0000012405 00000 n
+0000321008 00000 n
+0000685112 00000 n
+0000012464 00000 n
+0000012508 00000 n
+0000328396 00000 n
+0000685033 00000 n
+0000012567 00000 n
+0000012620 00000 n
+0000332073 00000 n
+0000684940 00000 n
+0000012674 00000 n
+0000012724 00000 n
+0000332331 00000 n
+0000684847 00000 n
0000012778 00000 n
-0000334263 00000 n
-0000660534 00000 n
-0000012832 00000 n
-0000012884 00000 n
-0000334391 00000 n
-0000660455 00000 n
-0000012943 00000 n
-0000012995 00000 n
-0000334520 00000 n
-0000660362 00000 n
-0000013054 00000 n
-0000013107 00000 n
-0000334648 00000 n
-0000660283 00000 n
-0000013166 00000 n
-0000013215 00000 n
-0000334777 00000 n
-0000660190 00000 n
-0000013269 00000 n
-0000013349 00000 n
-0000338704 00000 n
-0000660111 00000 n
-0000013403 00000 n
-0000013452 00000 n
-0000342023 00000 n
-0000659978 00000 n
-0000013499 00000 n
-0000013551 00000 n
-0000342152 00000 n
-0000659899 00000 n
-0000013600 00000 n
-0000013644 00000 n
-0000346338 00000 n
-0000659767 00000 n
-0000013693 00000 n
-0000013734 00000 n
-0000346467 00000 n
-0000659688 00000 n
+0000012816 00000 n
+0000335585 00000 n
+0000684754 00000 n
+0000012870 00000 n
+0000012919 00000 n
+0000335843 00000 n
+0000684622 00000 n
+0000012973 00000 n
+0000013025 00000 n
+0000335972 00000 n
+0000684543 00000 n
+0000013084 00000 n
+0000013136 00000 n
+0000338788 00000 n
+0000684450 00000 n
+0000013195 00000 n
+0000013248 00000 n
+0000338917 00000 n
+0000684371 00000 n
+0000013307 00000 n
+0000013356 00000 n
+0000339046 00000 n
+0000684278 00000 n
+0000013410 00000 n
+0000013490 00000 n
+0000343375 00000 n
+0000684199 00000 n
+0000013544 00000 n
+0000013593 00000 n
+0000343504 00000 n
+0000684081 00000 n
+0000013642 00000 n
+0000013682 00000 n
+0000347194 00000 n
+0000684002 00000 n
+0000013741 00000 n
0000013788 00000 n
-0000013836 00000 n
-0000346595 00000 n
-0000659609 00000 n
-0000013890 00000 n
-0000013941 00000 n
-0000346724 00000 n
-0000659530 00000 n
-0000013990 00000 n
-0000014037 00000 n
-0000350987 00000 n
-0000659397 00000 n
-0000014084 00000 n
-0000014121 00000 n
-0000351116 00000 n
-0000659279 00000 n
-0000014170 00000 n
-0000014209 00000 n
-0000351245 00000 n
-0000659214 00000 n
-0000014263 00000 n
-0000014341 00000 n
-0000351374 00000 n
-0000659121 00000 n
-0000014390 00000 n
-0000014457 00000 n
-0000351503 00000 n
-0000659042 00000 n
-0000014506 00000 n
-0000014551 00000 n
-0000354942 00000 n
-0000658909 00000 n
-0000014599 00000 n
-0000014631 00000 n
-0000355071 00000 n
-0000658791 00000 n
-0000014680 00000 n
-0000014719 00000 n
-0000355200 00000 n
-0000658726 00000 n
-0000014773 00000 n
-0000014834 00000 n
-0000358965 00000 n
-0000658594 00000 n
-0000014883 00000 n
-0000014940 00000 n
-0000359094 00000 n
-0000658529 00000 n
-0000014994 00000 n
-0000015043 00000 n
-0000359223 00000 n
-0000658411 00000 n
-0000015092 00000 n
-0000015154 00000 n
-0000359352 00000 n
-0000658332 00000 n
-0000015208 00000 n
-0000015263 00000 n
-0000383375 00000 n
-0000658239 00000 n
-0000015317 00000 n
-0000015358 00000 n
-0000383504 00000 n
-0000658160 00000 n
-0000015412 00000 n
-0000015464 00000 n
-0000386207 00000 n
-0000658040 00000 n
-0000015512 00000 n
-0000015546 00000 n
-0000386336 00000 n
-0000657961 00000 n
-0000015595 00000 n
-0000015622 00000 n
-0000404272 00000 n
-0000657868 00000 n
-0000015671 00000 n
-0000015699 00000 n
-0000411809 00000 n
-0000657775 00000 n
-0000015748 00000 n
-0000015785 00000 n
-0000418149 00000 n
-0000657682 00000 n
-0000015834 00000 n
-0000015873 00000 n
-0000427649 00000 n
-0000657589 00000 n
-0000015922 00000 n
-0000015961 00000 n
-0000430507 00000 n
-0000657496 00000 n
-0000016010 00000 n
-0000016049 00000 n
-0000436910 00000 n
-0000657403 00000 n
-0000016098 00000 n
-0000016127 00000 n
-0000446426 00000 n
-0000657310 00000 n
-0000016176 00000 n
-0000016204 00000 n
-0000449575 00000 n
-0000657217 00000 n
-0000016253 00000 n
-0000016286 00000 n
-0000455680 00000 n
-0000657138 00000 n
-0000016336 00000 n
-0000016373 00000 n
-0000016742 00000 n
-0000016864 00000 n
-0000024693 00000 n
-0000016426 00000 n
-0000024567 00000 n
-0000024630 00000 n
-0000653001 00000 n
-0000627058 00000 n
-0000652827 00000 n
-0000654026 00000 n
-0000019727 00000 n
-0000019944 00000 n
-0000020013 00000 n
-0000020082 00000 n
-0000020150 00000 n
-0000020218 00000 n
-0000020267 00000 n
-0000020314 00000 n
-0000020647 00000 n
-0000020669 00000 n
-0000020837 00000 n
-0000021002 00000 n
-0000021171 00000 n
-0000021350 00000 n
-0000021659 00000 n
-0000021819 00000 n
-0000026052 00000 n
-0000025867 00000 n
-0000024793 00000 n
-0000025989 00000 n
-0000625846 00000 n
-0000599367 00000 n
-0000625672 00000 n
-0000598682 00000 n
-0000596538 00000 n
-0000598518 00000 n
-0000037759 00000 n
-0000029108 00000 n
-0000026137 00000 n
-0000037633 00000 n
-0000037696 00000 n
-0000029642 00000 n
-0000029796 00000 n
-0000029953 00000 n
-0000030110 00000 n
-0000030266 00000 n
-0000030423 00000 n
-0000030585 00000 n
-0000030746 00000 n
-0000030907 00000 n
-0000031069 00000 n
-0000031236 00000 n
-0000031403 00000 n
-0000031568 00000 n
-0000031730 00000 n
-0000031896 00000 n
-0000032057 00000 n
-0000032212 00000 n
-0000032369 00000 n
-0000032525 00000 n
-0000032682 00000 n
-0000032839 00000 n
-0000032996 00000 n
-0000033150 00000 n
-0000033306 00000 n
-0000033468 00000 n
-0000033630 00000 n
-0000033786 00000 n
-0000033943 00000 n
-0000034105 00000 n
-0000034272 00000 n
-0000034438 00000 n
-0000034599 00000 n
-0000034754 00000 n
-0000034911 00000 n
-0000035068 00000 n
-0000035230 00000 n
-0000035387 00000 n
-0000035544 00000 n
-0000035706 00000 n
-0000035863 00000 n
-0000036025 00000 n
-0000036192 00000 n
-0000036358 00000 n
-0000036520 00000 n
-0000036682 00000 n
-0000036844 00000 n
-0000037006 00000 n
-0000037168 00000 n
-0000037323 00000 n
-0000037478 00000 n
-0000051123 00000 n
-0000041075 00000 n
-0000037844 00000 n
-0000051060 00000 n
-0000595987 00000 n
-0000578906 00000 n
-0000595803 00000 n
-0000041665 00000 n
-0000041828 00000 n
-0000041990 00000 n
-0000042153 00000 n
-0000042311 00000 n
-0000042474 00000 n
-0000042637 00000 n
-0000042792 00000 n
-0000042950 00000 n
-0000043108 00000 n
-0000043264 00000 n
-0000043422 00000 n
-0000043585 00000 n
-0000043753 00000 n
-0000043921 00000 n
-0000044084 00000 n
-0000044252 00000 n
-0000044420 00000 n
-0000044578 00000 n
-0000044741 00000 n
-0000044904 00000 n
-0000045066 00000 n
-0000045228 00000 n
-0000045391 00000 n
-0000045553 00000 n
-0000045715 00000 n
-0000045878 00000 n
-0000046041 00000 n
-0000046204 00000 n
-0000046373 00000 n
-0000046542 00000 n
-0000046706 00000 n
-0000046869 00000 n
-0000047033 00000 n
-0000047197 00000 n
-0000047360 00000 n
-0000047524 00000 n
-0000047693 00000 n
-0000047861 00000 n
-0000048030 00000 n
-0000048199 00000 n
-0000048368 00000 n
-0000048537 00000 n
-0000048706 00000 n
-0000048875 00000 n
-0000049044 00000 n
-0000049214 00000 n
-0000049384 00000 n
-0000049554 00000 n
-0000049723 00000 n
-0000049893 00000 n
-0000050063 00000 n
-0000050231 00000 n
-0000050400 00000 n
-0000050570 00000 n
-0000050737 00000 n
-0000050898 00000 n
-0000063946 00000 n
-0000054652 00000 n
-0000051221 00000 n
-0000063883 00000 n
-0000055218 00000 n
-0000055381 00000 n
-0000055544 00000 n
-0000055707 00000 n
-0000055870 00000 n
-0000056032 00000 n
-0000056195 00000 n
-0000056363 00000 n
-0000056531 00000 n
-0000056697 00000 n
-0000056865 00000 n
-0000057022 00000 n
-0000057184 00000 n
-0000057351 00000 n
-0000057518 00000 n
-0000057680 00000 n
-0000057842 00000 n
-0000058004 00000 n
-0000058166 00000 n
-0000058333 00000 n
-0000058500 00000 n
-0000058667 00000 n
-0000058829 00000 n
-0000058991 00000 n
-0000059146 00000 n
-0000059301 00000 n
-0000059458 00000 n
-0000059620 00000 n
-0000059782 00000 n
-0000059939 00000 n
-0000060094 00000 n
-0000060251 00000 n
-0000060413 00000 n
-0000060569 00000 n
-0000060726 00000 n
-0000060882 00000 n
-0000061039 00000 n
-0000061201 00000 n
-0000061358 00000 n
-0000061520 00000 n
-0000061677 00000 n
-0000061838 00000 n
-0000062000 00000 n
-0000062162 00000 n
-0000062317 00000 n
-0000062473 00000 n
-0000062630 00000 n
-0000062787 00000 n
-0000062944 00000 n
-0000063100 00000 n
-0000063257 00000 n
-0000063414 00000 n
-0000577940 00000 n
-0000557973 00000 n
-0000577767 00000 n
-0000063571 00000 n
-0000063727 00000 n
-0000064391 00000 n
-0000064206 00000 n
-0000064057 00000 n
-0000064328 00000 n
-0000067519 00000 n
-0000066709 00000 n
-0000064432 00000 n
-0000066831 00000 n
-0000066955 00000 n
-0000067080 00000 n
-0000067205 00000 n
-0000557084 00000 n
-0000535753 00000 n
-0000556910 00000 n
-0000067330 00000 n
-0000067393 00000 n
-0000067456 00000 n
-0000534981 00000 n
-0000517360 00000 n
-0000534808 00000 n
-0000654144 00000 n
-0000072030 00000 n
-0000070848 00000 n
-0000067643 00000 n
-0000071342 00000 n
-0000071405 00000 n
-0000071468 00000 n
-0000071593 00000 n
-0000071718 00000 n
-0000071843 00000 n
-0000070998 00000 n
-0000071191 00000 n
-0000071968 00000 n
-0000316156 00000 n
-0000359416 00000 n
-0000076684 00000 n
-0000075648 00000 n
-0000072154 00000 n
-0000076121 00000 n
-0000076246 00000 n
-0000075798 00000 n
-0000075960 00000 n
-0000076371 00000 n
-0000076496 00000 n
-0000076621 00000 n
-0000092554 00000 n
-0000079906 00000 n
-0000079346 00000 n
-0000076808 00000 n
-0000079468 00000 n
-0000079593 00000 n
-0000079718 00000 n
-0000079843 00000 n
-0000083333 00000 n
-0000082192 00000 n
-0000080017 00000 n
-0000082646 00000 n
-0000082771 00000 n
-0000082896 00000 n
-0000083021 00000 n
-0000083146 00000 n
-0000082342 00000 n
-0000082494 00000 n
-0000083270 00000 n
-0000271219 00000 n
-0000084419 00000 n
-0000084109 00000 n
-0000083418 00000 n
-0000084231 00000 n
-0000084356 00000 n
-0000086504 00000 n
-0000085819 00000 n
-0000084517 00000 n
-0000085941 00000 n
-0000086066 00000 n
-0000086190 00000 n
-0000086315 00000 n
-0000086441 00000 n
-0000654262 00000 n
-0000089409 00000 n
-0000088541 00000 n
-0000086602 00000 n
-0000088843 00000 n
-0000088969 00000 n
-0000089032 00000 n
-0000089095 00000 n
-0000088683 00000 n
-0000089221 00000 n
-0000089347 00000 n
-0000253142 00000 n
-0000092743 00000 n
-0000092306 00000 n
-0000089520 00000 n
-0000092428 00000 n
-0000516704 00000 n
-0000505122 00000 n
-0000516527 00000 n
-0000092680 00000 n
-0000096528 00000 n
-0000096343 00000 n
-0000092867 00000 n
-0000096465 00000 n
-0000504587 00000 n
-0000495073 00000 n
-0000504410 00000 n
-0000100912 00000 n
-0000100521 00000 n
-0000096691 00000 n
-0000100849 00000 n
-0000100663 00000 n
-0000161450 00000 n
-0000103198 00000 n
-0000102761 00000 n
-0000101049 00000 n
-0000102883 00000 n
-0000103009 00000 n
-0000103072 00000 n
-0000103135 00000 n
-0000105889 00000 n
-0000108420 00000 n
-0000105738 00000 n
-0000103322 00000 n
-0000107852 00000 n
-0000107978 00000 n
-0000108104 00000 n
-0000107531 00000 n
-0000107692 00000 n
-0000494214 00000 n
-0000484842 00000 n
-0000494042 00000 n
-0000484280 00000 n
-0000475197 00000 n
-0000484107 00000 n
-0000108230 00000 n
-0000108356 00000 n
-0000654380 00000 n
-0000107360 00000 n
-0000107418 00000 n
-0000107508 00000 n
-0000202667 00000 n
-0000233995 00000 n
-0000112936 00000 n
-0000112001 00000 n
-0000108572 00000 n
-0000112484 00000 n
-0000112613 00000 n
-0000112157 00000 n
-0000112322 00000 n
-0000112742 00000 n
-0000112871 00000 n
-0000363441 00000 n
-0000116550 00000 n
-0000116170 00000 n
-0000113087 00000 n
-0000116485 00000 n
-0000116317 00000 n
-0000117799 00000 n
-0000117608 00000 n
-0000116675 00000 n
-0000117734 00000 n
-0000120502 00000 n
-0000119925 00000 n
-0000117898 00000 n
-0000120051 00000 n
-0000120180 00000 n
-0000120309 00000 n
-0000120438 00000 n
-0000123721 00000 n
-0000123014 00000 n
-0000120640 00000 n
-0000123140 00000 n
-0000123269 00000 n
-0000123398 00000 n
-0000123527 00000 n
-0000123656 00000 n
-0000128009 00000 n
-0000127111 00000 n
-0000123846 00000 n
-0000127429 00000 n
-0000127558 00000 n
-0000127258 00000 n
-0000127687 00000 n
-0000127816 00000 n
-0000127944 00000 n
-0000654504 00000 n
-0000311760 00000 n
-0000131886 00000 n
-0000131309 00000 n
-0000128134 00000 n
-0000131435 00000 n
-0000131564 00000 n
-0000131692 00000 n
-0000131821 00000 n
-0000135328 00000 n
-0000135008 00000 n
-0000132024 00000 n
-0000135134 00000 n
-0000135263 00000 n
-0000138659 00000 n
-0000137900 00000 n
-0000135440 00000 n
-0000138208 00000 n
-0000138337 00000 n
-0000138047 00000 n
-0000138466 00000 n
-0000138594 00000 n
-0000359158 00000 n
-0000141397 00000 n
-0000140819 00000 n
-0000138825 00000 n
-0000140945 00000 n
-0000141074 00000 n
-0000141203 00000 n
-0000141332 00000 n
-0000141837 00000 n
-0000141646 00000 n
-0000141496 00000 n
-0000141772 00000 n
-0000145839 00000 n
-0000145073 00000 n
-0000141879 00000 n
-0000145387 00000 n
-0000145516 00000 n
-0000145644 00000 n
-0000145709 00000 n
-0000145774 00000 n
-0000145220 00000 n
-0000654629 00000 n
-0000149922 00000 n
-0000150245 00000 n
-0000149667 00000 n
-0000145938 00000 n
-0000149793 00000 n
-0000150051 00000 n
-0000150180 00000 n
-0000154037 00000 n
-0000153459 00000 n
-0000150370 00000 n
-0000153585 00000 n
-0000153714 00000 n
-0000153843 00000 n
-0000153972 00000 n
-0000156780 00000 n
-0000158029 00000 n
-0000156654 00000 n
-0000154175 00000 n
-0000157706 00000 n
-0000157835 00000 n
-0000157900 00000 n
-0000157964 00000 n
-0000161513 00000 n
-0000160679 00000 n
-0000158183 00000 n
-0000160805 00000 n
-0000160934 00000 n
-0000161062 00000 n
-0000161127 00000 n
-0000161192 00000 n
-0000161321 00000 n
-0000166671 00000 n
-0000165754 00000 n
-0000161625 00000 n
-0000166220 00000 n
-0000165910 00000 n
-0000166061 00000 n
-0000166349 00000 n
-0000166478 00000 n
-0000166606 00000 n
-0000461387 00000 n
-0000170695 00000 n
-0000169553 00000 n
-0000166809 00000 n
-0000170243 00000 n
-0000170372 00000 n
-0000169718 00000 n
-0000169870 00000 n
-0000170057 00000 n
-0000170501 00000 n
-0000170630 00000 n
-0000654754 00000 n
-0000175227 00000 n
-0000174907 00000 n
-0000170820 00000 n
-0000175033 00000 n
-0000175162 00000 n
-0000178416 00000 n
-0000178037 00000 n
-0000175352 00000 n
-0000178351 00000 n
-0000178184 00000 n
-0000181589 00000 n
-0000181784 00000 n
-0000181334 00000 n
-0000178528 00000 n
-0000181460 00000 n
-0000181654 00000 n
-0000181719 00000 n
-0000184923 00000 n
-0000184604 00000 n
-0000181896 00000 n
-0000184730 00000 n
-0000184858 00000 n
-0000188166 00000 n
-0000187126 00000 n
-0000185035 00000 n
-0000187587 00000 n
-0000187716 00000 n
-0000187282 00000 n
-0000187436 00000 n
-0000187844 00000 n
-0000187973 00000 n
-0000188101 00000 n
-0000189726 00000 n
-0000189535 00000 n
-0000188278 00000 n
-0000189661 00000 n
-0000654879 00000 n
-0000191214 00000 n
-0000191023 00000 n
-0000189825 00000 n
+0000347322 00000 n
+0000683884 00000 n
+0000013842 00000 n
+0000013887 00000 n
+0000350644 00000 n
+0000683805 00000 n
+0000013946 00000 n
+0000014005 00000 n
+0000353439 00000 n
+0000683712 00000 n
+0000014064 00000 n
+0000014128 00000 n
+0000353698 00000 n
+0000683619 00000 n
+0000014187 00000 n
+0000014243 00000 n
+0000355369 00000 n
+0000683540 00000 n
+0000014302 00000 n
+0000014364 00000 n
+0000357603 00000 n
+0000683407 00000 n
+0000014411 00000 n
+0000014463 00000 n
+0000357732 00000 n
+0000683328 00000 n
+0000014512 00000 n
+0000014556 00000 n
+0000361918 00000 n
+0000683196 00000 n
+0000014605 00000 n
+0000014646 00000 n
+0000362047 00000 n
+0000683117 00000 n
+0000014700 00000 n
+0000014748 00000 n
+0000362175 00000 n
+0000683038 00000 n
+0000014802 00000 n
+0000014853 00000 n
+0000362304 00000 n
+0000682959 00000 n
+0000014902 00000 n
+0000014949 00000 n
+0000366571 00000 n
+0000682826 00000 n
+0000014996 00000 n
+0000015033 00000 n
+0000366700 00000 n
+0000682708 00000 n
+0000015082 00000 n
+0000015121 00000 n
+0000366829 00000 n
+0000682643 00000 n
+0000015175 00000 n
+0000015253 00000 n
+0000366958 00000 n
+0000682550 00000 n
+0000015302 00000 n
+0000015369 00000 n
+0000367087 00000 n
+0000682471 00000 n
+0000015418 00000 n
+0000015463 00000 n
+0000370526 00000 n
+0000682338 00000 n
+0000015511 00000 n
+0000015543 00000 n
+0000370655 00000 n
+0000682220 00000 n
+0000015592 00000 n
+0000015631 00000 n
+0000370784 00000 n
+0000682155 00000 n
+0000015685 00000 n
+0000015746 00000 n
+0000374549 00000 n
+0000682023 00000 n
+0000015795 00000 n
+0000015852 00000 n
+0000374678 00000 n
+0000681958 00000 n
+0000015906 00000 n
+0000015955 00000 n
+0000374807 00000 n
+0000681840 00000 n
+0000016004 00000 n
+0000016066 00000 n
+0000374936 00000 n
+0000681761 00000 n
+0000016120 00000 n
+0000016175 00000 n
+0000398960 00000 n
+0000681668 00000 n
+0000016229 00000 n
+0000016270 00000 n
+0000399089 00000 n
+0000681589 00000 n
+0000016324 00000 n
+0000016376 00000 n
+0000401791 00000 n
+0000681469 00000 n
+0000016424 00000 n
+0000016458 00000 n
+0000401920 00000 n
+0000681390 00000 n
+0000016507 00000 n
+0000016534 00000 n
+0000419860 00000 n
+0000681297 00000 n
+0000016583 00000 n
+0000016611 00000 n
+0000427395 00000 n
+0000681204 00000 n
+0000016660 00000 n
+0000016697 00000 n
+0000433738 00000 n
+0000681111 00000 n
+0000016746 00000 n
+0000016785 00000 n
+0000443242 00000 n
+0000681018 00000 n
+0000016834 00000 n
+0000016873 00000 n
+0000446100 00000 n
+0000680925 00000 n
+0000016922 00000 n
+0000016961 00000 n
+0000452504 00000 n
+0000680832 00000 n
+0000017010 00000 n
+0000017039 00000 n
+0000462033 00000 n
+0000680739 00000 n
+0000017088 00000 n
+0000017116 00000 n
+0000465188 00000 n
+0000680646 00000 n
+0000017165 00000 n
+0000017198 00000 n
+0000471294 00000 n
+0000680567 00000 n
+0000017248 00000 n
+0000017285 00000 n
+0000017654 00000 n
+0000017776 00000 n
+0000025605 00000 n
+0000017338 00000 n
+0000025479 00000 n
+0000025542 00000 n
+0000676310 00000 n
+0000650367 00000 n
+0000676136 00000 n
+0000677335 00000 n
+0000020639 00000 n
+0000020856 00000 n
+0000020925 00000 n
+0000020994 00000 n
+0000021062 00000 n
+0000021130 00000 n
+0000021179 00000 n
+0000021226 00000 n
+0000021559 00000 n
+0000021581 00000 n
+0000021749 00000 n
+0000021914 00000 n
+0000022083 00000 n
+0000022262 00000 n
+0000022571 00000 n
+0000022731 00000 n
+0000026969 00000 n
+0000026784 00000 n
+0000025705 00000 n
+0000026906 00000 n
+0000649146 00000 n
+0000622625 00000 n
+0000648972 00000 n
+0000621940 00000 n
+0000619795 00000 n
+0000621776 00000 n
+0000038676 00000 n
+0000030025 00000 n
+0000027054 00000 n
+0000038550 00000 n
+0000038613 00000 n
+0000030559 00000 n
+0000030713 00000 n
+0000030870 00000 n
+0000031027 00000 n
+0000031183 00000 n
+0000031340 00000 n
+0000031502 00000 n
+0000031663 00000 n
+0000031824 00000 n
+0000031986 00000 n
+0000032153 00000 n
+0000032320 00000 n
+0000032485 00000 n
+0000032647 00000 n
+0000032813 00000 n
+0000032974 00000 n
+0000033129 00000 n
+0000033286 00000 n
+0000033442 00000 n
+0000033599 00000 n
+0000033756 00000 n
+0000033913 00000 n
+0000034067 00000 n
+0000034223 00000 n
+0000034385 00000 n
+0000034547 00000 n
+0000034703 00000 n
+0000034860 00000 n
+0000035022 00000 n
+0000035189 00000 n
+0000035355 00000 n
+0000035516 00000 n
+0000035671 00000 n
+0000035828 00000 n
+0000035985 00000 n
+0000036147 00000 n
+0000036304 00000 n
+0000036461 00000 n
+0000036623 00000 n
+0000036780 00000 n
+0000036942 00000 n
+0000037109 00000 n
+0000037275 00000 n
+0000037437 00000 n
+0000037599 00000 n
+0000037761 00000 n
+0000037923 00000 n
+0000038085 00000 n
+0000038240 00000 n
+0000038395 00000 n
+0000052052 00000 n
+0000042010 00000 n
+0000038761 00000 n
+0000051989 00000 n
+0000619244 00000 n
+0000602163 00000 n
+0000619060 00000 n
+0000042600 00000 n
+0000042763 00000 n
+0000042925 00000 n
+0000043088 00000 n
+0000043246 00000 n
+0000043409 00000 n
+0000043572 00000 n
+0000043727 00000 n
+0000043885 00000 n
+0000044043 00000 n
+0000044199 00000 n
+0000044357 00000 n
+0000044520 00000 n
+0000044688 00000 n
+0000044856 00000 n
+0000045019 00000 n
+0000045187 00000 n
+0000045355 00000 n
+0000045513 00000 n
+0000045676 00000 n
+0000045839 00000 n
+0000046001 00000 n
+0000046163 00000 n
+0000046326 00000 n
+0000046488 00000 n
+0000046650 00000 n
+0000046813 00000 n
+0000046976 00000 n
+0000047139 00000 n
+0000047308 00000 n
+0000047477 00000 n
+0000047641 00000 n
+0000047804 00000 n
+0000047968 00000 n
+0000048132 00000 n
+0000048295 00000 n
+0000048459 00000 n
+0000048628 00000 n
+0000048796 00000 n
+0000048965 00000 n
+0000049134 00000 n
+0000049303 00000 n
+0000049472 00000 n
+0000049641 00000 n
+0000049810 00000 n
+0000049979 00000 n
+0000050149 00000 n
+0000050319 00000 n
+0000050489 00000 n
+0000050658 00000 n
+0000050828 00000 n
+0000050998 00000 n
+0000051166 00000 n
+0000051335 00000 n
+0000051505 00000 n
+0000051666 00000 n
+0000051827 00000 n
+0000065187 00000 n
+0000055669 00000 n
+0000052150 00000 n
+0000065124 00000 n
+0000056243 00000 n
+0000056406 00000 n
+0000056569 00000 n
+0000056732 00000 n
+0000056895 00000 n
+0000057058 00000 n
+0000057221 00000 n
+0000057383 00000 n
+0000057550 00000 n
+0000057718 00000 n
+0000057886 00000 n
+0000058054 00000 n
+0000058211 00000 n
+0000058373 00000 n
+0000058540 00000 n
+0000058706 00000 n
+0000058868 00000 n
+0000059030 00000 n
+0000059192 00000 n
+0000059354 00000 n
+0000059521 00000 n
+0000059687 00000 n
+0000059854 00000 n
+0000060016 00000 n
+0000060178 00000 n
+0000060335 00000 n
+0000060502 00000 n
+0000060664 00000 n
+0000060831 00000 n
+0000060998 00000 n
+0000601274 00000 n
+0000579943 00000 n
+0000601100 00000 n
+0000061165 00000 n
+0000061332 00000 n
+0000061487 00000 n
+0000061644 00000 n
+0000061801 00000 n
+0000061963 00000 n
+0000062124 00000 n
+0000062280 00000 n
+0000062435 00000 n
+0000062592 00000 n
+0000062754 00000 n
+0000062911 00000 n
+0000063068 00000 n
+0000063224 00000 n
+0000063380 00000 n
+0000063541 00000 n
+0000063698 00000 n
+0000063860 00000 n
+0000064017 00000 n
+0000064179 00000 n
+0000064341 00000 n
+0000064503 00000 n
+0000064659 00000 n
+0000064814 00000 n
+0000064969 00000 n
+0000067346 00000 n
+0000065996 00000 n
+0000065298 00000 n
+0000067283 00000 n
+0000066186 00000 n
+0000066343 00000 n
+0000066500 00000 n
+0000066655 00000 n
+0000066812 00000 n
+0000578977 00000 n
+0000559010 00000 n
+0000578804 00000 n
+0000066968 00000 n
+0000067125 00000 n
+0000070531 00000 n
+0000069721 00000 n
+0000067444 00000 n
+0000069843 00000 n
+0000069967 00000 n
+0000070092 00000 n
+0000070217 00000 n
+0000070342 00000 n
+0000070405 00000 n
+0000070468 00000 n
+0000558238 00000 n
+0000540617 00000 n
+0000558065 00000 n
+0000677453 00000 n
+0000075043 00000 n
+0000073861 00000 n
+0000070655 00000 n
+0000074355 00000 n
+0000074418 00000 n
+0000074481 00000 n
+0000074606 00000 n
+0000074731 00000 n
+0000074856 00000 n
+0000074011 00000 n
+0000074204 00000 n
+0000074981 00000 n
+0000320944 00000 n
+0000375000 00000 n
+0000079698 00000 n
+0000078662 00000 n
+0000075167 00000 n
+0000079135 00000 n
+0000079260 00000 n
+0000078812 00000 n
+0000078974 00000 n
+0000079385 00000 n
+0000079510 00000 n
+0000079635 00000 n
+0000095568 00000 n
+0000082920 00000 n
+0000082360 00000 n
+0000079822 00000 n
+0000082482 00000 n
+0000082607 00000 n
+0000082732 00000 n
+0000082857 00000 n
+0000086347 00000 n
+0000085206 00000 n
+0000083031 00000 n
+0000085660 00000 n
+0000085785 00000 n
+0000085910 00000 n
+0000086035 00000 n
+0000086160 00000 n
+0000085356 00000 n
+0000085508 00000 n
+0000086284 00000 n
+0000275057 00000 n
+0000087433 00000 n
+0000087123 00000 n
+0000086432 00000 n
+0000087245 00000 n
+0000087370 00000 n
+0000089518 00000 n
+0000088833 00000 n
+0000087531 00000 n
+0000088955 00000 n
+0000089080 00000 n
+0000089204 00000 n
+0000089329 00000 n
+0000089455 00000 n
+0000677571 00000 n
+0000092424 00000 n
+0000091556 00000 n
+0000089616 00000 n
+0000091858 00000 n
+0000091984 00000 n
+0000092047 00000 n
+0000092110 00000 n
+0000091698 00000 n
+0000092236 00000 n
+0000092362 00000 n
+0000256335 00000 n
+0000095758 00000 n
+0000095320 00000 n
+0000092535 00000 n
+0000095442 00000 n
+0000539959 00000 n
+0000528372 00000 n
+0000539780 00000 n
+0000095694 00000 n
+0000099548 00000 n
+0000099358 00000 n
+0000095883 00000 n
+0000099483 00000 n
+0000527835 00000 n
+0000518318 00000 n
+0000527656 00000 n
+0000103942 00000 n
+0000103544 00000 n
+0000099714 00000 n
+0000103877 00000 n
+0000103690 00000 n
+0000164316 00000 n
+0000106243 00000 n
+0000105794 00000 n
+0000104081 00000 n
+0000105919 00000 n
+0000106048 00000 n
+0000106113 00000 n
+0000106178 00000 n
+0000108940 00000 n
+0000111487 00000 n
+0000108784 00000 n
+0000106368 00000 n
+0000110906 00000 n
+0000111035 00000 n
+0000111164 00000 n
+0000110583 00000 n
+0000110745 00000 n
+0000517448 00000 n
+0000508028 00000 n
+0000517274 00000 n
+0000507464 00000 n
+0000498378 00000 n
+0000507289 00000 n
+0000111293 00000 n
+0000111422 00000 n
+0000677692 00000 n
+0000110412 00000 n
+0000110470 00000 n
+0000110560 00000 n
+0000205416 00000 n
+0000237279 00000 n
+0000116007 00000 n
+0000115072 00000 n
+0000111643 00000 n
+0000115555 00000 n
+0000115684 00000 n
+0000115228 00000 n
+0000115393 00000 n
+0000115813 00000 n
+0000115942 00000 n
+0000379026 00000 n
+0000119621 00000 n
+0000119241 00000 n
+0000116159 00000 n
+0000119556 00000 n
+0000119388 00000 n
+0000120871 00000 n
+0000120680 00000 n
+0000119746 00000 n
+0000120806 00000 n
+0000123574 00000 n
+0000122997 00000 n
+0000120970 00000 n
+0000123123 00000 n
+0000123252 00000 n
+0000123381 00000 n
+0000123510 00000 n
+0000126796 00000 n
+0000126089 00000 n
+0000123712 00000 n
+0000126215 00000 n
+0000126344 00000 n
+0000126473 00000 n
+0000126602 00000 n
+0000126731 00000 n
+0000131085 00000 n
+0000130187 00000 n
+0000126921 00000 n
+0000130505 00000 n
+0000130634 00000 n
+0000130334 00000 n
+0000130763 00000 n
+0000130892 00000 n
+0000131020 00000 n
+0000677817 00000 n
+0000316852 00000 n
+0000134962 00000 n
+0000134385 00000 n
+0000131210 00000 n
+0000134511 00000 n
+0000134640 00000 n
+0000134768 00000 n
+0000134897 00000 n
+0000138403 00000 n
+0000138083 00000 n
+0000135100 00000 n
+0000138209 00000 n
+0000138338 00000 n
+0000141735 00000 n
+0000140976 00000 n
+0000138515 00000 n
+0000141284 00000 n
+0000141413 00000 n
+0000141123 00000 n
+0000141542 00000 n
+0000141670 00000 n
+0000374742 00000 n
+0000144475 00000 n
+0000143897 00000 n
+0000141903 00000 n
+0000144023 00000 n
+0000144152 00000 n
+0000144281 00000 n
+0000144410 00000 n
+0000144915 00000 n
+0000144724 00000 n
+0000144574 00000 n
+0000144850 00000 n
+0000148917 00000 n
+0000148151 00000 n
+0000144957 00000 n
+0000148465 00000 n
+0000148594 00000 n
+0000148722 00000 n
+0000148787 00000 n
+0000148852 00000 n
+0000148298 00000 n
+0000677942 00000 n
+0000153002 00000 n
+0000153325 00000 n
+0000152747 00000 n
+0000149016 00000 n
+0000152873 00000 n
+0000153131 00000 n
+0000153260 00000 n
+0000157115 00000 n
+0000156537 00000 n
+0000153450 00000 n
+0000156663 00000 n
+0000156792 00000 n
+0000156921 00000 n
+0000157050 00000 n
+0000159860 00000 n
+0000161109 00000 n
+0000159734 00000 n
+0000157253 00000 n
+0000160786 00000 n
+0000160915 00000 n
+0000160980 00000 n
+0000161044 00000 n
+0000164381 00000 n
+0000163544 00000 n
+0000161264 00000 n
+0000163670 00000 n
+0000163799 00000 n
+0000163928 00000 n
+0000163993 00000 n
+0000164058 00000 n
+0000164187 00000 n
+0000169819 00000 n
+0000168903 00000 n
+0000164493 00000 n
+0000169367 00000 n
+0000169059 00000 n
+0000169209 00000 n
+0000169496 00000 n
+0000169625 00000 n
+0000169754 00000 n
+0000477004 00000 n
+0000173692 00000 n
+0000172549 00000 n
+0000169957 00000 n
+0000173240 00000 n
+0000173369 00000 n
+0000172714 00000 n
+0000172866 00000 n
+0000173053 00000 n
+0000173498 00000 n
+0000173627 00000 n
+0000678067 00000 n
+0000178084 00000 n
+0000177765 00000 n
+0000173818 00000 n
+0000177891 00000 n
+0000178020 00000 n
+0000181229 00000 n
+0000180851 00000 n
+0000178209 00000 n
+0000181164 00000 n
+0000180998 00000 n
+0000184330 00000 n
+0000184525 00000 n
+0000184075 00000 n
+0000181341 00000 n
+0000184201 00000 n
+0000184395 00000 n
+0000184460 00000 n
+0000187914 00000 n
+0000187595 00000 n
+0000184637 00000 n
+0000187721 00000 n
+0000187850 00000 n
0000191149 00000 n
-0000194732 00000 n
-0000194413 00000 n
-0000191313 00000 n
-0000194539 00000 n
-0000194667 00000 n
-0000198800 00000 n
-0000198431 00000 n
-0000194870 00000 n
-0000198735 00000 n
-0000198578 00000 n
-0000270960 00000 n
-0000202861 00000 n
-0000202412 00000 n
-0000198912 00000 n
-0000202538 00000 n
-0000202732 00000 n
-0000202796 00000 n
-0000207067 00000 n
-0000206701 00000 n
-0000202973 00000 n
-0000207002 00000 n
-0000206848 00000 n
-0000212148 00000 n
-0000211017 00000 n
-0000207192 00000 n
-0000212083 00000 n
-0000211200 00000 n
-0000211357 00000 n
-0000211541 00000 n
-0000211714 00000 n
-0000211898 00000 n
-0000655004 00000 n
-0000279615 00000 n
-0000216361 00000 n
-0000216170 00000 n
-0000212340 00000 n
-0000216296 00000 n
-0000219983 00000 n
-0000219663 00000 n
-0000216473 00000 n
-0000219789 00000 n
-0000219918 00000 n
-0000223628 00000 n
-0000222814 00000 n
-0000220095 00000 n
-0000223307 00000 n
-0000222970 00000 n
-0000223436 00000 n
-0000223563 00000 n
-0000223140 00000 n
-0000286098 00000 n
-0000227841 00000 n
-0000227151 00000 n
-0000223781 00000 n
-0000227647 00000 n
-0000227307 00000 n
-0000227477 00000 n
-0000227776 00000 n
-0000346788 00000 n
-0000230937 00000 n
-0000230617 00000 n
-0000227966 00000 n
-0000230743 00000 n
-0000230872 00000 n
-0000234060 00000 n
-0000233740 00000 n
-0000231049 00000 n
-0000233866 00000 n
-0000655129 00000 n
-0000237772 00000 n
-0000237581 00000 n
-0000234213 00000 n
-0000237707 00000 n
-0000241915 00000 n
-0000241270 00000 n
-0000237925 00000 n
-0000241592 00000 n
-0000241721 00000 n
-0000241850 00000 n
-0000241417 00000 n
-0000245863 00000 n
-0000245238 00000 n
-0000242081 00000 n
-0000245540 00000 n
-0000245669 00000 n
-0000245385 00000 n
-0000245798 00000 n
-0000249241 00000 n
-0000248611 00000 n
-0000245975 00000 n
-0000248918 00000 n
-0000249047 00000 n
-0000249176 00000 n
-0000248758 00000 n
-0000253206 00000 n
-0000252534 00000 n
-0000249407 00000 n
-0000253013 00000 n
-0000252690 00000 n
-0000252845 00000 n
-0000256516 00000 n
-0000256067 00000 n
-0000253318 00000 n
-0000256193 00000 n
-0000256258 00000 n
-0000256323 00000 n
-0000256452 00000 n
-0000655254 00000 n
-0000261198 00000 n
-0000260652 00000 n
-0000256708 00000 n
-0000261133 00000 n
-0000260808 00000 n
-0000260970 00000 n
-0000474842 00000 n
-0000472843 00000 n
-0000474677 00000 n
-0000338768 00000 n
-0000265110 00000 n
-0000264471 00000 n
-0000261365 00000 n
-0000264787 00000 n
-0000264916 00000 n
-0000264618 00000 n
-0000265045 00000 n
-0000283375 00000 n
-0000267775 00000 n
-0000267584 00000 n
-0000265235 00000 n
-0000267710 00000 n
-0000271283 00000 n
-0000270705 00000 n
-0000267941 00000 n
-0000270831 00000 n
-0000271025 00000 n
-0000271090 00000 n
-0000274657 00000 n
-0000274337 00000 n
-0000271382 00000 n
-0000274463 00000 n
-0000274592 00000 n
-0000279680 00000 n
-0000279018 00000 n
-0000274769 00000 n
-0000279486 00000 n
-0000279174 00000 n
-0000279326 00000 n
-0000655379 00000 n
-0000283569 00000 n
-0000282687 00000 n
-0000279792 00000 n
-0000282988 00000 n
-0000283117 00000 n
-0000283246 00000 n
-0000282834 00000 n
-0000283504 00000 n
-0000286163 00000 n
-0000285843 00000 n
-0000283681 00000 n
-0000285969 00000 n
-0000287614 00000 n
-0000287423 00000 n
-0000286275 00000 n
-0000287549 00000 n
-0000289031 00000 n
-0000288840 00000 n
-0000287713 00000 n
-0000288966 00000 n
-0000291653 00000 n
-0000291074 00000 n
-0000289130 00000 n
-0000291200 00000 n
-0000291329 00000 n
-0000291458 00000 n
-0000291523 00000 n
-0000291588 00000 n
-0000295576 00000 n
-0000295256 00000 n
-0000291765 00000 n
-0000295382 00000 n
-0000295511 00000 n
-0000655504 00000 n
-0000301468 00000 n
-0000298733 00000 n
-0000295688 00000 n
-0000301274 00000 n
-0000301403 00000 n
-0000298997 00000 n
-0000299159 00000 n
-0000299321 00000 n
-0000299482 00000 n
-0000299642 00000 n
-0000299804 00000 n
-0000299975 00000 n
-0000300137 00000 n
-0000300299 00000 n
-0000300462 00000 n
-0000300625 00000 n
-0000300788 00000 n
-0000300951 00000 n
-0000301114 00000 n
-0000306442 00000 n
-0000304717 00000 n
-0000301580 00000 n
-0000306377 00000 n
-0000304936 00000 n
-0000305099 00000 n
-0000305260 00000 n
-0000305422 00000 n
-0000305584 00000 n
-0000305746 00000 n
-0000305908 00000 n
-0000306062 00000 n
-0000306225 00000 n
-0000311825 00000 n
-0000309464 00000 n
-0000306567 00000 n
-0000311631 00000 n
-0000309710 00000 n
-0000309872 00000 n
-0000310034 00000 n
-0000310196 00000 n
-0000310358 00000 n
-0000310520 00000 n
-0000310682 00000 n
-0000310844 00000 n
-0000310998 00000 n
-0000311159 00000 n
-0000311314 00000 n
-0000311477 00000 n
-0000316476 00000 n
-0000315280 00000 n
-0000311937 00000 n
-0000315768 00000 n
-0000315833 00000 n
-0000315898 00000 n
-0000316027 00000 n
-0000316284 00000 n
-0000315436 00000 n
-0000315606 00000 n
-0000316348 00000 n
-0000316412 00000 n
-0000320089 00000 n
-0000319768 00000 n
-0000316614 00000 n
-0000319894 00000 n
-0000319959 00000 n
-0000320024 00000 n
-0000323772 00000 n
-0000323452 00000 n
-0000320188 00000 n
-0000323578 00000 n
-0000323643 00000 n
-0000323707 00000 n
-0000655629 00000 n
-0000327803 00000 n
-0000327095 00000 n
-0000323884 00000 n
-0000327221 00000 n
-0000327350 00000 n
-0000327415 00000 n
-0000327480 00000 n
-0000327544 00000 n
-0000327609 00000 n
-0000327738 00000 n
-0000331625 00000 n
-0000330786 00000 n
-0000327928 00000 n
-0000330912 00000 n
-0000330977 00000 n
-0000331042 00000 n
-0000331171 00000 n
-0000331236 00000 n
-0000331301 00000 n
-0000331430 00000 n
-0000331495 00000 n
-0000331560 00000 n
-0000334905 00000 n
-0000334072 00000 n
-0000331804 00000 n
-0000334198 00000 n
-0000334327 00000 n
-0000334455 00000 n
-0000334583 00000 n
-0000334712 00000 n
-0000334841 00000 n
-0000338833 00000 n
-0000338383 00000 n
-0000335098 00000 n
-0000338509 00000 n
-0000338574 00000 n
-0000338639 00000 n
-0000340315 00000 n
-0000340124 00000 n
-0000338958 00000 n
-0000340250 00000 n
-0000342280 00000 n
-0000341832 00000 n
-0000340427 00000 n
-0000341958 00000 n
-0000342087 00000 n
-0000342216 00000 n
-0000655754 00000 n
-0000346853 00000 n
-0000345910 00000 n
-0000342392 00000 n
-0000346273 00000 n
-0000472522 00000 n
-0000463309 00000 n
-0000472336 00000 n
-0000346057 00000 n
-0000346402 00000 n
-0000346530 00000 n
-0000346659 00000 n
-0000347891 00000 n
-0000347700 00000 n
-0000347086 00000 n
-0000347826 00000 n
-0000348318 00000 n
-0000348127 00000 n
-0000347977 00000 n
-0000348253 00000 n
-0000351631 00000 n
-0000350405 00000 n
-0000348360 00000 n
-0000350922 00000 n
-0000351051 00000 n
-0000351180 00000 n
-0000351309 00000 n
-0000351438 00000 n
-0000351567 00000 n
-0000350561 00000 n
-0000350733 00000 n
-0000352085 00000 n
-0000351894 00000 n
-0000351744 00000 n
-0000352020 00000 n
-0000355329 00000 n
-0000354751 00000 n
-0000352127 00000 n
-0000354877 00000 n
-0000355006 00000 n
-0000355135 00000 n
-0000355264 00000 n
-0000655879 00000 n
-0000359608 00000 n
-0000358389 00000 n
-0000355415 00000 n
-0000358900 00000 n
-0000359029 00000 n
-0000359287 00000 n
-0000358545 00000 n
-0000358724 00000 n
-0000359480 00000 n
-0000359544 00000 n
-0000366493 00000 n
-0000362665 00000 n
-0000359760 00000 n
-0000362791 00000 n
-0000362856 00000 n
-0000362921 00000 n
-0000362986 00000 n
-0000363051 00000 n
-0000363116 00000 n
-0000363181 00000 n
-0000363246 00000 n
-0000363311 00000 n
-0000363376 00000 n
-0000363506 00000 n
-0000363571 00000 n
-0000363636 00000 n
-0000363701 00000 n
-0000363766 00000 n
-0000363831 00000 n
-0000363896 00000 n
-0000363961 00000 n
-0000364026 00000 n
-0000364091 00000 n
-0000364156 00000 n
-0000364221 00000 n
-0000364286 00000 n
-0000364351 00000 n
-0000364416 00000 n
-0000364481 00000 n
-0000364546 00000 n
-0000364611 00000 n
-0000364676 00000 n
-0000364741 00000 n
-0000364806 00000 n
-0000364871 00000 n
-0000364936 00000 n
-0000365001 00000 n
-0000365065 00000 n
-0000365130 00000 n
-0000365195 00000 n
-0000365260 00000 n
-0000365325 00000 n
-0000365390 00000 n
-0000365455 00000 n
-0000365520 00000 n
-0000365585 00000 n
-0000365650 00000 n
-0000365715 00000 n
-0000365780 00000 n
-0000365845 00000 n
-0000365910 00000 n
-0000365975 00000 n
-0000366040 00000 n
-0000366105 00000 n
-0000366170 00000 n
-0000366235 00000 n
-0000366300 00000 n
-0000366365 00000 n
-0000366429 00000 n
-0000373139 00000 n
-0000369575 00000 n
-0000366605 00000 n
-0000369701 00000 n
-0000369766 00000 n
-0000369831 00000 n
-0000369896 00000 n
-0000369961 00000 n
-0000370026 00000 n
-0000370091 00000 n
-0000370156 00000 n
-0000370221 00000 n
-0000370286 00000 n
-0000370351 00000 n
-0000370416 00000 n
-0000370480 00000 n
-0000370545 00000 n
-0000370610 00000 n
-0000370675 00000 n
-0000370740 00000 n
-0000370805 00000 n
-0000370870 00000 n
-0000370935 00000 n
-0000371000 00000 n
-0000371065 00000 n
-0000371130 00000 n
-0000371195 00000 n
-0000371259 00000 n
-0000371324 00000 n
-0000371389 00000 n
-0000371454 00000 n
-0000371519 00000 n
-0000371584 00000 n
-0000371649 00000 n
-0000371714 00000 n
-0000371779 00000 n
-0000371844 00000 n
-0000371909 00000 n
-0000371974 00000 n
-0000372039 00000 n
-0000372104 00000 n
-0000372169 00000 n
-0000372234 00000 n
-0000372298 00000 n
-0000372362 00000 n
-0000372426 00000 n
-0000372491 00000 n
-0000372556 00000 n
-0000372621 00000 n
-0000372686 00000 n
-0000372751 00000 n
-0000372816 00000 n
-0000372881 00000 n
-0000372946 00000 n
-0000373011 00000 n
-0000373075 00000 n
-0000379314 00000 n
-0000375876 00000 n
-0000373251 00000 n
-0000376002 00000 n
-0000376067 00000 n
-0000376132 00000 n
-0000376197 00000 n
-0000376262 00000 n
-0000376327 00000 n
-0000376392 00000 n
-0000376457 00000 n
-0000376522 00000 n
-0000376587 00000 n
-0000376652 00000 n
-0000376717 00000 n
-0000376782 00000 n
-0000376847 00000 n
-0000376912 00000 n
-0000376977 00000 n
-0000377042 00000 n
-0000377107 00000 n
-0000377172 00000 n
-0000377237 00000 n
-0000377302 00000 n
-0000377367 00000 n
-0000377432 00000 n
-0000377497 00000 n
-0000377562 00000 n
-0000377627 00000 n
-0000377692 00000 n
-0000377757 00000 n
-0000377822 00000 n
-0000377887 00000 n
-0000377952 00000 n
-0000378017 00000 n
-0000378082 00000 n
-0000378147 00000 n
-0000378211 00000 n
-0000378276 00000 n
-0000378341 00000 n
-0000378406 00000 n
-0000378471 00000 n
-0000378536 00000 n
-0000378601 00000 n
-0000378666 00000 n
-0000378731 00000 n
-0000378796 00000 n
-0000378861 00000 n
-0000378926 00000 n
-0000378991 00000 n
-0000379056 00000 n
-0000379121 00000 n
-0000379186 00000 n
-0000379250 00000 n
-0000383893 00000 n
-0000381629 00000 n
-0000379426 00000 n
+0000190112 00000 n
+0000188026 00000 n
+0000190568 00000 n
+0000190697 00000 n
+0000190268 00000 n
+0000190422 00000 n
+0000190826 00000 n
+0000190955 00000 n
+0000191084 00000 n
+0000192655 00000 n
+0000192464 00000 n
+0000191261 00000 n
+0000192590 00000 n
+0000678192 00000 n
+0000194152 00000 n
+0000193961 00000 n
+0000192754 00000 n
+0000194087 00000 n
+0000197163 00000 n
+0000196843 00000 n
+0000194251 00000 n
+0000196969 00000 n
+0000197098 00000 n
+0000201369 00000 n
+0000201000 00000 n
+0000197301 00000 n
+0000201304 00000 n
+0000201147 00000 n
+0000347257 00000 n
+0000205611 00000 n
+0000205161 00000 n
+0000201481 00000 n
+0000205287 00000 n
+0000205481 00000 n
+0000205546 00000 n
+0000209659 00000 n
+0000209293 00000 n
+0000205723 00000 n
+0000209594 00000 n
+0000209440 00000 n
+0000214817 00000 n
+0000213683 00000 n
+0000209784 00000 n
+0000214752 00000 n
+0000213866 00000 n
+0000214023 00000 n
+0000214208 00000 n
+0000214382 00000 n
+0000214567 00000 n
+0000678317 00000 n
+0000278904 00000 n
+0000219119 00000 n
+0000218928 00000 n
+0000215011 00000 n
+0000219054 00000 n
+0000222906 00000 n
+0000222587 00000 n
+0000219231 00000 n
+0000222713 00000 n
+0000222842 00000 n
+0000226705 00000 n
+0000225892 00000 n
+0000223018 00000 n
+0000226385 00000 n
+0000226048 00000 n
+0000226514 00000 n
+0000226640 00000 n
+0000226218 00000 n
+0000289798 00000 n
+0000230984 00000 n
+0000230293 00000 n
+0000226874 00000 n
+0000230790 00000 n
+0000230449 00000 n
+0000230619 00000 n
+0000230919 00000 n
+0000362368 00000 n
+0000234308 00000 n
+0000233988 00000 n
+0000231166 00000 n
+0000234114 00000 n
+0000234243 00000 n
+0000237344 00000 n
+0000237024 00000 n
+0000234420 00000 n
+0000237150 00000 n
+0000678442 00000 n
+0000241156 00000 n
+0000240965 00000 n
+0000237500 00000 n
+0000241091 00000 n
+0000245301 00000 n
+0000244656 00000 n
+0000241311 00000 n
+0000244978 00000 n
+0000245107 00000 n
+0000245236 00000 n
+0000244803 00000 n
+0000249270 00000 n
+0000248645 00000 n
+0000245470 00000 n
+0000248947 00000 n
+0000249076 00000 n
+0000248792 00000 n
+0000249205 00000 n
+0000252423 00000 n
+0000251975 00000 n
+0000249382 00000 n
+0000252101 00000 n
+0000252230 00000 n
+0000252359 00000 n
+0000256398 00000 n
+0000255734 00000 n
+0000252592 00000 n
+0000256206 00000 n
+0000255890 00000 n
+0000256052 00000 n
+0000260233 00000 n
+0000259593 00000 n
+0000256510 00000 n
+0000259909 00000 n
+0000259740 00000 n
+0000259974 00000 n
+0000260039 00000 n
+0000260168 00000 n
+0000678567 00000 n
+0000264821 00000 n
+0000264275 00000 n
+0000260429 00000 n
+0000264756 00000 n
+0000264431 00000 n
+0000264593 00000 n
+0000498023 00000 n
+0000496025 00000 n
+0000497858 00000 n
+0000343439 00000 n
+0000268897 00000 n
+0000268258 00000 n
+0000264990 00000 n
+0000268574 00000 n
+0000268703 00000 n
+0000268405 00000 n
+0000268832 00000 n
+0000287437 00000 n
+0000271498 00000 n
+0000271307 00000 n
+0000269022 00000 n
+0000271433 00000 n
+0000275250 00000 n
+0000274802 00000 n
+0000271666 00000 n
+0000274928 00000 n
+0000275185 00000 n
+0000278969 00000 n
+0000278391 00000 n
+0000275362 00000 n
+0000278517 00000 n
+0000278646 00000 n
+0000278775 00000 n
+0000283647 00000 n
+0000283113 00000 n
+0000279081 00000 n
+0000283582 00000 n
+0000283269 00000 n
+0000283421 00000 n
+0000678692 00000 n
+0000287631 00000 n
+0000286750 00000 n
+0000283746 00000 n
+0000287051 00000 n
+0000287180 00000 n
+0000287308 00000 n
+0000286897 00000 n
+0000287566 00000 n
+0000289863 00000 n
+0000289543 00000 n
+0000287743 00000 n
+0000289669 00000 n
+0000291304 00000 n
+0000291113 00000 n
+0000289975 00000 n
+0000291239 00000 n
+0000292672 00000 n
+0000292481 00000 n
+0000291403 00000 n
+0000292607 00000 n
+0000296316 00000 n
+0000295738 00000 n
+0000292771 00000 n
+0000295864 00000 n
+0000295993 00000 n
+0000296122 00000 n
+0000296187 00000 n
+0000296252 00000 n
+0000301355 00000 n
+0000299693 00000 n
+0000296428 00000 n
+0000301033 00000 n
+0000301162 00000 n
+0000301290 00000 n
+0000299894 00000 n
+0000300056 00000 n
+0000300218 00000 n
+0000300379 00000 n
+0000300541 00000 n
+0000300703 00000 n
+0000300873 00000 n
+0000678817 00000 n
+0000306445 00000 n
+0000304871 00000 n
+0000301467 00000 n
+0000306380 00000 n
+0000305081 00000 n
+0000305244 00000 n
+0000305407 00000 n
+0000305570 00000 n
+0000305733 00000 n
+0000305896 00000 n
+0000306059 00000 n
+0000306219 00000 n
+0000312614 00000 n
+0000309381 00000 n
+0000306570 00000 n
+0000312549 00000 n
+0000309681 00000 n
+0000309843 00000 n
+0000310005 00000 n
+0000310167 00000 n
+0000310329 00000 n
+0000310492 00000 n
+0000310646 00000 n
+0000310808 00000 n
+0000310962 00000 n
+0000311124 00000 n
+0000311286 00000 n
+0000311446 00000 n
+0000311606 00000 n
+0000311768 00000 n
+0000311928 00000 n
+0000312086 00000 n
+0000312238 00000 n
+0000312400 00000 n
+0000317047 00000 n
+0000316250 00000 n
+0000312739 00000 n
+0000316723 00000 n
+0000316406 00000 n
+0000316569 00000 n
+0000316917 00000 n
+0000316982 00000 n
+0000321396 00000 n
+0000320200 00000 n
+0000317186 00000 n
+0000320686 00000 n
+0000320815 00000 n
+0000321071 00000 n
+0000320356 00000 n
+0000320525 00000 n
+0000321136 00000 n
+0000321201 00000 n
+0000321266 00000 n
+0000321331 00000 n
+0000324694 00000 n
+0000324503 00000 n
+0000321535 00000 n
+0000324629 00000 n
+0000328655 00000 n
+0000328075 00000 n
+0000324780 00000 n
+0000328201 00000 n
+0000328266 00000 n
+0000328331 00000 n
+0000328460 00000 n
+0000328525 00000 n
+0000328590 00000 n
+0000678942 00000 n
+0000332590 00000 n
+0000331752 00000 n
+0000328780 00000 n
+0000331878 00000 n
+0000331943 00000 n
+0000332008 00000 n
+0000332137 00000 n
+0000332202 00000 n
+0000332266 00000 n
+0000332395 00000 n
+0000332460 00000 n
+0000332525 00000 n
+0000336099 00000 n
+0000335394 00000 n
+0000332715 00000 n
+0000335520 00000 n
+0000335649 00000 n
+0000335713 00000 n
+0000335778 00000 n
+0000335907 00000 n
+0000336034 00000 n
+0000339304 00000 n
+0000338597 00000 n
+0000336309 00000 n
+0000338723 00000 n
+0000338852 00000 n
+0000338981 00000 n
+0000339110 00000 n
+0000339175 00000 n
+0000339240 00000 n
+0000343761 00000 n
+0000343184 00000 n
+0000339487 00000 n
+0000343310 00000 n
+0000343568 00000 n
+0000343633 00000 n
+0000343697 00000 n
+0000347451 00000 n
+0000346822 00000 n
+0000343886 00000 n
+0000347129 00000 n
+0000346969 00000 n
+0000347386 00000 n
+0000350903 00000 n
+0000350453 00000 n
+0000347563 00000 n
+0000350579 00000 n
+0000350708 00000 n
+0000350773 00000 n
+0000350838 00000 n
+0000679067 00000 n
+0000353956 00000 n
+0000353248 00000 n
+0000351015 00000 n
+0000353374 00000 n
+0000353503 00000 n
+0000353568 00000 n
+0000353633 00000 n
+0000353761 00000 n
+0000353826 00000 n
+0000353891 00000 n
+0000355498 00000 n
+0000355178 00000 n
+0000354068 00000 n
+0000355304 00000 n
+0000495744 00000 n
+0000488460 00000 n
+0000495564 00000 n
+0000355433 00000 n
+0000355965 00000 n
+0000355774 00000 n
+0000355624 00000 n
+0000355900 00000 n
+0000357860 00000 n
+0000357412 00000 n
+0000356007 00000 n
+0000357538 00000 n
+0000357667 00000 n
+0000357796 00000 n
+0000362433 00000 n
+0000361490 00000 n
+0000357972 00000 n
+0000361853 00000 n
+0000488139 00000 n
+0000478926 00000 n
+0000487953 00000 n
+0000361637 00000 n
+0000361982 00000 n
+0000362110 00000 n
+0000362239 00000 n
+0000363475 00000 n
+0000363284 00000 n
+0000362670 00000 n
+0000363410 00000 n
+0000679192 00000 n
+0000363902 00000 n
+0000363711 00000 n
+0000363561 00000 n
+0000363837 00000 n
+0000367215 00000 n
+0000365989 00000 n
+0000363944 00000 n
+0000366506 00000 n
+0000366635 00000 n
+0000366764 00000 n
+0000366893 00000 n
+0000367022 00000 n
+0000367151 00000 n
+0000366145 00000 n
+0000366317 00000 n
+0000367669 00000 n
+0000367478 00000 n
+0000367328 00000 n
+0000367604 00000 n
+0000370913 00000 n
+0000370335 00000 n
+0000367711 00000 n
+0000370461 00000 n
+0000370590 00000 n
+0000370719 00000 n
+0000370848 00000 n
+0000375192 00000 n
+0000373973 00000 n
+0000370999 00000 n
+0000374484 00000 n
+0000374613 00000 n
+0000374871 00000 n
+0000374129 00000 n
+0000374308 00000 n
+0000375064 00000 n
+0000375128 00000 n
+0000382078 00000 n
+0000378250 00000 n
+0000375345 00000 n
+0000378376 00000 n
+0000378441 00000 n
+0000378506 00000 n
+0000378571 00000 n
+0000378636 00000 n
+0000378701 00000 n
+0000378766 00000 n
+0000378831 00000 n
+0000378896 00000 n
+0000378961 00000 n
+0000379091 00000 n
+0000379156 00000 n
+0000379221 00000 n
+0000379286 00000 n
+0000379351 00000 n
+0000379416 00000 n
+0000379481 00000 n
+0000379546 00000 n
+0000379611 00000 n
+0000379676 00000 n
+0000379741 00000 n
+0000379806 00000 n
+0000379871 00000 n
+0000379936 00000 n
+0000380001 00000 n
+0000380066 00000 n
+0000380131 00000 n
+0000380196 00000 n
+0000380261 00000 n
+0000380326 00000 n
+0000380391 00000 n
+0000380456 00000 n
+0000380521 00000 n
+0000380586 00000 n
+0000380650 00000 n
+0000380715 00000 n
+0000380780 00000 n
+0000380845 00000 n
+0000380910 00000 n
+0000380975 00000 n
+0000381040 00000 n
+0000381105 00000 n
+0000381170 00000 n
+0000381235 00000 n
+0000381300 00000 n
+0000381365 00000 n
+0000381430 00000 n
+0000381495 00000 n
+0000381560 00000 n
+0000381625 00000 n
+0000381690 00000 n
0000381755 00000 n
0000381820 00000 n
0000381885 00000 n
0000381950 00000 n
-0000382015 00000 n
-0000382080 00000 n
-0000382145 00000 n
-0000382210 00000 n
-0000382275 00000 n
-0000382340 00000 n
-0000382405 00000 n
-0000382470 00000 n
-0000382535 00000 n
-0000382600 00000 n
-0000382662 00000 n
-0000382726 00000 n
-0000382791 00000 n
-0000382855 00000 n
-0000382920 00000 n
-0000382985 00000 n
-0000383050 00000 n
-0000383115 00000 n
-0000383180 00000 n
-0000383245 00000 n
-0000383310 00000 n
-0000383439 00000 n
-0000383568 00000 n
-0000383633 00000 n
-0000383698 00000 n
-0000383763 00000 n
-0000383828 00000 n
-0000386660 00000 n
-0000386016 00000 n
-0000384018 00000 n
-0000386142 00000 n
-0000386271 00000 n
-0000386400 00000 n
-0000386465 00000 n
-0000386530 00000 n
-0000386595 00000 n
-0000656004 00000 n
-0000391145 00000 n
-0000390824 00000 n
-0000386772 00000 n
-0000390950 00000 n
-0000391015 00000 n
-0000391080 00000 n
-0000394395 00000 n
-0000394139 00000 n
-0000391297 00000 n
-0000394265 00000 n
-0000394330 00000 n
-0000397643 00000 n
-0000397452 00000 n
-0000394533 00000 n
-0000397578 00000 n
-0000401422 00000 n
-0000401166 00000 n
-0000397768 00000 n
-0000401292 00000 n
-0000401357 00000 n
-0000404596 00000 n
-0000403821 00000 n
-0000401560 00000 n
-0000403947 00000 n
-0000404012 00000 n
-0000404077 00000 n
-0000404142 00000 n
-0000404207 00000 n
-0000404336 00000 n
-0000404401 00000 n
-0000404466 00000 n
-0000404531 00000 n
-0000409068 00000 n
-0000408877 00000 n
-0000404734 00000 n
-0000409003 00000 n
-0000656129 00000 n
-0000412197 00000 n
-0000411424 00000 n
-0000409206 00000 n
-0000411550 00000 n
-0000411615 00000 n
-0000411680 00000 n
-0000411744 00000 n
-0000411873 00000 n
-0000411938 00000 n
-0000412002 00000 n
-0000412067 00000 n
-0000412132 00000 n
-0000415613 00000 n
-0000415357 00000 n
-0000412335 00000 n
-0000415483 00000 n
-0000415548 00000 n
-0000418473 00000 n
-0000417763 00000 n
-0000415751 00000 n
-0000417889 00000 n
-0000417954 00000 n
-0000418019 00000 n
-0000418084 00000 n
-0000418213 00000 n
-0000418278 00000 n
-0000418343 00000 n
-0000418408 00000 n
-0000422152 00000 n
-0000421896 00000 n
-0000418624 00000 n
-0000422022 00000 n
-0000422087 00000 n
-0000425589 00000 n
-0000425333 00000 n
-0000422277 00000 n
-0000425459 00000 n
-0000425524 00000 n
-0000428038 00000 n
+0000382014 00000 n
+0000679317 00000 n
+0000388724 00000 n
+0000385160 00000 n
+0000382190 00000 n
+0000385286 00000 n
+0000385351 00000 n
+0000385416 00000 n
+0000385481 00000 n
+0000385546 00000 n
+0000385611 00000 n
+0000385676 00000 n
+0000385741 00000 n
+0000385806 00000 n
+0000385871 00000 n
+0000385936 00000 n
+0000386001 00000 n
+0000386065 00000 n
+0000386130 00000 n
+0000386195 00000 n
+0000386260 00000 n
+0000386325 00000 n
+0000386390 00000 n
+0000386455 00000 n
+0000386520 00000 n
+0000386585 00000 n
+0000386650 00000 n
+0000386715 00000 n
+0000386780 00000 n
+0000386844 00000 n
+0000386909 00000 n
+0000386974 00000 n
+0000387039 00000 n
+0000387104 00000 n
+0000387169 00000 n
+0000387234 00000 n
+0000387299 00000 n
+0000387364 00000 n
+0000387429 00000 n
+0000387494 00000 n
+0000387559 00000 n
+0000387624 00000 n
+0000387689 00000 n
+0000387754 00000 n
+0000387819 00000 n
+0000387883 00000 n
+0000387947 00000 n
+0000388011 00000 n
+0000388076 00000 n
+0000388141 00000 n
+0000388206 00000 n
+0000388271 00000 n
+0000388336 00000 n
+0000388401 00000 n
+0000388466 00000 n
+0000388531 00000 n
+0000388596 00000 n
+0000388660 00000 n
+0000394900 00000 n
+0000391462 00000 n
+0000388836 00000 n
+0000391588 00000 n
+0000391653 00000 n
+0000391718 00000 n
+0000391783 00000 n
+0000391848 00000 n
+0000391913 00000 n
+0000391978 00000 n
+0000392043 00000 n
+0000392108 00000 n
+0000392173 00000 n
+0000392238 00000 n
+0000392303 00000 n
+0000392368 00000 n
+0000392433 00000 n
+0000392498 00000 n
+0000392563 00000 n
+0000392628 00000 n
+0000392693 00000 n
+0000392758 00000 n
+0000392823 00000 n
+0000392888 00000 n
+0000392953 00000 n
+0000393018 00000 n
+0000393083 00000 n
+0000393148 00000 n
+0000393213 00000 n
+0000393278 00000 n
+0000393343 00000 n
+0000393408 00000 n
+0000393473 00000 n
+0000393538 00000 n
+0000393603 00000 n
+0000393668 00000 n
+0000393733 00000 n
+0000393797 00000 n
+0000393862 00000 n
+0000393927 00000 n
+0000393992 00000 n
+0000394057 00000 n
+0000394122 00000 n
+0000394187 00000 n
+0000394252 00000 n
+0000394317 00000 n
+0000394382 00000 n
+0000394447 00000 n
+0000394512 00000 n
+0000394577 00000 n
+0000394642 00000 n
+0000394707 00000 n
+0000394772 00000 n
+0000394836 00000 n
+0000399478 00000 n
+0000397214 00000 n
+0000395012 00000 n
+0000397340 00000 n
+0000397405 00000 n
+0000397470 00000 n
+0000397535 00000 n
+0000397600 00000 n
+0000397665 00000 n
+0000397730 00000 n
+0000397795 00000 n
+0000397860 00000 n
+0000397925 00000 n
+0000397990 00000 n
+0000398055 00000 n
+0000398120 00000 n
+0000398185 00000 n
+0000398247 00000 n
+0000398311 00000 n
+0000398376 00000 n
+0000398440 00000 n
+0000398505 00000 n
+0000398570 00000 n
+0000398635 00000 n
+0000398700 00000 n
+0000398765 00000 n
+0000398830 00000 n
+0000398895 00000 n
+0000399024 00000 n
+0000399153 00000 n
+0000399218 00000 n
+0000399283 00000 n
+0000399348 00000 n
+0000399413 00000 n
+0000402244 00000 n
+0000401600 00000 n
+0000399603 00000 n
+0000401726 00000 n
+0000401855 00000 n
+0000401984 00000 n
+0000402049 00000 n
+0000402114 00000 n
+0000402179 00000 n
+0000406729 00000 n
+0000406408 00000 n
+0000402357 00000 n
+0000406534 00000 n
+0000406599 00000 n
+0000406664 00000 n
+0000409980 00000 n
+0000409724 00000 n
+0000406882 00000 n
+0000409850 00000 n
+0000409915 00000 n
+0000679442 00000 n
+0000413229 00000 n
+0000413038 00000 n
+0000410119 00000 n
+0000413164 00000 n
+0000417009 00000 n
+0000416753 00000 n
+0000413355 00000 n
+0000416879 00000 n
+0000416944 00000 n
+0000420184 00000 n
+0000419409 00000 n
+0000417148 00000 n
+0000419535 00000 n
+0000419600 00000 n
+0000419665 00000 n
+0000419730 00000 n
+0000419795 00000 n
+0000419924 00000 n
+0000419989 00000 n
+0000420054 00000 n
+0000420119 00000 n
+0000424656 00000 n
+0000424465 00000 n
+0000420323 00000 n
+0000424591 00000 n
+0000427783 00000 n
+0000427010 00000 n
+0000424795 00000 n
+0000427136 00000 n
+0000427201 00000 n
+0000427266 00000 n
0000427330 00000 n
-0000425727 00000 n
-0000427456 00000 n
-0000427521 00000 n
-0000427586 00000 n
-0000427713 00000 n
-0000427778 00000 n
-0000427843 00000 n
-0000427908 00000 n
-0000427973 00000 n
-0000656254 00000 n
-0000430831 00000 n
-0000430122 00000 n
-0000428189 00000 n
-0000430248 00000 n
-0000430313 00000 n
-0000430378 00000 n
-0000430442 00000 n
-0000430571 00000 n
-0000430636 00000 n
-0000430701 00000 n
-0000430766 00000 n
-0000434008 00000 n
-0000433752 00000 n
-0000430969 00000 n
-0000433878 00000 n
-0000433943 00000 n
-0000437165 00000 n
-0000436525 00000 n
-0000434133 00000 n
-0000436651 00000 n
-0000436716 00000 n
-0000436781 00000 n
-0000436845 00000 n
-0000436974 00000 n
-0000437037 00000 n
-0000437101 00000 n
-0000440466 00000 n
-0000440145 00000 n
-0000437316 00000 n
-0000440271 00000 n
-0000440336 00000 n
-0000440401 00000 n
-0000443487 00000 n
-0000443103 00000 n
-0000440645 00000 n
-0000443229 00000 n
-0000443294 00000 n
-0000443359 00000 n
-0000443424 00000 n
-0000446814 00000 n
-0000446105 00000 n
-0000443706 00000 n
-0000446231 00000 n
-0000446296 00000 n
-0000446361 00000 n
-0000446490 00000 n
-0000446555 00000 n
-0000446619 00000 n
-0000446684 00000 n
-0000446749 00000 n
-0000656379 00000 n
-0000449833 00000 n
-0000449190 00000 n
-0000446978 00000 n
-0000449316 00000 n
-0000449381 00000 n
-0000449446 00000 n
-0000449511 00000 n
-0000449639 00000 n
-0000449704 00000 n
-0000449769 00000 n
-0000453300 00000 n
-0000452979 00000 n
-0000449997 00000 n
-0000453105 00000 n
-0000453170 00000 n
-0000453235 00000 n
-0000455872 00000 n
-0000455294 00000 n
-0000453425 00000 n
-0000455420 00000 n
-0000455485 00000 n
-0000455550 00000 n
-0000455615 00000 n
-0000455744 00000 n
-0000455808 00000 n
-0000459672 00000 n
-0000459287 00000 n
-0000456010 00000 n
-0000459413 00000 n
-0000459478 00000 n
-0000459543 00000 n
-0000459608 00000 n
-0000461236 00000 n
-0000460852 00000 n
-0000459810 00000 n
-0000460978 00000 n
-0000461043 00000 n
-0000461106 00000 n
-0000461171 00000 n
-0000461420 00000 n
-0000472764 00000 n
-0000475089 00000 n
-0000475058 00000 n
-0000484577 00000 n
-0000494633 00000 n
-0000504871 00000 n
-0000517073 00000 n
-0000535422 00000 n
-0000557511 00000 n
-0000578521 00000 n
-0000596339 00000 n
-0000599169 00000 n
-0000598939 00000 n
-0000626427 00000 n
-0000653536 00000 n
-0000656504 00000 n
-0000656627 00000 n
-0000656753 00000 n
-0000656879 00000 n
-0000656969 00000 n
-0000657061 00000 n
-0000672352 00000 n
-0000689662 00000 n
-0000689703 00000 n
-0000689743 00000 n
-0000689877 00000 n
+0000427459 00000 n
+0000427524 00000 n
+0000427588 00000 n
+0000427653 00000 n
+0000427718 00000 n
+0000431200 00000 n
+0000430944 00000 n
+0000427923 00000 n
+0000431070 00000 n
+0000431135 00000 n
+0000679567 00000 n
+0000434062 00000 n
+0000433352 00000 n
+0000431339 00000 n
+0000433478 00000 n
+0000433543 00000 n
+0000433608 00000 n
+0000433673 00000 n
+0000433802 00000 n
+0000433867 00000 n
+0000433932 00000 n
+0000433997 00000 n
+0000437742 00000 n
+0000437486 00000 n
+0000434214 00000 n
+0000437612 00000 n
+0000437677 00000 n
+0000441181 00000 n
+0000440925 00000 n
+0000437868 00000 n
+0000441051 00000 n
+0000441116 00000 n
+0000443631 00000 n
+0000442923 00000 n
+0000441320 00000 n
+0000443049 00000 n
+0000443114 00000 n
+0000443179 00000 n
+0000443306 00000 n
+0000443371 00000 n
+0000443436 00000 n
+0000443501 00000 n
+0000443566 00000 n
+0000446424 00000 n
+0000445715 00000 n
+0000443784 00000 n
+0000445841 00000 n
+0000445906 00000 n
+0000445971 00000 n
+0000446035 00000 n
+0000446164 00000 n
+0000446229 00000 n
+0000446294 00000 n
+0000446359 00000 n
+0000449602 00000 n
+0000449346 00000 n
+0000446563 00000 n
+0000449472 00000 n
+0000449537 00000 n
+0000679692 00000 n
+0000452759 00000 n
+0000452119 00000 n
+0000449728 00000 n
+0000452245 00000 n
+0000452310 00000 n
+0000452375 00000 n
+0000452439 00000 n
+0000452568 00000 n
+0000452631 00000 n
+0000452695 00000 n
+0000456062 00000 n
+0000455741 00000 n
+0000452912 00000 n
+0000455867 00000 n
+0000455932 00000 n
+0000455997 00000 n
+0000459089 00000 n
+0000458705 00000 n
+0000456245 00000 n
+0000458831 00000 n
+0000458896 00000 n
+0000458961 00000 n
+0000459026 00000 n
+0000462421 00000 n
+0000461712 00000 n
+0000459313 00000 n
+0000461838 00000 n
+0000461903 00000 n
+0000461968 00000 n
+0000462097 00000 n
+0000462162 00000 n
+0000462226 00000 n
+0000462291 00000 n
+0000462356 00000 n
+0000465446 00000 n
+0000464803 00000 n
+0000462587 00000 n
+0000464929 00000 n
+0000464994 00000 n
+0000465059 00000 n
+0000465124 00000 n
+0000465252 00000 n
+0000465317 00000 n
+0000465382 00000 n
+0000468914 00000 n
+0000468593 00000 n
+0000465612 00000 n
+0000468719 00000 n
+0000468784 00000 n
+0000468849 00000 n
+0000679817 00000 n
+0000471486 00000 n
+0000470908 00000 n
+0000469040 00000 n
+0000471034 00000 n
+0000471099 00000 n
+0000471164 00000 n
+0000471229 00000 n
+0000471358 00000 n
+0000471422 00000 n
+0000475286 00000 n
+0000474901 00000 n
+0000471624 00000 n
+0000475027 00000 n
+0000475092 00000 n
+0000475157 00000 n
+0000475222 00000 n
+0000476852 00000 n
+0000476468 00000 n
+0000475426 00000 n
+0000476594 00000 n
+0000476659 00000 n
+0000476722 00000 n
+0000476787 00000 n
+0000477037 00000 n
+0000488381 00000 n
+0000495970 00000 n
+0000498270 00000 n
+0000498239 00000 n
+0000507763 00000 n
+0000517876 00000 n
+0000528121 00000 n
+0000540330 00000 n
+0000558679 00000 n
+0000579558 00000 n
+0000601701 00000 n
+0000619596 00000 n
+0000622427 00000 n
+0000622197 00000 n
+0000649734 00000 n
+0000676845 00000 n
+0000679924 00000 n
+0000680047 00000 n
+0000680173 00000 n
+0000680299 00000 n
+0000680398 00000 n
+0000680490 00000 n
+0000696547 00000 n
+0000714481 00000 n
+0000714522 00000 n
+0000714562 00000 n
+0000714696 00000 n
trailer
<<
-/Size 1959
-/Root 1957 0 R
-/Info 1958 0 R
-/ID [<37F82A89388E4C9FB25FD9CE610A28FF> <37F82A89388E4C9FB25FD9CE610A28FF>]
+/Size 2035
+/Root 2033 0 R
+/Info 2034 0 R
+/ID [<12041F55A50724DE57B7F83DE999224F> <12041F55A50724DE57B7F83DE999224F>]
>>
startxref
-690141
+714954
%%EOF
diff --git a/doc/arm/man.dig.html b/doc/arm/man.dig.html
index 9041168d..2a482f70 100644
--- a/doc/arm/man.dig.html
+++ b/doc/arm/man.dig.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.dig.html,v 1.60.18.5 2008/01/27 06:10:15 marka Exp $ -->
+<!-- $Id: man.dig.html,v 1.60.18.10 2008/05/06 01:41:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -52,7 +52,7 @@
<div class="cmdsynopsis"><p><code class="command">dig</code> [global-queryopt...] [query...]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2563901"></a><h2>DESCRIPTION</h2>
+<a name="id2569806"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dig</strong></span>
(domain information groper) is a flexible tool
for interrogating DNS name servers. It performs DNS lookups and
@@ -98,7 +98,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2563990"></a><h2>SIMPLE USAGE</h2>
+<a name="id2569895"></a><h2>SIMPLE USAGE</h2>
<p>
A typical invocation of <span><strong class="command">dig</strong></span> looks like:
</p>
@@ -144,7 +144,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2569767"></a><h2>OPTIONS</h2>
+<a name="id2600589"></a><h2>OPTIONS</h2>
<p>
The <code class="option">-b</code> option sets the source IP address of the query
to <em class="parameter"><code>address</code></em>. This must be a valid
@@ -244,7 +244,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2624645"></a><h2>QUERY OPTIONS</h2>
+<a name="id2627683"></a><h2>QUERY OPTIONS</h2>
<p><span><strong class="command">dig</strong></span>
provides a number of query options which affect
the way in which lookups are made and the results displayed. Some of
@@ -563,7 +563,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2625563"></a><h2>MULTIPLE QUERIES</h2>
+<a name="id2628669"></a><h2>MULTIPLE QUERIES</h2>
<p>
The BIND 9 implementation of <span><strong class="command">dig </strong></span>
supports
@@ -609,7 +609,7 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2625785"></a><h2>IDN SUPPORT</h2>
+<a name="id2628755"></a><h2>IDN SUPPORT</h2>
<p>
If <span><strong class="command">dig</strong></span> has been built with IDN (internationalized
domain name) support, it can accept and display non-ASCII domain names.
@@ -623,14 +623,14 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2625882"></a><h2>FILES</h2>
+<a name="id2628784"></a><h2>FILES</h2>
<p><code class="filename">/etc/resolv.conf</code>
</p>
<p><code class="filename">${HOME}/.digrc</code>
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2625904"></a><h2>SEE ALSO</h2>
+<a name="id2628805"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">host</span>(1)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
@@ -638,7 +638,7 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2625941"></a><h2>BUGS</h2>
+<a name="id2628842"></a><h2>BUGS</h2>
<p>
There are probably too many query options.
</p>
diff --git a/doc/arm/man.dnssec-keygen.html b/doc/arm/man.dnssec-keygen.html
index e56ec780..5d93e206 100644
--- a/doc/arm/man.dnssec-keygen.html
+++ b/doc/arm/man.dnssec-keygen.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.dnssec-keygen.html,v 1.60.18.5 2008/01/27 06:10:15 marka Exp $ -->
+<!-- $Id: man.dnssec-keygen.html,v 1.60.18.11 2008/05/06 01:41:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">dnssec-keygen</code> {-a <em class="replaceable"><code>algorithm</code></em>} {-b <em class="replaceable"><code>keysize</code></em>} {-n <em class="replaceable"><code>nametype</code></em>} [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-e</code>] [<code class="option">-f <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-g <em class="replaceable"><code>generator</code></em></code>] [<code class="option">-h</code>] [<code class="option">-k</code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-s <em class="replaceable"><code>strength</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] {name}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2598525"></a><h2>DESCRIPTION</h2>
+<a name="id2601703"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-keygen</strong></span>
generates keys for DNSSEC (Secure DNS), as defined in RFC 2535
and RFC 4034. It can also generate keys for use with
@@ -58,7 +58,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2598539"></a><h2>OPTIONS</h2>
+<a name="id2601717"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
<dd>
@@ -166,7 +166,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2599088"></a><h2>GENERATED KEYS</h2>
+<a name="id2602538"></a><h2>GENERATED KEYS</h2>
<p>
When <span><strong class="command">dnssec-keygen</strong></span> completes
successfully,
@@ -212,7 +212,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2600697"></a><h2>EXAMPLE</h2>
+<a name="id2602646"></a><h2>EXAMPLE</h2>
<p>
To generate a 768-bit DSA key for the domain
<strong class="userinput"><code>example.com</code></strong>, the following command would be
@@ -233,7 +233,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2600754"></a><h2>SEE ALSO</h2>
+<a name="id2602702"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 2535</em>,
@@ -242,7 +242,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2601058"></a><h2>AUTHOR</h2>
+<a name="id2602733"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.dnssec-signzone.html b/doc/arm/man.dnssec-signzone.html
index cbeda9e1..13d14c7e 100644
--- a/doc/arm/man.dnssec-signzone.html
+++ b/doc/arm/man.dnssec-signzone.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.dnssec-signzone.html,v 1.58.18.5 2008/01/27 06:10:15 marka Exp $ -->
+<!-- $Id: man.dnssec-signzone.html,v 1.58.18.12 2008/05/06 01:41:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">dnssec-signzone</code> [<code class="option">-a</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-d <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-e <em class="replaceable"><code>end-time</code></em></code>] [<code class="option">-f <em class="replaceable"><code>output-file</code></em></code>] [<code class="option">-g</code>] [<code class="option">-h</code>] [<code class="option">-k <em class="replaceable"><code>key</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-I <em class="replaceable"><code>input-format</code></em></code>] [<code class="option">-j <em class="replaceable"><code>jitter</code></em></code>] [<code class="option">-N <em class="replaceable"><code>soa-serial-format</code></em></code>] [<code class="option">-o <em class="replaceable"><code>origin</code></em></code>] [<code class="option">-O <em class="replaceable"><code>output-format</code></em></code>] [<code class="option">-p</code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-s <em class="replaceable"><code>start-time</code></em></code>] [<code class="option">-t</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-z</code>] {zonefile} [key...]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2599518"></a><h2>DESCRIPTION</h2>
+<a name="id2603174"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-signzone</strong></span>
signs a zone. It generates
NSEC and RRSIG records and produces a signed version of the
@@ -61,7 +61,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2599538"></a><h2>OPTIONS</h2>
+<a name="id2603193"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a</span></dt>
<dd><p>
@@ -259,7 +259,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2654427"></a><h2>EXAMPLE</h2>
+<a name="id2657332"></a><h2>EXAMPLE</h2>
<p>
The following command signs the <strong class="userinput"><code>example.com</code></strong>
zone with the DSA key generated by <span><strong class="command">dnssec-keygen</strong></span>
@@ -288,14 +288,14 @@ db.example.com.signed
%</pre>
</div>
<div class="refsect1" lang="en">
-<a name="id2654568"></a><h2>SEE ALSO</h2>
+<a name="id2657404"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 2535</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2654593"></a><h2>AUTHOR</h2>
+<a name="id2657497"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.host.html b/doc/arm/man.host.html
index 3dfaeb72..cfb95fb3 100644
--- a/doc/arm/man.host.html
+++ b/doc/arm/man.host.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.host.html,v 1.58.18.4 2008/01/27 06:10:15 marka Exp $ -->
+<!-- $Id: man.host.html,v 1.58.18.11 2008/05/06 01:41:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">host</code> [<code class="option">-aCdlnrsTwv</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-N <em class="replaceable"><code>ndots</code></em></code>] [<code class="option">-R <em class="replaceable"><code>number</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-W <em class="replaceable"><code>wait</code></em></code>] [<code class="option">-m <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-4</code>] [<code class="option">-6</code>] {name} [server]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2597764"></a><h2>DESCRIPTION</h2>
+<a name="id2600876"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">host</strong></span>
is a simple utility for performing DNS lookups.
It is normally used to convert names to IP addresses and vice versa.
@@ -166,7 +166,7 @@
NS, SOA, SIG, KEY, AXFR, etc. When no query type is specified,
<span><strong class="command">host</strong></span> automatically selects an appropriate
query
- type. By default it looks for A records, but if the
+ type. By default it looks for A, AAAA, and MX records, but if the
<code class="option">-C</code> option was given, queries will be made for SOA
records, and if <em class="parameter"><code>name</code></em> is a
dotted-decimal IPv4
@@ -202,7 +202,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2598141"></a><h2>IDN SUPPORT</h2>
+<a name="id2601868"></a><h2>IDN SUPPORT</h2>
<p>
If <span><strong class="command">host</strong></span> has been built with IDN (internationalized
domain name) support, it can accept and display non-ASCII domain names.
@@ -216,12 +216,12 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2598238"></a><h2>FILES</h2>
+<a name="id2601897"></a><h2>FILES</h2>
<p><code class="filename">/etc/resolv.conf</code>
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2598252"></a><h2>SEE ALSO</h2>
+<a name="id2601911"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dig</span>(1)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>.
</p>
diff --git a/doc/arm/man.named-checkconf.html b/doc/arm/man.named-checkconf.html
index 9beb3b41..f003c9fc 100644
--- a/doc/arm/man.named-checkconf.html
+++ b/doc/arm/man.named-checkconf.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.named-checkconf.html,v 1.57.18.5 2008/01/27 06:10:15 marka Exp $ -->
+<!-- $Id: man.named-checkconf.html,v 1.57.18.11 2008/05/06 01:41:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,14 +50,14 @@
<div class="cmdsynopsis"><p><code class="command">named-checkconf</code> [<code class="option">-h</code>] [<code class="option">-v</code>] [<code class="option">-j</code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] {filename} [<code class="option">-z</code>]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2600057"></a><h2>DESCRIPTION</h2>
+<a name="id2604941"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">named-checkconf</strong></span>
checks the syntax, but not the semantics, of a named
configuration file.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2600071"></a><h2>OPTIONS</h2>
+<a name="id2604955"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-h</span></dt>
<dd><p>
@@ -92,21 +92,21 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2600187"></a><h2>RETURN VALUES</h2>
+<a name="id2605072"></a><h2>RETURN VALUES</h2>
<p><span><strong class="command">named-checkconf</strong></span>
returns an exit status of 1 if
errors were detected and 0 otherwise.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2600201"></a><h2>SEE ALSO</h2>
+<a name="id2605085"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">named-checkzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2600299"></a><h2>AUTHOR</h2>
+<a name="id2605115"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.named-checkzone.html b/doc/arm/man.named-checkzone.html
index bdbc2d91..0fcdafce 100644
--- a/doc/arm/man.named-checkzone.html
+++ b/doc/arm/man.named-checkzone.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.named-checkzone.html,v 1.63.18.5 2008/01/27 06:10:15 marka Exp $ -->
+<!-- $Id: man.named-checkzone.html,v 1.63.18.12 2008/05/06 01:41:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -51,7 +51,7 @@
<div class="cmdsynopsis"><p><code class="command">named-compilezone</code> [<code class="option">-d</code>] [<code class="option">-j</code>] [<code class="option">-q</code>] [<code class="option">-v</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-C <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-f <em class="replaceable"><code>format</code></em></code>] [<code class="option">-F <em class="replaceable"><code>format</code></em></code>] [<code class="option">-i <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-k <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-m <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-n <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-o <em class="replaceable"><code>filename</code></em></code>] [<code class="option">-s <em class="replaceable"><code>style</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-w <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-W <em class="replaceable"><code>mode</code></em></code>] {zonename} {filename}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2602268"></a><h2>DESCRIPTION</h2>
+<a name="id2606675"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">named-checkzone</strong></span>
checks the syntax and integrity of a zone file. It performs the
same checks as <span><strong class="command">named</strong></span> does when loading a
@@ -71,7 +71,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2602318"></a><h2>OPTIONS</h2>
+<a name="id2606725"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-d</span></dt>
<dd><p>
@@ -257,14 +257,14 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2655349"></a><h2>RETURN VALUES</h2>
+<a name="id2658253"></a><h2>RETURN VALUES</h2>
<p><span><strong class="command">named-checkzone</strong></span>
returns an exit status of 1 if
errors were detected and 0 otherwise.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2655363"></a><h2>SEE ALSO</h2>
+<a name="id2658267"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">named-checkconf</span>(8)</span>,
<em class="citetitle">RFC 1035</em>,
@@ -272,7 +272,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2655396"></a><h2>AUTHOR</h2>
+<a name="id2658300"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.named.html b/doc/arm/man.named.html
index b33b06ac..fa157fab 100644
--- a/doc/arm/man.named.html
+++ b/doc/arm/man.named.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.named.html,v 1.62.18.5 2008/01/27 06:10:15 marka Exp $ -->
+<!-- $Id: man.named.html,v 1.62.18.12 2008/05/06 01:41:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">named</code> [<code class="option">-4</code>] [<code class="option">-6</code>] [<code class="option">-c <em class="replaceable"><code>config-file</code></em></code>] [<code class="option">-d <em class="replaceable"><code>debug-level</code></em></code>] [<code class="option">-f</code>] [<code class="option">-g</code>] [<code class="option">-m <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-n <em class="replaceable"><code>#cpus</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-s</code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-u <em class="replaceable"><code>user</code></em></code>] [<code class="option">-v</code>] [<code class="option">-x <em class="replaceable"><code>cache-file</code></em></code>]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2601594"></a><h2>DESCRIPTION</h2>
+<a name="id2606888"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">named</strong></span>
is a Domain Name System (DNS) server,
part of the BIND 9 distribution from ISC. For more
@@ -65,7 +65,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2601625"></a><h2>OPTIONS</h2>
+<a name="id2606919"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-4</span></dt>
<dd><p>
@@ -209,7 +209,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2603469"></a><h2>SIGNALS</h2>
+<a name="id2607398"></a><h2>SIGNALS</h2>
<p>
In routine operation, signals should not be used to control
the nameserver; <span><strong class="command">rndc</strong></span> should be used
@@ -230,7 +230,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2605294"></a><h2>CONFIGURATION</h2>
+<a name="id2608745"></a><h2>CONFIGURATION</h2>
<p>
The <span><strong class="command">named</strong></span> configuration file is too complex
to describe in detail here. A complete description is provided
@@ -239,7 +239,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2605314"></a><h2>FILES</h2>
+<a name="id2608764"></a><h2>FILES</h2>
<div class="variablelist"><dl>
<dt><span class="term"><code class="filename">/etc/named.conf</code></span></dt>
<dd><p>
@@ -252,7 +252,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2605357"></a><h2>SEE ALSO</h2>
+<a name="id2608808"></a><h2>SEE ALSO</h2>
<p><em class="citetitle">RFC 1033</em>,
<em class="citetitle">RFC 1034</em>,
<em class="citetitle">RFC 1035</em>,
@@ -265,7 +265,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2605428"></a><h2>AUTHOR</h2>
+<a name="id2608878"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.rndc-confgen.html b/doc/arm/man.rndc-confgen.html
index df5aea85..de4413a4 100644
--- a/doc/arm/man.rndc-confgen.html
+++ b/doc/arm/man.rndc-confgen.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.rndc-confgen.html,v 1.65.10.5 2008/01/27 06:10:15 marka Exp $ -->
+<!-- $Id: man.rndc-confgen.html,v 1.65.10.12 2008/05/06 01:41:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -48,7 +48,7 @@
<div class="cmdsynopsis"><p><code class="command">rndc-confgen</code> [<code class="option">-a</code>] [<code class="option">-b <em class="replaceable"><code>keysize</code></em></code>] [<code class="option">-c <em class="replaceable"><code>keyfile</code></em></code>] [<code class="option">-h</code>] [<code class="option">-k <em class="replaceable"><code>keyname</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-r <em class="replaceable"><code>randomfile</code></em></code>] [<code class="option">-s <em class="replaceable"><code>address</code></em></code>] [<code class="option">-t <em class="replaceable"><code>chrootdir</code></em></code>] [<code class="option">-u <em class="replaceable"><code>user</code></em></code>]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2605670"></a><h2>DESCRIPTION</h2>
+<a name="id2609462"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">rndc-confgen</strong></span>
generates configuration files
for <span><strong class="command">rndc</strong></span>. It can be used as a
@@ -64,7 +64,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2605736"></a><h2>OPTIONS</h2>
+<a name="id2610074"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a</span></dt>
<dd>
@@ -171,7 +171,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2606190"></a><h2>EXAMPLES</h2>
+<a name="id2631145"></a><h2>EXAMPLES</h2>
<p>
To allow <span><strong class="command">rndc</strong></span> to be used with
no manual configuration, run
@@ -188,7 +188,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2606247"></a><h2>SEE ALSO</h2>
+<a name="id2631202"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">rndc</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">rndc.conf</span>(5)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
@@ -196,7 +196,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2607856"></a><h2>AUTHOR</h2>
+<a name="id2631240"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.rndc.conf.html b/doc/arm/man.rndc.conf.html
index cc8fedba..2c0b3307 100644
--- a/doc/arm/man.rndc.conf.html
+++ b/doc/arm/man.rndc.conf.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.rndc.conf.html,v 1.66.10.5 2008/01/27 06:10:15 marka Exp $ -->
+<!-- $Id: man.rndc.conf.html,v 1.66.10.12 2008/05/06 01:41:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">rndc.conf</code> </p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2601979"></a><h2>DESCRIPTION</h2>
+<a name="id2602358"></a><h2>DESCRIPTION</h2>
<p><code class="filename">rndc.conf</code> is the configuration file
for <span><strong class="command">rndc</strong></span>, the BIND 9 name server control
utility. This file has a similar structure and syntax to
@@ -135,7 +135,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2604404"></a><h2>EXAMPLE</h2>
+<a name="id2608332"></a><h2>EXAMPLE</h2>
<pre class="programlisting">
options {
default-server localhost;
@@ -209,7 +209,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2605072"></a><h2>NAME SERVER CONFIGURATION</h2>
+<a name="id2609137"></a><h2>NAME SERVER CONFIGURATION</h2>
<p>
The name server must be configured to accept rndc connections and
to recognize the key specified in the <code class="filename">rndc.conf</code>
@@ -219,7 +219,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2605097"></a><h2>SEE ALSO</h2>
+<a name="id2609162"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">rndc</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">rndc-confgen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">mmencode</span>(1)</span>,
@@ -227,7 +227,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2605136"></a><h2>AUTHOR</h2>
+<a name="id2609201"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.rndc.html b/doc/arm/man.rndc.html
index 5b422372..3153828f 100644
--- a/doc/arm/man.rndc.html
+++ b/doc/arm/man.rndc.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.rndc.html,v 1.64.10.5 2008/01/27 06:10:15 marka Exp $ -->
+<!-- $Id: man.rndc.html,v 1.64.10.12 2008/05/06 01:41:47 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">rndc</code> [<code class="option">-b <em class="replaceable"><code>source-address</code></em></code>] [<code class="option">-c <em class="replaceable"><code>config-file</code></em></code>] [<code class="option">-k <em class="replaceable"><code>key-file</code></em></code>] [<code class="option">-s <em class="replaceable"><code>server</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-V</code>] [<code class="option">-y <em class="replaceable"><code>key_id</code></em></code>] {command}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2603656"></a><h2>DESCRIPTION</h2>
+<a name="id2607516"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">rndc</strong></span>
controls the operation of a name
server. It supersedes the <span><strong class="command">ndc</strong></span> utility
@@ -79,7 +79,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2603706"></a><h2>OPTIONS</h2>
+<a name="id2607566"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-b <em class="replaceable"><code>source-address</code></em></span></dt>
<dd><p>
@@ -151,7 +151,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2604068"></a><h2>LIMITATIONS</h2>
+<a name="id2607928"></a><h2>LIMITATIONS</h2>
<p><span><strong class="command">rndc</strong></span>
does not yet support all the commands of
the BIND 8 <span><strong class="command">ndc</strong></span> utility.
@@ -165,7 +165,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2604099"></a><h2>SEE ALSO</h2>
+<a name="id2607959"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">rndc.conf</span>(5)</span>,
<span class="citerefentry"><span class="refentrytitle">rndc-confgen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
@@ -175,7 +175,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2604154"></a><h2>AUTHOR</h2>
+<a name="id2608014"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/misc/migration b/doc/misc/migration
index d9dca134..d8bdc1f7 100644
--- a/doc/misc/migration
+++ b/doc/misc/migration
@@ -1,4 +1,4 @@
-Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
See COPYRIGHT in the source root or http://isc.org/copyright.html for terms.
@@ -26,6 +26,16 @@ understand the many-answers zone transfer format (e.g., BIND 4.9.5 or
older) you need to explicitly specify "transfer-format one-answer;" in
either the options block or a server statement.
+BIND 9.4 onwards implements "allow-query-cache". The "allow-query"
+option is no longer used to specify access to the cache. The
+"allow-query" option continues to specify which hosts are allowed
+to ask ordinary DNS questions. The new "allow-query-cache" option
+is used to specify which hosts are allowed to get answers from the
+cache. Since BIND 9.4.1, if "allow-query-cache" is not set then
+"allow-recursion" is used if it is set, otherwise "allow-query" is
+used if it is set, otherwise the default localnets and localhost
+is used.
+
1.2. Handling of Configuration File Errors
In BIND 9, named refuses to start if it detects an error in
@@ -254,4 +264,4 @@ necessary, the umask should be set explicitly in the script used to
start the named process.
-$Id: migration,v 1.48 2007/08/23 23:46:43 tbox Exp $
+$Id: migration,v 1.48.94.1 2008/03/18 16:02:36 jreed Exp $
diff --git a/doc/misc/options b/doc/misc/options
index 818d852c..b18b4326 100644
--- a/doc/misc/options
+++ b/doc/misc/options
@@ -24,7 +24,8 @@ key <string> {
logging {
category <string> { <string>; ... };
channel <string> {
- file <log_file>;
+ file <quoted_string> [ versions ( "unlimited" | <integer> )
+ ] [ size <size> ];
null;
print-category <boolean>;
print-severity <boolean>;
@@ -43,8 +44,8 @@ lwres {
view <string> <optional_class>;
};
-masters <string> [ port <integer> ] { ( <masters> | <ipv4_address> [port
- <integer>] | <ipv6_address> [port <integer>] ) [ key <string> ]; ... };
+masters <string> [ port <integer> ] { ( <masters> | <ipv4_address> [ port
+ <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ]; ... };
options {
acache-cleaning-interval <integer>;
@@ -93,9 +94,9 @@ options {
dnssec-lookaside <string> trust-anchor <string>;
dnssec-must-be-secure <string> <boolean>;
dnssec-validation <boolean>;
- dual-stack-servers [ port <integer> ] { ( <quoted_string> [port
- <integer>] | <ipv4_address> [port <integer>] | <ipv6_address>
- [port <integer>] ); ... };
+ dual-stack-servers [ port <integer> ] { ( <quoted_string> [ port
+ <integer> ] | <ipv4_address> [ port <integer> ] |
+ <ipv6_address> [ port <integer> ] ); ... };
dump-file <quoted_string>;
edns-udp-size <integer>;
empty-contact <string>;
@@ -164,6 +165,7 @@ options {
recursion <boolean>;
recursive-clients <integer>;
request-ixfr <boolean>;
+ request-nsid <boolean>;
rfc2308-type1 <boolean>; // not yet implemented
root-delegation-only [ exclude { <quoted_string>; ... } ];
rrset-order { [ class <string> ] [ type <string> ] [ name
@@ -272,9 +274,9 @@ view <string> <optional_class> {
dnssec-lookaside <string> trust-anchor <string>;
dnssec-must-be-secure <string> <boolean>;
dnssec-validation <boolean>;
- dual-stack-servers [ port <integer> ] { ( <quoted_string> [port
- <integer>] | <ipv4_address> [port <integer>] | <ipv6_address>
- [port <integer>] ); ... };
+ dual-stack-servers [ port <integer> ] { ( <quoted_string> [ port
+ <integer> ] | <ipv4_address> [ port <integer> ] |
+ <ipv6_address> [ port <integer> ] ); ... };
edns-udp-size <integer>;
empty-contact <string>;
empty-server <string>;
@@ -327,6 +329,7 @@ view <string> <optional_class> {
queryport-pool-updateinterval <integer>;
recursion <boolean>;
request-ixfr <boolean>;
+ request-nsid <boolean>;
rfc2308-type1 <boolean>; // not yet implemented
root-delegation-only [ exclude { <quoted_string>; ... } ];
rrset-order { [ class <string> ] [ type <string> ] [ name
@@ -402,9 +405,9 @@ view <string> <optional_class> {
key-directory <quoted_string>;
maintain-ixfr-base <boolean>; // obsolete
masterfile-format ( text | raw );
- masters [ port <integer> ] { ( <masters> | <ipv4_address>
- [port <integer>] | <ipv6_address> [port <integer>] ) [
- key <string> ]; ... };
+ masters [ port <integer> ] { ( <masters> | <ipv4_address> [
+ port <integer> ] | <ipv6_address> [ port <integer> ] )
+ [ key <string> ]; ... };
max-ixfr-log-size <size>; // obsolete
max-journal-size <size_no_default>;
max-refresh-time <integer>;
@@ -478,9 +481,9 @@ zone <string> <optional_class> {
key-directory <quoted_string>;
maintain-ixfr-base <boolean>; // obsolete
masterfile-format ( text | raw );
- masters [ port <integer> ] { ( <masters> | <ipv4_address> [port
- <integer>] | <ipv6_address> [port <integer>] ) [ key <string>
- ]; ... };
+ masters [ port <integer> ] { ( <masters> | <ipv4_address> [ port
+ <integer> ] | <ipv6_address> [ port <integer> ] ) [ key
+ <string> ]; ... };
max-ixfr-log-size <size>; // obsolete
max-journal-size <size_no_default>;
max-refresh-time <integer>;
diff --git a/lib/bind/api b/lib/bind/api
index a87852a8..a2d21190 100644
--- a/lib/bind/api
+++ b/lib/bind/api
@@ -1,3 +1,3 @@
-LIBINTERFACE = 4
-LIBREVISION = 10
-LIBAGE = 0
+LIBINTERFACE = 5
+LIBREVISION = 0
+LIBAGE = 1
diff --git a/lib/bind/bsd/Makefile.in b/lib/bind/bsd/Makefile.in
index 3cbd7763..de228d29 100644
--- a/lib/bind/bsd/Makefile.in
+++ b/lib/bind/bsd/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2001 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.9 2007/06/19 23:47:13 tbox Exp $
+# $Id: Makefile.in,v 1.9.128.2 2008/03/20 23:46:31 tbox Exp $
srcdir= @srcdir@
VPATH = @srcdir@
@@ -34,6 +34,6 @@ SRCS= daemon.c ftruncate.c gettimeofday.c mktemp.c putenv.c \
TARGETS= ${OBJS}
-CINCLUDES= -I.. -I${srcdir}/../include
+CINCLUDES= -I.. -I../include -I${srcdir}/../include
@BIND9_MAKE_RULES@
diff --git a/lib/bind/bsd/strerror.c b/lib/bind/bsd/strerror.c
index 416cad48..7b125929 100644
--- a/lib/bind/bsd/strerror.c
+++ b/lib/bind/bsd/strerror.c
@@ -1,6 +1,6 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)strerror.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: strerror.c,v 1.5 2005/04/27 04:56:12 sra Exp $";
+static const char rcsid[] = "$Id: strerror.c,v 1.5.672.1 2008/02/18 04:10:16 marka Exp $";
#endif /* LIBC_SCCS and not lint */
/*
@@ -60,12 +60,14 @@ isc_strerror(int num) {
static char ebuf[40] = UPREFIX; /*%< 64-bit number + slop */
u_int errnum;
char *p, *t;
+#ifndef USE_SYSERROR_LIST
const char *ret;
+#endif
char tmp[40];
errnum = num; /*%< convert to unsigned */
#ifdef USE_SYSERROR_LIST
- if (errnum < sys_nerr)
+ if (errnum < (u_int)sys_nerr)
return (sys_errlist[errnum]);
#else
#undef strerror
diff --git a/lib/bind/bsd/strtoul.c b/lib/bind/bsd/strtoul.c
index 5d066a93..d942df07 100644
--- a/lib/bind/bsd/strtoul.c
+++ b/lib/bind/bsd/strtoul.c
@@ -1,6 +1,6 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)strtoul.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: strtoul.c,v 1.3 2005/04/27 04:56:12 sra Exp $";
+static const char rcsid[] = "$Id: strtoul.c,v 1.3.672.1 2008/02/18 04:10:16 marka Exp $";
#endif /* LIBC_SCCS and not lint */
/*
@@ -70,7 +70,7 @@ strtoul(const char *nptr, char **endptr, int base) {
* See strtol for comments as to the logic used.
*/
do {
- c = *(unsigned char *)s++;
+ c = *(const unsigned char *)s++;
} while (isspace(c));
if (c == '-') {
neg = 1;
@@ -87,7 +87,7 @@ strtoul(const char *nptr, char **endptr, int base) {
base = c == '0' ? 8 : 10;
cutoff = (u_long)ULONG_MAX / (u_long)base;
cutlim = (u_long)ULONG_MAX % (u_long)base;
- for (acc = 0, any = 0;; c = *(unsigned char*)s++) {
+ for (acc = 0, any = 0;; c = *(const unsigned char*)s++) {
if (isdigit(c))
c -= '0';
else if (isalpha(c))
@@ -96,7 +96,7 @@ strtoul(const char *nptr, char **endptr, int base) {
break;
if (c >= base)
break;
- if (any < 0 || acc > cutoff || acc == cutoff && c > cutlim)
+ if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
any = -1;
else {
any = 1;
@@ -110,7 +110,7 @@ strtoul(const char *nptr, char **endptr, int base) {
} else if (neg)
acc = -acc;
if (endptr != 0)
- *endptr = (char *)(any ? s - 1 : nptr);
+ DE_CONST((any ? s - 1 : nptr), *endptr);
return (acc);
}
diff --git a/lib/bind/config.h.in b/lib/bind/config.h.in
index 69ea2854..5e2a83de 100644
--- a/lib/bind/config.h.in
+++ b/lib/bind/config.h.in
@@ -5,6 +5,7 @@
#undef HAVE_STROPTS_H
#undef HAVE_SYS_TIMERS_H
#undef HAVE_SYS_SELECT_H
+#undef HAVE_MEMORY_H
#undef SYS_CDEFS_H
#undef _POSIX_PTHREAD_SEMANTICS
#undef POSIX_GETPWUID_R
@@ -13,6 +14,12 @@
#undef POSIX_GETGRNAM_R
#undef HAVE_MEMMOVE
#undef HAVE_MEMCHR
+#undef SPRINTF_CHAR
+#undef VSPRINTF_CHAR
+#undef USE_SYSERROR_LIST
+#undef NEED_STRTOUL
+#undef NEED_SUN4PROTOS
+#undef REENABLE_SEND
#undef NEED_SETGROUPENT
#undef NEED_GETGROUPLIST
diff --git a/lib/bind/configure b/lib/bind/configure
index 518e43a1..0938c1a4 100755
--- a/lib/bind/configure
+++ b/lib/bind/configure
@@ -1,5 +1,5 @@
#! /bin/sh
-# From configure.in Revision: 1.128.128.2 .
+# From configure.in Revision: 1.128.128.7 .
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.61.
#
@@ -929,7 +929,6 @@ ISC_PLATFORM_NEEDSTRSEP
ISC_PLATFORM_NEEDVSNPRINTF
ISC_EXTRA_OBJS
ISC_EXTRA_SRCS
-USE_SYSERROR_LIST
ISC_PLATFORM_QUADFORMAT
ISC_SOCKLEN_T
GETGROUPLIST_ARGS
@@ -972,6 +971,7 @@ HOST_R_SET_RESULT
HOST_R_SET_RETURN
SETPWENT_VOID
SETGRENT_VOID
+NGR_R_CONST
NGR_R_ARGS
NGR_R_BAD
NGR_R_COPY
@@ -981,9 +981,11 @@ NGR_R_RETURN
NGR_R_PRIVATE
NGR_R_END_RESULT
NGR_R_END_RETURN
-NGR_R_ENT_ARGS
+NGR_R_END_ARGS
NGR_R_SET_RESULT
NGR_R_SET_RETURN
+NGR_R_SET_ARGS
+NGR_R_SET_CONST
PROTO_R_ARGS
PROTO_R_BAD
PROTO_R_COPY
@@ -4248,7 +4250,8 @@ done
-for ac_header in fcntl.h db.h paths.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/timers.h stropts.h
+
+for ac_header in fcntl.h db.h paths.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/timers.h stropts.h memory.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -7258,6 +7261,96 @@ _ACEOF
fi
+{ echo "$as_me:$LINENO: checking for strtoul" >&5
+echo $ECHO_N "checking for strtoul... $ECHO_C" >&6; }
+if test "${ac_cv_func_strtoul+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define strtoul to an innocuous variant, in case <limits.h> declares strtoul.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define strtoul innocuous_strtoul
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char strtoul (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef strtoul
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strtoul ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_strtoul || defined __stub___strtoul
+choke me
+#endif
+
+int
+main ()
+{
+return strtoul ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_func_strtoul=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_func_strtoul=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_strtoul" >&5
+echo "${ECHO_T}$ac_cv_func_strtoul" >&6; }
+if test $ac_cv_func_strtoul = yes; then
+ :
+else
+ cat >>confdefs.h <<\_ACEOF
+#define NEED_STRTOUL 1
+_ACEOF
+
+fi
+
{ echo "$as_me:$LINENO: checking for if_nametoindex" >&5
echo $ECHO_N "checking for if_nametoindex... $ECHO_C" >&6; }
@@ -7624,6 +7717,61 @@ fi
+if test -n "$NEED_STRERROR"
+then
+ { echo "$as_me:$LINENO: checking for extern char * sys_errlist" >&5
+echo $ECHO_N "checking for extern char * sys_errlist... $ECHO_C" >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+ extern int sys_nerr; extern char *sys_errlist[];
+int
+main ()
+{
+ const char *p = sys_errlist[0];
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+ cat >>confdefs.h <<\_ACEOF
+#define USE_SYSERROR_LIST 1
+_ACEOF
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
#
# flockfile is usually provided by pthreads, but we may want to use it
# even if compiled with --disable-threads.
@@ -8425,6 +8573,14 @@ esac
#
# GNU libtool support
#
+case $host in
+sunos*)
+ # Just set the maximum command line length for sunos as it otherwise
+ # takes a exceptionally long time to work it out. Required for libtool.
+ lt_cv_sys_max_cmd_len=4096;
+ ;;
+esac
+
# Check whether --with-libtool was given.
if test "${with_libtool+set}" = set; then
@@ -8972,7 +9128,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 8975 "configure"' > conftest.$ac_ext
+ echo '#line 9131 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -11094,11 +11250,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:11097: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:11253: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:11101: \$? = $ac_status" >&5
+ echo "$as_me:11257: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -11337,11 +11493,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:11340: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:11496: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:11344: \$? = $ac_status" >&5
+ echo "$as_me:11500: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -11397,11 +11553,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:11400: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:11556: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:11404: \$? = $ac_status" >&5
+ echo "$as_me:11560: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -13545,7 +13701,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 13548 "configure"
+#line 13704 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -13643,7 +13799,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 13646 "configure"
+#line 13802 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -15836,11 +15992,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15839: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:15995: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:15843: \$? = $ac_status" >&5
+ echo "$as_me:15999: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -15896,11 +16052,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15899: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16055: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:15903: \$? = $ac_status" >&5
+ echo "$as_me:16059: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -17224,7 +17380,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 17227 "configure"
+#line 17383 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -17322,7 +17478,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 17325 "configure"
+#line 17481 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -18159,11 +18315,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:18162: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:18318: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:18166: \$? = $ac_status" >&5
+ echo "$as_me:18322: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -18219,11 +18375,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:18222: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:18378: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:18226: \$? = $ac_status" >&5
+ echo "$as_me:18382: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -20253,11 +20409,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:20256: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:20412: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:20260: \$? = $ac_status" >&5
+ echo "$as_me:20416: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -20496,11 +20652,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:20499: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:20655: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:20503: \$? = $ac_status" >&5
+ echo "$as_me:20659: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -20556,11 +20712,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:20559: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:20715: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:20563: \$? = $ac_status" >&5
+ echo "$as_me:20719: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -22704,7 +22860,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 22707 "configure"
+#line 22863 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -22802,7 +22958,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 22805 "configure"
+#line 22961 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -24504,6 +24660,11 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
#
case "$host" in
*-dec-osf*)
+ # Tru64 broke send() by defining it to send_OBSOLETE
+ cat >>confdefs.h <<\_ACEOF
+#define REENABLE_SEND 1
+_ACEOF
+
# Turn on 4.4BSD style sa_len support.
cat >>confdefs.h <<\_ACEOF
#define _SOCKADDR_LEN 1
@@ -24621,6 +24782,10 @@ case "$host" in
*-qnx*) PORT_DIR="port/qnx";;
*-rhapsody*) PORT_DIR="port/rhapsody";;
*-sunos4*)
+ cat >>confdefs.h <<\_ACEOF
+#define NEED_SUN4PROTOS 1
+_ACEOF
+
PORT_NONBLOCK="#define PORT_NONBLOCK O_NDELAY"
PORT_DIR="port/sunos";;
*-solaris2.[01234])
@@ -25917,64 +26082,35 @@ else
ISC_PLATFORM_NEEDSTRSEP="#define ISC_PLATFORM_NEEDSTRSEP 1"
fi
-{ echo "$as_me:$LINENO: checking for vsnprintf" >&5
-echo $ECHO_N "checking for vsnprintf... $ECHO_C" >&6; }
-if test "${ac_cv_func_vsnprintf+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
+
+
+{ echo "$as_me:$LINENO: checking for char *sprintf" >&5
+echo $ECHO_N "checking for char *sprintf... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Define vsnprintf to an innocuous variant, in case <limits.h> declares vsnprintf.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define vsnprintf innocuous_vsnprintf
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char vsnprintf (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-#undef vsnprintf
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char vsnprintf ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_vsnprintf || defined __stub___vsnprintf
-choke me
-#endif
+#include <stdio.h>
int
main ()
{
-return vsnprintf ();
+ char buf[2]; return(*sprintf(buf,"x"));
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -25983,37 +26119,94 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(exit $ac_status); } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_func_vsnprintf=yes
+ } && test -s conftest.$ac_objext; then
+ cat >>confdefs.h <<\_ACEOF
+#define SPRINTF_CHAR 1
+_ACEOF
+
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_func_vsnprintf=no
-fi
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_vsnprintf" >&5
-echo "${ECHO_T}$ac_cv_func_vsnprintf" >&6; }
-if test $ac_cv_func_vsnprintf = yes; then
- ISC_PLATFORM_NEEDVSNPRINTF="#undef ISC_PLATFORM_NEEDVSNPRINTF"
-else
- ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS print.$O"
- ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS print.c"
- ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1"
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: checking for char *vsprintf" >&5
+echo $ECHO_N "checking for char *vsprintf... $ECHO_C" >&6; }
+case $host in
+*sunos4*) # not decared in any header file.
+cat >>confdefs.h <<\_ACEOF
+#define VSPRINTF_CHAR 1
+_ACEOF
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+;;
+*)
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+ char buf[2]; return(*vsprintf(buf,"x"));
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ cat >>confdefs.h <<\_ACEOF
+#define VSPRINTF_CHAR 1
+_ACEOF
-{ echo "$as_me:$LINENO: checking for strerror" >&5
-echo $ECHO_N "checking for strerror... $ECHO_C" >&6; }
-if test "${ac_cv_func_strerror+set}" = set; then
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+;;
+esac
+
+{ echo "$as_me:$LINENO: checking for vsnprintf" >&5
+echo $ECHO_N "checking for vsnprintf... $ECHO_C" >&6; }
+if test "${ac_cv_func_vsnprintf+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -26022,12 +26215,12 @@ _ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Define strerror to an innocuous variant, in case <limits.h> declares strerror.
+/* Define vsnprintf to an innocuous variant, in case <limits.h> declares vsnprintf.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define strerror innocuous_strerror
+#define vsnprintf innocuous_vsnprintf
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char strerror (); below.
+ which can conflict with char vsnprintf (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
@@ -26037,7 +26230,7 @@ cat >>conftest.$ac_ext <<_ACEOF
# include <assert.h>
#endif
-#undef strerror
+#undef vsnprintf
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
@@ -26045,18 +26238,18 @@ cat >>conftest.$ac_ext <<_ACEOF
#ifdef __cplusplus
extern "C"
#endif
-char strerror ();
+char vsnprintf ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined __stub_strerror || defined __stub___strerror
+#if defined __stub_vsnprintf || defined __stub___vsnprintf
choke me
#endif
int
main ()
{
-return strerror ();
+return vsnprintf ();
;
return 0;
}
@@ -26079,28 +26272,33 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
test ! -s conftest.err
} && test -s conftest$ac_exeext &&
$as_test_x conftest$ac_exeext; then
- ac_cv_func_strerror=yes
+ ac_cv_func_vsnprintf=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_func_strerror=no
+ ac_cv_func_vsnprintf=no
fi
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_strerror" >&5
-echo "${ECHO_T}$ac_cv_func_strerror" >&6; }
-if test $ac_cv_func_strerror = yes; then
- USE_SYSERROR_LIST="#undef USE_SYSERROR_LIST"
+{ echo "$as_me:$LINENO: result: $ac_cv_func_vsnprintf" >&5
+echo "${ECHO_T}$ac_cv_func_vsnprintf" >&6; }
+if test $ac_cv_func_vsnprintf = yes; then
+ ISC_PLATFORM_NEEDVSNPRINTF="#undef ISC_PLATFORM_NEEDVSNPRINTF"
else
- USE_SYSERROR_LIST="#define USE_SYSERROR_LIST 1"
+ ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS print.$O"
+ ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS print.c"
+ ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1"
fi
-#
+
+
+
+
# Determine the printf format characters to use when printing
# values of type isc_int64_t. We make the assumption that platforms
# where a "long long" is the same size as a "long" (e.g., Alpha/OSF1)
@@ -29054,7 +29252,21 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
case $host in
ia64-hp-hpux11.*)
+NGR_R_CONST="#define NGR_R_CONST"
;;
+*-hp-hpux11.*)
+#
+# HPUX doesn't have a prototype for getnetgrent_r().
+#
+NGR_R_CONST="#define NGR_R_CONST"
+NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen"
+NGR_R_BAD="#define NGR_R_BAD (0)"
+NGR_R_COPY="#define NGR_R_COPY buf, buflen"
+NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS"
+NGR_R_OK="#define NGR_R_OK 1"
+NGR_R_RETURN="#define NGR_R_RETURN int"
+;;
+
*)
{ echo "$as_me:$LINENO: checking for getnetgrent_r" >&5
echo $ECHO_N "checking for getnetgrent_r... $ECHO_C" >&6; }
@@ -29147,7 +29359,10 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef __USE_MISC
#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
#include <netdb.h>
+#include <unistd.h>
int getnetgrent_r(char **m, char **u, char **d, char *b, int l) {}
@@ -29177,6 +29392,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
+NGR_R_CONST="#define NGR_R_CONST"
NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen"
NGR_R_BAD="#define NGR_R_BAD (0)"
NGR_R_COPY="#define NGR_R_COPY buf, buflen"
@@ -29198,7 +29414,10 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef __USE_MISC
#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
#include <netdb.h>
+#include <unistd.h>
int getnetgrent_r(char **m, char **u, char **d, char *b, size_t l) {}
@@ -29228,6 +29447,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
+NGR_R_CONST="#define NGR_R_CONST"
NGR_R_ARGS="#define NGR_R_ARGS char *buf, size_t buflen"
NGR_R_BAD="#define NGR_R_BAD (0)"
NGR_R_COPY="#define NGR_R_COPY buf, buflen"
@@ -29249,8 +29469,11 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef __USE_MISC
#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
#include <netdb.h>
-extern int getnetgrent_r( char **, char **, char **, void **);
+#include <unistd.h>
+extern int getnetgrent_r(char **, char **, char **, void **);
int
@@ -29279,6 +29502,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
+NGR_R_CONST="#define NGR_R_CONST"
NGR_R_ARGS="#define NGR_R_ARGS void **buf"
NGR_R_BAD="#define NGR_R_BAD (0)"
NGR_R_COPY="#define NGR_R_COPY buf"
@@ -29292,6 +29516,66 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#undef __USE_MISC
+#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
+#include <netdb.h>
+#include <unistd.h>
+extern int getnetgrent_r(const char **, const char **, const char **, void *);
+
+
+int
+main ()
+{
+return (0);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+
+NGR_R_CONST="#define NGR_R_CONST const"
+NGR_R_ARGS="#define NGR_R_ARGS void *buf"
+NGR_R_BAD="#define NGR_R_BAD (0)"
+NGR_R_COPY="#define NGR_R_COPY buf"
+NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS"
+NGR_R_OK="#define NGR_R_OK 1"
+NGR_R_RETURN="#define NGR_R_RETURN int"
+NGR_R_PRIVATE="#define NGR_R_PRIVATE 2"
+
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
@@ -29306,7 +29590,8 @@ fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
else
- NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen"
+ NGR_R_CONST="#define NGR_R_CONST"
+NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen"
NGR_R_BAD="#define NGR_R_BAD (0)"
NGR_R_COPY="#define NGR_R_COPY buf, buflen"
NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS"
@@ -29324,6 +29609,7 @@ esac
+
{ echo "$as_me:$LINENO: checking for endnetgrent_r" >&5
echo $ECHO_N "checking for endnetgrent_r... $ECHO_C" >&6; }
if test "${ac_cv_func_endnetgrent_r+set}" = set; then
@@ -29415,7 +29701,10 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef __USE_MISC
#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
#include <netdb.h>
+#include <unistd.h>
void endnetgrent_r(void **ptr);
@@ -29448,7 +29737,59 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /* empty */"
NGR_R_END_RETURN="#define NGR_R_END_RETURN void"
-NGR_R_ENT_ARGS="#define NGR_R_ENT_ARGS NGR_R_ARGS"
+NGR_R_END_ARGS="#define NGR_R_END_ARGS NGR_R_ARGS"
+
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#undef __USE_MISC
+#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
+#include <netdb.h>
+#include <unistd.h>
+void endnetgrent_r(void *ptr);
+
+
+int
+main ()
+{
+return (0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+
+NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /* empty */"
+NGR_R_END_RETURN="#define NGR_R_END_RETURN void"
+NGR_R_END_ARGS="#define NGR_R_END_ARGS void *buf"
else
@@ -29458,8 +29799,12 @@ sed 's/^/| /' conftest.$ac_ext >&5
NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) return (x)"
NGR_R_END_RETURN="#define NGR_R_END_RETURN int"
-NGR_R_ENT_ARGS="#define NGR_R_ENT_ARGS NGR_R_ARGS"
+NGR_R_END_ARGS="#define NGR_R_END_ARGS NGR_R_ARGS"
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
@@ -29468,7 +29813,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
else
NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /*empty*/"
NGR_R_END_RETURN="#define NGR_R_END_RETURN void"
-NGR_R_ENT_ARGS="#undef NGR_R_ENT_ARGS /*empty*/"
+NGR_R_END_ARGS="#undef NGR_R_END_ARGS /*empty*/"
cat >>confdefs.h <<\_ACEOF
#define NEED_ENDNETGRENT_R 1
_ACEOF
@@ -29565,25 +29910,161 @@ if test $ac_cv_func_setnetgrent_r = yes; then
case "$host" in
*bsdi*)
+ #
+ # No prototype
+ #
NGR_R_SET_RESULT="#undef NGR_R_SET_RESULT /*empty*/"
NGR_R_SET_RETURN="#define NGR_R_SET_RETURN void"
+ NGR_R_SET_ARGS="#define NGR_R_SET_ARGS NGR_R_ARGS"
+ NGR_R_SET_CONST="#define NGR_R_SET_CONST"
;;
-*)
+*hpux*)
+ #
+ # No prototype
+ #
NGR_R_SET_RESULT="#define NGR_R_SET_RESULT NGR_R_OK"
NGR_R_SET_RETURN="#define NGR_R_SET_RETURN int"
+ NGR_R_SET_ARGS="#undef NGR_R_SET_ARGS /* empty */"
+ NGR_R_SET_CONST="#define NGR_R_SET_CONST"
;;
+*)
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#undef __USE_MISC
+#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
+#include <netdb.h>
+#include <unistd.h>
+void setnetgrent_r(void **ptr);
+
+
+int
+main ()
+{
+return (0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+
+NGR_R_SET_RESULT="#undef NGR_R_SET_RESULT /* empty */"
+NGR_R_SET_RETURN="#define NGR_R_SET_RETURN void"
+NGR_R_SET_ARGS="#define NGR_R_SET_ARGS void **buf"
+NGR_R_SET_CONST="#define NGR_R_SET_CONST"
+
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#undef __USE_MISC
+#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
+#include <netdb.h>
+#include <unistd.h>
+extern int setnetgrent_r(char *, void **);
+
+
+int
+main ()
+{
+return (0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+
+NGR_R_SET_RESULT="#define NGR_R_SET_RESULT NGR_R_OK"
+NGR_R_SET_RETURN="#define NGR_R_SET_RETURN int"
+NGR_R_SET_ARGS="#define NGR_R_SET_ARGS void **buf"
+NGR_R_SET_CONST="#define NGR_R_SET_CONST"
+
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+NGR_R_SET_RESULT="#define NGR_R_SET_RESULT NGR_R_OK"
+NGR_R_SET_RETURN="#define NGR_R_SET_RETURN int"
+NGR_R_SET_ARGS="#undef NGR_R_SET_ARGS"
+NGR_R_SET_CONST="#define NGR_R_SET_CONST const"
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+;;
esac
else
NGR_R_SET_RESULT="#undef NGR_R_SET_RESULT /*empty*/"
NGR_R_SET_RETURN="#define NGR_R_SET_RETURN void"
+NGR_R_SET_ARGS="#undef NGR_R_SET_ARGS"
+NGR_R_SET_CONST="#define NGR_R_SET_CONST const"
fi
+
+
+
{ echo "$as_me:$LINENO: checking for innetgr_r" >&5
echo $ECHO_N "checking for innetgr_r... $ECHO_C" >&6; }
if test "${ac_cv_func_innetgr_r+set}" = set; then
@@ -33211,7 +33692,6 @@ ISC_PLATFORM_NEEDSTRSEP!$ISC_PLATFORM_NEEDSTRSEP$ac_delim
ISC_PLATFORM_NEEDVSNPRINTF!$ISC_PLATFORM_NEEDVSNPRINTF$ac_delim
ISC_EXTRA_OBJS!$ISC_EXTRA_OBJS$ac_delim
ISC_EXTRA_SRCS!$ISC_EXTRA_SRCS$ac_delim
-USE_SYSERROR_LIST!$USE_SYSERROR_LIST$ac_delim
ISC_PLATFORM_QUADFORMAT!$ISC_PLATFORM_QUADFORMAT$ac_delim
ISC_SOCKLEN_T!$ISC_SOCKLEN_T$ac_delim
GETGROUPLIST_ARGS!$GETGROUPLIST_ARGS$ac_delim
@@ -33235,6 +33715,7 @@ GROUP_R_OK!$GROUP_R_OK$ac_delim
GROUP_R_RETURN!$GROUP_R_RETURN$ac_delim
GROUP_R_END_RESULT!$GROUP_R_END_RESULT$ac_delim
GROUP_R_END_RETURN!$GROUP_R_END_RETURN$ac_delim
+GROUP_R_ENT_ARGS!$GROUP_R_ENT_ARGS$ac_delim
_ACEOF
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -33276,7 +33757,6 @@ _ACEOF
ac_delim='%!_!# '
for ac_last_try in false false false false false :; do
cat >conf$$subs.sed <<_ACEOF
-GROUP_R_ENT_ARGS!$GROUP_R_ENT_ARGS$ac_delim
GROUP_R_SET_RESULT!$GROUP_R_SET_RESULT$ac_delim
GROUP_R_SET_RETURN!$GROUP_R_SET_RETURN$ac_delim
HOST_R_ARGS!$HOST_R_ARGS$ac_delim
@@ -33295,6 +33775,7 @@ HOST_R_SET_RESULT!$HOST_R_SET_RESULT$ac_delim
HOST_R_SET_RETURN!$HOST_R_SET_RETURN$ac_delim
SETPWENT_VOID!$SETPWENT_VOID$ac_delim
SETGRENT_VOID!$SETGRENT_VOID$ac_delim
+NGR_R_CONST!$NGR_R_CONST$ac_delim
NGR_R_ARGS!$NGR_R_ARGS$ac_delim
NGR_R_BAD!$NGR_R_BAD$ac_delim
NGR_R_COPY!$NGR_R_COPY$ac_delim
@@ -33304,9 +33785,11 @@ NGR_R_RETURN!$NGR_R_RETURN$ac_delim
NGR_R_PRIVATE!$NGR_R_PRIVATE$ac_delim
NGR_R_END_RESULT!$NGR_R_END_RESULT$ac_delim
NGR_R_END_RETURN!$NGR_R_END_RETURN$ac_delim
-NGR_R_ENT_ARGS!$NGR_R_ENT_ARGS$ac_delim
+NGR_R_END_ARGS!$NGR_R_END_ARGS$ac_delim
NGR_R_SET_RESULT!$NGR_R_SET_RESULT$ac_delim
NGR_R_SET_RETURN!$NGR_R_SET_RETURN$ac_delim
+NGR_R_SET_ARGS!$NGR_R_SET_ARGS$ac_delim
+NGR_R_SET_CONST!$NGR_R_SET_CONST$ac_delim
PROTO_R_ARGS!$PROTO_R_ARGS$ac_delim
PROTO_R_BAD!$PROTO_R_BAD$ac_delim
PROTO_R_COPY!$PROTO_R_COPY$ac_delim
@@ -33354,7 +33837,7 @@ LIBOBJS!$LIBOBJS$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 76; then
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 78; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
diff --git a/lib/bind/configure.in b/lib/bind/configure.in
index 50a6212f..f809a48e 100644
--- a/lib/bind/configure.in
+++ b/lib/bind/configure.in
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-AC_REVISION($Revision: 1.128.128.2 $)
+AC_REVISION($Revision: 1.128.128.7 $)
AC_INIT(resolv/herror.c)
AC_PREREQ(2.13)
@@ -169,7 +169,7 @@ AC_PROG_CC
AC_HEADER_STDC
-AC_CHECK_HEADERS(fcntl.h db.h paths.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/timers.h stropts.h)
+AC_CHECK_HEADERS(fcntl.h db.h paths.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/timers.h stropts.h memory.h)
AC_C_CONST
AC_C_INLINE
@@ -461,6 +461,7 @@ AC_SUBST(WANT_THREADS_OBJS)
AC_CHECK_FUNC(strlcat, AC_DEFINE(HAVE_STRLCAT))
AC_CHECK_FUNC(memmove, AC_DEFINE(HAVE_MEMMOVE))
AC_CHECK_FUNC(memchr, AC_DEFINE(HAVE_MEMCHR))
+AC_CHECK_FUNC(strtoul, , AC_DEFINE(NEED_STRTOUL))
AC_CHECK_FUNC(if_nametoindex,
[USE_IFNAMELINKID="#define USE_IFNAMELINKID 1"],
@@ -490,6 +491,16 @@ AC_CHECK_FUNC(strerror, [NEED_STRERROR="#undef NEED_STRERROR"],
[NEED_STRERROR="#define NEED_STRERROR 1"])
AC_SUBST(NEED_STRERROR)
+if test -n "$NEED_STRERROR"
+then
+ AC_MSG_CHECKING([for extern char * sys_errlist[]])
+ AC_TRY_LINK([ extern int sys_nerr; extern char *sys_errlist[]; ],
+ [ const char *p = sys_errlist[0]; ],
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(USE_SYSERROR_LIST),
+ AC_MSG_RESULT(no))
+fi
+
#
# flockfile is usually provided by pthreads, but we may want to use it
# even if compiled with --disable-threads.
@@ -666,6 +677,14 @@ AC_SUBST(PURIFY)
#
# GNU libtool support
#
+case $host in
+sunos*)
+ # Just set the maximum command line length for sunos as it otherwise
+ # takes a exceptionally long time to work it out. Required for libtool.
+ lt_cv_sys_max_cmd_len=4096;
+ ;;
+esac
+
AC_ARG_WITH(libtool,
[ --with-libtool use GNU libtool (following indented options supported)],
use_libtool="$withval", use_libtool="no")
@@ -976,6 +995,8 @@ AC_SUBST(ISC_PLATFORM_NEEDATON)
#
case "$host" in
*-dec-osf*)
+ # Tru64 broke send() by defining it to send_OBSOLETE
+ AC_DEFINE(REENABLE_SEND)
# Turn on 4.4BSD style sa_len support.
AC_DEFINE(_SOCKADDR_LEN)
;;
@@ -1050,6 +1071,7 @@ case "$host" in
*-qnx*) PORT_DIR="port/qnx";;
*-rhapsody*) PORT_DIR="port/rhapsody";;
*-sunos4*)
+ AC_DEFINE(NEED_SUN4PROTOS)
PORT_NONBLOCK="#define PORT_NONBLOCK O_NDELAY"
PORT_DIR="port/sunos";;
*-solaris2.[[01234]])
@@ -1246,6 +1268,38 @@ found_rt_iflist
AC_CHECK_FUNC(strsep,
[ISC_PLATFORM_NEEDSTRSEP="#undef ISC_PLATFORM_NEEDSTRSEP"],
[ISC_PLATFORM_NEEDSTRSEP="#define ISC_PLATFORM_NEEDSTRSEP 1"])
+
+
+AC_MSG_CHECKING(for char *sprintf)
+AC_TRY_COMPILE([
+#include <stdio.h>
+],
+[ char buf[2]; return(*sprintf(buf,"x"));],
+AC_DEFINE(SPRINTF_CHAR)
+AC_MSG_RESULT(yes)
+,
+AC_MSG_RESULT(no)
+)
+
+AC_MSG_CHECKING(for char *vsprintf)
+case $host in
+*sunos4*) # not decared in any header file.
+AC_DEFINE(VSPRINTF_CHAR)
+AC_MSG_RESULT(yes)
+;;
+*)
+AC_TRY_COMPILE([
+#include <stdio.h>
+],
+[ char buf[2]; return(*vsprintf(buf,"x"));],
+AC_DEFINE(VSPRINTF_CHAR)
+AC_MSG_RESULT(yes)
+,
+AC_MSG_RESULT(no)
+)
+;;
+esac
+
AC_CHECK_FUNC(vsnprintf,
[ISC_PLATFORM_NEEDVSNPRINTF="#undef ISC_PLATFORM_NEEDVSNPRINTF"],
[ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS print.$O"
@@ -1256,12 +1310,7 @@ AC_SUBST(ISC_PLATFORM_NEEDVSNPRINTF)
AC_SUBST(ISC_EXTRA_OBJS)
AC_SUBST(ISC_EXTRA_SRCS)
-AC_CHECK_FUNC(strerror,
- [USE_SYSERROR_LIST="#undef USE_SYSERROR_LIST"],
- [USE_SYSERROR_LIST="#define USE_SYSERROR_LIST 1"])
-AC_SUBST(USE_SYSERROR_LIST)
-#
# Determine the printf format characters to use when printing
# values of type isc_int64_t. We make the assumption that platforms
# where a "long long" is the same size as a "long" (e.g., Alpha/OSF1)
@@ -1865,19 +1914,37 @@ AC_SUBST(SETGRENT_VOID)
case $host in
ia64-hp-hpux11.*)
+NGR_R_CONST="#define NGR_R_CONST"
;;
+*-hp-hpux11.*)
+#
+# HPUX doesn't have a prototype for getnetgrent_r().
+#
+NGR_R_CONST="#define NGR_R_CONST"
+NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen"
+NGR_R_BAD="#define NGR_R_BAD (0)"
+NGR_R_COPY="#define NGR_R_COPY buf, buflen"
+NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS"
+NGR_R_OK="#define NGR_R_OK 1"
+NGR_R_RETURN="#define NGR_R_RETURN int"
+;;
+
*)
AC_CHECK_FUNC(getnetgrent_r,
AC_TRY_COMPILE(
[
#undef __USE_MISC
#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
#include <netdb.h>
+#include <unistd.h>
int getnetgrent_r(char **m, char **u, char **d, char *b, int l) {}
]
,
[return (0);],
[
+NGR_R_CONST="#define NGR_R_CONST"
NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen"
NGR_R_BAD="#define NGR_R_BAD (0)"
NGR_R_COPY="#define NGR_R_COPY buf, buflen"
@@ -1890,12 +1957,16 @@ AC_TRY_COMPILE(
[
#undef __USE_MISC
#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
#include <netdb.h>
+#include <unistd.h>
int getnetgrent_r(char **m, char **u, char **d, char *b, size_t l) {}
]
,
[return (0);],
[
+NGR_R_CONST="#define NGR_R_CONST"
NGR_R_ARGS="#define NGR_R_ARGS char *buf, size_t buflen"
NGR_R_BAD="#define NGR_R_BAD (0)"
NGR_R_COPY="#define NGR_R_COPY buf, buflen"
@@ -1908,12 +1979,16 @@ AC_TRY_COMPILE(
[
#undef __USE_MISC
#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
#include <netdb.h>
-extern int getnetgrent_r( char **, char **, char **, void **);
+#include <unistd.h>
+extern int getnetgrent_r(char **, char **, char **, void **);
]
,
[return (0);],
[
+NGR_R_CONST="#define NGR_R_CONST"
NGR_R_ARGS="#define NGR_R_ARGS void **buf"
NGR_R_BAD="#define NGR_R_BAD (0)"
NGR_R_COPY="#define NGR_R_COPY buf"
@@ -1923,10 +1998,35 @@ NGR_R_RETURN="#define NGR_R_RETURN int"
NGR_R_PRIVATE="#define NGR_R_PRIVATE 1"
]
,
+AC_TRY_COMPILE(
+[
+#undef __USE_MISC
+#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
+#include <netdb.h>
+#include <unistd.h>
+extern int getnetgrent_r(const char **, const char **, const char **, void *);
+]
+,
+[return (0);],
+[
+NGR_R_CONST="#define NGR_R_CONST const"
+NGR_R_ARGS="#define NGR_R_ARGS void *buf"
+NGR_R_BAD="#define NGR_R_BAD (0)"
+NGR_R_COPY="#define NGR_R_COPY buf"
+NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS"
+NGR_R_OK="#define NGR_R_OK 1"
+NGR_R_RETURN="#define NGR_R_RETURN int"
+NGR_R_PRIVATE="#define NGR_R_PRIVATE 2"
+]
+,
+)
)
)
)
,
+NGR_R_CONST="#define NGR_R_CONST"
NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen"
NGR_R_BAD="#define NGR_R_BAD (0)"
NGR_R_COPY="#define NGR_R_COPY buf, buflen"
@@ -1935,6 +2035,7 @@ NGR_R_OK="#define NGR_R_OK 1"
NGR_R_RETURN="#define NGR_R_RETURN int"
)
esac
+AC_SUBST(NGR_R_CONST)
AC_SUBST(NGR_R_ARGS)
AC_SUBST(NGR_R_BAD)
AC_SUBST(NGR_R_COPY)
@@ -1948,7 +2049,10 @@ AC_TRY_COMPILE(
[
#undef __USE_MISC
#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
#include <netdb.h>
+#include <unistd.h>
void endnetgrent_r(void **ptr);
]
,
@@ -1957,44 +2061,128 @@ void endnetgrent_r(void **ptr);
[
NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /* empty */"
NGR_R_END_RETURN="#define NGR_R_END_RETURN void"
-NGR_R_ENT_ARGS="#define NGR_R_ENT_ARGS NGR_R_ARGS"
+NGR_R_END_ARGS="#define NGR_R_END_ARGS NGR_R_ARGS"
+]
+,
+AC_TRY_COMPILE(
+[
+#undef __USE_MISC
+#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
+#include <netdb.h>
+#include <unistd.h>
+void endnetgrent_r(void *ptr);
+]
+,
+[return (0);]
+,
+[
+NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /* empty */"
+NGR_R_END_RETURN="#define NGR_R_END_RETURN void"
+NGR_R_END_ARGS="#define NGR_R_END_ARGS void *buf"
]
,
[
NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) return (x)"
NGR_R_END_RETURN="#define NGR_R_END_RETURN int"
-NGR_R_ENT_ARGS="#define NGR_R_ENT_ARGS NGR_R_ARGS"
+NGR_R_END_ARGS="#define NGR_R_END_ARGS NGR_R_ARGS"
]
)
+)
,
NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /*empty*/"
NGR_R_END_RETURN="#define NGR_R_END_RETURN void"
-NGR_R_ENT_ARGS="#undef NGR_R_ENT_ARGS /*empty*/"
+NGR_R_END_ARGS="#undef NGR_R_END_ARGS /*empty*/"
AC_DEFINE(NEED_ENDNETGRENT_R)
)
AC_SUBST(NGR_R_END_RESULT)
AC_SUBST(NGR_R_END_RETURN)
-AC_SUBST(NGR_R_ENT_ARGS)
+AC_SUBST(NGR_R_END_ARGS)
AC_CHECK_FUNC(setnetgrent_r,
[
case "$host" in
*bsdi*)
+ #
+ # No prototype
+ #
NGR_R_SET_RESULT="#undef NGR_R_SET_RESULT /*empty*/"
NGR_R_SET_RETURN="#define NGR_R_SET_RETURN void"
+ NGR_R_SET_ARGS="#define NGR_R_SET_ARGS NGR_R_ARGS"
+ NGR_R_SET_CONST="#define NGR_R_SET_CONST"
;;
-*)
+*hpux*)
+ #
+ # No prototype
+ #
NGR_R_SET_RESULT="#define NGR_R_SET_RESULT NGR_R_OK"
NGR_R_SET_RETURN="#define NGR_R_SET_RETURN int"
+ NGR_R_SET_ARGS="#undef NGR_R_SET_ARGS /* empty */"
+ NGR_R_SET_CONST="#define NGR_R_SET_CONST"
;;
+*)
+AC_TRY_COMPILE(
+[
+#undef __USE_MISC
+#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
+#include <netdb.h>
+#include <unistd.h>
+void setnetgrent_r(void **ptr);
+]
+,
+[return (0);]
+,
+[
+NGR_R_SET_RESULT="#undef NGR_R_SET_RESULT /* empty */"
+NGR_R_SET_RETURN="#define NGR_R_SET_RETURN void"
+NGR_R_SET_ARGS="#define NGR_R_SET_ARGS void **buf"
+NGR_R_SET_CONST="#define NGR_R_SET_CONST"
+]
+,
+AC_TRY_COMPILE(
+[
+#undef __USE_MISC
+#define __USE_MISC
+#undef _REEENTRANT
+#define _REEENTRANT
+#include <netdb.h>
+#include <unistd.h>
+extern int setnetgrent_r(char *, void **);
+]
+,
+[return (0);]
+,
+[
+NGR_R_SET_RESULT="#define NGR_R_SET_RESULT NGR_R_OK"
+NGR_R_SET_RETURN="#define NGR_R_SET_RETURN int"
+NGR_R_SET_ARGS="#define NGR_R_SET_ARGS void **buf"
+NGR_R_SET_CONST="#define NGR_R_SET_CONST"
+]
+,
+[
+NGR_R_SET_RESULT="#define NGR_R_SET_RESULT NGR_R_OK"
+NGR_R_SET_RETURN="#define NGR_R_SET_RETURN int"
+NGR_R_SET_ARGS="#undef NGR_R_SET_ARGS"
+NGR_R_SET_CONST="#define NGR_R_SET_CONST const"
+]
+))
+;;
esac
]
,
NGR_R_SET_RESULT="#undef NGR_R_SET_RESULT /*empty*/"
NGR_R_SET_RETURN="#define NGR_R_SET_RETURN void"
+NGR_R_SET_ARGS="#undef NGR_R_SET_ARGS"
+NGR_R_SET_CONST="#define NGR_R_SET_CONST const"
)
+
AC_SUBST(NGR_R_SET_RESULT)
AC_SUBST(NGR_R_SET_RETURN)
+AC_SUBST(NGR_R_SET_ARGS)
+AC_SUBST(NGR_R_SET_CONST)
AC_CHECK_FUNC(innetgr_r,,AC_DEFINE(NEED_INNETGR_R))
diff --git a/lib/bind/dst/Makefile.in b/lib/bind/dst/Makefile.in
index 2cb10cf6..f4e84a49 100644
--- a/lib/bind/dst/Makefile.in
+++ b/lib/bind/dst/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2001 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.8 2007/06/19 23:47:13 tbox Exp $
+# $Id: Makefile.in,v 1.8.128.2 2008/03/20 23:46:31 tbox Exp $
srcdir= @srcdir@
VPATH = @srcdir@
@@ -26,7 +26,7 @@ TARGETS= ${OBJS}
CRYPTFLAGS= -DCYLINK_DSS -DHMAC_MD5 -DUSE_MD5 -DDNSSAFE
-CINCLUDES= -I.. -I${srcdir}/../include ${CRYPTINCL}
+CINCLUDES= -I.. -I../include -I${srcdir}/../include ${CRYPTINCL}
CDEFINES= ${CRYPTFLAGS}
@BIND9_MAKE_RULES@
diff --git a/lib/bind/include/arpa/nameser.h b/lib/bind/include/arpa/nameser.h
index b6d34aab..d1cbf428 100644
--- a/lib/bind/include/arpa/nameser.h
+++ b/lib/bind/include/arpa/nameser.h
@@ -49,7 +49,7 @@
*/
/*
- * $Id: nameser.h,v 1.8 2005/04/27 04:56:16 sra Exp $
+ * $Id: nameser.h,v 1.8.672.1 2008/04/03 02:12:21 marka Exp $
*/
#ifndef _ARPA_NAMESER_H_
@@ -427,9 +427,10 @@ typedef enum __ns_cert_types {
#define NS_NXT_MAX 127
/*%
- * EDNS0 extended flags, host order.
+ * EDNS0 extended flags and option codes, host order.
*/
#define NS_OPT_DNSSEC_OK 0x8000U
+#define NS_OPT_NSID 3
/*%
* Inline versions of get/put short/long. Pointer is advanced.
diff --git a/lib/bind/include/isc/misc.h b/lib/bind/include/isc/misc.h
index e9ad2c55..8736bf91 100644
--- a/lib/bind/include/isc/misc.h
+++ b/lib/bind/include/isc/misc.h
@@ -16,7 +16,7 @@
*/
/*
- * $Id: misc.h,v 1.5 2005/04/27 04:56:18 sra Exp $
+ * $Id: misc.h,v 1.5.672.1 2008/02/18 04:10:16 marka Exp $
*/
#ifndef _ISC_MISC_H
@@ -25,6 +25,7 @@
/*! \file */
#include <stdio.h>
+#include <sys/types.h>
#define bitncmp __bitncmp
/*#define isc_movefile __isc_movefile */
diff --git a/lib/bind/include/netdb.h b/lib/bind/include/netdb.h
index e7026150..651cdd87 100644
--- a/lib/bind/include/netdb.h
+++ b/lib/bind/include/netdb.h
@@ -86,7 +86,7 @@
/*
* @(#)netdb.h 8.1 (Berkeley) 6/2/93
- * $Id: netdb.h,v 1.21 2006/10/02 01:14:36 marka Exp $
+ * $Id: netdb.h,v 1.21.288.1 2008/02/28 05:46:12 marka Exp $
*/
#ifndef _NETDB_H_
@@ -481,7 +481,7 @@ int endservent_r __P((struct servent_data *));
void endservent_r __P((struct servent_data *));
#endif
#ifdef _AIX
-int setnetgrent_r __P((const char *, void **));
+int setnetgrent_r __P((char *, void **));
void endnetgrent_r __P((void **));
/*
* Note: AIX's netdb.h declares innetgr_r() as:
diff --git a/lib/bind/include/resolv.h b/lib/bind/include/resolv.h
index bb5863e9..409a4881 100644
--- a/lib/bind/include/resolv.h
+++ b/lib/bind/include/resolv.h
@@ -50,7 +50,7 @@
/*%
* @(#)resolv.h 8.1 (Berkeley) 6/2/93
- * $Id: resolv.h,v 1.23 2005/08/25 04:41:46 marka Exp $
+ * $Id: resolv.h,v 1.23.564.1 2008/04/03 02:12:21 marka Exp $
*/
#ifndef _RESOLV_H_
@@ -250,6 +250,7 @@ union res_sockaddr_union {
#define RES_NOCHECKNAME 0x00008000 /*%< do not check names for sanity. */
#define RES_KEEPTSIG 0x00010000 /*%< do not strip TSIG records */
#define RES_BLAST 0x00020000 /*%< blast all recursive servers */
+#define RES_NSID 0x00040000 /*%< request name server ID */
#define RES_NOTLDQUERY 0x00100000 /*%< don't unqualified name as a tld */
#define RES_USE_DNSSEC 0x00200000 /*%< use DNSSEC using OK bit in OPT */
/* #define RES_DEBUG2 0x00400000 */ /* nslookup internal */
@@ -396,6 +397,7 @@ extern const struct res_sym __p_rcode_syms[];
#define sym_ntos __sym_ntos
#define sym_ston __sym_ston
#define res_nopt __res_nopt
+#define res_nopt_rdata __res_nopt_rdata
#define res_ndestroy __res_ndestroy
#define res_nametoclass __res_nametoclass
#define res_nametotype __res_nametotype
@@ -482,6 +484,8 @@ int res_findzonecut2 __P((res_state, const char *, ns_class, int,
union res_sockaddr_union *, int));
void res_nclose __P((res_state));
int res_nopt __P((res_state, int, u_char *, int, int));
+int res_nopt_rdata __P((res_state, int, u_char *, int, u_char *,
+ u_short, u_short, u_char *));
void res_send_setqhook __P((res_send_qhook));
void res_send_setrhook __P((res_send_rhook));
int __res_vinit __P((res_state, int));
diff --git a/lib/bind/inet/Makefile.in b/lib/bind/inet/Makefile.in
index bd5d352d..31d8baa8 100644
--- a/lib/bind/inet/Makefile.in
+++ b/lib/bind/inet/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2001 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.7 2007/06/19 23:47:13 tbox Exp $
+# $Id: Makefile.in,v 1.7.128.2 2008/03/20 23:46:31 tbox Exp $
srcdir= @srcdir@
VPATH = @srcdir@
@@ -30,6 +30,6 @@ SRCS= inet_addr.c inet_cidr_ntop.c inet_cidr_pton.c inet_data.c \
TARGETS= ${OBJS}
-CINCLUDES= -I.. -I${srcdir}/../include
+CINCLUDES= -I.. -I../include -I${srcdir}/../include
@BIND9_MAKE_RULES@
diff --git a/lib/bind/irs/Makefile.in b/lib/bind/irs/Makefile.in
index d5b73405..457038aa 100644
--- a/lib/bind/irs/Makefile.in
+++ b/lib/bind/irs/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2001 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.12 2007/06/19 23:47:13 tbox Exp $
+# $Id: Makefile.in,v 1.12.128.2 2008/03/20 23:46:31 tbox Exp $
srcdir= @srcdir@
VPATH = @srcdir@
@@ -65,6 +65,6 @@ WANT_IRS_THREADSGR_OBJS=getgrent_r.@O@
TARGETS= ${OBJS}
-CINCLUDES= -I.. -I${srcdir}/../include
+CINCLUDES= -I.. -I../include -I${srcdir}/../include
@BIND9_MAKE_RULES@
diff --git a/lib/bind/irs/getnetgrent.c b/lib/bind/irs/getnetgrent.c
index 0adeb616..697de4bd 100644
--- a/lib/bind/irs/getnetgrent.c
+++ b/lib/bind/irs/getnetgrent.c
@@ -16,7 +16,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: getnetgrent.c,v 1.4 2005/04/27 04:56:25 sra Exp $";
+static const char rcsid[] = "$Id: getnetgrent.c,v 1.4.672.1 2008/02/27 00:05:45 marka Exp $";
#endif /* LIBC_SCCS and not lint */
/* Imports */
@@ -76,7 +76,9 @@ innetgr(INNETGR_ARGS) {
}
int
-getnetgrent(char **host, char **user, char **domain) {
+getnetgrent(NGR_R_CONST char **host, NGR_R_CONST char **user,
+ NGR_R_CONST char **domain)
+{
struct net_data *net_data = init();
const char *ch, *cu, *cd;
int ret;
diff --git a/lib/bind/irs/getnetgrent_r.c b/lib/bind/irs/getnetgrent_r.c
index fe461f72..331f7b36 100644
--- a/lib/bind/irs/getnetgrent_r.c
+++ b/lib/bind/irs/getnetgrent_r.c
@@ -16,7 +16,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: getnetgrent_r.c,v 1.11 2005/09/03 12:41:38 marka Exp $";
+static const char rcsid[] = "$Id: getnetgrent_r.c,v 1.11.558.2 2008/02/28 05:46:12 marka Exp $";
#endif /* LIBC_SCCS and not lint */
#include <port_before.h>
@@ -33,10 +33,13 @@ static const char rcsid[] = "$Id: getnetgrent_r.c,v 1.11 2005/09/03 12:41:38 mar
#include <port_after.h>
#ifdef NGR_R_RETURN
+#ifndef NGR_R_PRIVATE
+#define NGR_R_PRIVATE 0
+#endif
static NGR_R_RETURN
-copy_protoent(char **, char **, char **, const char *, const char *,
- const char *, NGR_R_COPY_ARGS);
+copy_protoent(NGR_R_CONST char **, NGR_R_CONST char **, NGR_R_CONST char **,
+ const char *, const char *, const char *, NGR_R_COPY_ARGS);
NGR_R_RETURN
innetgr_r(const char *netgroup, const char *host, const char *user,
@@ -58,8 +61,10 @@ innetgr_r(const char *netgroup, const char *host, const char *user,
*/
NGR_R_RETURN
-getnetgrent_r(char **machinep, char **userp, char **domainp, NGR_R_ARGS) {
- char *mp, *up, *dp;
+getnetgrent_r(NGR_R_CONST char **machinep, NGR_R_CONST char **userp,
+ NGR_R_CONST char **domainp, NGR_R_ARGS)
+{
+ NGR_R_CONST char *mp, *up, *dp;
int res = getnetgrent(&mp, &up, &dp);
if (res != 1)
@@ -69,15 +74,24 @@ getnetgrent_r(char **machinep, char **userp, char **domainp, NGR_R_ARGS) {
mp, up, dp, NGR_R_COPY));
}
+#if NGR_R_PRIVATE == 2
+struct private {
+ char *buf;
+};
+
+#endif
NGR_R_SET_RETURN
-#ifdef NGR_R_ENT_ARGS
-setnetgrent_r(const char *netgroup, NGR_R_ENT_ARGS)
+#ifdef NGR_R_SET_ARGS
+setnetgrent_r(NGR_R_SET_CONST char *netgroup, NGR_R_SET_ARGS)
#else
-setnetgrent_r(const char *netgroup)
+setnetgrent_r(NGR_R_SET_CONST char *netgroup)
#endif
{
+#if NGR_R_PRIVATE == 2
+ struct private *p;
+#endif
char *tmp;
-#if defined(NGR_R_ENT_ARGS) && !defined(NGR_R_PRIVATE)
+#if defined(NGR_R_SET_ARGS) && NGR_R_PRIVATE == 0
UNUSED(buf);
UNUSED(buflen);
#endif
@@ -85,8 +99,17 @@ setnetgrent_r(const char *netgroup)
DE_CONST(netgroup, tmp);
setnetgrent(tmp);
-#ifdef NGR_R_PRIVATE
+#if NGR_R_PRIVATE == 1
*buf = NULL;
+#elif NGR_R_PRIVATE == 2
+ *buf = p = malloc(sizeof(struct private));
+ if (p == NULL)
+#ifdef NGR_R_SET_RESULT
+ return (NGR_R_BAD);
+#else
+ return;
+#endif
+ p->buf = NULL;
#endif
#ifdef NGR_R_SET_RESULT
return (NGR_R_SET_RESULT);
@@ -94,22 +117,29 @@ setnetgrent_r(const char *netgroup)
}
NGR_R_END_RETURN
-#ifdef NGR_R_ENT_ARGS
-endnetgrent_r(NGR_R_ENT_ARGS)
+#ifdef NGR_R_END_ARGS
+endnetgrent_r(NGR_R_END_ARGS)
#else
endnetgrent_r(void)
#endif
{
-#if defined(NGR_R_ENT_ARGS) && !defined(NGR_R_PRIVATE)
+#if NGR_R_PRIVATE == 2
+ struct private *p = buf;
+#endif
+#if defined(NGR_R_SET_ARGS) && NGR_R_PRIVATE == 0
UNUSED(buf);
UNUSED(buflen);
#endif
endnetgrent();
-#ifdef NGR_R_PRIVATE
+#if NGR_R_PRIVATE == 1
if (*buf != NULL)
free(*buf);
*buf = NULL;
+#elif NGR_R_PRIVATE == 2
+ if (p->buf != NULL)
+ free(p->buf);
+ free(p);
#endif
NGR_R_END_RESULT(NGR_R_OK);
}
@@ -117,9 +147,13 @@ endnetgrent_r(void)
/* Private */
static int
-copy_protoent(char **machinep, char **userp, char **domainp,
- const char *mp, const char *up, const char *dp,
- NGR_R_COPY_ARGS) {
+copy_protoent(NGR_R_CONST char **machinep, NGR_R_CONST char **userp,
+ NGR_R_CONST char **domainp, const char *mp, const char *up,
+ const char *dp, NGR_R_COPY_ARGS)
+{
+#if NGR_R_PRIVATE == 2
+ struct private *p = buf;
+#endif
char *cp;
int n;
int len;
@@ -130,12 +164,20 @@ copy_protoent(char **machinep, char **userp, char **domainp,
if (up != NULL) len += strlen(up) + 1;
if (dp != NULL) len += strlen(dp) + 1;
-#ifdef NGR_R_PRIVATE
- free(*buf);
+#if NGR_R_PRIVATE == 1
+ if (*buf != NULL)
+ free(*buf);
*buf = malloc(len);
if (*buf == NULL)
return(NGR_R_BAD);
cp = *buf;
+#elif NGR_R_PRIVATE == 2
+ if (p->buf)
+ free(p->buf);
+ p->buf = malloc(len);
+ if (p->buf == NULL)
+ return(NGR_R_BAD);
+ cp = p->buf;
#else
if (len > (int)buflen) {
errno = ERANGE;
@@ -144,7 +186,6 @@ copy_protoent(char **machinep, char **userp, char **domainp,
cp = buf;
#endif
-
if (mp != NULL) {
n = strlen(mp) + 1;
strcpy(cp, mp);
diff --git a/lib/bind/irs/irp.c b/lib/bind/irs/irp.c
index 3bd43783..15e7dbdf 100644
--- a/lib/bind/irs/irp.c
+++ b/lib/bind/irs/irp.c
@@ -16,7 +16,7 @@
*/
#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: irp.c,v 1.9 2006/03/09 23:57:56 marka Exp $";
+static const char rcsid[] = "$Id: irp.c,v 1.9.394.2 2008/02/28 05:46:12 marka Exp $";
#endif
/* Imports */
@@ -528,7 +528,8 @@ irs_irp_send_command(struct irp_p *pvt, const char *fmt, ...) {
}
va_start(ap, fmt);
- todo = vsprintf(buffer, fmt, ap);
+ (void) vsprintf(buffer, fmt, ap);
+ todo = strlen(buffer);
va_end(ap);
if (todo > (int)sizeof(buffer) - 3) {
syslog(LOG_CRIT, "memory overrun in irs_irp_send_command()");
diff --git a/lib/bind/isc/Makefile.in b/lib/bind/isc/Makefile.in
index dcd02487..a7df580a 100644
--- a/lib/bind/isc/Makefile.in
+++ b/lib/bind/isc/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2001 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.9 2007/06/19 23:47:13 tbox Exp $
+# $Id: Makefile.in,v 1.9.128.2 2008/03/20 23:46:31 tbox Exp $
srcdir= @srcdir@
VPATH = @srcdir@
@@ -30,6 +30,6 @@ SRCS= assertions.c base64.c bitncmp.c ctl_clnt.c ctl_p.c \
TARGETS= ${OBJS}
-CINCLUDES= -I.. -I${srcdir}/../include
+CINCLUDES= -I.. -I../include -I${srcdir}/../include
@BIND9_MAKE_RULES@
diff --git a/lib/bind/isc/ctl_clnt.c b/lib/bind/isc/ctl_clnt.c
index 5438868f..cc8ee2f9 100644
--- a/lib/bind/isc/ctl_clnt.c
+++ b/lib/bind/isc/ctl_clnt.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ctl_clnt.c,v 1.9 2007/05/18 06:22:03 marka Exp $";
+static const char rcsid[] = "$Id: ctl_clnt.c,v 1.9.140.1 2008/02/18 04:10:16 marka Exp $";
#endif /* not lint */
/*
@@ -38,6 +38,9 @@ static const char rcsid[] = "$Id: ctl_clnt.c,v 1.9 2007/05/18 06:22:03 marka Exp
#include <string.h>
#include <time.h>
#include <unistd.h>
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
#include <isc/assertions.h>
#include <isc/ctl.h>
diff --git a/lib/bind/isc/ctl_srvr.c b/lib/bind/isc/ctl_srvr.c
index 836b85a8..919dec7c 100644
--- a/lib/bind/isc/ctl_srvr.c
+++ b/lib/bind/isc/ctl_srvr.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ctl_srvr.c,v 1.8 2006/12/07 04:46:27 marka Exp $";
+static const char rcsid[] = "$Id: ctl_srvr.c,v 1.8.246.1 2008/02/18 04:10:16 marka Exp $";
#endif /* not lint */
/*
@@ -40,6 +40,9 @@ static const char rcsid[] = "$Id: ctl_srvr.c,v 1.8 2006/12/07 04:46:27 marka Exp
#include <time.h>
#include <unistd.h>
#include <fcntl.h>
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
#include <isc/assertions.h>
#include <isc/ctl.h>
diff --git a/lib/bind/isc/logging.c b/lib/bind/isc/logging.c
index b2daff40..313a6c80 100644
--- a/lib/bind/isc/logging.c
+++ b/lib/bind/isc/logging.c
@@ -16,7 +16,7 @@
*/
#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: logging.c,v 1.7 2005/04/27 04:56:38 sra Exp $";
+static const char rcsid[] = "$Id: logging.c,v 1.7.672.1 2008/02/28 05:46:12 marka Exp $";
#endif /* not lint */
#include "port_before.h"
@@ -43,12 +43,6 @@ static const char rcsid[] = "$Id: logging.c,v 1.7 2005/04/27 04:56:38 sra Exp $"
#include "port_after.h"
-#ifdef VSPRINTF_CHAR
-# define VSPRINTF(x) strlen(vsprintf/**/x)
-#else
-# define VSPRINTF(x) ((size_t)vsprintf x)
-#endif
-
#include "logging_p.h"
static const int syslog_priority[] = { LOG_DEBUG, LOG_INFO, LOG_NOTICE,
@@ -363,8 +357,8 @@ log_vwrite(log_context lc, int category, int level, const char *format,
continue;
if (!did_vsprintf) {
- if (VSPRINTF((lc->buffer, format, args)) >
- (size_t)LOG_BUFFER_SIZE) {
+ (void)vsprintf(lc->buffer, format, args);
+ if (strlen(lc->buffer) > (size_t)LOG_BUFFER_SIZE) {
syslog(LOG_CRIT,
"memory overrun in log_vwrite()");
exit(1);
diff --git a/lib/bind/nameser/Makefile.in b/lib/bind/nameser/Makefile.in
index 86365265..695d17c6 100644
--- a/lib/bind/nameser/Makefile.in
+++ b/lib/bind/nameser/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2001 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.7 2007/06/19 23:47:13 tbox Exp $
+# $Id: Makefile.in,v 1.7.128.2 2008/03/20 23:46:31 tbox Exp $
srcdir= @srcdir@
VPATH = @srcdir@
@@ -26,6 +26,6 @@ SRCS= ns_date.c ns_name.c ns_netint.c ns_parse.c ns_print.c \
TARGETS= ${OBJS}
-CINCLUDES= -I.. -I${srcdir}/../include
+CINCLUDES= -I.. -I../include -I${srcdir}/../include
@BIND9_MAKE_RULES@
diff --git a/lib/bind/port_after.h.in b/lib/bind/port_after.h.in
index 6449301b..b7496a2d 100644
--- a/lib/bind/port_after.h.in
+++ b/lib/bind/port_after.h.in
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: port_after.h.in,v 1.53.128.2 2008/01/23 02:15:32 tbox Exp $ */
+/* $Id: port_after.h.in,v 1.53.128.7 2008/02/28 05:46:12 marka Exp $ */
#ifndef port_after_h
#define port_after_h
@@ -35,12 +35,20 @@
#include <sys/select.h>
#endif /* HAVE_SYS_SELECT_H */
+#ifdef REENABLE_SEND
+#undef send
+#endif
+
@NEED_PSELECT@
@HAVE_SA_LEN@
@HAVE_MINIMUM_IFREQ@
@NEED_DAEMON@
@NEED_STRSEP@
@NEED_STRERROR@
+#ifdef NEED_STRERROR
+const char *isc_strerror(int);
+#define strerror isc_strerror
+#endif
@HAS_INET6_STRUCTS@
@HAVE_SIN6_SCOPE_ID@
@NEED_IN6ADDR_ANY@
@@ -49,7 +57,6 @@
@NEED_GETTIMEOFDAY@
@HAVE_STRNDUP@
@USE_FIONBIO_IOCTL@
-@USE_SYSERROR_LIST@
@INNETGR_ARGS@
@SETNETGRENT_ARGS@
@USE_IFNAMELINKID@
@@ -335,16 +342,16 @@ innetgr_r(const char *, const char *, const char *, const char *);
#endif
#ifdef NEED_SETNETGRENT_R
-#ifdef NGR_R_ENT_ARGS
-NGR_R_SET_RETURN setnetgrent_r(const char *netgroup, NGR_R_ENT_ARGS);
+#ifdef NGR_R_SET_ARGS
+NGR_R_SET_RETURN setnetgrent_r(NGR_R_SET_CONST char *netgroup, NGR_R_SET_ARGS);
#else
-NGR_R_SET_RETURN setnetgrent_r(const char *netgroup);
+NGR_R_SET_RETURN setnetgrent_r(NGR_R_SET_CONST char *netgroup);
#endif
#endif
#ifdef NEED_ENDNETGRENT_R
-#ifdef NGR_R_ENT_ARGS
-NGR_R_END_RETURN endnetgrent_r(NGR_R_ENT_ARGS);
+#ifdef NGR_R_END_ARGS
+NGR_R_END_RETURN endnetgrent_r(NGR_R_END_ARGS);
#else
NGR_R_END_RETURN endnetgrent_r(void);
#endif
@@ -410,10 +417,12 @@ int isc__gettimeofday(struct timeval *tvp, struct _TIMEZONE *tzp);
int isc__gettimeofday(struct timeval *tp, struct timezone *tzp);
#endif
-int getnetgrent(char **machinep, char **userp, char **domainp);
+int getnetgrent(NGR_R_CONST char **machinep, NGR_R_CONST char **userp,
+ NGR_R_CONST char **domainp);
#ifdef NGR_R_ARGS
-int getnetgrent_r(char **machinep, char **userp, char **domainp, NGR_R_ARGS);
+int getnetgrent_r(NGR_R_CONST char **machinep, NGR_R_CONST char **userp,
+ NGR_R_CONST char **domainp, NGR_R_ARGS);
#endif
#ifdef SETNETGRENT_ARGS
@@ -431,11 +440,87 @@ int innetgr(const char *netgroup, const char *machine,
const char *user, const char *domain);
#endif
-#ifdef NGR_R_ENT_ARGS
+#ifdef NGR_R_SET_ARGS
NGR_R_SET_RETURN
-setnetgrent_r(const char *netgroup, NGR_R_ENT_ARGS);
+setnetgrent_r(NGR_R_SET_CONST char *netgroup, NGR_R_SET_ARGS);
#else
NGR_R_SET_RETURN
-setnetgrent_r(const char *netgroup);
+setnetgrent_r(NGR_R_SET_CONST char *netgroup);
+#endif
+
+#ifdef NEED_STRTOUL
+unsigned long strtoul(const char *, char **, int);
+#endif
+
+#ifdef NEED_SUN4PROTOS
+#include <stdarg.h>
+#ifndef __SIZE_TYPE__
+#define __SIZE_TYPE__ int
+#endif
+struct sockaddr;
+struct iovec;
+struct timeval;
+struct timezone;
+int fprintf(FILE *, const char *, ...);
+int getsockname(int, struct sockaddr *, int *);
+int getpeername(int, struct sockaddr *, int *);
+int socket(int, int, int);
+int connect(int, const struct sockaddr *, int);
+int writev(int, struct iovec *, int);
+int readv(int, struct iovec *, int);
+int send(int, const char *, int, int);
+void bzero(char *, int);
+int recvfrom(int, char *, int, int, struct sockaddr *, int *);
+int syslog(int, const char *, ... );
+int printf(const char *, ...);
+__SIZE_TYPE__ fread(void *, __SIZE_TYPE__, __SIZE_TYPE__, FILE *);
+__SIZE_TYPE__ fwrite(const void *, __SIZE_TYPE__, __SIZE_TYPE__, FILE *);
+int fclose(FILE *);
+int ungetc(int, FILE *);
+int scanf(const char *, ...);
+int sscanf(const char *, const char *, ... );
+int tolower(int);
+int toupper(int);
+int strcasecmp(const char *, const char *);
+int strncasecmp(const char *, const char *, int);
+int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+#ifdef gettimeofday
+#undef gettimeofday
+int gettimeofday(struct timeval *, struct timezone *);
+#define gettimeofday isc__gettimeofday
+#else
+int gettimeofday(struct timeval *, struct timezone *);
+#endif
+long strtol(const char*, char **, int);
+int fseek(FILE *, long, int);
+int setsockopt(int, int, int, const char *, int);
+int bind(int, const struct sockaddr *, int);
+void bcopy(char *, char *, int);
+int fputc(char, FILE *);
+int listen(int, int);
+int accept(int, struct sockaddr *, int *);
+int getsockopt(int, int, int, char *, int *);
+int vfprintf(FILE *, const char *, va_list);
+int fflush(FILE *);
+int fgetc(FILE *);
+int fputs(const char *, FILE *);
+int fchown(int, int, int);
+void setbuf(FILE *, char *);
+int gethostname(char *, int);
+int rename(const char *, const char *);
+time_t time(time_t *);
+int fscanf(FILE *, const char *, ...);
+int sscanf(const char *, const char *, ...);
+int ioctl(int, int, caddr_t);
+void perror(const char *);
+
+#if !defined(__USE_FIXED_PROTOTYPES__) && !defined(__cplusplus) && !defined(__STRICT_ANSI__)
+/*
+ * 'gcc -ansi' changes the prototype for vsprintf().
+ * Use this prototype when 'gcc -ansi' is not in effect.
+ */
+char *vsprintf(char *, const char *, va_list);
#endif
#endif
+
+#endif
diff --git a/lib/bind/port_before.h.in b/lib/bind/port_before.h.in
index 19552f92..49100912 100644
--- a/lib/bind/port_before.h.in
+++ b/lib/bind/port_before.h.in
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2005-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,12 +15,16 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: port_before.h.in,v 1.27 2007/06/18 23:47:34 tbox Exp $ */
+/* $Id: port_before.h.in,v 1.27.128.3 2008/02/28 05:46:12 marka Exp $ */
#ifndef port_before_h
#define port_before_h
#include <config.h>
+#ifdef NEED_SUN4PROTOS
+#define _PARAMS(x) x
+#endif
+
struct group; /* silence warning */
struct passwd; /* silence warning */
struct timeval; /* silence warning */
@@ -34,8 +38,8 @@ struct timezone; /* silence warning */
#ifdef ISC_PLATFORM_NEEDTIMESPEC
#include <time.h> /* For time_t */
struct timespec {
- time_t tv_sec; /* seconds */
- long tv_nsec; /* nanoseconds */
+ time_t tv_sec; /* seconds */
+ long tv_nsec; /* nanoseconds */
};
#endif
#ifndef HAVE_MEMMOVE
@@ -100,15 +104,22 @@ struct timespec {
@NGR_R_BAD@
@NGR_R_COPY@
@NGR_R_COPY_ARGS@
+@NGR_R_CONST@
@NGR_R_END_RESULT@
@NGR_R_END_RETURN@
-@NGR_R_ENT_ARGS@
+@NGR_R_END_ARGS@
@NGR_R_OK@
@NGR_R_RETURN@
+@NGR_R_SET_CONST@
@NGR_R_SET_RESULT@
@NGR_R_SET_RETURN@
+@NGR_R_SET_ARGS@
@NGR_R_PRIVATE@
+#if !defined(NGR_R_SET_ARGS) && defined(NGR_R_END_ARGS)
+#define NGR_R_SET_ARGS NGR_R_END_ARGS
+#endif
+
@PROTO_R_ARGS@
@PROTO_R_BAD@
@PROTO_R_COPY@
@@ -153,11 +164,11 @@ struct timespec {
#define DE_CONST(konst, var) \
- do { \
- union { const void *k; void *v; } _u; \
- _u.k = konst; \
- var = _u.v; \
- } while (0)
+ do { \
+ union { const void *k; void *v; } _u; \
+ _u.k = konst; \
+ var = _u.v; \
+ } while (0)
#define UNUSED(x) (x) = (x)
diff --git a/lib/bind/resolv/Makefile.in b/lib/bind/resolv/Makefile.in
index d5bbb674..d6ebd60c 100644
--- a/lib/bind/resolv/Makefile.in
+++ b/lib/bind/resolv/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2001 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.8 2007/06/19 23:47:16 tbox Exp $
+# $Id: Makefile.in,v 1.8.128.2 2008/03/20 23:46:31 tbox Exp $
srcdir= @srcdir@
VPATH = @srcdir@
@@ -28,7 +28,7 @@ SRCS= herror.c mtctxres.c res_comp.c res_data.c res_debug.c \
TARGETS= ${OBJS}
-CINCLUDES= -I.. -I${srcdir}/../include
+CINCLUDES= -I.. -I../include -I${srcdir}/../include
CWARNINGS=
@BIND9_MAKE_RULES@
diff --git a/lib/bind/resolv/res_debug.c b/lib/bind/resolv/res_debug.c
index b12a112f..100133e2 100644
--- a/lib/bind/resolv/res_debug.c
+++ b/lib/bind/resolv/res_debug.c
@@ -95,7 +95,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: res_debug.c,v 1.15 2005/07/28 06:51:50 marka Exp $";
+static const char rcsid[] = "$Id: res_debug.c,v 1.15.574.1 2008/04/03 02:12:21 marka Exp $";
#endif /* LIBC_SCCS and not lint */
#include "port_before.h"
@@ -189,10 +189,56 @@ do_section(const res_state statp,
p_type(ns_rr_type(rr)),
p_class(ns_rr_class(rr)));
else if (section == ns_s_ar && ns_rr_type(rr) == ns_t_opt) {
+ u_int16_t optcode, optlen, rdatalen = ns_rr_rdlen(rr);
u_int32_t ttl = ns_rr_ttl(rr);
+
fprintf(file,
"; EDNS: version: %u, udp=%u, flags=%04x\n",
(ttl>>16)&0xff, ns_rr_class(rr), ttl&0xffff);
+
+ while (rdatalen >= 4) {
+ const u_char *cp = ns_rr_rdata(rr);
+ int i;
+
+ GETSHORT(optcode, cp);
+ GETSHORT(optlen, cp);
+
+ if (optcode == NS_OPT_NSID) {
+ fputs("; NSID: ", file);
+ if (optlen == 0) {
+ fputs("; NSID\n", file);
+ } else {
+ fputs("; NSID: ", file);
+ for (i = 0; i < optlen; i++)
+ fprintf(file, "%02x ",
+ cp[i]);
+ fputs(" (",file);
+ for (i = 0; i < optlen; i++)
+ fprintf(file, "%c",
+ isprint(cp[i])?
+ cp[i] : '.');
+ fputs(")\n", file);
+ }
+ } else {
+ if (optlen == 0) {
+ fprintf(file, "; OPT=%u\n",
+ optcode);
+ } else {
+ fprintf(file, "; OPT=%u: ",
+ optcode);
+ for (i = 0; i < optlen; i++)
+ fprintf(file, "%02x ",
+ cp[i]);
+ fputs(" (",file);
+ for (i = 0; i < optlen; i++)
+ fprintf(file, "%c",
+ isprint(cp[i]) ?
+ cp[i] : '.');
+ fputs(")\n", file);
+ }
+ }
+ rdatalen -= 4 + optlen;
+ }
} else {
n = ns_sprintrr(handle, &rr, NULL, NULL,
buf, buflen);
@@ -204,7 +250,7 @@ do_section(const res_state statp,
buf = malloc(buflen += 1024);
if (buf == NULL) {
fprintf(file,
- ";; memory allocation failure\n");
+ ";; memory allocation failure\n");
return;
}
continue;
@@ -381,7 +427,7 @@ const struct res_sym __p_default_section_syms[] = {
{ns_s_an, "ANSWER", (char *)0},
{ns_s_ns, "AUTHORITY", (char *)0},
{ns_s_ar, "ADDITIONAL", (char *)0},
- {0, (char *)0, (char *)0}
+ {0, (char *)0, (char *)0}
};
const struct res_sym __p_update_section_syms[] = {
@@ -389,7 +435,7 @@ const struct res_sym __p_update_section_syms[] = {
{S_PREREQ, "PREREQUISITE", (char *)0},
{S_UPDATE, "UPDATE", (char *)0},
{S_ADDT, "ADDITIONAL", (char *)0},
- {0, (char *)0, (char *)0}
+ {0, (char *)0, (char *)0}
};
const struct res_sym __p_key_syms[] = {
@@ -617,6 +663,7 @@ p_option(u_long option) {
case RES_USE_INET6: return "inet6";
#ifdef RES_USE_EDNS0 /*%< KAME extension */
case RES_USE_EDNS0: return "edns0";
+ case RES_NSID: return "nsid";
#endif
#ifdef RES_USE_DNAME
case RES_USE_DNAME: return "dname";
diff --git a/lib/bind/resolv/res_mkquery.c b/lib/bind/resolv/res_mkquery.c
index 09133baf..1392b6bb 100644
--- a/lib/bind/resolv/res_mkquery.c
+++ b/lib/bind/resolv/res_mkquery.c
@@ -70,7 +70,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)res_mkquery.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: res_mkquery.c,v 1.6 2005/04/27 04:56:42 sra Exp $";
+static const char rcsid[] = "$Id: res_mkquery.c,v 1.6.672.1 2008/04/03 02:12:21 marka Exp $";
#endif /* LIBC_SCCS and not lint */
#include "port_before.h"
@@ -203,9 +203,6 @@ res_nmkquery(res_state statp,
#ifdef RES_USE_EDNS0
/* attach OPT pseudo-RR, as documented in RFC2671 (EDNS0). */
-#ifndef T_OPT
-#define T_OPT 41
-#endif
int
res_nopt(res_state statp,
@@ -230,13 +227,14 @@ res_nopt(res_state statp,
if ((ep - cp) < 1 + RRFIXEDSZ)
return (-1);
- *cp++ = 0; /*%< "." */
- ns_put16(T_OPT, cp); /*%< TYPE */
+ *cp++ = 0; /*%< "." */
+ ns_put16(ns_t_opt, cp); /*%< TYPE */
cp += INT16SZ;
- ns_put16(anslen & 0xffff, cp); /*%< CLASS = UDP payload size */
+ ns_put16(anslen & 0xffff, cp); /*%< CLASS = UDP payload size */
cp += INT16SZ;
- *cp++ = NOERROR; /*%< extended RCODE */
- *cp++ = 0; /*%< EDNS version */
+ *cp++ = NOERROR; /*%< extended RCODE */
+ *cp++ = 0; /*%< EDNS version */
+
if (statp->options & RES_USE_DNSSEC) {
#ifdef DEBUG
if (statp->options & RES_DEBUG)
@@ -246,12 +244,60 @@ res_nopt(res_state statp,
}
ns_put16(flags, cp);
cp += INT16SZ;
- ns_put16(0, cp); /*%< RDLEN */
+
+ ns_put16(0U, cp); /*%< RDLEN */
cp += INT16SZ;
+
hp->arcount = htons(ntohs(hp->arcount) + 1);
return (cp - buf);
}
+
+/*
+ * Construct variable data (RDATA) block for OPT psuedo-RR, append it
+ * to the buffer, then update the RDLEN field (previously set to zero by
+ * res_nopt()) with the new RDATA length.
+ */
+int
+res_nopt_rdata(res_state statp,
+ int n0, /*%< current offset in buffer */
+ u_char *buf, /*%< buffer to put query */
+ int buflen, /*%< size of buffer */
+ u_char *rdata, /*%< ptr to start of opt rdata */
+ u_short code, /*%< OPTION-CODE */
+ u_short len, /*%< OPTION-LENGTH */
+ u_char *data) /*%< OPTION_DATA */
+{
+ register u_char *cp, *ep;
+
+#ifdef DEBUG
+ if ((statp->options & RES_DEBUG) != 0U)
+ printf(";; res_nopt_rdata()\n");
+#endif
+
+ cp = buf + n0;
+ ep = buf + buflen;
+
+ if ((ep - cp) < (4 + len))
+ return (-1);
+
+ if (rdata < (buf + 2) || rdata >= ep)
+ return (-1);
+
+ ns_put16(code, cp);
+ cp += INT16SZ;
+
+ ns_put16(len, cp);
+ cp += INT16SZ;
+
+ memcpy(cp, data, len);
+ cp += len;
+
+ len = cp - rdata;
+ ns_put16(len, rdata - 2); /* Update RDLEN field */
+
+ return (cp - buf);
+}
#endif
/*! \file */
diff --git a/lib/bind/resolv/res_query.c b/lib/bind/resolv/res_query.c
index 8dd68e8d..4a39c8bb 100644
--- a/lib/bind/resolv/res_query.c
+++ b/lib/bind/resolv/res_query.c
@@ -70,7 +70,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)res_query.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: res_query.c,v 1.8 2005/04/27 04:56:42 sra Exp $";
+static const char rcsid[] = "$Id: res_query.c,v 1.8.672.2 2008/04/03 10:49:22 marka Exp $";
#endif /* LIBC_SCCS and not lint */
#include "port_before.h"
@@ -116,8 +116,9 @@ res_nquery(res_state statp,
{
u_char buf[MAXPACKET];
HEADER *hp = (HEADER *) answer;
- int n;
u_int oflags;
+ u_char *rdata;
+ int n;
oflags = statp->_flags;
@@ -132,8 +133,14 @@ again:
buf, sizeof(buf));
#ifdef RES_USE_EDNS0
if (n > 0 && (statp->_flags & RES_F_EDNS0ERR) == 0 &&
- (statp->options & (RES_USE_EDNS0|RES_USE_DNSSEC)) != 0U)
+ (statp->options & (RES_USE_EDNS0|RES_USE_DNSSEC|RES_NSID))) {
n = res_nopt(statp, n, buf, sizeof(buf), anslen);
+ rdata = &buf[n];
+ if (n > 0 && (statp->options & RES_NSID) != 0U) {
+ n = res_nopt_rdata(statp, n, buf, sizeof(buf), rdata,
+ NS_OPT_NSID, 0, NULL);
+ }
+ }
#endif
if (n <= 0) {
#ifdef DEBUG
@@ -143,6 +150,7 @@ again:
RES_SET_H_ERRNO(statp, NO_RECOVERY);
return (n);
}
+
n = res_nsend(statp, buf, n, answer, anslen);
if (n < 0) {
#ifdef RES_USE_EDNS0
diff --git a/lib/bind9/api b/lib/bind9/api
index e1227550..f606e999 100644
--- a/lib/bind9/api
+++ b/lib/bind9/api
@@ -1,3 +1,3 @@
LIBINTERFACE = 40
-LIBREVISION = 1
+LIBREVISION = 3
LIBAGE = 0
diff --git a/lib/bind9/check.c b/lib/bind9/check.c
index 92a3ba73..d06afbda 100644
--- a/lib/bind9/check.c
+++ b/lib/bind9/check.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2001-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: check.c,v 1.86 2007/12/14 01:27:12 marka Exp $ */
+/* $Id: check.c,v 1.86.10.4 2008/04/23 21:43:57 each Exp $ */
/*! \file */
@@ -46,10 +46,6 @@
#include <bind9/check.h>
-#ifndef DNS_RDATASET_FIXED
-#define DNS_RDATASET_FIXED 1
-#endif
-
static void
freekey(char *key, unsigned int type, isc_symvalue_t value, void *userarg) {
UNUSED(type);
@@ -128,7 +124,8 @@ check_orderent(const cfg_obj_t *ent, isc_log_t *logctx) {
} else if (strcasecmp(cfg_obj_asstring(obj), "fixed") == 0) {
#if !DNS_RDATASET_FIXED
cfg_obj_log(obj, logctx, ISC_LOG_WARNING,
- "rrset-order: order 'fixed' not fully implemented");
+ "rrset-order: order 'fixed' was disabled at "
+ "compilation time");
#endif
} else if (strcasecmp(cfg_obj_asstring(obj), "random") != 0 &&
strcasecmp(cfg_obj_asstring(obj), "cyclic") != 0) {
@@ -222,13 +219,24 @@ check_dual_stack(const cfg_obj_t *options, isc_log_t *logctx) {
}
static isc_result_t
-check_forward(const cfg_obj_t *options, isc_log_t *logctx) {
+check_forward(const cfg_obj_t *options, const cfg_obj_t *global,
+ isc_log_t *logctx)
+{
const cfg_obj_t *forward = NULL;
const cfg_obj_t *forwarders = NULL;
(void)cfg_map_get(options, "forward", &forward);
(void)cfg_map_get(options, "forwarders", &forwarders);
+ if (forwarders != NULL && global != NULL) {
+ const char *file = cfg_obj_file(global);
+ unsigned int line = cfg_obj_line(global);
+ cfg_obj_log(forwarders, logctx, ISC_LOG_ERROR,
+ "forwarders declared in root zone and "
+ "in general configuration: %s:%u",
+ file, line);
+ return (ISC_R_FAILURE);
+ }
if (forward != NULL && forwarders == NULL) {
cfg_obj_log(forward, logctx, ISC_LOG_ERROR,
"no matching 'forwarders' statement");
@@ -380,7 +388,7 @@ checkacl(const char *aclname, cfg_aclconfctx_t *actx, const cfg_obj_t *zconfig,
if (aclobj == NULL)
return (ISC_R_SUCCESS);
result = cfg_acl_fromconfig(aclobj, config, logctx,
- actx, mctx, 0, &acl);
+ actx, mctx, 0, &acl);
if (acl != NULL)
dns_acl_detach(&acl);
return (result);
@@ -392,9 +400,9 @@ check_viewacls(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions,
{
isc_result_t result = ISC_R_SUCCESS, tresult;
int i = 0;
-
+
static const char *acls[] = { "allow-query", "allow-query-on",
- "allow-query-cache", "allow-query-cache-on",
+ "allow-query-cache", "allow-query-cache-on",
"blackhole", "match-clients", "match-destinations",
"sortlist", NULL };
@@ -402,7 +410,7 @@ check_viewacls(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions,
tresult = checkacl(acls[i++], actx, NULL, voptions, config,
logctx, mctx);
if (tresult != ISC_R_SUCCESS)
- result = tresult;
+ result = tresult;
}
return (result);
}
@@ -424,8 +432,8 @@ check_recursionacls(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions,
int i = 0;
static const char *acls[] = { "allow-recursion", "allow-recursion-on",
- NULL };
-
+ NULL };
+
if (voptions != NULL)
cfg_map_get(voptions, "recursion", &obj);
if (obj == NULL && config != NULL) {
@@ -456,14 +464,14 @@ check_recursionacls(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions,
if (options != NULL)
cfg_map_get(options, acls[i], &aclobj);
}
- if (aclobj == NULL)
+ if (aclobj == NULL)
continue;
tresult = cfg_acl_fromconfig(aclobj, config, logctx,
actx, mctx, 0, &acl);
if (tresult != ISC_R_SUCCESS)
- result = tresult;
+ result = tresult;
if (acl == NULL)
continue;
@@ -480,7 +488,7 @@ check_recursionacls(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions,
if (acl != NULL)
dns_acl_detach(&acl);
- }
+ }
return (result);
}
@@ -544,8 +552,8 @@ check_options(const cfg_obj_t *options, isc_log_t *logctx, isc_mem_t *mctx) {
(void)cfg_map_get(options, "preferred-glue", &obj);
if (obj != NULL) {
const char *str;
- str = cfg_obj_asstring(obj);
- if (strcasecmp(str, "a") != 0 &&
+ str = cfg_obj_asstring(obj);
+ if (strcasecmp(str, "a") != 0 &&
strcasecmp(str, "aaaa") != 0 &&
strcasecmp(str, "none") != 0)
cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
@@ -574,7 +582,7 @@ check_options(const cfg_obj_t *options, isc_log_t *logctx, isc_mem_t *mctx) {
isc_buffer_add(&b, strlen(str));
tresult = dns_name_fromtext(name, &b,
dns_rootname,
- ISC_FALSE, NULL);
+ ISC_FALSE, NULL);
if (tresult != ISC_R_SUCCESS) {
cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
"bad domain name '%s'",
@@ -584,7 +592,7 @@ check_options(const cfg_obj_t *options, isc_log_t *logctx, isc_mem_t *mctx) {
}
}
}
-
+
/*
* Set supported DNSSEC algorithms.
*/
@@ -780,7 +788,7 @@ get_masters_def(const cfg_obj_t *cctx, const char *name, const cfg_obj_t **ret)
static isc_result_t
validate_masters(const cfg_obj_t *obj, const cfg_obj_t *config,
- isc_uint32_t *countp, isc_log_t *logctx, isc_mem_t *mctx)
+ isc_uint32_t *countp, isc_log_t *logctx, isc_mem_t *mctx)
{
isc_result_t result = ISC_R_SUCCESS;
isc_result_t tresult;
@@ -802,7 +810,7 @@ validate_masters(const cfg_obj_t *obj, const cfg_obj_t *config,
newlist:
list = cfg_tuple_get(obj, "addresses");
element = cfg_list_first(list);
- resume:
+ resume:
for ( ;
element != NULL;
element = cfg_list_next(element))
@@ -899,7 +907,7 @@ check_update_policy(const cfg_obj_t *policy, isc_log_t *logctx) {
isc_buffer_init(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
tresult = dns_name_fromtext(dns_fixedname_name(&fixed), &b,
- dns_rootname, ISC_FALSE, NULL);
+ dns_rootname, ISC_FALSE, NULL);
if (tresult != ISC_R_SUCCESS) {
cfg_obj_log(identity, logctx, ISC_LOG_ERROR,
"'%s' is not a valid name", str);
@@ -932,7 +940,7 @@ check_update_policy(const cfg_obj_t *policy, isc_log_t *logctx) {
const cfg_obj_t *typeobj;
isc_textregion_t r;
dns_rdatatype_t type;
-
+
typeobj = cfg_listelt_value(element2);
DE_CONST(cfg_obj_asstring(typeobj), r.base);
r.length = strlen(r.base);
@@ -940,7 +948,7 @@ check_update_policy(const cfg_obj_t *policy, isc_log_t *logctx) {
tresult = dns_rdatatype_fromtext(&type, &r);
if (tresult != ISC_R_SUCCESS) {
cfg_obj_log(typeobj, logctx, ISC_LOG_ERROR,
- "'%s' is not a valid type", r.base);
+ "'%s' is not a valid type", r.base);
result = tresult;
}
}
@@ -978,6 +986,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
dns_rdataclass_t zclass;
dns_fixedname_t fixedname;
isc_buffer_t b;
+ isc_boolean_t root = ISC_FALSE;
static optionstable options[] = {
{ "allow-query", MASTERZONE | SLAVEZONE | STUBZONE | CHECKACL },
@@ -1096,7 +1105,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
isc_buffer_init(&b, zname, strlen(zname));
isc_buffer_add(&b, strlen(zname));
tresult = dns_name_fromtext(dns_fixedname_name(&fixedname), &b,
- dns_rootname, ISC_TRUE, NULL);
+ dns_rootname, ISC_TRUE, NULL);
if (tresult != ISC_R_SUCCESS) {
cfg_obj_log(zconfig, logctx, ISC_LOG_ERROR,
"zone '%s': is not a valid name", zname);
@@ -1111,6 +1120,9 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
"previous definition: %s:%u", logctx, mctx);
if (tresult != ISC_R_SUCCESS)
result = tresult;
+ if (dns_name_equal(dns_fixedname_name(&fixedname),
+ dns_rootname))
+ root = ISC_TRUE;
}
/*
@@ -1141,7 +1153,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
(options[i].allowed & CHECKACL) != 0) {
tresult = checkacl(options[i].name, actx, zconfig,
- voptions, config, logctx, mctx);
+ voptions, config, logctx, mctx);
if (tresult != ISC_R_SUCCESS)
result = tresult;
}
@@ -1230,7 +1242,18 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
/*
* Check that forwarding is reasonable.
*/
- if (check_forward(zoptions, logctx) != ISC_R_SUCCESS)
+ obj = NULL;
+ if (root) {
+ if (voptions != NULL)
+ (void)cfg_map_get(voptions, "forwarders", &obj);
+ if (obj == NULL) {
+ const cfg_obj_t *options = NULL;
+ (void)cfg_map_get(config, "options", &options);
+ if (options != NULL)
+ (void)cfg_map_get(options, "forwarders", &obj);
+ }
+ }
+ if (check_forward(zoptions, obj, logctx) != ISC_R_SUCCESS)
result = ISC_R_FAILURE;
/*
@@ -1260,7 +1283,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
result = tresult;
}
}
-
+
return (result);
}
@@ -1289,7 +1312,7 @@ bind9_check_key(const cfg_obj_t *key, isc_log_t *logctx) {
{ "hmac-sha512", 512 },
{ NULL, 0 }
};
-
+
(void)cfg_map_get(key, "algorithm", &algobj);
(void)cfg_map_get(key, "secret", &secretobj);
if (secretobj == NULL || algobj == NULL) {
@@ -1340,7 +1363,7 @@ bind9_check_key(const cfg_obj_t *key, isc_log_t *logctx) {
(digestbits < 80U)))
cfg_obj_log(algobj, logctx, ISC_LOG_WARNING,
"key '%s' digest-bits too small "
- "[<%u]", keyname,
+ "[<%u]", keyname,
algorithms[i].size/2);
} else {
cfg_obj_log(algobj, logctx, ISC_LOG_ERROR,
@@ -1447,13 +1470,13 @@ rndckey_exists(const cfg_obj_t *keylist, const char *keyname) {
const cfg_listelt_t *element;
const cfg_obj_t *obj;
const char *str;
-
+
if (keylist == NULL)
return (ISC_FALSE);
for (element = cfg_list_first(keylist);
- element != NULL;
- element = cfg_list_next(element))
+ element != NULL;
+ element = cfg_list_next(element))
{
obj = cfg_listelt_value(element);
str = cfg_obj_asstring(cfg_map_getname(obj));
@@ -1572,7 +1595,7 @@ check_servers(const cfg_obj_t *config, const cfg_obj_t *voptions,
}
return (result);
}
-
+
static isc_result_t
check_viewconf(const cfg_obj_t *config, const cfg_obj_t *voptions,
const char *viewname, dns_rdataclass_t vclass,
@@ -1626,10 +1649,11 @@ check_viewconf(const cfg_obj_t *config, const cfg_obj_t *voptions,
const cfg_obj_t *options = NULL;
(void)cfg_map_get(config, "options", &options);
if (options != NULL)
- if (check_forward(options, logctx) != ISC_R_SUCCESS)
+ if (check_forward(options, NULL,
+ logctx) != ISC_R_SUCCESS)
result = ISC_R_FAILURE;
} else {
- if (check_forward(voptions, logctx) != ISC_R_SUCCESS)
+ if (check_forward(voptions, NULL, logctx) != ISC_R_SUCCESS)
result = ISC_R_FAILURE;
}
@@ -1672,7 +1696,7 @@ check_viewconf(const cfg_obj_t *config, const cfg_obj_t *voptions,
isc_symtab_destroy(&symtab);
return (tresult);
}
-
+
if (voptions != NULL) {
keys = NULL;
(void)cfg_map_get(voptions, "key", &keys);
@@ -1763,10 +1787,10 @@ bind9_check_logging(const cfg_obj_t *config, isc_log_t *logctx,
const char *channelname;
const char *catname;
const cfg_obj_t *fileobj = NULL;
- const cfg_obj_t *syslogobj = NULL;
- const cfg_obj_t *nullobj = NULL;
- const cfg_obj_t *stderrobj = NULL;
- const cfg_obj_t *logobj = NULL;
+ const cfg_obj_t *syslogobj = NULL;
+ const cfg_obj_t *nullobj = NULL;
+ const cfg_obj_t *stderrobj = NULL;
+ const cfg_obj_t *logobj = NULL;
isc_result_t result = ISC_R_SUCCESS;
isc_result_t tresult;
isc_symtab_t *symtab = NULL;
@@ -1827,9 +1851,9 @@ bind9_check_logging(const cfg_obj_t *config, isc_log_t *logctx,
cfg_map_get(logobj, "category", &categories);
for (element = cfg_list_first(categories);
- element != NULL;
- element = cfg_list_next(element))
- {
+ element != NULL;
+ element = cfg_list_next(element))
+ {
category = cfg_listelt_value(element);
catname = cfg_obj_asstring(cfg_tuple_get(category, "name"));
if (isc_log_categorybyname(logctx, catname) == NULL) {
@@ -1845,7 +1869,7 @@ bind9_check_logging(const cfg_obj_t *config, isc_log_t *logctx,
channel = cfg_listelt_value(delement);
channelname = cfg_obj_asstring(channel);
tresult = isc_symtab_lookup(symtab, channelname, 1,
- &symvalue);
+ &symvalue);
if (tresult != ISC_R_SUCCESS) {
cfg_obj_log(channel, logctx, ISC_LOG_ERROR,
"undefined channel: '%s'",
@@ -1867,7 +1891,7 @@ bind9_check_controlskeys(const cfg_obj_t *control, const cfg_obj_t *keylist,
const cfg_listelt_t *element;
const cfg_obj_t *key;
const char *keyval;
-
+
control_keylist = cfg_tuple_get(control, "keys");
if (cfg_obj_isvoid(control_keylist))
return (ISC_R_SUCCESS);
@@ -2014,7 +2038,7 @@ bind9_check_namedconf(const cfg_obj_t *config, isc_log_t *logctx,
if (bind9_check_controls(config, logctx, mctx) != ISC_R_SUCCESS)
result = ISC_R_FAILURE;
- if (options != NULL &&
+ if (options != NULL &&
check_order(options, logctx) != ISC_R_SUCCESS)
result = ISC_R_FAILURE;
@@ -2076,7 +2100,7 @@ bind9_check_namedconf(const cfg_obj_t *config, isc_log_t *logctx,
const char *file;
unsigned int line;
RUNTIME_CHECK(isc_symtab_lookup(symtab, key,
- vclass, &symvalue) == ISC_R_SUCCESS);
+ vclass, &symvalue) == ISC_R_SUCCESS);
file = cfg_obj_file(symvalue.as_cpointer);
line = cfg_obj_line(symvalue.as_cpointer);
cfg_obj_log(view, logctx, ISC_LOG_ERROR,
@@ -2116,9 +2140,9 @@ bind9_check_namedconf(const cfg_obj_t *config, isc_log_t *logctx,
}
}
- cfg_map_get(config, "acl", &acls);
+ cfg_map_get(config, "acl", &acls);
- if (acls != NULL) {
+ if (acls != NULL) {
const cfg_listelt_t *elt;
const cfg_listelt_t *elt2;
const char *aclname;
@@ -2138,7 +2162,7 @@ bind9_check_namedconf(const cfg_obj_t *config, isc_log_t *logctx,
cfg_obj_log(acl, logctx, ISC_LOG_ERROR,
"attempt to redefine "
"builtin acl '%s'",
- aclname);
+ aclname);
result = ISC_R_FAILURE;
break;
}
@@ -2167,8 +2191,8 @@ bind9_check_namedconf(const cfg_obj_t *config, isc_log_t *logctx,
}
}
- tresult = cfg_map_get(config, "kal", &kals);
- if (tresult == ISC_R_SUCCESS) {
+ tresult = cfg_map_get(config, "kal", &kals);
+ if (tresult == ISC_R_SUCCESS) {
const cfg_listelt_t *elt;
const cfg_listelt_t *elt2;
const char *aclname;
diff --git a/lib/dns/acache.c b/lib/dns/acache.c
index c95e2036..0836aca6 100644
--- a/lib/dns/acache.c
+++ b/lib/dns/acache.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: acache.c,v 1.20 2007/06/19 23:47:16 tbox Exp $ */
+/* $Id: acache.c,v 1.20.128.2 2008/02/07 23:46:25 tbox Exp $ */
#include <config.h>
@@ -137,7 +137,7 @@ struct acache_cleaner {
in seconds. */
isc_stdtime_t last_cleanup_time; /* The time when the last
- cleanup task completed */
+ cleanup task completed */
isc_timer_t *cleaning_timer;
isc_event_t *resched_event; /* Sent by cleaner task to
@@ -347,11 +347,11 @@ shutdown_buckets(dns_acache_t *acache) {
INSIST(ISC_LIST_EMPTY(dbent->originlist) &&
ISC_LIST_EMPTY(dbent->referlist));
ISC_LIST_UNLINK(acache->dbbucket[i], dbent, link);
-
+
dns_db_detach(&dbent->db);
isc_mem_put(acache->mctx, dbent, sizeof(*dbent));
-
+
acache->dbentries--;
}
}
@@ -513,7 +513,7 @@ clear_entry(dns_acache_t *acache, dns_acacheentry_t *entry) {
if (dns_name_dynamic(entry->foundname))
dns_name_free(entry->foundname, acache->mctx);
isc_mem_put(acache->mctx, entry->foundname,
- sizeof(*entry->foundname));
+ sizeof(*entry->foundname));
entry->foundname = NULL;
}
@@ -558,7 +558,7 @@ acache_cleaner_init(dns_acache_t *acache, isc_timermgr_t *timermgr,
if (timermgr != NULL) {
cleaner->acache->live_cleaners++;
-
+
result = isc_task_onshutdown(acache->task,
acache_cleaner_shutdown_action,
acache);
@@ -677,7 +677,7 @@ end_cleaning(acache_cleaner_t *cleaner, isc_event_t *event) {
*/
if (isc_refcount_current(&cleaner->current_entry->references) == 1) {
INSIST(cleaner->current_entry->callback == NULL);
-
+
if (ISC_LINK_LINKED(cleaner->current_entry, link)) {
ISC_LIST_UNLINK(acache->entries,
cleaner->current_entry, link);
@@ -701,7 +701,7 @@ end_cleaning(acache_cleaner_t *cleaner, isc_event_t *event) {
acache->stats.queries,
acache->stats.adds, acache->stats.deleted,
acache->stats.cleaned, acache->stats.cleaner_runs,
- acache->stats.overmem, acache->stats.overmem_nocreates,
+ acache->stats.overmem, acache->stats.overmem_nocreates,
acache->stats.nomem);
reset_stats(acache);
@@ -913,7 +913,7 @@ static void
acache_overmem_cleaning_action(isc_task_t *task, isc_event_t *event) {
acache_cleaner_t *cleaner = event->ev_arg;
isc_boolean_t want_cleaning = ISC_FALSE;
-
+
UNUSED(task);
INSIST(event->ev_type == DNS_EVENT_ACACHEOVERMEM);
@@ -965,10 +965,14 @@ water(void *arg, int mark) {
LOCK(&acache->cleaner.lock);
- acache->cleaner.overmem = overmem;
+ if (acache->cleaner.overmem != overmem) {
+ acache->cleaner.overmem = overmem;
- if (acache->cleaner.overmem_event != NULL)
- isc_task_send(acache->task, &acache->cleaner.overmem_event);
+ if (acache->cleaner.overmem_event != NULL)
+ isc_task_send(acache->task,
+ &acache->cleaner.overmem_event);
+ isc_mem_waterack(acache->mctx, mark);
+ }
UNLOCK(&acache->cleaner.lock);
}
@@ -1102,7 +1106,7 @@ dns_acache_create(dns_acache_t **acachep, isc_mem_t *mctx,
}
acache->live_cleaners = 0;
- result = acache_cleaner_init(acache, timermgr, &acache->cleaner);
+ result = acache_cleaner_init(acache, timermgr, &acache->cleaner);
if (result != ISC_R_SUCCESS)
goto cleanup;
@@ -1177,7 +1181,7 @@ dns_acache_detach(dns_acache_t **acachep) {
isc_task_shutdown(acache->task);
should_free = ISC_FALSE;
}
-
+
if (should_free)
destroy(acache);
}
@@ -1366,14 +1370,14 @@ dns_acache_createentry(dns_acache_t *acache, dns_db_t *origdb,
REQUIRE(entryp != NULL && *entryp == NULL);
REQUIRE(origdb != NULL);
- /*
- * Should we exceed our memory limit for some reason (for
- * example, if the cleaner does not run aggressively enough),
+ /*
+ * Should we exceed our memory limit for some reason (for
+ * example, if the cleaner does not run aggressively enough),
* then we will not create additional entries.
*
* XXXSK: It might be better to lock the acache->cleaner->lock,
- * but locking may be an expensive bottleneck. If we misread
- * the value, we will occasionally refuse to create a few
+ * but locking may be an expensive bottleneck. If we misread
+ * the value, we will occasionally refuse to create a few
* cache entries, or create a few that we should not. I do not
* expect this to happen often, and it will not have very bad
* effects when it does. So no lock for now.
@@ -1391,7 +1395,7 @@ dns_acache_createentry(dns_acache_t *acache, dns_db_t *origdb,
isc_random_get(&r);
newentry->locknum = r % DEFAULT_ACACHE_ENTRY_LOCK_COUNT;
-
+
result = isc_refcount_init(&newentry->references, 1);
if (result != ISC_R_SUCCESS) {
isc_mem_put(acache->mctx, newentry, sizeof(*newentry));
@@ -1738,7 +1742,7 @@ dns_acache_setcleaninginterval(dns_acache_t *acache, unsigned int t) {
isc_timertype_ticker,
NULL, &interval, ISC_FALSE);
}
- if (result != ISC_R_SUCCESS)
+ if (result != ISC_R_SUCCESS)
isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
DNS_LOGMODULE_ACACHE, ISC_LOG_WARNING,
"could not set acache cleaning interval: %s",
diff --git a/lib/dns/acl.c b/lib/dns/acl.c
index d8d0b9bc..bb54a8a3 100644
--- a/lib/dns/acl.c
+++ b/lib/dns/acl.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: acl.c,v 1.37.2.6 2008/01/27 02:12:51 marka Exp $ */
+/* $Id: acl.c,v 1.37.2.7 2008/04/29 01:04:14 each Exp $ */
/*! \file */
@@ -148,7 +148,7 @@ dns_acl_isanyornone(dns_acl_t *acl, isc_boolean_t pos)
return (ISC_FALSE);
if (acl->iptable->radix->head->prefix->bitlen == 0 &&
- *(isc_boolean_t *) (acl->iptable->radix->head->data) == pos)
+ *(isc_boolean_t *) (acl->iptable->radix->head->data[0]) == pos)
return (ISC_TRUE);
return (ISC_FALSE); /* All others */
diff --git a/lib/dns/adb.c b/lib/dns/adb.c
index 182f1c53..e862a726 100644
--- a/lib/dns/adb.c
+++ b/lib/dns/adb.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: adb.c,v 1.233 2007/10/19 17:15:53 explorer Exp $ */
+/* $Id: adb.c,v 1.233.36.8 2008/05/03 05:06:03 marka Exp $ */
/*! \file
*
@@ -26,13 +26,6 @@
*
*/
-/*%
- * After we have cleaned all buckets, dump the database contents.
- */
-#if 0
-#define DUMP_ADB_AFTER_CLEANING
-#endif
-
#include <config.h>
#include <limits.h>
@@ -42,7 +35,6 @@
#include <isc/random.h>
#include <isc/string.h> /* Required for HP/UX (and others?) */
#include <isc/task.h>
-#include <isc/timer.h>
#include <isc/util.h>
#include <dns/adb.h>
@@ -55,6 +47,7 @@
#include <dns/rdatatype.h>
#include <dns/resolver.h>
#include <dns/result.h>
+#include <dns/stats.h>
#define DNS_ADB_MAGIC ISC_MAGIC('D', 'a', 'd', 'b')
#define DNS_ADB_VALID(x) ISC_MAGIC_VALID(x, DNS_ADB_MAGIC)
@@ -89,16 +82,6 @@
#define ADB_ENTRY_WINDOW 1800 /*%< seconds */
/*%
- * Wake up every CLEAN_SECONDS and clean CLEAN_BUCKETS buckets, so that all
- * buckets are cleaned in CLEAN_PERIOD seconds.
- */
-#define CLEAN_PERIOD 3600
-/*% See #CLEAN_PERIOD */
-#define CLEAN_SECONDS 30
-/*% See #CLEAN_PERIOD */
-#define CLEAN_BUCKETS ((NBUCKETS * CLEAN_SECONDS) / CLEAN_PERIOD)
-
-/*%
* The period in seconds after which an ADB name entry is regarded as stale
* and forced to be cleaned up.
* TODO: This should probably be configurable at run-time.
@@ -124,78 +107,60 @@ typedef struct dns_adbfetch6 dns_adbfetch6_t;
/*% dns adb structure */
struct dns_adb {
- unsigned int magic;
-
- isc_mutex_t lock;
- isc_mutex_t reflock; /*%< Covers irefcnt, erefcnt */
- isc_mem_t *mctx;
- dns_view_t *view;
- isc_timermgr_t *timermgr;
- isc_timer_t *timer;
-
-#ifdef LRU_DEBUG
- isc_timer_t *dump_timer; /* for test */
- isc_time_t dump_time; /* for test */
-#define DUMP_INTERVAL 30 /* seconds */
-#endif
-
- isc_taskmgr_t *taskmgr;
- isc_task_t *task;
- isc_boolean_t overmem;
-
- isc_interval_t tick_interval;
- int next_cleanbucket;
-
- unsigned int irefcnt;
- unsigned int erefcnt;
-
- isc_mutex_t mplock;
- isc_mempool_t *nmp; /*%< dns_adbname_t */
- isc_mempool_t *nhmp; /*%< dns_adbnamehook_t */
- isc_mempool_t *limp; /*%< dns_adblameinfo_t */
- isc_mempool_t *emp; /*%< dns_adbentry_t */
- isc_mempool_t *ahmp; /*%< dns_adbfind_t */
- isc_mempool_t *aimp; /*%< dns_adbaddrinfo_t */
- isc_mempool_t *afmp; /*%< dns_adbfetch_t */
-
- /*!
- * Bucketized locks and lists for names.
- *
- * XXXRTH Have a per-bucket structure that contains all of these?
- */
- dns_adbnamelist_t names[NBUCKETS];
- /*% See dns_adbnamelist_t */
- isc_mutex_t namelocks[NBUCKETS];
- /*% See dns_adbnamelist_t */
- isc_boolean_t name_sd[NBUCKETS];
- /*% See dns_adbnamelist_t */
- unsigned int name_refcnt[NBUCKETS];
-
- /*!
- * Bucketized locks for entries.
- *
- * XXXRTH Have a per-bucket structure that contains all of these?
- */
- dns_adbentrylist_t entries[NBUCKETS];
- isc_mutex_t entrylocks[NBUCKETS];
- isc_boolean_t entry_sd[NBUCKETS]; /*%< shutting down */
- unsigned int entry_refcnt[NBUCKETS];
-
- isc_event_t cevent;
- isc_boolean_t cevent_sent;
- isc_boolean_t shutting_down;
- isc_eventlist_t whenshutdown;
-
-#ifdef LRU_DEBUG
- unsigned int stale_purge;
- unsigned int stale_scan;
- unsigned int stale_expire;
- unsigned int stale_lru;
-
- unsigned int nname, nname_total;
- unsigned int nentry, nentry_total;
- unsigned int nameuses, entryuses;
-#endif
+ unsigned int magic;
+
+ isc_mutex_t lock;
+ isc_mutex_t reflock; /*%< Covers irefcnt, erefcnt */
+ isc_mutex_t overmemlock; /*%< Covers overmem */
+ isc_mem_t *mctx;
+ dns_view_t *view;
+
+ isc_taskmgr_t *taskmgr;
+ isc_task_t *task;
+ isc_boolean_t overmem;
+
+ isc_interval_t tick_interval;
+ int next_cleanbucket;
+
+ unsigned int irefcnt;
+ unsigned int erefcnt;
+
+ isc_mutex_t mplock;
+ isc_mempool_t *nmp; /*%< dns_adbname_t */
+ isc_mempool_t *nhmp; /*%< dns_adbnamehook_t */
+ isc_mempool_t *limp; /*%< dns_adblameinfo_t */
+ isc_mempool_t *emp; /*%< dns_adbentry_t */
+ isc_mempool_t *ahmp; /*%< dns_adbfind_t */
+ isc_mempool_t *aimp; /*%< dns_adbaddrinfo_t */
+ isc_mempool_t *afmp; /*%< dns_adbfetch_t */
+
+ /*!
+ * Bucketized locks and lists for names.
+ *
+ * XXXRTH Have a per-bucket structure that contains all of these?
+ */
+ dns_adbnamelist_t names[NBUCKETS];
+ /*% See dns_adbnamelist_t */
+ isc_mutex_t namelocks[NBUCKETS];
+ /*% See dns_adbnamelist_t */
+ isc_boolean_t name_sd[NBUCKETS];
+ /*% See dns_adbnamelist_t */
+ unsigned int name_refcnt[NBUCKETS];
+
+ /*!
+ * Bucketized locks for entries.
+ *
+ * XXXRTH Have a per-bucket structure that contains all of these?
+ */
+ dns_adbentrylist_t entries[NBUCKETS];
+ isc_mutex_t entrylocks[NBUCKETS];
+ isc_boolean_t entry_sd[NBUCKETS]; /*%< shutting down */
+ unsigned int entry_refcnt[NBUCKETS];
+
+ isc_event_t cevent;
+ isc_boolean_t cevent_sent;
+ isc_boolean_t shutting_down;
+ isc_eventlist_t whenshutdown;
};
/*
@@ -204,37 +169,37 @@ struct dns_adb {
/*% dns_adbname structure */
struct dns_adbname {
- unsigned int magic;
- dns_name_t name;
- dns_adb_t *adb;
- unsigned int partial_result;
- unsigned int flags;
- int lock_bucket;
- dns_name_t target;
- isc_stdtime_t expire_target;
- isc_stdtime_t expire_v4;
- isc_stdtime_t expire_v6;
- unsigned int chains;
- dns_adbnamehooklist_t v4;
- dns_adbnamehooklist_t v6;
- dns_adbfetch_t *fetch_a;
- dns_adbfetch_t *fetch_aaaa;
- unsigned int fetch_err;
- unsigned int fetch6_err;
- dns_adbfindlist_t finds;
- /* for LRU-based management */
- isc_stdtime_t last_used;
-
- ISC_LINK(dns_adbname_t) plink;
+ unsigned int magic;
+ dns_name_t name;
+ dns_adb_t *adb;
+ unsigned int partial_result;
+ unsigned int flags;
+ int lock_bucket;
+ dns_name_t target;
+ isc_stdtime_t expire_target;
+ isc_stdtime_t expire_v4;
+ isc_stdtime_t expire_v6;
+ unsigned int chains;
+ dns_adbnamehooklist_t v4;
+ dns_adbnamehooklist_t v6;
+ dns_adbfetch_t *fetch_a;
+ dns_adbfetch_t *fetch_aaaa;
+ unsigned int fetch_err;
+ unsigned int fetch6_err;
+ dns_adbfindlist_t finds;
+ /* for LRU-based management */
+ isc_stdtime_t last_used;
+
+ ISC_LINK(dns_adbname_t) plink;
};
/*% The adbfetch structure */
struct dns_adbfetch {
- unsigned int magic;
- dns_adbnamehook_t *namehook;
- dns_adbentry_t *entry;
- dns_fetch_t *fetch;
- dns_rdataset_t rdataset;
+ unsigned int magic;
+ dns_adbnamehook_t *namehook;
+ dns_adbentry_t *entry;
+ dns_fetch_t *fetch;
+ dns_rdataset_t rdataset;
};
/*%
@@ -243,9 +208,9 @@ struct dns_adbfetch {
* namehook that will contain the next address this host has.
*/
struct dns_adbnamehook {
- unsigned int magic;
- dns_adbentry_t *entry;
- ISC_LINK(dns_adbnamehook_t) plink;
+ unsigned int magic;
+ dns_adbentry_t *entry;
+ ISC_LINK(dns_adbnamehook_t) plink;
};
/*%
@@ -254,13 +219,13 @@ struct dns_adbnamehook {
* extended to other types of information about zones.
*/
struct dns_adblameinfo {
- unsigned int magic;
+ unsigned int magic;
- dns_name_t qname;
- dns_rdatatype_t qtype;
- isc_stdtime_t lame_timer;
+ dns_name_t qname;
+ dns_rdatatype_t qtype;
+ isc_stdtime_t lame_timer;
- ISC_LINK(dns_adblameinfo_t) plink;
+ ISC_LINK(dns_adblameinfo_t) plink;
};
/*%
@@ -269,26 +234,26 @@ struct dns_adblameinfo {
* the host.
*/
struct dns_adbentry {
- unsigned int magic;
-
- int lock_bucket;
- unsigned int refcnt;
-
- unsigned int flags;
- unsigned int srtt;
- isc_sockaddr_t sockaddr;
-
- isc_stdtime_t expires;
- /*%<
- * A nonzero 'expires' field indicates that the entry should
- * persist until that time. This allows entries found
- * using dns_adb_findaddrinfo() to persist for a limited time
- * even though they are not necessarily associated with a
- * name.
- */
-
- ISC_LIST(dns_adblameinfo_t) lameinfo;
- ISC_LINK(dns_adbentry_t) plink;
+ unsigned int magic;
+
+ int lock_bucket;
+ unsigned int refcnt;
+
+ unsigned int flags;
+ unsigned int srtt;
+ isc_sockaddr_t sockaddr;
+
+ isc_stdtime_t expires;
+ /*%<
+ * A nonzero 'expires' field indicates that the entry should
+ * persist until that time. This allows entries found
+ * using dns_adb_findaddrinfo() to persist for a limited time
+ * even though they are not necessarily associated with a
+ * name.
+ */
+
+ ISC_LIST(dns_adblameinfo_t) lameinfo;
+ ISC_LINK(dns_adbentry_t) plink;
};
/*
@@ -297,52 +262,51 @@ struct dns_adbentry {
static inline dns_adbname_t *new_adbname(dns_adb_t *, dns_name_t *);
static inline void free_adbname(dns_adb_t *, dns_adbname_t **);
static inline dns_adbnamehook_t *new_adbnamehook(dns_adb_t *,
- dns_adbentry_t *);
+ dns_adbentry_t *);
static inline void free_adbnamehook(dns_adb_t *, dns_adbnamehook_t **);
static inline dns_adblameinfo_t *new_adblameinfo(dns_adb_t *, dns_name_t *,
- dns_rdatatype_t);
+ dns_rdatatype_t);
static inline void free_adblameinfo(dns_adb_t *, dns_adblameinfo_t **);
static inline dns_adbentry_t *new_adbentry(dns_adb_t *);
static inline void free_adbentry(dns_adb_t *, dns_adbentry_t **);
static inline dns_adbfind_t *new_adbfind(dns_adb_t *);
static inline isc_boolean_t free_adbfind(dns_adb_t *, dns_adbfind_t **);
static inline dns_adbaddrinfo_t *new_adbaddrinfo(dns_adb_t *, dns_adbentry_t *,
- in_port_t);
+ in_port_t);
static inline dns_adbfetch_t *new_adbfetch(dns_adb_t *);
static inline void free_adbfetch(dns_adb_t *, dns_adbfetch_t **);
static inline dns_adbname_t *find_name_and_lock(dns_adb_t *, dns_name_t *,
- unsigned int, int *);
+ unsigned int, int *);
static inline dns_adbentry_t *find_entry_and_lock(dns_adb_t *,
- isc_sockaddr_t *, int *);
+ isc_sockaddr_t *, int *);
static void dump_adb(dns_adb_t *, FILE *, isc_boolean_t debug, isc_stdtime_t);
static void print_dns_name(FILE *, dns_name_t *);
static void print_namehook_list(FILE *, const char *legend,
- dns_adbnamehooklist_t *list,
- isc_boolean_t debug,
- isc_stdtime_t now);
+ dns_adbnamehooklist_t *list,
+ isc_boolean_t debug,
+ isc_stdtime_t now);
static void print_find_list(FILE *, dns_adbname_t *);
static void print_fetch_list(FILE *, dns_adbname_t *);
static inline isc_boolean_t dec_adb_irefcnt(dns_adb_t *);
static inline void inc_adb_irefcnt(dns_adb_t *);
static inline void inc_adb_erefcnt(dns_adb_t *);
static inline void inc_entry_refcnt(dns_adb_t *, dns_adbentry_t *,
- isc_boolean_t);
+ isc_boolean_t);
static inline isc_boolean_t dec_entry_refcnt(dns_adb_t *, dns_adbentry_t *,
- isc_boolean_t);
+ isc_boolean_t);
static inline void violate_locking_hierarchy(isc_mutex_t *, isc_mutex_t *);
static isc_boolean_t clean_namehooks(dns_adb_t *, dns_adbnamehooklist_t *,
- isc_boolean_t);
+ isc_boolean_t);
static void clean_target(dns_adb_t *, dns_name_t *);
static void clean_finds_at_name(dns_adbname_t *, isc_eventtype_t,
- unsigned int);
+ unsigned int);
static isc_boolean_t check_expire_namehooks(dns_adbname_t *, isc_stdtime_t);
static void cancel_fetches_at_name(dns_adbname_t *);
static isc_result_t dbfind_name(dns_adbname_t *, isc_stdtime_t,
- dns_rdatatype_t);
+ dns_rdatatype_t);
static isc_result_t fetch_name(dns_adbname_t *, isc_boolean_t,
- dns_rdatatype_t);
+ dns_rdatatype_t);
static inline void check_exit(dns_adb_t *);
-static void timer_cleanup(isc_task_t *, isc_event_t *);
static void destroy(dns_adb_t *);
static isc_boolean_t shutdown_names(dns_adb_t *);
static isc_boolean_t shutdown_entries(dns_adb_t *);
@@ -351,14 +315,10 @@ static inline isc_boolean_t unlink_name(dns_adb_t *, dns_adbname_t *);
static inline void link_entry(dns_adb_t *, int, dns_adbentry_t *);
static inline isc_boolean_t unlink_entry(dns_adb_t *, dns_adbentry_t *);
static isc_boolean_t kill_name(dns_adbname_t **, isc_eventtype_t,
- isc_boolean_t);
+ isc_boolean_t);
static void water(void *, int);
static void dump_entry(FILE *, dns_adbentry_t *, isc_boolean_t, isc_stdtime_t);
-#ifdef LRU_DEBUG
-static void timer_dump(isc_task_t *, isc_event_t *);
-#endif
-
/*
* MUST NOT overlap DNS_ADBFIND_* flags!
*/
@@ -404,9 +364,9 @@ static void timer_dump(isc_task_t *, isc_event_t *);
#define FIND_WANTEVENT(fn) (((fn)->options & DNS_ADBFIND_WANTEVENT) != 0)
#define FIND_WANTEMPTYEVENT(fn) (((fn)->options & DNS_ADBFIND_EMPTYEVENT) != 0)
#define FIND_AVOIDFETCHES(fn) (((fn)->options & DNS_ADBFIND_AVOIDFETCHES) \
- != 0)
+ != 0)
#define FIND_STARTATZONE(fn) (((fn)->options & DNS_ADBFIND_STARTATZONE) \
- != 0)
+ != 0)
#define FIND_HINTOK(fn) (((fn)->options & DNS_ADBFIND_HINTOK) != 0)
#define FIND_GLUEOK(fn) (((fn)->options & DNS_ADBFIND_GLUEOK) != 0)
#define FIND_HAS_ADDRS(fn) (!ISC_LIST_EMPTY((fn)->list))
@@ -430,7 +390,7 @@ static void timer_dump(isc_task_t *, isc_event_t *);
#define HINT_OK(nf, o) (!NAME_HINTOK(nf) || (((o) & DNS_ADBFIND_HINTOK) != 0))
#define GLUEHINT_OK(nf, o) (GLUE_OK(nf, o) || HINT_OK(nf, o))
#define STARTATZONE_MATCHES(nf, o) (((nf)->flags & NAME_STARTATZONE) == \
- ((o) & DNS_ADBFIND_STARTATZONE))
+ ((o) & DNS_ADBFIND_STARTATZONE))
#define ENTER_LEVEL ISC_LOG_DEBUG(50)
#define EXIT_LEVEL ENTER_LEVEL
@@ -439,14 +399,14 @@ static void timer_dump(isc_task_t *, isc_event_t *);
#define NCACHE_LEVEL ISC_LOG_DEBUG(20)
#define NCACHE_RESULT(r) ((r) == DNS_R_NCACHENXDOMAIN || \
- (r) == DNS_R_NCACHENXRRSET)
+ (r) == DNS_R_NCACHENXRRSET)
#define AUTH_NX(r) ((r) == DNS_R_NXDOMAIN || \
- (r) == DNS_R_NXRRSET)
+ (r) == DNS_R_NXRRSET)
#define NXDOMAIN_RESULT(r) ((r) == DNS_R_NXDOMAIN || \
- (r) == DNS_R_NCACHENXDOMAIN)
+ (r) == DNS_R_NCACHENXDOMAIN)
#define NXRRSET_RESULT(r) ((r) == DNS_R_NCACHENXRRSET || \
- (r) == DNS_R_NXRRSET || \
- (r) == DNS_R_HINTNXRRSET)
+ (r) == DNS_R_NXRRSET || \
+ (r) == DNS_R_HINTNXRRSET)
/*
* Error state rankings.
@@ -462,25 +422,25 @@ static void timer_dump(isc_task_t *, isc_event_t *);
#define FIND_ERR_MAX 7
static const char *errnames[] = {
- "success",
- "canceled",
- "failure",
- "nxdomain",
- "nxrrset",
- "unexpected",
- "not_found"
+ "success",
+ "canceled",
+ "failure",
+ "nxdomain",
+ "nxrrset",
+ "unexpected",
+ "not_found"
};
#define NEWERR(old, new) (ISC_MIN((old), (new)))
static isc_result_t find_err_map[FIND_ERR_MAX] = {
- ISC_R_SUCCESS,
- ISC_R_CANCELED,
- ISC_R_FAILURE,
- DNS_R_NXDOMAIN,
- DNS_R_NXRRSET,
- ISC_R_UNEXPECTED,
- ISC_R_NOTFOUND /* not YET found */
+ ISC_R_SUCCESS,
+ ISC_R_CANCELED,
+ ISC_R_FAILURE,
+ DNS_R_NXDOMAIN,
+ DNS_R_NXRRSET,
+ ISC_R_UNEXPECTED,
+ ISC_R_NOTFOUND /* not YET found */
};
static void
@@ -488,23 +448,32 @@ DP(int level, const char *format, ...) ISC_FORMAT_PRINTF(2, 3);
static void
DP(int level, const char *format, ...) {
- va_list args;
+ va_list args;
- va_start(args, format);
- isc_log_vwrite(dns_lctx,
- DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_ADB,
- level, format, args);
- va_end(args);
+ va_start(args, format);
+ isc_log_vwrite(dns_lctx,
+ DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_ADB,
+ level, format, args);
+ va_end(args);
+}
+
+/*%
+ * Increment resolver-related statistics counters.
+ */
+static inline void
+inc_stats(dns_adb_t *adb, dns_statscounter_t counter) {
+ if (adb->view->resstats != NULL)
+ dns_generalstats_increment(adb->view->resstats, counter);
}
static inline dns_ttl_t
ttlclamp(dns_ttl_t ttl) {
- if (ttl < ADB_CACHE_MINIMUM)
- ttl = ADB_CACHE_MINIMUM;
- if (ttl > ADB_CACHE_MAXIMUM)
- ttl = ADB_CACHE_MAXIMUM;
+ if (ttl < ADB_CACHE_MINIMUM)
+ ttl = ADB_CACHE_MINIMUM;
+ if (ttl > ADB_CACHE_MAXIMUM)
+ ttl = ADB_CACHE_MAXIMUM;
- return (ttl);
+ return (ttl);
}
/*
@@ -514,134 +483,133 @@ ttlclamp(dns_ttl_t ttl) {
*/
static isc_result_t
import_rdataset(dns_adbname_t *adbname, dns_rdataset_t *rdataset,
- isc_stdtime_t now)
+ isc_stdtime_t now)
{
- isc_result_t result;
- dns_adb_t *adb;
- dns_adbnamehook_t *nh;
- dns_adbnamehook_t *anh;
- dns_rdata_t rdata = DNS_RDATA_INIT;
- struct in_addr ina;
- struct in6_addr in6a;
- isc_sockaddr_t sockaddr;
- dns_adbentry_t *foundentry; /* NO CLEAN UP! */
- int addr_bucket;
- isc_boolean_t new_addresses_added;
- dns_rdatatype_t rdtype;
- unsigned int findoptions;
-
- INSIST(DNS_ADBNAME_VALID(adbname));
- adb = adbname->adb;
- INSIST(DNS_ADB_VALID(adb));
-
- rdtype = rdataset->type;
- INSIST((rdtype == dns_rdatatype_a) || (rdtype == dns_rdatatype_aaaa));
- if (rdtype == dns_rdatatype_a)
- findoptions = DNS_ADBFIND_INET;
- else
- findoptions = DNS_ADBFIND_INET6;
-
- addr_bucket = DNS_ADB_INVALIDBUCKET;
- new_addresses_added = ISC_FALSE;
-
- nh = NULL;
- result = dns_rdataset_first(rdataset);
- while (result == ISC_R_SUCCESS) {
- dns_rdata_reset(&rdata);
- dns_rdataset_current(rdataset, &rdata);
- if (rdtype == dns_rdatatype_a) {
- INSIST(rdata.length == 4);
- memcpy(&ina.s_addr, rdata.data, 4);
- isc_sockaddr_fromin(&sockaddr, &ina, 0);
- } else {
- INSIST(rdata.length == 16);
- memcpy(in6a.s6_addr, rdata.data, 16);
- isc_sockaddr_fromin6(&sockaddr, &in6a, 0);
- }
-
- INSIST(nh == NULL);
- nh = new_adbnamehook(adb, NULL);
- if (nh == NULL) {
- adbname->partial_result |= findoptions;
- result = ISC_R_NOMEMORY;
- goto fail;
- }
-
- foundentry = find_entry_and_lock(adb, &sockaddr, &addr_bucket);
- if (foundentry == NULL) {
- dns_adbentry_t *entry;
-
- entry = new_adbentry(adb);
- if (entry == NULL) {
- adbname->partial_result |= findoptions;
- result = ISC_R_NOMEMORY;
- goto fail;
- }
-
- entry->sockaddr = sockaddr;
- entry->refcnt = 1;
-
- nh->entry = entry;
-
- link_entry(adb, addr_bucket, entry);
- } else {
- for (anh = ISC_LIST_HEAD(adbname->v4);
- anh != NULL;
- anh = ISC_LIST_NEXT(anh, plink))
- if (anh->entry == foundentry)
- break;
- if (anh == NULL) {
- foundentry->refcnt++;
- nh->entry = foundentry;
- } else
- free_adbnamehook(adb, &nh);
- }
-
- new_addresses_added = ISC_TRUE;
- if (nh != NULL) {
- if (rdtype == dns_rdatatype_a)
- ISC_LIST_APPEND(adbname->v4, nh, plink);
- else
- ISC_LIST_APPEND(adbname->v6, nh, plink);
- }
- nh = NULL;
- result = dns_rdataset_next(rdataset);
- }
+ isc_result_t result;
+ dns_adb_t *adb;
+ dns_adbnamehook_t *nh;
+ dns_adbnamehook_t *anh;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ struct in_addr ina;
+ struct in6_addr in6a;
+ isc_sockaddr_t sockaddr;
+ dns_adbentry_t *foundentry; /* NO CLEAN UP! */
+ int addr_bucket;
+ isc_boolean_t new_addresses_added;
+ dns_rdatatype_t rdtype;
+ unsigned int findoptions;
+ dns_adbnamehooklist_t *hookhead;
+
+ INSIST(DNS_ADBNAME_VALID(adbname));
+ adb = adbname->adb;
+ INSIST(DNS_ADB_VALID(adb));
+
+ rdtype = rdataset->type;
+ INSIST((rdtype == dns_rdatatype_a) || (rdtype == dns_rdatatype_aaaa));
+ if (rdtype == dns_rdatatype_a)
+ findoptions = DNS_ADBFIND_INET;
+ else
+ findoptions = DNS_ADBFIND_INET6;
+
+ addr_bucket = DNS_ADB_INVALIDBUCKET;
+ new_addresses_added = ISC_FALSE;
+
+ nh = NULL;
+ result = dns_rdataset_first(rdataset);
+ while (result == ISC_R_SUCCESS) {
+ dns_rdata_reset(&rdata);
+ dns_rdataset_current(rdataset, &rdata);
+ if (rdtype == dns_rdatatype_a) {
+ INSIST(rdata.length == 4);
+ memcpy(&ina.s_addr, rdata.data, 4);
+ isc_sockaddr_fromin(&sockaddr, &ina, 0);
+ hookhead = &adbname->v4;
+ } else {
+ INSIST(rdata.length == 16);
+ memcpy(in6a.s6_addr, rdata.data, 16);
+ isc_sockaddr_fromin6(&sockaddr, &in6a, 0);
+ hookhead = &adbname->v6;
+ }
+
+ INSIST(nh == NULL);
+ nh = new_adbnamehook(adb, NULL);
+ if (nh == NULL) {
+ adbname->partial_result |= findoptions;
+ result = ISC_R_NOMEMORY;
+ goto fail;
+ }
+
+ foundentry = find_entry_and_lock(adb, &sockaddr, &addr_bucket);
+ if (foundentry == NULL) {
+ dns_adbentry_t *entry;
+
+ entry = new_adbentry(adb);
+ if (entry == NULL) {
+ adbname->partial_result |= findoptions;
+ result = ISC_R_NOMEMORY;
+ goto fail;
+ }
+
+ entry->sockaddr = sockaddr;
+ entry->refcnt = 1;
+
+ nh->entry = entry;
+
+ link_entry(adb, addr_bucket, entry);
+ } else {
+ for (anh = ISC_LIST_HEAD(*hookhead);
+ anh != NULL;
+ anh = ISC_LIST_NEXT(anh, plink))
+ if (anh->entry == foundentry)
+ break;
+ if (anh == NULL) {
+ foundentry->refcnt++;
+ nh->entry = foundentry;
+ } else
+ free_adbnamehook(adb, &nh);
+ }
+
+ new_addresses_added = ISC_TRUE;
+ if (nh != NULL)
+ ISC_LIST_APPEND(*hookhead, nh, plink);
+ nh = NULL;
+ result = dns_rdataset_next(rdataset);
+ }
fail:
- if (nh != NULL)
- free_adbnamehook(adb, &nh);
-
- if (addr_bucket != DNS_ADB_INVALIDBUCKET)
- UNLOCK(&adb->entrylocks[addr_bucket]);
-
- if (rdataset->trust == dns_trust_glue ||
- rdataset->trust == dns_trust_additional)
- rdataset->ttl = ADB_CACHE_MINIMUM;
- else
- rdataset->ttl = ttlclamp(rdataset->ttl);
-
- if (rdtype == dns_rdatatype_a) {
- DP(NCACHE_LEVEL, "expire_v4 set to MIN(%u,%u) import_rdataset",
- adbname->expire_v4, now + rdataset->ttl);
- adbname->expire_v4 = ISC_MIN(adbname->expire_v4,
- now + rdataset->ttl);
- } else {
- DP(NCACHE_LEVEL, "expire_v6 set to MIN(%u,%u) import_rdataset",
- adbname->expire_v6, now + rdataset->ttl);
- adbname->expire_v6 = ISC_MIN(adbname->expire_v6,
- now + rdataset->ttl);
- }
-
- if (new_addresses_added) {
- /*
- * Lie a little here. This is more or less so code that cares
- * can find out if any new information was added or not.
- */
- return (ISC_R_SUCCESS);
- }
-
- return (result);
+ if (nh != NULL)
+ free_adbnamehook(adb, &nh);
+
+ if (addr_bucket != DNS_ADB_INVALIDBUCKET)
+ UNLOCK(&adb->entrylocks[addr_bucket]);
+
+ if (rdataset->trust == dns_trust_glue ||
+ rdataset->trust == dns_trust_additional)
+ rdataset->ttl = ADB_CACHE_MINIMUM;
+ else
+ rdataset->ttl = ttlclamp(rdataset->ttl);
+
+ if (rdtype == dns_rdatatype_a) {
+ DP(NCACHE_LEVEL, "expire_v4 set to MIN(%u,%u) import_rdataset",
+ adbname->expire_v4, now + rdataset->ttl);
+ adbname->expire_v4 = ISC_MIN(adbname->expire_v4,
+ now + rdataset->ttl);
+ } else {
+ DP(NCACHE_LEVEL, "expire_v6 set to MIN(%u,%u) import_rdataset",
+ adbname->expire_v6, now + rdataset->ttl);
+ adbname->expire_v6 = ISC_MIN(adbname->expire_v6,
+ now + rdataset->ttl);
+ }
+
+ if (new_addresses_added) {
+ /*
+ * Lie a little here. This is more or less so code that cares
+ * can find out if any new information was added or not.
+ */
+ return (ISC_R_SUCCESS);
+ }
+
+ return (result);
}
/*
@@ -649,57 +617,57 @@ import_rdataset(dns_adbname_t *adbname, dns_rdataset_t *rdataset,
*/
static isc_boolean_t
kill_name(dns_adbname_t **n, isc_eventtype_t ev, isc_boolean_t is_purge) {
- dns_adbname_t *name;
- isc_boolean_t result = ISC_FALSE;
- isc_boolean_t result4, result6;
- dns_adb_t *adb;
-
- INSIST(n != NULL);
- name = *n;
- *n = NULL;
- INSIST(DNS_ADBNAME_VALID(name));
- adb = name->adb;
- INSIST(DNS_ADB_VALID(adb));
-
- DP(DEF_LEVEL, "killing name %p", name);
-
- /*
- * If we're dead already, just check to see if we should go
- * away now or not.
- */
- if (NAME_DEAD(name) && !NAME_FETCH(name)) {
- result = unlink_name(adb, name);
- free_adbname(adb, &name);
- if (result)
- result = dec_adb_irefcnt(adb);
- return (result);
- }
-
- /*
- * Clean up the name's various lists. These two are destructive
- * in that they will always empty the list.
- */
- clean_finds_at_name(name, ev, DNS_ADBFIND_ADDRESSMASK);
- result4 = clean_namehooks(adb, &name->v4, is_purge);
- result6 = clean_namehooks(adb, &name->v6, is_purge);
- clean_target(adb, &name->target);
- result = ISC_TF(result4 || result6);
-
- /*
- * If fetches are running, cancel them. If none are running, we can
- * just kill the name here.
- */
- if (!NAME_FETCH(name)) {
- INSIST(result == ISC_FALSE);
- result = unlink_name(adb, name);
- free_adbname(adb, &name);
- if (result)
- result = dec_adb_irefcnt(adb);
- } else {
- name->flags |= NAME_IS_DEAD;
- cancel_fetches_at_name(name);
- }
- return (result);
+ dns_adbname_t *name;
+ isc_boolean_t result = ISC_FALSE;
+ isc_boolean_t result4, result6;
+ dns_adb_t *adb;
+
+ INSIST(n != NULL);
+ name = *n;
+ *n = NULL;
+ INSIST(DNS_ADBNAME_VALID(name));
+ adb = name->adb;
+ INSIST(DNS_ADB_VALID(adb));
+
+ DP(DEF_LEVEL, "killing name %p", name);
+
+ /*
+ * If we're dead already, just check to see if we should go
+ * away now or not.
+ */
+ if (NAME_DEAD(name) && !NAME_FETCH(name)) {
+ result = unlink_name(adb, name);
+ free_adbname(adb, &name);
+ if (result)
+ result = dec_adb_irefcnt(adb);
+ return (result);
+ }
+
+ /*
+ * Clean up the name's various lists. These two are destructive
+ * in that they will always empty the list.
+ */
+ clean_finds_at_name(name, ev, DNS_ADBFIND_ADDRESSMASK);
+ result4 = clean_namehooks(adb, &name->v4, is_purge);
+ result6 = clean_namehooks(adb, &name->v6, is_purge);
+ clean_target(adb, &name->target);
+ result = ISC_TF(result4 || result6);
+
+ /*
+ * If fetches are running, cancel them. If none are running, we can
+ * just kill the name here.
+ */
+ if (!NAME_FETCH(name)) {
+ INSIST(result == ISC_FALSE);
+ result = unlink_name(adb, name);
+ free_adbname(adb, &name);
+ if (result)
+ result = dec_adb_irefcnt(adb);
+ } else {
+ name->flags |= NAME_IS_DEAD;
+ cancel_fetches_at_name(name);
+ }
+ return (result);
}
/*
@@ -707,48 +675,48 @@ kill_name(dns_adbname_t **n, isc_eventtype_t ev, isc_boolean_t is_purge) {
*/
static isc_boolean_t
check_expire_namehooks(dns_adbname_t *name, isc_stdtime_t now) {
- dns_adb_t *adb;
- isc_boolean_t result4 = ISC_FALSE;
- isc_boolean_t result6 = ISC_FALSE;
-
- INSIST(DNS_ADBNAME_VALID(name));
- adb = name->adb;
- INSIST(DNS_ADB_VALID(adb));
-
- /*
- * Check to see if we need to remove the v4 addresses
- */
- if (!NAME_FETCH_V4(name) && EXPIRE_OK(name->expire_v4, now)) {
- if (NAME_HAS_V4(name)) {
- DP(DEF_LEVEL, "expiring v4 for name %p", name);
- result4 = clean_namehooks(adb, &name->v4, ISC_FALSE);
- name->partial_result &= ~DNS_ADBFIND_INET;
- }
- name->expire_v4 = INT_MAX;
- name->fetch_err = FIND_ERR_UNEXPECTED;
- }
-
- /*
- * Check to see if we need to remove the v6 addresses
- */
- if (!NAME_FETCH_V6(name) && EXPIRE_OK(name->expire_v6, now)) {
- if (NAME_HAS_V6(name)) {
- DP(DEF_LEVEL, "expiring v6 for name %p", name);
- result6 = clean_namehooks(adb, &name->v6, ISC_FALSE);
- name->partial_result &= ~DNS_ADBFIND_INET6;
- }
- name->expire_v6 = INT_MAX;
- name->fetch6_err = FIND_ERR_UNEXPECTED;
- }
-
- /*
- * Check to see if we need to remove the alias target.
- */
- if (EXPIRE_OK(name->expire_target, now)) {
- clean_target(adb, &name->target);
- name->expire_target = INT_MAX;
- }
- return (ISC_TF(result4 || result6));
+ dns_adb_t *adb;
+ isc_boolean_t result4 = ISC_FALSE;
+ isc_boolean_t result6 = ISC_FALSE;
+
+ INSIST(DNS_ADBNAME_VALID(name));
+ adb = name->adb;
+ INSIST(DNS_ADB_VALID(adb));
+
+ /*
+ * Check to see if we need to remove the v4 addresses
+ */
+ if (!NAME_FETCH_V4(name) && EXPIRE_OK(name->expire_v4, now)) {
+ if (NAME_HAS_V4(name)) {
+ DP(DEF_LEVEL, "expiring v4 for name %p", name);
+ result4 = clean_namehooks(adb, &name->v4, ISC_FALSE);
+ name->partial_result &= ~DNS_ADBFIND_INET;
+ }
+ name->expire_v4 = INT_MAX;
+ name->fetch_err = FIND_ERR_UNEXPECTED;
+ }
+
+ /*
+ * Check to see if we need to remove the v6 addresses
+ */
+ if (!NAME_FETCH_V6(name) && EXPIRE_OK(name->expire_v6, now)) {
+ if (NAME_HAS_V6(name)) {
+ DP(DEF_LEVEL, "expiring v6 for name %p", name);
+ result6 = clean_namehooks(adb, &name->v6, ISC_FALSE);
+ name->partial_result &= ~DNS_ADBFIND_INET6;
+ }
+ name->expire_v6 = INT_MAX;
+ name->fetch6_err = FIND_ERR_UNEXPECTED;
+ }
+
+ /*
+ * Check to see if we need to remove the alias target.
+ */
+ if (EXPIRE_OK(name->expire_target, now)) {
+ clean_target(adb, &name->target);
+ name->expire_target = INT_MAX;
+ }
+ return (ISC_TF(result4 || result6));
}
/*
@@ -756,11 +724,11 @@ check_expire_namehooks(dns_adbname_t *name, isc_stdtime_t now) {
*/
static inline void
link_name(dns_adb_t *adb, int bucket, dns_adbname_t *name) {
- INSIST(name->lock_bucket == DNS_ADB_INVALIDBUCKET);
+ INSIST(name->lock_bucket == DNS_ADB_INVALIDBUCKET);
- ISC_LIST_PREPEND(adb->names[bucket], name, plink);
- name->lock_bucket = bucket;
- adb->name_refcnt[bucket]++;
+ ISC_LIST_PREPEND(adb->names[bucket], name, plink);
+ name->lock_bucket = bucket;
+ adb->name_refcnt[bucket]++;
}
/*
@@ -768,19 +736,19 @@ link_name(dns_adb_t *adb, int bucket, dns_adbname_t *name) {
*/
static inline isc_boolean_t
unlink_name(dns_adb_t *adb, dns_adbname_t *name) {
- int bucket;
- isc_boolean_t result = ISC_FALSE;
+ int bucket;
+ isc_boolean_t result = ISC_FALSE;
- bucket = name->lock_bucket;
- INSIST(bucket != DNS_ADB_INVALIDBUCKET);
+ bucket = name->lock_bucket;
+ INSIST(bucket != DNS_ADB_INVALIDBUCKET);
- ISC_LIST_UNLINK(adb->names[bucket], name, plink);
- name->lock_bucket = DNS_ADB_INVALIDBUCKET;
- INSIST(adb->name_refcnt[bucket] > 0);
- adb->name_refcnt[bucket]--;
- if (adb->name_sd[bucket] && adb->name_refcnt[bucket] == 0)
- result = ISC_TRUE;
- return (result);
+ ISC_LIST_UNLINK(adb->names[bucket], name, plink);
+ name->lock_bucket = DNS_ADB_INVALIDBUCKET;
+ INSIST(adb->name_refcnt[bucket] > 0);
+ adb->name_refcnt[bucket]--;
+ if (adb->name_sd[bucket] && adb->name_refcnt[bucket] == 0)
+ result = ISC_TRUE;
+ return (result);
}
/*
@@ -788,9 +756,9 @@ unlink_name(dns_adb_t *adb, dns_adbname_t *name) {
*/
static inline void
link_entry(dns_adb_t *adb, int bucket, dns_adbentry_t *entry) {
- ISC_LIST_PREPEND(adb->entries[bucket], entry, plink);
- entry->lock_bucket = bucket;
- adb->entry_refcnt[bucket]++;
+ ISC_LIST_PREPEND(adb->entries[bucket], entry, plink);
+ entry->lock_bucket = bucket;
+ adb->entry_refcnt[bucket]++;
}
/*
@@ -798,28 +766,28 @@ link_entry(dns_adb_t *adb, int bucket, dns_adbentry_t *entry) {
*/
static inline isc_boolean_t
unlink_entry(dns_adb_t *adb, dns_adbentry_t *entry) {
- int bucket;
- isc_boolean_t result = ISC_FALSE;
+ int bucket;
+ isc_boolean_t result = ISC_FALSE;
- bucket = entry->lock_bucket;
- INSIST(bucket != DNS_ADB_INVALIDBUCKET);
+ bucket = entry->lock_bucket;
+ INSIST(bucket != DNS_ADB_INVALIDBUCKET);
- ISC_LIST_UNLINK(adb->entries[bucket], entry, plink);
- entry->lock_bucket = DNS_ADB_INVALIDBUCKET;
- INSIST(adb->entry_refcnt[bucket] > 0);
- adb->entry_refcnt[bucket]--;
- if (adb->entry_sd[bucket] && adb->entry_refcnt[bucket] == 0)
- result = ISC_TRUE;
- return (result);
+ ISC_LIST_UNLINK(adb->entries[bucket], entry, plink);
+ entry->lock_bucket = DNS_ADB_INVALIDBUCKET;
+ INSIST(adb->entry_refcnt[bucket] > 0);
+ adb->entry_refcnt[bucket]--;
+ if (adb->entry_sd[bucket] && adb->entry_refcnt[bucket] == 0)
+ result = ISC_TRUE;
+ return (result);
}
static inline void
violate_locking_hierarchy(isc_mutex_t *have, isc_mutex_t *want) {
- if (isc_mutex_trylock(want) != ISC_R_SUCCESS) {
- UNLOCK(have);
- LOCK(want);
- LOCK(have);
- }
+ if (isc_mutex_trylock(want) != ISC_R_SUCCESS) {
+ UNLOCK(have);
+ LOCK(want);
+ LOCK(have);
+ }
}
/*
@@ -828,44 +796,44 @@ violate_locking_hierarchy(isc_mutex_t *have, isc_mutex_t *want) {
*/
static isc_boolean_t
shutdown_names(dns_adb_t *adb) {
- int bucket;
- isc_boolean_t result = ISC_FALSE;
- dns_adbname_t *name;
- dns_adbname_t *next_name;
-
- for (bucket = 0; bucket < NBUCKETS; bucket++) {
- LOCK(&adb->namelocks[bucket]);
- adb->name_sd[bucket] = ISC_TRUE;
-
- name = ISC_LIST_HEAD(adb->names[bucket]);
- if (name == NULL) {
- /*
- * This bucket has no names. We must decrement the
- * irefcnt ourselves, since it will not be
- * automatically triggered by a name being unlinked.
- */
- INSIST(result == ISC_FALSE);
- result = dec_adb_irefcnt(adb);
- } else {
- /*
- * Run through the list. For each name, clean up finds
- * found there, and cancel any fetches running. When
- * all the fetches are canceled, the name will destroy
- * itself.
- */
- while (name != NULL) {
- next_name = ISC_LIST_NEXT(name, plink);
- INSIST(result == ISC_FALSE);
- result = kill_name(&name,
- DNS_EVENT_ADBSHUTDOWN,
- ISC_FALSE);
- name = next_name;
- }
- }
-
- UNLOCK(&adb->namelocks[bucket]);
- }
- return (result);
+ int bucket;
+ isc_boolean_t result = ISC_FALSE;
+ dns_adbname_t *name;
+ dns_adbname_t *next_name;
+
+ for (bucket = 0; bucket < NBUCKETS; bucket++) {
+ LOCK(&adb->namelocks[bucket]);
+ adb->name_sd[bucket] = ISC_TRUE;
+
+ name = ISC_LIST_HEAD(adb->names[bucket]);
+ if (name == NULL) {
+ /*
+ * This bucket has no names. We must decrement the
+ * irefcnt ourselves, since it will not be
+ * automatically triggered by a name being unlinked.
+ */
+ INSIST(result == ISC_FALSE);
+ result = dec_adb_irefcnt(adb);
+ } else {
+ /*
+ * Run through the list. For each name, clean up finds
+ * found there, and cancel any fetches running. When
+ * all the fetches are canceled, the name will destroy
+ * itself.
+ */
+ while (name != NULL) {
+ next_name = ISC_LIST_NEXT(name, plink);
+ INSIST(result == ISC_FALSE);
+ result = kill_name(&name,
+ DNS_EVENT_ADBSHUTDOWN,
+ ISC_FALSE);
+ name = next_name;
+ }
+ }
+
+ UNLOCK(&adb->namelocks[bucket]);
+ }
+ return (result);
}
/*
@@ -874,44 +842,44 @@ shutdown_names(dns_adb_t *adb) {
*/
static isc_boolean_t
shutdown_entries(dns_adb_t *adb) {
- int bucket;
- isc_boolean_t result = ISC_FALSE;
- dns_adbentry_t *entry;
- dns_adbentry_t *next_entry;
-
- for (bucket = 0; bucket < NBUCKETS; bucket++) {
- LOCK(&adb->entrylocks[bucket]);
- adb->entry_sd[bucket] = ISC_TRUE;
-
- entry = ISC_LIST_HEAD(adb->entries[bucket]);
- if (entry == NULL) {
- /*
- * This bucket has no entries. We must decrement the
- * irefcnt ourselves, since it will not be
- * automatically triggered by an entry being unlinked.
- */
- result = dec_adb_irefcnt(adb);
- } else {
- /*
- * Run through the list. Cleanup any entries not
- * associated with names, and which are not in use.
- */
- while (entry != NULL) {
- next_entry = ISC_LIST_NEXT(entry, plink);
- if (entry->refcnt == 0 &&
- entry->expires != 0) {
- result = unlink_entry(adb, entry);
- free_adbentry(adb, &entry);
- if (result)
- result = dec_adb_irefcnt(adb);
- }
- entry = next_entry;
- }
- }
-
- UNLOCK(&adb->entrylocks[bucket]);
- }
- return (result);
+ int bucket;
+ isc_boolean_t result = ISC_FALSE;
+ dns_adbentry_t *entry;
+ dns_adbentry_t *next_entry;
+
+ for (bucket = 0; bucket < NBUCKETS; bucket++) {
+ LOCK(&adb->entrylocks[bucket]);
+ adb->entry_sd[bucket] = ISC_TRUE;
+
+ entry = ISC_LIST_HEAD(adb->entries[bucket]);
+ if (entry == NULL) {
+ /*
+ * This bucket has no entries. We must decrement the
+ * irefcnt ourselves, since it will not be
+ * automatically triggered by an entry being unlinked.
+ */
+ result = dec_adb_irefcnt(adb);
+ } else {
+ /*
+ * Run through the list. Cleanup any entries not
+ * associated with names, and which are not in use.
+ */
+ while (entry != NULL) {
+ next_entry = ISC_LIST_NEXT(entry, plink);
+ if (entry->refcnt == 0 &&
+ entry->expires != 0) {
+ result = unlink_entry(adb, entry);
+ free_adbentry(adb, &entry);
+ if (result)
+ result = dec_adb_irefcnt(adb);
+ }
+ entry = next_entry;
+ }
+ }
+
+ UNLOCK(&adb->entrylocks[bucket]);
+ }
+ return (result);
}
/*
@@ -919,11 +887,11 @@ shutdown_entries(dns_adb_t *adb) {
*/
static void
cancel_fetches_at_name(dns_adbname_t *name) {
- if (NAME_FETCH_A(name))
- dns_resolver_cancelfetch(name->fetch_a->fetch);
+ if (NAME_FETCH_A(name))
+ dns_resolver_cancelfetch(name->fetch_a->fetch);
- if (NAME_FETCH_AAAA(name))
- dns_resolver_cancelfetch(name->fetch_aaaa->fetch);
+ if (NAME_FETCH_AAAA(name))
+ dns_resolver_cancelfetch(name->fetch_aaaa->fetch);
}
/*
@@ -931,131 +899,131 @@ cancel_fetches_at_name(dns_adbname_t *name) {
*/
static isc_boolean_t
clean_namehooks(dns_adb_t *adb, dns_adbnamehooklist_t *namehooks,
- isc_boolean_t is_purge)
+ isc_boolean_t is_purge)
{
- dns_adbentry_t *entry;
- dns_adbnamehook_t *namehook;
- int addr_bucket;
- isc_boolean_t result = ISC_FALSE;
-
- addr_bucket = DNS_ADB_INVALIDBUCKET;
- namehook = ISC_LIST_HEAD(*namehooks);
- while (namehook != NULL) {
- INSIST(DNS_ADBNAMEHOOK_VALID(namehook));
-
- /*
- * Clean up the entry if needed.
- */
- entry = namehook->entry;
- if (entry != NULL) {
- INSIST(DNS_ADBENTRY_VALID(entry));
-
- if (addr_bucket != entry->lock_bucket) {
- if (addr_bucket != DNS_ADB_INVALIDBUCKET)
- UNLOCK(&adb->entrylocks[addr_bucket]);
- addr_bucket = entry->lock_bucket;
- LOCK(&adb->entrylocks[addr_bucket]);
- }
-
- /*
- * If we are in an overmem situation, force expiration
- * so that # of names and # of entries are well
- * balanced.
- */
- if (is_purge)
- entry->expires = 0;
- result = dec_entry_refcnt(adb, entry, ISC_FALSE);
- }
-
- /*
- * Free the namehook
- */
- namehook->entry = NULL;
- ISC_LIST_UNLINK(*namehooks, namehook, plink);
- free_adbnamehook(adb, &namehook);
-
- namehook = ISC_LIST_HEAD(*namehooks);
- }
-
- if (addr_bucket != DNS_ADB_INVALIDBUCKET)
- UNLOCK(&adb->entrylocks[addr_bucket]);
- return (result);
+ dns_adbentry_t *entry;
+ dns_adbnamehook_t *namehook;
+ int addr_bucket;
+ isc_boolean_t result = ISC_FALSE;
+
+ addr_bucket = DNS_ADB_INVALIDBUCKET;
+ namehook = ISC_LIST_HEAD(*namehooks);
+ while (namehook != NULL) {
+ INSIST(DNS_ADBNAMEHOOK_VALID(namehook));
+
+ /*
+ * Clean up the entry if needed.
+ */
+ entry = namehook->entry;
+ if (entry != NULL) {
+ INSIST(DNS_ADBENTRY_VALID(entry));
+
+ if (addr_bucket != entry->lock_bucket) {
+ if (addr_bucket != DNS_ADB_INVALIDBUCKET)
+ UNLOCK(&adb->entrylocks[addr_bucket]);
+ addr_bucket = entry->lock_bucket;
+ LOCK(&adb->entrylocks[addr_bucket]);
+ }
+
+ /*
+ * If we are in an overmem situation, force expiration
+ * so that # of names and # of entries are well
+ * balanced.
+ */
+ if (is_purge)
+ entry->expires = 0;
+ result = dec_entry_refcnt(adb, entry, ISC_FALSE);
+ }
+
+ /*
+ * Free the namehook
+ */
+ namehook->entry = NULL;
+ ISC_LIST_UNLINK(*namehooks, namehook, plink);
+ free_adbnamehook(adb, &namehook);
+
+ namehook = ISC_LIST_HEAD(*namehooks);
+ }
+
+ if (addr_bucket != DNS_ADB_INVALIDBUCKET)
+ UNLOCK(&adb->entrylocks[addr_bucket]);
+ return (result);
}
static void
clean_target(dns_adb_t *adb, dns_name_t *target) {
- if (dns_name_countlabels(target) > 0) {
- dns_name_free(target, adb->mctx);
- dns_name_init(target, NULL);
- }
+ if (dns_name_countlabels(target) > 0) {
+ dns_name_free(target, adb->mctx);
+ dns_name_init(target, NULL);
+ }
}
static isc_result_t
set_target(dns_adb_t *adb, dns_name_t *name, dns_name_t *fname,
- dns_rdataset_t *rdataset, dns_name_t *target)
+ dns_rdataset_t *rdataset, dns_name_t *target)
{
- isc_result_t result;
- dns_namereln_t namereln;
- unsigned int nlabels;
- int order;
- dns_rdata_t rdata = DNS_RDATA_INIT;
- dns_fixedname_t fixed1, fixed2;
- dns_name_t *prefix, *new_target;
-
- REQUIRE(dns_name_countlabels(target) == 0);
-
- if (rdataset->type == dns_rdatatype_cname) {
- dns_rdata_cname_t cname;
-
- /*
- * Copy the CNAME's target into the target name.
- */
- result = dns_rdataset_first(rdataset);
- if (result != ISC_R_SUCCESS)
- return (result);
- dns_rdataset_current(rdataset, &rdata);
- result = dns_rdata_tostruct(&rdata, &cname, NULL);
- if (result != ISC_R_SUCCESS)
- return (result);
- result = dns_name_dup(&cname.cname, adb->mctx, target);
- dns_rdata_freestruct(&cname);
- if (result != ISC_R_SUCCESS)
- return (result);
- } else {
- dns_rdata_dname_t dname;
-
- INSIST(rdataset->type == dns_rdatatype_dname);
- namereln = dns_name_fullcompare(name, fname, &order, &nlabels);
- INSIST(namereln == dns_namereln_subdomain);
- /*
- * Get the target name of the DNAME.
- */
- result = dns_rdataset_first(rdataset);
- if (result != ISC_R_SUCCESS)
- return (result);
- dns_rdataset_current(rdataset, &rdata);
- result = dns_rdata_tostruct(&rdata, &dname, NULL);
- if (result != ISC_R_SUCCESS)
- return (result);
- /*
- * Construct the new target name.
- */
- dns_fixedname_init(&fixed1);
- prefix = dns_fixedname_name(&fixed1);
- dns_fixedname_init(&fixed2);
- new_target = dns_fixedname_name(&fixed2);
- dns_name_split(name, nlabels, prefix, NULL);
- result = dns_name_concatenate(prefix, &dname.dname, new_target,
- NULL);
- dns_rdata_freestruct(&dname);
- if (result != ISC_R_SUCCESS)
- return (result);
- result = dns_name_dup(new_target, adb->mctx, target);
- if (result != ISC_R_SUCCESS)
- return (result);
- }
-
- return (ISC_R_SUCCESS);
+ isc_result_t result;
+ dns_namereln_t namereln;
+ unsigned int nlabels;
+ int order;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_fixedname_t fixed1, fixed2;
+ dns_name_t *prefix, *new_target;
+
+ REQUIRE(dns_name_countlabels(target) == 0);
+
+ if (rdataset->type == dns_rdatatype_cname) {
+ dns_rdata_cname_t cname;
+
+ /*
+ * Copy the CNAME's target into the target name.
+ */
+ result = dns_rdataset_first(rdataset);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ dns_rdataset_current(rdataset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &cname, NULL);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ result = dns_name_dup(&cname.cname, adb->mctx, target);
+ dns_rdata_freestruct(&cname);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ } else {
+ dns_rdata_dname_t dname;
+
+ INSIST(rdataset->type == dns_rdatatype_dname);
+ namereln = dns_name_fullcompare(name, fname, &order, &nlabels);
+ INSIST(namereln == dns_namereln_subdomain);
+ /*
+ * Get the target name of the DNAME.
+ */
+ result = dns_rdataset_first(rdataset);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ dns_rdataset_current(rdataset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &dname, NULL);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ /*
+ * Construct the new target name.
+ */
+ dns_fixedname_init(&fixed1);
+ prefix = dns_fixedname_name(&fixed1);
+ dns_fixedname_init(&fixed2);
+ new_target = dns_fixedname_name(&fixed2);
+ dns_name_split(name, nlabels, prefix, NULL);
+ result = dns_name_concatenate(prefix, &dname.dname, new_target,
+ NULL);
+ dns_rdata_freestruct(&dname);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ result = dns_name_dup(new_target, adb->mctx, target);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ }
+
+ return (ISC_R_SUCCESS);
}
/*
@@ -1063,16 +1031,16 @@ set_target(dns_adb_t *adb, dns_name_t *name, dns_name_t *fname,
*/
static void
event_free(isc_event_t *event) {
- dns_adbfind_t *find;
+ dns_adbfind_t *find;
- INSIST(event != NULL);
- find = event->ev_destroy_arg;
- INSIST(DNS_ADBFIND_VALID(find));
+ INSIST(event != NULL);
+ find = event->ev_destroy_arg;
+ INSIST(DNS_ADBFIND_VALID(find));
- LOCK(&find->lock);
- find->flags |= FIND_EVENT_FREED;
- event->ev_destroy_arg = NULL;
- UNLOCK(&find->lock);
+ LOCK(&find->lock);
+ find->flags |= FIND_EVENT_FREED;
+ event->ev_destroy_arg = NULL;
+ UNLOCK(&find->lock);
}
/*
@@ -1080,502 +1048,487 @@ event_free(isc_event_t *event) {
*/
static void
clean_finds_at_name(dns_adbname_t *name, isc_eventtype_t evtype,
- unsigned int addrs)
+ unsigned int addrs)
{
- isc_event_t *ev;
- isc_task_t *task;
- dns_adbfind_t *find;
- dns_adbfind_t *next_find;
- isc_boolean_t process;
- unsigned int wanted, notify;
-
- DP(ENTER_LEVEL,
- "ENTER clean_finds_at_name, name %p, evtype %08x, addrs %08x",
- name, evtype, addrs);
-
- find = ISC_LIST_HEAD(name->finds);
- while (find != NULL) {
- LOCK(&find->lock);
- next_find = ISC_LIST_NEXT(find, plink);
-
- process = ISC_FALSE;
- wanted = find->flags & DNS_ADBFIND_ADDRESSMASK;
- notify = wanted & addrs;
-
- switch (evtype) {
- case DNS_EVENT_ADBMOREADDRESSES:
- DP(ISC_LOG_DEBUG(3), "DNS_EVENT_ADBMOREADDRESSES");
- if ((notify) != 0) {
- find->flags &= ~addrs;
- process = ISC_TRUE;
- }
- break;
- case DNS_EVENT_ADBNOMOREADDRESSES:
- DP(ISC_LOG_DEBUG(3), "DNS_EVENT_ADBNOMOREADDRESSES");
- find->flags &= ~addrs;
- wanted = find->flags & DNS_ADBFIND_ADDRESSMASK;
- if (wanted == 0)
- process = ISC_TRUE;
- break;
- default:
- find->flags &= ~addrs;
- process = ISC_TRUE;
- }
-
- if (process) {
- DP(DEF_LEVEL, "cfan: processing find %p", find);
- /*
- * Unlink the find from the name, letting the caller
- * call dns_adb_destroyfind() on it to clean it up
- * later.
- */
- ISC_LIST_UNLINK(name->finds, find, plink);
- find->adbname = NULL;
- find->name_bucket = DNS_ADB_INVALIDBUCKET;
-
- INSIST(!FIND_EVENTSENT(find));
-
- ev = &find->event;
- task = ev->ev_sender;
- ev->ev_sender = find;
- find->result_v4 = find_err_map[name->fetch_err];
- find->result_v6 = find_err_map[name->fetch6_err];
- ev->ev_type = evtype;
- ev->ev_destroy = event_free;
- ev->ev_destroy_arg = find;
-
- DP(DEF_LEVEL,
- "sending event %p to task %p for find %p",
- ev, task, find);
-
- isc_task_sendanddetach(&task, (isc_event_t **)&ev);
- } else {
- DP(DEF_LEVEL, "cfan: skipping find %p", find);
- }
-
- UNLOCK(&find->lock);
- find = next_find;
- }
-
- DP(ENTER_LEVEL, "EXIT clean_finds_at_name, name %p", name);
+ isc_event_t *ev;
+ isc_task_t *task;
+ dns_adbfind_t *find;
+ dns_adbfind_t *next_find;
+ isc_boolean_t process;
+ unsigned int wanted, notify;
+
+ DP(ENTER_LEVEL,
+ "ENTER clean_finds_at_name, name %p, evtype %08x, addrs %08x",
+ name, evtype, addrs);
+
+ find = ISC_LIST_HEAD(name->finds);
+ while (find != NULL) {
+ LOCK(&find->lock);
+ next_find = ISC_LIST_NEXT(find, plink);
+
+ process = ISC_FALSE;
+ wanted = find->flags & DNS_ADBFIND_ADDRESSMASK;
+ notify = wanted & addrs;
+
+ switch (evtype) {
+ case DNS_EVENT_ADBMOREADDRESSES:
+ DP(ISC_LOG_DEBUG(3), "DNS_EVENT_ADBMOREADDRESSES");
+ if ((notify) != 0) {
+ find->flags &= ~addrs;
+ process = ISC_TRUE;
+ }
+ break;
+ case DNS_EVENT_ADBNOMOREADDRESSES:
+ DP(ISC_LOG_DEBUG(3), "DNS_EVENT_ADBNOMOREADDRESSES");
+ find->flags &= ~addrs;
+ wanted = find->flags & DNS_ADBFIND_ADDRESSMASK;
+ if (wanted == 0)
+ process = ISC_TRUE;
+ break;
+ default:
+ find->flags &= ~addrs;
+ process = ISC_TRUE;
+ }
+
+ if (process) {
+ DP(DEF_LEVEL, "cfan: processing find %p", find);
+ /*
+ * Unlink the find from the name, letting the caller
+ * call dns_adb_destroyfind() on it to clean it up
+ * later.
+ */
+ ISC_LIST_UNLINK(name->finds, find, plink);
+ find->adbname = NULL;
+ find->name_bucket = DNS_ADB_INVALIDBUCKET;
+
+ INSIST(!FIND_EVENTSENT(find));
+
+ ev = &find->event;
+ task = ev->ev_sender;
+ ev->ev_sender = find;
+ find->result_v4 = find_err_map[name->fetch_err];
+ find->result_v6 = find_err_map[name->fetch6_err];
+ ev->ev_type = evtype;
+ ev->ev_destroy = event_free;
+ ev->ev_destroy_arg = find;
+
+ DP(DEF_LEVEL,
+ "sending event %p to task %p for find %p",
+ ev, task, find);
+
+ isc_task_sendanddetach(&task, (isc_event_t **)&ev);
+ } else {
+ DP(DEF_LEVEL, "cfan: skipping find %p", find);
+ }
+
+ UNLOCK(&find->lock);
+ find = next_find;
+ }
+
+ DP(ENTER_LEVEL, "EXIT clean_finds_at_name, name %p", name);
}
static inline void
check_exit(dns_adb_t *adb) {
- isc_event_t *event;
- /*
- * The caller must be holding the adb lock.
- */
- if (adb->shutting_down) {
- /*
- * If there aren't any external references either, we're
- * done. Send the control event to initiate shutdown.
- */
- INSIST(!adb->cevent_sent); /* Sanity check. */
- event = &adb->cevent;
- isc_task_send(adb->task, &event);
- adb->cevent_sent = ISC_TRUE;
- }
+ isc_event_t *event;
+ /*
+ * The caller must be holding the adb lock.
+ */
+ if (adb->shutting_down) {
+ /*
+ * If there aren't any external references either, we're
+ * done. Send the control event to initiate shutdown.
+ */
+ INSIST(!adb->cevent_sent); /* Sanity check. */
+ event = &adb->cevent;
+ isc_task_send(adb->task, &event);
+ adb->cevent_sent = ISC_TRUE;
+ }
}
static inline isc_boolean_t
dec_adb_irefcnt(dns_adb_t *adb) {
- isc_event_t *event;
- isc_task_t *etask;
- isc_boolean_t result = ISC_FALSE;
+ isc_event_t *event;
+ isc_task_t *etask;
+ isc_boolean_t result = ISC_FALSE;
- LOCK(&adb->reflock);
+ LOCK(&adb->reflock);
- INSIST(adb->irefcnt > 0);
- adb->irefcnt--;
+ INSIST(adb->irefcnt > 0);
+ adb->irefcnt--;
- if (adb->irefcnt == 0) {
- event = ISC_LIST_HEAD(adb->whenshutdown);
- while (event != NULL) {
- ISC_LIST_UNLINK(adb->whenshutdown, event, ev_link);
- etask = event->ev_sender;
- event->ev_sender = adb;
- isc_task_sendanddetach(&etask, &event);
- event = ISC_LIST_HEAD(adb->whenshutdown);
- }
- }
+ if (adb->irefcnt == 0) {
+ event = ISC_LIST_HEAD(adb->whenshutdown);
+ while (event != NULL) {
+ ISC_LIST_UNLINK(adb->whenshutdown, event, ev_link);
+ etask = event->ev_sender;
+ event->ev_sender = adb;
+ isc_task_sendanddetach(&etask, &event);
+ event = ISC_LIST_HEAD(adb->whenshutdown);
+ }
+ }
- if (adb->irefcnt == 0 && adb->erefcnt == 0)
- result = ISC_TRUE;
- UNLOCK(&adb->reflock);
- return (result);
+ if (adb->irefcnt == 0 && adb->erefcnt == 0)
+ result = ISC_TRUE;
+ UNLOCK(&adb->reflock);
+ return (result);
}
static inline void
inc_adb_irefcnt(dns_adb_t *adb) {
- LOCK(&adb->reflock);
- adb->irefcnt++;
- UNLOCK(&adb->reflock);
+ LOCK(&adb->reflock);
+ adb->irefcnt++;
+ UNLOCK(&adb->reflock);
}
static inline void
inc_adb_erefcnt(dns_adb_t *adb) {
- LOCK(&adb->reflock);
- adb->erefcnt++;
- UNLOCK(&adb->reflock);
+ LOCK(&adb->reflock);
+ adb->erefcnt++;
+ UNLOCK(&adb->reflock);
}
static inline void
inc_entry_refcnt(dns_adb_t *adb, dns_adbentry_t *entry, isc_boolean_t lock) {
- int bucket;
+ int bucket;
- bucket = entry->lock_bucket;
+ bucket = entry->lock_bucket;
- if (lock)
- LOCK(&adb->entrylocks[bucket]);
+ if (lock)
+ LOCK(&adb->entrylocks[bucket]);
- entry->refcnt++;
+ entry->refcnt++;
- if (lock)
- UNLOCK(&adb->entrylocks[bucket]);
+ if (lock)
+ UNLOCK(&adb->entrylocks[bucket]);
}
static inline isc_boolean_t
dec_entry_refcnt(dns_adb_t *adb, dns_adbentry_t *entry, isc_boolean_t lock) {
- int bucket;
- isc_boolean_t destroy_entry;
- isc_boolean_t result = ISC_FALSE;
+ int bucket;
+ isc_boolean_t destroy_entry;
+ isc_boolean_t result = ISC_FALSE;
- bucket = entry->lock_bucket;
+ bucket = entry->lock_bucket;
- if (lock)
- LOCK(&adb->entrylocks[bucket]);
+ if (lock)
+ LOCK(&adb->entrylocks[bucket]);
- INSIST(entry->refcnt > 0);
- entry->refcnt--;
+ INSIST(entry->refcnt > 0);
+ entry->refcnt--;
- destroy_entry = ISC_FALSE;
- if (entry->refcnt == 0 &&
- (adb->entry_sd[bucket] || entry->expires == 0)) {
- destroy_entry = ISC_TRUE;
- result = unlink_entry(adb, entry);
- }
+ destroy_entry = ISC_FALSE;
+ if (entry->refcnt == 0 &&
+ (adb->entry_sd[bucket] || entry->expires == 0)) {
+ destroy_entry = ISC_TRUE;
+ result = unlink_entry(adb, entry);
+ }
- if (lock)
- UNLOCK(&adb->entrylocks[bucket]);
+ if (lock)
+ UNLOCK(&adb->entrylocks[bucket]);
- if (!destroy_entry)
- return (result);
+ if (!destroy_entry)
+ return (result);
- entry->lock_bucket = DNS_ADB_INVALIDBUCKET;
+ entry->lock_bucket = DNS_ADB_INVALIDBUCKET;
- free_adbentry(adb, &entry);
- if (result)
- result =dec_adb_irefcnt(adb);
+ free_adbentry(adb, &entry);
+ if (result)
+ result = dec_adb_irefcnt(adb);
- return (result);
+ return (result);
}
static inline dns_adbname_t *
new_adbname(dns_adb_t *adb, dns_name_t *dnsname) {
- dns_adbname_t *name;
-
- name = isc_mempool_get(adb->nmp);
- if (name == NULL)
- return (NULL);
-
- dns_name_init(&name->name, NULL);
- if (dns_name_dup(dnsname, adb->mctx, &name->name) != ISC_R_SUCCESS) {
- isc_mempool_put(adb->nmp, name);
- return (NULL);
- }
- dns_name_init(&name->target, NULL);
- name->magic = DNS_ADBNAME_MAGIC;
- name->adb = adb;
- name->partial_result = 0;
- name->flags = 0;
- name->expire_v4 = INT_MAX;
- name->expire_v6 = INT_MAX;
- name->expire_target = INT_MAX;
- name->chains = 0;
- name->lock_bucket = DNS_ADB_INVALIDBUCKET;
- ISC_LIST_INIT(name->v4);
- ISC_LIST_INIT(name->v6);
- name->fetch_a = NULL;
- name->fetch_aaaa = NULL;
- name->fetch_err = FIND_ERR_UNEXPECTED;
- name->fetch6_err = FIND_ERR_UNEXPECTED;
- ISC_LIST_INIT(name->finds);
- ISC_LINK_INIT(name, plink);
-
- return (name);
+ dns_adbname_t *name;
+
+ name = isc_mempool_get(adb->nmp);
+ if (name == NULL)
+ return (NULL);
+
+ dns_name_init(&name->name, NULL);
+ if (dns_name_dup(dnsname, adb->mctx, &name->name) != ISC_R_SUCCESS) {
+ isc_mempool_put(adb->nmp, name);
+ return (NULL);
+ }
+ dns_name_init(&name->target, NULL);
+ name->magic = DNS_ADBNAME_MAGIC;
+ name->adb = adb;
+ name->partial_result = 0;
+ name->flags = 0;
+ name->expire_v4 = INT_MAX;
+ name->expire_v6 = INT_MAX;
+ name->expire_target = INT_MAX;
+ name->chains = 0;
+ name->lock_bucket = DNS_ADB_INVALIDBUCKET;
+ ISC_LIST_INIT(name->v4);
+ ISC_LIST_INIT(name->v6);
+ name->fetch_a = NULL;
+ name->fetch_aaaa = NULL;
+ name->fetch_err = FIND_ERR_UNEXPECTED;
+ name->fetch6_err = FIND_ERR_UNEXPECTED;
+ ISC_LIST_INIT(name->finds);
+ ISC_LINK_INIT(name, plink);
+
+ return (name);
}
static inline void
free_adbname(dns_adb_t *adb, dns_adbname_t **name) {
- dns_adbname_t *n;
-
- INSIST(name != NULL && DNS_ADBNAME_VALID(*name));
- n = *name;
- *name = NULL;
-
- INSIST(!NAME_HAS_V4(n));
- INSIST(!NAME_HAS_V6(n));
- INSIST(!NAME_FETCH(n));
- INSIST(ISC_LIST_EMPTY(n->finds));
- INSIST(!ISC_LINK_LINKED(n, plink));
- INSIST(n->lock_bucket == DNS_ADB_INVALIDBUCKET);
- INSIST(n->adb == adb);
-
-#ifdef LRU_DEBUG
- adb->nname--; /* XXX: omit ADB lock for brevity */
- INSIST((int)adb->nname >= 0);
-#endif
+ dns_adbname_t *n;
+
+ INSIST(name != NULL && DNS_ADBNAME_VALID(*name));
+ n = *name;
+ *name = NULL;
+
+ INSIST(!NAME_HAS_V4(n));
+ INSIST(!NAME_HAS_V6(n));
+ INSIST(!NAME_FETCH(n));
+ INSIST(ISC_LIST_EMPTY(n->finds));
+ INSIST(!ISC_LINK_LINKED(n, plink));
+ INSIST(n->lock_bucket == DNS_ADB_INVALIDBUCKET);
+ INSIST(n->adb == adb);
- n->magic = 0;
- dns_name_free(&n->name, adb->mctx);
+ n->magic = 0;
+ dns_name_free(&n->name, adb->mctx);
- isc_mempool_put(adb->nmp, n);
+ isc_mempool_put(adb->nmp, n);
}
static inline dns_adbnamehook_t *
new_adbnamehook(dns_adb_t *adb, dns_adbentry_t *entry) {
- dns_adbnamehook_t *nh;
+ dns_adbnamehook_t *nh;
- nh = isc_mempool_get(adb->nhmp);
- if (nh == NULL)
- return (NULL);
+ nh = isc_mempool_get(adb->nhmp);
+ if (nh == NULL)
+ return (NULL);
- nh->magic = DNS_ADBNAMEHOOK_MAGIC;
- nh->entry = entry;
- ISC_LINK_INIT(nh, plink);
+ nh->magic = DNS_ADBNAMEHOOK_MAGIC;
+ nh->entry = entry;
+ ISC_LINK_INIT(nh, plink);
- return (nh);
+ return (nh);
}
static inline void
free_adbnamehook(dns_adb_t *adb, dns_adbnamehook_t **namehook) {
- dns_adbnamehook_t *nh;
+ dns_adbnamehook_t *nh;
- INSIST(namehook != NULL && DNS_ADBNAMEHOOK_VALID(*namehook));
- nh = *namehook;
- *namehook = NULL;
+ INSIST(namehook != NULL && DNS_ADBNAMEHOOK_VALID(*namehook));
+ nh = *namehook;
+ *namehook = NULL;
- INSIST(nh->entry == NULL);
- INSIST(!ISC_LINK_LINKED(nh, plink));
+ INSIST(nh->entry == NULL);
+ INSIST(!ISC_LINK_LINKED(nh, plink));
- nh->magic = 0;
- isc_mempool_put(adb->nhmp, nh);
+ nh->magic = 0;
+ isc_mempool_put(adb->nhmp, nh);
}
static inline dns_adblameinfo_t *
new_adblameinfo(dns_adb_t *adb, dns_name_t *qname, dns_rdatatype_t qtype) {
- dns_adblameinfo_t *li;
+ dns_adblameinfo_t *li;
- li = isc_mempool_get(adb->limp);
- if (li == NULL)
- return (NULL);
+ li = isc_mempool_get(adb->limp);
+ if (li == NULL)
+ return (NULL);
- dns_name_init(&li->qname, NULL);
- if (dns_name_dup(qname, adb->mctx, &li->qname) != ISC_R_SUCCESS) {
- isc_mempool_put(adb->limp, li);
- return (NULL);
- }
- li->magic = DNS_ADBLAMEINFO_MAGIC;
- li->lame_timer = 0;
- li->qtype = qtype;
- ISC_LINK_INIT(li, plink);
+ dns_name_init(&li->qname, NULL);
+ if (dns_name_dup(qname, adb->mctx, &li->qname) != ISC_R_SUCCESS) {
+ isc_mempool_put(adb->limp, li);
+ return (NULL);
+ }
+ li->magic = DNS_ADBLAMEINFO_MAGIC;
+ li->lame_timer = 0;
+ li->qtype = qtype;
+ ISC_LINK_INIT(li, plink);
- return (li);
+ return (li);
}
static inline void
free_adblameinfo(dns_adb_t *adb, dns_adblameinfo_t **lameinfo) {
- dns_adblameinfo_t *li;
+ dns_adblameinfo_t *li;
- INSIST(lameinfo != NULL && DNS_ADBLAMEINFO_VALID(*lameinfo));
- li = *lameinfo;
- *lameinfo = NULL;
+ INSIST(lameinfo != NULL && DNS_ADBLAMEINFO_VALID(*lameinfo));
+ li = *lameinfo;
+ *lameinfo = NULL;
- INSIST(!ISC_LINK_LINKED(li, plink));
+ INSIST(!ISC_LINK_LINKED(li, plink));
- dns_name_free(&li->qname, adb->mctx);
+ dns_name_free(&li->qname, adb->mctx);
- li->magic = 0;
+ li->magic = 0;
- isc_mempool_put(adb->limp, li);
+ isc_mempool_put(adb->limp, li);
}
static inline dns_adbentry_t *
new_adbentry(dns_adb_t *adb) {
- dns_adbentry_t *e;
- isc_uint32_t r;
-
- e = isc_mempool_get(adb->emp);
- if (e == NULL)
- return (NULL);
-
- e->magic = DNS_ADBENTRY_MAGIC;
- e->lock_bucket = DNS_ADB_INVALIDBUCKET;
- e->refcnt = 0;
- e->flags = 0;
- isc_random_get(&r);
- e->srtt = (r & 0x1f) + 1;
- e->expires = 0;
- ISC_LIST_INIT(e->lameinfo);
- ISC_LINK_INIT(e, plink);
-
-#ifdef LRU_DEBUG
- adb->nentry++; /* XXX: omit ADB lock for brevity */
- adb->nentry_total++;
-#endif
+ dns_adbentry_t *e;
+ isc_uint32_t r;
+
+ e = isc_mempool_get(adb->emp);
+ if (e == NULL)
+ return (NULL);
- return (e);
+ e->magic = DNS_ADBENTRY_MAGIC;
+ e->lock_bucket = DNS_ADB_INVALIDBUCKET;
+ e->refcnt = 0;
+ e->flags = 0;
+ isc_random_get(&r);
+ e->srtt = (r & 0x1f) + 1;
+ e->expires = 0;
+ ISC_LIST_INIT(e->lameinfo);
+ ISC_LINK_INIT(e, plink);
+
+ return (e);
}
static inline void
free_adbentry(dns_adb_t *adb, dns_adbentry_t **entry) {
- dns_adbentry_t *e;
- dns_adblameinfo_t *li;
-
- INSIST(entry != NULL && DNS_ADBENTRY_VALID(*entry));
- e = *entry;
- *entry = NULL;
+ dns_adbentry_t *e;
+ dns_adblameinfo_t *li;
- INSIST(e->lock_bucket == DNS_ADB_INVALIDBUCKET);
- INSIST(e->refcnt == 0);
- INSIST(!ISC_LINK_LINKED(e, plink));
+ INSIST(entry != NULL && DNS_ADBENTRY_VALID(*entry));
+ e = *entry;
+ *entry = NULL;
- e->magic = 0;
+ INSIST(e->lock_bucket == DNS_ADB_INVALIDBUCKET);
+ INSIST(e->refcnt == 0);
+ INSIST(!ISC_LINK_LINKED(e, plink));
- li = ISC_LIST_HEAD(e->lameinfo);
- while (li != NULL) {
- ISC_LIST_UNLINK(e->lameinfo, li, plink);
- free_adblameinfo(adb, &li);
- li = ISC_LIST_HEAD(e->lameinfo);
- }
+ e->magic = 0;
-#ifdef LRU_DEBUG
- adb->nentry--; /* XXX: omit ADB lock for brevity */
- INSIST((int)adb->nentry >= 0);
-#endif
+ li = ISC_LIST_HEAD(e->lameinfo);
+ while (li != NULL) {
+ ISC_LIST_UNLINK(e->lameinfo, li, plink);
+ free_adblameinfo(adb, &li);
+ li = ISC_LIST_HEAD(e->lameinfo);
+ }
- isc_mempool_put(adb->emp, e);
+ isc_mempool_put(adb->emp, e);
}
static inline dns_adbfind_t *
new_adbfind(dns_adb_t *adb) {
- dns_adbfind_t *h;
- isc_result_t result;
-
- h = isc_mempool_get(adb->ahmp);
- if (h == NULL)
- return (NULL);
-
- /*
- * Public members.
- */
- h->magic = 0;
- h->adb = adb;
- h->partial_result = 0;
- h->options = 0;
- h->flags = 0;
- h->result_v4 = ISC_R_UNEXPECTED;
- h->result_v6 = ISC_R_UNEXPECTED;
- ISC_LINK_INIT(h, publink);
- ISC_LINK_INIT(h, plink);
- ISC_LIST_INIT(h->list);
- h->adbname = NULL;
- h->name_bucket = DNS_ADB_INVALIDBUCKET;
-
- /*
- * private members
- */
- result = isc_mutex_init(&h->lock);
- if (result != ISC_R_SUCCESS) {
- isc_mempool_put(adb->ahmp, h);
- return (NULL);
- }
-
- ISC_EVENT_INIT(&h->event, sizeof(isc_event_t), 0, 0, 0, NULL, NULL,
- NULL, NULL, h);
-
- inc_adb_irefcnt(adb);
- h->magic = DNS_ADBFIND_MAGIC;
- return (h);
+ dns_adbfind_t *h;
+ isc_result_t result;
+
+ h = isc_mempool_get(adb->ahmp);
+ if (h == NULL)
+ return (NULL);
+
+ /*
+ * Public members.
+ */
+ h->magic = 0;
+ h->adb = adb;
+ h->partial_result = 0;
+ h->options = 0;
+ h->flags = 0;
+ h->result_v4 = ISC_R_UNEXPECTED;
+ h->result_v6 = ISC_R_UNEXPECTED;
+ ISC_LINK_INIT(h, publink);
+ ISC_LINK_INIT(h, plink);
+ ISC_LIST_INIT(h->list);
+ h->adbname = NULL;
+ h->name_bucket = DNS_ADB_INVALIDBUCKET;
+
+ /*
+ * private members
+ */
+ result = isc_mutex_init(&h->lock);
+ if (result != ISC_R_SUCCESS) {
+ isc_mempool_put(adb->ahmp, h);
+ return (NULL);
+ }
+
+ ISC_EVENT_INIT(&h->event, sizeof(isc_event_t), 0, 0, 0, NULL, NULL,
+ NULL, NULL, h);
+
+ inc_adb_irefcnt(adb);
+ h->magic = DNS_ADBFIND_MAGIC;
+ return (h);
}
static inline dns_adbfetch_t *
new_adbfetch(dns_adb_t *adb) {
- dns_adbfetch_t *f;
+ dns_adbfetch_t *f;
- f = isc_mempool_get(adb->afmp);
- if (f == NULL)
- return (NULL);
+ f = isc_mempool_get(adb->afmp);
+ if (f == NULL)
+ return (NULL);
- f->magic = 0;
- f->namehook = NULL;
- f->entry = NULL;
- f->fetch = NULL;
+ f->magic = 0;
+ f->namehook = NULL;
+ f->entry = NULL;
+ f->fetch = NULL;
- f->namehook = new_adbnamehook(adb, NULL);
- if (f->namehook == NULL)
- goto err;
+ f->namehook = new_adbnamehook(adb, NULL);
+ if (f->namehook == NULL)
+ goto err;
- f->entry = new_adbentry(adb);
- if (f->entry == NULL)
- goto err;
+ f->entry = new_adbentry(adb);
+ if (f->entry == NULL)
+ goto err;
- dns_rdataset_init(&f->rdataset);
+ dns_rdataset_init(&f->rdataset);
- f->magic = DNS_ADBFETCH_MAGIC;
+ f->magic = DNS_ADBFETCH_MAGIC;
- return (f);
+ return (f);
err:
- if (f->namehook != NULL)
- free_adbnamehook(adb, &f->namehook);
- if (f->entry != NULL)
- free_adbentry(adb, &f->entry);
- isc_mempool_put(adb->afmp, f);
- return (NULL);
+ if (f->namehook != NULL)
+ free_adbnamehook(adb, &f->namehook);
+ if (f->entry != NULL)
+ free_adbentry(adb, &f->entry);
+ isc_mempool_put(adb->afmp, f);
+ return (NULL);
}
static inline void
free_adbfetch(dns_adb_t *adb, dns_adbfetch_t **fetch) {
- dns_adbfetch_t *f;
+ dns_adbfetch_t *f;
- INSIST(fetch != NULL && DNS_ADBFETCH_VALID(*fetch));
- f = *fetch;
- *fetch = NULL;
+ INSIST(fetch != NULL && DNS_ADBFETCH_VALID(*fetch));
+ f = *fetch;
+ *fetch = NULL;
- f->magic = 0;
+ f->magic = 0;
- if (f->namehook != NULL)
- free_adbnamehook(adb, &f->namehook);
- if (f->entry != NULL)
- free_adbentry(adb, &f->entry);
+ if (f->namehook != NULL)
+ free_adbnamehook(adb, &f->namehook);
+ if (f->entry != NULL)
+ free_adbentry(adb, &f->entry);
- if (dns_rdataset_isassociated(&f->rdataset))
- dns_rdataset_disassociate(&f->rdataset);
+ if (dns_rdataset_isassociated(&f->rdataset))
+ dns_rdataset_disassociate(&f->rdataset);
- isc_mempool_put(adb->afmp, f);
+ isc_mempool_put(adb->afmp, f);
}
static inline isc_boolean_t
free_adbfind(dns_adb_t *adb, dns_adbfind_t **findp) {
- dns_adbfind_t *find;
+ dns_adbfind_t *find;
- INSIST(findp != NULL && DNS_ADBFIND_VALID(*findp));
- find = *findp;
- *findp = NULL;
+ INSIST(findp != NULL && DNS_ADBFIND_VALID(*findp));
+ find = *findp;
+ *findp = NULL;
- INSIST(!FIND_HAS_ADDRS(find));
- INSIST(!ISC_LINK_LINKED(find, publink));
- INSIST(!ISC_LINK_LINKED(find, plink));
- INSIST(find->name_bucket == DNS_ADB_INVALIDBUCKET);
- INSIST(find->adbname == NULL);
+ INSIST(!FIND_HAS_ADDRS(find));
+ INSIST(!ISC_LINK_LINKED(find, publink));
+ INSIST(!ISC_LINK_LINKED(find, plink));
+ INSIST(find->name_bucket == DNS_ADB_INVALIDBUCKET);
+ INSIST(find->adbname == NULL);
- find->magic = 0;
+ find->magic = 0;
- DESTROYLOCK(&find->lock);
- isc_mempool_put(adb->ahmp, find);
- return (dec_adb_irefcnt(adb));
+ DESTROYLOCK(&find->lock);
+ isc_mempool_put(adb->ahmp, find);
+ return (dec_adb_irefcnt(adb));
}
/*
@@ -1585,41 +1538,37 @@ free_adbfind(dns_adb_t *adb, dns_adbfind_t **findp) {
*/
static inline dns_adbaddrinfo_t *
new_adbaddrinfo(dns_adb_t *adb, dns_adbentry_t *entry, in_port_t port) {
- dns_adbaddrinfo_t *ai;
-
- ai = isc_mempool_get(adb->aimp);
- if (ai == NULL)
- return (NULL);
-
- ai->magic = DNS_ADBADDRINFO_MAGIC;
- ai->sockaddr = entry->sockaddr;
- isc_sockaddr_setport(&ai->sockaddr, port);
- ai->srtt = entry->srtt;
- ai->flags = entry->flags;
- ai->entry = entry;
- ISC_LINK_INIT(ai, publink);
-
-#ifdef LRU_DEBUG
- adb->entryuses++; /* for debug */
-#endif
+ dns_adbaddrinfo_t *ai;
+
+ ai = isc_mempool_get(adb->aimp);
+ if (ai == NULL)
+ return (NULL);
+
+ ai->magic = DNS_ADBADDRINFO_MAGIC;
+ ai->sockaddr = entry->sockaddr;
+ isc_sockaddr_setport(&ai->sockaddr, port);
+ ai->srtt = entry->srtt;
+ ai->flags = entry->flags;
+ ai->entry = entry;
+ ISC_LINK_INIT(ai, publink);
- return (ai);
+ return (ai);
}
static inline void
free_adbaddrinfo(dns_adb_t *adb, dns_adbaddrinfo_t **ainfo) {
- dns_adbaddrinfo_t *ai;
+ dns_adbaddrinfo_t *ai;
- INSIST(ainfo != NULL && DNS_ADBADDRINFO_VALID(*ainfo));
- ai = *ainfo;
- *ainfo = NULL;
+ INSIST(ainfo != NULL && DNS_ADBADDRINFO_VALID(*ainfo));
+ ai = *ainfo;
+ *ainfo = NULL;
- INSIST(ai->entry == NULL);
- INSIST(!ISC_LINK_LINKED(ai, publink));
+ INSIST(ai->entry == NULL);
+ INSIST(!ISC_LINK_LINKED(ai, publink));
- ai->magic = 0;
+ ai->magic = 0;
- isc_mempool_put(adb->aimp, ai);
+ isc_mempool_put(adb->aimp, ai);
}
/*
@@ -1631,34 +1580,34 @@ free_adbaddrinfo(dns_adb_t *adb, dns_adbaddrinfo_t **ainfo) {
*/
static inline dns_adbname_t *
find_name_and_lock(dns_adb_t *adb, dns_name_t *name,
- unsigned int options, int *bucketp)
+ unsigned int options, int *bucketp)
{
- dns_adbname_t *adbname;
- int bucket;
-
- bucket = dns_name_fullhash(name, ISC_FALSE) % NBUCKETS;
-
- if (*bucketp == DNS_ADB_INVALIDBUCKET) {
- LOCK(&adb->namelocks[bucket]);
- *bucketp = bucket;
- } else if (*bucketp != bucket) {
- UNLOCK(&adb->namelocks[*bucketp]);
- LOCK(&adb->namelocks[bucket]);
- *bucketp = bucket;
- }
-
- adbname = ISC_LIST_HEAD(adb->names[bucket]);
- while (adbname != NULL) {
- if (!NAME_DEAD(adbname)) {
- if (dns_name_equal(name, &adbname->name)
- && GLUEHINT_OK(adbname, options)
- && STARTATZONE_MATCHES(adbname, options))
- return (adbname);
- }
- adbname = ISC_LIST_NEXT(adbname, plink);
- }
-
- return (NULL);
+ dns_adbname_t *adbname;
+ int bucket;
+
+ bucket = dns_name_fullhash(name, ISC_FALSE) % NBUCKETS;
+
+ if (*bucketp == DNS_ADB_INVALIDBUCKET) {
+ LOCK(&adb->namelocks[bucket]);
+ *bucketp = bucket;
+ } else if (*bucketp != bucket) {
+ UNLOCK(&adb->namelocks[*bucketp]);
+ LOCK(&adb->namelocks[bucket]);
+ *bucketp = bucket;
+ }
+
+ adbname = ISC_LIST_HEAD(adb->names[bucket]);
+ while (adbname != NULL) {
+ if (!NAME_DEAD(adbname)) {
+ if (dns_name_equal(name, &adbname->name)
+ && GLUEHINT_OK(adbname, options)
+ && STARTATZONE_MATCHES(adbname, options))
+ return (adbname);
+ }
+ adbname = ISC_LIST_NEXT(adbname, plink);
+ }
+
+ return (NULL);
}
/*
@@ -1673,28 +1622,28 @@ find_name_and_lock(dns_adb_t *adb, dns_name_t *name,
*/
static inline dns_adbentry_t *
find_entry_and_lock(dns_adb_t *adb, isc_sockaddr_t *addr, int *bucketp) {
- dns_adbentry_t *entry;
- int bucket;
+ dns_adbentry_t *entry;
+ int bucket;
- bucket = isc_sockaddr_hash(addr, ISC_TRUE) % NBUCKETS;
+ bucket = isc_sockaddr_hash(addr, ISC_TRUE) % NBUCKETS;
- if (*bucketp == DNS_ADB_INVALIDBUCKET) {
- LOCK(&adb->entrylocks[bucket]);
- *bucketp = bucket;
- } else if (*bucketp != bucket) {
- UNLOCK(&adb->entrylocks[*bucketp]);
- LOCK(&adb->entrylocks[bucket]);
- *bucketp = bucket;
- }
+ if (*bucketp == DNS_ADB_INVALIDBUCKET) {
+ LOCK(&adb->entrylocks[bucket]);
+ *bucketp = bucket;
+ } else if (*bucketp != bucket) {
+ UNLOCK(&adb->entrylocks[*bucketp]);
+ LOCK(&adb->entrylocks[bucket]);
+ *bucketp = bucket;
+ }
- entry = ISC_LIST_HEAD(adb->entries[bucket]);
- while (entry != NULL) {
- if (isc_sockaddr_equal(addr, &entry->sockaddr))
- return (entry);
- entry = ISC_LIST_NEXT(entry, plink);
- }
+ entry = ISC_LIST_HEAD(adb->entries[bucket]);
+ while (entry != NULL) {
+ if (isc_sockaddr_equal(addr, &entry->sockaddr))
+ return (entry);
+ entry = ISC_LIST_NEXT(entry, plink);
+ }
- return (NULL);
+ return (NULL);
}
/*
@@ -1702,140 +1651,133 @@ find_entry_and_lock(dns_adb_t *adb, isc_sockaddr_t *addr, int *bucketp) {
*/
static isc_boolean_t
entry_is_lame(dns_adb_t *adb, dns_adbentry_t *entry, dns_name_t *qname,
- dns_rdatatype_t qtype, isc_stdtime_t now)
+ dns_rdatatype_t qtype, isc_stdtime_t now)
{
- dns_adblameinfo_t *li, *next_li;
- isc_boolean_t is_bad;
+ dns_adblameinfo_t *li, *next_li;
+ isc_boolean_t is_bad;
- is_bad = ISC_FALSE;
+ is_bad = ISC_FALSE;
- li = ISC_LIST_HEAD(entry->lameinfo);
- if (li == NULL)
- return (ISC_FALSE);
- while (li != NULL) {
- next_li = ISC_LIST_NEXT(li, plink);
+ li = ISC_LIST_HEAD(entry->lameinfo);
+ if (li == NULL)
+ return (ISC_FALSE);
+ while (li != NULL) {
+ next_li = ISC_LIST_NEXT(li, plink);
- /*
- * Has the entry expired?
- */
- if (li->lame_timer < now) {
- ISC_LIST_UNLINK(entry->lameinfo, li, plink);
- free_adblameinfo(adb, &li);
- }
+ /*
+ * Has the entry expired?
+ */
+ if (li->lame_timer < now) {
+ ISC_LIST_UNLINK(entry->lameinfo, li, plink);
+ free_adblameinfo(adb, &li);
+ }
- /*
- * Order tests from least to most expensive.
- *
- * We do not break out of the main loop here as
- * we use the loop for house keeping.
- */
- if (li != NULL && !is_bad && li->qtype == qtype &&
- dns_name_equal(qname, &li->qname))
- is_bad = ISC_TRUE;
+ /*
+ * Order tests from least to most expensive.
+ *
+ * We do not break out of the main loop here as
+ * we use the loop for house keeping.
+ */
+ if (li != NULL && !is_bad && li->qtype == qtype &&
+ dns_name_equal(qname, &li->qname))
+ is_bad = ISC_TRUE;
- li = next_li;
- }
+ li = next_li;
+ }
- return (is_bad);
+ return (is_bad);
}
static void
copy_namehook_lists(dns_adb_t *adb, dns_adbfind_t *find, dns_name_t *qname,
- dns_rdatatype_t qtype, dns_adbname_t *name,
- isc_stdtime_t now)
+ dns_rdatatype_t qtype, dns_adbname_t *name,
+ isc_stdtime_t now)
{
- dns_adbnamehook_t *namehook;
- dns_adbaddrinfo_t *addrinfo;
- dns_adbentry_t *entry;
- int bucket;
-
- bucket = DNS_ADB_INVALIDBUCKET;
-
- if (find->options & DNS_ADBFIND_INET) {
- namehook = ISC_LIST_HEAD(name->v4);
- while (namehook != NULL) {
- entry = namehook->entry;
- bucket = entry->lock_bucket;
- LOCK(&adb->entrylocks[bucket]);
-
- if (!FIND_RETURNLAME(find)
- && entry_is_lame(adb, entry, qname, qtype, now)) {
- find->options |= DNS_ADBFIND_LAMEPRUNED;
- goto nextv4;
- }
- addrinfo = new_adbaddrinfo(adb, entry, find->port);
- if (addrinfo == NULL) {
- find->partial_result |= DNS_ADBFIND_INET;
- goto out;
- }
- /*
- * Found a valid entry. Add it to the find's list.
- */
- inc_entry_refcnt(adb, entry, ISC_FALSE);
- ISC_LIST_APPEND(find->list, addrinfo, publink);
- addrinfo = NULL;
- nextv4:
- UNLOCK(&adb->entrylocks[bucket]);
- bucket = DNS_ADB_INVALIDBUCKET;
- namehook = ISC_LIST_NEXT(namehook, plink);
- }
- }
-
- if (find->options & DNS_ADBFIND_INET6) {
- namehook = ISC_LIST_HEAD(name->v6);
- while (namehook != NULL) {
- entry = namehook->entry;
- bucket = entry->lock_bucket;
- LOCK(&adb->entrylocks[bucket]);
-
- if (entry_is_lame(adb, entry, qname, qtype, now))
- goto nextv6;
- addrinfo = new_adbaddrinfo(adb, entry, find->port);
- if (addrinfo == NULL) {
- find->partial_result |= DNS_ADBFIND_INET6;
- goto out;
- }
- /*
- * Found a valid entry. Add it to the find's list.
- */
- inc_entry_refcnt(adb, entry, ISC_FALSE);
- ISC_LIST_APPEND(find->list, addrinfo, publink);
- addrinfo = NULL;
- nextv6:
- UNLOCK(&adb->entrylocks[bucket]);
- bucket = DNS_ADB_INVALIDBUCKET;
- namehook = ISC_LIST_NEXT(namehook, plink);
- }
- }
+ dns_adbnamehook_t *namehook;
+ dns_adbaddrinfo_t *addrinfo;
+ dns_adbentry_t *entry;
+ int bucket;
+
+ bucket = DNS_ADB_INVALIDBUCKET;
+
+ if (find->options & DNS_ADBFIND_INET) {
+ namehook = ISC_LIST_HEAD(name->v4);
+ while (namehook != NULL) {
+ entry = namehook->entry;
+ bucket = entry->lock_bucket;
+ LOCK(&adb->entrylocks[bucket]);
+
+ if (!FIND_RETURNLAME(find)
+ && entry_is_lame(adb, entry, qname, qtype, now)) {
+ find->options |= DNS_ADBFIND_LAMEPRUNED;
+ goto nextv4;
+ }
+ addrinfo = new_adbaddrinfo(adb, entry, find->port);
+ if (addrinfo == NULL) {
+ find->partial_result |= DNS_ADBFIND_INET;
+ goto out;
+ }
+ /*
+ * Found a valid entry. Add it to the find's list.
+ */
+ inc_entry_refcnt(adb, entry, ISC_FALSE);
+ ISC_LIST_APPEND(find->list, addrinfo, publink);
+ addrinfo = NULL;
+ nextv4:
+ UNLOCK(&adb->entrylocks[bucket]);
+ bucket = DNS_ADB_INVALIDBUCKET;
+ namehook = ISC_LIST_NEXT(namehook, plink);
+ }
+ }
+
+ if (find->options & DNS_ADBFIND_INET6) {
+ namehook = ISC_LIST_HEAD(name->v6);
+ while (namehook != NULL) {
+ entry = namehook->entry;
+ bucket = entry->lock_bucket;
+ LOCK(&adb->entrylocks[bucket]);
+
+ if (entry_is_lame(adb, entry, qname, qtype, now))
+ goto nextv6;
+ addrinfo = new_adbaddrinfo(adb, entry, find->port);
+ if (addrinfo == NULL) {
+ find->partial_result |= DNS_ADBFIND_INET6;
+ goto out;
+ }
+ /*
+ * Found a valid entry. Add it to the find's list.
+ */
+ inc_entry_refcnt(adb, entry, ISC_FALSE);
+ ISC_LIST_APPEND(find->list, addrinfo, publink);
+ addrinfo = NULL;
+ nextv6:
+ UNLOCK(&adb->entrylocks[bucket]);
+ bucket = DNS_ADB_INVALIDBUCKET;
+ namehook = ISC_LIST_NEXT(namehook, plink);
+ }
+ }
out:
- if (bucket != DNS_ADB_INVALIDBUCKET)
- UNLOCK(&adb->entrylocks[bucket]);
+ if (bucket != DNS_ADB_INVALIDBUCKET)
+ UNLOCK(&adb->entrylocks[bucket]);
}
static void
shutdown_task(isc_task_t *task, isc_event_t *ev) {
- dns_adb_t *adb;
-
- UNUSED(task);
-
- adb = ev->ev_arg;
- INSIST(DNS_ADB_VALID(adb));
-
- /*
- * Kill the timer, and then the ADB itself. Note that this implies
- * that this task was the one scheduled to get timer events. If
- * this is not true (and it is unfortunate there is no way to INSIST()
- * this) badness will occur.
- */
- LOCK(&adb->lock);
- isc_timer_detach(&adb->timer);
-#ifdef LRU_DEBUG
- isc_timer_detach(&adb->dump_timer);
-#endif
- UNLOCK(&adb->lock);
- isc_event_free(&ev);
- destroy(adb);
+ dns_adb_t *adb;
+
+ UNUSED(task);
+
+ adb = ev->ev_arg;
+ INSIST(DNS_ADB_VALID(adb));
+
+ isc_event_free(&ev);
+ /*
+ * Wait for lock around check_exit() call to be released.
+ */
+ LOCK(&adb->lock);
+ UNLOCK(&adb->lock);
+ destroy(adb);
}
/*
@@ -1843,34 +1785,34 @@ shutdown_task(isc_task_t *task, isc_event_t *ev) {
*/
static isc_boolean_t
check_expire_name(dns_adbname_t **namep, isc_stdtime_t now) {
- dns_adbname_t *name;
- isc_boolean_t result = ISC_FALSE;
-
- INSIST(namep != NULL && DNS_ADBNAME_VALID(*namep));
- name = *namep;
-
- if (NAME_HAS_V4(name) || NAME_HAS_V6(name))
- return (result);
- if (NAME_FETCH(name))
- return (result);
- if (!EXPIRE_OK(name->expire_v4, now))
- return (result);
- if (!EXPIRE_OK(name->expire_v6, now))
- return (result);
- if (!EXPIRE_OK(name->expire_target, now))
- return (result);
-
- /*
- * The name is empty. Delete it.
- */
- result = kill_name(&name, DNS_EVENT_ADBEXPIRED, ISC_FALSE);
- *namep = NULL;
-
- /*
- * Our caller, or one of its callers, will be calling check_exit() at
- * some point, so we don't need to do it here.
- */
- return (result);
+ dns_adbname_t *name;
+ isc_boolean_t result = ISC_FALSE;
+
+ INSIST(namep != NULL && DNS_ADBNAME_VALID(*namep));
+ name = *namep;
+
+ if (NAME_HAS_V4(name) || NAME_HAS_V6(name))
+ return (result);
+ if (NAME_FETCH(name))
+ return (result);
+ if (!EXPIRE_OK(name->expire_v4, now))
+ return (result);
+ if (!EXPIRE_OK(name->expire_v6, now))
+ return (result);
+ if (!EXPIRE_OK(name->expire_target, now))
+ return (result);
+
+ /*
+ * The name is empty. Delete it.
+ */
+ result = kill_name(&name, DNS_EVENT_ADBEXPIRED, ISC_FALSE);
+ *namep = NULL;
+
+ /*
+ * Our caller, or one of its callers, will be calling check_exit() at
+ * some point, so we don't need to do it here.
+ */
+ return (result);
}
/*%
@@ -1886,67 +1828,55 @@ check_expire_name(dns_adbname_t **namep, isc_stdtime_t now) {
*/
static void
check_stale_name(dns_adb_t *adb, int bucket, isc_stdtime_t now) {
- int victims, max_victims;
- isc_boolean_t result;
- dns_adbname_t *victim, *next_victim;
- isc_boolean_t overmem = adb->overmem;
- int scans = 0;
-
- INSIST(bucket != DNS_ADB_INVALIDBUCKET);
-
- max_victims = overmem ? 2 : 1;
-
- /*
- * We limit the number of scanned entries to 10 (arbitrary choice)
- * in order to avoid examining too many entries when there are many
- * tail entries that have fetches (this should be rare, but could
- * happen).
- */
- victim = ISC_LIST_TAIL(adb->names[bucket]);
- for (victims = 0;
- victim != NULL && victims < max_victims && scans < 10;
- victim = next_victim) {
- scans++;
- next_victim = ISC_LIST_PREV(victim, plink);
-
- /*
- * If the victim is already dead, it simply waits for some
- * final events. Ignore it.
- */
- if (NAME_DEAD(victim))
- goto next;
-
- result = check_expire_name(&victim, now);
- if (victim == NULL) {
-#ifdef LRU_DEBUG
- adb->stale_expire++;
-#endif
- victims++;
- goto next;
- }
-
- if (!NAME_FETCH(victim) &&
- (overmem || victim->last_used + ADB_STALE_MARGIN <= now)) {
- RUNTIME_CHECK(kill_name(&victim,
- DNS_EVENT_ADBCANCELED,
- ISC_TRUE) ==
- ISC_FALSE);
-#ifdef LRU_DEBUG
- adb->stale_lru++;
-#endif
- victims++;
- }
-
- next:
- if (!overmem)
- break;
- }
-
-#ifdef LRU_DEBUG
- /* XXX: omit lock for brevity */
- adb->stale_scan += scans;
- adb->stale_purge += victims;
-#endif
+ int victims, max_victims;
+ isc_boolean_t result;
+ dns_adbname_t *victim, *next_victim;
+ isc_boolean_t overmem = adb->overmem;
+ int scans = 0;
+
+ INSIST(bucket != DNS_ADB_INVALIDBUCKET);
+
+ max_victims = overmem ? 2 : 1;
+
+ /*
+ * We limit the number of scanned entries to 10 (arbitrary choice)
+ * in order to avoid examining too many entries when there are many
+ * tail entries that have fetches (this should be rare, but could
+ * happen).
+ */
+ victim = ISC_LIST_TAIL(adb->names[bucket]);
+ for (victims = 0;
+ victim != NULL && victims < max_victims && scans < 10;
+ victim = next_victim) {
+ scans++;
+ next_victim = ISC_LIST_PREV(victim, plink);
+
+ /*
+ * If the victim is already dead, it simply waits for some
+ * final events. Ignore it.
+ */
+ if (NAME_DEAD(victim))
+ goto next;
+
+ result = check_expire_name(&victim, now);
+ if (victim == NULL) {
+ victims++;
+ goto next;
+ }
+
+ if (!NAME_FETCH(victim) &&
+ (overmem || victim->last_used + ADB_STALE_MARGIN <= now)) {
+ RUNTIME_CHECK(kill_name(&victim,
+ DNS_EVENT_ADBCANCELED,
+ ISC_TRUE) ==
+ ISC_FALSE);
+ victims++;
+ }
+
+ next:
+ if (!overmem)
+ break;
+ }
}
/*
@@ -1955,29 +1885,29 @@ check_stale_name(dns_adb_t *adb, int bucket, isc_stdtime_t now) {
static isc_boolean_t
check_expire_entry(dns_adb_t *adb, dns_adbentry_t **entryp, isc_stdtime_t now)
{
- dns_adbentry_t *entry;
- isc_boolean_t result = ISC_FALSE;
+ dns_adbentry_t *entry;
+ isc_boolean_t result = ISC_FALSE;
- INSIST(entryp != NULL && DNS_ADBENTRY_VALID(*entryp));
- entry = *entryp;
+ INSIST(entryp != NULL && DNS_ADBENTRY_VALID(*entryp));
+ entry = *entryp;
- if (entry->refcnt != 0)
- return (result);
+ if (entry->refcnt != 0)
+ return (result);
- if (entry->expires == 0 || entry->expires > now)
- return (result);
+ if (entry->expires == 0 || entry->expires > now)
+ return (result);
- /*
- * The entry is not in use. Delete it.
- */
- DP(DEF_LEVEL, "killing entry %p", entry);
- INSIST(ISC_LINK_LINKED(entry, plink));
- result = unlink_entry(adb, entry);
- free_adbentry(adb, &entry);
- if (result)
- dec_adb_irefcnt(adb);
- *entryp = NULL;
- return (result);
+ /*
+ * The entry is not in use. Delete it.
+ */
+ DP(DEF_LEVEL, "killing entry %p", entry);
+ INSIST(ISC_LINK_LINKED(entry, plink));
+ result = unlink_entry(adb, entry);
+ free_adbentry(adb, &entry);
+ if (result)
+ dec_adb_irefcnt(adb);
+ *entryp = NULL;
+ return (result);
}
/*
@@ -1985,29 +1915,29 @@ check_expire_entry(dns_adb_t *adb, dns_adbentry_t **entryp, isc_stdtime_t now)
*/
static isc_boolean_t
cleanup_names(dns_adb_t *adb, int bucket, isc_stdtime_t now) {
- dns_adbname_t *name;
- dns_adbname_t *next_name;
- isc_boolean_t result = ISC_FALSE;
-
- DP(CLEAN_LEVEL, "cleaning name bucket %d", bucket);
-
- LOCK(&adb->namelocks[bucket]);
- if (adb->name_sd[bucket]) {
- UNLOCK(&adb->namelocks[bucket]);
- return (result);
- }
-
- name = ISC_LIST_HEAD(adb->names[bucket]);
- while (name != NULL) {
- next_name = ISC_LIST_NEXT(name, plink);
- INSIST(result == ISC_FALSE);
- result = check_expire_namehooks(name, now);
- if (!result)
- result = check_expire_name(&name, now);
- name = next_name;
- }
- UNLOCK(&adb->namelocks[bucket]);
- return (result);
+ dns_adbname_t *name;
+ dns_adbname_t *next_name;
+ isc_boolean_t result = ISC_FALSE;
+
+ DP(CLEAN_LEVEL, "cleaning name bucket %d", bucket);
+
+ LOCK(&adb->namelocks[bucket]);
+ if (adb->name_sd[bucket]) {
+ UNLOCK(&adb->namelocks[bucket]);
+ return (result);
+ }
+
+ name = ISC_LIST_HEAD(adb->names[bucket]);
+ while (name != NULL) {
+ next_name = ISC_LIST_NEXT(name, plink);
+ INSIST(result == ISC_FALSE);
+ result = check_expire_namehooks(name, now);
+ if (!result)
+ result = check_expire_name(&name, now);
+ name = next_name;
+ }
+ UNLOCK(&adb->namelocks[bucket]);
+ return (result);
}
/*
@@ -2015,131 +1945,46 @@ cleanup_names(dns_adb_t *adb, int bucket, isc_stdtime_t now) {
*/
static isc_boolean_t
cleanup_entries(dns_adb_t *adb, int bucket, isc_stdtime_t now) {
- dns_adbentry_t *entry, *next_entry;
- isc_boolean_t result = ISC_FALSE;
-
- DP(CLEAN_LEVEL, "cleaning entry bucket %d", bucket);
-
- LOCK(&adb->entrylocks[bucket]);
- entry = ISC_LIST_HEAD(adb->entries[bucket]);
- while (entry != NULL) {
- next_entry = ISC_LIST_NEXT(entry, plink);
- INSIST(result == ISC_FALSE);
- result = check_expire_entry(adb, &entry, now);
- entry = next_entry;
- }
- UNLOCK(&adb->entrylocks[bucket]);
- return (result);
-}
-
-#if 1
-static void
-timer_cleanup(isc_task_t *task, isc_event_t *ev) {
- UNUSED(task);
+ dns_adbentry_t *entry, *next_entry;
+ isc_boolean_t result = ISC_FALSE;
- isc_event_free(&ev);
-}
-#else
-static void
-timer_cleanup(isc_task_t *task, isc_event_t *ev) {
- dns_adb_t *adb;
- isc_stdtime_t now;
- unsigned int i;
- isc_interval_t interval;
-
- UNUSED(task);
-
- adb = ev->ev_arg;
- INSIST(DNS_ADB_VALID(adb));
-
- LOCK(&adb->lock);
-
- isc_stdtime_get(&now);
-
- for (i = 0; i < CLEAN_BUCKETS; i++) {
- /*
- * Call our cleanup routines.
- */
- RUNTIME_CHECK(cleanup_names(adb, adb->next_cleanbucket, now) ==
- ISC_FALSE);
- RUNTIME_CHECK(cleanup_entries(adb, adb->next_cleanbucket, now)
- == ISC_FALSE);
-
- /*
- * Set the next bucket to be cleaned.
- */
- adb->next_cleanbucket++;
- if (adb->next_cleanbucket >= NBUCKETS) {
- adb->next_cleanbucket = 0;
-#ifdef DUMP_ADB_AFTER_CLEANING
- dump_adb(adb, stdout, ISC_TRUE, now);
-#endif
- }
- }
+ DP(CLEAN_LEVEL, "cleaning entry bucket %d", bucket);
- /*
- * Reset the timer.
- * XXXDCL isc_timer_reset might return ISC_R_UNEXPECTED or
- * ISC_R_NOMEMORY, but it isn't clear what could be done here
- * if either one of those things happened.
- */
- interval = adb->tick_interval;
- if (adb->overmem)
- isc_interval_set(&interval, 0, 1);
- (void)isc_timer_reset(adb->timer, isc_timertype_once, NULL,
- &interval, ISC_FALSE);
-
- UNLOCK(&adb->lock);
-
- isc_event_free(&ev);
+ LOCK(&adb->entrylocks[bucket]);
+ entry = ISC_LIST_HEAD(adb->entries[bucket]);
+ while (entry != NULL) {
+ next_entry = ISC_LIST_NEXT(entry, plink);
+ INSIST(result == ISC_FALSE);
+ result = check_expire_entry(adb, &entry, now);
+ entry = next_entry;
+ }
+ UNLOCK(&adb->entrylocks[bucket]);
+ return (result);
}
-#endif
static void
destroy(dns_adb_t *adb) {
- adb->magic = 0;
-
-#ifdef LRU_DEBUG
- /* for debug: print statistics */
- if (adb->nname_total > 0) {
- INSIST(adb->nname == 0 && adb->nentry == 0);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_ADB, ISC_LOG_INFO,
- "ADB %p name hit %.2f, entry hit %.2f", adb,
- (double)adb->nameuses /
- (adb->nname_total + adb->nameuses),
- adb->entryuses > 0 ?
- (double)adb->entryuses /
- (adb->nentry_total + adb->entryuses) : 0);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_ADB, ISC_LOG_INFO,
- "ADB %p stale name purges: %u(%u,%u)/%u",
- adb, adb->stale_purge, adb->stale_expire,
- adb->stale_lru, adb->stale_scan);
- }
-#endif
+ adb->magic = 0;
- /*
- * The timer is already dead, from the task's shutdown callback.
- */
- isc_task_detach(&adb->task);
+ isc_task_detach(&adb->task);
- isc_mempool_destroy(&adb->nmp);
- isc_mempool_destroy(&adb->nhmp);
- isc_mempool_destroy(&adb->limp);
- isc_mempool_destroy(&adb->emp);
- isc_mempool_destroy(&adb->ahmp);
- isc_mempool_destroy(&adb->aimp);
- isc_mempool_destroy(&adb->afmp);
+ isc_mempool_destroy(&adb->nmp);
+ isc_mempool_destroy(&adb->nhmp);
+ isc_mempool_destroy(&adb->limp);
+ isc_mempool_destroy(&adb->emp);
+ isc_mempool_destroy(&adb->ahmp);
+ isc_mempool_destroy(&adb->aimp);
+ isc_mempool_destroy(&adb->afmp);
- DESTROYMUTEXBLOCK(adb->entrylocks, NBUCKETS);
- DESTROYMUTEXBLOCK(adb->namelocks, NBUCKETS);
+ DESTROYMUTEXBLOCK(adb->entrylocks, NBUCKETS);
+ DESTROYMUTEXBLOCK(adb->namelocks, NBUCKETS);
- DESTROYLOCK(&adb->reflock);
- DESTROYLOCK(&adb->lock);
- DESTROYLOCK(&adb->mplock);
+ DESTROYLOCK(&adb->reflock);
+ DESTROYLOCK(&adb->lock);
+ DESTROYLOCK(&adb->mplock);
+ DESTROYLOCK(&adb->overmemlock);
- isc_mem_putanddetach(&adb->mctx, adb, sizeof(dns_adb_t));
+ isc_mem_putanddetach(&adb->mctx, adb, sizeof(dns_adb_t));
}
@@ -2149,1393 +1994,1350 @@ destroy(dns_adb_t *adb) {
isc_result_t
dns_adb_create(isc_mem_t *mem, dns_view_t *view, isc_timermgr_t *timermgr,
- isc_taskmgr_t *taskmgr, dns_adb_t **newadb)
+ isc_taskmgr_t *taskmgr, dns_adb_t **newadb)
{
- dns_adb_t *adb;
- isc_result_t result;
- int i;
-
- REQUIRE(mem != NULL);
- REQUIRE(view != NULL);
- REQUIRE(timermgr != NULL);
- REQUIRE(taskmgr != NULL);
- REQUIRE(newadb != NULL && *newadb == NULL);
-
- adb = isc_mem_get(mem, sizeof(dns_adb_t));
- if (adb == NULL)
- return (ISC_R_NOMEMORY);
-
- /*
- * Initialize things here that cannot fail, and especially things
- * that must be NULL for the error return to work properly.
- */
- adb->magic = 0;
- adb->erefcnt = 1;
- adb->irefcnt = 0;
- adb->nmp = NULL;
- adb->nhmp = NULL;
- adb->limp = NULL;
- adb->emp = NULL;
- adb->ahmp = NULL;
- adb->aimp = NULL;
- adb->afmp = NULL;
- adb->task = NULL;
- adb->timer = NULL;
-#ifdef LRU_DEBUG
- adb->dump_timer = NULL;
-#endif
- adb->mctx = NULL;
- adb->view = view;
- adb->timermgr = timermgr;
- adb->taskmgr = taskmgr;
- adb->next_cleanbucket = 0;
- ISC_EVENT_INIT(&adb->cevent, sizeof(adb->cevent), 0, NULL,
- DNS_EVENT_ADBCONTROL, shutdown_task, adb,
- adb, NULL, NULL);
- adb->cevent_sent = ISC_FALSE;
- adb->shutting_down = ISC_FALSE;
- adb->overmem = ISC_FALSE;
- ISC_LIST_INIT(adb->whenshutdown);
-
-#ifdef LRU_DEBUG
- /* for debug */
- adb->nname = 0;
- adb->nname_total = 0;
- adb->nentry = 0;
- adb->nentry_total = 0;
- adb->stale_purge = 0;
- adb->stale_scan = 0;
- adb->stale_expire = 0;
- adb->stale_lru = 0;
- adb->nameuses = 0;
- adb->entryuses = 0;
-#endif
-
- isc_mem_attach(mem, &adb->mctx);
-
- result = isc_mutex_init(&adb->lock);
- if (result != ISC_R_SUCCESS)
- goto fail0b;
-
- result = isc_mutex_init(&adb->mplock);
- if (result != ISC_R_SUCCESS)
- goto fail0c;
-
- result = isc_mutex_init(&adb->reflock);
- if (result != ISC_R_SUCCESS)
- goto fail0d;
-
- /*
- * Initialize the bucket locks for names and elements.
- * May as well initialize the list heads, too.
- */
- result = isc_mutexblock_init(adb->namelocks, NBUCKETS);
- if (result != ISC_R_SUCCESS)
- goto fail1;
- for (i = 0; i < NBUCKETS; i++) {
- ISC_LIST_INIT(adb->names[i]);
- adb->name_sd[i] = ISC_FALSE;
- adb->name_refcnt[i] = 0;
- adb->irefcnt++;
- }
- for (i = 0; i < NBUCKETS; i++) {
- ISC_LIST_INIT(adb->entries[i]);
- adb->entry_sd[i] = ISC_FALSE;
- adb->entry_refcnt[i] = 0;
- adb->irefcnt++;
- }
- result = isc_mutexblock_init(adb->entrylocks, NBUCKETS);
- if (result != ISC_R_SUCCESS)
- goto fail2;
-
- /*
- * Memory pools
- */
+ dns_adb_t *adb;
+ isc_result_t result;
+ int i;
+
+ REQUIRE(mem != NULL);
+ REQUIRE(view != NULL);
+ REQUIRE(timermgr != NULL); /* this is actually unused */
+ REQUIRE(taskmgr != NULL);
+ REQUIRE(newadb != NULL && *newadb == NULL);
+
+ UNUSED(timermgr);
+
+ adb = isc_mem_get(mem, sizeof(dns_adb_t));
+ if (adb == NULL)
+ return (ISC_R_NOMEMORY);
+
+ /*
+ * Initialize things here that cannot fail, and especially things
+ * that must be NULL for the error return to work properly.
+ */
+ adb->magic = 0;
+ adb->erefcnt = 1;
+ adb->irefcnt = 0;
+ adb->nmp = NULL;
+ adb->nhmp = NULL;
+ adb->limp = NULL;
+ adb->emp = NULL;
+ adb->ahmp = NULL;
+ adb->aimp = NULL;
+ adb->afmp = NULL;
+ adb->task = NULL;
+ adb->mctx = NULL;
+ adb->view = view;
+ adb->taskmgr = taskmgr;
+ adb->next_cleanbucket = 0;
+ ISC_EVENT_INIT(&adb->cevent, sizeof(adb->cevent), 0, NULL,
+ DNS_EVENT_ADBCONTROL, shutdown_task, adb,
+ adb, NULL, NULL);
+ adb->cevent_sent = ISC_FALSE;
+ adb->shutting_down = ISC_FALSE;
+ adb->overmem = ISC_FALSE;
+ ISC_LIST_INIT(adb->whenshutdown);
+
+ isc_mem_attach(mem, &adb->mctx);
+
+ result = isc_mutex_init(&adb->lock);
+ if (result != ISC_R_SUCCESS)
+ goto fail0b;
+
+ result = isc_mutex_init(&adb->mplock);
+ if (result != ISC_R_SUCCESS)
+ goto fail0c;
+
+ result = isc_mutex_init(&adb->reflock);
+ if (result != ISC_R_SUCCESS)
+ goto fail0d;
+
+ result = isc_mutex_init(&adb->overmemlock);
+ if (result != ISC_R_SUCCESS)
+ goto fail0e;
+
+ /*
+ * Initialize the bucket locks for names and elements.
+ * May as well initialize the list heads, too.
+ */
+ result = isc_mutexblock_init(adb->namelocks, NBUCKETS);
+ if (result != ISC_R_SUCCESS)
+ goto fail1;
+ for (i = 0; i < NBUCKETS; i++) {
+ ISC_LIST_INIT(adb->names[i]);
+ adb->name_sd[i] = ISC_FALSE;
+ adb->name_refcnt[i] = 0;
+ adb->irefcnt++;
+ }
+ for (i = 0; i < NBUCKETS; i++) {
+ ISC_LIST_INIT(adb->entries[i]);
+ adb->entry_sd[i] = ISC_FALSE;
+ adb->entry_refcnt[i] = 0;
+ adb->irefcnt++;
+ }
+ result = isc_mutexblock_init(adb->entrylocks, NBUCKETS);
+ if (result != ISC_R_SUCCESS)
+ goto fail2;
+
+ /*
+ * Memory pools
+ */
#define MPINIT(t, p, n) do { \
- result = isc_mempool_create(mem, sizeof(t), &(p)); \
- if (result != ISC_R_SUCCESS) \
- goto fail3; \
- isc_mempool_setfreemax((p), FREE_ITEMS); \
- isc_mempool_setfillcount((p), FILL_COUNT); \
- isc_mempool_setname((p), n); \
- isc_mempool_associatelock((p), &adb->mplock); \
+ result = isc_mempool_create(mem, sizeof(t), &(p)); \
+ if (result != ISC_R_SUCCESS) \
+ goto fail3; \
+ isc_mempool_setfreemax((p), FREE_ITEMS); \
+ isc_mempool_setfillcount((p), FILL_COUNT); \
+ isc_mempool_setname((p), n); \
+ isc_mempool_associatelock((p), &adb->mplock); \
} while (0)
- MPINIT(dns_adbname_t, adb->nmp, "adbname");
- MPINIT(dns_adbnamehook_t, adb->nhmp, "adbnamehook");
- MPINIT(dns_adblameinfo_t, adb->limp, "adblameinfo");
- MPINIT(dns_adbentry_t, adb->emp, "adbentry");
- MPINIT(dns_adbfind_t, adb->ahmp, "adbfind");
- MPINIT(dns_adbaddrinfo_t, adb->aimp, "adbaddrinfo");
- MPINIT(dns_adbfetch_t, adb->afmp, "adbfetch");
+ MPINIT(dns_adbname_t, adb->nmp, "adbname");
+ MPINIT(dns_adbnamehook_t, adb->nhmp, "adbnamehook");
+ MPINIT(dns_adblameinfo_t, adb->limp, "adblameinfo");
+ MPINIT(dns_adbentry_t, adb->emp, "adbentry");
+ MPINIT(dns_adbfind_t, adb->ahmp, "adbfind");
+ MPINIT(dns_adbaddrinfo_t, adb->aimp, "adbaddrinfo");
+ MPINIT(dns_adbfetch_t, adb->afmp, "adbfetch");
#undef MPINIT
- /*
- * Allocate a timer and a task for our periodic cleanup.
- */
- result = isc_task_create(adb->taskmgr, 0, &adb->task);
- if (result != ISC_R_SUCCESS)
- goto fail3;
- isc_task_setname(adb->task, "ADB", adb);
- /*
- * XXXMLG When this is changed to be a config file option,
- */
- isc_interval_set(&adb->tick_interval, CLEAN_SECONDS, 0);
- result = isc_timer_create(adb->timermgr, isc_timertype_once,
- NULL, &adb->tick_interval, adb->task,
- timer_cleanup, adb, &adb->timer);
- if (result != ISC_R_SUCCESS)
- goto fail3;
-
-#ifdef LRU_DEBUG
- {
- isc_interval_t interval;
-
- interval.seconds = DUMP_INTERVAL;
- interval.nanoseconds = 0;
- RUNTIME_CHECK(isc_time_nowplusinterval(&adb->dump_time,
- &interval) ==
- ISC_R_SUCCESS);
-
- result = isc_timer_create(adb->timermgr, isc_timertype_once,
- &adb->dump_time, NULL, adb->task,
- timer_dump, adb, &adb->dump_timer);
- }
-#endif
-
- DP(ISC_LOG_DEBUG(5), "cleaning interval for adb: "
- "%u buckets every %u seconds, %u buckets in system, %u cl.interval",
- CLEAN_BUCKETS, CLEAN_SECONDS, NBUCKETS, CLEAN_PERIOD);
-
- /*
- * Normal return.
- */
- adb->magic = DNS_ADB_MAGIC;
- *newadb = adb;
- return (ISC_R_SUCCESS);
+ /*
+ * Allocate an internal task.
+ */
+ result = isc_task_create(adb->taskmgr, 0, &adb->task);
+ if (result != ISC_R_SUCCESS)
+ goto fail3;
+ isc_task_setname(adb->task, "ADB", adb);
+
+ /*
+ * Normal return.
+ */
+ adb->magic = DNS_ADB_MAGIC;
+ *newadb = adb;
+ return (ISC_R_SUCCESS);
fail3:
- if (adb->task != NULL)
- isc_task_detach(&adb->task);
- if (adb->timer != NULL)
- isc_timer_detach(&adb->timer);
+ if (adb->task != NULL)
+ isc_task_detach(&adb->task);
- /* clean up entrylocks */
- DESTROYMUTEXBLOCK(adb->entrylocks, NBUCKETS);
+ /* clean up entrylocks */
+ DESTROYMUTEXBLOCK(adb->entrylocks, NBUCKETS);
fail2: /* clean up namelocks */
- DESTROYMUTEXBLOCK(adb->namelocks, NBUCKETS);
+ DESTROYMUTEXBLOCK(adb->namelocks, NBUCKETS);
fail1: /* clean up only allocated memory */
- if (adb->nmp != NULL)
- isc_mempool_destroy(&adb->nmp);
- if (adb->nhmp != NULL)
- isc_mempool_destroy(&adb->nhmp);
- if (adb->limp != NULL)
- isc_mempool_destroy(&adb->limp);
- if (adb->emp != NULL)
- isc_mempool_destroy(&adb->emp);
- if (adb->ahmp != NULL)
- isc_mempool_destroy(&adb->ahmp);
- if (adb->aimp != NULL)
- isc_mempool_destroy(&adb->aimp);
- if (adb->afmp != NULL)
- isc_mempool_destroy(&adb->afmp);
-
- DESTROYLOCK(&adb->reflock);
+ if (adb->nmp != NULL)
+ isc_mempool_destroy(&adb->nmp);
+ if (adb->nhmp != NULL)
+ isc_mempool_destroy(&adb->nhmp);
+ if (adb->limp != NULL)
+ isc_mempool_destroy(&adb->limp);
+ if (adb->emp != NULL)
+ isc_mempool_destroy(&adb->emp);
+ if (adb->ahmp != NULL)
+ isc_mempool_destroy(&adb->ahmp);
+ if (adb->aimp != NULL)
+ isc_mempool_destroy(&adb->aimp);
+ if (adb->afmp != NULL)
+ isc_mempool_destroy(&adb->afmp);
+
+ DESTROYLOCK(&adb->overmemlock);
+ fail0e:
+ DESTROYLOCK(&adb->reflock);
fail0d:
- DESTROYLOCK(&adb->mplock);
+ DESTROYLOCK(&adb->mplock);
fail0c:
- DESTROYLOCK(&adb->lock);
+ DESTROYLOCK(&adb->lock);
fail0b:
- isc_mem_putanddetach(&adb->mctx, adb, sizeof(dns_adb_t));
+ isc_mem_putanddetach(&adb->mctx, adb, sizeof(dns_adb_t));
- return (result);
+ return (result);
}
void
dns_adb_attach(dns_adb_t *adb, dns_adb_t **adbx) {
- REQUIRE(DNS_ADB_VALID(adb));
- REQUIRE(adbx != NULL && *adbx == NULL);
+ REQUIRE(DNS_ADB_VALID(adb));
+ REQUIRE(adbx != NULL && *adbx == NULL);
- inc_adb_erefcnt(adb);
- *adbx = adb;
+ inc_adb_erefcnt(adb);
+ *adbx = adb;
}
void
dns_adb_detach(dns_adb_t **adbx) {
- dns_adb_t *adb;
- isc_boolean_t need_exit_check;
+ dns_adb_t *adb;
+ isc_boolean_t need_exit_check;
- REQUIRE(adbx != NULL && DNS_ADB_VALID(*adbx));
+ REQUIRE(adbx != NULL && DNS_ADB_VALID(*adbx));
- adb = *adbx;
- *adbx = NULL;
+ adb = *adbx;
+ *adbx = NULL;
- INSIST(adb->erefcnt > 0);
+ INSIST(adb->erefcnt > 0);
- LOCK(&adb->reflock);
- adb->erefcnt--;
- need_exit_check = ISC_TF(adb->erefcnt == 0 && adb->irefcnt == 0);
- UNLOCK(&adb->reflock);
+ LOCK(&adb->reflock);
+ adb->erefcnt--;
+ need_exit_check = ISC_TF(adb->erefcnt == 0 && adb->irefcnt == 0);
+ UNLOCK(&adb->reflock);
- if (need_exit_check) {
- LOCK(&adb->lock);
- INSIST(adb->shutting_down);
- check_exit(adb);
- UNLOCK(&adb->lock);
- }
+ if (need_exit_check) {
+ LOCK(&adb->lock);
+ INSIST(adb->shutting_down);
+ check_exit(adb);
+ UNLOCK(&adb->lock);
+ }
}
void
dns_adb_whenshutdown(dns_adb_t *adb, isc_task_t *task, isc_event_t **eventp) {
- isc_task_t *clone;
- isc_event_t *event;
- isc_boolean_t zeroirefcnt = ISC_FALSE;
+ isc_task_t *clone;
+ isc_event_t *event;
+ isc_boolean_t zeroirefcnt = ISC_FALSE;
- /*
- * Send '*eventp' to 'task' when 'adb' has shutdown.
- */
+ /*
+ * Send '*eventp' to 'task' when 'adb' has shutdown.
+ */
- REQUIRE(DNS_ADB_VALID(adb));
- REQUIRE(eventp != NULL);
+ REQUIRE(DNS_ADB_VALID(adb));
+ REQUIRE(eventp != NULL);
- event = *eventp;
- *eventp = NULL;
+ event = *eventp;
+ *eventp = NULL;
- LOCK(&adb->lock);
+ LOCK(&adb->lock);
- LOCK(&adb->reflock);
- zeroirefcnt = ISC_TF(adb->irefcnt == 0);
+ LOCK(&adb->reflock);
+ zeroirefcnt = ISC_TF(adb->irefcnt == 0);
- if (adb->shutting_down && zeroirefcnt &&
- isc_mempool_getallocated(adb->ahmp) == 0) {
- /*
- * We're already shutdown. Send the event.
- */
- event->ev_sender = adb;
- isc_task_send(task, &event);
- } else {
- clone = NULL;
- isc_task_attach(task, &clone);
- event->ev_sender = clone;
- ISC_LIST_APPEND(adb->whenshutdown, event, ev_link);
- }
+ if (adb->shutting_down && zeroirefcnt &&
+ isc_mempool_getallocated(adb->ahmp) == 0) {
+ /*
+ * We're already shutdown. Send the event.
+ */
+ event->ev_sender = adb;
+ isc_task_send(task, &event);
+ } else {
+ clone = NULL;
+ isc_task_attach(task, &clone);
+ event->ev_sender = clone;
+ ISC_LIST_APPEND(adb->whenshutdown, event, ev_link);
+ }
- UNLOCK(&adb->reflock);
- UNLOCK(&adb->lock);
+ UNLOCK(&adb->reflock);
+ UNLOCK(&adb->lock);
}
void
dns_adb_shutdown(dns_adb_t *adb) {
- isc_boolean_t need_check_exit;
+ isc_boolean_t need_check_exit;
- /*
- * Shutdown 'adb'.
- */
+ /*
+ * Shutdown 'adb'.
+ */
- LOCK(&adb->lock);
+ LOCK(&adb->lock);
- if (!adb->shutting_down) {
- adb->shutting_down = ISC_TRUE;
- isc_mem_setwater(adb->mctx, water, adb, 0, 0);
- need_check_exit = shutdown_names(adb);
- if (!need_check_exit)
- need_check_exit = shutdown_entries(adb);
- if (need_check_exit)
- check_exit(adb);
- }
+ if (!adb->shutting_down) {
+ adb->shutting_down = ISC_TRUE;
+ isc_mem_setwater(adb->mctx, water, adb, 0, 0);
+ need_check_exit = shutdown_names(adb);
+ if (!need_check_exit)
+ need_check_exit = shutdown_entries(adb);
+ if (need_check_exit)
+ check_exit(adb);
+ }
- UNLOCK(&adb->lock);
+ UNLOCK(&adb->lock);
}
isc_result_t
dns_adb_createfind(dns_adb_t *adb, isc_task_t *task, isc_taskaction_t action,
- void *arg, dns_name_t *name, dns_name_t *qname,
- dns_rdatatype_t qtype, unsigned int options,
- isc_stdtime_t now, dns_name_t *target,
- in_port_t port, dns_adbfind_t **findp)
+ void *arg, dns_name_t *name, dns_name_t *qname,
+ dns_rdatatype_t qtype, unsigned int options,
+ isc_stdtime_t now, dns_name_t *target,
+ in_port_t port, dns_adbfind_t **findp)
{
- dns_adbfind_t *find;
- dns_adbname_t *adbname;
- int bucket;
- isc_boolean_t want_event, start_at_zone, alias, have_address;
- isc_result_t result;
- unsigned int wanted_addresses;
- unsigned int wanted_fetches;
- unsigned int query_pending;
-
- REQUIRE(DNS_ADB_VALID(adb));
- if (task != NULL) {
- REQUIRE(action != NULL);
- }
- REQUIRE(name != NULL);
- REQUIRE(qname != NULL);
- REQUIRE(findp != NULL && *findp == NULL);
- REQUIRE(target == NULL || dns_name_hasbuffer(target));
-
- REQUIRE((options & DNS_ADBFIND_ADDRESSMASK) != 0);
-
- result = ISC_R_UNEXPECTED;
- wanted_addresses = (options & DNS_ADBFIND_ADDRESSMASK);
- wanted_fetches = 0;
- query_pending = 0;
- want_event = ISC_FALSE;
- start_at_zone = ISC_FALSE;
- alias = ISC_FALSE;
-
- if (now == 0)
- isc_stdtime_get(&now);
-
- /*
- * XXXMLG Move this comment somewhere else!
- *
- * Look up the name in our internal database.
- *
- * Possibilities: Note that these are not always exclusive.
- *
- * No name found. In this case, allocate a new name header and
- * an initial namehook or two. If any of these allocations
- * fail, clean up and return ISC_R_NOMEMORY.
- *
- * Name found, valid addresses present. Allocate one addrinfo
- * structure for each found and append it to the linked list
- * of addresses for this header.
- *
- * Name found, queries pending. In this case, if a task was
- * passed in, allocate a job id, attach it to the name's job
- * list and remember to tell the caller that there will be
- * more info coming later.
- */
-
- find = new_adbfind(adb);
- if (find == NULL)
- return (ISC_R_NOMEMORY);
-
- find->port = port;
-
- /*
- * Remember what types of addresses we are interested in.
- */
- find->options = options;
- find->flags |= wanted_addresses;
- if (FIND_WANTEVENT(find)) {
- REQUIRE(task != NULL);
- }
-
- /*
- * Try to see if we know anything about this name at all.
- */
- bucket = DNS_ADB_INVALIDBUCKET;
- adbname = find_name_and_lock(adb, name, find->options, &bucket);
- if (adb->name_sd[bucket]) {
- DP(DEF_LEVEL,
- "dns_adb_createfind: returning ISC_R_SHUTTINGDOWN");
- RUNTIME_CHECK(free_adbfind(adb, &find) == ISC_FALSE);
- result = ISC_R_SHUTTINGDOWN;
- goto out;
- }
-
- /*
- * Nothing found. Allocate a new adbname structure for this name.
- */
- if (adbname == NULL) {
- /*
- * See if there is any stale name at the end of list, and purge
- * it if so.
- */
- check_stale_name(adb, bucket, now);
-
- adbname = new_adbname(adb, name);
- if (adbname == NULL) {
- RUNTIME_CHECK(free_adbfind(adb, &find) == ISC_FALSE);
- result = ISC_R_NOMEMORY;
- goto out;
- }
- link_name(adb, bucket, adbname);
- if (FIND_HINTOK(find))
- adbname->flags |= NAME_HINT_OK;
- if (FIND_GLUEOK(find))
- adbname->flags |= NAME_GLUE_OK;
- if (FIND_STARTATZONE(find))
- adbname->flags |= NAME_STARTATZONE;
-
-#ifdef LRU_DEBUG
- adb->nname++; /* XXX: omit ADB lock for brevity */
- adb->nname_total++;
-#endif
- } else {
- /* Move this name forward in the LRU list */
- ISC_LIST_UNLINK(adb->names[bucket], adbname, plink);
- ISC_LIST_PREPEND(adb->names[bucket], adbname, plink);
-#ifdef LRU_DEBUG
- adb->nameuses++;
-#endif
- }
- adbname->last_used = now;
-
- /*
- * Expire old entries, etc.
- */
- RUNTIME_CHECK(check_expire_namehooks(adbname, now) == ISC_FALSE);
-
- /*
- * Do we know that the name is an alias?
- */
- if (!EXPIRE_OK(adbname->expire_target, now)) {
- /*
- * Yes, it is.
- */
- DP(DEF_LEVEL,
- "dns_adb_createfind: name %p is an alias (cached)",
- adbname);
- alias = ISC_TRUE;
- goto post_copy;
- }
-
- /*
- * Try to populate the name from the database and/or
- * start fetches. First try looking for an A record
- * in the database.
- */
- if (!NAME_HAS_V4(adbname) && EXPIRE_OK(adbname->expire_v4, now)
- && WANT_INET(wanted_addresses)) {
- result = dbfind_name(adbname, now, dns_rdatatype_a);
- if (result == ISC_R_SUCCESS) {
- DP(DEF_LEVEL,
- "dns_adb_createfind: found A for name %p in db",
- adbname);
- goto v6;
- }
-
- /*
- * Did we get a CNAME or DNAME?
- */
- if (result == DNS_R_ALIAS) {
- DP(DEF_LEVEL,
- "dns_adb_createfind: name %p is an alias",
- adbname);
- alias = ISC_TRUE;
- goto post_copy;
- }
-
- /*
- * If the name doesn't exist at all, don't bother with
- * v6 queries; they won't work.
- *
- * If the name does exist but we didn't get our data, go
- * ahead and try AAAA.
- *
- * If the result is neither of these, try a fetch for A.
- */
- if (NXDOMAIN_RESULT(result))
- goto fetch;
- else if (NXRRSET_RESULT(result))
- goto v6;
-
- if (!NAME_FETCH_V4(adbname))
- wanted_fetches |= DNS_ADBFIND_INET;
- }
+ dns_adbfind_t *find;
+ dns_adbname_t *adbname;
+ int bucket;
+ isc_boolean_t want_event, start_at_zone, alias, have_address;
+ isc_result_t result;
+ unsigned int wanted_addresses;
+ unsigned int wanted_fetches;
+ unsigned int query_pending;
+
+ REQUIRE(DNS_ADB_VALID(adb));
+ if (task != NULL) {
+ REQUIRE(action != NULL);
+ }
+ REQUIRE(name != NULL);
+ REQUIRE(qname != NULL);
+ REQUIRE(findp != NULL && *findp == NULL);
+ REQUIRE(target == NULL || dns_name_hasbuffer(target));
+
+ REQUIRE((options & DNS_ADBFIND_ADDRESSMASK) != 0);
+
+ result = ISC_R_UNEXPECTED;
+ wanted_addresses = (options & DNS_ADBFIND_ADDRESSMASK);
+ wanted_fetches = 0;
+ query_pending = 0;
+ want_event = ISC_FALSE;
+ start_at_zone = ISC_FALSE;
+ alias = ISC_FALSE;
+
+ if (now == 0)
+ isc_stdtime_get(&now);
+
+ /*
+ * XXXMLG Move this comment somewhere else!
+ *
+ * Look up the name in our internal database.
+ *
+ * Possibilities: Note that these are not always exclusive.
+ *
+ * No name found. In this case, allocate a new name header and
+ * an initial namehook or two. If any of these allocations
+ * fail, clean up and return ISC_R_NOMEMORY.
+ *
+ * Name found, valid addresses present. Allocate one addrinfo
+ * structure for each found and append it to the linked list
+ * of addresses for this header.
+ *
+ * Name found, queries pending. In this case, if a task was
+ * passed in, allocate a job id, attach it to the name's job
+ * list and remember to tell the caller that there will be
+ * more info coming later.
+ */
+
+ find = new_adbfind(adb);
+ if (find == NULL)
+ return (ISC_R_NOMEMORY);
+
+ find->port = port;
+
+ /*
+ * Remember what types of addresses we are interested in.
+ */
+ find->options = options;
+ find->flags |= wanted_addresses;
+ if (FIND_WANTEVENT(find)) {
+ REQUIRE(task != NULL);
+ }
+
+ /*
+ * Try to see if we know anything about this name at all.
+ */
+ bucket = DNS_ADB_INVALIDBUCKET;
+ adbname = find_name_and_lock(adb, name, find->options, &bucket);
+ if (adb->name_sd[bucket]) {
+ DP(DEF_LEVEL,
+ "dns_adb_createfind: returning ISC_R_SHUTTINGDOWN");
+ RUNTIME_CHECK(free_adbfind(adb, &find) == ISC_FALSE);
+ result = ISC_R_SHUTTINGDOWN;
+ goto out;
+ }
+
+ /*
+ * Nothing found. Allocate a new adbname structure for this name.
+ */
+ if (adbname == NULL) {
+ /*
+ * See if there is any stale name at the end of list, and purge
+ * it if so.
+ */
+ check_stale_name(adb, bucket, now);
+
+ adbname = new_adbname(adb, name);
+ if (adbname == NULL) {
+ RUNTIME_CHECK(free_adbfind(adb, &find) == ISC_FALSE);
+ result = ISC_R_NOMEMORY;
+ goto out;
+ }
+ link_name(adb, bucket, adbname);
+ if (FIND_HINTOK(find))
+ adbname->flags |= NAME_HINT_OK;
+ if (FIND_GLUEOK(find))
+ adbname->flags |= NAME_GLUE_OK;
+ if (FIND_STARTATZONE(find))
+ adbname->flags |= NAME_STARTATZONE;
+ } else {
+ /* Move this name forward in the LRU list */
+ ISC_LIST_UNLINK(adb->names[bucket], adbname, plink);
+ ISC_LIST_PREPEND(adb->names[bucket], adbname, plink);
+ }
+ adbname->last_used = now;
+
+ /*
+ * Expire old entries, etc.
+ */
+ RUNTIME_CHECK(check_expire_namehooks(adbname, now) == ISC_FALSE);
+
+ /*
+ * Do we know that the name is an alias?
+ */
+ if (!EXPIRE_OK(adbname->expire_target, now)) {
+ /*
+ * Yes, it is.
+ */
+ DP(DEF_LEVEL,
+ "dns_adb_createfind: name %p is an alias (cached)",
+ adbname);
+ alias = ISC_TRUE;
+ goto post_copy;
+ }
+
+ /*
+ * Try to populate the name from the database and/or
+ * start fetches. First try looking for an A record
+ * in the database.
+ */
+ if (!NAME_HAS_V4(adbname) && EXPIRE_OK(adbname->expire_v4, now)
+ && WANT_INET(wanted_addresses)) {
+ result = dbfind_name(adbname, now, dns_rdatatype_a);
+ if (result == ISC_R_SUCCESS) {
+ DP(DEF_LEVEL,
+ "dns_adb_createfind: found A for name %p in db",
+ adbname);
+ goto v6;
+ }
+
+ /*
+ * Did we get a CNAME or DNAME?
+ */
+ if (result == DNS_R_ALIAS) {
+ DP(DEF_LEVEL,
+ "dns_adb_createfind: name %p is an alias",
+ adbname);
+ alias = ISC_TRUE;
+ goto post_copy;
+ }
+
+ /*
+ * If the name doesn't exist at all, don't bother with
+ * v6 queries; they won't work.
+ *
+ * If the name does exist but we didn't get our data, go
+ * ahead and try AAAA.
+ *
+ * If the result is neither of these, try a fetch for A.
+ */
+ if (NXDOMAIN_RESULT(result))
+ goto fetch;
+ else if (NXRRSET_RESULT(result))
+ goto v6;
+
+ if (!NAME_FETCH_V4(adbname))
+ wanted_fetches |= DNS_ADBFIND_INET;
+ }
v6:
- if (!NAME_HAS_V6(adbname) && EXPIRE_OK(adbname->expire_v6, now)
- && WANT_INET6(wanted_addresses)) {
- result = dbfind_name(adbname, now, dns_rdatatype_aaaa);
- if (result == ISC_R_SUCCESS) {
- DP(DEF_LEVEL,
- "dns_adb_createfind: found AAAA for name %p",
- adbname);
- goto fetch;
- }
-
- /*
- * Did we get a CNAME or DNAME?
- */
- if (result == DNS_R_ALIAS) {
- DP(DEF_LEVEL,
- "dns_adb_createfind: name %p is an alias",
- adbname);
- alias = ISC_TRUE;
- goto post_copy;
- }
-
- /*
- * Listen to negative cache hints, and don't start
- * another query.
- */
- if (NCACHE_RESULT(result) || AUTH_NX(result))
- goto fetch;
-
- if (!NAME_FETCH_V6(adbname))
- wanted_fetches |= DNS_ADBFIND_INET6;
- }
+ if (!NAME_HAS_V6(adbname) && EXPIRE_OK(adbname->expire_v6, now)
+ && WANT_INET6(wanted_addresses)) {
+ result = dbfind_name(adbname, now, dns_rdatatype_aaaa);
+ if (result == ISC_R_SUCCESS) {
+ DP(DEF_LEVEL,
+ "dns_adb_createfind: found AAAA for name %p",
+ adbname);
+ goto fetch;
+ }
+
+ /*
+ * Did we get a CNAME or DNAME?
+ */
+ if (result == DNS_R_ALIAS) {
+ DP(DEF_LEVEL,
+ "dns_adb_createfind: name %p is an alias",
+ adbname);
+ alias = ISC_TRUE;
+ goto post_copy;
+ }
+
+ /*
+ * Listen to negative cache hints, and don't start
+ * another query.
+ */
+ if (NCACHE_RESULT(result) || AUTH_NX(result))
+ goto fetch;
+
+ if (!NAME_FETCH_V6(adbname))
+ wanted_fetches |= DNS_ADBFIND_INET6;
+ }
fetch:
- if ((WANT_INET(wanted_addresses) && NAME_HAS_V4(adbname)) ||
- (WANT_INET6(wanted_addresses) && NAME_HAS_V6(adbname)))
- have_address = ISC_TRUE;
- else
- have_address = ISC_FALSE;
- if (wanted_fetches != 0 &&
- ! (FIND_AVOIDFETCHES(find) && have_address)) {
- /*
- * We're missing at least one address family. Either the
- * caller hasn't instructed us to avoid fetches, or we don't
- * know anything about any of the address families that would
- * be acceptable so we have to launch fetches.
- */
-
- if (FIND_STARTATZONE(find))
- start_at_zone = ISC_TRUE;
-
- /*
- * Start V4.
- */
- if (WANT_INET(wanted_fetches) &&
- fetch_name(adbname, start_at_zone,
- dns_rdatatype_a) == ISC_R_SUCCESS) {
- DP(DEF_LEVEL,
- "dns_adb_createfind: started A fetch for name %p",
- adbname);
- }
-
- /*
- * Start V6.
- */
- if (WANT_INET6(wanted_fetches) &&
- fetch_name(adbname, start_at_zone,
- dns_rdatatype_aaaa) == ISC_R_SUCCESS) {
- DP(DEF_LEVEL,
- "dns_adb_createfind: "
- "started AAAA fetch for name %p",
- adbname);
- }
- }
-
- /*
- * Run through the name and copy out the bits we are
- * interested in.
- */
- copy_namehook_lists(adb, find, qname, qtype, adbname, now);
+ if ((WANT_INET(wanted_addresses) && NAME_HAS_V4(adbname)) ||
+ (WANT_INET6(wanted_addresses) && NAME_HAS_V6(adbname)))
+ have_address = ISC_TRUE;
+ else
+ have_address = ISC_FALSE;
+ if (wanted_fetches != 0 &&
+ ! (FIND_AVOIDFETCHES(find) && have_address)) {
+ /*
+ * We're missing at least one address family. Either the
+ * caller hasn't instructed us to avoid fetches, or we don't
+ * know anything about any of the address families that would
+ * be acceptable so we have to launch fetches.
+ */
+
+ if (FIND_STARTATZONE(find))
+ start_at_zone = ISC_TRUE;
+
+ /*
+ * Start V4.
+ */
+ if (WANT_INET(wanted_fetches) &&
+ fetch_name(adbname, start_at_zone,
+ dns_rdatatype_a) == ISC_R_SUCCESS) {
+ DP(DEF_LEVEL,
+ "dns_adb_createfind: started A fetch for name %p",
+ adbname);
+ }
+
+ /*
+ * Start V6.
+ */
+ if (WANT_INET6(wanted_fetches) &&
+ fetch_name(adbname, start_at_zone,
+ dns_rdatatype_aaaa) == ISC_R_SUCCESS) {
+ DP(DEF_LEVEL,
+ "dns_adb_createfind: "
+ "started AAAA fetch for name %p",
+ adbname);
+ }
+ }
+
+ /*
+ * Run through the name and copy out the bits we are
+ * interested in.
+ */
+ copy_namehook_lists(adb, find, qname, qtype, adbname, now);
post_copy:
- if (NAME_FETCH_V4(adbname))
- query_pending |= DNS_ADBFIND_INET;
- if (NAME_FETCH_V6(adbname))
- query_pending |= DNS_ADBFIND_INET6;
-
- /*
- * Attach to the name's query list if there are queries
- * already running, and we have been asked to.
- */
- want_event = ISC_TRUE;
- if (!FIND_WANTEVENT(find))
- want_event = ISC_FALSE;
- if (FIND_WANTEMPTYEVENT(find) && FIND_HAS_ADDRS(find))
- want_event = ISC_FALSE;
- if ((wanted_addresses & query_pending) == 0)
- want_event = ISC_FALSE;
- if (alias)
- want_event = ISC_FALSE;
- if (want_event) {
- find->adbname = adbname;
- find->name_bucket = bucket;
- ISC_LIST_APPEND(adbname->finds, find, plink);
- find->query_pending = (query_pending & wanted_addresses);
- find->flags &= ~DNS_ADBFIND_ADDRESSMASK;
- find->flags |= (find->query_pending & DNS_ADBFIND_ADDRESSMASK);
- DP(DEF_LEVEL, "createfind: attaching find %p to adbname %p",
- find, adbname);
- } else {
- /*
- * Remove the flag so the caller knows there will never
- * be an event, and set internal flags to fake that
- * the event was sent and freed, so dns_adb_destroyfind() will
- * do the right thing.
- */
- find->query_pending = (query_pending & wanted_addresses);
- find->options &= ~DNS_ADBFIND_WANTEVENT;
- find->flags |= (FIND_EVENT_SENT | FIND_EVENT_FREED);
- find->flags &= ~DNS_ADBFIND_ADDRESSMASK;
- }
-
- find->partial_result |= (adbname->partial_result & wanted_addresses);
- if (alias) {
- if (target != NULL) {
- result = dns_name_copy(&adbname->target, target, NULL);
- if (result != ISC_R_SUCCESS)
- goto out;
- }
- result = DNS_R_ALIAS;
- } else
- result = ISC_R_SUCCESS;
-
- /*
- * Copy out error flags from the name structure into the find.
- */
- find->result_v4 = find_err_map[adbname->fetch_err];
- find->result_v6 = find_err_map[adbname->fetch6_err];
+ if (NAME_FETCH_V4(adbname))
+ query_pending |= DNS_ADBFIND_INET;
+ if (NAME_FETCH_V6(adbname))
+ query_pending |= DNS_ADBFIND_INET6;
+
+ /*
+ * Attach to the name's query list if there are queries
+ * already running, and we have been asked to.
+ */
+ want_event = ISC_TRUE;
+ if (!FIND_WANTEVENT(find))
+ want_event = ISC_FALSE;
+ if (FIND_WANTEMPTYEVENT(find) && FIND_HAS_ADDRS(find))
+ want_event = ISC_FALSE;
+ if ((wanted_addresses & query_pending) == 0)
+ want_event = ISC_FALSE;
+ if (alias)
+ want_event = ISC_FALSE;
+ if (want_event) {
+ find->adbname = adbname;
+ find->name_bucket = bucket;
+ ISC_LIST_APPEND(adbname->finds, find, plink);
+ find->query_pending = (query_pending & wanted_addresses);
+ find->flags &= ~DNS_ADBFIND_ADDRESSMASK;
+ find->flags |= (find->query_pending & DNS_ADBFIND_ADDRESSMASK);
+ DP(DEF_LEVEL, "createfind: attaching find %p to adbname %p",
+ find, adbname);
+ } else {
+ /*
+ * Remove the flag so the caller knows there will never
+ * be an event, and set internal flags to fake that
+ * the event was sent and freed, so dns_adb_destroyfind() will
+ * do the right thing.
+ */
+ find->query_pending = (query_pending & wanted_addresses);
+ find->options &= ~DNS_ADBFIND_WANTEVENT;
+ find->flags |= (FIND_EVENT_SENT | FIND_EVENT_FREED);
+ find->flags &= ~DNS_ADBFIND_ADDRESSMASK;
+ }
+
+ find->partial_result |= (adbname->partial_result & wanted_addresses);
+ if (alias) {
+ if (target != NULL) {
+ result = dns_name_copy(&adbname->target, target, NULL);
+ if (result != ISC_R_SUCCESS)
+ goto out;
+ }
+ result = DNS_R_ALIAS;
+ } else
+ result = ISC_R_SUCCESS;
+
+ /*
+ * Copy out error flags from the name structure into the find.
+ */
+ find->result_v4 = find_err_map[adbname->fetch_err];
+ find->result_v6 = find_err_map[adbname->fetch6_err];
out:
- if (find != NULL) {
- *findp = find;
+ if (find != NULL) {
+ *findp = find;
- if (want_event) {
- isc_task_t *taskp;
+ if (want_event) {
+ isc_task_t *taskp;
- INSIST((find->flags & DNS_ADBFIND_ADDRESSMASK) != 0);
- taskp = NULL;
- isc_task_attach(task, &taskp);
- find->event.ev_sender = taskp;
- find->event.ev_action = action;
- find->event.ev_arg = arg;
- }
- }
+ INSIST((find->flags & DNS_ADBFIND_ADDRESSMASK) != 0);
+ taskp = NULL;
+ isc_task_attach(task, &taskp);
+ find->event.ev_sender = taskp;
+ find->event.ev_action = action;
+ find->event.ev_arg = arg;
+ }
+ }
- UNLOCK(&adb->namelocks[bucket]);
+ UNLOCK(&adb->namelocks[bucket]);
- return (result);
+ return (result);
}
void
dns_adb_destroyfind(dns_adbfind_t **findp) {
- dns_adbfind_t *find;
- dns_adbentry_t *entry;
- dns_adbaddrinfo_t *ai;
- int bucket;
- dns_adb_t *adb;
-
- REQUIRE(findp != NULL && DNS_ADBFIND_VALID(*findp));
- find = *findp;
- *findp = NULL;
-
- LOCK(&find->lock);
-
- DP(DEF_LEVEL, "dns_adb_destroyfind on find %p", find);
-
- adb = find->adb;
- REQUIRE(DNS_ADB_VALID(adb));
-
- REQUIRE(FIND_EVENTFREED(find));
-
- bucket = find->name_bucket;
- INSIST(bucket == DNS_ADB_INVALIDBUCKET);
-
- UNLOCK(&find->lock);
-
- /*
- * The find doesn't exist on any list, and nothing is locked.
- * Return the find to the memory pool, and decrement the adb's
- * reference count.
- */
- ai = ISC_LIST_HEAD(find->list);
- while (ai != NULL) {
- ISC_LIST_UNLINK(find->list, ai, publink);
- entry = ai->entry;
- ai->entry = NULL;
- INSIST(DNS_ADBENTRY_VALID(entry));
- RUNTIME_CHECK(dec_entry_refcnt(adb, entry, ISC_TRUE) ==
- ISC_FALSE);
- free_adbaddrinfo(adb, &ai);
- ai = ISC_LIST_HEAD(find->list);
- }
-
- /*
- * WARNING: The find is freed with the adb locked. This is done
- * to avoid a race condition where we free the find, some other
- * thread tests to see if it should be destroyed, detects it should
- * be, destroys it, and then we try to lock it for our check, but the
- * lock is destroyed.
- */
- LOCK(&adb->lock);
- if (free_adbfind(adb, &find))
- check_exit(adb);
- UNLOCK(&adb->lock);
+ dns_adbfind_t *find;
+ dns_adbentry_t *entry;
+ dns_adbaddrinfo_t *ai;
+ int bucket;
+ dns_adb_t *adb;
+
+ REQUIRE(findp != NULL && DNS_ADBFIND_VALID(*findp));
+ find = *findp;
+ *findp = NULL;
+
+ LOCK(&find->lock);
+
+ DP(DEF_LEVEL, "dns_adb_destroyfind on find %p", find);
+
+ adb = find->adb;
+ REQUIRE(DNS_ADB_VALID(adb));
+
+ REQUIRE(FIND_EVENTFREED(find));
+
+ bucket = find->name_bucket;
+ INSIST(bucket == DNS_ADB_INVALIDBUCKET);
+
+ UNLOCK(&find->lock);
+
+ /*
+ * The find doesn't exist on any list, and nothing is locked.
+ * Return the find to the memory pool, and decrement the adb's
+ * reference count.
+ */
+ ai = ISC_LIST_HEAD(find->list);
+ while (ai != NULL) {
+ ISC_LIST_UNLINK(find->list, ai, publink);
+ entry = ai->entry;
+ ai->entry = NULL;
+ INSIST(DNS_ADBENTRY_VALID(entry));
+ RUNTIME_CHECK(dec_entry_refcnt(adb, entry, ISC_TRUE) ==
+ ISC_FALSE);
+ free_adbaddrinfo(adb, &ai);
+ ai = ISC_LIST_HEAD(find->list);
+ }
+
+ /*
+ * WARNING: The find is freed with the adb locked. This is done
+ * to avoid a race condition where we free the find, some other
+ * thread tests to see if it should be destroyed, detects it should
+ * be, destroys it, and then we try to lock it for our check, but the
+ * lock is destroyed.
+ */
+ LOCK(&adb->lock);
+ if (free_adbfind(adb, &find))
+ check_exit(adb);
+ UNLOCK(&adb->lock);
}
void
dns_adb_cancelfind(dns_adbfind_t *find) {
- isc_event_t *ev;
- isc_task_t *task;
- dns_adb_t *adb;
- int bucket;
- int unlock_bucket;
-
- LOCK(&find->lock);
-
- DP(DEF_LEVEL, "dns_adb_cancelfind on find %p", find);
-
- adb = find->adb;
- REQUIRE(DNS_ADB_VALID(adb));
-
- REQUIRE(!FIND_EVENTFREED(find));
- REQUIRE(FIND_WANTEVENT(find));
-
- bucket = find->name_bucket;
- if (bucket == DNS_ADB_INVALIDBUCKET)
- goto cleanup;
-
- /*
- * We need to get the adbname's lock to unlink the find.
- */
- unlock_bucket = bucket;
- violate_locking_hierarchy(&find->lock, &adb->namelocks[unlock_bucket]);
- bucket = find->name_bucket;
- if (bucket != DNS_ADB_INVALIDBUCKET) {
- ISC_LIST_UNLINK(find->adbname->finds, find, plink);
- find->adbname = NULL;
- find->name_bucket = DNS_ADB_INVALIDBUCKET;
- }
- UNLOCK(&adb->namelocks[unlock_bucket]);
- bucket = DNS_ADB_INVALIDBUCKET;
+ isc_event_t *ev;
+ isc_task_t *task;
+ dns_adb_t *adb;
+ int bucket;
+ int unlock_bucket;
+
+ LOCK(&find->lock);
+
+ DP(DEF_LEVEL, "dns_adb_cancelfind on find %p", find);
+
+ adb = find->adb;
+ REQUIRE(DNS_ADB_VALID(adb));
+
+ REQUIRE(!FIND_EVENTFREED(find));
+ REQUIRE(FIND_WANTEVENT(find));
+
+ bucket = find->name_bucket;
+ if (bucket == DNS_ADB_INVALIDBUCKET)
+ goto cleanup;
+
+ /*
+ * We need to get the adbname's lock to unlink the find.
+ */
+ unlock_bucket = bucket;
+ violate_locking_hierarchy(&find->lock, &adb->namelocks[unlock_bucket]);
+ bucket = find->name_bucket;
+ if (bucket != DNS_ADB_INVALIDBUCKET) {
+ ISC_LIST_UNLINK(find->adbname->finds, find, plink);
+ find->adbname = NULL;
+ find->name_bucket = DNS_ADB_INVALIDBUCKET;
+ }
+ UNLOCK(&adb->namelocks[unlock_bucket]);
+ bucket = DNS_ADB_INVALIDBUCKET;
cleanup:
- if (!FIND_EVENTSENT(find)) {
- ev = &find->event;
- task = ev->ev_sender;
- ev->ev_sender = find;
- ev->ev_type = DNS_EVENT_ADBCANCELED;
- ev->ev_destroy = event_free;
- ev->ev_destroy_arg = find;
- find->result_v4 = ISC_R_CANCELED;
- find->result_v6 = ISC_R_CANCELED;
+ if (!FIND_EVENTSENT(find)) {
+ ev = &find->event;
+ task = ev->ev_sender;
+ ev->ev_sender = find;
+ ev->ev_type = DNS_EVENT_ADBCANCELED;
+ ev->ev_destroy = event_free;
+ ev->ev_destroy_arg = find;
+ find->result_v4 = ISC_R_CANCELED;
+ find->result_v6 = ISC_R_CANCELED;
- DP(DEF_LEVEL, "sending event %p to task %p for find %p",
- ev, task, find);
+ DP(DEF_LEVEL, "sending event %p to task %p for find %p",
+ ev, task, find);
- isc_task_sendanddetach(&task, (isc_event_t **)&ev);
- }
+ isc_task_sendanddetach(&task, (isc_event_t **)&ev);
+ }
- UNLOCK(&find->lock);
+ UNLOCK(&find->lock);
}
void
dns_adb_dump(dns_adb_t *adb, FILE *f) {
- int i;
- isc_stdtime_t now;
+ int i;
+ isc_stdtime_t now;
- REQUIRE(DNS_ADB_VALID(adb));
- REQUIRE(f != NULL);
+ REQUIRE(DNS_ADB_VALID(adb));
+ REQUIRE(f != NULL);
- /*
- * Lock the adb itself, lock all the name buckets, then lock all
- * the entry buckets. This should put the adb into a state where
- * nothing can change, so we can iterate through everything and
- * print at our leisure.
- */
+ /*
+ * Lock the adb itself, lock all the name buckets, then lock all
+ * the entry buckets. This should put the adb into a state where
+ * nothing can change, so we can iterate through everything and
+ * print at our leisure.
+ */
- LOCK(&adb->lock);
- isc_stdtime_get(&now);
+ LOCK(&adb->lock);
+ isc_stdtime_get(&now);
- for (i = 0; i < NBUCKETS; i++)
- RUNTIME_CHECK(cleanup_names(adb, i, now) == ISC_FALSE);
- for (i = 0; i < NBUCKETS; i++)
- RUNTIME_CHECK(cleanup_entries(adb, i, now) == ISC_FALSE);
+ for (i = 0; i < NBUCKETS; i++)
+ RUNTIME_CHECK(cleanup_names(adb, i, now) == ISC_FALSE);
+ for (i = 0; i < NBUCKETS; i++)
+ RUNTIME_CHECK(cleanup_entries(adb, i, now) == ISC_FALSE);
- dump_adb(adb, f, ISC_FALSE, now);
- UNLOCK(&adb->lock);
+ dump_adb(adb, f, ISC_FALSE, now);
+ UNLOCK(&adb->lock);
}
static void
dump_ttl(FILE *f, const char *legend, isc_stdtime_t value, isc_stdtime_t now) {
- if (value == INT_MAX)
- return;
- fprintf(f, " [%s TTL %d]", legend, value - now);
+ if (value == INT_MAX)
+ return;
+ fprintf(f, " [%s TTL %d]", legend, value - now);
}
static void
dump_adb(dns_adb_t *adb, FILE *f, isc_boolean_t debug, isc_stdtime_t now) {
- int i;
- dns_adbname_t *name;
- dns_adbentry_t *entry;
-
- fprintf(f, ";\n; Address database dump\n;\n");
- if (debug)
- fprintf(f, "; addr %p, erefcnt %u, irefcnt %u, finds out %u\n",
- adb, adb->erefcnt, adb->irefcnt,
- isc_mempool_getallocated(adb->nhmp));
-
- for (i = 0; i < NBUCKETS; i++)
- LOCK(&adb->namelocks[i]);
- for (i = 0; i < NBUCKETS; i++)
- LOCK(&adb->entrylocks[i]);
-
- /*
- * Dump the names
- */
- for (i = 0; i < NBUCKETS; i++) {
- name = ISC_LIST_HEAD(adb->names[i]);
- if (name == NULL)
- continue;
- if (debug)
- fprintf(f, "; bucket %d\n", i);
- for (;
- name != NULL;
- name = ISC_LIST_NEXT(name, plink))
- {
- if (debug)
- fprintf(f, "; name %p (flags %08x)\n",
- name, name->flags);
-
- fprintf(f, "; ");
- print_dns_name(f, &name->name);
- if (dns_name_countlabels(&name->target) > 0) {
- fprintf(f, " alias ");
- print_dns_name(f, &name->target);
- }
-
- dump_ttl(f, "v4", name->expire_v4, now);
- dump_ttl(f, "v6", name->expire_v6, now);
- dump_ttl(f, "target", name->expire_target, now);
-
- fprintf(f, " [v4 %s] [v6 %s]",
- errnames[name->fetch_err],
- errnames[name->fetch6_err]);
-
- fprintf(f, "\n");
-
- print_namehook_list(f, "v4", &name->v4, debug, now);
- print_namehook_list(f, "v6", &name->v6, debug, now);
-
- if (debug)
- print_fetch_list(f, name);
- if (debug)
- print_find_list(f, name);
-
- }
- }
-
- fprintf(f, ";\n; Unassociated entries\n;\n");
-
- for (i = 0; i < NBUCKETS; i++) {
- entry = ISC_LIST_HEAD(adb->entries[i]);
- while (entry != NULL) {
- if (entry->refcnt == 0)
- dump_entry(f, entry, debug, now);
- entry = ISC_LIST_NEXT(entry, plink);
- }
- }
-
- /*
- * Unlock everything
- */
- for (i = 0; i < NBUCKETS; i++)
- UNLOCK(&adb->entrylocks[i]);
- for (i = 0; i < NBUCKETS; i++)
- UNLOCK(&adb->namelocks[i]);
+ int i;
+ dns_adbname_t *name;
+ dns_adbentry_t *entry;
+
+ fprintf(f, ";\n; Address database dump\n;\n");
+ if (debug)
+ fprintf(f, "; addr %p, erefcnt %u, irefcnt %u, finds out %u\n",
+ adb, adb->erefcnt, adb->irefcnt,
+ isc_mempool_getallocated(adb->nhmp));
+
+ for (i = 0; i < NBUCKETS; i++)
+ LOCK(&adb->namelocks[i]);
+ for (i = 0; i < NBUCKETS; i++)
+ LOCK(&adb->entrylocks[i]);
+
+ /*
+ * Dump the names
+ */
+ for (i = 0; i < NBUCKETS; i++) {
+ name = ISC_LIST_HEAD(adb->names[i]);
+ if (name == NULL)
+ continue;
+ if (debug)
+ fprintf(f, "; bucket %d\n", i);
+ for (;
+ name != NULL;
+ name = ISC_LIST_NEXT(name, plink))
+ {
+ if (debug)
+ fprintf(f, "; name %p (flags %08x)\n",
+ name, name->flags);
+
+ fprintf(f, "; ");
+ print_dns_name(f, &name->name);
+ if (dns_name_countlabels(&name->target) > 0) {
+ fprintf(f, " alias ");
+ print_dns_name(f, &name->target);
+ }
+
+ dump_ttl(f, "v4", name->expire_v4, now);
+ dump_ttl(f, "v6", name->expire_v6, now);
+ dump_ttl(f, "target", name->expire_target, now);
+
+ fprintf(f, " [v4 %s] [v6 %s]",
+ errnames[name->fetch_err],
+ errnames[name->fetch6_err]);
+
+ fprintf(f, "\n");
+
+ print_namehook_list(f, "v4", &name->v4, debug, now);
+ print_namehook_list(f, "v6", &name->v6, debug, now);
+
+ if (debug)
+ print_fetch_list(f, name);
+ if (debug)
+ print_find_list(f, name);
+
+ }
+ }
+
+ fprintf(f, ";\n; Unassociated entries\n;\n");
+
+ for (i = 0; i < NBUCKETS; i++) {
+ entry = ISC_LIST_HEAD(adb->entries[i]);
+ while (entry != NULL) {
+ if (entry->refcnt == 0)
+ dump_entry(f, entry, debug, now);
+ entry = ISC_LIST_NEXT(entry, plink);
+ }
+ }
+
+ /*
+ * Unlock everything
+ */
+ for (i = 0; i < NBUCKETS; i++)
+ UNLOCK(&adb->entrylocks[i]);
+ for (i = 0; i < NBUCKETS; i++)
+ UNLOCK(&adb->namelocks[i]);
}
static void
dump_entry(FILE *f, dns_adbentry_t *entry, isc_boolean_t debug,
- isc_stdtime_t now)
+ isc_stdtime_t now)
{
- char addrbuf[ISC_NETADDR_FORMATSIZE];
- char typebuf[DNS_RDATATYPE_FORMATSIZE];
- isc_netaddr_t netaddr;
- dns_adblameinfo_t *li;
-
- isc_netaddr_fromsockaddr(&netaddr, &entry->sockaddr);
- isc_netaddr_format(&netaddr, addrbuf, sizeof(addrbuf));
-
- if (debug)
- fprintf(f, ";\t%p: refcnt %u\n", entry, entry->refcnt);
-
- fprintf(f, ";\t%s [srtt %u] [flags %08x]",
- addrbuf, entry->srtt, entry->flags);
- if (entry->expires != 0)
- fprintf(f, " [ttl %d]", entry->expires - now);
- fprintf(f, "\n");
- for (li = ISC_LIST_HEAD(entry->lameinfo);
- li != NULL;
- li = ISC_LIST_NEXT(li, plink)) {
- fprintf(f, ";\t\t");
- print_dns_name(f, &li->qname);
- dns_rdatatype_format(li->qtype, typebuf, sizeof(typebuf));
- fprintf(f, " %s [lame TTL %d]\n", typebuf,
- li->lame_timer - now);
- }
+ char addrbuf[ISC_NETADDR_FORMATSIZE];
+ char typebuf[DNS_RDATATYPE_FORMATSIZE];
+ isc_netaddr_t netaddr;
+ dns_adblameinfo_t *li;
+
+ isc_netaddr_fromsockaddr(&netaddr, &entry->sockaddr);
+ isc_netaddr_format(&netaddr, addrbuf, sizeof(addrbuf));
+
+ if (debug)
+ fprintf(f, ";\t%p: refcnt %u\n", entry, entry->refcnt);
+
+ fprintf(f, ";\t%s [srtt %u] [flags %08x]",
+ addrbuf, entry->srtt, entry->flags);
+ if (entry->expires != 0)
+ fprintf(f, " [ttl %d]", entry->expires - now);
+ fprintf(f, "\n");
+ for (li = ISC_LIST_HEAD(entry->lameinfo);
+ li != NULL;
+ li = ISC_LIST_NEXT(li, plink)) {
+ fprintf(f, ";\t\t");
+ print_dns_name(f, &li->qname);
+ dns_rdatatype_format(li->qtype, typebuf, sizeof(typebuf));
+ fprintf(f, " %s [lame TTL %d]\n", typebuf,
+ li->lame_timer - now);
+ }
}
void
dns_adb_dumpfind(dns_adbfind_t *find, FILE *f) {
- char tmp[512];
- const char *tmpp;
- dns_adbaddrinfo_t *ai;
- isc_sockaddr_t *sa;
-
- /*
- * Not used currently, in the API Just In Case we
- * want to dump out the name and/or entries too.
- */
-
- LOCK(&find->lock);
-
- fprintf(f, ";Find %p\n", find);
- fprintf(f, ";\tqpending %08x partial %08x options %08x flags %08x\n",
- find->query_pending, find->partial_result,
- find->options, find->flags);
- fprintf(f, ";\tname_bucket %d, name %p, event sender %p\n",
- find->name_bucket, find->adbname, find->event.ev_sender);
-
- ai = ISC_LIST_HEAD(find->list);
- if (ai != NULL)
- fprintf(f, "\tAddresses:\n");
- while (ai != NULL) {
- sa = &ai->sockaddr;
- switch (sa->type.sa.sa_family) {
- case AF_INET:
- tmpp = inet_ntop(AF_INET, &sa->type.sin.sin_addr,
- tmp, sizeof(tmp));
- break;
- case AF_INET6:
- tmpp = inet_ntop(AF_INET6, &sa->type.sin6.sin6_addr,
- tmp, sizeof(tmp));
- break;
- default:
- tmpp = "UnkFamily";
- }
-
- if (tmpp == NULL)
- tmpp = "BadAddress";
-
- fprintf(f, "\t\tentry %p, flags %08x"
- " srtt %u addr %s\n",
- ai->entry, ai->flags, ai->srtt, tmpp);
-
- ai = ISC_LIST_NEXT(ai, publink);
- }
-
- UNLOCK(&find->lock);
+ char tmp[512];
+ const char *tmpp;
+ dns_adbaddrinfo_t *ai;
+ isc_sockaddr_t *sa;
+
+ /*
+ * Not used currently, in the API Just In Case we
+ * want to dump out the name and/or entries too.
+ */
+
+ LOCK(&find->lock);
+
+ fprintf(f, ";Find %p\n", find);
+ fprintf(f, ";\tqpending %08x partial %08x options %08x flags %08x\n",
+ find->query_pending, find->partial_result,
+ find->options, find->flags);
+ fprintf(f, ";\tname_bucket %d, name %p, event sender %p\n",
+ find->name_bucket, find->adbname, find->event.ev_sender);
+
+ ai = ISC_LIST_HEAD(find->list);
+ if (ai != NULL)
+ fprintf(f, "\tAddresses:\n");
+ while (ai != NULL) {
+ sa = &ai->sockaddr;
+ switch (sa->type.sa.sa_family) {
+ case AF_INET:
+ tmpp = inet_ntop(AF_INET, &sa->type.sin.sin_addr,
+ tmp, sizeof(tmp));
+ break;
+ case AF_INET6:
+ tmpp = inet_ntop(AF_INET6, &sa->type.sin6.sin6_addr,
+ tmp, sizeof(tmp));
+ break;
+ default:
+ tmpp = "UnkFamily";
+ }
+
+ if (tmpp == NULL)
+ tmpp = "BadAddress";
+
+ fprintf(f, "\t\tentry %p, flags %08x"
+ " srtt %u addr %s\n",
+ ai->entry, ai->flags, ai->srtt, tmpp);
+
+ ai = ISC_LIST_NEXT(ai, publink);
+ }
+
+ UNLOCK(&find->lock);
}
static void
print_dns_name(FILE *f, dns_name_t *name) {
- char buf[DNS_NAME_FORMATSIZE];
+ char buf[DNS_NAME_FORMATSIZE];
- INSIST(f != NULL);
+ INSIST(f != NULL);
- dns_name_format(name, buf, sizeof(buf));
- fprintf(f, "%s", buf);
+ dns_name_format(name, buf, sizeof(buf));
+ fprintf(f, "%s", buf);
}
static void
print_namehook_list(FILE *f, const char *legend, dns_adbnamehooklist_t *list,
- isc_boolean_t debug, isc_stdtime_t now)
+ isc_boolean_t debug, isc_stdtime_t now)
{
- dns_adbnamehook_t *nh;
+ dns_adbnamehook_t *nh;
- for (nh = ISC_LIST_HEAD(*list);
- nh != NULL;
- nh = ISC_LIST_NEXT(nh, plink))
- {
- if (debug)
- fprintf(f, ";\tHook(%s) %p\n", legend, nh);
- dump_entry(f, nh->entry, debug, now);
- }
+ for (nh = ISC_LIST_HEAD(*list);
+ nh != NULL;
+ nh = ISC_LIST_NEXT(nh, plink))
+ {
+ if (debug)
+ fprintf(f, ";\tHook(%s) %p\n", legend, nh);
+ dump_entry(f, nh->entry, debug, now);
+ }
}
static inline void
print_fetch(FILE *f, dns_adbfetch_t *ft, const char *type) {
- fprintf(f, "\t\tFetch(%s): %p -> { nh %p, entry %p, fetch %p }\n",
- type, ft, ft->namehook, ft->entry, ft->fetch);
+ fprintf(f, "\t\tFetch(%s): %p -> { nh %p, entry %p, fetch %p }\n",
+ type, ft, ft->namehook, ft->entry, ft->fetch);
}
static void
print_fetch_list(FILE *f, dns_adbname_t *n) {
- if (NAME_FETCH_A(n))
- print_fetch(f, n->fetch_a, "A");
- if (NAME_FETCH_AAAA(n))
- print_fetch(f, n->fetch_aaaa, "AAAA");
+ if (NAME_FETCH_A(n))
+ print_fetch(f, n->fetch_a, "A");
+ if (NAME_FETCH_AAAA(n))
+ print_fetch(f, n->fetch_aaaa, "AAAA");
}
static void
print_find_list(FILE *f, dns_adbname_t *name) {
- dns_adbfind_t *find;
+ dns_adbfind_t *find;
- find = ISC_LIST_HEAD(name->finds);
- while (find != NULL) {
- dns_adb_dumpfind(find, f);
- find = ISC_LIST_NEXT(find, plink);
- }
+ find = ISC_LIST_HEAD(name->finds);
+ while (find != NULL) {
+ dns_adb_dumpfind(find, f);
+ find = ISC_LIST_NEXT(find, plink);
+ }
}
static isc_result_t
dbfind_name(dns_adbname_t *adbname, isc_stdtime_t now, dns_rdatatype_t rdtype)
{
- isc_result_t result;
- dns_rdataset_t rdataset;
- dns_adb_t *adb;
- dns_fixedname_t foundname;
- dns_name_t *fname;
-
- INSIST(DNS_ADBNAME_VALID(adbname));
- adb = adbname->adb;
- INSIST(DNS_ADB_VALID(adb));
- INSIST(rdtype == dns_rdatatype_a || rdtype == dns_rdatatype_aaaa);
-
- dns_fixedname_init(&foundname);
- fname = dns_fixedname_name(&foundname);
- dns_rdataset_init(&rdataset);
-
- if (rdtype == dns_rdatatype_a)
- adbname->fetch_err = FIND_ERR_UNEXPECTED;
- else
- adbname->fetch6_err = FIND_ERR_UNEXPECTED;
-
- result = dns_view_find(adb->view, &adbname->name, rdtype, now,
- NAME_GLUEOK(adbname) ? DNS_DBFIND_GLUEOK : 0,
- ISC_TF(NAME_HINTOK(adbname)),
- NULL, NULL, fname, &rdataset, NULL);
-
- /* XXXVIX this switch statement is too sparse to gen a jump table. */
- switch (result) {
- case DNS_R_GLUE:
- case DNS_R_HINT:
- case ISC_R_SUCCESS:
- /*
- * Found in the database. Even if we can't copy out
- * any information, return success, or else a fetch
- * will be made, which will only make things worse.
- */
- if (rdtype == dns_rdatatype_a)
- adbname->fetch_err = FIND_ERR_SUCCESS;
- else
- adbname->fetch6_err = FIND_ERR_SUCCESS;
- result = import_rdataset(adbname, &rdataset, now);
- break;
- case DNS_R_NXDOMAIN:
- case DNS_R_NXRRSET:
- /*
- * We're authoritative and the data doesn't exist.
- * Make up a negative cache entry so we don't ask again
- * for a while.
- *
- * XXXRTH What time should we use? I'm putting in 30 seconds
- * for now.
- */
- if (rdtype == dns_rdatatype_a) {
- adbname->expire_v4 = now + 30;
- DP(NCACHE_LEVEL,
- "adb name %p: Caching auth negative entry for A",
- adbname);
- if (result == DNS_R_NXDOMAIN)
- adbname->fetch_err = FIND_ERR_NXDOMAIN;
- else
- adbname->fetch_err = FIND_ERR_NXRRSET;
- } else {
- DP(NCACHE_LEVEL,
- "adb name %p: Caching auth negative entry for AAAA",
- adbname);
- adbname->expire_v6 = now + 30;
- if (result == DNS_R_NXDOMAIN)
- adbname->fetch6_err = FIND_ERR_NXDOMAIN;
- else
- adbname->fetch6_err = FIND_ERR_NXRRSET;
- }
- break;
- case DNS_R_NCACHENXDOMAIN:
- case DNS_R_NCACHENXRRSET:
- /*
- * We found a negative cache entry. Pull the TTL from it
- * so we won't ask again for a while.
- */
- rdataset.ttl = ttlclamp(rdataset.ttl);
- if (rdtype == dns_rdatatype_a) {
- adbname->expire_v4 = rdataset.ttl + now;
- if (result == DNS_R_NCACHENXDOMAIN)
- adbname->fetch_err = FIND_ERR_NXDOMAIN;
- else
- adbname->fetch_err = FIND_ERR_NXRRSET;
- DP(NCACHE_LEVEL,
- "adb name %p: Caching negative entry for A (ttl %u)",
- adbname, rdataset.ttl);
- } else {
- DP(NCACHE_LEVEL,
- "adb name %p: Caching negative entry for AAAA (ttl %u)",
- adbname, rdataset.ttl);
- adbname->expire_v6 = rdataset.ttl + now;
- if (result == DNS_R_NCACHENXDOMAIN)
- adbname->fetch6_err = FIND_ERR_NXDOMAIN;
- else
- adbname->fetch6_err = FIND_ERR_NXRRSET;
- }
- break;
- case DNS_R_CNAME:
- case DNS_R_DNAME:
- /*
- * Clear the hint and glue flags, so this will match
- * more often.
- */
- adbname->flags &= ~(DNS_ADBFIND_GLUEOK | DNS_ADBFIND_HINTOK);
-
- rdataset.ttl = ttlclamp(rdataset.ttl);
- clean_target(adb, &adbname->target);
- adbname->expire_target = INT_MAX;
- result = set_target(adb, &adbname->name, fname, &rdataset,
- &adbname->target);
- if (result == ISC_R_SUCCESS) {
- result = DNS_R_ALIAS;
- DP(NCACHE_LEVEL,
- "adb name %p: caching alias target",
- adbname);
- adbname->expire_target = rdataset.ttl + now;
- }
- if (rdtype == dns_rdatatype_a)
- adbname->fetch_err = FIND_ERR_SUCCESS;
- else
- adbname->fetch6_err = FIND_ERR_SUCCESS;
- break;
- }
-
- if (dns_rdataset_isassociated(&rdataset))
- dns_rdataset_disassociate(&rdataset);
-
- return (result);
+ isc_result_t result;
+ dns_rdataset_t rdataset;
+ dns_adb_t *adb;
+ dns_fixedname_t foundname;
+ dns_name_t *fname;
+
+ INSIST(DNS_ADBNAME_VALID(adbname));
+ adb = adbname->adb;
+ INSIST(DNS_ADB_VALID(adb));
+ INSIST(rdtype == dns_rdatatype_a || rdtype == dns_rdatatype_aaaa);
+
+ dns_fixedname_init(&foundname);
+ fname = dns_fixedname_name(&foundname);
+ dns_rdataset_init(&rdataset);
+
+ if (rdtype == dns_rdatatype_a)
+ adbname->fetch_err = FIND_ERR_UNEXPECTED;
+ else
+ adbname->fetch6_err = FIND_ERR_UNEXPECTED;
+
+ result = dns_view_find(adb->view, &adbname->name, rdtype, now,
+ NAME_GLUEOK(adbname) ? DNS_DBFIND_GLUEOK : 0,
+ ISC_TF(NAME_HINTOK(adbname)),
+ NULL, NULL, fname, &rdataset, NULL);
+
+ /* XXXVIX this switch statement is too sparse to gen a jump table. */
+ switch (result) {
+ case DNS_R_GLUE:
+ case DNS_R_HINT:
+ case ISC_R_SUCCESS:
+ /*
+ * Found in the database. Even if we can't copy out
+ * any information, return success, or else a fetch
+ * will be made, which will only make things worse.
+ */
+ if (rdtype == dns_rdatatype_a)
+ adbname->fetch_err = FIND_ERR_SUCCESS;
+ else
+ adbname->fetch6_err = FIND_ERR_SUCCESS;
+ result = import_rdataset(adbname, &rdataset, now);
+ break;
+ case DNS_R_NXDOMAIN:
+ case DNS_R_NXRRSET:
+ /*
+ * We're authoritative and the data doesn't exist.
+ * Make up a negative cache entry so we don't ask again
+ * for a while.
+ *
+ * XXXRTH What time should we use? I'm putting in 30 seconds
+ * for now.
+ */
+ if (rdtype == dns_rdatatype_a) {
+ adbname->expire_v4 = now + 30;
+ DP(NCACHE_LEVEL,
+ "adb name %p: Caching auth negative entry for A",
+ adbname);
+ if (result == DNS_R_NXDOMAIN)
+ adbname->fetch_err = FIND_ERR_NXDOMAIN;
+ else
+ adbname->fetch_err = FIND_ERR_NXRRSET;
+ } else {
+ DP(NCACHE_LEVEL,
+ "adb name %p: Caching auth negative entry for AAAA",
+ adbname);
+ adbname->expire_v6 = now + 30;
+ if (result == DNS_R_NXDOMAIN)
+ adbname->fetch6_err = FIND_ERR_NXDOMAIN;
+ else
+ adbname->fetch6_err = FIND_ERR_NXRRSET;
+ }
+ break;
+ case DNS_R_NCACHENXDOMAIN:
+ case DNS_R_NCACHENXRRSET:
+ /*
+ * We found a negative cache entry. Pull the TTL from it
+ * so we won't ask again for a while.
+ */
+ rdataset.ttl = ttlclamp(rdataset.ttl);
+ if (rdtype == dns_rdatatype_a) {
+ adbname->expire_v4 = rdataset.ttl + now;
+ if (result == DNS_R_NCACHENXDOMAIN)
+ adbname->fetch_err = FIND_ERR_NXDOMAIN;
+ else
+ adbname->fetch_err = FIND_ERR_NXRRSET;
+ DP(NCACHE_LEVEL,
+ "adb name %p: Caching negative entry for A (ttl %u)",
+ adbname, rdataset.ttl);
+ } else {
+ DP(NCACHE_LEVEL,
+ "adb name %p: Caching negative entry for AAAA (ttl %u)",
+ adbname, rdataset.ttl);
+ adbname->expire_v6 = rdataset.ttl + now;
+ if (result == DNS_R_NCACHENXDOMAIN)
+ adbname->fetch6_err = FIND_ERR_NXDOMAIN;
+ else
+ adbname->fetch6_err = FIND_ERR_NXRRSET;
+ }
+ break;
+ case DNS_R_CNAME:
+ case DNS_R_DNAME:
+ /*
+ * Clear the hint and glue flags, so this will match
+ * more often.
+ */
+ adbname->flags &= ~(DNS_ADBFIND_GLUEOK | DNS_ADBFIND_HINTOK);
+
+ rdataset.ttl = ttlclamp(rdataset.ttl);
+ clean_target(adb, &adbname->target);
+ adbname->expire_target = INT_MAX;
+ result = set_target(adb, &adbname->name, fname, &rdataset,
+ &adbname->target);
+ if (result == ISC_R_SUCCESS) {
+ result = DNS_R_ALIAS;
+ DP(NCACHE_LEVEL,
+ "adb name %p: caching alias target",
+ adbname);
+ adbname->expire_target = rdataset.ttl + now;
+ }
+ if (rdtype == dns_rdatatype_a)
+ adbname->fetch_err = FIND_ERR_SUCCESS;
+ else
+ adbname->fetch6_err = FIND_ERR_SUCCESS;
+ break;
+ }
+
+ if (dns_rdataset_isassociated(&rdataset))
+ dns_rdataset_disassociate(&rdataset);
+
+ return (result);
}
static void
fetch_callback(isc_task_t *task, isc_event_t *ev) {
- dns_fetchevent_t *dev;
- dns_adbname_t *name;
- dns_adb_t *adb;
- dns_adbfetch_t *fetch;
- int bucket;
- isc_eventtype_t ev_status;
- isc_stdtime_t now;
- isc_result_t result;
- unsigned int address_type;
- isc_boolean_t want_check_exit = ISC_FALSE;
-
- UNUSED(task);
-
- INSIST(ev->ev_type == DNS_EVENT_FETCHDONE);
- dev = (dns_fetchevent_t *)ev;
- name = ev->ev_arg;
- INSIST(DNS_ADBNAME_VALID(name));
- adb = name->adb;
- INSIST(DNS_ADB_VALID(adb));
-
- bucket = name->lock_bucket;
- LOCK(&adb->namelocks[bucket]);
-
- INSIST(NAME_FETCH_A(name) || NAME_FETCH_AAAA(name));
- address_type = 0;
- if (NAME_FETCH_A(name) && (name->fetch_a->fetch == dev->fetch)) {
- address_type = DNS_ADBFIND_INET;
- fetch = name->fetch_a;
- name->fetch_a = NULL;
- } else if (NAME_FETCH_AAAA(name)
- && (name->fetch_aaaa->fetch == dev->fetch)) {
- address_type = DNS_ADBFIND_INET6;
- fetch = name->fetch_aaaa;
- name->fetch_aaaa = NULL;
- }
- INSIST(address_type != 0);
-
- dns_resolver_destroyfetch(&fetch->fetch);
- dev->fetch = NULL;
-
- ev_status = DNS_EVENT_ADBNOMOREADDRESSES;
-
- /*
- * Cleanup things we don't care about.
- */
- if (dev->node != NULL)
- dns_db_detachnode(dev->db, &dev->node);
- if (dev->db != NULL)
- dns_db_detach(&dev->db);
-
- /*
- * If this name is marked as dead, clean up, throwing away
- * potentially good data.
- */
- if (NAME_DEAD(name)) {
- free_adbfetch(adb, &fetch);
- isc_event_free(&ev);
-
- want_check_exit = kill_name(&name, DNS_EVENT_ADBCANCELED,
- ISC_FALSE);
-
- UNLOCK(&adb->namelocks[bucket]);
-
- if (want_check_exit) {
- LOCK(&adb->lock);
- check_exit(adb);
- UNLOCK(&adb->lock);
- }
-
- return;
- }
-
- isc_stdtime_get(&now);
-
- /*
- * If we got a negative cache response, remember it.
- */
- if (NCACHE_RESULT(dev->result)) {
- dev->rdataset->ttl = ttlclamp(dev->rdataset->ttl);
- if (address_type == DNS_ADBFIND_INET) {
- DP(NCACHE_LEVEL, "adb fetch name %p: "
- "caching negative entry for A (ttl %u)",
- name, dev->rdataset->ttl);
- name->expire_v4 = ISC_MIN(name->expire_v4,
- dev->rdataset->ttl + now);
- if (dev->result == DNS_R_NCACHENXDOMAIN)
- name->fetch_err = FIND_ERR_NXDOMAIN;
- else
- name->fetch_err = FIND_ERR_NXRRSET;
- } else {
- DP(NCACHE_LEVEL, "adb fetch name %p: "
- "caching negative entry for AAAA (ttl %u)",
- name, dev->rdataset->ttl);
- name->expire_v6 = ISC_MIN(name->expire_v6,
- dev->rdataset->ttl + now);
- if (dev->result == DNS_R_NCACHENXDOMAIN)
- name->fetch6_err = FIND_ERR_NXDOMAIN;
- else
- name->fetch6_err = FIND_ERR_NXRRSET;
- }
- goto out;
- }
-
- /*
- * Handle CNAME/DNAME.
- */
- if (dev->result == DNS_R_CNAME || dev->result == DNS_R_DNAME) {
- dev->rdataset->ttl = ttlclamp(dev->rdataset->ttl);
- clean_target(adb, &name->target);
- name->expire_target = INT_MAX;
- result = set_target(adb, &name->name,
- dns_fixedname_name(&dev->foundname),
- dev->rdataset,
- &name->target);
- if (result == ISC_R_SUCCESS) {
- DP(NCACHE_LEVEL,
- "adb fetch name %p: caching alias target",
- name);
- name->expire_target = dev->rdataset->ttl + now;
- }
- goto check_result;
- }
-
- /*
- * Did we get back junk? If so, and there are no more fetches
- * sitting out there, tell all the finds about it.
- */
- if (dev->result != ISC_R_SUCCESS) {
- char buf[DNS_NAME_FORMATSIZE];
-
- dns_name_format(&name->name, buf, sizeof(buf));
- DP(DEF_LEVEL, "adb: fetch of '%s' %s failed: %s",
- buf, address_type == DNS_ADBFIND_INET ? "A" : "AAAA",
- dns_result_totext(dev->result));
- /* XXXMLG Don't pound on bad servers. */
- if (address_type == DNS_ADBFIND_INET) {
- name->expire_v4 = ISC_MIN(name->expire_v4, now + 300);
- name->fetch_err = FIND_ERR_FAILURE;
- } else {
- name->expire_v6 = ISC_MIN(name->expire_v6, now + 300);
- name->fetch6_err = FIND_ERR_FAILURE;
- }
- goto out;
- }
-
- /*
- * We got something potentially useful.
- */
- result = import_rdataset(name, &fetch->rdataset, now);
+ dns_fetchevent_t *dev;
+ dns_adbname_t *name;
+ dns_adb_t *adb;
+ dns_adbfetch_t *fetch;
+ int bucket;
+ isc_eventtype_t ev_status;
+ isc_stdtime_t now;
+ isc_result_t result;
+ unsigned int address_type;
+ isc_boolean_t want_check_exit = ISC_FALSE;
+
+ UNUSED(task);
+
+ INSIST(ev->ev_type == DNS_EVENT_FETCHDONE);
+ dev = (dns_fetchevent_t *)ev;
+ name = ev->ev_arg;
+ INSIST(DNS_ADBNAME_VALID(name));
+ adb = name->adb;
+ INSIST(DNS_ADB_VALID(adb));
+
+ bucket = name->lock_bucket;
+ LOCK(&adb->namelocks[bucket]);
+
+ INSIST(NAME_FETCH_A(name) || NAME_FETCH_AAAA(name));
+ address_type = 0;
+ if (NAME_FETCH_A(name) && (name->fetch_a->fetch == dev->fetch)) {
+ address_type = DNS_ADBFIND_INET;
+ fetch = name->fetch_a;
+ name->fetch_a = NULL;
+ } else if (NAME_FETCH_AAAA(name)
+ && (name->fetch_aaaa->fetch == dev->fetch)) {
+ address_type = DNS_ADBFIND_INET6;
+ fetch = name->fetch_aaaa;
+ name->fetch_aaaa = NULL;
+ }
+ INSIST(address_type != 0);
+
+ dns_resolver_destroyfetch(&fetch->fetch);
+ dev->fetch = NULL;
+
+ ev_status = DNS_EVENT_ADBNOMOREADDRESSES;
+
+ /*
+ * Cleanup things we don't care about.
+ */
+ if (dev->node != NULL)
+ dns_db_detachnode(dev->db, &dev->node);
+ if (dev->db != NULL)
+ dns_db_detach(&dev->db);
+
+ /*
+ * If this name is marked as dead, clean up, throwing away
+ * potentially good data.
+ */
+ if (NAME_DEAD(name)) {
+ free_adbfetch(adb, &fetch);
+ isc_event_free(&ev);
+
+ want_check_exit = kill_name(&name, DNS_EVENT_ADBCANCELED,
+ ISC_FALSE);
+
+ UNLOCK(&adb->namelocks[bucket]);
+
+ if (want_check_exit) {
+ LOCK(&adb->lock);
+ check_exit(adb);
+ UNLOCK(&adb->lock);
+ }
+
+ return;
+ }
+
+ isc_stdtime_get(&now);
+
+ /*
+ * If we got a negative cache response, remember it.
+ */
+ if (NCACHE_RESULT(dev->result)) {
+ dev->rdataset->ttl = ttlclamp(dev->rdataset->ttl);
+ if (address_type == DNS_ADBFIND_INET) {
+ DP(NCACHE_LEVEL, "adb fetch name %p: "
+ "caching negative entry for A (ttl %u)",
+ name, dev->rdataset->ttl);
+ name->expire_v4 = ISC_MIN(name->expire_v4,
+ dev->rdataset->ttl + now);
+ if (dev->result == DNS_R_NCACHENXDOMAIN)
+ name->fetch_err = FIND_ERR_NXDOMAIN;
+ else
+ name->fetch_err = FIND_ERR_NXRRSET;
+ inc_stats(adb, dns_resstatscounter_gluefetchv4fail);
+ } else {
+ DP(NCACHE_LEVEL, "adb fetch name %p: "
+ "caching negative entry for AAAA (ttl %u)",
+ name, dev->rdataset->ttl);
+ name->expire_v6 = ISC_MIN(name->expire_v6,
+ dev->rdataset->ttl + now);
+ if (dev->result == DNS_R_NCACHENXDOMAIN)
+ name->fetch6_err = FIND_ERR_NXDOMAIN;
+ else
+ name->fetch6_err = FIND_ERR_NXRRSET;
+ inc_stats(adb, dns_resstatscounter_gluefetchv6fail);
+ }
+ goto out;
+ }
+
+ /*
+ * Handle CNAME/DNAME.
+ */
+ if (dev->result == DNS_R_CNAME || dev->result == DNS_R_DNAME) {
+ dev->rdataset->ttl = ttlclamp(dev->rdataset->ttl);
+ clean_target(adb, &name->target);
+ name->expire_target = INT_MAX;
+ result = set_target(adb, &name->name,
+ dns_fixedname_name(&dev->foundname),
+ dev->rdataset,
+ &name->target);
+ if (result == ISC_R_SUCCESS) {
+ DP(NCACHE_LEVEL,
+ "adb fetch name %p: caching alias target",
+ name);
+ name->expire_target = dev->rdataset->ttl + now;
+ }
+ goto check_result;
+ }
+
+ /*
+ * Did we get back junk? If so, and there are no more fetches
+ * sitting out there, tell all the finds about it.
+ */
+ if (dev->result != ISC_R_SUCCESS) {
+ char buf[DNS_NAME_FORMATSIZE];
+
+ dns_name_format(&name->name, buf, sizeof(buf));
+ DP(DEF_LEVEL, "adb: fetch of '%s' %s failed: %s",
+ buf, address_type == DNS_ADBFIND_INET ? "A" : "AAAA",
+ dns_result_totext(dev->result));
+ /* XXXMLG Don't pound on bad servers. */
+ if (address_type == DNS_ADBFIND_INET) {
+ name->expire_v4 = ISC_MIN(name->expire_v4, now + 300);
+ name->fetch_err = FIND_ERR_FAILURE;
+ inc_stats(adb, dns_resstatscounter_gluefetchv4fail);
+ } else {
+ name->expire_v6 = ISC_MIN(name->expire_v6, now + 300);
+ name->fetch6_err = FIND_ERR_FAILURE;
+ inc_stats(adb, dns_resstatscounter_gluefetchv6fail);
+ }
+ goto out;
+ }
+
+ /*
+ * We got something potentially useful.
+ */
+ result = import_rdataset(name, &fetch->rdataset, now);
check_result:
- if (result == ISC_R_SUCCESS) {
- ev_status = DNS_EVENT_ADBMOREADDRESSES;
- if (address_type == DNS_ADBFIND_INET)
- name->fetch_err = FIND_ERR_SUCCESS;
- else
- name->fetch6_err = FIND_ERR_SUCCESS;
- }
+ if (result == ISC_R_SUCCESS) {
+ ev_status = DNS_EVENT_ADBMOREADDRESSES;
+ if (address_type == DNS_ADBFIND_INET)
+ name->fetch_err = FIND_ERR_SUCCESS;
+ else
+ name->fetch6_err = FIND_ERR_SUCCESS;
+ }
out:
- free_adbfetch(adb, &fetch);
- isc_event_free(&ev);
+ free_adbfetch(adb, &fetch);
+ isc_event_free(&ev);
- clean_finds_at_name(name, ev_status, address_type);
+ clean_finds_at_name(name, ev_status, address_type);
- UNLOCK(&adb->namelocks[bucket]);
+ UNLOCK(&adb->namelocks[bucket]);
}
static isc_result_t
fetch_name(dns_adbname_t *adbname,
- isc_boolean_t start_at_zone,
- dns_rdatatype_t type)
+ isc_boolean_t start_at_zone,
+ dns_rdatatype_t type)
{
- isc_result_t result;
- dns_adbfetch_t *fetch = NULL;
- dns_adb_t *adb;
- dns_fixedname_t fixed;
- dns_name_t *name;
- dns_rdataset_t rdataset;
- dns_rdataset_t *nameservers;
- unsigned int options;
-
- INSIST(DNS_ADBNAME_VALID(adbname));
- adb = adbname->adb;
- INSIST(DNS_ADB_VALID(adb));
-
- INSIST((type == dns_rdatatype_a && !NAME_FETCH_V4(adbname)) ||
- (type == dns_rdatatype_aaaa && !NAME_FETCH_V6(adbname)));
-
- adbname->fetch_err = FIND_ERR_NOTFOUND;
-
- name = NULL;
- nameservers = NULL;
- dns_rdataset_init(&rdataset);
-
- options = DNS_FETCHOPT_NOVALIDATE;
- if (start_at_zone) {
- DP(ENTER_LEVEL,
- "fetch_name: starting at zone for name %p",
- adbname);
- dns_fixedname_init(&fixed);
- name = dns_fixedname_name(&fixed);
- result = dns_view_findzonecut2(adb->view, &adbname->name, name,
- 0, 0, ISC_TRUE, ISC_FALSE,
- &rdataset, NULL);
- if (result != ISC_R_SUCCESS && result != DNS_R_HINT)
- goto cleanup;
- nameservers = &rdataset;
- options |= DNS_FETCHOPT_UNSHARED;
- }
-
- fetch = new_adbfetch(adb);
- if (fetch == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- result = dns_resolver_createfetch(adb->view->resolver, &adbname->name,
- type, name, nameservers, NULL,
- options, adb->task, fetch_callback,
- adbname, &fetch->rdataset, NULL,
- &fetch->fetch);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
-
- if (type == dns_rdatatype_a)
- adbname->fetch_a = fetch;
- else
- adbname->fetch_aaaa = fetch;
- fetch = NULL; /* Keep us from cleaning this up below. */
+ isc_result_t result;
+ dns_adbfetch_t *fetch = NULL;
+ dns_adb_t *adb;
+ dns_fixedname_t fixed;
+ dns_name_t *name;
+ dns_rdataset_t rdataset;
+ dns_rdataset_t *nameservers;
+ unsigned int options;
+
+ INSIST(DNS_ADBNAME_VALID(adbname));
+ adb = adbname->adb;
+ INSIST(DNS_ADB_VALID(adb));
+
+ INSIST((type == dns_rdatatype_a && !NAME_FETCH_V4(adbname)) ||
+ (type == dns_rdatatype_aaaa && !NAME_FETCH_V6(adbname)));
+
+ adbname->fetch_err = FIND_ERR_NOTFOUND;
+
+ name = NULL;
+ nameservers = NULL;
+ dns_rdataset_init(&rdataset);
+
+ options = DNS_FETCHOPT_NOVALIDATE;
+ if (start_at_zone) {
+ DP(ENTER_LEVEL,
+ "fetch_name: starting at zone for name %p",
+ adbname);
+ dns_fixedname_init(&fixed);
+ name = dns_fixedname_name(&fixed);
+ result = dns_view_findzonecut2(adb->view, &adbname->name, name,
+ 0, 0, ISC_TRUE, ISC_FALSE,
+ &rdataset, NULL);
+ if (result != ISC_R_SUCCESS && result != DNS_R_HINT)
+ goto cleanup;
+ nameservers = &rdataset;
+ options |= DNS_FETCHOPT_UNSHARED;
+ }
+
+ fetch = new_adbfetch(adb);
+ if (fetch == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto cleanup;
+ }
+
+ result = dns_resolver_createfetch(adb->view->resolver, &adbname->name,
+ type, name, nameservers, NULL,
+ options, adb->task, fetch_callback,
+ adbname, &fetch->rdataset, NULL,
+ &fetch->fetch);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+
+ if (type == dns_rdatatype_a) {
+ adbname->fetch_a = fetch;
+ inc_stats(adb, dns_resstatscounter_gluefetchv4);
+ } else {
+ adbname->fetch_aaaa = fetch;
+ inc_stats(adb, dns_resstatscounter_gluefetchv6);
+ }
+ fetch = NULL; /* Keep us from cleaning this up below. */
cleanup:
- if (fetch != NULL)
- free_adbfetch(adb, &fetch);
- if (dns_rdataset_isassociated(&rdataset))
- dns_rdataset_disassociate(&rdataset);
+ if (fetch != NULL)
+ free_adbfetch(adb, &fetch);
+ if (dns_rdataset_isassociated(&rdataset))
+ dns_rdataset_disassociate(&rdataset);
- return (result);
+ return (result);
}
/*
@@ -3544,315 +3346,271 @@ fetch_name(dns_adbname_t *adbname,
*/
isc_result_t
dns_adb_marklame(dns_adb_t *adb, dns_adbaddrinfo_t *addr, dns_name_t *qname,
- dns_rdatatype_t qtype, isc_stdtime_t expire_time)
+ dns_rdatatype_t qtype, isc_stdtime_t expire_time)
{
- dns_adblameinfo_t *li;
- int bucket;
- isc_result_t result = ISC_R_SUCCESS;
-
- REQUIRE(DNS_ADB_VALID(adb));
- REQUIRE(DNS_ADBADDRINFO_VALID(addr));
- REQUIRE(qname != NULL);
-
- bucket = addr->entry->lock_bucket;
- LOCK(&adb->entrylocks[bucket]);
- li = ISC_LIST_HEAD(addr->entry->lameinfo);
- while (li != NULL &&
- (li->qtype != qtype || !dns_name_equal(qname, &li->qname)))
- li = ISC_LIST_NEXT(li, plink);
- if (li != NULL) {
- if (expire_time > li->lame_timer)
- li->lame_timer = expire_time;
- goto unlock;
- }
- li = new_adblameinfo(adb, qname, qtype);
- if (li == NULL) {
- result = ISC_R_NOMEMORY;
- goto unlock;
- }
-
- li->lame_timer = expire_time;
-
- ISC_LIST_PREPEND(addr->entry->lameinfo, li, plink);
+ dns_adblameinfo_t *li;
+ int bucket;
+ isc_result_t result = ISC_R_SUCCESS;
+
+ REQUIRE(DNS_ADB_VALID(adb));
+ REQUIRE(DNS_ADBADDRINFO_VALID(addr));
+ REQUIRE(qname != NULL);
+
+ bucket = addr->entry->lock_bucket;
+ LOCK(&adb->entrylocks[bucket]);
+ li = ISC_LIST_HEAD(addr->entry->lameinfo);
+ while (li != NULL &&
+ (li->qtype != qtype || !dns_name_equal(qname, &li->qname)))
+ li = ISC_LIST_NEXT(li, plink);
+ if (li != NULL) {
+ if (expire_time > li->lame_timer)
+ li->lame_timer = expire_time;
+ goto unlock;
+ }
+ li = new_adblameinfo(adb, qname, qtype);
+ if (li == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto unlock;
+ }
+
+ li->lame_timer = expire_time;
+
+ ISC_LIST_PREPEND(addr->entry->lameinfo, li, plink);
unlock:
- UNLOCK(&adb->entrylocks[bucket]);
+ UNLOCK(&adb->entrylocks[bucket]);
- return (result);
+ return (result);
}
void
dns_adb_adjustsrtt(dns_adb_t *adb, dns_adbaddrinfo_t *addr,
- unsigned int rtt, unsigned int factor)
+ unsigned int rtt, unsigned int factor)
{
- int bucket;
- unsigned int new_srtt;
- isc_stdtime_t now;
+ int bucket;
+ unsigned int new_srtt;
+ isc_stdtime_t now;
- REQUIRE(DNS_ADB_VALID(adb));
- REQUIRE(DNS_ADBADDRINFO_VALID(addr));
- REQUIRE(factor <= 10);
+ REQUIRE(DNS_ADB_VALID(adb));
+ REQUIRE(DNS_ADBADDRINFO_VALID(addr));
+ REQUIRE(factor <= 10);
- bucket = addr->entry->lock_bucket;
- LOCK(&adb->entrylocks[bucket]);
+ bucket = addr->entry->lock_bucket;
+ LOCK(&adb->entrylocks[bucket]);
- if (factor == DNS_ADB_RTTADJAGE)
- new_srtt = addr->entry->srtt * 98 / 100;
- else
- new_srtt = (addr->entry->srtt / 10 * factor)
- + (rtt / 10 * (10 - factor));
+ if (factor == DNS_ADB_RTTADJAGE)
+ new_srtt = addr->entry->srtt * 98 / 100;
+ else
+ new_srtt = (addr->entry->srtt / 10 * factor)
+ + (rtt / 10 * (10 - factor));
- addr->entry->srtt = new_srtt;
- addr->srtt = new_srtt;
+ addr->entry->srtt = new_srtt;
+ addr->srtt = new_srtt;
- isc_stdtime_get(&now);
- addr->entry->expires = now + ADB_ENTRY_WINDOW;
+ isc_stdtime_get(&now);
+ addr->entry->expires = now + ADB_ENTRY_WINDOW;
- UNLOCK(&adb->entrylocks[bucket]);
+ UNLOCK(&adb->entrylocks[bucket]);
}
void
dns_adb_changeflags(dns_adb_t *adb, dns_adbaddrinfo_t *addr,
- unsigned int bits, unsigned int mask)
+ unsigned int bits, unsigned int mask)
{
- int bucket;
+ int bucket;
- REQUIRE(DNS_ADB_VALID(adb));
- REQUIRE(DNS_ADBADDRINFO_VALID(addr));
+ REQUIRE(DNS_ADB_VALID(adb));
+ REQUIRE(DNS_ADBADDRINFO_VALID(addr));
- bucket = addr->entry->lock_bucket;
- LOCK(&adb->entrylocks[bucket]);
+ bucket = addr->entry->lock_bucket;
+ LOCK(&adb->entrylocks[bucket]);
- addr->entry->flags = (addr->entry->flags & ~mask) | (bits & mask);
- /*
- * Note that we do not update the other bits in addr->flags with
- * the most recent values from addr->entry->flags.
- */
- addr->flags = (addr->flags & ~mask) | (bits & mask);
+ addr->entry->flags = (addr->entry->flags & ~mask) | (bits & mask);
+ /*
+ * Note that we do not update the other bits in addr->flags with
+ * the most recent values from addr->entry->flags.
+ */
+ addr->flags = (addr->flags & ~mask) | (bits & mask);
- UNLOCK(&adb->entrylocks[bucket]);
+ UNLOCK(&adb->entrylocks[bucket]);
}
isc_result_t
dns_adb_findaddrinfo(dns_adb_t *adb, isc_sockaddr_t *sa,
- dns_adbaddrinfo_t **addrp, isc_stdtime_t now)
+ dns_adbaddrinfo_t **addrp, isc_stdtime_t now)
{
- int bucket;
- dns_adbentry_t *entry;
- dns_adbaddrinfo_t *addr;
- isc_result_t result;
- in_port_t port;
-
- REQUIRE(DNS_ADB_VALID(adb));
- REQUIRE(addrp != NULL && *addrp == NULL);
-
- UNUSED(now);
-
- result = ISC_R_SUCCESS;
- bucket = DNS_ADB_INVALIDBUCKET;
- entry = find_entry_and_lock(adb, sa, &bucket);
- if (adb->entry_sd[bucket]) {
- result = ISC_R_SHUTTINGDOWN;
- goto unlock;
- }
- if (entry == NULL) {
- /*
- * We don't know anything about this address.
- */
- entry = new_adbentry(adb);
- if (entry == NULL) {
- result = ISC_R_NOMEMORY;
- goto unlock;
- }
- entry->sockaddr = *sa;
- link_entry(adb, bucket, entry);
- DP(ENTER_LEVEL, "findaddrinfo: new entry %p", entry);
- } else
- DP(ENTER_LEVEL, "findaddrinfo: found entry %p", entry);
-
- port = isc_sockaddr_getport(sa);
- addr = new_adbaddrinfo(adb, entry, port);
- if (addr == NULL) {
- result = ISC_R_NOMEMORY;
- } else {
- inc_entry_refcnt(adb, entry, ISC_FALSE);
- *addrp = addr;
- }
+ int bucket;
+ dns_adbentry_t *entry;
+ dns_adbaddrinfo_t *addr;
+ isc_result_t result;
+ in_port_t port;
+
+ REQUIRE(DNS_ADB_VALID(adb));
+ REQUIRE(addrp != NULL && *addrp == NULL);
+
+ UNUSED(now);
+
+ result = ISC_R_SUCCESS;
+ bucket = DNS_ADB_INVALIDBUCKET;
+ entry = find_entry_and_lock(adb, sa, &bucket);
+ if (adb->entry_sd[bucket]) {
+ result = ISC_R_SHUTTINGDOWN;
+ goto unlock;
+ }
+ if (entry == NULL) {
+ /*
+ * We don't know anything about this address.
+ */
+ entry = new_adbentry(adb);
+ if (entry == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto unlock;
+ }
+ entry->sockaddr = *sa;
+ link_entry(adb, bucket, entry);
+ DP(ENTER_LEVEL, "findaddrinfo: new entry %p", entry);
+ } else
+ DP(ENTER_LEVEL, "findaddrinfo: found entry %p", entry);
+
+ port = isc_sockaddr_getport(sa);
+ addr = new_adbaddrinfo(adb, entry, port);
+ if (addr == NULL) {
+ result = ISC_R_NOMEMORY;
+ } else {
+ inc_entry_refcnt(adb, entry, ISC_FALSE);
+ *addrp = addr;
+ }
unlock:
- UNLOCK(&adb->entrylocks[bucket]);
+ UNLOCK(&adb->entrylocks[bucket]);
- return (result);
+ return (result);
}
void
dns_adb_freeaddrinfo(dns_adb_t *adb, dns_adbaddrinfo_t **addrp) {
- dns_adbaddrinfo_t *addr;
- dns_adbentry_t *entry;
- int bucket;
- isc_stdtime_t now;
- isc_boolean_t want_check_exit = ISC_FALSE;
+ dns_adbaddrinfo_t *addr;
+ dns_adbentry_t *entry;
+ int bucket;
+ isc_stdtime_t now;
+ isc_boolean_t want_check_exit = ISC_FALSE;
- REQUIRE(DNS_ADB_VALID(adb));
- REQUIRE(addrp != NULL);
- addr = *addrp;
- REQUIRE(DNS_ADBADDRINFO_VALID(addr));
- entry = addr->entry;
- REQUIRE(DNS_ADBENTRY_VALID(entry));
+ REQUIRE(DNS_ADB_VALID(adb));
+ REQUIRE(addrp != NULL);
+ addr = *addrp;
+ REQUIRE(DNS_ADBADDRINFO_VALID(addr));
+ entry = addr->entry;
+ REQUIRE(DNS_ADBENTRY_VALID(entry));
- isc_stdtime_get(&now);
+ isc_stdtime_get(&now);
- *addrp = NULL;
+ *addrp = NULL;
- bucket = addr->entry->lock_bucket;
- LOCK(&adb->entrylocks[bucket]);
+ bucket = addr->entry->lock_bucket;
+ LOCK(&adb->entrylocks[bucket]);
- entry->expires = now + ADB_ENTRY_WINDOW;
+ entry->expires = now + ADB_ENTRY_WINDOW;
- want_check_exit = dec_entry_refcnt(adb, entry, ISC_FALSE);
+ want_check_exit = dec_entry_refcnt(adb, entry, ISC_FALSE);
- UNLOCK(&adb->entrylocks[bucket]);
+ UNLOCK(&adb->entrylocks[bucket]);
- addr->entry = NULL;
- free_adbaddrinfo(adb, &addr);
+ addr->entry = NULL;
+ free_adbaddrinfo(adb, &addr);
- if (want_check_exit) {
- LOCK(&adb->lock);
- check_exit(adb);
- UNLOCK(&adb->lock);
- }
+ if (want_check_exit) {
+ LOCK(&adb->lock);
+ check_exit(adb);
+ UNLOCK(&adb->lock);
+ }
}
void
dns_adb_flush(dns_adb_t *adb) {
- unsigned int i;
+ unsigned int i;
- INSIST(DNS_ADB_VALID(adb));
+ INSIST(DNS_ADB_VALID(adb));
- LOCK(&adb->lock);
+ LOCK(&adb->lock);
- /*
- * Call our cleanup routines.
- */
- for (i = 0; i < NBUCKETS; i++)
- RUNTIME_CHECK(cleanup_names(adb, i, INT_MAX) == ISC_FALSE);
- for (i = 0; i < NBUCKETS; i++)
- RUNTIME_CHECK(cleanup_entries(adb, i, INT_MAX) == ISC_FALSE);
+ /*
+ * Call our cleanup routines.
+ */
+ for (i = 0; i < NBUCKETS; i++)
+ RUNTIME_CHECK(cleanup_names(adb, i, INT_MAX) == ISC_FALSE);
+ for (i = 0; i < NBUCKETS; i++)
+ RUNTIME_CHECK(cleanup_entries(adb, i, INT_MAX) == ISC_FALSE);
#ifdef DUMP_ADB_AFTER_CLEANING
- dump_adb(adb, stdout, ISC_TRUE, INT_MAX);
+ dump_adb(adb, stdout, ISC_TRUE, INT_MAX);
#endif
- UNLOCK(&adb->lock);
+ UNLOCK(&adb->lock);
}
void
dns_adb_flushname(dns_adb_t *adb, dns_name_t *name) {
- dns_adbname_t *adbname;
- dns_adbname_t *nextname;
- int bucket;
-
- INSIST(DNS_ADB_VALID(adb));
-
- LOCK(&adb->lock);
- bucket = dns_name_hash(name, ISC_FALSE) % NBUCKETS;
- LOCK(&adb->namelocks[bucket]);
- adbname = ISC_LIST_HEAD(adb->names[bucket]);
- while (adbname != NULL) {
- nextname = ISC_LIST_NEXT(adbname, plink);
- if (!NAME_DEAD(adbname) &&
- dns_name_equal(name, &adbname->name)) {
- RUNTIME_CHECK(kill_name(&adbname,
- DNS_EVENT_ADBCANCELED,
- ISC_TRUE) ==
- ISC_FALSE);
- }
- adbname = nextname;
- }
- UNLOCK(&adb->namelocks[bucket]);
- UNLOCK(&adb->lock);
+ dns_adbname_t *adbname;
+ dns_adbname_t *nextname;
+ int bucket;
+
+ INSIST(DNS_ADB_VALID(adb));
+
+ LOCK(&adb->lock);
+ bucket = dns_name_hash(name, ISC_FALSE) % NBUCKETS;
+ LOCK(&adb->namelocks[bucket]);
+ adbname = ISC_LIST_HEAD(adb->names[bucket]);
+ while (adbname != NULL) {
+ nextname = ISC_LIST_NEXT(adbname, plink);
+ if (!NAME_DEAD(adbname) &&
+ dns_name_equal(name, &adbname->name)) {
+ RUNTIME_CHECK(kill_name(&adbname,
+ DNS_EVENT_ADBCANCELED,
+ ISC_TRUE) ==
+ ISC_FALSE);
+ }
+ adbname = nextname;
+ }
+ UNLOCK(&adb->namelocks[bucket]);
+ UNLOCK(&adb->lock);
}
static void
water(void *arg, int mark) {
- dns_adb_t *adb = arg;
- isc_boolean_t overmem = ISC_TF(mark == ISC_MEM_HIWATER);
+ dns_adb_t *adb = arg;
+ isc_boolean_t overmem = ISC_TF(mark == ISC_MEM_HIWATER);
- REQUIRE(DNS_ADB_VALID(adb));
+ REQUIRE(DNS_ADB_VALID(adb));
- DP(ISC_LOG_DEBUG(1),
- "adb reached %s water mark", overmem ? "high" : "low");
+ DP(ISC_LOG_DEBUG(1),
+ "adb reached %s water mark", overmem ? "high" : "low");
- adb->overmem = overmem;
-#if 0 /* we don't need this timer for the new cleaning policy. */
- if (overmem) {
- isc_interval_t interval;
-
- isc_interval_set(&interval, 0, 1);
- (void)isc_timer_reset(adb->timer, isc_timertype_once, NULL,
- &interval, ISC_TRUE);
- }
-#endif
+ /*
+ * We can't use adb->lock as there is potential for water
+ * to be called when adb->lock is held.
+ */
+ LOCK(&adb->overmemlock);
+ if (adb->overmem != overmem) {
+ adb->overmem = overmem;
+ isc_mem_waterack(adb->mctx, mark);
+ }
+ UNLOCK(&adb->overmemlock);
}
void
dns_adb_setadbsize(dns_adb_t *adb, isc_uint32_t size) {
- isc_uint32_t hiwater;
- isc_uint32_t lowater;
+ isc_uint32_t hiwater;
+ isc_uint32_t lowater;
- INSIST(DNS_ADB_VALID(adb));
+ INSIST(DNS_ADB_VALID(adb));
- if (size != 0 && size < DNS_ADB_MINADBSIZE)
- size = DNS_ADB_MINADBSIZE;
+ if (size != 0 && size < DNS_ADB_MINADBSIZE)
+ size = DNS_ADB_MINADBSIZE;
- hiwater = size - (size >> 3); /* Approximately 7/8ths. */
- lowater = size - (size >> 2); /* Approximately 3/4ths. */
-
- if (size == 0 || hiwater == 0 || lowater == 0)
- isc_mem_setwater(adb->mctx, water, adb, 0, 0);
- else
- isc_mem_setwater(adb->mctx, water, adb, hiwater, lowater);
-}
+ hiwater = size - (size >> 3); /* Approximately 7/8ths. */
+ lowater = size - (size >> 2); /* Approximately 3/4ths. */
-#ifdef LRU_DEBUG
-/*
- * Periodic dumping of the internal state of the statistics.
- * This will dump the cache contents, uses, record types, etc.
- */
-static void
-timer_dump(isc_task_t *task, isc_event_t *ev) {
- dns_adb_t *adb;
- isc_interval_t interval;
- isc_time_t nexttime;
-
- UNUSED(task);
-
- adb = ev->ev_arg;
- INSIST(DNS_ADB_VALID(adb));
-
- LOCK(&adb->lock);
- if (adb->nname > 0 || adb->nentry > 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_ADB, ISC_LOG_INFO,
- "ADB memory usage %p: mem inuse %lu, "
- "%u/%u names, %u/%u entries, "
- "purge/scan=%u(%u,%u)/%u, overmem=%d",
- adb, (unsigned long)isc_mem_inuse(adb->mctx),
- adb->nname, adb->nname_total,
- adb->nentry, adb->nentry_total,
- adb->stale_purge, adb->stale_expire,
- adb->stale_lru, adb->stale_scan, adb->overmem);
- }
-
- interval.seconds = DUMP_INTERVAL;
- interval.nanoseconds = 0;
-
- RUNTIME_CHECK(isc_time_add(&adb->dump_time, &interval, &nexttime) ==
- ISC_R_SUCCESS); /* XXX: this is not always true */
- adb->dump_time = nexttime;
- (void)isc_timer_reset(adb->dump_timer, isc_timertype_once,
- &adb->dump_time, NULL, ISC_FALSE);
- UNLOCK(&adb->lock);
-
- isc_event_free(&ev);
+ if (size == 0 || hiwater == 0 || lowater == 0)
+ isc_mem_setwater(adb->mctx, water, adb, 0, 0);
+ else
+ isc_mem_setwater(adb->mctx, water, adb, hiwater, lowater);
}
-#endif
diff --git a/lib/dns/api b/lib/dns/api
index 58fb9f89..5dee1eec 100644
--- a/lib/dns/api
+++ b/lib/dns/api
@@ -1,3 +1,3 @@
-LIBINTERFACE = 41
-LIBREVISION = 0
+LIBINTERFACE = 42
+LIBREVISION = 1
LIBAGE = 0
diff --git a/lib/dns/cache.c b/lib/dns/cache.c
index cd384205..6f1e189b 100644
--- a/lib/dns/cache.c
+++ b/lib/dns/cache.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,13 +15,14 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: cache.c,v 1.76 2007/10/19 17:15:53 explorer Exp $ */
+/* $Id: cache.c,v 1.76.36.3 2008/05/01 18:32:31 jinmei Exp $ */
/*! \file */
#include <config.h>
#include <isc/mem.h>
+#include <isc/string.h>
#include <isc/task.h>
#include <isc/time.h>
#include <isc/timer.h>
@@ -39,24 +40,24 @@
#include <dns/rdatasetiter.h>
#include <dns/result.h>
-#define CACHE_MAGIC ISC_MAGIC('$', '$', '$', '$')
-#define VALID_CACHE(cache) ISC_MAGIC_VALID(cache, CACHE_MAGIC)
+#define CACHE_MAGIC ISC_MAGIC('$', '$', '$', '$')
+#define VALID_CACHE(cache) ISC_MAGIC_VALID(cache, CACHE_MAGIC)
/*!
* Control incremental cleaning.
* DNS_CACHE_MINSIZE is how many bytes is the floor for dns_cache_setcachesize().
* See also DNS_CACHE_CLEANERINCREMENT
*/
-#define DNS_CACHE_MINSIZE 2097152 /*%< Bytes. 2097152 = 2 MB */
+#define DNS_CACHE_MINSIZE 2097152 /*%< Bytes. 2097152 = 2 MB */
/*!
* Control incremental cleaning.
* CLEANERINCREMENT is how many nodes are examined in one pass.
* See also DNS_CACHE_MINSIZE
*/
-#define DNS_CACHE_CLEANERINCREMENT 1000U /*%< Number of nodes. */
+#define DNS_CACHE_CLEANERINCREMENT 1000U /*%< Number of nodes. */
/***
- *** Types
+ *** Types
***/
/*
@@ -67,40 +68,48 @@
typedef struct cache_cleaner cache_cleaner_t;
typedef enum {
- cleaner_s_idle, /*%< Waiting for cleaning-interval to expire. */
- cleaner_s_busy, /*%< Currently cleaning. */
- cleaner_s_done /*%< Freed enough memory after being overmem. */
+ cleaner_s_idle, /*%< Waiting for cleaning-interval to expire. */
+ cleaner_s_busy, /*%< Currently cleaning. */
+ cleaner_s_done /*%< Freed enough memory after being overmem. */
} cleaner_state_t;
/*
* Convenience macros for comprehensive assertion checking.
*/
-#define CLEANER_IDLE(c) ((c)->state == cleaner_s_idle)
-#define CLEANER_BUSY(c) ((c)->state == cleaner_s_busy)
+#define CLEANER_IDLE(c) ((c)->state == cleaner_s_idle && \
+ (c)->resched_event != NULL)
+#define CLEANER_BUSY(c) ((c)->state == cleaner_s_busy && \
+ (c)->iterator != NULL && \
+ (c)->resched_event == NULL)
/*%
* Accesses to a cache cleaner object are synchronized through
* task/event serialization, or locked from the cache object.
*/
struct cache_cleaner {
- isc_mutex_t lock;
- /*%<
- * Locks overmem. Note: never allocate memory
- * while holding this lock - that could lead to deadlock since
- * the lock is take by water() which is called from the memory
- * allocator.
- */
-
- dns_cache_t *cache;
- isc_task_t *task;
- unsigned int cleaning_interval; /*% The cleaning-interval from
- named.conf, in seconds. */
- isc_timer_t *cleaning_timer;
-
- unsigned int increment; /*% Number of names to
- clean in one increment */
- cleaner_state_t state; /*% Idle/Busy. */
- isc_boolean_t overmem; /*% The cache is in an overmem state. */
+ isc_mutex_t lock;
+ /*%<
+ * Locks overmem_event, overmem. Note: never allocate memory
+ * while holding this lock - that could lead to deadlock since
+ * the lock is take by water() which is called from the memory
+ * allocator.
+ */
+
+ dns_cache_t *cache;
+ isc_task_t *task;
+ unsigned int cleaning_interval; /*% The cleaning-interval from
+ named.conf, in seconds. */
+ isc_timer_t *cleaning_timer;
+ isc_event_t *resched_event; /*% Sent by cleaner task to
+ itself to reschedule */
+ isc_event_t *overmem_event;
+
+ dns_dbiterator_t *iterator;
+ unsigned int increment; /*% Number of names to
+ clean in one increment */
+ cleaner_state_t state; /*% Idle/Busy. */
+ isc_boolean_t overmem; /*% The cache is in an overmem state. */
+ isc_boolean_t replaceiterator;
};
/*%
@@ -108,434 +117,371 @@ struct cache_cleaner {
*/
struct dns_cache {
- /* Unlocked. */
- unsigned int magic;
- isc_mutex_t lock;
- isc_mutex_t filelock;
- isc_mem_t *mctx;
-
- /* Locked by 'lock'. */
- int references;
- int live_tasks;
- dns_rdataclass_t rdclass;
- dns_db_t *db;
- cache_cleaner_t cleaner;
- char *db_type;
- int db_argc;
- char **db_argv;
-
- /* Locked by 'filelock'. */
- char * filename;
- /* Access to the on-disk cache file is also locked by 'filelock'. */
-
-#ifdef LRU_DEBUG
-#define DUMP_INTERVAL 30 /* seconds */
- isc_timer_t *dump_timer; /* for test */
- isc_time_t dump_time; /* for test */
-#endif
+ /* Unlocked. */
+ unsigned int magic;
+ isc_mutex_t lock;
+ isc_mutex_t filelock;
+ isc_mem_t *mctx;
+
+ /* Locked by 'lock'. */
+ int references;
+ int live_tasks;
+ dns_rdataclass_t rdclass;
+ dns_db_t *db;
+ cache_cleaner_t cleaner;
+ char *db_type;
+ int db_argc;
+ char **db_argv;
+
+ /* Locked by 'filelock'. */
+ char *filename;
+ /* Access to the on-disk cache file is also locked by 'filelock'. */
};
/***
- *** Functions
+ *** Functions
***/
static isc_result_t
cache_cleaner_init(dns_cache_t *cache, isc_taskmgr_t *taskmgr,
- isc_timermgr_t *timermgr, cache_cleaner_t *cleaner);
+ isc_timermgr_t *timermgr, cache_cleaner_t *cleaner);
static void
cleaning_timer_action(isc_task_t *task, isc_event_t *event);
static void
-cleaner_shutdown_action(isc_task_t *task, isc_event_t *event);
+incremental_cleaning_action(isc_task_t *task, isc_event_t *event);
-#ifdef LRU_DEBUG
static void
-timer_dump(isc_task_t *task, isc_event_t *event);
-#endif
+cleaner_shutdown_action(isc_task_t *task, isc_event_t *event);
-#if 0 /* This is no longer needed. When LRU_TEST is cleaned up,
- * this should be as well. XXXMLG */
-/*%
- * Work out how many nodes can be cleaned in the time between two
- * requests to the nameserver. Smooth the resulting number and use
- * it as a estimate for the number of nodes to be cleaned in the next
- * iteration.
- */
static void
-adjust_increment(cache_cleaner_t *cleaner, unsigned int remaining,
- isc_time_t *start)
-{
- isc_time_t end;
- isc_uint64_t usecs;
- isc_uint64_t new;
- unsigned int pps = dns_pps;
- unsigned int interval;
- unsigned int names;
-
- /*
- * Tune for minumum of 100 packets per second (pps).
- */
- if (pps < 100)
- pps = 100;
-
- isc_time_now(&end);
-
- interval = 1000000 / pps; /* Interval between packets in usecs. */
- if (interval == 0)
- interval = 1;
-
- INSIST(cleaner->increment >= remaining);
- names = cleaner->increment - remaining;
- usecs = isc_time_microdiff(&end, start);
-
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE,
- ISC_LOG_DEBUG(1), "adjust_increment interval=%u "
- "names=%u usec=%" ISC_PLATFORM_QUADFORMAT "u",
- interval, names, usecs);
-
- if (usecs == 0) {
- /*
- * If we cleaned all the nodes in unmeasurable time
- * double the number of nodes to be cleaned next time.
- */
- if (names == cleaner->increment) {
- cleaner->increment *= 2;
- if (cleaner->increment > DNS_CACHE_CLEANERINCREMENT)
- cleaner->increment = DNS_CACHE_CLEANERINCREMENT;
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1),
- "%p:new cleaner->increment = %u\n",
- cleaner, cleaner->increment);
- }
- return;
- }
-
- new = (names * interval);
- new /= (usecs * 2);
- if (new == 0)
- new = 1;
-
- /* Smooth */
- new = (new + cleaner->increment * 7) / 8;
-
- if (new > DNS_CACHE_CLEANERINCREMENT)
- new = DNS_CACHE_CLEANERINCREMENT;
-
- cleaner->increment = (unsigned int)new;
-
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE,
- ISC_LOG_DEBUG(1), "%p:new cleaner->increment = %u\n",
- cleaner, cleaner->increment);
-}
-#endif
+overmem_cleaning_action(isc_task_t *task, isc_event_t *event);
static inline isc_result_t
cache_create_db(dns_cache_t *cache, dns_db_t **db) {
- return (dns_db_create(cache->mctx, cache->db_type, dns_rootname,
- dns_dbtype_cache, cache->rdclass,
- cache->db_argc, cache->db_argv, db));
+ return (dns_db_create(cache->mctx, cache->db_type, dns_rootname,
+ dns_dbtype_cache, cache->rdclass,
+ cache->db_argc, cache->db_argv, db));
}
isc_result_t
dns_cache_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
- isc_timermgr_t *timermgr, dns_rdataclass_t rdclass,
- const char *db_type, unsigned int db_argc, char **db_argv,
- dns_cache_t **cachep)
+ isc_timermgr_t *timermgr, dns_rdataclass_t rdclass,
+ const char *db_type, unsigned int db_argc, char **db_argv,
+ dns_cache_t **cachep)
{
- isc_result_t result;
- dns_cache_t *cache;
- int i;
-
- REQUIRE(cachep != NULL);
- REQUIRE(*cachep == NULL);
- REQUIRE(mctx != NULL);
-
- cache = isc_mem_get(mctx, sizeof(*cache));
- if (cache == NULL)
- return (ISC_R_NOMEMORY);
-
- cache->mctx = NULL;
- isc_mem_attach(mctx, &cache->mctx);
-
- result = isc_mutex_init(&cache->lock);
- if (result != ISC_R_SUCCESS)
- goto cleanup_mem;
-
- result = isc_mutex_init(&cache->filelock);
- if (result != ISC_R_SUCCESS)
- goto cleanup_lock;
-
- cache->references = 1;
- cache->live_tasks = 0;
- cache->rdclass = rdclass;
-
- cache->db_type = isc_mem_strdup(mctx, db_type);
- if (cache->db_type == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup_filelock;
- }
-
- cache->db_argc = db_argc;
- if (cache->db_argc == 0)
- cache->db_argv = NULL;
- else {
- cache->db_argv = isc_mem_get(mctx,
- cache->db_argc * sizeof(char *));
- if (cache->db_argv == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup_dbtype;
- }
- for (i = 0; i < cache->db_argc; i++)
- cache->db_argv[i] = NULL;
- for (i = 0; i < cache->db_argc; i++) {
- cache->db_argv[i] = isc_mem_strdup(mctx, db_argv[i]);
- if (cache->db_argv[i] == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup_dbargv;
- }
- }
- }
-
- cache->db = NULL;
- result = cache_create_db(cache, &cache->db);
- if (result != ISC_R_SUCCESS)
- goto cleanup_dbargv;
-
- cache->filename = NULL;
-
- cache->magic = CACHE_MAGIC;
-
- result = cache_cleaner_init(cache, taskmgr, timermgr, &cache->cleaner);
- if (result != ISC_R_SUCCESS)
- goto cleanup_db;
-
- *cachep = cache;
- return (ISC_R_SUCCESS);
+ isc_result_t result;
+ dns_cache_t *cache;
+ int i;
+
+ REQUIRE(cachep != NULL);
+ REQUIRE(*cachep == NULL);
+ REQUIRE(mctx != NULL);
+
+ cache = isc_mem_get(mctx, sizeof(*cache));
+ if (cache == NULL)
+ return (ISC_R_NOMEMORY);
+
+ cache->mctx = NULL;
+ isc_mem_attach(mctx, &cache->mctx);
+
+ result = isc_mutex_init(&cache->lock);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_mem;
+
+ result = isc_mutex_init(&cache->filelock);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_lock;
+
+ cache->references = 1;
+ cache->live_tasks = 0;
+ cache->rdclass = rdclass;
+
+ cache->db_type = isc_mem_strdup(mctx, db_type);
+ if (cache->db_type == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto cleanup_filelock;
+ }
+
+ cache->db_argc = db_argc;
+ if (cache->db_argc == 0)
+ cache->db_argv = NULL;
+ else {
+ cache->db_argv = isc_mem_get(mctx,
+ cache->db_argc * sizeof(char *));
+ if (cache->db_argv == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto cleanup_dbtype;
+ }
+ for (i = 0; i < cache->db_argc; i++)
+ cache->db_argv[i] = NULL;
+ for (i = 0; i < cache->db_argc; i++) {
+ cache->db_argv[i] = isc_mem_strdup(mctx, db_argv[i]);
+ if (cache->db_argv[i] == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto cleanup_dbargv;
+ }
+ }
+ }
+
+ cache->db = NULL;
+ result = cache_create_db(cache, &cache->db);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_dbargv;
+
+ cache->filename = NULL;
+
+ cache->magic = CACHE_MAGIC;
+
+ /*
+ * RBT-type cache DB has its own mechanism of cache cleaning and doesn't
+ * need the control of the generic cleaner.
+ */
+ if (strcmp(db_type, "rbt") == 0)
+ result = cache_cleaner_init(cache, NULL, NULL, &cache->cleaner);
+ else {
+ result = cache_cleaner_init(cache, taskmgr, timermgr,
+ &cache->cleaner);
+ }
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_db;
+
+ *cachep = cache;
+ return (ISC_R_SUCCESS);
cleanup_db:
- dns_db_detach(&cache->db);
+ dns_db_detach(&cache->db);
cleanup_dbargv:
- for (i = 0; i < cache->db_argc; i++)
- if (cache->db_argv[i] != NULL)
- isc_mem_free(mctx, cache->db_argv[i]);
- if (cache->db_argv != NULL)
- isc_mem_put(mctx, cache->db_argv,
- cache->db_argc * sizeof(char *));
+ for (i = 0; i < cache->db_argc; i++)
+ if (cache->db_argv[i] != NULL)
+ isc_mem_free(mctx, cache->db_argv[i]);
+ if (cache->db_argv != NULL)
+ isc_mem_put(mctx, cache->db_argv,
+ cache->db_argc * sizeof(char *));
cleanup_dbtype:
- isc_mem_free(mctx, cache->db_type);
+ isc_mem_free(mctx, cache->db_type);
cleanup_filelock:
- DESTROYLOCK(&cache->filelock);
+ DESTROYLOCK(&cache->filelock);
cleanup_lock:
- DESTROYLOCK(&cache->lock);
+ DESTROYLOCK(&cache->lock);
cleanup_mem:
- isc_mem_put(mctx, cache, sizeof(*cache));
- isc_mem_detach(&mctx);
- return (result);
+ isc_mem_put(mctx, cache, sizeof(*cache));
+ isc_mem_detach(&mctx);
+ return (result);
}
static void
cache_free(dns_cache_t *cache) {
- isc_mem_t *mctx;
- int i;
+ isc_mem_t *mctx;
+ int i;
- REQUIRE(VALID_CACHE(cache));
- REQUIRE(cache->references == 0);
+ REQUIRE(VALID_CACHE(cache));
+ REQUIRE(cache->references == 0);
- isc_mem_setwater(cache->mctx, NULL, NULL, 0, 0);
+ isc_mem_setwater(cache->mctx, NULL, NULL, 0, 0);
- if (cache->cleaner.task != NULL)
- isc_task_detach(&cache->cleaner.task);
+ if (cache->cleaner.task != NULL)
+ isc_task_detach(&cache->cleaner.task);
- DESTROYLOCK(&cache->cleaner.lock);
+ if (cache->cleaner.overmem_event != NULL)
+ isc_event_free(&cache->cleaner.overmem_event);
- if (cache->filename) {
- isc_mem_free(cache->mctx, cache->filename);
- cache->filename = NULL;
- }
+ if (cache->cleaner.resched_event != NULL)
+ isc_event_free(&cache->cleaner.resched_event);
- if (cache->db != NULL)
- dns_db_detach(&cache->db);
+ if (cache->cleaner.iterator != NULL)
+ dns_dbiterator_destroy(&cache->cleaner.iterator);
- if (cache->db_argv != NULL) {
- for (i = 0; i < cache->db_argc; i++)
- if (cache->db_argv[i] != NULL)
- isc_mem_free(cache->mctx, cache->db_argv[i]);
- isc_mem_put(cache->mctx, cache->db_argv,
- cache->db_argc * sizeof(char *));
- }
+ DESTROYLOCK(&cache->cleaner.lock);
- if (cache->db_type != NULL)
- isc_mem_free(cache->mctx, cache->db_type);
+ if (cache->filename) {
+ isc_mem_free(cache->mctx, cache->filename);
+ cache->filename = NULL;
+ }
- DESTROYLOCK(&cache->lock);
- DESTROYLOCK(&cache->filelock);
- cache->magic = 0;
- mctx = cache->mctx;
- isc_mem_put(cache->mctx, cache, sizeof(*cache));
- isc_mem_detach(&mctx);
+ if (cache->db != NULL)
+ dns_db_detach(&cache->db);
+
+ if (cache->db_argv != NULL) {
+ for (i = 0; i < cache->db_argc; i++)
+ if (cache->db_argv[i] != NULL)
+ isc_mem_free(cache->mctx, cache->db_argv[i]);
+ isc_mem_put(cache->mctx, cache->db_argv,
+ cache->db_argc * sizeof(char *));
+ }
+
+ if (cache->db_type != NULL)
+ isc_mem_free(cache->mctx, cache->db_type);
+
+ DESTROYLOCK(&cache->lock);
+ DESTROYLOCK(&cache->filelock);
+ cache->magic = 0;
+ mctx = cache->mctx;
+ isc_mem_put(cache->mctx, cache, sizeof(*cache));
+ isc_mem_detach(&mctx);
}
void
dns_cache_attach(dns_cache_t *cache, dns_cache_t **targetp) {
- REQUIRE(VALID_CACHE(cache));
- REQUIRE(targetp != NULL && *targetp == NULL);
+ REQUIRE(VALID_CACHE(cache));
+ REQUIRE(targetp != NULL && *targetp == NULL);
- LOCK(&cache->lock);
- cache->references++;
- UNLOCK(&cache->lock);
+ LOCK(&cache->lock);
+ cache->references++;
+ UNLOCK(&cache->lock);
- *targetp = cache;
+ *targetp = cache;
}
void
dns_cache_detach(dns_cache_t **cachep) {
- dns_cache_t *cache;
- isc_boolean_t free_cache = ISC_FALSE;
-
- REQUIRE(cachep != NULL);
- cache = *cachep;
- REQUIRE(VALID_CACHE(cache));
-
- LOCK(&cache->lock);
- REQUIRE(cache->references > 0);
- cache->references--;
- if (cache->references == 0) {
- cache->cleaner.overmem = ISC_FALSE;
- free_cache = ISC_TRUE;
- }
-
- *cachep = NULL;
-
- if (free_cache) {
- /*
- * When the cache is shut down, dump it to a file if one is
- * specified.
- */
- isc_result_t result = dns_cache_dump(cache);
- if (result != ISC_R_SUCCESS)
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_CACHE, ISC_LOG_WARNING,
- "error dumping cache: %s ",
- isc_result_totext(result));
-
- /*
- * If the cleaner task exists, let it free the cache.
- */
- if (cache->live_tasks > 0) {
- isc_task_shutdown(cache->cleaner.task);
- free_cache = ISC_FALSE;
- }
- }
-
- UNLOCK(&cache->lock);
-
- if (free_cache)
- cache_free(cache);
+ dns_cache_t *cache;
+ isc_boolean_t free_cache = ISC_FALSE;
+
+ REQUIRE(cachep != NULL);
+ cache = *cachep;
+ REQUIRE(VALID_CACHE(cache));
+
+ LOCK(&cache->lock);
+ REQUIRE(cache->references > 0);
+ cache->references--;
+ if (cache->references == 0) {
+ cache->cleaner.overmem = ISC_FALSE;
+ free_cache = ISC_TRUE;
+ }
+
+ *cachep = NULL;
+
+ if (free_cache) {
+ /*
+ * When the cache is shut down, dump it to a file if one is
+ * specified.
+ */
+ isc_result_t result = dns_cache_dump(cache);
+ if (result != ISC_R_SUCCESS)
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
+ DNS_LOGMODULE_CACHE, ISC_LOG_WARNING,
+ "error dumping cache: %s ",
+ isc_result_totext(result));
+
+ /*
+ * If the cleaner task exists, let it free the cache.
+ */
+ if (cache->live_tasks > 0) {
+ isc_task_shutdown(cache->cleaner.task);
+ free_cache = ISC_FALSE;
+ }
+ }
+
+ UNLOCK(&cache->lock);
+
+ if (free_cache)
+ cache_free(cache);
}
void
dns_cache_attachdb(dns_cache_t *cache, dns_db_t **dbp) {
- REQUIRE(VALID_CACHE(cache));
- REQUIRE(dbp != NULL && *dbp == NULL);
- REQUIRE(cache->db != NULL);
+ REQUIRE(VALID_CACHE(cache));
+ REQUIRE(dbp != NULL && *dbp == NULL);
+ REQUIRE(cache->db != NULL);
- LOCK(&cache->lock);
- dns_db_attach(cache->db, dbp);
- UNLOCK(&cache->lock);
+ LOCK(&cache->lock);
+ dns_db_attach(cache->db, dbp);
+ UNLOCK(&cache->lock);
}
isc_result_t
dns_cache_setfilename(dns_cache_t *cache, const char *filename) {
- char *newname;
+ char *newname;
- REQUIRE(VALID_CACHE(cache));
- REQUIRE(filename != NULL);
+ REQUIRE(VALID_CACHE(cache));
+ REQUIRE(filename != NULL);
- newname = isc_mem_strdup(cache->mctx, filename);
- if (newname == NULL)
- return (ISC_R_NOMEMORY);
+ newname = isc_mem_strdup(cache->mctx, filename);
+ if (newname == NULL)
+ return (ISC_R_NOMEMORY);
- LOCK(&cache->filelock);
- if (cache->filename)
- isc_mem_free(cache->mctx, cache->filename);
- cache->filename = newname;
- UNLOCK(&cache->filelock);
+ LOCK(&cache->filelock);
+ if (cache->filename)
+ isc_mem_free(cache->mctx, cache->filename);
+ cache->filename = newname;
+ UNLOCK(&cache->filelock);
- return (ISC_R_SUCCESS);
+ return (ISC_R_SUCCESS);
}
isc_result_t
dns_cache_load(dns_cache_t *cache) {
- isc_result_t result;
+ isc_result_t result;
- REQUIRE(VALID_CACHE(cache));
+ REQUIRE(VALID_CACHE(cache));
- if (cache->filename == NULL)
- return (ISC_R_SUCCESS);
+ if (cache->filename == NULL)
+ return (ISC_R_SUCCESS);
- LOCK(&cache->filelock);
- result = dns_db_load(cache->db, cache->filename);
- UNLOCK(&cache->filelock);
+ LOCK(&cache->filelock);
+ result = dns_db_load(cache->db, cache->filename);
+ UNLOCK(&cache->filelock);
- return (result);
+ return (result);
}
isc_result_t
dns_cache_dump(dns_cache_t *cache) {
- isc_result_t result;
+ isc_result_t result;
- REQUIRE(VALID_CACHE(cache));
+ REQUIRE(VALID_CACHE(cache));
- if (cache->filename == NULL)
- return (ISC_R_SUCCESS);
+ if (cache->filename == NULL)
+ return (ISC_R_SUCCESS);
- LOCK(&cache->filelock);
- result = dns_master_dump(cache->mctx, cache->db, NULL,
- &dns_master_style_cache, cache->filename);
- UNLOCK(&cache->filelock);
+ LOCK(&cache->filelock);
+ result = dns_master_dump(cache->mctx, cache->db, NULL,
+ &dns_master_style_cache, cache->filename);
+ UNLOCK(&cache->filelock);
- return (result);
+ return (result);
}
void
dns_cache_setcleaninginterval(dns_cache_t *cache, unsigned int t) {
- isc_interval_t interval;
- isc_result_t result;
-
- LOCK(&cache->lock);
-
- /*
- * It may be the case that the cache has already shut down.
- * If so, it has no timer.
- */
- if (cache->cleaner.cleaning_timer == NULL)
- goto unlock;
-
- cache->cleaner.cleaning_interval = t;
-
- if (t == 0) {
- result = isc_timer_reset(cache->cleaner.cleaning_timer,
- isc_timertype_inactive,
- NULL, NULL, ISC_TRUE);
- } else {
- isc_interval_set(&interval, cache->cleaner.cleaning_interval,
- 0);
- result = isc_timer_reset(cache->cleaner.cleaning_timer,
- isc_timertype_ticker,
- NULL, &interval, ISC_FALSE);
- }
- if (result != ISC_R_SUCCESS)
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_CACHE, ISC_LOG_WARNING,
- "could not set cache cleaning interval: %s",
- isc_result_totext(result));
+ isc_interval_t interval;
+ isc_result_t result;
+
+ LOCK(&cache->lock);
+
+ /*
+ * It may be the case that the cache has already shut down.
+ * If so, it has no timer.
+ */
+ if (cache->cleaner.cleaning_timer == NULL)
+ goto unlock;
+
+ cache->cleaner.cleaning_interval = t;
+
+ if (t == 0) {
+ result = isc_timer_reset(cache->cleaner.cleaning_timer,
+ isc_timertype_inactive,
+ NULL, NULL, ISC_TRUE);
+ } else {
+ isc_interval_set(&interval, cache->cleaner.cleaning_interval,
+ 0);
+ result = isc_timer_reset(cache->cleaner.cleaning_timer,
+ isc_timertype_ticker,
+ NULL, &interval, ISC_FALSE);
+ }
+ if (result != ISC_R_SUCCESS)
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
+ DNS_LOGMODULE_CACHE, ISC_LOG_WARNING,
+ "could not set cache cleaning interval: %s",
+ isc_result_totext(result));
unlock:
- UNLOCK(&cache->lock);
+ UNLOCK(&cache->lock);
}
/*
@@ -545,86 +491,180 @@ dns_cache_setcleaninginterval(dns_cache_t *cache, unsigned int t) {
static isc_result_t
cache_cleaner_init(dns_cache_t *cache, isc_taskmgr_t *taskmgr,
- isc_timermgr_t *timermgr, cache_cleaner_t *cleaner)
+ isc_timermgr_t *timermgr, cache_cleaner_t *cleaner)
{
- isc_result_t result;
-#ifdef LRU_DEBUG
- isc_interval_t interval;
-#endif
-
- result = isc_mutex_init(&cleaner->lock);
- if (result != ISC_R_SUCCESS)
- goto fail;
-
- cleaner->increment = DNS_CACHE_CLEANERINCREMENT;
- cleaner->state = cleaner_s_idle;
- cleaner->cache = cache;
- cleaner->overmem = ISC_FALSE;
-
- cleaner->task = NULL;
- cleaner->cleaning_timer = NULL;
-
- if (taskmgr != NULL && timermgr != NULL) {
- result = isc_task_create(taskmgr, 1, &cleaner->task);
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "isc_task_create() failed: %s",
- dns_result_totext(result));
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
- cleaner->cache->live_tasks++;
- isc_task_setname(cleaner->task, "cachecleaner", cleaner);
-
- result = isc_task_onshutdown(cleaner->task,
- cleaner_shutdown_action, cache);
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "cache cleaner: "
- "isc_task_onshutdown() failed: %s",
- dns_result_totext(result));
- goto cleanup;
- }
-
- cleaner->cleaning_interval = 0; /* Initially turned off. */
- result = isc_timer_create(timermgr, isc_timertype_inactive,
- NULL, NULL,
- cleaner->task,
- cleaning_timer_action, cleaner,
- &cleaner->cleaning_timer);
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "isc_timer_create() failed: %s",
- dns_result_totext(result));
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
-#ifdef LRU_DEBUG
- interval.seconds = DUMP_INTERVAL;
- interval.nanoseconds = 0;
- RUNTIME_CHECK(isc_time_nowplusinterval(&cache->dump_time,
- &interval) ==
- ISC_R_SUCCESS);
- cache->dump_timer = NULL;
- result = isc_timer_create(timermgr, isc_timertype_once,
- &cache->dump_time, NULL,
- cleaner->task, timer_dump,
- cache, &cache->dump_timer);
- RUNTIME_CHECK(result == ISC_R_SUCCESS); /* for brevity */
-#endif
- }
-
- return (ISC_R_SUCCESS);
+ isc_result_t result;
+
+ result = isc_mutex_init(&cleaner->lock);
+ if (result != ISC_R_SUCCESS)
+ goto fail;
+
+ cleaner->increment = DNS_CACHE_CLEANERINCREMENT;
+ cleaner->state = cleaner_s_idle;
+ cleaner->cache = cache;
+ cleaner->iterator = NULL;
+ cleaner->overmem = ISC_FALSE;
+ cleaner->replaceiterator = ISC_FALSE;
+
+ cleaner->task = NULL;
+ cleaner->cleaning_timer = NULL;
+ cleaner->resched_event = NULL;
+ cleaner->overmem_event = NULL;
+
+ result = dns_db_createiterator(cleaner->cache->db, ISC_FALSE,
+ &cleaner->iterator);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+
+ if (taskmgr != NULL && timermgr != NULL) {
+ result = isc_task_create(taskmgr, 1, &cleaner->task);
+ if (result != ISC_R_SUCCESS) {
+ UNEXPECTED_ERROR(__FILE__, __LINE__,
+ "isc_task_create() failed: %s",
+ dns_result_totext(result));
+ result = ISC_R_UNEXPECTED;
+ goto cleanup;
+ }
+ cleaner->cache->live_tasks++;
+ isc_task_setname(cleaner->task, "cachecleaner", cleaner);
+
+ result = isc_task_onshutdown(cleaner->task,
+ cleaner_shutdown_action, cache);
+ if (result != ISC_R_SUCCESS) {
+ UNEXPECTED_ERROR(__FILE__, __LINE__,
+ "cache cleaner: "
+ "isc_task_onshutdown() failed: %s",
+ dns_result_totext(result));
+ goto cleanup;
+ }
+
+ cleaner->cleaning_interval = 0; /* Initially turned off. */
+ result = isc_timer_create(timermgr, isc_timertype_inactive,
+ NULL, NULL, cleaner->task,
+ cleaning_timer_action, cleaner,
+ &cleaner->cleaning_timer);
+ if (result != ISC_R_SUCCESS) {
+ UNEXPECTED_ERROR(__FILE__, __LINE__,
+ "isc_timer_create() failed: %s",
+ dns_result_totext(result));
+ result = ISC_R_UNEXPECTED;
+ goto cleanup;
+ }
+
+ cleaner->resched_event =
+ isc_event_allocate(cache->mctx, cleaner,
+ DNS_EVENT_CACHECLEAN,
+ incremental_cleaning_action,
+ cleaner, sizeof(isc_event_t));
+ if (cleaner->resched_event == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto cleanup;
+ }
+
+ cleaner->overmem_event =
+ isc_event_allocate(cache->mctx, cleaner,
+ DNS_EVENT_CACHEOVERMEM,
+ overmem_cleaning_action,
+ cleaner, sizeof(isc_event_t));
+ if (cleaner->overmem_event == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto cleanup;
+ }
+ }
+
+ return (ISC_R_SUCCESS);
cleanup:
- if (cleaner->cleaning_timer != NULL)
- isc_timer_detach(&cleaner->cleaning_timer);
- if (cleaner->task != NULL)
- isc_task_detach(&cleaner->task);
- DESTROYLOCK(&cleaner->lock);
+ if (cleaner->overmem_event != NULL)
+ isc_event_free(&cleaner->overmem_event);
+ if (cleaner->resched_event != NULL)
+ isc_event_free(&cleaner->resched_event);
+ if (cleaner->cleaning_timer != NULL)
+ isc_timer_detach(&cleaner->cleaning_timer);
+ if (cleaner->task != NULL)
+ isc_task_detach(&cleaner->task);
+ if (cleaner->iterator != NULL)
+ dns_dbiterator_destroy(&cleaner->iterator);
+ DESTROYLOCK(&cleaner->lock);
fail:
- return (result);
+ return (result);
+}
+
+static void
+begin_cleaning(cache_cleaner_t *cleaner) {
+ isc_result_t result = ISC_R_SUCCESS;
+
+ REQUIRE(CLEANER_IDLE(cleaner));
+
+ /*
+ * Create an iterator, if it does not already exist, and
+ * position it at the beginning of the cache.
+ */
+ if (cleaner->iterator == NULL)
+ result = dns_db_createiterator(cleaner->cache->db, ISC_FALSE,
+ &cleaner->iterator);
+ if (result != ISC_R_SUCCESS)
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
+ DNS_LOGMODULE_CACHE, ISC_LOG_WARNING,
+ "cache cleaner could not create "
+ "iterator: %s", isc_result_totext(result));
+ else {
+ dns_dbiterator_setcleanmode(cleaner->iterator, ISC_TRUE);
+ result = dns_dbiterator_first(cleaner->iterator);
+ }
+ if (result != ISC_R_SUCCESS) {
+ /*
+ * If the result is ISC_R_NOMORE, the database is empty,
+ * so there is nothing to be cleaned.
+ */
+ if (result != ISC_R_NOMORE && cleaner->iterator != NULL) {
+ UNEXPECTED_ERROR(__FILE__, __LINE__,
+ "cache cleaner: "
+ "dns_dbiterator_first() failed: %s",
+ dns_result_totext(result));
+ dns_dbiterator_destroy(&cleaner->iterator);
+ } else if (cleaner->iterator != NULL) {
+ result = dns_dbiterator_pause(cleaner->iterator);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ }
+ } else {
+ /*
+ * Pause the iterator to free its lock.
+ */
+ result = dns_dbiterator_pause(cleaner->iterator);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
+ DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1),
+ "begin cache cleaning, mem inuse %lu",
+ (unsigned long)isc_mem_inuse(cleaner->cache->mctx));
+ cleaner->state = cleaner_s_busy;
+ isc_task_send(cleaner->task, &cleaner->resched_event);
+ }
+
+ return;
+}
+
+static void
+end_cleaning(cache_cleaner_t *cleaner, isc_event_t *event) {
+ isc_result_t result;
+
+ REQUIRE(CLEANER_BUSY(cleaner));
+ REQUIRE(event != NULL);
+
+ result = dns_dbiterator_pause(cleaner->iterator);
+ if (result != ISC_R_SUCCESS)
+ dns_dbiterator_destroy(&cleaner->iterator);
+
+ dns_cache_setcleaninginterval(cleaner->cache,
+ cleaner->cleaning_interval);
+
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE,
+ ISC_LOG_DEBUG(1), "end cache cleaning, mem inuse %lu",
+ (unsigned long)isc_mem_inuse(cleaner->cache->mctx));
+
+ cleaner->state = cleaner_s_idle;
+ cleaner->resched_event = event;
}
/*
@@ -632,18 +672,183 @@ cache_cleaner_init(dns_cache_t *cache, isc_taskmgr_t *taskmgr,
*/
static void
cleaning_timer_action(isc_task_t *task, isc_event_t *event) {
- cache_cleaner_t *cleaner = event->ev_arg;
+ cache_cleaner_t *cleaner = event->ev_arg;
+
+ UNUSED(task);
- UNUSED(task);
+ INSIST(task == cleaner->task);
+ INSIST(event->ev_type == ISC_TIMEREVENT_TICK);
- INSIST(task == cleaner->task);
- INSIST(event->ev_type == ISC_TIMEREVENT_TICK);
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE,
+ ISC_LOG_DEBUG(1), "cache cleaning timer fired, "
+ "cleaner state = %d", cleaner->state);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE,
- ISC_LOG_DEBUG(1), "cache cleaning timer fired, "
- "cleaner state = %d", cleaner->state);
+ if (cleaner->state == cleaner_s_idle)
+ begin_cleaning(cleaner);
- isc_event_free(&event);
+ isc_event_free(&event);
+}
+
+/*
+ * This is called when the cache either surpasses its upper limit
+ * or shrinks beyond its lower limit.
+ */
+static void
+overmem_cleaning_action(isc_task_t *task, isc_event_t *event) {
+ cache_cleaner_t *cleaner = event->ev_arg;
+ isc_boolean_t want_cleaning = ISC_FALSE;
+
+ UNUSED(task);
+
+ INSIST(task == cleaner->task);
+ INSIST(event->ev_type == DNS_EVENT_CACHEOVERMEM);
+ INSIST(cleaner->overmem_event == NULL);
+
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE,
+ ISC_LOG_DEBUG(1), "overmem_cleaning_action called, "
+ "overmem = %d, state = %d", cleaner->overmem,
+ cleaner->state);
+
+ LOCK(&cleaner->lock);
+
+ if (cleaner->overmem) {
+ if (cleaner->state == cleaner_s_idle)
+ want_cleaning = ISC_TRUE;
+ } else {
+ if (cleaner->state == cleaner_s_busy)
+ /*
+ * end_cleaning() can't be called here because
+ * then both cleaner->overmem_event and
+ * cleaner->resched_event will point to this
+ * event. Set the state to done, and then
+ * when the incremental_cleaning_action() event
+ * is posted, it will handle the end_cleaning.
+ */
+ cleaner->state = cleaner_s_done;
+ }
+
+ cleaner->overmem_event = event;
+
+ UNLOCK(&cleaner->lock);
+
+ if (want_cleaning)
+ begin_cleaning(cleaner);
+}
+
+/*
+ * Do incremental cleaning.
+ */
+static void
+incremental_cleaning_action(isc_task_t *task, isc_event_t *event) {
+ cache_cleaner_t *cleaner = event->ev_arg;
+ isc_result_t result;
+ unsigned int n_names;
+ isc_time_t start;
+
+ UNUSED(task);
+
+ INSIST(task == cleaner->task);
+ INSIST(event->ev_type == DNS_EVENT_CACHECLEAN);
+
+ if (cleaner->state == cleaner_s_done) {
+ cleaner->state = cleaner_s_busy;
+ end_cleaning(cleaner, event);
+ LOCK(&cleaner->cache->lock);
+ LOCK(&cleaner->lock);
+ if (cleaner->replaceiterator) {
+ dns_dbiterator_destroy(&cleaner->iterator);
+ (void) dns_db_createiterator(cleaner->cache->db,
+ ISC_FALSE,
+ &cleaner->iterator);
+ cleaner->replaceiterator = ISC_FALSE;
+ }
+ UNLOCK(&cleaner->lock);
+ UNLOCK(&cleaner->cache->lock);
+ return;
+ }
+
+ INSIST(CLEANER_BUSY(cleaner));
+
+ n_names = cleaner->increment;
+
+ REQUIRE(DNS_DBITERATOR_VALID(cleaner->iterator));
+
+ isc_time_now(&start);
+ while (n_names-- > 0) {
+ dns_dbnode_t *node = NULL;
+
+ result = dns_dbiterator_current(cleaner->iterator, &node,
+ NULL);
+ if (result != ISC_R_SUCCESS) {
+ UNEXPECTED_ERROR(__FILE__, __LINE__,
+ "cache cleaner: dns_dbiterator_current() "
+ "failed: %s", dns_result_totext(result));
+
+ end_cleaning(cleaner, event);
+ return;
+ }
+
+ /*
+ * The node was not needed, but was required by
+ * dns_dbiterator_current(). Give up its reference.
+ */
+ dns_db_detachnode(cleaner->cache->db, &node);
+
+ /*
+ * Step to the next node.
+ */
+ result = dns_dbiterator_next(cleaner->iterator);
+
+ if (result != ISC_R_SUCCESS) {
+ /*
+ * Either the end was reached (ISC_R_NOMORE) or
+ * some error was signaled. If the cache is still
+ * overmem and no error was encountered,
+ * keep trying to clean it, otherwise stop cleaning.
+ */
+ if (result != ISC_R_NOMORE)
+ UNEXPECTED_ERROR(__FILE__, __LINE__,
+ "cache cleaner: "
+ "dns_dbiterator_next() "
+ "failed: %s",
+ dns_result_totext(result));
+ else if (cleaner->overmem) {
+ result = dns_dbiterator_first(cleaner->
+ iterator);
+ if (result == ISC_R_SUCCESS) {
+ isc_log_write(dns_lctx,
+ DNS_LOGCATEGORY_DATABASE,
+ DNS_LOGMODULE_CACHE,
+ ISC_LOG_DEBUG(1),
+ "cache cleaner: "
+ "still overmem, "
+ "reset and try again");
+ continue;
+ }
+ }
+
+ end_cleaning(cleaner, event);
+ return;
+ }
+ }
+
+ /*
+ * We have successfully performed a cleaning increment but have
+ * not gone through the entire cache. Free the iterator locks
+ * and reschedule another batch. If it fails, just try to continue
+ * anyway.
+ */
+ result = dns_dbiterator_pause(cleaner->iterator);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE,
+ ISC_LOG_DEBUG(1), "cache cleaner: checked %u nodes, "
+ "mem inuse %lu, sleeping", cleaner->increment,
+ (unsigned long)isc_mem_inuse(cleaner->cache->mctx));
+
+ isc_task_send(task, &event);
+ INSIST(CLEANER_BUSY(cleaner));
+ return;
}
/*
@@ -651,104 +856,111 @@ cleaning_timer_action(isc_task_t *task, isc_event_t *event) {
*/
isc_result_t
dns_cache_clean(dns_cache_t *cache, isc_stdtime_t now) {
- isc_result_t result;
- dns_dbiterator_t *iterator = NULL;
-
- REQUIRE(VALID_CACHE(cache));
-
- result = dns_db_createiterator(cache->db, ISC_FALSE, &iterator);
- if (result != ISC_R_SUCCESS)
- return result;
-
- result = dns_dbiterator_first(iterator);
-
- while (result == ISC_R_SUCCESS) {
- dns_dbnode_t *node = NULL;
- result = dns_dbiterator_current(iterator, &node,
- (dns_name_t *)NULL);
- if (result != ISC_R_SUCCESS)
- break;
-
- /*
- * Check TTLs, mark expired rdatasets stale.
- */
- result = dns_db_expirenode(cache->db, node, now);
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "cache cleaner: dns_db_expirenode() "
- "failed: %s",
- dns_result_totext(result));
- /*
- * Continue anyway.
- */
- }
-
- /*
- * This is where the actual freeing takes place.
- */
- dns_db_detachnode(cache->db, &node);
-
- result = dns_dbiterator_next(iterator);
- }
-
- dns_dbiterator_destroy(&iterator);
-
- if (result == ISC_R_NOMORE)
- result = ISC_R_SUCCESS;
-
- return (result);
+ isc_result_t result;
+ dns_dbiterator_t *iterator = NULL;
+
+ REQUIRE(VALID_CACHE(cache));
+
+ result = dns_db_createiterator(cache->db, ISC_FALSE, &iterator);
+ if (result != ISC_R_SUCCESS)
+ return result;
+
+ result = dns_dbiterator_first(iterator);
+
+ while (result == ISC_R_SUCCESS) {
+ dns_dbnode_t *node = NULL;
+ result = dns_dbiterator_current(iterator, &node,
+ (dns_name_t *)NULL);
+ if (result != ISC_R_SUCCESS)
+ break;
+
+ /*
+ * Check TTLs, mark expired rdatasets stale.
+ */
+ result = dns_db_expirenode(cache->db, node, now);
+ if (result != ISC_R_SUCCESS) {
+ UNEXPECTED_ERROR(__FILE__, __LINE__,
+ "cache cleaner: dns_db_expirenode() "
+ "failed: %s",
+ dns_result_totext(result));
+ /*
+ * Continue anyway.
+ */
+ }
+
+ /*
+ * This is where the actual freeing takes place.
+ */
+ dns_db_detachnode(cache->db, &node);
+
+ result = dns_dbiterator_next(iterator);
+ }
+
+ dns_dbiterator_destroy(&iterator);
+
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+
+ return (result);
}
static void
water(void *arg, int mark) {
- dns_cache_t *cache = arg;
- isc_boolean_t overmem = ISC_TF(mark == ISC_MEM_HIWATER);
+ dns_cache_t *cache = arg;
+ isc_boolean_t overmem = ISC_TF(mark == ISC_MEM_HIWATER);
+
+ REQUIRE(VALID_CACHE(cache));
- REQUIRE(VALID_CACHE(cache));
+ LOCK(&cache->cleaner.lock);
- LOCK(&cache->cleaner.lock);
+ if (overmem != cache->cleaner.overmem) {
+ dns_db_overmem(cache->db, overmem);
+ cache->cleaner.overmem = overmem;
+ isc_mem_waterack(cache->mctx, mark);
+ }
- dns_db_overmem(cache->db, overmem);
- cache->cleaner.overmem = overmem;
+ if (cache->cleaner.overmem_event != NULL)
+ isc_task_send(cache->cleaner.task,
+ &cache->cleaner.overmem_event);
- UNLOCK(&cache->cleaner.lock);
+ UNLOCK(&cache->cleaner.lock);
}
void
dns_cache_setcachesize(dns_cache_t *cache, isc_uint32_t size) {
- isc_uint32_t lowater;
- isc_uint32_t hiwater;
-
- REQUIRE(VALID_CACHE(cache));
-
- /*
- * Impose a minumum cache size; pathological things happen if there
- * is too little room.
- */
- if (size != 0 && size < DNS_CACHE_MINSIZE)
- size = DNS_CACHE_MINSIZE;
-
- hiwater = size - (size >> 3); /* Approximately 7/8ths. */
- lowater = size - (size >> 2); /* Approximately 3/4ths. */
-
- /*
- * If the cache was overmem and cleaning, but now with the new limits
- * it is no longer in an overmem condition, then the next
- * isc_mem_put for cache memory will do the right thing and trigger
- * water().
- */
-
- if (size == 0 || hiwater == 0 || lowater == 0)
- /*
- * Disable cache memory limiting.
- */
- isc_mem_setwater(cache->mctx, water, cache, 0, 0);
- else
- /*
- * Establish new cache memory limits (either for the first
- * time, or replacing other limits).
- */
- isc_mem_setwater(cache->mctx, water, cache, hiwater, lowater);
+ isc_uint32_t lowater;
+ isc_uint32_t hiwater;
+
+ REQUIRE(VALID_CACHE(cache));
+
+ /*
+ * Impose a minumum cache size; pathological things happen if there
+ * is too little room.
+ */
+ if (size != 0 && size < DNS_CACHE_MINSIZE)
+ size = DNS_CACHE_MINSIZE;
+
+ hiwater = size - (size >> 3); /* Approximately 7/8ths. */
+ lowater = size - (size >> 2); /* Approximately 3/4ths. */
+
+ /*
+ * If the cache was overmem and cleaning, but now with the new limits
+ * it is no longer in an overmem condition, then the next
+ * isc_mem_put for cache memory will do the right thing and trigger
+ * water().
+ */
+
+ if (size == 0 || hiwater == 0 || lowater == 0)
+ /*
+ * Disable cache memory limiting.
+ */
+ isc_mem_setwater(cache->mctx, water, cache, 0, 0);
+ else
+ /*
+ * Establish new cache memory limits (either for the first
+ * time, or replacing other limits).
+ */
+ isc_mem_setwater(cache->mctx, water, cache, hiwater, lowater);
}
/*
@@ -756,148 +968,122 @@ dns_cache_setcachesize(dns_cache_t *cache, isc_uint32_t size) {
*/
static void
cleaner_shutdown_action(isc_task_t *task, isc_event_t *event) {
- dns_cache_t *cache = event->ev_arg;
- isc_boolean_t should_free = ISC_FALSE;
+ dns_cache_t *cache = event->ev_arg;
+ isc_boolean_t should_free = ISC_FALSE;
- UNUSED(task);
+ UNUSED(task);
- INSIST(task == cache->cleaner.task);
- INSIST(event->ev_type == ISC_TASKEVENT_SHUTDOWN);
+ INSIST(task == cache->cleaner.task);
+ INSIST(event->ev_type == ISC_TASKEVENT_SHUTDOWN);
- LOCK(&cache->lock);
+ if (CLEANER_BUSY(&cache->cleaner))
+ end_cleaning(&cache->cleaner, event);
+ else
+ isc_event_free(&event);
- cache->live_tasks--;
- INSIST(cache->live_tasks == 0);
+ LOCK(&cache->lock);
- if (cache->references == 0)
- should_free = ISC_TRUE;
+ cache->live_tasks--;
+ INSIST(cache->live_tasks == 0);
- /*
- * By detaching the timer in the context of its task,
- * we are guaranteed that there will be no further timer
- * events.
- */
- if (cache->cleaner.cleaning_timer != NULL)
- isc_timer_detach(&cache->cleaner.cleaning_timer);
+ if (cache->references == 0)
+ should_free = ISC_TRUE;
-#ifdef LRU_DEBUG
- isc_timer_detach(&cache->dump_timer);
-#endif
+ /*
+ * By detaching the timer in the context of its task,
+ * we are guaranteed that there will be no further timer
+ * events.
+ */
+ if (cache->cleaner.cleaning_timer != NULL)
+ isc_timer_detach(&cache->cleaner.cleaning_timer);
- /* Make sure we don't reschedule anymore. */
- (void)isc_task_purge(task, NULL, DNS_EVENT_CACHECLEAN, NULL);
+ /* Make sure we don't reschedule anymore. */
+ (void)isc_task_purge(task, NULL, DNS_EVENT_CACHECLEAN, NULL);
- UNLOCK(&cache->lock);
+ UNLOCK(&cache->lock);
- if (should_free)
- cache_free(cache);
-
- isc_event_free(&event);
+ if (should_free)
+ cache_free(cache);
}
isc_result_t
dns_cache_flush(dns_cache_t *cache) {
- dns_db_t *db = NULL;
- isc_result_t result;
-
- result = cache_create_db(cache, &db);
- if (result != ISC_R_SUCCESS)
- return (result);
-
- LOCK(&cache->lock);
- LOCK(&cache->cleaner.lock);
- if (cache->cleaner.state == cleaner_s_idle) {
- /* XXXMLG do something */
- } else if (cache->cleaner.state == cleaner_s_busy) {
- /* XXXMLG do something else */
- }
- dns_db_detach(&cache->db);
- cache->db = db;
- UNLOCK(&cache->cleaner.lock);
- UNLOCK(&cache->lock);
-
- return (ISC_R_SUCCESS);
+ dns_db_t *db = NULL;
+ isc_result_t result;
+
+ result = cache_create_db(cache, &db);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ LOCK(&cache->lock);
+ LOCK(&cache->cleaner.lock);
+ if (cache->cleaner.state == cleaner_s_idle) {
+ if (cache->cleaner.iterator != NULL)
+ dns_dbiterator_destroy(&cache->cleaner.iterator);
+ (void) dns_db_createiterator(db, ISC_FALSE,
+ &cache->cleaner.iterator);
+ } else {
+ if (cache->cleaner.state == cleaner_s_busy)
+ cache->cleaner.state = cleaner_s_done;
+ cache->cleaner.replaceiterator = ISC_TRUE;
+ }
+ dns_db_detach(&cache->db);
+ cache->db = db;
+ UNLOCK(&cache->cleaner.lock);
+ UNLOCK(&cache->lock);
+
+ return (ISC_R_SUCCESS);
}
isc_result_t
dns_cache_flushname(dns_cache_t *cache, dns_name_t *name) {
- isc_result_t result;
- dns_rdatasetiter_t *iter = NULL;
- dns_dbnode_t *node = NULL;
- dns_db_t *db = NULL;
-
- LOCK(&cache->lock);
- if (cache->db != NULL)
- dns_db_attach(cache->db, &db);
- UNLOCK(&cache->lock);
- if (db == NULL)
- return (ISC_R_SUCCESS);
- result = dns_db_findnode(cache->db, name, ISC_FALSE, &node);
- if (result == ISC_R_NOTFOUND) {
- result = ISC_R_SUCCESS;
- goto cleanup_db;
- }
- if (result != ISC_R_SUCCESS)
- goto cleanup_db;
-
- result = dns_db_allrdatasets(cache->db, node, NULL,
- (isc_stdtime_t)0, &iter);
- if (result != ISC_R_SUCCESS)
- goto cleanup_node;
-
- for (result = dns_rdatasetiter_first(iter);
- result == ISC_R_SUCCESS;
- result = dns_rdatasetiter_next(iter))
- {
- dns_rdataset_t rdataset;
- dns_rdataset_init(&rdataset);
-
- dns_rdatasetiter_current(iter, &rdataset);
- result = dns_db_deleterdataset(cache->db, node, NULL,
- rdataset.type, rdataset.covers);
- dns_rdataset_disassociate(&rdataset);
- if (result != ISC_R_SUCCESS && result != DNS_R_UNCHANGED)
- break;
- }
- if (result == ISC_R_NOMORE)
- result = ISC_R_SUCCESS;
-
- dns_rdatasetiter_destroy(&iter);
+ isc_result_t result;
+ dns_rdatasetiter_t *iter = NULL;
+ dns_dbnode_t *node = NULL;
+ dns_db_t *db = NULL;
+
+ LOCK(&cache->lock);
+ if (cache->db != NULL)
+ dns_db_attach(cache->db, &db);
+ UNLOCK(&cache->lock);
+ if (db == NULL)
+ return (ISC_R_SUCCESS);
+ result = dns_db_findnode(cache->db, name, ISC_FALSE, &node);
+ if (result == ISC_R_NOTFOUND) {
+ result = ISC_R_SUCCESS;
+ goto cleanup_db;
+ }
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_db;
+
+ result = dns_db_allrdatasets(cache->db, node, NULL,
+ (isc_stdtime_t)0, &iter);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_node;
+
+ for (result = dns_rdatasetiter_first(iter);
+ result == ISC_R_SUCCESS;
+ result = dns_rdatasetiter_next(iter))
+ {
+ dns_rdataset_t rdataset;
+ dns_rdataset_init(&rdataset);
+
+ dns_rdatasetiter_current(iter, &rdataset);
+ result = dns_db_deleterdataset(cache->db, node, NULL,
+ rdataset.type, rdataset.covers);
+ dns_rdataset_disassociate(&rdataset);
+ if (result != ISC_R_SUCCESS && result != DNS_R_UNCHANGED)
+ break;
+ }
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+
+ dns_rdatasetiter_destroy(&iter);
cleanup_node:
- dns_db_detachnode(cache->db, &node);
+ dns_db_detachnode(cache->db, &node);
cleanup_db:
- dns_db_detach(&db);
- return (result);
-}
-
-#ifdef LRU_DEBUG
-static void
-timer_dump(isc_task_t *task, isc_event_t *event) {
- dns_cache_t *cache;
- isc_interval_t interval;
- isc_time_t nexttime;
-
- UNUSED(task);
-
- cache = event->ev_arg;
- INSIST(VALID_CACHE(cache));
-
-#ifdef LRU_DEBUG
- /* XXX: abuse existing overmem method */
- dns_db_overmem(cache->db, (isc_boolean_t)-1);
-#endif
-
- interval.seconds = DUMP_INTERVAL;
- interval.nanoseconds = 0;
-
- RUNTIME_CHECK(isc_time_add(&cache->dump_time, &interval, &nexttime) ==
- ISC_R_SUCCESS); /* XXX: this is not always true */
- cache->dump_time = nexttime;
- (void)isc_timer_reset(cache->dump_timer, isc_timertype_once,
- &cache->dump_time, NULL, ISC_FALSE);
-
- isc_event_free(&event);
+ dns_db_detach(&db);
+ return (result);
}
-#endif
diff --git a/lib/dns/db.c b/lib/dns/db.c
index 64327651..67be11c1 100644
--- a/lib/dns/db.c
+++ b/lib/dns/db.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: db.c,v 1.83 2007/06/18 23:47:40 tbox Exp $ */
+/* $Id: db.c,v 1.83.128.2 2008/04/03 06:20:34 tbox Exp $ */
/*! \file */
@@ -95,7 +95,7 @@ static inline dns_dbimplementation_t *
impfind(const char *name) {
dns_dbimplementation_t *imp;
- for (imp = ISC_LIST_HEAD(implementations);
+ for (imp = ISC_LIST_HEAD(implementations);
imp != NULL;
imp = ISC_LIST_NEXT(imp, link))
if (strcasecmp(name, imp->name) == 0)
@@ -543,10 +543,10 @@ dns_db_transfernode(dns_db_t *db, dns_dbnode_t **sourcep,
UNUSED(db);
if (db->methods->transfernode == NULL) {
- *targetp = *sourcep;
- *sourcep = NULL;
+ *targetp = *sourcep;
+ *sourcep = NULL;
} else
- (db->methods->transfernode)(db, sourcep, targetp);
+ (db->methods->transfernode)(db, sourcep, targetp);
ENSURE(*sourcep == NULL);
}
@@ -711,7 +711,7 @@ dns_db_deleterdataset(dns_db_t *db, dns_dbnode_t *node,
type, covers));
}
-void
+void
dns_db_overmem(dns_db_t *db, isc_boolean_t overmem) {
REQUIRE(DNS_DB_VALID(db));
@@ -737,11 +737,11 @@ dns_db_getsoaserial(dns_db_t *db, dns_dbversion_t *ver, isc_uint32_t *serialp)
dns_rdataset_init(&rdataset);
result = dns_db_findrdataset(db, node, ver, dns_rdatatype_soa, 0,
(isc_stdtime_t)0, &rdataset, NULL);
- if (result != ISC_R_SUCCESS)
+ if (result != ISC_R_SUCCESS)
goto freenode;
result = dns_rdataset_first(&rdataset);
- if (result != ISC_R_SUCCESS)
+ if (result != ISC_R_SUCCESS)
goto freerdataset;
dns_rdataset_current(&rdataset, &rdata);
result = dns_rdataset_next(&rdataset);
@@ -794,7 +794,7 @@ dns_db_register(const char *name, dns_dbcreatefunc_t create, void *driverarg,
RWUNLOCK(&implock, isc_rwlocktype_write);
return (ISC_R_EXISTS);
}
-
+
imp = isc_mem_get(mctx, sizeof(dns_dbimplementation_t));
if (imp == NULL) {
RWUNLOCK(&implock, isc_rwlocktype_write);
@@ -832,6 +832,16 @@ dns_db_unregister(dns_dbimplementation_t **dbimp) {
RWUNLOCK(&implock, isc_rwlocktype_write);
}
+dns_stats_t *
+dns_db_getrrsetstats(dns_db_t *db) {
+ REQUIRE(DNS_DB_VALID(db));
+
+ if (db->methods->getrrsetstats != NULL)
+ return ((db->methods->getrrsetstats)(db));
+
+ return (NULL);
+}
+
isc_result_t
dns_db_getoriginnode(dns_db_t *db, dns_dbnode_t **nodep) {
REQUIRE(DNS_DB_VALID(db));
diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c
index 07235da8..d8a8b779 100644
--- a/lib/dns/dispatch.c
+++ b/lib/dns/dispatch.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dispatch.c,v 1.137 2007/06/27 04:10:44 marka Exp $ */
+/* $Id: dispatch.c,v 1.137.128.3 2008/04/03 06:10:19 marka Exp $ */
/*! \file */
@@ -40,27 +40,29 @@
#include <dns/log.h>
#include <dns/message.h>
#include <dns/portlist.h>
+#include <dns/stats.h>
#include <dns/tcpmsg.h>
#include <dns/types.h>
typedef ISC_LIST(dns_dispentry_t) dns_displist_t;
-typedef struct dns_nsid {
- isc_uint16_t nsid_state;
- isc_uint16_t *nsid_vtable;
- isc_uint16_t *nsid_pool;
- isc_uint16_t nsid_a1, nsid_a2, nsid_a3;
- isc_uint16_t nsid_c1, nsid_c2, nsid_c3;
- isc_uint16_t nsid_state2;
- isc_boolean_t nsid_usepool;
-} dns_nsid_t;
+/* transaction ID */
+typedef struct dns_tid {
+ isc_uint16_t tid_state;
+ isc_uint16_t *tid_vtable;
+ isc_uint16_t *tid_pool;
+ isc_uint16_t tid_a1, tid_a2, tid_a3;
+ isc_uint16_t tid_c1, tid_c2, tid_c3;
+ isc_uint16_t tid_state2;
+ isc_boolean_t tid_usepool;
+} dns_tid_t;
typedef struct dns_qid {
unsigned int magic;
unsigned int qid_nbuckets; /*%< hash table size */
unsigned int qid_increment; /*%< id increment on collision */
isc_mutex_t lock;
- dns_nsid_t nsid;
+ dns_tid_t tid;
dns_displist_t *qid_table; /*%< the table itself */
} dns_qid_t;
@@ -70,6 +72,7 @@ struct dns_dispatchmgr {
isc_mem_t *mctx;
dns_acl_t *blackhole;
dns_portlist_t *portlist;
+ dns_stats_t *stats;
/* Locked by "lock". */
isc_mutex_t lock;
@@ -169,7 +172,7 @@ static void destroy_disp(isc_task_t *task, isc_event_t *event);
static void udp_recv(isc_task_t *, isc_event_t *);
static void tcp_recv(isc_task_t *, isc_event_t *);
static void startrecv(dns_dispatch_t *);
-static dns_messageid_t dns_randomid(dns_nsid_t *);
+static dns_messageid_t dns_randomid(dns_tid_t *);
static isc_uint32_t dns_hash(dns_qid_t *, isc_sockaddr_t *, dns_messageid_t);
static void free_buffer(dns_dispatch_t *disp, void *buf, unsigned int len);
static void *allocate_udp_buffer(dns_dispatch_t *disp);
@@ -193,9 +196,10 @@ static isc_result_t qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets,
unsigned int increment, isc_boolean_t usepool,
dns_qid_t **qidp);
static void qid_destroy(isc_mem_t *mctx, dns_qid_t **qidp);
-static isc_uint16_t nsid_next(dns_nsid_t *nsid);
-static isc_result_t nsid_init(isc_mem_t *mctx, dns_nsid_t *nsid, isc_boolean_t usepool);
-static void nsid_destroy(isc_mem_t *mctx, dns_nsid_t *nsid);
+static isc_uint16_t tid_next(dns_tid_t *tid);
+static isc_result_t tid_init(isc_mem_t *mctx, dns_tid_t *tid,
+ isc_boolean_t usepool);
+static void tid_destroy(isc_mem_t *mctx, dns_tid_t *tid);
#define LVL(x) ISC_LOG_DEBUG(x)
@@ -280,10 +284,10 @@ request_log(dns_dispatch_t *disp, dns_dispentry_t *resp,
* framework for this purpose.
*/
static in_port_t
-get_randomport(dns_nsid_t *nsid) {
+get_randomport(dns_tid_t *tid) {
isc_uint16_t p;
- p = nsid_next(nsid);
+ p = tid_next(tid);
/* XXX: should the range be configurable? */
return ((in_port_t)(1024 + (p % (65535 - 1024))));
@@ -293,10 +297,10 @@ get_randomport(dns_nsid_t *nsid) {
* Return an unpredictable message ID.
*/
static dns_messageid_t
-dns_randomid(dns_nsid_t *nsid) {
+dns_randomid(dns_tid_t *tid) {
isc_uint32_t id;
- id = nsid_next(nsid);
+ id = tid_next(tid);
return ((dns_messageid_t)id);
}
@@ -596,7 +600,7 @@ udp_recv(isc_task_t *task, isc_event_t *ev_in) {
isc_netaddr_fromsockaddr(&netaddr, &ev->address);
if (disp->mgr->blackhole != NULL &&
dns_acl_match(&netaddr, NULL, disp->mgr->blackhole,
- NULL, &match, NULL) == ISC_R_SUCCESS &&
+ NULL, &match, NULL) == ISC_R_SUCCESS &&
match > 0)
{
if (isc_log_wouldlog(dns_lctx, LVL(10))) {
@@ -650,9 +654,11 @@ udp_recv(isc_task_t *task, isc_event_t *ev_in) {
bucket, (resp == NULL ? "not found" : "found"));
if (resp == NULL) {
+ dns_generalstats_increment(mgr->stats,
+ dns_resstatscounter_mismatch);
free_buffer(disp, ev->region.base, ev->region.length);
goto unlock;
- }
+ }
/*
* Now that we have the original dispatch the query was sent
@@ -662,7 +668,7 @@ udp_recv(isc_task_t *task, isc_event_t *ev_in) {
if (disp != resp->disp) {
isc_sockaddr_t a1;
isc_sockaddr_t a2;
-
+
/*
* Check that the socket types and ports match.
*/
@@ -675,11 +681,11 @@ udp_recv(isc_task_t *task, isc_event_t *ev_in) {
/*
* If both dispatches are bound to an address then fail as
- * the addresses can't be equal (enforced by the IP stack).
+ * the addresses can't be equal (enforced by the IP stack).
*
* Note under Linux a packet can be sent out via IPv4 socket
* and the response be received via a IPv6 socket.
- *
+ *
* Requests sent out via IPv6 should always come back in
* via IPv6.
*/
@@ -800,7 +806,7 @@ tcp_recv(isc_task_t *task, isc_event_t *ev_in) {
switch (tcpmsg->result) {
case ISC_R_CANCELED:
break;
-
+
case ISC_R_EOF:
dispatch_log(disp, LVL(90), "shutting down on EOF");
do_cancel(disp);
@@ -1054,6 +1060,9 @@ destroy_mgr(dns_dispatchmgr_t **mgrp) {
if (mgr->portlist != NULL)
dns_portlist_detach(&mgr->portlist);
+ if (mgr->stats != NULL)
+ dns_stats_detach(&mgr->stats);
+
isc_mem_put(mctx, mgr, sizeof(dns_dispatchmgr_t));
isc_mem_detach(&mctx);
}
@@ -1108,6 +1117,7 @@ dns_dispatchmgr_create(isc_mem_t *mctx, isc_entropy_t *entropy,
mgr->blackhole = NULL;
mgr->portlist = NULL;
+ mgr->stats = NULL;
result = isc_mutex_init(&mgr->lock);
if (result != ISC_R_SUCCESS)
@@ -1303,6 +1313,15 @@ dns_dispatchmgr_destroy(dns_dispatchmgr_t **mgrp) {
destroy_mgr(&mgr);
}
+void
+dns_dispatchmgr_setstats(dns_dispatchmgr_t *mgr, dns_stats_t *stats) {
+ REQUIRE(VALID_DISPATCHMGR(mgr));
+ REQUIRE(ISC_LIST_EMPTY(mgr->list));
+ REQUIRE(mgr->stats == NULL);
+
+ dns_stats_attach(stats, &mgr->stats);
+}
+
static isc_boolean_t
blacklisted(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
isc_sockaddr_t *sockaddrp)
@@ -1439,7 +1458,7 @@ qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets,
return (ISC_R_NOMEMORY);
}
- result = nsid_init(mgr->mctx, &qid->nsid, usepool);
+ result = tid_init(mgr->mctx, &qid->tid, usepool);
if (result != ISC_R_SUCCESS) {
isc_mem_put(mgr->mctx, qid->qid_table,
buckets * sizeof(dns_displist_t));
@@ -1449,7 +1468,7 @@ qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets,
result = isc_mutex_init(&qid->lock);
if (result != ISC_R_SUCCESS) {
- nsid_destroy(mgr->mctx, &qid->nsid);
+ tid_destroy(mgr->mctx, &qid->tid);
isc_mem_put(mgr->mctx, qid->qid_table,
buckets * sizeof(dns_displist_t));
isc_mem_put(mgr->mctx, qid, sizeof(*qid));
@@ -1477,7 +1496,7 @@ qid_destroy(isc_mem_t *mctx, dns_qid_t **qidp) {
*qidp = NULL;
qid->magic = 0;
- nsid_destroy(mctx, &qid->nsid);
+ tid_destroy(mctx, &qid->tid);
isc_mem_put(mctx, qid->qid_table,
qid->qid_nbuckets * sizeof(dns_displist_t));
DESTROYLOCK(&qid->lock);
@@ -1795,7 +1814,7 @@ dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
getsocket:
if ((attributes & DNS_DISPATCHATTR_RANDOMPORT) != 0) {
isc_sockaddr_setport(&localaddr_bound,
- get_randomport(&mgr->qid->nsid));
+ get_randomport(&mgr->qid->tid));
if (blacklisted(mgr, NULL, &localaddr_bound)) {
if (++k == 1024)
attributes &= ~DNS_DISPATCHATTR_RANDOMPORT;
@@ -1807,7 +1826,7 @@ dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
attributes &= ~DNS_DISPATCHATTR_RANDOMPORT;
goto getsocket;
}
- } else
+ } else
result = create_socket(sockmgr, localaddr, &sock);
if (result != ISC_R_SUCCESS)
goto deallocate_dispatch;
@@ -1969,7 +1988,7 @@ dns_dispatch_addresponse(dns_dispatch_t *disp, isc_sockaddr_t *dest,
*/
qid = DNS_QID(disp);
LOCK(&qid->lock);
- id = dns_randomid(&qid->nsid);
+ id = dns_randomid(&qid->tid);
bucket = dns_hash(qid, dest, id);
ok = ISC_FALSE;
for (i = 0; i < 64; i++) {
@@ -2294,7 +2313,7 @@ dns_dispatch_importrecv(dns_dispatch_t *disp, isc_event_t *event) {
newsevent->timestamp = sevent->timestamp;
newsevent->pktinfo = sevent->pktinfo;
newsevent->attributes = sevent->attributes;
-
+
isc_task_send(disp->task, ISC_EVENT_PTR(&newsevent));
}
@@ -2381,26 +2400,26 @@ dns_dispatchmgr_dump(dns_dispatchmgr_t *mgr) {
* the pool.
*/
-#define NSID_SHUFFLE_TABLE_SIZE 100 /* Suggested by Knuth */
+#define TID_SHUFFLE_TABLE_SIZE 100 /* Suggested by Knuth */
/*
* Pick one of the next 4096 IDs in the pool.
* There is a tradeoff here between randomness and how often and ID is reused.
*/
-#define NSID_LOOKAHEAD 4096 /* Must be a power of 2 */
-#define NSID_SHUFFLE_ONLY 1 /* algorithm 1 */
-#define NSID_USE_POOL 2 /* algorithm 2 */
-#define NSID_HASHSHIFT 3
-#define NSID_HASHROTATE(v) \
- (((v) << NSID_HASHSHIFT) | ((v) >> ((sizeof(v) * 8) - NSID_HASHSHIFT)))
+#define TID_LOOKAHEAD 4096 /* Must be a power of 2 */
+#define TID_SHUFFLE_ONLY 1 /* algorithm 1 */
+#define TID_USE_POOL 2 /* algorithm 2 */
+#define TID_HASHSHIFT 3
+#define TID_HASHROTATE(v) \
+ (((v) << TID_HASHSHIFT) | ((v) >> ((sizeof(v) * 8) - TID_HASHSHIFT)))
-static isc_uint32_t nsid_hash_state;
+static isc_uint32_t tid_hash_state;
/*
* Keep a running hash of various bits of data that we'll use to
* stir the ID pool or perturb the ID generator
*/
static void
-nsid_hash(void *data, size_t len) {
+tid_hash(void *data, size_t len) {
unsigned char *p = data;
/*
* Hash function similar to the one we use for hashing names.
@@ -2412,12 +2431,12 @@ nsid_hash(void *data, size_t len) {
* fast.
*/
/*
- * We don't care about locking access to nsid_hash_state.
+ * We don't care about locking access to tid_hash_state.
* In fact races make the result even more non deteministic.
*/
while (len-- > 0U) {
- nsid_hash_state = NSID_HASHROTATE(nsid_hash_state);
- nsid_hash_state += *p++;
+ tid_hash_state = TID_HASHROTATE(tid_hash_state);
+ tid_hash_state += *p++;
}
}
@@ -2426,7 +2445,7 @@ nsid_hash(void *data, size_t len) {
* in order of increasing serial correlation bounds (so trim from
* the end).
*/
-static const isc_uint16_t nsid_multiplier_table[] = {
+static const isc_uint16_t tid_multiplier_table[] = {
17565, 25013, 11733, 19877, 23989, 23997, 24997, 25421,
26781, 27413, 35901, 35917, 35973, 36229, 38317, 38437,
39941, 40493, 41853, 46317, 50581, 51429, 53453, 53805,
@@ -2562,159 +2581,168 @@ static const isc_uint16_t nsid_multiplier_table[] = {
10853, 1453, 18069, 21693, 30573, 36261, 37421, 42533
};
-#define NSID_MULT_TABLE_SIZE \
- ((sizeof nsid_multiplier_table)/(sizeof nsid_multiplier_table[0]))
-#define NSID_RANGE_MASK (NSID_LOOKAHEAD - 1)
-#define NSID_POOL_MASK 0xFFFF /* used to wrap the pool index */
-#define NSID_SHUFFLE_ONLY 1
-#define NSID_USE_POOL 2
+#define TID_MULT_TABLE_SIZE \
+ ((sizeof tid_multiplier_table) / \
+ (sizeof tid_multiplier_table[0]))
+#define TID_RANGE_MASK (TID_LOOKAHEAD - 1)
+#define TID_POOL_MASK 0xFFFF /* used to wrap the pool index */
+#define TID_SHUFFLE_ONLY 1
+#define TID_USE_POOL 2
static isc_uint16_t
-nsid_next(dns_nsid_t *nsid) {
- isc_uint16_t id, compressed_hash;
+tid_next(dns_tid_t *tid) {
+ isc_uint16_t id, compressed_hash;
isc_uint16_t j;
- compressed_hash = ((nsid_hash_state >> 16) ^
- (nsid_hash_state)) & 0xFFFF;
-
- if (nsid->nsid_usepool) {
- isc_uint16_t pick;
-
- pick = compressed_hash & NSID_RANGE_MASK;
- pick = (nsid->nsid_state + pick) & NSID_POOL_MASK;
- id = nsid->nsid_pool[pick];
- if (pick != 0) {
- /* Swap two IDs to stir the pool */
- nsid->nsid_pool[pick] =
- nsid->nsid_pool[nsid->nsid_state];
- nsid->nsid_pool[nsid->nsid_state] = id;
- }
-
- /* increment the base pointer into the pool */
- if (nsid->nsid_state == 65535)
- nsid->nsid_state = 0;
- else
- nsid->nsid_state++;
+ compressed_hash = ((tid_hash_state >> 16) ^
+ (tid_hash_state)) & 0xFFFF;
+
+ if (tid->tid_usepool) {
+ isc_uint16_t pick;
+
+ pick = compressed_hash & TID_RANGE_MASK;
+ pick = (tid->tid_state + pick) & TID_POOL_MASK;
+ id = tid->tid_pool[pick];
+ if (pick != 0) {
+ /* Swap two IDs to stir the pool */
+ tid->tid_pool[pick] =
+ tid->tid_pool[tid->tid_state];
+ tid->tid_pool[tid->tid_state] = id;
+ }
+
+ /* increment the base pointer into the pool */
+ if (tid->tid_state == 65535)
+ tid->tid_state = 0;
+ else
+ tid->tid_state++;
} else {
/*
* This is the original Algorithm B
- * j = ((u_long) NSID_SHUFFLE_TABLE_SIZE * nsid_state2) >> 16;
+ * j = ((u_long)
+ * QUERID_SHUFFLE_TABLE_SIZE * tid_state2) >> 16;
*
* We'll perturb it with some random stuff ...
*/
- j = ((isc_uint32_t) NSID_SHUFFLE_TABLE_SIZE *
- (nsid->nsid_state2 ^ compressed_hash)) >> 16;
- nsid->nsid_state2 = id = nsid->nsid_vtable[j];
- nsid->nsid_state = (((isc_uint32_t) nsid->nsid_a1 * nsid->nsid_state) +
- nsid->nsid_c1) & 0xFFFF;
- nsid->nsid_vtable[j] = nsid->nsid_state;
+ j = ((isc_uint32_t) TID_SHUFFLE_TABLE_SIZE *
+ (tid->tid_state2 ^ compressed_hash)) >> 16;
+ tid->tid_state2 = id = tid->tid_vtable[j];
+ tid->tid_state = (((isc_uint32_t) tid->tid_a1 *
+ tid->tid_state) +
+ tid->tid_c1) & 0xFFFF;
+ tid->tid_vtable[j] = tid->tid_state;
}
- /* Now lets obfuscate ... */
- id = (((isc_uint32_t) nsid->nsid_a2 * id) + nsid->nsid_c2) & 0xFFFF;
- id = (((isc_uint32_t) nsid->nsid_a3 * id) + nsid->nsid_c3) & 0xFFFF;
+ /* Now lets obfuscate ... */
+ id = (((isc_uint32_t) tid->tid_a2 * id) +
+ tid->tid_c2) & 0xFFFF;
+ id = (((isc_uint32_t) tid->tid_a3 * id) +
+ tid->tid_c3) & 0xFFFF;
- return (id);
+ return (id);
}
static isc_result_t
-nsid_init(isc_mem_t *mctx, dns_nsid_t *nsid, isc_boolean_t usepool) {
- isc_time_t now;
- pid_t mypid;
- isc_uint16_t a1ndx, a2ndx, a3ndx, c1ndx, c2ndx, c3ndx;
- int i;
+tid_init(isc_mem_t *mctx, dns_tid_t *tid, isc_boolean_t usepool) {
+ isc_time_t now;
+ pid_t mypid;
+ isc_uint16_t a1ndx, a2ndx, a3ndx, c1ndx, c2ndx, c3ndx;
+ int i;
isc_time_now(&now);
- mypid = getpid();
-
- /* Initialize the state */
- memset(nsid, 0, sizeof(*nsid));
- nsid_hash(&now, sizeof now);
- nsid_hash(&mypid, sizeof mypid);
-
- /*
- * Select our random number generators and initial seed.
- * We could really use more random bits at this point,
- * but we'll try to make a silk purse out of a sows ear ...
- */
- /* generator 1 */
- a1ndx = ((isc_uint32_t) NSID_MULT_TABLE_SIZE *
- (nsid_hash_state & 0xFFFF)) >> 16;
- nsid->nsid_a1 = nsid_multiplier_table[a1ndx];
- c1ndx = (nsid_hash_state >> 9) & 0x7FFF;
- nsid->nsid_c1 = 2 * c1ndx + 1;
-
- /* generator 2, distinct from 1 */
- a2ndx = ((isc_uint32_t) (NSID_MULT_TABLE_SIZE - 1) *
- ((nsid_hash_state >> 10) & 0xFFFF)) >> 16;
- if (a2ndx >= a1ndx)
- a2ndx++;
- nsid->nsid_a2 = nsid_multiplier_table[a2ndx];
- c2ndx = nsid_hash_state % 32767;
- if (c2ndx >= c1ndx)
- c2ndx++;
- nsid->nsid_c2 = 2*c2ndx + 1;
-
- /* generator 3, distinct from 1 and 2 */
- a3ndx = ((isc_uint32_t) (NSID_MULT_TABLE_SIZE - 2) *
- ((nsid_hash_state >> 20) & 0xFFFF)) >> 16;
- if (a3ndx >= a1ndx || a3ndx >= a2ndx)
- a3ndx++;
- if (a3ndx >= a1ndx && a3ndx >= a2ndx)
- a3ndx++;
- nsid->nsid_a3 = nsid_multiplier_table[a3ndx];
- c3ndx = nsid_hash_state % 32766;
- if (c3ndx >= c1ndx || c3ndx >= c2ndx)
- c3ndx++;
- if (c3ndx >= c1ndx && c3ndx >= c2ndx)
- c3ndx++;
- nsid->nsid_c3 = 2*c3ndx + 1;
-
- nsid->nsid_state =
- ((nsid_hash_state >> 16) ^ (nsid_hash_state)) & 0xFFFF;
-
- nsid->nsid_usepool = usepool;
- if (nsid->nsid_usepool) {
- nsid->nsid_pool = isc_mem_get(mctx, 0x10000 * sizeof(isc_uint16_t));
- if (nsid->nsid_pool == NULL)
+ mypid = getpid();
+
+ /* Initialize the state */
+ memset(tid, 0, sizeof(*tid));
+ tid_hash(&now, sizeof now);
+ tid_hash(&mypid, sizeof mypid);
+
+ /*
+ * Select our random number generators and initial seed.
+ * We could really use more random bits at this point,
+ * but we'll try to make a silk purse out of a sows ear ...
+ */
+ /* generator 1 */
+ a1ndx = ((isc_uint32_t) TID_MULT_TABLE_SIZE *
+ (tid_hash_state & 0xFFFF)) >> 16;
+ tid->tid_a1 = tid_multiplier_table[a1ndx];
+ c1ndx = (tid_hash_state >> 9) & 0x7FFF;
+ tid->tid_c1 = 2 * c1ndx + 1;
+
+ /* generator 2, distinct from 1 */
+ a2ndx = ((isc_uint32_t) (TID_MULT_TABLE_SIZE - 1) *
+ ((tid_hash_state >> 10) & 0xFFFF)) >> 16;
+ if (a2ndx >= a1ndx)
+ a2ndx++;
+ tid->tid_a2 = tid_multiplier_table[a2ndx];
+ c2ndx = tid_hash_state % 32767;
+ if (c2ndx >= c1ndx)
+ c2ndx++;
+ tid->tid_c2 = 2*c2ndx + 1;
+
+ /* generator 3, distinct from 1 and 2 */
+ a3ndx = ((isc_uint32_t) (TID_MULT_TABLE_SIZE - 2) *
+ ((tid_hash_state >> 20) & 0xFFFF)) >> 16;
+ if (a3ndx >= a1ndx || a3ndx >= a2ndx)
+ a3ndx++;
+ if (a3ndx >= a1ndx && a3ndx >= a2ndx)
+ a3ndx++;
+ tid->tid_a3 = tid_multiplier_table[a3ndx];
+ c3ndx = tid_hash_state % 32766;
+ if (c3ndx >= c1ndx || c3ndx >= c2ndx)
+ c3ndx++;
+ if (c3ndx >= c1ndx && c3ndx >= c2ndx)
+ c3ndx++;
+ tid->tid_c3 = 2*c3ndx + 1;
+
+ tid->tid_state =
+ ((tid_hash_state >> 16) ^ (tid_hash_state)) & 0xFFFF;
+
+ tid->tid_usepool = usepool;
+ if (tid->tid_usepool) {
+ tid->tid_pool = isc_mem_get(mctx,
+ 0x10000 * sizeof(isc_uint16_t));
+ if (tid->tid_pool == NULL)
return (ISC_R_NOMEMORY);
- for (i = 0; ; i++) {
- nsid->nsid_pool[i] = nsid->nsid_state;
- nsid->nsid_state =
- (((u_long) nsid->nsid_a1 * nsid->nsid_state) +
- nsid->nsid_c1) & 0xFFFF;
- if (i == 0xFFFF)
- break;
- }
+ for (i = 0; ; i++) {
+ tid->tid_pool[i] = tid->tid_state;
+ tid->tid_state =
+ (((u_long) tid->tid_a1 *
+ tid->tid_state) +
+ tid->tid_c1) & 0xFFFF;
+ if (i == 0xFFFF)
+ break;
+ }
} else {
- nsid->nsid_vtable = isc_mem_get(mctx, NSID_SHUFFLE_TABLE_SIZE *
+ tid->tid_vtable = isc_mem_get(mctx, TID_SHUFFLE_TABLE_SIZE *
(sizeof(isc_uint16_t)) );
- if (nsid->nsid_vtable == NULL)
+ if (tid->tid_vtable == NULL)
return (ISC_R_NOMEMORY);
- for (i = 0; i < NSID_SHUFFLE_TABLE_SIZE; i++) {
- nsid->nsid_vtable[i] = nsid->nsid_state;
- nsid->nsid_state =
- (((isc_uint32_t) nsid->nsid_a1 * nsid->nsid_state) +
- nsid->nsid_c1) & 0xFFFF;
+ for (i = 0; i < TID_SHUFFLE_TABLE_SIZE; i++) {
+ tid->tid_vtable[i] = tid->tid_state;
+ tid->tid_state =
+ (((isc_uint32_t) tid->tid_a1 *
+ tid->tid_state) +
+ tid->tid_c1) & 0xFFFF;
}
- nsid->nsid_state2 = nsid->nsid_state;
- }
+ tid->tid_state2 = tid->tid_state;
+ }
return (ISC_R_SUCCESS);
}
static void
-nsid_destroy(isc_mem_t *mctx, dns_nsid_t *nsid) {
- if (nsid->nsid_usepool)
- isc_mem_put(mctx, nsid->nsid_pool,
+tid_destroy(isc_mem_t *mctx, dns_tid_t *tid) {
+ if (tid->tid_usepool)
+ isc_mem_put(mctx, tid->tid_pool,
0x10000 * sizeof(isc_uint16_t));
else
- isc_mem_put(mctx, nsid->nsid_vtable,
- NSID_SHUFFLE_TABLE_SIZE * (sizeof(isc_uint16_t)) );
- memset(nsid, 0, sizeof(*nsid));
+ isc_mem_put(mctx, tid->tid_vtable,
+ TID_SHUFFLE_TABLE_SIZE *
+ (sizeof(isc_uint16_t)) );
+ memset(tid, 0, sizeof(*tid));
}
void
dns_dispatch_hash(void *data, size_t len) {
- nsid_hash(data, len);
+ tid_hash(data, len);
}
diff --git a/lib/dns/dst_api.c b/lib/dns/dst_api.c
index 0dfadb48..f36ad205 100644
--- a/lib/dns/dst_api.c
+++ b/lib/dns/dst_api.c
@@ -1,5 +1,5 @@
/*
- * Portions Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Portions Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Portions Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -31,7 +31,7 @@
/*
* Principal Author: Brian Wellington
- * $Id: dst_api.c,v 1.11 2007/08/28 07:20:42 tbox Exp $
+ * $Id: dst_api.c,v 1.11.92.2 2008/03/31 23:46:42 tbox Exp $
*/
/*! \file */
@@ -162,6 +162,7 @@ dst_lib_init(isc_mem_t *mctx, isc_entropy_t *ectx, unsigned int eflags) {
NULL, &dst__memory_pool, 0);
if (result != ISC_R_SUCCESS)
return (result);
+ isc_mem_setname(dst__memory_pool, "dst", NULL);
isc_mem_setdestroycheck(dst__memory_pool, ISC_FALSE);
#else
isc_mem_attach(mctx, &dst__memory_pool);
diff --git a/lib/dns/gssapi_link.c b/lib/dns/gssapi_link.c
index b37b39e9..349826ff 100644
--- a/lib/dns/gssapi_link.c
+++ b/lib/dns/gssapi_link.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -16,7 +16,7 @@
*/
/*
- * $Id: gssapi_link.c,v 1.7 2007/06/19 23:47:16 tbox Exp $
+ * $Id: gssapi_link.c,v 1.7.128.3 2008/04/03 06:08:26 tbox Exp $
*/
#include <config.h>
@@ -174,7 +174,8 @@ gssapi_sign(dst_context_t *dctx, isc_buffer_t *sig) {
* allocated space.
*/
isc_buffer_putmem(sig, gsig.value, gsig.length);
- gss_release_buffer(&minor, &gsig);
+ if (gsig.length != 0)
+ gss_release_buffer(&minor, &gsig);
return (ISC_R_SUCCESS);
}
@@ -291,6 +292,7 @@ static dst_func_t gssapi_functions = {
NULL, /*%< tofile */
NULL, /*%< parse */
NULL, /*%< cleanup */
+ NULL
};
isc_result_t
diff --git a/lib/dns/gssapictx.c b/lib/dns/gssapictx.c
index 195a2b63..614d88f7 100644
--- a/lib/dns/gssapictx.c
+++ b/lib/dns/gssapictx.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: gssapictx.c,v 1.8.128.2 2008/01/22 23:27:35 tbox Exp $ */
+/* $Id: gssapictx.c,v 1.8.128.4 2008/04/03 06:08:26 tbox Exp $ */
#include <config.h>
@@ -175,11 +175,13 @@ log_cred(const gss_cred_id_t cred) {
}
if (gret == GSS_S_COMPLETE) {
- gret = gss_release_buffer(&minor, &gbuffer);
- if (gret != GSS_S_COMPLETE)
- gss_log(3, "failed gss_release_buffer: %s",
- gss_error_tostring(gret, minor, buf,
- sizeof(buf)));
+ if (gbuffer.length != 0) {
+ gret = gss_release_buffer(&minor, &gbuffer);
+ if (gret != GSS_S_COMPLETE)
+ gss_log(3, "failed gss_release_buffer: %s",
+ gss_error_tostring(gret, minor, buf,
+ sizeof(buf)));
+ }
}
gret = gss_release_name(&minor, &gname);
@@ -459,7 +461,7 @@ dst_gssapi_initctx(dns_name_t *name, isc_buffer_t *intoken,
isc_buffer_t namebuf;
gss_name_t gname;
OM_uint32 gret, minor, ret_flags, flags;
- gss_buffer_desc gintoken, *gintokenp, gouttoken;
+ gss_buffer_desc gintoken, *gintokenp, gouttoken = GSS_C_EMPTY_BUFFER;
isc_result_t result;
gss_buffer_desc gnamebuf;
unsigned char array[DNS_NAME_MAXTEXT + 1];
@@ -507,11 +509,15 @@ dst_gssapi_initctx(dns_name_t *name, isc_buffer_t *intoken,
* MUTUAL and INTEG flags, fail if either not set.
*/
- GBUFFER_TO_REGION(gouttoken, r);
- RETERR(isc_buffer_copyregion(outtoken, &r));
-
+ /*
+ * RFC 2744 states the a valid output token has a non-zero length.
+ */
+ if (gouttoken.length != 0) {
+ GBUFFER_TO_REGION(gouttoken, r);
+ RETERR(isc_buffer_copyregion(outtoken, &r));
+ (void)gss_release_buffer(&minor, &gouttoken);
+ }
(void)gss_release_name(&minor, &gname);
- (void)gss_release_buffer(&minor, &gouttoken);
if (gret == GSS_S_COMPLETE)
result = ISC_R_SUCCESS;
@@ -539,7 +545,8 @@ dst_gssapi_acceptctx(gss_cred_id_t cred,
#ifdef GSSAPI
isc_region_t r;
isc_buffer_t namebuf;
- gss_buffer_desc gnamebuf, gintoken, gouttoken;
+ gss_buffer_desc gnamebuf = GSS_C_EMPTY_BUFFER, gintoken,
+ gouttoken = GSS_C_EMPTY_BUFFER;
OM_uint32 gret, minor;
gss_ctx_id_t context = GSS_C_NO_CONTEXT;
gss_name_t gname = NULL;
@@ -593,6 +600,7 @@ dst_gssapi_acceptctx(gss_cred_id_t cred,
RETERR(isc_buffer_allocate(mctx, outtoken, gouttoken.length));
GBUFFER_TO_REGION(gouttoken, r);
RETERR(isc_buffer_copyregion(*outtoken, &r));
+ (void)gss_release_buffer(&minor, &gouttoken);
}
if (gret == GSS_S_COMPLETE) {
@@ -624,11 +632,13 @@ dst_gssapi_acceptctx(gss_cred_id_t cred,
RETERR(dns_name_fromtext(principal, &namebuf, dns_rootname,
ISC_FALSE, NULL));
- gret = gss_release_buffer(&minor, &gnamebuf);
- if (gret != GSS_S_COMPLETE)
- gss_log(3, "failed gss_release_buffer: %s",
- gss_error_tostring(gret, minor, buf,
- sizeof(buf)));
+ if (gnamebuf.length != 0) {
+ gret = gss_release_buffer(&minor, &gnamebuf);
+ if (gret != GSS_S_COMPLETE)
+ gss_log(3, "failed gss_release_buffer: %s",
+ gss_error_tostring(gret, minor, buf,
+ sizeof(buf)));
+ }
}
*ctxout = context;
@@ -685,7 +695,8 @@ char *
gss_error_tostring(isc_uint32_t major, isc_uint32_t minor,
char *buf, size_t buflen) {
#ifdef GSSAPI
- gss_buffer_desc msg_minor, msg_major;
+ gss_buffer_desc msg_minor = GSS_C_EMPTY_BUFFER,
+ msg_major = GSS_C_EMPTY_BUFFER;
OM_uint32 msg_ctx, minor_stat;
/* Handle major status */
@@ -701,8 +712,10 @@ gss_error_tostring(isc_uint32_t major, isc_uint32_t minor,
snprintf(buf, buflen, "GSSAPI error: Major = %s, Minor = %s.",
(char *)msg_major.value, (char *)msg_minor.value);
- (void)gss_release_buffer(&minor_stat, &msg_major);
- (void)gss_release_buffer(&minor_stat, &msg_minor);
+ if (msg_major.length != 0)
+ (void)gss_release_buffer(&minor_stat, &msg_major);
+ if (msg_minor.length != 0)
+ (void)gss_release_buffer(&minor_stat, &msg_minor);
return(buf);
#else
snprintf(buf, buflen, "GSSAPI error: Major = %u, Minor = %u.",
diff --git a/lib/dns/include/dns/adb.h b/lib/dns/include/dns/adb.h
index 0e8fc997..eaf2e378 100644
--- a/lib/dns/include/dns/adb.h
+++ b/lib/dns/include/dns/adb.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: adb.h,v 1.83 2007/06/19 23:47:16 tbox Exp $ */
+/* $Id: adb.h,v 1.83.128.2 2008/04/03 06:20:34 tbox Exp $ */
#ifndef DNS_ADB_H
#define DNS_ADB_H 1
@@ -99,7 +99,7 @@ ISC_LANG_BEGINDECLS
typedef struct dns_adbname dns_adbname_t;
-/*!
+/*!
*\brief
* Represents a lookup for a single name.
*
@@ -220,7 +220,7 @@ struct dns_adbaddrinfo {
ISC_LINK(dns_adbaddrinfo_t) publink;
};
-/*!<
+/*!<
* The event sent to the caller task is just a plain old isc_event_t. It
* contains no data other than a simple status, passed in the "type" field
* to indicate that another address resolved, or all partially resolved
@@ -520,7 +520,7 @@ void
dns_adb_adjustsrtt(dns_adb_t *adb, dns_adbaddrinfo_t *addr,
unsigned int rtt, unsigned int factor);
/*%<
- * Mix the round trip time into the existing smoothed rtt.
+ * Mix the round trip time into the existing smoothed rtt.
* The formula used
* (where srtt is the existing rtt value, and rtt and factor are arguments to
@@ -623,13 +623,12 @@ void
dns_adb_flushname(dns_adb_t *adb, dns_name_t *name);
/*%<
* Flush 'name' from the adb cache.
- *
+ *
* Requires:
*\li 'adb' is valid.
*\li 'name' is valid.
*/
-
ISC_LANG_ENDDECLS
#endif /* DNS_ADB_H */
diff --git a/lib/dns/include/dns/db.h b/lib/dns/include/dns/db.h
index fb87cf66..8ea81fd5 100644
--- a/lib/dns/include/dns/db.h
+++ b/lib/dns/include/dns/db.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: db.h,v 1.89 2007/06/18 23:47:42 tbox Exp $ */
+/* $Id: db.h,v 1.89.128.2 2008/04/03 06:20:34 tbox Exp $ */
#ifndef DNS_DB_H
#define DNS_DB_H 1
@@ -147,7 +147,8 @@ typedef struct dns_dbmethods {
void (*settask)(dns_db_t *db, isc_task_t *);
isc_result_t (*getoriginnode)(dns_db_t *db, dns_dbnode_t **nodep);
void (*transfernode)(dns_db_t *db, dns_dbnode_t **sourcep,
- dns_dbnode_t **targetp);
+ dns_dbnode_t **targetp);
+ dns_stats_t *(*getrrsetstats)(dns_db_t *db);
} dns_dbmethods_t;
typedef isc_result_t
@@ -155,7 +156,7 @@ typedef isc_result_t
dns_dbtype_t type, dns_rdataclass_t rdclass,
unsigned int argc, char *argv[], void *driverarg,
dns_db_t **dbp);
-
+
#define DNS_DB_MAGIC ISC_MAGIC('D','N','S','D')
#define DNS_DB_VALID(db) ISC_MAGIC_VALID(db, DNS_DB_MAGIC)
@@ -788,7 +789,7 @@ dns_db_find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
* the negative caching proof.
*
* \li #DNS_R_EMPTYNAME The name exists but there is
- * no data at the name.
+ * no data at the name.
*
* \li #DNS_R_COVERINGNSEC The returned data is a NSEC
* that potentially covers 'name'.
@@ -886,8 +887,8 @@ dns_db_detachnode(dns_db_t *db, dns_dbnode_t **nodep);
*/
void
-dns_db_transfernode(dns_db_t *db, dns_dbnode_t **sourcep,
- dns_dbnode_t **targetp);
+dns_db_transfernode(dns_db_t *db, dns_dbnode_t **sourcep,
+ dns_dbnode_t **targetp);
/*%<
* Transfer a node between pointer.
*
@@ -1317,6 +1318,21 @@ dns_db_getoriginnode(dns_db_t *db, dns_dbnode_t **nodep);
* \li #ISC_R_NOTFOUND - the DB implementation does not support this feature.
*/
+dns_stats_t *
+dns_db_getrrsetstats(dns_db_t *db);
+/*%<
+ * Get statistics information counting RRsets stored in the DB, when available.
+ * The statistics may not be available depending on the DB implementation.
+ *
+ * Requires:
+ *
+ * \li 'db' is a valid database (zone or cache).
+ *
+ * Returns:
+ * \li when available, a pointer to a statistics object created by
+ * dns_rdatasetstats_create(); otherwise NULL.
+ */
+
ISC_LANG_ENDDECLS
#endif /* DNS_DB_H */
diff --git a/lib/dns/include/dns/dispatch.h b/lib/dns/include/dns/dispatch.h
index 71922d77..9ed8a464 100644
--- a/lib/dns/include/dns/dispatch.h
+++ b/lib/dns/include/dns/dispatch.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dispatch.h,v 1.56 2007/06/26 02:52:15 marka Exp $ */
+/* $Id: dispatch.h,v 1.56.128.2 2008/04/03 06:20:34 tbox Exp $ */
#ifndef DNS_DISPATCH_H
#define DNS_DISPATCH_H 1
@@ -187,7 +187,7 @@ dns_dispatchmgr_getblackhole(dns_dispatchmgr_t *mgr);
void
dns_dispatchmgr_setblackportlist(dns_dispatchmgr_t *mgr,
- dns_portlist_t *portlist);
+ dns_portlist_t *portlist);
/*%<
* Sets a list of UDP ports that won't be used when creating a udp
* dispatch with a wildcard port.
@@ -206,7 +206,20 @@ dns_dispatchmgr_getblackportlist(dns_dispatchmgr_t *mgr);
*\li mgr is a valid dispatchmgr
*/
-
+void
+dns_dispatchmgr_setstats(dns_dispatchmgr_t *mgr, dns_stats_t *stats);
+/*%<
+ * Sets statistics counter for the dispatchmgr. This function is expected to
+ * be called only on zone creation (when necessary).
+ * Once installed, it cannot be removed or replaced. Also, there is no
+ * interface to get the installed stats from the zone; the caller must keep the
+ * stats to reference (e.g. dump) it later.
+ *
+ * Requires:
+ *\li mgr is a valid dispatchmgr with no managed dispatch.
+ *\li stats is a valid statistics supporting resolver statistics counters
+ * (see dns/stats.h).
+ */
isc_result_t
dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
@@ -367,7 +380,7 @@ dns_dispatch_removeresponse(dns_dispentry_t **resp,
*\li "resp" != NULL and "*resp" contain a value previously allocated
* by dns_dispatch_addresponse();
*
- *\li May only be called from within the task given as the 'task'
+ *\li May only be called from within the task given as the 'task'
* argument to dns_dispatch_addresponse() when allocating '*resp'.
*/
@@ -384,7 +397,7 @@ dns_dispatch_getsocket(dns_dispatch_t *disp);
*\li The socket the dispatcher is using.
*/
-isc_result_t
+isc_result_t
dns_dispatch_getlocaladdress(dns_dispatch_t *disp, isc_sockaddr_t *addrp);
/*%<
* Return the local address for this dispatch.
@@ -395,7 +408,7 @@ dns_dispatch_getlocaladdress(dns_dispatch_t *disp, isc_sockaddr_t *addrp);
*\li addrp to be non null.
*
* Returns:
- *\li ISC_R_SUCCESS
+ *\li ISC_R_SUCCESS
*\li ISC_R_NOTIMPLEMENTED
*/
@@ -421,7 +434,7 @@ dns_dispatch_changeattributes(dns_dispatch_t *disp,
* new = (old & ~mask) | (attributes & mask)
* \endcode
*
- * This function has a side effect when #DNS_DISPATCHATTR_NOLISTEN changes.
+ * This function has a side effect when #DNS_DISPATCHATTR_NOLISTEN changes.
* When the flag becomes off, the dispatch will start receiving on the
* corresponding socket. When the flag becomes on, receive events on the
* corresponding socket will be canceled.
diff --git a/lib/dns/include/dns/message.h b/lib/dns/include/dns/message.h
index 2d487fa1..99716a35 100644
--- a/lib/dns/include/dns/message.h
+++ b/lib/dns/include/dns/message.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: message.h,v 1.123 2007/06/19 23:47:17 tbox Exp $ */
+/* $Id: message.h,v 1.123.128.2 2008/04/03 06:08:27 tbox Exp $ */
#ifndef DNS_MESSAGE_H
#define DNS_MESSAGE_H 1
@@ -101,8 +101,12 @@
#define DNS_MESSAGEFLAG_AD 0x0020U
#define DNS_MESSAGEFLAG_CD 0x0010U
+/*%< EDNS0 extended message flags */
#define DNS_MESSAGEEXTFLAG_DO 0x8000U
+/*%< EDNS0 extended OPT codes */
+#define DNS_OPT_NSID 0x0003 /*%< NSID opt code */
+
#define DNS_MESSAGE_REPLYPRESERVE (DNS_MESSAGEFLAG_RD|DNS_MESSAGEFLAG_CD)
#define DNS_MESSAGEEXTFLAG_REPLYPRESERVE (DNS_MESSAGEEXTFLAG_DO)
@@ -771,7 +775,7 @@ dns_message_addname(dns_message_t *msg, dns_name_t *name,
void
dns_message_removename(dns_message_t *msg, dns_name_t *name,
- dns_section_t section);
+ dns_section_t section);
/*%<
* Remove a existing name from a given section.
*
@@ -1031,7 +1035,7 @@ dns_message_setopt(dns_message_t *msg, dns_rdataset_t *opt);
*\li The OPT record has either been freed or ownership of it has
* been transferred to the message.
*
- *\li If ISC_R_SUCCESS was returned, the OPT record will be rendered
+ *\li If ISC_R_SUCCESS was returned, the OPT record will be rendered
* when dns_message_renderend() is called.
*
* Returns:
@@ -1315,7 +1319,7 @@ dns_message_setsortorder(dns_message_t *msg, dns_rdatasetorderfunc_t order,
*\li order_arg is NULL if and only if order is NULL.
*/
-void
+void
dns_message_settimeadjust(dns_message_t *msg, int timeadjust);
/*%<
* Adjust the time used to sign/verify a message by timeadjust.
@@ -1325,7 +1329,7 @@ dns_message_settimeadjust(dns_message_t *msg, int timeadjust);
*\li msg be a valid message.
*/
-int
+int
dns_message_gettimeadjust(dns_message_t *msg);
/*%<
* Return the current time adjustment.
diff --git a/lib/dns/include/dns/peer.h b/lib/dns/include/dns/peer.h
index a28c55e5..0975a1af 100644
--- a/lib/dns/include/dns/peer.h
+++ b/lib/dns/include/dns/peer.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: peer.h,v 1.31 2007/06/19 23:47:17 tbox Exp $ */
+/* $Id: peer.h,v 1.31.128.2 2008/04/03 06:08:27 tbox Exp $ */
#ifndef DNS_PEER_H
#define DNS_PEER_H 1
@@ -73,10 +73,11 @@ struct dns_peer {
isc_boolean_t provide_ixfr;
isc_boolean_t request_ixfr;
isc_boolean_t support_edns;
+ isc_boolean_t request_nsid;
dns_name_t *key;
isc_sockaddr_t *transfer_source;
- isc_sockaddr_t *notify_source;
- isc_sockaddr_t *query_source;
+ isc_sockaddr_t *notify_source;
+ isc_sockaddr_t *query_source;
isc_uint16_t udpsize; /* recieve size */
isc_uint16_t maxudp; /* transmit size */
@@ -150,6 +151,12 @@ isc_result_t
dns_peer_getprovideixfr(dns_peer_t *peer, isc_boolean_t *retval);
isc_result_t
+dns_peer_setrequestnsid(dns_peer_t *peer, isc_boolean_t newval);
+
+isc_result_t
+dns_peer_getrequestnsid(dns_peer_t *peer, isc_boolean_t *retval);
+
+isc_result_t
dns_peer_setsupportedns(dns_peer_t *peer, isc_boolean_t newval);
isc_result_t
diff --git a/lib/dns/include/dns/rdatalist.h b/lib/dns/include/dns/rdatalist.h
index e2415488..b4ff817d 100644
--- a/lib/dns/include/dns/rdatalist.h
+++ b/lib/dns/include/dns/rdatalist.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rdatalist.h,v 1.20 2007/06/19 23:47:17 tbox Exp $ */
+/* $Id: rdatalist.h,v 1.20.128.2 2008/04/03 06:08:27 tbox Exp $ */
#ifndef DNS_RDATALIST_H
#define DNS_RDATALIST_H 1
@@ -98,6 +98,27 @@ dns_rdatalist_tordataset(dns_rdatalist_t *rdatalist,
*\li #ISC_R_SUCCESS
*/
+isc_result_t
+dns_rdatalist_fromrdataset(dns_rdataset_t *rdataset,
+ dns_rdatalist_t **rdatalist);
+/*%<
+ * Point 'rdatalist' to the rdatalist in 'rdataset'.
+ *
+ * Requires:
+ *
+ *\li 'rdatalist' is a pointer to a NULL dns_rdatalist_t pointer.
+ *
+ *\li 'rdataset' is a valid rdataset associated with an rdatalist.
+ *
+ * Ensures,
+ * on success,
+ *
+ *\li 'rdatalist' is pointed to the rdatalist in rdataset.
+ *
+ * Returns:
+ *\li #ISC_R_SUCCESS
+ */
+
ISC_LANG_ENDDECLS
#endif /* DNS_RDATALIST_H */
diff --git a/lib/dns/include/dns/resolver.h b/lib/dns/include/dns/resolver.h
index 5c190aa9..8c5c7afd 100644
--- a/lib/dns/include/dns/resolver.h
+++ b/lib/dns/include/dns/resolver.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: resolver.h,v 1.56 2007/06/18 23:47:42 tbox Exp $ */
+/* $Id: resolver.h,v 1.56.128.2 2008/04/03 06:08:27 tbox Exp $ */
#ifndef DNS_RESOLVER_H
#define DNS_RESOLVER_H 1
@@ -93,7 +93,8 @@ typedef struct dns_fetchevent {
#define DNS_FETCHOPT_FORWARDONLY 0x10 /*%< Only use forwarders. */
#define DNS_FETCHOPT_NOVALIDATE 0x20 /*%< Disable validation. */
#define DNS_FETCHOPT_EDNS512 0x40 /*%< Advertise a 512 byte
- UDP buffer. */
+ UDP buffer. */
+#define DNS_FETCHOPT_WANTNSID 0x80 /*%< Request NSID */
#define DNS_FETCHOPT_EDNSVERSIONSET 0x00800000
#define DNS_FETCHOPT_EDNSVERSIONMASK 0xff000000
@@ -470,7 +471,7 @@ dns_resolver_getclientsperquery(dns_resolver_t *resolver, isc_uint32_t *cur,
isc_boolean_t
dns_resolver_getzeronosoattl(dns_resolver_t *resolver);
-
+
void
dns_resolver_setzeronosoattl(dns_resolver_t *resolver, isc_boolean_t state);
@@ -491,7 +492,7 @@ dns_resolver_createdispatchpool(dns_resolver_t *res, unsigned int ndisps,
* Requires:
*
*\li 'res' is a valid resolver that has not been frozen. Also it must have
- * either the _USEDISPATCHPOOL4 or _USEDISPATCHPOOL6 option.
+ * either the _USEDISPATCHPOOL4 or _USEDISPATCHPOOL6 option.
*
*\li 'taskmgr' is a valid task manager.
*
diff --git a/lib/dns/include/dns/stats.h b/lib/dns/include/dns/stats.h
index 57fac98b..afc64242 100644
--- a/lib/dns/include/dns/stats.h
+++ b/lib/dns/include/dns/stats.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: stats.h,v 1.13.128.2 2008/01/24 23:46:26 tbox Exp $ */
+/* $Id: stats.h,v 1.13.128.5 2008/04/08 03:46:36 each Exp $ */
#ifndef DNS_STATS_H
#define DNS_STATS_H 1
@@ -25,9 +25,58 @@
#include <dns/types.h>
/*%
- * Query statistics counter types.
+ * Statistics counters. Used as dns_statscounter_t values.
*/
-typedef enum {
+enum {
+ /*%
+ * Resolver statistics counters.
+ */
+ dns_resstatscounter_queryv4 = 0,
+ dns_resstatscounter_queryv6 = 1,
+ dns_resstatscounter_responsev4 = 2,
+ dns_resstatscounter_responsev6 = 3,
+ dns_resstatscounter_nxdomain = 4,
+ dns_resstatscounter_servfail = 5,
+ dns_resstatscounter_formerr = 6,
+ dns_resstatscounter_othererror = 7,
+ dns_resstatscounter_edns0fail = 8,
+ dns_resstatscounter_mismatch = 9,
+ dns_resstatscounter_truncated = 10,
+ dns_resstatscounter_lame = 11,
+ dns_resstatscounter_retry = 12,
+ dns_resstatscounter_gluefetchv4 = 13,
+ dns_resstatscounter_gluefetchv6 = 14,
+ dns_resstatscounter_gluefetchv4fail = 15,
+ dns_resstatscounter_gluefetchv6fail = 16,
+ dns_resstatscounter_val = 17,
+ dns_resstatscounter_valsuccess = 18,
+ dns_resstatscounter_valnegsuccess = 19,
+ dns_resstatscounter_valfail = 20,
+
+ dns_resstatscounter_max = 21,
+
+ /*%
+ * Zone statistics counters.
+ */
+ dns_zonestatscounter_notifyoutv4 = 0,
+ dns_zonestatscounter_notifyoutv6 = 1,
+ dns_zonestatscounter_notifyinv4 = 2,
+ dns_zonestatscounter_notifyinv6 = 3,
+ dns_zonestatscounter_notifyrej = 4,
+ dns_zonestatscounter_soaoutv4 = 5,
+ dns_zonestatscounter_soaoutv6 = 6,
+ dns_zonestatscounter_axfrreqv4 = 7,
+ dns_zonestatscounter_axfrreqv6 = 8,
+ dns_zonestatscounter_ixfrreqv4 = 9,
+ dns_zonestatscounter_ixfrreqv6 = 10,
+ dns_zonestatscounter_xfrsuccess = 11,
+ dns_zonestatscounter_xfrfail = 12,
+
+ dns_zonestatscounter_max = 13,
+
+ /*%
+ * Query statistics counters (obsolete).
+ */
dns_statscounter_success = 0, /*%< Successful lookup */
dns_statscounter_referral = 1, /*%< Referral result */
dns_statscounter_nxrrset = 2, /*%< NXRRSET result */
@@ -35,64 +84,242 @@ typedef enum {
dns_statscounter_recursion = 4, /*%< Recursion was used */
dns_statscounter_failure = 5, /*%< Some other failure */
dns_statscounter_duplicate = 6, /*%< Duplicate query */
- dns_statscounter_dropped = 7 /*%< Duplicate query */
-} dns_statscounter_t;
+ dns_statscounter_dropped = 7 /*%< Duplicate query (dropped) */
+};
#define DNS_STATS_NCOUNTERS 8
+/*%<
+ * Flag(s) for dns_xxxstats_dump().
+ */
+#define DNS_STATSDUMP_VERBOSE 0x00000001 /*%< dump 0-value counters */
+
+/*%<
+ * (Obsoleted)
+ */
LIBDNS_EXTERNAL_DATA extern const char *dns_statscounter_names[];
+/*%
+ * Attributes for statistics counters of RRset and Rdatatype types.
+ *
+ * _OTHERTYPE
+ * The rdata type is not explicitly supported and the corresponding counter
+ * is counted for other such types, too. When this attribute is set,
+ * the base type is of no use.
+ *
+ * _NXRRSET
+ * RRset type counters only. Indicates the RRset is non existent.
+ *
+ * _NXDOMAIN
+ * RRset type counters only. Indicates a non existent name. When this
+ * attribute is set, the base type is of no use.
+ */
+#define DNS_RDATASTATSTYPE_ATTR_OTHERTYPE 0x0001
+#define DNS_RDATASTATSTYPE_ATTR_NXRRSET 0x0002
+#define DNS_RDATASTATSTYPE_ATTR_NXDOMAIN 0x0004
+
+/*%<
+ * Conversion macros among dns_rdatatype_t, attributes and dns_statscounter_t.
+ */
+#define DNS_RDATASTATSTYPE_BASE(type) ((dns_rdatatype_t)((type) & 0xFFFF))
+#define DNS_RDATASTATSTYPE_ATTR(type) ((type) >> 16)
+#define DNS_RDATASTATSTYPE_VALUE(b, a) (((a) << 16) | (b))
+
+/*%<
+ * Types of dump callbacks.
+ */
+typedef void (*dns_generalstats_dumper_t)(dns_statscounter_t, isc_uint64_t,
+ void *);
+typedef void (*dns_rdatatypestats_dumper_t)(dns_rdatastatstype_t, isc_uint64_t,
+ void *);
+typedef void (*dns_opcodestats_dumper_t)(dns_opcode_t, isc_uint64_t, void *);
+
isc_result_t
-dns_stats_create(isc_mem_t *mctx, dns_stats_t **statsp);
+dns_generalstats_create(isc_mem_t *mctx, dns_stats_t **statsp, int ncounters);
/*%<
- * Create a statistics counter structure.
+ * Create a statistics counter structure of general type. It counts a general
+ * set of counters indexed by an ID between 0 and ncounters -1.
*
* Requires:
+ *\li 'mctx' must be a valid memory context.
+ *
+ *\li 'statsp' != NULL && '*statsp' == NULL.
+ *
+ * Returns:
+ *\li ISC_R_SUCCESS -- all ok
*
+ *\li anything else -- failure
+ */
+
+isc_result_t
+dns_rdatatypestats_create(isc_mem_t *mctx, dns_stats_t **statsp);
+/*%<
+ * Create a statistics counter structure per rdatatype.
+ *
+ * Requires:
*\li 'mctx' must be a valid memory context.
*
*\li 'statsp' != NULL && '*statsp' == NULL.
+ *
+ * Returns:
+ *\li ISC_R_SUCCESS -- all ok
+ *
+ *\li anything else -- failure
*/
-void
-dns_stats_destroy(isc_mem_t *mctx, dns_stats_t **statsp);
+isc_result_t
+dns_rdatasetstats_create(isc_mem_t *mctx, dns_stats_t **statsp);
/*%<
- * Destroy a statistics counter structure.
+ * Create a statistics counter structure per RRset.
*
* Requires:
+ *\li 'mctx' must be a valid memory context.
+ *
+ *\li 'statsp' != NULL && '*statsp' == NULL.
+ *
+ * Returns:
+ *\li ISC_R_SUCCESS -- all ok
+ *
+ *\li anything else -- failure
+ */
+
+isc_result_t
+dns_opcodestats_create(isc_mem_t *mctx, dns_stats_t **statsp);
+/*%<
+ * Create a statistics counter structure per opcode.
*
+ * Requires:
*\li 'mctx' must be a valid memory context.
*
- *\li 'statsp' != NULL and '*statsp' be valid dns_stats_t.
+ *\li 'statsp' != NULL && '*statsp' == NULL.
+ *
+ * Returns:
+ *\li ISC_R_SUCCESS -- all ok
+ *
+ *\li anything else -- failure
+ */
+
+void
+dns_stats_attach(dns_stats_t *stats, dns_stats_t **statsp);
+/*%<
+ * Attach to a statistics set.
+ *
+ * Requires:
+ *\li 'stats' is a valid dns_stats_t.
*
- * Ensures:
+ *\li 'statsp' != NULL && '*statsp' == NULL
+ */
+
+void
+dns_stats_detach(dns_stats_t **statsp);
+/*%<
+ * Detaches from the statistics set.
*
- *\li '*statsp' == NULL
+ * Requires:
+ *\li 'statsp' != NULL and '*statsp' is a valid dns_stats_t.
*/
void
-dns_stats_incrementcounter(dns_stats_t *stat, dns_statscounter_t counter);
+dns_generalstats_increment(dns_stats_t *stats, dns_statscounter_t counter);
/*%<
- * Increment a counter field of 'stat' specified by 'counter'.
+ * Increment the counter-th counter of stats.
*
* Requires:
+ *\li 'stats' is a valid dns_stats_t created by dns_generalstats_create().
*
- *\li 'stat' be a valid dns_stats_t.
+ *\li counter is less than the maximum available ID for the stats specified
+ * on creation.
+ */
+
+void
+dns_rdatatypestats_increment(dns_stats_t *stats, dns_rdatatype_t type);
+/*%<
+ * Increment the statistics counter for 'type'.
*
- *\li counter < DNS_STATS_NCOUNTERS
+ * Requires:
+ *\li 'stats' is a valid dns_stats_t created by dns_rdatatypestats_create().
*/
void
-dns_stats_copy(dns_stats_t *src, isc_uint64_t *dst);
+dns_rdatasetstats_increment(dns_stats_t *stats, dns_rdatastatstype_t rrsettype);
/*%<
- * Copy statistics counter fields of 'src' to the 'dst' array.
+ * Increment the statistics counter for 'rrsettype'.
*
* Requires:
+ *\li 'stats' is a valid dns_stats_t created by dns_rdatasetstats_create().
+ */
+
+void
+dns_rdatasetstats_decrement(dns_stats_t *stats, dns_rdatastatstype_t rrsettype);
+/*%<
+ * Decrement the statistics counter for 'rrsettype'.
*
- *\li 'src' be a valid dns_stats_t.
+ * Requires:
+ *\li 'stats' is a valid dns_stats_t created by dns_rdatasetstats_create().
+ */
+
+void
+dns_opcodestats_increment(dns_stats_t *stats, dns_opcode_t code);
+/*%<
+ * Increment the statistics counter for 'code'.
*
- *\li 'dst' be sufficiently large to store DNS_STATS_NCOUNTERS 64-bit
- * integers.
+ * Requires:
+ *\li 'stats' is a valid dns_stats_t created by dns_opcodestats_create().
+ */
+
+void
+dns_generalstats_dump(dns_stats_t *stats, dns_generalstats_dumper_t dump_fn,
+ void *arg, unsigned int options);
+/*%<
+ * Dump the current statistics counters in a specified way. For each counter
+ * in stats, dump_fn is called with its current value and the given argument
+ * arg. By default counters that have a value of 0 is skipped; if options has
+ * the DNS_STATSDUMP_VERBOSE flag, even such counters are dumped.
+ *
+ * Requires:
+ *\li 'stats' is a valid dns_stats_t created by dns_generalstats_create().
+ */
+
+void
+dns_rdatatypestats_dump(dns_stats_t *stats, dns_rdatatypestats_dumper_t dump_fn,
+ void *arg, unsigned int options);
+/*%<
+ * Dump the current statistics counters in a specified way. For each counter
+ * in stats, dump_fn is called with the corresponding type in the form of
+ * dns_rdatastatstype_t, the current counter value and the given argument
+ * arg. By default counters that have a value of 0 is skipped; if options has
+ * the DNS_STATSDUMP_VERBOSE flag, even such counters are dumped.
+ *
+ * Requires:
+ *\li 'stats' is a valid dns_stats_t created by dns_generalstats_create().
+ */
+
+void
+dns_rdatasetstats_dump(dns_stats_t *stats, dns_rdatatypestats_dumper_t dump_fn,
+ void *arg, unsigned int options);
+/*%<
+ * Dump the current statistics counters in a specified way. For each counter
+ * in stats, dump_fn is called with the corresponding type in the form of
+ * dns_rdatastatstype_t, the current counter value and the given argument
+ * arg. By default counters that have a value of 0 is skipped; if options has
+ * the DNS_STATSDUMP_VERBOSE flag, even such counters are dumped.
+ *
+ * Requires:
+ *\li 'stats' is a valid dns_stats_t created by dns_generalstats_create().
+ */
+
+void
+dns_opcodestats_dump(dns_stats_t *stats, dns_opcodestats_dumper_t dump_fn,
+ void *arg, unsigned int options);
+/*%<
+ * Dump the current statistics counters in a specified way. For each counter
+ * in stats, dump_fn is called with the corresponding opcode, the current
+ * counter value and the given argument arg. By default counters that have a
+ * value of 0 is skipped; if options has the DNS_STATSDUMP_VERBOSE flag, even
+ * such counters are dumped.
+ *
+ * Requires:
+ *\li 'stats' is a valid dns_stats_t created by dns_generalstats_create().
*/
isc_result_t
@@ -101,7 +328,7 @@ dns_stats_alloccounters(isc_mem_t *mctx, isc_uint64_t **ctrp);
* Allocate an array of query statistics counters from the memory
* context 'mctx'.
*
- * This function is obsoleted. Use dns_stats_create() instead.
+ * This function is obsoleted. Use dns_xxxstats_create() instead.
*/
void
diff --git a/lib/dns/include/dns/types.h b/lib/dns/include/dns/types.h
index d13b2c82..ea20787e 100644
--- a/lib/dns/include/dns/types.h
+++ b/lib/dns/include/dns/types.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: types.h,v 1.126.62.2 2008/01/24 23:46:26 tbox Exp $ */
+/* $Id: types.h,v 1.126.62.3 2008/04/03 06:10:21 marka Exp $ */
#ifndef DNS_TYPES_H
#define DNS_TYPES_H 1
@@ -107,6 +107,8 @@ typedef struct dns_signature dns_signature_t;
typedef struct dns_ssurule dns_ssurule_t;
typedef struct dns_ssutable dns_ssutable_t;
typedef struct dns_stats dns_stats_t;
+typedef int dns_statscounter_t;
+typedef isc_uint32_t dns_rdatastatstype_t;
typedef struct dns_tkeyctx dns_tkeyctx_t;
typedef isc_uint16_t dns_trust_t;
typedef struct dns_tsig_keyring dns_tsig_keyring_t;
diff --git a/lib/dns/include/dns/view.h b/lib/dns/include/dns/view.h
index 4964bd1f..a488a62c 100644
--- a/lib/dns/include/dns/view.h
+++ b/lib/dns/include/dns/view.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: view.h,v 1.107 2007/06/18 23:47:42 tbox Exp $ */
+/* $Id: view.h,v 1.107.128.4 2008/04/03 06:20:34 tbox Exp $ */
#ifndef DNS_VIEW_H
#define DNS_VIEW_H 1
@@ -70,7 +70,6 @@
#include <isc/refcount.h>
#include <isc/rwlock.h>
#include <isc/stdtime.h>
-#include <isc/xml.h>
#include <dns/acl.h>
#include <dns/fixedname.h>
@@ -101,6 +100,8 @@ struct dns_view {
isc_event_t resevent;
isc_event_t adbevent;
isc_event_t reqevent;
+ dns_stats_t * resstats;
+ dns_stats_t * resquerystats;
/* Configurable data. */
dns_tsig_keyring_t * statickeys;
@@ -124,6 +125,7 @@ struct dns_view {
dns_acl_t * sortlist;
isc_boolean_t requestixfr;
isc_boolean_t provideixfr;
+ isc_boolean_t requestnsid;
dns_ttl_t maxcachettl;
dns_ttl_t maxncachettl;
in_port_t dstport;
@@ -596,7 +598,7 @@ dns_viewlist_find(dns_viewlist_t *list, const char *name,
isc_result_t
dns_viewlist_findzone(dns_viewlist_t *list, dns_name_t *name, isc_boolean_t allclasses,
- dns_rdataclass_t rdclass, dns_zone_t **zonep);
+ dns_rdataclass_t rdclass, dns_zone_t **zonep);
/*%<
* Search zone with 'name' in view with 'rdclass' in viewlist 'list'
@@ -632,7 +634,7 @@ dns_view_loadnew(dns_view_t *view, isc_boolean_t stop);
/*%<
* Load zones attached to this view. dns_view_load() loads
* all zones whose master file has changed since the last
- * load; dns_view_loadnew() loads only zones that have never
+ * load; dns_view_loadnew() loads only zones that have never
* been loaded.
*
* If 'stop' is ISC_TRUE, stop on the first error and return it.
@@ -708,7 +710,7 @@ dns_view_dumpdbtostream(dns_view_t *view, FILE *fp);
* easily obtainable by other means.
*
* Requires:
- *
+ *
*\li 'view' is valid.
*
*\li 'fp' refers to a file open for writing.
@@ -751,7 +753,7 @@ isc_result_t
dns_view_adddelegationonly(dns_view_t *view, dns_name_t *name);
/*%<
* Add the given name to the delegation only table.
- *
+ *
*
* Requires:
*\li 'view' is valid.
@@ -766,7 +768,7 @@ isc_result_t
dns_view_excludedelegationonly(dns_view_t *view, dns_name_t *name);
/*%<
* Add the given name to be excluded from the root-delegation-only.
- *
+ *
*
* Requires:
*\li 'view' is valid.
@@ -819,11 +821,55 @@ dns_view_freezezones(dns_view_t *view, isc_boolean_t freeze);
* \li 'view' is valid.
*/
-#ifdef HAVE_LIBXML2
+void
+dns_view_setresstats(dns_view_t *view, dns_stats_t *stats);
+/*%<
+ * Set a general resolver statistics counter set 'stats' for 'view'.
+ *
+ * Requires:
+ * \li 'view' is valid and is not frozen.
+ *
+ *\li stats is a valid statistics supporting resolver statistics counters
+ * (see dns/stats.h).
+ */
-isc_result_t
-dns_view_xmlrender(dns_view_t *view, xmlTextWriterPtr xml, int flags);
+void
+dns_view_getresstats(dns_view_t *view, dns_stats_t **statsp);
+/*%<
+ * Get the general statistics counter set for 'view'. If a statistics set is
+ * set '*statsp' will be attached to the set; otherwise, '*statsp' will be
+ * untouched.
+ *
+ * Requires:
+ * \li 'view' is valid and is not frozen.
+ *
+ *\li 'statsp' != NULL && '*statsp' != NULL
+ */
+
+void
+dns_view_setresquerystats(dns_view_t *view, dns_stats_t *stats);
+/*%<
+ * Set a statistics counter set of rdata type, 'stats', for 'view'. Once the
+ * statistic set is installed, view's resolver will count outgoing queries
+ * per rdata type.
+ *
+ * Requires:
+ * \li 'view' is valid and is not frozen.
+ *
+ *\li stats is a valid statistics created by dns_rdatatypestats_create().
+ */
-#endif
+void
+dns_view_getresquerystats(dns_view_t *view, dns_stats_t **statsp);
+/*%<
+ * Get the rdatatype statistics counter set for 'view'. If a statistics set is
+ * set '*statsp' will be attached to the set; otherwise, '*statsp' will be
+ * untouched.
+ *
+ * Requires:
+ * \li 'view' is valid and is not frozen.
+ *
+ *\li 'statsp' != NULL && '*statsp' != NULL
+ */
#endif /* DNS_VIEW_H */
diff --git a/lib/dns/include/dns/zone.h b/lib/dns/include/dns/zone.h
index dc4d1983..27ef22ce 100644
--- a/lib/dns/include/dns/zone.h
+++ b/lib/dns/include/dns/zone.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zone.h,v 1.153.56.2 2008/01/24 23:46:26 tbox Exp $ */
+/* $Id: zone.h,v 1.153.56.3 2008/04/03 06:10:21 marka Exp $ */
#ifndef DNS_ZONE_H
#define DNS_ZONE_H 1
@@ -31,7 +31,6 @@
#include <isc/formatcheck.h>
#include <isc/lang.h>
#include <isc/rwlock.h>
-#include <isc/xml.h>
#include <dns/masterdump.h>
#include <dns/types.h>
@@ -148,6 +147,15 @@ dns_zone_getclass(dns_zone_t *zone);
*\li 'zone' to be a valid zone.
*/
+isc_uint32_t
+dns_zone_getserial(dns_zone_t *zone);
+/*%<
+ * Returns the current serial number of the zone.
+ *
+ * Requires:
+ *\li 'zone' to be a valid zone.
+ */
+
void
dns_zone_settype(dns_zone_t *zone, dns_zonetype_t type);
/*%<
@@ -1479,28 +1487,55 @@ dns_zone_isforced(dns_zone_t *zone);
isc_result_t
dns_zone_setstatistics(dns_zone_t *zone, isc_boolean_t on);
/*%<
- * Make the zone keep or not keep an array of statistics
- * counter.
- *
- * Requires:
- * \li zone be a valid zone.
+ * This function is obsoleted by dns_zone_setrequeststats().
*/
isc_uint64_t *
dns_zone_getstatscounters(dns_zone_t *zone);
/*%<
- * This function is obsoleted by dns_zone_getstats().
+ * This function is obsoleted by dns_zone_getrequeststats().
+ */
+
+void
+dns_zone_setstats(dns_zone_t *zone, dns_stats_t *stats);
+/*%<
+ * Set a general zone-maintenance statistics set 'stats' for 'zone'. This
+ * function is expected to be called only on zone creation (when necessary).
+ * Once installed, it cannot be removed or replaced. Also, there is no
+ * interface to get the installed stats from the zone; the caller must keep the
+ * stats to reference (e.g. dump) it later.
+ *
+ * Requires:
+ * \li 'zone' to be a valid zone and does not have a statistics set already
+ * installed.
+ *
+ *\li stats is a valid statistics supporting zone statistics counters
+ * (see dns/stats.h).
+ */
+
+void
+dns_zone_setrequeststats(dns_zone_t *zone, dns_stats_t *stats);
+/*%<
+ * Set an additional statistics set to zone. It is attached in the zone
+ * but is not counted in the zone module; only the caller updates the counters.
+ *
+ * Requires:
+ * \li 'zone' to be a valid zone.
+ *
+ *\li stats is a valid statistics.
*/
dns_stats_t *
-dns_zone_getstats(dns_zone_t *zone);
+dns_zone_getrequeststats(dns_zone_t *zone);
/*%<
+ * Get the additional statistics for zone, if one is installed.
+ *
* Requires:
- * zone be a valid zone.
+ * \li 'zone' to be a valid zone.
*
* Returns:
- * \li A pointer to the zone's array of statistics counters,
- * or NULL if it has none.
+ * \li when available, a pointer to the statistics set installed in zone;
+ * otherwise NULL.
*/
void
@@ -1636,13 +1671,6 @@ dns_zone_setisself(dns_zone_t *zone, dns_isselffunc_t isself, void *arg);
* delivered to 'myview'.
*/
-#ifdef HAVE_LIBXML2
-
-isc_result_t
-dns_zone_xmlrender(dns_zone_t *zone, xmlTextWriterPtr xml, int flags);
-
-#endif
-
ISC_LANG_ENDDECLS
#endif /* DNS_ZONE_H */
diff --git a/lib/dns/masterdump.c b/lib/dns/masterdump.c
index 8b3ebd66..0c48eee7 100644
--- a/lib/dns/masterdump.c
+++ b/lib/dns/masterdump.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: masterdump.c,v 1.89 2007/06/19 23:47:16 tbox Exp $ */
+/* $Id: masterdump.c,v 1.89.128.2 2008/04/09 22:53:06 tbox Exp $ */
/*! \file */
@@ -183,7 +183,7 @@ struct dns_dumpctx {
isc_buffer_t *buffer, FILE *f);
};
-#define NXDOMAIN(x) (((x)->attributes & DNS_RDATASETATTR_NXDOMAIN) != 0)
+#define NXDOMAIN(x) (((x)->attributes & DNS_RDATASETATTR_NXDOMAIN) != 0)
/*%
* Output tabs and spaces to go from column '*current' to
@@ -1020,9 +1020,9 @@ dumpctx_destroy(dns_dumpctx_t *dctx) {
dctx->magic = 0;
DESTROYLOCK(&dctx->lock);
+ dns_dbiterator_destroy(&dctx->dbiter);
if (dctx->version != NULL)
dns_db_closeversion(dctx->db, &dctx->version, ISC_FALSE);
- dns_dbiterator_destroy(&dctx->dbiter);
dns_db_detach(&dctx->db);
if (dctx->task != NULL)
isc_task_detach(&dctx->task);
@@ -1071,13 +1071,13 @@ dns_dumpctx_detach(dns_dumpctx_t **dctxp) {
dns_dbversion_t *
dns_dumpctx_version(dns_dumpctx_t *dctx) {
- REQUIRE(DNS_DCTX_VALID(dctx));
+ REQUIRE(DNS_DCTX_VALID(dctx));
return (dctx->version);
}
dns_db_t *
dns_dumpctx_db(dns_dumpctx_t *dctx) {
- REQUIRE(DNS_DCTX_VALID(dctx));
+ REQUIRE(DNS_DCTX_VALID(dctx));
return (dctx->db);
}
@@ -1703,10 +1703,10 @@ dns_master_dumpnode(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
isc_result_t
dns_master_stylecreate(dns_master_style_t **stylep, unsigned int flags,
- unsigned int ttl_column, unsigned int class_column,
- unsigned int type_column, unsigned int rdata_column,
- unsigned int line_length, unsigned int tab_width,
- isc_mem_t *mctx)
+ unsigned int ttl_column, unsigned int class_column,
+ unsigned int type_column, unsigned int rdata_column,
+ unsigned int line_length, unsigned int tab_width,
+ isc_mem_t *mctx)
{
dns_master_style_t *style;
diff --git a/lib/dns/message.c b/lib/dns/message.c
index b798f25a..29958cce 100644
--- a/lib/dns/message.c
+++ b/lib/dns/message.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: message.c,v 1.237.110.3 2008/01/17 23:46:37 tbox Exp $ */
+/* $Id: message.c,v 1.237.110.5 2008/04/03 10:50:01 marka Exp $ */
/*! \file */
@@ -24,6 +24,7 @@
***/
#include <config.h>
+#include <ctype.h>
#include <isc/buffer.h>
#include <isc/mem.h>
@@ -1488,14 +1489,8 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
rdataset->ttl = ttl;
}
- /*
- * XXXMLG Perform a totally ugly hack here to pull
- * the rdatalist out of the private field in the rdataset,
- * and append this rdata to the rdatalist's linked list
- * of rdata.
- */
- rdatalist = (dns_rdatalist_t *)(rdataset->private1);
-
+ /* Append this rdata to the rdataset. */
+ dns_rdatalist_fromrdataset(rdataset, &rdatalist);
ISC_LIST_APPEND(rdatalist->rdata, rdata, link);
/*
@@ -3127,6 +3122,10 @@ dns_message_pseudosectiontotext(dns_message_t *msg,
isc_result_t result;
char buf[sizeof("1234567890")];
isc_uint32_t mbz;
+ dns_rdata_t rdata;
+ isc_buffer_t optbuf;
+ isc_uint16_t optcode, optlen;
+ unsigned char *optdata;
REQUIRE(DNS_MESSAGE_VALID(msg));
REQUIRE(target != NULL);
@@ -3156,6 +3155,50 @@ dns_message_pseudosectiontotext(dns_message_t *msg,
ADD_STRING(target, "; udp: ");
snprintf(buf, sizeof(buf), "%u\n", (unsigned int)ps->rdclass);
ADD_STRING(target, buf);
+
+ result = dns_rdataset_first(ps);
+ if (result != ISC_R_SUCCESS)
+ return (ISC_R_SUCCESS);
+
+ /* Print EDNS info, if any */
+ dns_rdata_init(&rdata);
+ dns_rdataset_current(ps, &rdata);
+ if (rdata.length < 4)
+ return (ISC_R_SUCCESS);
+
+ isc_buffer_init(&optbuf, rdata.data, rdata.length);
+ isc_buffer_add(&optbuf, rdata.length);
+ optcode = isc_buffer_getuint16(&optbuf);
+ optlen = isc_buffer_getuint16(&optbuf);
+
+ if (optcode == DNS_OPT_NSID) {
+ ADD_STRING(target, "; NSID");
+ } else {
+ ADD_STRING(target, "; OPT=");
+ sprintf(buf, "%u", optcode);
+ ADD_STRING(target, buf);
+ }
+
+ if (optlen != 0) {
+ int i;
+ ADD_STRING(target, ": ");
+
+ optdata = rdata.data + 4;
+ for (i = 0; i < optlen; i++) {
+ sprintf(buf, "%02x ", optdata[i]);
+ ADD_STRING(target, buf);
+ }
+ for (i = 0; i < optlen; i++) {
+ ADD_STRING(target, " (");
+ if (isprint(optdata[i]))
+ isc_buffer_putmem(target, &optdata[i],
+ 1);
+ else
+ isc_buffer_putstr(target, ".");
+ ADD_STRING(target, ")");
+ }
+ }
+ ADD_STRING(target, "\n");
return (ISC_R_SUCCESS);
case DNS_PSEUDOSECTION_TSIG:
ps = dns_message_gettsig(msg, &name);
diff --git a/lib/dns/name.c b/lib/dns/name.c
index a15c7d23..638cdc86 100644
--- a/lib/dns/name.c
+++ b/lib/dns/name.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: name.c,v 1.163 2007/06/19 23:47:16 tbox Exp $ */
+/* $Id: name.c,v 1.163.128.2 2008/03/31 23:46:42 tbox Exp $ */
/*! \file */
@@ -155,7 +155,7 @@ do { \
static unsigned char root_ndata[] = { '\0' };
static unsigned char root_offsets[] = { 0 };
-static dns_name_t root =
+static dns_name_t root =
{
DNS_NAME_MAGIC,
root_ndata, 1, 1,
@@ -298,7 +298,7 @@ dns_name_ismailbox(const dns_name_t *name) {
REQUIRE(name->labels > 0);
REQUIRE(name->attributes & DNS_NAMEATTR_ABSOLUTE);
- /*
+ /*
* Root label.
*/
if (name->length == 1)
@@ -312,7 +312,7 @@ dns_name_ismailbox(const dns_name_t *name) {
if (!domainchar(ch))
return (ISC_FALSE);
}
-
+
if (ndata == name->ndata + name->length)
return (ISC_FALSE);
@@ -347,8 +347,8 @@ dns_name_ishostname(const dns_name_t *name, isc_boolean_t wildcard) {
REQUIRE(VALID_NAME(name));
REQUIRE(name->labels > 0);
REQUIRE(name->attributes & DNS_NAMEATTR_ABSOLUTE);
-
- /*
+
+ /*
* Root label.
*/
if (name->length == 1)
@@ -918,7 +918,7 @@ dns_name_getlabelsequence(const dns_name_t *source,
target->ndata = &source->ndata[firstoffset];
target->length = endoffset - firstoffset;
-
+
if (first + n == source->labels && n > 0 &&
(source->attributes & DNS_NAMEATTR_ABSOLUTE) != 0)
target->attributes |= DNS_NAMEATTR_ABSOLUTE;
@@ -991,7 +991,7 @@ dns_name_fromregion(dns_name_t *name, const isc_region_t *r) {
name->length = len;
} else {
name->ndata = r->base;
- name->length = (r->length <= DNS_NAME_MAXWIRE) ?
+ name->length = (r->length <= DNS_NAME_MAXWIRE) ?
r->length : DNS_NAME_MAXWIRE;
}
@@ -1049,7 +1049,7 @@ dns_name_fromtext(dns_name_t *name, isc_buffer_t *source,
REQUIRE(ISC_BUFFER_VALID(source));
REQUIRE((target != NULL && ISC_BUFFER_VALID(target)) ||
(target == NULL && ISC_BUFFER_VALID(name->buffer)));
-
+
downcase = ISC_TF((options & DNS_NAME_DOWNCASE) != 0);
if (target == NULL && name->buffer != NULL) {
@@ -1303,8 +1303,9 @@ totext_filter_proc_key_init(void) {
result = isc_mem_create2(0, 0, &thread_key_mctx, 0);
if (result != ISC_R_SUCCESS)
goto unlock;
+ isc_mem_setname(thread_key_mctx, "threadkey", NULL);
isc_mem_setdestroycheck(thread_key_mctx, ISC_FALSE);
-
+
if (!thread_key_initialized &&
isc_thread_key_create(&totext_filter_proc_key,
free_specific) != 0) {
@@ -2299,7 +2300,7 @@ dns_name_settotextfilter(dns_name_totextfilter_t proc) {
result = ISC_R_UNEXPECTED;
return (result);
}
-
+
mem = isc_mem_get(thread_key_mctx, sizeof(*mem));
if (mem == NULL)
return (ISC_R_NOMEMORY);
diff --git a/lib/dns/peer.c b/lib/dns/peer.c
index 8ed33859..c5aad7dc 100644
--- a/lib/dns/peer.c
+++ b/lib/dns/peer.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: peer.c,v 1.29 2007/06/19 23:47:16 tbox Exp $ */
+/* $Id: peer.c,v 1.29.128.2 2008/04/03 06:08:27 tbox Exp $ */
/*! \file */
@@ -42,6 +42,7 @@
#define SUPPORT_EDNS_BIT 5
#define SERVER_UDPSIZE_BIT 6
#define SERVER_MAXUDP_BIT 7
+#define REQUEST_NSID_BIT 8
static void
peerlist_delete(dns_peerlist_t **list);
@@ -146,7 +147,7 @@ dns_peerlist_addpeer(dns_peerlist_t *peers, dns_peer_t *peer) {
ISC_LIST_INSERTBEFORE(peers->elements, p, peer, next);
else
ISC_LIST_APPEND(peers->elements, peer, next);
-
+
}
isc_result_t
@@ -213,7 +214,7 @@ dns_peer_new(isc_mem_t *mem, isc_netaddr_t *addr, dns_peer_t **peerptr) {
isc_result_t
dns_peer_newprefix(isc_mem_t *mem, isc_netaddr_t *addr, unsigned int prefixlen,
dns_peer_t **peerptr)
-{
+{
dns_peer_t *peer;
REQUIRE(peerptr != NULL);
@@ -416,6 +417,32 @@ dns_peer_getsupportedns(dns_peer_t *peer, isc_boolean_t *retval) {
}
isc_result_t
+dns_peer_setrequestnsid(dns_peer_t *peer, isc_boolean_t newval) {
+ isc_boolean_t existed;
+
+ REQUIRE(DNS_PEER_VALID(peer));
+
+ existed = DNS_BIT_CHECK(REQUEST_NSID_BIT, &peer->bitflags);
+
+ peer->request_nsid = newval;
+ DNS_BIT_SET(REQUEST_NSID_BIT, &peer->bitflags);
+
+ return (existed ? ISC_R_EXISTS : ISC_R_SUCCESS);
+}
+
+isc_result_t
+dns_peer_getrequestnsid(dns_peer_t *peer, isc_boolean_t *retval) {
+ REQUIRE(DNS_PEER_VALID(peer));
+ REQUIRE(retval != NULL);
+
+ if (DNS_BIT_CHECK(REQUEST_NSID_BIT, &peer->bitflags)) {
+ *retval = peer->request_nsid;
+ return (ISC_R_SUCCESS);
+ } else
+ return (ISC_R_NOTFOUND);
+}
+
+isc_result_t
dns_peer_settransfers(dns_peer_t *peer, isc_uint32_t newval) {
isc_boolean_t existed;
@@ -544,7 +571,7 @@ dns_peer_settransfersource(dns_peer_t *peer,
}
if (transfer_source != NULL) {
peer->transfer_source = isc_mem_get(peer->mem,
- sizeof(*peer->transfer_source));
+ sizeof(*peer->transfer_source));
if (peer->transfer_source == NULL)
return (ISC_R_NOMEMORY);
@@ -577,7 +604,7 @@ dns_peer_setnotifysource(dns_peer_t *peer,
}
if (notify_source != NULL) {
peer->notify_source = isc_mem_get(peer->mem,
- sizeof(*peer->notify_source));
+ sizeof(*peer->notify_source));
if (peer->notify_source == NULL)
return (ISC_R_NOMEMORY);
@@ -608,7 +635,7 @@ dns_peer_setquerysource(dns_peer_t *peer, const isc_sockaddr_t *query_source) {
}
if (query_source != NULL) {
peer->query_source = isc_mem_get(peer->mem,
- sizeof(*peer->query_source));
+ sizeof(*peer->query_source));
if (peer->query_source == NULL)
return (ISC_R_NOMEMORY);
@@ -649,11 +676,11 @@ dns_peer_getudpsize(dns_peer_t *peer, isc_uint16_t *udpsize) {
REQUIRE(udpsize != NULL);
if (DNS_BIT_CHECK(SERVER_UDPSIZE_BIT, &peer->bitflags)) {
- *udpsize = peer->udpsize;
- return (ISC_R_SUCCESS);
- } else {
- return (ISC_R_NOTFOUND);
- }
+ *udpsize = peer->udpsize;
+ return (ISC_R_SUCCESS);
+ } else {
+ return (ISC_R_NOTFOUND);
+ }
}
isc_result_t
@@ -677,9 +704,9 @@ dns_peer_getmaxudp(dns_peer_t *peer, isc_uint16_t *maxudp) {
REQUIRE(maxudp != NULL);
if (DNS_BIT_CHECK(SERVER_MAXUDP_BIT, &peer->bitflags)) {
- *maxudp = peer->maxudp;
- return (ISC_R_SUCCESS);
- } else {
- return (ISC_R_NOTFOUND);
- }
+ *maxudp = peer->maxudp;
+ return (ISC_R_SUCCESS);
+ } else {
+ return (ISC_R_NOTFOUND);
+ }
}
diff --git a/lib/dns/rbt.c b/lib/dns/rbt.c
index e6fc6328..b045cea1 100644
--- a/lib/dns/rbt.c
+++ b/lib/dns/rbt.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rbt.c,v 1.138.36.2 2008/01/22 23:27:35 tbox Exp $ */
+/* $Id: rbt.c,v 1.138.36.3 2008/03/31 13:18:00 fdupont Exp $ */
/*! \file */
@@ -2056,10 +2056,6 @@ dns_rbt_deletetreeflat(dns_rbt_t *rbt, unsigned int quantum,
node = LEFT(node);
goto traverse;
}
- if (RIGHT(node) != NULL) {
- node = RIGHT(node);
- goto traverse;
- }
if (DOWN(node) != NULL) {
node = DOWN(node);
goto traverse;
@@ -2076,14 +2072,15 @@ dns_rbt_deletetreeflat(dns_rbt_t *rbt, unsigned int quantum,
node->magic = 0;
#endif
parent = PARENT(node);
+ if (RIGHT(node) != NULL)
+ PARENT(RIGHT(node)) = parent;
if (parent != NULL) {
if (LEFT(parent) == node)
- LEFT(parent) = NULL;
+ LEFT(parent) = RIGHT(node);
else if (DOWN(parent) == node)
- DOWN(parent) = NULL;
- else if (RIGHT(parent) == node)
- RIGHT(parent) = NULL;
- }
+ DOWN(parent) = RIGHT(node);
+ } else
+ parent = RIGHT(node);
isc_mem_put(rbt->mctx, node, NODE_SIZE(node));
rbt->nodecount--;
diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c
index 6ecc2eec..d2d3630f 100644
--- a/lib/dns/rbtdb.c
+++ b/lib/dns/rbtdb.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rbtdb.c,v 1.248 2007/12/02 20:27:35 marka Exp $ */
+/* $Id: rbtdb.c,v 1.248.12.8 2008/05/01 18:32:31 jinmei Exp $ */
/*! \file */
@@ -53,6 +53,7 @@
#include <dns/rdatasetiter.h>
#include <dns/rdataslab.h>
#include <dns/result.h>
+#include <dns/stats.h>
#include <dns/view.h>
#include <dns/zone.h>
#include <dns/zonekey.h>
@@ -74,7 +75,7 @@
* ISC_MAGIC_VALID cannot be used.
*/
#define VALID_RBTDB(rbtdb) ((rbtdb) != NULL && \
- (rbtdb)->common.impmagic == RBTDB_MAGIC)
+ (rbtdb)->common.impmagic == RBTDB_MAGIC)
#ifdef DNS_RBTDB_VERSION64
typedef isc_uint64_t rbtdb_serial_t;
@@ -96,15 +97,15 @@ typedef isc_uint32_t rbtdb_rdatatype_t;
#define RBTDB_RDATATYPE_VALUE(b, e) (((e) << 16) | (b))
#define RBTDB_RDATATYPE_SIGNSEC \
- RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_nsec)
+ RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_nsec)
#define RBTDB_RDATATYPE_SIGNS \
- RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_ns)
+ RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_ns)
#define RBTDB_RDATATYPE_SIGCNAME \
- RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_cname)
+ RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_cname)
#define RBTDB_RDATATYPE_SIGDNAME \
- RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_dname)
+ RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_dname)
#define RBTDB_RDATATYPE_NCACHEANY \
- RBTDB_RDATATYPE_VALUE(0, dns_rdatatype_any)
+ RBTDB_RDATATYPE_VALUE(0, dns_rdatatype_any)
/*
* We use rwlock for DB lock only when ISC_RWLOCK_USEATOMIC is non 0.
@@ -181,10 +182,6 @@ typedef isc_mutex_t nodelock_t;
#define NODE_WEAKDOWNGRADE(l) ((void)0)
#endif
-#ifndef DNS_RDATASET_FIXED
-#define DNS_RDATASET_FIXED 1
-#endif
-
/*
* Allow clients with a virtual time of up to 5 minutes in the past to see
* records that would have otherwise have expired.
@@ -192,75 +189,75 @@ typedef isc_mutex_t nodelock_t;
#define RBTDB_VIRTUAL 300
struct noqname {
- dns_name_t name;
- void * nsec;
- void * nsecsig;
+ dns_name_t name;
+ void * nsec;
+ void * nsecsig;
};
typedef struct acachectl acachectl_t;
typedef struct rdatasetheader {
- /*%
- * Locked by the owning node's lock.
- */
- rbtdb_serial_t serial;
- dns_ttl_t rdh_ttl;
- rbtdb_rdatatype_t type;
- isc_uint16_t attributes;
- dns_trust_t trust;
- struct noqname *noqname;
- /*%<
- * We don't use the LIST macros, because the LIST structure has
- * both head and tail pointers, and is doubly linked.
- */
-
- struct rdatasetheader *next;
- /*%<
- * If this is the top header for an rdataset, 'next' points
- * to the top header for the next rdataset (i.e., the next type).
- * Otherwise, it points up to the header whose down pointer points
- * at this header.
- */
-
- struct rdatasetheader *down;
- /*%<
- * Points to the header for the next older version of
- * this rdataset.
- */
-
- isc_uint32_t count;
- /*%<
- * Monotonously increased every time this rdataset is bound so that
- * it is used as the base of the starting point in DNS responses
- * when the "cyclic" rrset-order is required. Since the ordering
- * should not be so crucial, no lock is set for the counter for
- * performance reasons.
- */
-
- acachectl_t *additional_auth;
- acachectl_t *additional_glue;
-
- dns_rbtnode_t *node;
- isc_stdtime_t last_used;
- ISC_LINK(struct rdatasetheader) lru_link;
- /*%<
- * Used for LRU-based cache management. We should probably make
- * these cache-DB specific. We might also make it a pointer and
- * ensure only the top header has a valid link to save memory.
- * The linked-list is locked by the rbtdb->lrulock.
- */
-
- /*
- * It's possible this should not be here anymore, but instead
- * referenced from the bucket's heap directly.
- */
+ /*%
+ * Locked by the owning node's lock.
+ */
+ rbtdb_serial_t serial;
+ dns_ttl_t rdh_ttl;
+ rbtdb_rdatatype_t type;
+ isc_uint16_t attributes;
+ dns_trust_t trust;
+ struct noqname *noqname;
+ /*%<
+ * We don't use the LIST macros, because the LIST structure has
+ * both head and tail pointers, and is doubly linked.
+ */
+
+ struct rdatasetheader *next;
+ /*%<
+ * If this is the top header for an rdataset, 'next' points
+ * to the top header for the next rdataset (i.e., the next type).
+ * Otherwise, it points up to the header whose down pointer points
+ * at this header.
+ */
+
+ struct rdatasetheader *down;
+ /*%<
+ * Points to the header for the next older version of
+ * this rdataset.
+ */
+
+ isc_uint32_t count;
+ /*%<
+ * Monotonously increased every time this rdataset is bound so that
+ * it is used as the base of the starting point in DNS responses
+ * when the "cyclic" rrset-order is required. Since the ordering
+ * should not be so crucial, no lock is set for the counter for
+ * performance reasons.
+ */
+
+ acachectl_t *additional_auth;
+ acachectl_t *additional_glue;
+
+ dns_rbtnode_t *node;
+ isc_stdtime_t last_used;
+ ISC_LINK(struct rdatasetheader) lru_link;
+ /*%<
+ * Used for LRU-based cache management. We should probably make
+ * these cache-DB specific. We might also make it a pointer and
+ * ensure only the top header has a valid link to save memory.
+ * The linked-list is locked by the rbtdb->lrulock.
+ */
+
+ /*
+ * It's possible this should not be here anymore, but instead
+ * referenced from the bucket's heap directly.
+ */
#if 0
- isc_heap_t *heap;
+ isc_heap_t *heap;
#endif
- unsigned int heap_index;
- /*%<
- * Used for TTL-based cache cleaning.
- */
+ unsigned int heap_index;
+ /*%<
+ * Used for TTL-based cache cleaning.
+ */
} rdatasetheader_t;
typedef ISC_LIST(rdatasetheader_t) rdatasetheaderlist_t;
@@ -271,20 +268,20 @@ typedef ISC_LIST(dns_rbtnode_t) rbtnodelist_t;
#define RDATASET_ATTR_IGNORE 0x0004
#define RDATASET_ATTR_RETAIN 0x0008
#define RDATASET_ATTR_NXDOMAIN 0x0010
-#define RDATASET_ATTR_CACHE 0x1000 /* for debug */
-#define RDATASET_ATTR_CANCELED 0x2000 /* for debug */
+#define RDATASET_ATTR_RESIGN 0x0020
+#define RDATASET_ATTR_STATCOUNT 0x0040
typedef struct acache_cbarg {
- dns_rdatasetadditional_t type;
- unsigned int count;
- dns_db_t *db;
- dns_dbnode_t *node;
- rdatasetheader_t *header;
+ dns_rdatasetadditional_t type;
+ unsigned int count;
+ dns_db_t *db;
+ dns_dbnode_t *node;
+ rdatasetheader_t *header;
} acache_cbarg_t;
struct acachectl {
- dns_acacheentry_t *entry;
- acache_cbarg_t *cbarg;
+ dns_acacheentry_t *entry;
+ acache_cbarg_t *cbarg;
};
/*
@@ -298,129 +295,105 @@ struct acachectl {
#undef IGNORE /* WIN32 winbase.h defines this. */
#define EXISTS(header) \
- (((header)->attributes & RDATASET_ATTR_NONEXISTENT) == 0)
+ (((header)->attributes & RDATASET_ATTR_NONEXISTENT) == 0)
#define NONEXISTENT(header) \
- (((header)->attributes & RDATASET_ATTR_NONEXISTENT) != 0)
+ (((header)->attributes & RDATASET_ATTR_NONEXISTENT) != 0)
#define IGNORE(header) \
- (((header)->attributes & RDATASET_ATTR_IGNORE) != 0)
+ (((header)->attributes & RDATASET_ATTR_IGNORE) != 0)
#define RETAIN(header) \
- (((header)->attributes & RDATASET_ATTR_RETAIN) != 0)
+ (((header)->attributes & RDATASET_ATTR_RETAIN) != 0)
#define NXDOMAIN(header) \
- (((header)->attributes & RDATASET_ATTR_NXDOMAIN) != 0)
+ (((header)->attributes & RDATASET_ATTR_NXDOMAIN) != 0)
#define DEFAULT_NODE_LOCK_COUNT 7 /*%< Should be prime. */
#define DEFAULT_CACHE_NODE_LOCK_COUNT 1009 /*%< Should be prime. */
typedef struct {
- nodelock_t lock;
- /* Protected in the refcount routines. */
- isc_refcount_t references;
- /* Locked by lock. */
- isc_boolean_t exiting;
+ nodelock_t lock;
+ /* Protected in the refcount routines. */
+ isc_refcount_t references;
+ /* Locked by lock. */
+ isc_boolean_t exiting;
} rbtdb_nodelock_t;
typedef struct rbtdb_changed {
- dns_rbtnode_t * node;
- isc_boolean_t dirty;
- ISC_LINK(struct rbtdb_changed) link;
+ dns_rbtnode_t * node;
+ isc_boolean_t dirty;
+ ISC_LINK(struct rbtdb_changed) link;
} rbtdb_changed_t;
typedef ISC_LIST(rbtdb_changed_t) rbtdb_changedlist_t;
typedef struct rbtdb_version {
- /* Not locked */
- rbtdb_serial_t serial;
- /*
- * Protected in the refcount routines.
- * XXXJT: should we change the lock policy based on the refcount
- * performance?
- */
- isc_refcount_t references;
- /* Locked by database lock. */
- isc_boolean_t writer;
- isc_boolean_t commit_ok;
- rbtdb_changedlist_t changed_list;
- ISC_LINK(struct rbtdb_version) link;
+ /* Not locked */
+ rbtdb_serial_t serial;
+ /*
+ * Protected in the refcount routines.
+ * XXXJT: should we change the lock policy based on the refcount
+ * performance?
+ */
+ isc_refcount_t references;
+ /* Locked by database lock. */
+ isc_boolean_t writer;
+ isc_boolean_t commit_ok;
+ rbtdb_changedlist_t changed_list;
+ ISC_LINK(struct rbtdb_version) link;
} rbtdb_version_t;
typedef ISC_LIST(rbtdb_version_t) rbtdb_versionlist_t;
-#ifdef LRU_DEBUG
-/* statistics info for testing */
-struct cachestat {
- unsigned int cache_total;
- int cache_current;
- unsigned int ncache_total;
- int ncache_current;
- unsigned int a_total;
- int a_current;
- unsigned int aaaa_total;
- int aaaa_current;
- unsigned int ns_total;
- int ns_current;
- unsigned int ptr_total;
- int ptr_current;
- unsigned int glue_total;
- int glue_current;
- unsigned int additional_total;
- int additional_current;
-
- unsigned int stale_purge;
- unsigned int stale_scan;
- unsigned int stale_expire;
- unsigned int stale_lru;
-};
-#endif
-
typedef struct {
- /* Unlocked. */
- dns_db_t common;
+ /* Unlocked. */
+ dns_db_t common;
#if DNS_RBTDB_USERWLOCK
- isc_rwlock_t lock;
+ isc_rwlock_t lock;
#else
- isc_mutex_t lock;
-#endif
- isc_rwlock_t tree_lock;
- unsigned int node_lock_count;
- rbtdb_nodelock_t * node_locks;
- dns_rbtnode_t * origin_node;
- /* Locked by lock. */
- unsigned int active;
- isc_refcount_t references;
- unsigned int attributes;
- rbtdb_serial_t current_serial;
- rbtdb_serial_t least_serial;
- rbtdb_serial_t next_serial;
- rbtdb_version_t * current_version;
- rbtdb_version_t * future_version;
- rbtdb_versionlist_t open_versions;
- isc_boolean_t overmem;
- isc_task_t * task;
- dns_dbnode_t *soanode;
- dns_dbnode_t *nsnode;
-
- /*
- * This is a linked list used to implement the LRU cache. There will
- * be node_lock_count linked lists here. Nodes in bucket 1 will be
- * placed on the linked list rdatasets[1].
- */
- rdatasetheaderlist_t *rdatasets;
- rbtnodelist_t *deadnodes;
-
- /*
- * Heaps. Each of these is used for TTL based expiry.
- */
- isc_heap_t **heaps;
-
- /* Locked by tree_lock. */
- dns_rbt_t * tree;
- isc_boolean_t secure;
-
- /* Unlocked */
- unsigned int quantum;
-#ifdef LRU_DEBUG
- struct cachestat cachestat;
+ isc_mutex_t lock;
#endif
+ isc_rwlock_t tree_lock;
+ unsigned int node_lock_count;
+ rbtdb_nodelock_t * node_locks;
+ dns_rbtnode_t * origin_node;
+ dns_stats_t * rrsetstats; /* cache DB only */
+ /* Locked by lock. */
+ unsigned int active;
+ isc_refcount_t references;
+ unsigned int attributes;
+ rbtdb_serial_t current_serial;
+ rbtdb_serial_t least_serial;
+ rbtdb_serial_t next_serial;
+ rbtdb_version_t * current_version;
+ rbtdb_version_t * future_version;
+ rbtdb_versionlist_t open_versions;
+ isc_boolean_t overmem;
+ isc_task_t * task;
+ dns_dbnode_t *soanode;
+ dns_dbnode_t *nsnode;
+
+ /*
+ * This is a linked list used to implement the LRU cache. There will
+ * be node_lock_count linked lists here. Nodes in bucket 1 will be
+ * placed on the linked list rdatasets[1].
+ */
+ rdatasetheaderlist_t *rdatasets;
+
+ /*%
+ * Temporary storage for stale cache nodes and dynamically deleted
+ * nodes that await being cleaned up.
+ */
+ rbtnodelist_t *deadnodes;
+
+ /*
+ * Heaps. Each of these is used for TTL based expiry.
+ */
+ isc_heap_t **heaps;
+
+ /* Locked by tree_lock. */
+ dns_rbt_t * tree;
+ isc_boolean_t secure;
+
+ /* Unlocked */
+ unsigned int quantum;
} dns_rbtdb_t;
#define RBTDB_ATTR_LOADED 0x01
@@ -430,27 +403,27 @@ typedef struct {
* Search Context
*/
typedef struct {
- dns_rbtdb_t * rbtdb;
- rbtdb_version_t * rbtversion;
- rbtdb_serial_t serial;
- unsigned int options;
- dns_rbtnodechain_t chain;
- isc_boolean_t copy_name;
- isc_boolean_t need_cleanup;
- isc_boolean_t wild;
- dns_rbtnode_t * zonecut;
- rdatasetheader_t * zonecut_rdataset;
- rdatasetheader_t * zonecut_sigrdataset;
- dns_fixedname_t zonecut_name;
- isc_stdtime_t now;
+ dns_rbtdb_t * rbtdb;
+ rbtdb_version_t * rbtversion;
+ rbtdb_serial_t serial;
+ unsigned int options;
+ dns_rbtnodechain_t chain;
+ isc_boolean_t copy_name;
+ isc_boolean_t need_cleanup;
+ isc_boolean_t wild;
+ dns_rbtnode_t * zonecut;
+ rdatasetheader_t * zonecut_rdataset;
+ rdatasetheader_t * zonecut_sigrdataset;
+ dns_fixedname_t zonecut_name;
+ isc_stdtime_t now;
} rbtdb_search_t;
/*%
* Load Context
*/
typedef struct {
- dns_rbtdb_t * rbtdb;
- isc_stdtime_t now;
+ dns_rbtdb_t * rbtdb;
+ isc_stdtime_t now;
} rbtdb_load_t;
static void rdataset_disassociate(dns_rdataset_t *rdataset);
@@ -460,96 +433,96 @@ static void rdataset_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata);
static void rdataset_clone(dns_rdataset_t *source, dns_rdataset_t *target);
static unsigned int rdataset_count(dns_rdataset_t *rdataset);
static isc_result_t rdataset_getnoqname(dns_rdataset_t *rdataset,
- dns_name_t *name,
- dns_rdataset_t *nsec,
- dns_rdataset_t *nsecsig);
+ dns_name_t *name,
+ dns_rdataset_t *nsec,
+ dns_rdataset_t *nsecsig);
static isc_result_t rdataset_getadditional(dns_rdataset_t *rdataset,
- dns_rdatasetadditional_t type,
- dns_rdatatype_t qtype,
- dns_acache_t *acache,
- dns_zone_t **zonep,
- dns_db_t **dbp,
- dns_dbversion_t **versionp,
- dns_dbnode_t **nodep,
- dns_name_t *fname,
- dns_message_t *msg,
- isc_stdtime_t now);
+ dns_rdatasetadditional_t type,
+ dns_rdatatype_t qtype,
+ dns_acache_t *acache,
+ dns_zone_t **zonep,
+ dns_db_t **dbp,
+ dns_dbversion_t **versionp,
+ dns_dbnode_t **nodep,
+ dns_name_t *fname,
+ dns_message_t *msg,
+ isc_stdtime_t now);
static isc_result_t rdataset_setadditional(dns_rdataset_t *rdataset,
- dns_rdatasetadditional_t type,
- dns_rdatatype_t qtype,
- dns_acache_t *acache,
- dns_zone_t *zone,
- dns_db_t *db,
- dns_dbversion_t *version,
- dns_dbnode_t *node,
- dns_name_t *fname);
+ dns_rdatasetadditional_t type,
+ dns_rdatatype_t qtype,
+ dns_acache_t *acache,
+ dns_zone_t *zone,
+ dns_db_t *db,
+ dns_dbversion_t *version,
+ dns_dbnode_t *node,
+ dns_name_t *fname);
static isc_result_t rdataset_putadditional(dns_acache_t *acache,
- dns_rdataset_t *rdataset,
- dns_rdatasetadditional_t type,
- dns_rdatatype_t qtype);
+ dns_rdataset_t *rdataset,
+ dns_rdatasetadditional_t type,
+ dns_rdatatype_t qtype);
static inline isc_boolean_t need_headerupdate(rdatasetheader_t *header,
- isc_stdtime_t now);
+ isc_stdtime_t now);
static void update_header(dns_rbtdb_t *rbtdb, rdatasetheader_t *header,
- isc_stdtime_t now);
+ isc_stdtime_t now);
static void check_stale_cache(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode,
- isc_stdtime_t now, isc_boolean_t tree_locked);
+ isc_stdtime_t now, isc_boolean_t tree_locked);
static dns_rdatasetmethods_t rdataset_methods = {
- rdataset_disassociate,
- rdataset_first,
- rdataset_next,
- rdataset_current,
- rdataset_clone,
- rdataset_count,
- NULL,
- rdataset_getnoqname,
- rdataset_getadditional,
- rdataset_setadditional,
- rdataset_putadditional
+ rdataset_disassociate,
+ rdataset_first,
+ rdataset_next,
+ rdataset_current,
+ rdataset_clone,
+ rdataset_count,
+ NULL,
+ rdataset_getnoqname,
+ rdataset_getadditional,
+ rdataset_setadditional,
+ rdataset_putadditional
};
static void rdatasetiter_destroy(dns_rdatasetiter_t **iteratorp);
static isc_result_t rdatasetiter_first(dns_rdatasetiter_t *iterator);
static isc_result_t rdatasetiter_next(dns_rdatasetiter_t *iterator);
static void rdatasetiter_current(dns_rdatasetiter_t *iterator,
- dns_rdataset_t *rdataset);
+ dns_rdataset_t *rdataset);
static dns_rdatasetitermethods_t rdatasetiter_methods = {
- rdatasetiter_destroy,
- rdatasetiter_first,
- rdatasetiter_next,
- rdatasetiter_current
+ rdatasetiter_destroy,
+ rdatasetiter_first,
+ rdatasetiter_next,
+ rdatasetiter_current
};
typedef struct rbtdb_rdatasetiter {
- dns_rdatasetiter_t common;
- rdatasetheader_t * current;
+ dns_rdatasetiter_t common;
+ rdatasetheader_t * current;
} rbtdb_rdatasetiter_t;
static void dbiterator_destroy(dns_dbiterator_t **iteratorp);
static isc_result_t dbiterator_first(dns_dbiterator_t *iterator);
static isc_result_t dbiterator_last(dns_dbiterator_t *iterator);
static isc_result_t dbiterator_seek(dns_dbiterator_t *iterator,
- dns_name_t *name);
+ dns_name_t *name);
static isc_result_t dbiterator_prev(dns_dbiterator_t *iterator);
static isc_result_t dbiterator_next(dns_dbiterator_t *iterator);
static isc_result_t dbiterator_current(dns_dbiterator_t *iterator,
- dns_dbnode_t **nodep,
- dns_name_t *name);
+ dns_dbnode_t **nodep,
+ dns_name_t *name);
static isc_result_t dbiterator_pause(dns_dbiterator_t *iterator);
static isc_result_t dbiterator_origin(dns_dbiterator_t *iterator,
- dns_name_t *name);
+ dns_name_t *name);
static dns_dbiteratormethods_t dbiterator_methods = {
- dbiterator_destroy,
- dbiterator_first,
- dbiterator_last,
- dbiterator_seek,
- dbiterator_prev,
- dbiterator_next,
- dbiterator_current,
- dbiterator_pause,
- dbiterator_origin
+ dbiterator_destroy,
+ dbiterator_first,
+ dbiterator_last,
+ dbiterator_seek,
+ dbiterator_prev,
+ dbiterator_next,
+ dbiterator_current,
+ dbiterator_pause,
+ dbiterator_origin
};
#define DELETION_BATCH_MAX 64
@@ -558,17 +531,17 @@ static dns_dbiteratormethods_t dbiterator_methods = {
* If 'paused' is ISC_TRUE, then the tree lock is not being held.
*/
typedef struct rbtdb_dbiterator {
- dns_dbiterator_t common;
- isc_boolean_t paused;
- isc_boolean_t new_origin;
- isc_rwlocktype_t tree_locked;
- isc_result_t result;
- dns_fixedname_t name;
- dns_fixedname_t origin;
- dns_rbtnodechain_t chain;
- dns_rbtnode_t *node;
- dns_rbtnode_t *deletions[DELETION_BATCH_MAX];
- int delete;
+ dns_dbiterator_t common;
+ isc_boolean_t paused;
+ isc_boolean_t new_origin;
+ isc_rwlocktype_t tree_locked;
+ isc_result_t result;
+ dns_fixedname_t name;
+ dns_fixedname_t origin;
+ dns_rbtnodechain_t chain;
+ dns_rbtnode_t *node;
+ dns_rbtnode_t *deletions[DELETION_BATCH_MAX];
+ int delete;
} rbtdb_dbiterator_t;
@@ -576,7 +549,7 @@ typedef struct rbtdb_dbiterator {
#define IS_CACHE(rbtdb) (((rbtdb)->common.attributes & DNS_DBATTR_CACHE) != 0)
static void free_rbtdb(dns_rbtdb_t *rbtdb, isc_boolean_t log,
- isc_event_t *event);
+ isc_event_t *event);
static void overmem(dns_db_t *db, isc_boolean_t overmem);
/*%
@@ -621,49 +594,75 @@ static unsigned int init_count;
static void
attach(dns_db_t *source, dns_db_t **targetp) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)source;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)source;
- REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(VALID_RBTDB(rbtdb));
- isc_refcount_increment(&rbtdb->references, NULL);
+ isc_refcount_increment(&rbtdb->references, NULL);
- *targetp = source;
+ *targetp = source;
}
static void
free_rbtdb_callback(isc_task_t *task, isc_event_t *event) {
- dns_rbtdb_t *rbtdb = event->ev_arg;
+ dns_rbtdb_t *rbtdb = event->ev_arg;
+
+ UNUSED(task);
- UNUSED(task);
+ free_rbtdb(rbtdb, ISC_TRUE, event);
+}
- free_rbtdb(rbtdb, ISC_TRUE, event);
+static void
+update_rrsetstats(dns_rbtdb_t *rbtdb, rdatasetheader_t *header,
+ isc_boolean_t increment)
+{
+ dns_rdatastatstype_t statattributes = 0;
+ dns_rdatastatstype_t base = 0;
+ dns_rdatastatstype_t type;
+
+ /* At the moment we count statistics only for cache DB */
+ INSIST(IS_CACHE(rbtdb));
+
+ if (NXDOMAIN(header))
+ statattributes = DNS_RDATASTATSTYPE_ATTR_NXDOMAIN;
+ else if (RBTDB_RDATATYPE_BASE(header->type) == 0) {
+ statattributes = DNS_RDATASTATSTYPE_ATTR_NXRRSET;
+ base = RBTDB_RDATATYPE_EXT(header->type);
+ } else
+ base = RBTDB_RDATATYPE_BASE(header->type);
+
+ type = DNS_RDATASTATSTYPE_VALUE(base, statattributes);
+ if (increment)
+ dns_rdatasetstats_increment(rbtdb->rrsetstats, type);
+ else
+ dns_rdatasetstats_decrement(rbtdb->rrsetstats, type);
}
static void
set_ttl(dns_rbtdb_t *rbtdb, rdatasetheader_t *header, dns_ttl_t newttl) {
- int idx;
- isc_heap_t *heap;
- dns_ttl_t oldttl;
-
- oldttl = header->rdh_ttl;
- header->rdh_ttl = newttl;
-
- /*
- * It's possible the rbtdb is not a cache. If this is the case,
- * we will not have a heap, and we move on. If we do, though,
- * we might need to adjust things.
- */
- if (header->heap_index == 0 || newttl == oldttl)
- return;
- idx = header->node->locknum;
- if (rbtdb->heaps == NULL || rbtdb->heaps[idx] == NULL)
- return;
- heap = rbtdb->heaps[idx];
-
- if (newttl < oldttl)
- isc_heap_increased(heap, header->heap_index);
- else
- isc_heap_decreased(heap, header->heap_index);
+ int idx;
+ isc_heap_t *heap;
+ dns_ttl_t oldttl;
+
+ oldttl = header->rdh_ttl;
+ header->rdh_ttl = newttl;
+
+ /*
+ * It's possible the rbtdb is not a cache. If this is the case,
+ * we will not have a heap, and we move on. If we do, though,
+ * we might need to adjust things.
+ */
+ if (header->heap_index == 0 || newttl == oldttl)
+ return;
+ idx = header->node->locknum;
+ if (rbtdb->heaps == NULL || rbtdb->heaps[idx] == NULL)
+ return;
+ heap = rbtdb->heaps[idx];
+
+ if (newttl < oldttl)
+ isc_heap_increased(heap, header->heap_index);
+ else
+ isc_heap_decreased(heap, header->heap_index);
}
/*%
@@ -672,12 +671,12 @@ set_ttl(dns_rbtdb_t *rbtdb, rdatasetheader_t *header, dns_ttl_t newttl) {
*/
static isc_boolean_t
ttl_sooner(void *v1, void *v2) {
- rdatasetheader_t *h1 = v1;
- rdatasetheader_t *h2 = v2;
+ rdatasetheader_t *h1 = v1;
+ rdatasetheader_t *h2 = v2;
- if (h1->rdh_ttl < h2->rdh_ttl)
- return (ISC_TRUE);
- return (ISC_FALSE);
+ if (h1->rdh_ttl < h2->rdh_ttl)
+ return (ISC_TRUE);
+ return (ISC_FALSE);
}
/*%
@@ -685,9 +684,9 @@ ttl_sooner(void *v1, void *v2) {
*/
static void
ttl_set_index(void *what, unsigned int index) {
- rdatasetheader_t *h = what;
+ rdatasetheader_t *h = what;
- h->heap_index = index;
+ h->heap_index = index;
}
/*%
@@ -698,755 +697,663 @@ ttl_set_index(void *what, unsigned int index) {
*/
static unsigned int
adjust_quantum(unsigned int old, isc_time_t *start) {
- unsigned int pps = dns_pps; /* packets per second */
- unsigned int interval;
- isc_uint64_t usecs;
- isc_time_t end;
- unsigned int new;
-
- if (pps < 100)
- pps = 100;
- isc_time_now(&end);
-
- interval = 1000000 / pps; /* interval in usec */
- if (interval == 0)
- interval = 1;
- usecs = isc_time_microdiff(&end, start);
- if (usecs == 0) {
- /*
- * We were unable to measure the amount of time taken.
- * Double the nodes deleted next time.
- */
- old *= 2;
- if (old > 1000)
- old = 1000;
- return (old);
- }
- new = old * interval;
- new /= (unsigned int)usecs;
- if (new == 0)
- new = 1;
- else if (new > 1000)
- new = 1000;
-
- /* Smooth */
- new = (new + old * 3) / 4;
-
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE,
- ISC_LOG_DEBUG(1), "adjust_quantum -> %d", new);
-
- return (new);
+ unsigned int pps = dns_pps; /* packets per second */
+ unsigned int interval;
+ isc_uint64_t usecs;
+ isc_time_t end;
+ unsigned int new;
+
+ if (pps < 100)
+ pps = 100;
+ isc_time_now(&end);
+
+ interval = 1000000 / pps; /* interval in usec */
+ if (interval == 0)
+ interval = 1;
+ usecs = isc_time_microdiff(&end, start);
+ if (usecs == 0) {
+ /*
+ * We were unable to measure the amount of time taken.
+ * Double the nodes deleted next time.
+ */
+ old *= 2;
+ if (old > 1000)
+ old = 1000;
+ return (old);
+ }
+ new = old * interval;
+ new /= (unsigned int)usecs;
+ if (new == 0)
+ new = 1;
+ else if (new > 1000)
+ new = 1000;
+
+ /* Smooth */
+ new = (new + old * 3) / 4;
+
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE,
+ ISC_LOG_DEBUG(1), "adjust_quantum -> %d", new);
+
+ return (new);
}
static void
free_rbtdb(dns_rbtdb_t *rbtdb, isc_boolean_t log, isc_event_t *event) {
- unsigned int i;
- isc_ondestroy_t ondest;
- isc_result_t result;
- char buf[DNS_NAME_FORMATSIZE];
- isc_time_t start;
-
- if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in)
- overmem((dns_db_t *)rbtdb, (isc_boolean_t)-1);
-
- REQUIRE(rbtdb->current_version != NULL || EMPTY(rbtdb->open_versions));
- REQUIRE(rbtdb->future_version == NULL);
-
- if (rbtdb->current_version != NULL) {
- unsigned int refs;
-
- isc_refcount_decrement(&rbtdb->current_version->references,
- &refs);
- INSIST(refs == 0);
- UNLINK(rbtdb->open_versions, rbtdb->current_version, link);
- isc_refcount_destroy(&rbtdb->current_version->references);
- isc_mem_put(rbtdb->common.mctx, rbtdb->current_version,
- sizeof(rbtdb_version_t));
- }
- if (IS_CACHE(rbtdb)) {
- /*
- * We assume the number of remaining dead nodes is reasonably
- * small; the overhead of unlinking all nodes here should be
- * negligible.
- */
- for (i = 0; i < rbtdb->node_lock_count; i++) {
- dns_rbtnode_t *node;
-
- node = ISC_LIST_HEAD(rbtdb->deadnodes[i]);
- while (node != NULL) {
- ISC_LIST_UNLINK(rbtdb->deadnodes[i], node,
- deadlink);
- node = ISC_LIST_HEAD(rbtdb->deadnodes[i]);
- }
- }
- }
- if (event == NULL)
- rbtdb->quantum = (rbtdb->task != NULL) ? 100 : 0;
+ unsigned int i;
+ isc_ondestroy_t ondest;
+ isc_result_t result;
+ char buf[DNS_NAME_FORMATSIZE];
+ isc_time_t start;
+
+ if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in)
+ overmem((dns_db_t *)rbtdb, (isc_boolean_t)-1);
+
+ REQUIRE(rbtdb->current_version != NULL || EMPTY(rbtdb->open_versions));
+ REQUIRE(rbtdb->future_version == NULL);
+
+ if (rbtdb->current_version != NULL) {
+ unsigned int refs;
+
+ isc_refcount_decrement(&rbtdb->current_version->references,
+ &refs);
+ INSIST(refs == 0);
+ UNLINK(rbtdb->open_versions, rbtdb->current_version, link);
+ isc_refcount_destroy(&rbtdb->current_version->references);
+ isc_mem_put(rbtdb->common.mctx, rbtdb->current_version,
+ sizeof(rbtdb_version_t));
+ }
+
+ /*
+ * We assume the number of remaining dead nodes is reasonably small;
+ * the overhead of unlinking all nodes here should be negligible.
+ */
+ for (i = 0; i < rbtdb->node_lock_count; i++) {
+ dns_rbtnode_t *node;
+
+ node = ISC_LIST_HEAD(rbtdb->deadnodes[i]);
+ while (node != NULL) {
+ ISC_LIST_UNLINK(rbtdb->deadnodes[i], node, deadlink);
+ node = ISC_LIST_HEAD(rbtdb->deadnodes[i]);
+ }
+ }
+
+ if (event == NULL)
+ rbtdb->quantum = (rbtdb->task != NULL) ? 100 : 0;
again:
- if (rbtdb->tree != NULL) {
- isc_time_now(&start);
- result = dns_rbt_destroy2(&rbtdb->tree, rbtdb->quantum);
- if (result == ISC_R_QUOTA) {
- INSIST(rbtdb->task != NULL);
- if (rbtdb->quantum != 0)
- rbtdb->quantum = adjust_quantum(rbtdb->quantum,
- &start);
- if (event == NULL)
- event = isc_event_allocate(rbtdb->common.mctx,
- NULL,
- DNS_EVENT_FREESTORAGE,
- free_rbtdb_callback,
- rbtdb,
- sizeof(isc_event_t));
- if (event == NULL)
- goto again;
- isc_task_send(rbtdb->task, &event);
- return;
- }
- INSIST(result == ISC_R_SUCCESS && rbtdb->tree == NULL);
- }
- if (event != NULL)
- isc_event_free(&event);
- if (log) {
- if (dns_name_dynamic(&rbtdb->common.origin))
- dns_name_format(&rbtdb->common.origin, buf,
- sizeof(buf));
- else
- strcpy(buf, "<UNKNOWN>");
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1),
- "done free_rbtdb(%s)", buf);
- }
- if (dns_name_dynamic(&rbtdb->common.origin))
- dns_name_free(&rbtdb->common.origin, rbtdb->common.mctx);
- for (i = 0; i < rbtdb->node_lock_count; i++) {
- isc_refcount_destroy(&rbtdb->node_locks[i].references);
- NODE_DESTROYLOCK(&rbtdb->node_locks[i].lock);
- }
-
- /*
- * Clean up LRU cache objects.
- */
- if (rbtdb->rdatasets != NULL) {
- for (i = 0; i < rbtdb->node_lock_count; i++)
- INSIST(ISC_LIST_EMPTY(rbtdb->rdatasets[i]));
- isc_mem_put(rbtdb->common.mctx, rbtdb->rdatasets,
- rbtdb->node_lock_count *
- sizeof(rdatasetheaderlist_t));
- }
- /*
- * Clean up dead node buckets.
- */
- if (rbtdb->deadnodes != NULL) {
- for (i = 0; i < rbtdb->node_lock_count; i++)
- INSIST(ISC_LIST_EMPTY(rbtdb->deadnodes[i]));
- isc_mem_put(rbtdb->common.mctx, rbtdb->deadnodes,
- rbtdb->node_lock_count * sizeof(rbtnodelist_t));
- }
- /*
- * Clean up TTL heap cache objects.
- */
- if (rbtdb->heaps != NULL) {
- for (i = 0; i < rbtdb->node_lock_count; i++)
- isc_heap_destroy(&rbtdb->heaps[i]);
- isc_mem_put(rbtdb->common.mctx, rbtdb->heaps,
- rbtdb->node_lock_count *
- sizeof(isc_heap_t *));
- }
-
- isc_mem_put(rbtdb->common.mctx, rbtdb->node_locks,
- rbtdb->node_lock_count * sizeof(rbtdb_nodelock_t));
- isc_rwlock_destroy(&rbtdb->tree_lock);
- isc_refcount_destroy(&rbtdb->references);
- if (rbtdb->task != NULL)
- isc_task_detach(&rbtdb->task);
-
-#ifdef LRU_DEBUG
- /* Experimental logging about memory usage */
- if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_CACHE, ISC_LOG_INFO,
- "cache DB %p: mem inuse %lu, XXX node, "
- "%d/%u current/total cache, %d/%u neg, %d/%u A, %d/%u AAAA, "
- "%d/%u NS, %d/%u PTR, %d/%u glue, "
- "%d/%u additional, purge/scan=%u(%u expiry, %u lru)/%u, "
- "overmem=%d",
- rbtdb,
- (unsigned long)isc_mem_inuse(rbtdb->common.mctx),
- rbtdb->cachestat.cache_current, rbtdb->cachestat.cache_total,
- rbtdb->cachestat.ncache_current, rbtdb->cachestat.ncache_total,
- rbtdb->cachestat.a_current, rbtdb->cachestat.a_total,
- rbtdb->cachestat.aaaa_current, rbtdb->cachestat.aaaa_total,
- rbtdb->cachestat.ns_current, rbtdb->cachestat.ns_total,
- rbtdb->cachestat.ptr_current, rbtdb->cachestat.ptr_total,
- rbtdb->cachestat.glue_current, rbtdb->cachestat.glue_total,
- rbtdb->cachestat.additional_current,
- rbtdb->cachestat.additional_total,
- rbtdb->cachestat.stale_purge, rbtdb->cachestat.stale_expire,
- rbtdb->cachestat.stale_lru, rbtdb->cachestat.stale_scan,
- rbtdb->overmem);
- INSIST(rbtdb->cachestat.cache_current == 0);
- INSIST(rbtdb->cachestat.ncache_current == 0);
- INSIST(rbtdb->cachestat.a_current == 0);
- INSIST(rbtdb->cachestat.aaaa_current == 0);
- INSIST(rbtdb->cachestat.ns_current == 0);
- INSIST(rbtdb->cachestat.ptr_current == 0);
- INSIST(rbtdb->cachestat.glue_current == 0);
- INSIST(rbtdb->cachestat.additional_current == 0);
- }
-#endif
-
- RBTDB_DESTROYLOCK(&rbtdb->lock);
- rbtdb->common.magic = 0;
- rbtdb->common.impmagic = 0;
- ondest = rbtdb->common.ondest;
- isc_mem_putanddetach(&rbtdb->common.mctx, rbtdb, sizeof(*rbtdb));
- isc_ondestroy_notify(&ondest, rbtdb);
+ if (rbtdb->tree != NULL) {
+ isc_time_now(&start);
+ result = dns_rbt_destroy2(&rbtdb->tree, rbtdb->quantum);
+ if (result == ISC_R_QUOTA) {
+ INSIST(rbtdb->task != NULL);
+ if (rbtdb->quantum != 0)
+ rbtdb->quantum = adjust_quantum(rbtdb->quantum,
+ &start);
+ if (event == NULL)
+ event = isc_event_allocate(rbtdb->common.mctx,
+ NULL,
+ DNS_EVENT_FREESTORAGE,
+ free_rbtdb_callback,
+ rbtdb,
+ sizeof(isc_event_t));
+ if (event == NULL)
+ goto again;
+ isc_task_send(rbtdb->task, &event);
+ return;
+ }
+ INSIST(result == ISC_R_SUCCESS && rbtdb->tree == NULL);
+ }
+ if (event != NULL)
+ isc_event_free(&event);
+ if (log) {
+ if (dns_name_dynamic(&rbtdb->common.origin))
+ dns_name_format(&rbtdb->common.origin, buf,
+ sizeof(buf));
+ else
+ strcpy(buf, "<UNKNOWN>");
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
+ DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1),
+ "done free_rbtdb(%s)", buf);
+ }
+ if (dns_name_dynamic(&rbtdb->common.origin))
+ dns_name_free(&rbtdb->common.origin, rbtdb->common.mctx);
+ for (i = 0; i < rbtdb->node_lock_count; i++) {
+ isc_refcount_destroy(&rbtdb->node_locks[i].references);
+ NODE_DESTROYLOCK(&rbtdb->node_locks[i].lock);
+ }
+
+ /*
+ * Clean up LRU cache objects.
+ */
+ if (rbtdb->rdatasets != NULL) {
+ for (i = 0; i < rbtdb->node_lock_count; i++)
+ INSIST(ISC_LIST_EMPTY(rbtdb->rdatasets[i]));
+ isc_mem_put(rbtdb->common.mctx, rbtdb->rdatasets,
+ rbtdb->node_lock_count *
+ sizeof(rdatasetheaderlist_t));
+ }
+ /*
+ * Clean up dead node buckets.
+ */
+ if (rbtdb->deadnodes != NULL) {
+ for (i = 0; i < rbtdb->node_lock_count; i++)
+ INSIST(ISC_LIST_EMPTY(rbtdb->deadnodes[i]));
+ isc_mem_put(rbtdb->common.mctx, rbtdb->deadnodes,
+ rbtdb->node_lock_count * sizeof(rbtnodelist_t));
+ }
+ /*
+ * Clean up TTL heap cache objects.
+ */
+ if (rbtdb->heaps != NULL) {
+ for (i = 0; i < rbtdb->node_lock_count; i++)
+ isc_heap_destroy(&rbtdb->heaps[i]);
+ isc_mem_put(rbtdb->common.mctx, rbtdb->heaps,
+ rbtdb->node_lock_count *
+ sizeof(isc_heap_t *));
+ }
+
+ if (rbtdb->rrsetstats != NULL)
+ dns_stats_detach(&rbtdb->rrsetstats);
+
+ isc_mem_put(rbtdb->common.mctx, rbtdb->node_locks,
+ rbtdb->node_lock_count * sizeof(rbtdb_nodelock_t));
+ isc_rwlock_destroy(&rbtdb->tree_lock);
+ isc_refcount_destroy(&rbtdb->references);
+ if (rbtdb->task != NULL)
+ isc_task_detach(&rbtdb->task);
+
+ RBTDB_DESTROYLOCK(&rbtdb->lock);
+ rbtdb->common.magic = 0;
+ rbtdb->common.impmagic = 0;
+ ondest = rbtdb->common.ondest;
+ isc_mem_putanddetach(&rbtdb->common.mctx, rbtdb, sizeof(*rbtdb));
+ isc_ondestroy_notify(&ondest, rbtdb);
}
static inline void
maybe_free_rbtdb(dns_rbtdb_t *rbtdb) {
- isc_boolean_t want_free = ISC_FALSE;
- unsigned int i;
- unsigned int inactive = 0;
-
- /* XXX check for open versions here */
-
- if (rbtdb->soanode != NULL)
- dns_db_detachnode((dns_db_t *)rbtdb, &rbtdb->soanode);
- if (rbtdb->nsnode != NULL)
- dns_db_detachnode((dns_db_t *)rbtdb, &rbtdb->nsnode);
-
- /*
- * Even though there are no external direct references, there still
- * may be nodes in use.
- */
- for (i = 0; i < rbtdb->node_lock_count; i++) {
- NODE_LOCK(&rbtdb->node_locks[i].lock, isc_rwlocktype_write);
- rbtdb->node_locks[i].exiting = ISC_TRUE;
- NODE_UNLOCK(&rbtdb->node_locks[i].lock, isc_rwlocktype_write);
- if (isc_refcount_current(&rbtdb->node_locks[i].references)
- == 0) {
- inactive++;
- }
- }
-
- if (inactive != 0) {
- RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
- rbtdb->active -= inactive;
- if (rbtdb->active == 0)
- want_free = ISC_TRUE;
- RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
- if (want_free) {
- char buf[DNS_NAME_FORMATSIZE];
- if (dns_name_dynamic(&rbtdb->common.origin))
- dns_name_format(&rbtdb->common.origin, buf,
- sizeof(buf));
- else
- strcpy(buf, "<UNKNOWN>");
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1),
- "calling free_rbtdb(%s)", buf);
- free_rbtdb(rbtdb, ISC_TRUE, NULL);
- }
- }
+ isc_boolean_t want_free = ISC_FALSE;
+ unsigned int i;
+ unsigned int inactive = 0;
+
+ /* XXX check for open versions here */
+
+ if (rbtdb->soanode != NULL)
+ dns_db_detachnode((dns_db_t *)rbtdb, &rbtdb->soanode);
+ if (rbtdb->nsnode != NULL)
+ dns_db_detachnode((dns_db_t *)rbtdb, &rbtdb->nsnode);
+
+ /*
+ * Even though there are no external direct references, there still
+ * may be nodes in use.
+ */
+ for (i = 0; i < rbtdb->node_lock_count; i++) {
+ NODE_LOCK(&rbtdb->node_locks[i].lock, isc_rwlocktype_write);
+ rbtdb->node_locks[i].exiting = ISC_TRUE;
+ NODE_UNLOCK(&rbtdb->node_locks[i].lock, isc_rwlocktype_write);
+ if (isc_refcount_current(&rbtdb->node_locks[i].references)
+ == 0) {
+ inactive++;
+ }
+ }
+
+ if (inactive != 0) {
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
+ rbtdb->active -= inactive;
+ if (rbtdb->active == 0)
+ want_free = ISC_TRUE;
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
+ if (want_free) {
+ char buf[DNS_NAME_FORMATSIZE];
+ if (dns_name_dynamic(&rbtdb->common.origin))
+ dns_name_format(&rbtdb->common.origin, buf,
+ sizeof(buf));
+ else
+ strcpy(buf, "<UNKNOWN>");
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
+ DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1),
+ "calling free_rbtdb(%s)", buf);
+ free_rbtdb(rbtdb, ISC_TRUE, NULL);
+ }
+ }
}
static void
detach(dns_db_t **dbp) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(*dbp);
- unsigned int refs;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(*dbp);
+ unsigned int refs;
- REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(VALID_RBTDB(rbtdb));
- isc_refcount_decrement(&rbtdb->references, &refs);
+ isc_refcount_decrement(&rbtdb->references, &refs);
- if (refs == 0)
- maybe_free_rbtdb(rbtdb);
+ if (refs == 0)
+ maybe_free_rbtdb(rbtdb);
- *dbp = NULL;
+ *dbp = NULL;
}
static void
currentversion(dns_db_t *db, dns_dbversion_t **versionp) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- rbtdb_version_t *version;
- unsigned int refs;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ rbtdb_version_t *version;
+ unsigned int refs;
- REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(VALID_RBTDB(rbtdb));
- RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read);
- version = rbtdb->current_version;
- isc_refcount_increment(&version->references, &refs);
- RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_read);
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read);
+ version = rbtdb->current_version;
+ isc_refcount_increment(&version->references, &refs);
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_read);
- *versionp = (dns_dbversion_t *)version;
+ *versionp = (dns_dbversion_t *)version;
}
static inline rbtdb_version_t *
allocate_version(isc_mem_t *mctx, rbtdb_serial_t serial,
- unsigned int references, isc_boolean_t writer)
+ unsigned int references, isc_boolean_t writer)
{
- isc_result_t result;
- rbtdb_version_t *version;
-
- version = isc_mem_get(mctx, sizeof(*version));
- if (version == NULL)
- return (NULL);
- version->serial = serial;
- result = isc_refcount_init(&version->references, references);
- if (result != ISC_R_SUCCESS) {
- isc_mem_put(mctx, version, sizeof(*version));
- return (NULL);
- }
- version->writer = writer;
- version->commit_ok = ISC_FALSE;
- ISC_LIST_INIT(version->changed_list);
- ISC_LINK_INIT(version, link);
-
- return (version);
+ isc_result_t result;
+ rbtdb_version_t *version;
+
+ version = isc_mem_get(mctx, sizeof(*version));
+ if (version == NULL)
+ return (NULL);
+ version->serial = serial;
+ result = isc_refcount_init(&version->references, references);
+ if (result != ISC_R_SUCCESS) {
+ isc_mem_put(mctx, version, sizeof(*version));
+ return (NULL);
+ }
+ version->writer = writer;
+ version->commit_ok = ISC_FALSE;
+ ISC_LIST_INIT(version->changed_list);
+ ISC_LINK_INIT(version, link);
+
+ return (version);
}
static isc_result_t
newversion(dns_db_t *db, dns_dbversion_t **versionp) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- rbtdb_version_t *version;
-
- REQUIRE(VALID_RBTDB(rbtdb));
- REQUIRE(versionp != NULL && *versionp == NULL);
- REQUIRE(rbtdb->future_version == NULL);
-
- RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
- RUNTIME_CHECK(rbtdb->next_serial != 0); /* XXX Error? */
- version = allocate_version(rbtdb->common.mctx, rbtdb->next_serial, 1,
- ISC_TRUE);
- if (version != NULL) {
- version->commit_ok = ISC_TRUE;
- rbtdb->next_serial++;
- rbtdb->future_version = version;
- }
- RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
-
- if (version == NULL)
- return (ISC_R_NOMEMORY);
-
- *versionp = version;
-
- return (ISC_R_SUCCESS);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ rbtdb_version_t *version;
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(versionp != NULL && *versionp == NULL);
+ REQUIRE(rbtdb->future_version == NULL);
+
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
+ RUNTIME_CHECK(rbtdb->next_serial != 0); /* XXX Error? */
+ version = allocate_version(rbtdb->common.mctx, rbtdb->next_serial, 1,
+ ISC_TRUE);
+ if (version != NULL) {
+ version->commit_ok = ISC_TRUE;
+ rbtdb->next_serial++;
+ rbtdb->future_version = version;
+ }
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
+
+ if (version == NULL)
+ return (ISC_R_NOMEMORY);
+
+ *versionp = version;
+
+ return (ISC_R_SUCCESS);
}
static void
attachversion(dns_db_t *db, dns_dbversion_t *source,
- dns_dbversion_t **targetp)
+ dns_dbversion_t **targetp)
{
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- rbtdb_version_t *rbtversion = source;
- unsigned int refs;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ rbtdb_version_t *rbtversion = source;
+ unsigned int refs;
- REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(VALID_RBTDB(rbtdb));
- isc_refcount_increment(&rbtversion->references, &refs);
- INSIST(refs > 1);
+ isc_refcount_increment(&rbtversion->references, &refs);
+ INSIST(refs > 1);
- *targetp = rbtversion;
+ *targetp = rbtversion;
}
static rbtdb_changed_t *
add_changed(dns_rbtdb_t *rbtdb, rbtdb_version_t *version,
- dns_rbtnode_t *node)
+ dns_rbtnode_t *node)
{
- rbtdb_changed_t *changed;
- unsigned int refs;
+ rbtdb_changed_t *changed;
+ unsigned int refs;
- /*
- * Caller must be holding the node lock if its reference must be
- * protected by the lock.
- */
+ /*
+ * Caller must be holding the node lock if its reference must be
+ * protected by the lock.
+ */
- changed = isc_mem_get(rbtdb->common.mctx, sizeof(*changed));
+ changed = isc_mem_get(rbtdb->common.mctx, sizeof(*changed));
- RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
- REQUIRE(version->writer);
+ REQUIRE(version->writer);
- if (changed != NULL) {
- dns_rbtnode_refincrement(node, &refs);
- INSIST(refs != 0);
- changed->node = node;
- changed->dirty = ISC_FALSE;
- ISC_LIST_INITANDAPPEND(version->changed_list, changed, link);
- } else
- version->commit_ok = ISC_FALSE;
+ if (changed != NULL) {
+ dns_rbtnode_refincrement(node, &refs);
+ INSIST(refs != 0);
+ changed->node = node;
+ changed->dirty = ISC_FALSE;
+ ISC_LIST_INITANDAPPEND(version->changed_list, changed, link);
+ } else
+ version->commit_ok = ISC_FALSE;
- RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
- return (changed);
+ return (changed);
}
static void
free_acachearray(isc_mem_t *mctx, rdatasetheader_t *header,
- acachectl_t *array)
+ acachectl_t *array)
{
- unsigned int count;
- unsigned int i;
- unsigned char *raw; /* RDATASLAB */
+ unsigned int count;
+ unsigned int i;
+ unsigned char *raw; /* RDATASLAB */
- /*
- * The caller must be holding the corresponding node lock.
- */
+ /*
+ * The caller must be holding the corresponding node lock.
+ */
- if (array == NULL)
- return;
+ if (array == NULL)
+ return;
- raw = (unsigned char *)header + sizeof(*header);
- count = raw[0] * 256 + raw[1];
+ raw = (unsigned char *)header + sizeof(*header);
+ count = raw[0] * 256 + raw[1];
- /*
- * Sanity check: since an additional cache entry has a reference to
- * the original DB node (in the callback arg), there should be no
- * acache entries when the node can be freed.
- */
- for (i = 0; i < count; i++)
- INSIST(array[i].entry == NULL && array[i].cbarg == NULL);
+ /*
+ * Sanity check: since an additional cache entry has a reference to
+ * the original DB node (in the callback arg), there should be no
+ * acache entries when the node can be freed.
+ */
+ for (i = 0; i < count; i++)
+ INSIST(array[i].entry == NULL && array[i].cbarg == NULL);
- isc_mem_put(mctx, array, count * sizeof(acachectl_t));
+ isc_mem_put(mctx, array, count * sizeof(acachectl_t));
}
static inline void
free_noqname(isc_mem_t *mctx, struct noqname **noqname) {
- if (dns_name_dynamic(&(*noqname)->name))
- dns_name_free(&(*noqname)->name, mctx);
- if ((*noqname)->nsec != NULL)
- isc_mem_put(mctx, (*noqname)->nsec,
- dns_rdataslab_size((*noqname)->nsec, 0));
- if ((*noqname)->nsecsig != NULL)
- isc_mem_put(mctx, (*noqname)->nsecsig,
- dns_rdataslab_size((*noqname)->nsecsig, 0));
- isc_mem_put(mctx, *noqname, sizeof(**noqname));
- *noqname = NULL;
+ if (dns_name_dynamic(&(*noqname)->name))
+ dns_name_free(&(*noqname)->name, mctx);
+ if ((*noqname)->nsec != NULL)
+ isc_mem_put(mctx, (*noqname)->nsec,
+ dns_rdataslab_size((*noqname)->nsec, 0));
+ if ((*noqname)->nsecsig != NULL)
+ isc_mem_put(mctx, (*noqname)->nsecsig,
+ dns_rdataslab_size((*noqname)->nsecsig, 0));
+ isc_mem_put(mctx, *noqname, sizeof(**noqname));
+ *noqname = NULL;
}
static inline void
init_rdataset(dns_rbtdb_t *rbtdb, rdatasetheader_t *h)
{
- ISC_LINK_INIT(h, lru_link);
- h->heap_index = 0;
+ ISC_LINK_INIT(h, lru_link);
+ h->heap_index = 0;
#if TRACE_HEADER
- if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in)
- fprintf(stderr, "initialized header: %p\n", h);
+ if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in)
+ fprintf(stderr, "initialized header: %p\n", h);
#else
- UNUSED(rbtdb);
+ UNUSED(rbtdb);
#endif
}
static inline rdatasetheader_t *
new_rdataset(dns_rbtdb_t *rbtdb, isc_mem_t *mctx)
{
- rdatasetheader_t *h;
+ rdatasetheader_t *h;
- h = isc_mem_get(mctx, sizeof(*h));
- if (h == NULL)
- return (NULL);
+ h = isc_mem_get(mctx, sizeof(*h));
+ if (h == NULL)
+ return (NULL);
#if TRACE_HEADER
- if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in)
- fprintf(stderr, "allocated header: %p\n", h);
+ if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in)
+ fprintf(stderr, "allocated header: %p\n", h);
#endif
- init_rdataset(rbtdb, h);
- return (h);
+ init_rdataset(rbtdb, h);
+ return (h);
}
static inline void
free_rdataset(dns_rbtdb_t *rbtdb, isc_mem_t *mctx, rdatasetheader_t *rdataset)
{
- unsigned int size;
-
-#ifdef LRU_DEBUG
- /*
- * for debug: statistics update.
- * Nothing in this block should have any side-effects.
- */
- if (EXISTS(rdataset) &&
- (rdataset->attributes & RDATASET_ATTR_CACHE) != 0) {
- rbtdb->cachestat.cache_current--;
- if ((rdataset->attributes & RDATASET_ATTR_CANCELED) != 0)
- rbtdb->cachestat.cache_total--;
- if (RBTDB_RDATATYPE_BASE(rdataset->type) == 0) {
- rbtdb->cachestat.ncache_current--;
- INSIST(rbtdb->cachestat.ncache_current >= 0);
- if ((rdataset->attributes & RDATASET_ATTR_CANCELED)
- != 0)
- rbtdb->cachestat.ncache_total--;
- }
- if (rdataset->type == dns_rdatatype_a) {
- rbtdb->cachestat.a_current--;
- INSIST(rbtdb->cachestat.a_current >= 0);
- if ((rdataset->attributes & RDATASET_ATTR_CANCELED)
- != 0)
- rbtdb->cachestat.a_total--;
- } else if (rdataset->type == dns_rdatatype_aaaa) {
- rbtdb->cachestat.aaaa_current--;
- INSIST(rbtdb->cachestat.aaaa_current >= 0);
- if ((rdataset->attributes & RDATASET_ATTR_CANCELED)
- != 0)
- rbtdb->cachestat.aaaa_total--;
- } else if (rdataset->type == dns_rdatatype_ptr) {
- rbtdb->cachestat.ptr_current--;
- INSIST(rbtdb->cachestat.ptr_current >= 0);
- if ((rdataset->attributes & RDATASET_ATTR_CANCELED)
- != 0)
- rbtdb->cachestat.ptr_total--;
- } else if (rdataset->type == dns_rdatatype_ns) {
- rbtdb->cachestat.ns_current--;
- INSIST(rbtdb->cachestat.ns_current >= 0);
- if ((rdataset->attributes & RDATASET_ATTR_CANCELED)
- != 0)
- rbtdb->cachestat.ns_total--;
- }
- if (rdataset->trust == dns_trust_glue &&
- (rdataset->type == dns_rdatatype_a ||
- rdataset->type == dns_rdatatype_aaaa)) {
- rbtdb->cachestat.glue_current--;
- INSIST(rbtdb->cachestat.glue_current >= 0);
- if ((rdataset->attributes & RDATASET_ATTR_CANCELED)
- != 0)
- rbtdb->cachestat.glue_total--;
- }
- if (rdataset->trust == dns_trust_additional &&
- (rdataset->type == dns_rdatatype_a ||
- rdataset->type == dns_rdatatype_aaaa)) {
- rbtdb->cachestat.additional_current--;
- INSIST(rbtdb->cachestat.additional_current >= 0);
- if ((rdataset->attributes & RDATASET_ATTR_CANCELED)
- != 0)
- rbtdb->cachestat.additional_total--;
- }
- }
-#endif
-
- if (IS_CACHE(rbtdb) && ISC_LINK_LINKED(rdataset, lru_link)) {
- int idx = rdataset->node->locknum;
- ISC_LIST_UNLINK(rbtdb->rdatasets[idx], rdataset, lru_link);
- if (rdataset->heap_index != 0) {
- isc_heap_delete(rbtdb->heaps[idx],
- rdataset->heap_index);
- }
- rdataset->heap_index = 0;
- }
-
- if (rdataset->noqname != NULL)
- free_noqname(mctx, &rdataset->noqname);
-
- free_acachearray(mctx, rdataset, rdataset->additional_auth);
- free_acachearray(mctx, rdataset, rdataset->additional_glue);
-
- if ((rdataset->attributes & RDATASET_ATTR_NONEXISTENT) != 0)
- size = sizeof(*rdataset);
- else
- size = dns_rdataslab_size((unsigned char *)rdataset,
- sizeof(*rdataset));
- isc_mem_put(mctx, rdataset, size);
+ unsigned int size;
+
+ if (EXISTS(rdataset) &&
+ (rdataset->attributes & RDATASET_ATTR_STATCOUNT) != 0) {
+ update_rrsetstats(rbtdb, rdataset, ISC_FALSE);
+ }
+
+ if (IS_CACHE(rbtdb) && ISC_LINK_LINKED(rdataset, lru_link)) {
+ int idx = rdataset->node->locknum;
+ ISC_LIST_UNLINK(rbtdb->rdatasets[idx], rdataset, lru_link);
+ if (rdataset->heap_index != 0) {
+ isc_heap_delete(rbtdb->heaps[idx],
+ rdataset->heap_index);
+ }
+ rdataset->heap_index = 0;
+ }
+
+ if (rdataset->noqname != NULL)
+ free_noqname(mctx, &rdataset->noqname);
+
+ free_acachearray(mctx, rdataset, rdataset->additional_auth);
+ free_acachearray(mctx, rdataset, rdataset->additional_glue);
+
+ if ((rdataset->attributes & RDATASET_ATTR_NONEXISTENT) != 0)
+ size = sizeof(*rdataset);
+ else
+ size = dns_rdataslab_size((unsigned char *)rdataset,
+ sizeof(*rdataset));
+ isc_mem_put(mctx, rdataset, size);
}
static inline void
rollback_node(dns_rbtnode_t *node, rbtdb_serial_t serial) {
- rdatasetheader_t *header, *dcurrent;
- isc_boolean_t make_dirty = ISC_FALSE;
-
- /*
- * Caller must hold the node lock.
- */
-
- /*
- * We set the IGNORE attribute on rdatasets with serial number
- * 'serial'. When the reference count goes to zero, these rdatasets
- * will be cleaned up; until that time, they will be ignored.
- */
- for (header = node->data; header != NULL; header = header->next) {
- if (header->serial == serial) {
- header->attributes |= RDATASET_ATTR_IGNORE;
- make_dirty = ISC_TRUE;
- }
- for (dcurrent = header->down;
- dcurrent != NULL;
- dcurrent = dcurrent->down) {
- if (dcurrent->serial == serial) {
- dcurrent->attributes |= RDATASET_ATTR_IGNORE;
- make_dirty = ISC_TRUE;
- }
- }
- }
- if (make_dirty)
- node->dirty = 1;
+ rdatasetheader_t *header, *dcurrent;
+ isc_boolean_t make_dirty = ISC_FALSE;
+
+ /*
+ * Caller must hold the node lock.
+ */
+
+ /*
+ * We set the IGNORE attribute on rdatasets with serial number
+ * 'serial'. When the reference count goes to zero, these rdatasets
+ * will be cleaned up; until that time, they will be ignored.
+ */
+ for (header = node->data; header != NULL; header = header->next) {
+ if (header->serial == serial) {
+ header->attributes |= RDATASET_ATTR_IGNORE;
+ make_dirty = ISC_TRUE;
+ }
+ for (dcurrent = header->down;
+ dcurrent != NULL;
+ dcurrent = dcurrent->down) {
+ if (dcurrent->serial == serial) {
+ dcurrent->attributes |= RDATASET_ATTR_IGNORE;
+ make_dirty = ISC_TRUE;
+ }
+ }
+ }
+ if (make_dirty)
+ node->dirty = 1;
}
static inline void
clean_stale_headers(dns_rbtdb_t *rbtdb, isc_mem_t *mctx, rdatasetheader_t *top)
{
- rdatasetheader_t *d, *down_next;
+ rdatasetheader_t *d, *down_next;
- for (d = top->down; d != NULL; d = down_next) {
- down_next = d->down;
- free_rdataset(rbtdb, mctx, d);
- }
- top->down = NULL;
+ for (d = top->down; d != NULL; d = down_next) {
+ down_next = d->down;
+ free_rdataset(rbtdb, mctx, d);
+ }
+ top->down = NULL;
}
static inline void
clean_cache_node(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node) {
- rdatasetheader_t *current, *top_prev, *top_next;
- isc_mem_t *mctx = rbtdb->common.mctx;
-
- /*
- * Caller must be holding the node lock.
- */
-
- top_prev = NULL;
- for (current = node->data; current != NULL; current = top_next) {
- top_next = current->next;
- clean_stale_headers(rbtdb, mctx, current);
- /*
- * If current is nonexistent or stale, we can clean it up.
- */
- if ((current->attributes &
- (RDATASET_ATTR_NONEXISTENT|RDATASET_ATTR_STALE)) != 0) {
- if (top_prev != NULL)
- top_prev->next = current->next;
- else
- node->data = current->next;
- free_rdataset(rbtdb, mctx, current);
- } else
- top_prev = current;
- }
- node->dirty = 0;
+ rdatasetheader_t *current, *top_prev, *top_next;
+ isc_mem_t *mctx = rbtdb->common.mctx;
+
+ /*
+ * Caller must be holding the node lock.
+ */
+
+ top_prev = NULL;
+ for (current = node->data; current != NULL; current = top_next) {
+ top_next = current->next;
+ clean_stale_headers(rbtdb, mctx, current);
+ /*
+ * If current is nonexistent or stale, we can clean it up.
+ */
+ if ((current->attributes &
+ (RDATASET_ATTR_NONEXISTENT|RDATASET_ATTR_STALE)) != 0) {
+ if (top_prev != NULL)
+ top_prev->next = current->next;
+ else
+ node->data = current->next;
+ free_rdataset(rbtdb, mctx, current);
+ } else
+ top_prev = current;
+ }
+ node->dirty = 0;
}
static inline void
clean_zone_node(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node,
- rbtdb_serial_t least_serial)
+ rbtdb_serial_t least_serial)
{
- rdatasetheader_t *current, *dcurrent, *down_next, *dparent;
- rdatasetheader_t *top_prev, *top_next;
- isc_mem_t *mctx = rbtdb->common.mctx;
- isc_boolean_t still_dirty = ISC_FALSE;
-
- /*
- * Caller must be holding the node lock.
- */
- REQUIRE(least_serial != 0);
-
- top_prev = NULL;
- for (current = node->data; current != NULL; current = top_next) {
- top_next = current->next;
-
- /*
- * First, we clean up any instances of multiple rdatasets
- * with the same serial number, or that have the IGNORE
- * attribute.
- */
- dparent = current;
- for (dcurrent = current->down;
- dcurrent != NULL;
- dcurrent = down_next) {
- down_next = dcurrent->down;
- INSIST(dcurrent->serial <= dparent->serial);
- if (dcurrent->serial == dparent->serial ||
- IGNORE(dcurrent)) {
- if (down_next != NULL)
- down_next->next = dparent;
- dparent->down = down_next;
- free_rdataset(rbtdb, mctx, dcurrent);
- } else
- dparent = dcurrent;
- }
-
- /*
- * We've now eliminated all IGNORE datasets with the possible
- * exception of current, which we now check.
- */
- if (IGNORE(current)) {
- down_next = current->down;
- if (down_next == NULL) {
- if (top_prev != NULL)
- top_prev->next = current->next;
- else
- node->data = current->next;
- free_rdataset(rbtdb, mctx, current);
- /*
- * current no longer exists, so we can
- * just continue with the loop.
- */
- continue;
- } else {
- /*
- * Pull up current->down, making it the new
- * current.
- */
- if (top_prev != NULL)
- top_prev->next = down_next;
- else
- node->data = down_next;
- down_next->next = top_next;
- free_rdataset(rbtdb, mctx, current);
- current = down_next;
- }
- }
-
- /*
- * We now try to find the first down node less than the
- * least serial.
- */
- dparent = current;
- for (dcurrent = current->down;
- dcurrent != NULL;
- dcurrent = down_next) {
- down_next = dcurrent->down;
- if (dcurrent->serial < least_serial)
- break;
- dparent = dcurrent;
- }
-
- /*
- * If there is a such an rdataset, delete it and any older
- * versions.
- */
- if (dcurrent != NULL) {
- do {
- down_next = dcurrent->down;
- INSIST(dcurrent->serial <= least_serial);
- free_rdataset(rbtdb, mctx, dcurrent);
- dcurrent = down_next;
- } while (dcurrent != NULL);
- dparent->down = NULL;
- }
-
- /*
- * Note. The serial number of 'current' might be less than
- * least_serial too, but we cannot delete it because it is
- * the most recent version, unless it is a NONEXISTENT
- * rdataset.
- */
- if (current->down != NULL) {
- still_dirty = ISC_TRUE;
- top_prev = current;
- } else {
- /*
- * If this is a NONEXISTENT rdataset, we can delete it.
- */
- if (NONEXISTENT(current)) {
- if (top_prev != NULL)
- top_prev->next = current->next;
- else
- node->data = current->next;
- free_rdataset(rbtdb, mctx, current);
- } else
- top_prev = current;
- }
- }
- if (!still_dirty)
- node->dirty = 0;
+ rdatasetheader_t *current, *dcurrent, *down_next, *dparent;
+ rdatasetheader_t *top_prev, *top_next;
+ isc_mem_t *mctx = rbtdb->common.mctx;
+ isc_boolean_t still_dirty = ISC_FALSE;
+
+ /*
+ * Caller must be holding the node lock.
+ */
+ REQUIRE(least_serial != 0);
+
+ top_prev = NULL;
+ for (current = node->data; current != NULL; current = top_next) {
+ top_next = current->next;
+
+ /*
+ * First, we clean up any instances of multiple rdatasets
+ * with the same serial number, or that have the IGNORE
+ * attribute.
+ */
+ dparent = current;
+ for (dcurrent = current->down;
+ dcurrent != NULL;
+ dcurrent = down_next) {
+ down_next = dcurrent->down;
+ INSIST(dcurrent->serial <= dparent->serial);
+ if (dcurrent->serial == dparent->serial ||
+ IGNORE(dcurrent)) {
+ if (down_next != NULL)
+ down_next->next = dparent;
+ dparent->down = down_next;
+ free_rdataset(rbtdb, mctx, dcurrent);
+ } else
+ dparent = dcurrent;
+ }
+
+ /*
+ * We've now eliminated all IGNORE datasets with the possible
+ * exception of current, which we now check.
+ */
+ if (IGNORE(current)) {
+ down_next = current->down;
+ if (down_next == NULL) {
+ if (top_prev != NULL)
+ top_prev->next = current->next;
+ else
+ node->data = current->next;
+ free_rdataset(rbtdb, mctx, current);
+ /*
+ * current no longer exists, so we can
+ * just continue with the loop.
+ */
+ continue;
+ } else {
+ /*
+ * Pull up current->down, making it the new
+ * current.
+ */
+ if (top_prev != NULL)
+ top_prev->next = down_next;
+ else
+ node->data = down_next;
+ down_next->next = top_next;
+ free_rdataset(rbtdb, mctx, current);
+ current = down_next;
+ }
+ }
+
+ /*
+ * We now try to find the first down node less than the
+ * least serial.
+ */
+ dparent = current;
+ for (dcurrent = current->down;
+ dcurrent != NULL;
+ dcurrent = down_next) {
+ down_next = dcurrent->down;
+ if (dcurrent->serial < least_serial)
+ break;
+ dparent = dcurrent;
+ }
+
+ /*
+ * If there is a such an rdataset, delete it and any older
+ * versions.
+ */
+ if (dcurrent != NULL) {
+ do {
+ down_next = dcurrent->down;
+ INSIST(dcurrent->serial <= least_serial);
+ free_rdataset(rbtdb, mctx, dcurrent);
+ dcurrent = down_next;
+ } while (dcurrent != NULL);
+ dparent->down = NULL;
+ }
+
+ /*
+ * Note. The serial number of 'current' might be less than
+ * least_serial too, but we cannot delete it because it is
+ * the most recent version, unless it is a NONEXISTENT
+ * rdataset.
+ */
+ if (current->down != NULL) {
+ still_dirty = ISC_TRUE;
+ top_prev = current;
+ } else {
+ /*
+ * If this is a NONEXISTENT rdataset, we can delete it.
+ */
+ if (NONEXISTENT(current)) {
+ if (top_prev != NULL)
+ top_prev->next = current->next;
+ else
+ node->data = current->next;
+ free_rdataset(rbtdb, mctx, current);
+ } else
+ top_prev = current;
+ }
+ }
+ if (!still_dirty)
+ node->dirty = 0;
}
/*%
@@ -1459,31 +1366,31 @@ clean_zone_node(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node,
*/
static void
cleanup_dead_nodes(dns_rbtdb_t *rbtdb, int bucketnum) {
- dns_rbtnode_t *node;
- isc_result_t result;
- int count = 10; /* XXXJT: should be adjustable */
-
- node = ISC_LIST_HEAD(rbtdb->deadnodes[bucketnum]);
- while (node != NULL && count > 0) {
- ISC_LIST_UNLINK(rbtdb->deadnodes[bucketnum], node, deadlink);
-
- /*
- * Since we're holding a tree write lock, it should be
- * impossible for this node to be referenced by others.
- */
- INSIST(dns_rbtnode_refcurrent(node) == 0 &&
- node->data == NULL);
-
- result = dns_rbt_deletenode(rbtdb->tree, node, ISC_FALSE);
- if (result != ISC_R_SUCCESS)
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_CACHE, ISC_LOG_WARNING,
- "cleanup_dead_nodes: "
- "dns_rbt_deletenode: %s",
- isc_result_totext(result));
- node = ISC_LIST_HEAD(rbtdb->deadnodes[bucketnum]);
- count--;
- }
+ dns_rbtnode_t *node;
+ isc_result_t result;
+ int count = 10; /* XXXJT: should be adjustable */
+
+ node = ISC_LIST_HEAD(rbtdb->deadnodes[bucketnum]);
+ while (node != NULL && count > 0) {
+ ISC_LIST_UNLINK(rbtdb->deadnodes[bucketnum], node, deadlink);
+
+ /*
+ * Since we're holding a tree write lock, it should be
+ * impossible for this node to be referenced by others.
+ */
+ INSIST(dns_rbtnode_refcurrent(node) == 0 &&
+ node->data == NULL);
+
+ result = dns_rbt_deletenode(rbtdb->tree, node, ISC_FALSE);
+ if (result != ISC_R_SUCCESS)
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
+ DNS_LOGMODULE_CACHE, ISC_LOG_WARNING,
+ "cleanup_dead_nodes: "
+ "dns_rbt_deletenode: %s",
+ isc_result_totext(result));
+ node = ISC_LIST_HEAD(rbtdb->deadnodes[bucketnum]);
+ count--;
+ }
}
/*
@@ -1492,16 +1399,16 @@ cleanup_dead_nodes(dns_rbtdb_t *rbtdb, int bucketnum) {
*/
static inline void
new_reference(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node) {
- unsigned int lockrefs, noderefs;
- isc_refcount_t *lockref;
-
- dns_rbtnode_refincrement0(node, &noderefs);
- if (noderefs == 1) { /* this is the first reference to the node */
- lockref = &rbtdb->node_locks[node->locknum].references;
- isc_refcount_increment0(lockref, &lockrefs);
- INSIST(lockrefs != 0);
- }
- INSIST(noderefs != 0);
+ unsigned int lockrefs, noderefs;
+ isc_refcount_t *lockref;
+
+ dns_rbtnode_refincrement0(node, &noderefs);
+ if (noderefs == 1) { /* this is the first reference to the node */
+ lockref = &rbtdb->node_locks[node->locknum].references;
+ isc_refcount_increment0(lockref, &lockrefs);
+ INSIST(lockrefs != 0);
+ }
+ INSIST(noderefs != 0);
}
/*
@@ -1516,428 +1423,445 @@ new_reference(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node) {
*/
static isc_boolean_t
decrement_reference(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node,
- rbtdb_serial_t least_serial,
- isc_rwlocktype_t nlock, isc_rwlocktype_t tlock)
+ rbtdb_serial_t least_serial,
+ isc_rwlocktype_t nlock, isc_rwlocktype_t tlock)
{
- isc_result_t result;
- isc_boolean_t write_locked;
- rbtdb_nodelock_t *nodelock;
- unsigned int refs, nrefs;
- int bucket = node->locknum;
-
- nodelock = &rbtdb->node_locks[bucket];
-
- /* Handle easy and typical case first. */
- if (!node->dirty && (node->data != NULL || node->down != NULL)) {
- dns_rbtnode_refdecrement(node, &nrefs);
- INSIST((int)nrefs >= 0);
- if (nrefs == 0) {
- isc_refcount_decrement(&nodelock->references, &refs);
- INSIST((int)refs >= 0);
- }
- return ((nrefs == 0) ? ISC_TRUE : ISC_FALSE);
- }
-
- /* Upgrade the lock? */
- if (nlock == isc_rwlocktype_read) {
- NODE_WEAKUNLOCK(&nodelock->lock, isc_rwlocktype_read);
- NODE_WEAKLOCK(&nodelock->lock, isc_rwlocktype_write);
- }
- dns_rbtnode_refdecrement(node, &nrefs);
- INSIST((int)nrefs >= 0);
- if (nrefs > 0) {
- /* Restore the lock? */
- if (nlock == isc_rwlocktype_read)
- NODE_WEAKDOWNGRADE(&nodelock->lock);
- return (ISC_FALSE);
- }
-
- if (node->dirty && dns_rbtnode_refcurrent(node) == 0) {
- if (IS_CACHE(rbtdb))
- clean_cache_node(rbtdb, node);
- else {
- if (least_serial == 0) {
- /*
- * Caller doesn't know the least serial.
- * Get it.
- */
- RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read);
- least_serial = rbtdb->least_serial;
- RBTDB_UNLOCK(&rbtdb->lock,
- isc_rwlocktype_read);
- }
- clean_zone_node(rbtdb, node, least_serial);
- }
- }
-
- isc_refcount_decrement(&nodelock->references, &refs);
- INSIST((int)refs >= 0);
-
- /*
- * XXXDCL should this only be done for cache zones?
- */
- if (node->data != NULL || node->down != NULL) {
- /* Restore the lock? */
- if (nlock == isc_rwlocktype_read)
- NODE_WEAKDOWNGRADE(&nodelock->lock);
- return (ISC_TRUE);
- }
-
- /*
- * Attempt to switch to a write lock on the tree. If this fails,
- * we will add this node to a linked list of nodes in this locking
- * bucket which we will free later.
- */
- if (tlock != isc_rwlocktype_write) {
- /*
- * Locking hierarchy notwithstanding, we don't need to free
- * the node lock before acquiring the tree write lock because
- * we only do a trylock.
- */
- if (tlock == isc_rwlocktype_read)
- result = isc_rwlock_tryupgrade(&rbtdb->tree_lock);
- else
- result = isc_rwlock_trylock(&rbtdb->tree_lock,
- isc_rwlocktype_write);
- RUNTIME_CHECK(result == ISC_R_SUCCESS ||
- result == ISC_R_LOCKBUSY);
-
- write_locked = ISC_TF(result == ISC_R_SUCCESS);
- } else
- write_locked = ISC_TRUE;
-
- if (write_locked && dns_rbtnode_refcurrent(node) == 0) {
- /*
- * We can now delete the node if the reference counter is
- * zero. This should be typically the case, but a different
- * thread may still gain a (new) reference just before the
- * current thread locks the tree (e.g., in findnode()).
- */
-
- if (isc_log_wouldlog(dns_lctx, ISC_LOG_DEBUG(1))) {
- char printname[DNS_NAME_FORMATSIZE];
-
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1),
- "decrement_reference: "
- "delete from rbt: %p %s",
- node,
- dns_rbt_formatnodename(node, printname,
- sizeof(printname)));
- }
-
- result = dns_rbt_deletenode(rbtdb->tree, node, ISC_FALSE);
- if (result != ISC_R_SUCCESS)
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_CACHE, ISC_LOG_WARNING,
- "decrement_reference: "
- "dns_rbt_deletenode: %s",
- isc_result_totext(result));
- } else if (dns_rbtnode_refcurrent(node) == 0) {
- INSIST(!ISC_LINK_LINKED(node, deadlink));
- ISC_LIST_APPEND(rbtdb->deadnodes[bucket], node, deadlink);
- }
-
- /* Restore the lock? */
- if (nlock == isc_rwlocktype_read)
- NODE_WEAKDOWNGRADE(&nodelock->lock);
-
- /*
- * Relock a read lock, or unlock the write lock if no lock was held.
- */
- if (tlock == isc_rwlocktype_none)
- if (write_locked)
- RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
-
- if (tlock == isc_rwlocktype_read)
- if (write_locked)
- isc_rwlock_downgrade(&rbtdb->tree_lock);
-
- return (ISC_TRUE);
+ isc_result_t result;
+ isc_boolean_t write_locked;
+ rbtdb_nodelock_t *nodelock;
+ unsigned int refs, nrefs;
+ int bucket = node->locknum;
+
+ nodelock = &rbtdb->node_locks[bucket];
+
+ /* Handle easy and typical case first. */
+ if (!node->dirty && (node->data != NULL || node->down != NULL)) {
+ dns_rbtnode_refdecrement(node, &nrefs);
+ INSIST((int)nrefs >= 0);
+ if (nrefs == 0) {
+ isc_refcount_decrement(&nodelock->references, &refs);
+ INSIST((int)refs >= 0);
+ }
+ return ((nrefs == 0) ? ISC_TRUE : ISC_FALSE);
+ }
+
+ /* Upgrade the lock? */
+ if (nlock == isc_rwlocktype_read) {
+ NODE_WEAKUNLOCK(&nodelock->lock, isc_rwlocktype_read);
+ NODE_WEAKLOCK(&nodelock->lock, isc_rwlocktype_write);
+ }
+ dns_rbtnode_refdecrement(node, &nrefs);
+ INSIST((int)nrefs >= 0);
+ if (nrefs > 0) {
+ /* Restore the lock? */
+ if (nlock == isc_rwlocktype_read)
+ NODE_WEAKDOWNGRADE(&nodelock->lock);
+ return (ISC_FALSE);
+ }
+
+ if (node->dirty && dns_rbtnode_refcurrent(node) == 0) {
+ if (IS_CACHE(rbtdb))
+ clean_cache_node(rbtdb, node);
+ else {
+ if (least_serial == 0) {
+ /*
+ * Caller doesn't know the least serial.
+ * Get it.
+ */
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read);
+ least_serial = rbtdb->least_serial;
+ RBTDB_UNLOCK(&rbtdb->lock,
+ isc_rwlocktype_read);
+ }
+ clean_zone_node(rbtdb, node, least_serial);
+ }
+ }
+
+ isc_refcount_decrement(&nodelock->references, &refs);
+ INSIST((int)refs >= 0);
+
+ /*
+ * XXXDCL should this only be done for cache zones?
+ */
+ if (node->data != NULL || node->down != NULL) {
+ /* Restore the lock? */
+ if (nlock == isc_rwlocktype_read)
+ NODE_WEAKDOWNGRADE(&nodelock->lock);
+ return (ISC_TRUE);
+ }
+
+ /*
+ * Attempt to switch to a write lock on the tree. If this fails,
+ * we will add this node to a linked list of nodes in this locking
+ * bucket which we will free later.
+ */
+ if (tlock != isc_rwlocktype_write) {
+ /*
+ * Locking hierarchy notwithstanding, we don't need to free
+ * the node lock before acquiring the tree write lock because
+ * we only do a trylock.
+ */
+ if (tlock == isc_rwlocktype_read)
+ result = isc_rwlock_tryupgrade(&rbtdb->tree_lock);
+ else
+ result = isc_rwlock_trylock(&rbtdb->tree_lock,
+ isc_rwlocktype_write);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS ||
+ result == ISC_R_LOCKBUSY);
+
+ write_locked = ISC_TF(result == ISC_R_SUCCESS);
+ } else
+ write_locked = ISC_TRUE;
+
+ if (write_locked && dns_rbtnode_refcurrent(node) == 0) {
+ /*
+ * We can now delete the node if the reference counter is
+ * zero. This should be typically the case, but a different
+ * thread may still gain a (new) reference just before the
+ * current thread locks the tree (e.g., in findnode()).
+ */
+
+ if (isc_log_wouldlog(dns_lctx, ISC_LOG_DEBUG(1))) {
+ char printname[DNS_NAME_FORMATSIZE];
+
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
+ DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1),
+ "decrement_reference: "
+ "delete from rbt: %p %s",
+ node,
+ dns_rbt_formatnodename(node, printname,
+ sizeof(printname)));
+ }
+
+ result = dns_rbt_deletenode(rbtdb->tree, node, ISC_FALSE);
+ if (result != ISC_R_SUCCESS)
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
+ DNS_LOGMODULE_CACHE, ISC_LOG_WARNING,
+ "decrement_reference: "
+ "dns_rbt_deletenode: %s",
+ isc_result_totext(result));
+ } else if (dns_rbtnode_refcurrent(node) == 0) {
+ INSIST(!ISC_LINK_LINKED(node, deadlink));
+ ISC_LIST_APPEND(rbtdb->deadnodes[bucket], node, deadlink);
+ }
+
+ /* Restore the lock? */
+ if (nlock == isc_rwlocktype_read)
+ NODE_WEAKDOWNGRADE(&nodelock->lock);
+
+ /*
+ * Relock a read lock, or unlock the write lock if no lock was held.
+ */
+ if (tlock == isc_rwlocktype_none)
+ if (write_locked)
+ RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
+
+ if (tlock == isc_rwlocktype_read)
+ if (write_locked)
+ isc_rwlock_downgrade(&rbtdb->tree_lock);
+
+ return (ISC_TRUE);
}
static inline void
make_least_version(dns_rbtdb_t *rbtdb, rbtdb_version_t *version,
- rbtdb_changedlist_t *cleanup_list)
+ rbtdb_changedlist_t *cleanup_list)
{
- /*
- * Caller must be holding the database lock.
- */
+ /*
+ * Caller must be holding the database lock.
+ */
- rbtdb->least_serial = version->serial;
- *cleanup_list = version->changed_list;
- ISC_LIST_INIT(version->changed_list);
+ rbtdb->least_serial = version->serial;
+ *cleanup_list = version->changed_list;
+ ISC_LIST_INIT(version->changed_list);
}
static inline void
cleanup_nondirty(rbtdb_version_t *version, rbtdb_changedlist_t *cleanup_list) {
- rbtdb_changed_t *changed, *next_changed;
-
- /*
- * If the changed record is dirty, then
- * an update created multiple versions of
- * a given rdataset. We keep this list
- * until we're the least open version, at
- * which point it's safe to get rid of any
- * older versions.
- *
- * If the changed record isn't dirty, then
- * we don't need it anymore since we're
- * committing and not rolling back.
- *
- * The caller must be holding the database lock.
- */
- for (changed = HEAD(version->changed_list);
- changed != NULL;
- changed = next_changed) {
- next_changed = NEXT(changed, link);
- if (!changed->dirty) {
- UNLINK(version->changed_list,
- changed, link);
- APPEND(*cleanup_list,
- changed, link);
- }
- }
+ rbtdb_changed_t *changed, *next_changed;
+
+ /*
+ * If the changed record is dirty, then
+ * an update created multiple versions of
+ * a given rdataset. We keep this list
+ * until we're the least open version, at
+ * which point it's safe to get rid of any
+ * older versions.
+ *
+ * If the changed record isn't dirty, then
+ * we don't need it anymore since we're
+ * committing and not rolling back.
+ *
+ * The caller must be holding the database lock.
+ */
+ for (changed = HEAD(version->changed_list);
+ changed != NULL;
+ changed = next_changed) {
+ next_changed = NEXT(changed, link);
+ if (!changed->dirty) {
+ UNLINK(version->changed_list,
+ changed, link);
+ APPEND(*cleanup_list,
+ changed, link);
+ }
+ }
}
static isc_boolean_t
iszonesecure(dns_db_t *db, dns_dbnode_t *origin) {
- dns_rdataset_t keyset;
- dns_rdataset_t nsecset, signsecset;
- isc_boolean_t haszonekey = ISC_FALSE;
- isc_boolean_t hasnsec = ISC_FALSE;
- isc_result_t result;
-
- dns_rdataset_init(&keyset);
- result = dns_db_findrdataset(db, origin, NULL, dns_rdatatype_dnskey, 0,
- 0, &keyset, NULL);
- if (result == ISC_R_SUCCESS) {
- dns_rdata_t keyrdata = DNS_RDATA_INIT;
- result = dns_rdataset_first(&keyset);
- while (result == ISC_R_SUCCESS) {
- dns_rdataset_current(&keyset, &keyrdata);
- if (dns_zonekey_iszonekey(&keyrdata)) {
- haszonekey = ISC_TRUE;
- break;
- }
- result = dns_rdataset_next(&keyset);
- }
- dns_rdataset_disassociate(&keyset);
- }
- if (!haszonekey)
- return (ISC_FALSE);
-
- dns_rdataset_init(&nsecset);
- dns_rdataset_init(&signsecset);
- result = dns_db_findrdataset(db, origin, NULL, dns_rdatatype_nsec, 0,
- 0, &nsecset, &signsecset);
- if (result == ISC_R_SUCCESS) {
- if (dns_rdataset_isassociated(&signsecset)) {
- hasnsec = ISC_TRUE;
- dns_rdataset_disassociate(&signsecset);
- }
- dns_rdataset_disassociate(&nsecset);
- }
- return (hasnsec);
+ dns_rdataset_t keyset;
+ dns_rdataset_t nsecset, signsecset;
+ isc_boolean_t haszonekey = ISC_FALSE;
+ isc_boolean_t hasnsec = ISC_FALSE;
+ isc_result_t result;
+
+ dns_rdataset_init(&keyset);
+ result = dns_db_findrdataset(db, origin, NULL, dns_rdatatype_dnskey, 0,
+ 0, &keyset, NULL);
+ if (result == ISC_R_SUCCESS) {
+ dns_rdata_t keyrdata = DNS_RDATA_INIT;
+ result = dns_rdataset_first(&keyset);
+ while (result == ISC_R_SUCCESS) {
+ dns_rdataset_current(&keyset, &keyrdata);
+ if (dns_zonekey_iszonekey(&keyrdata)) {
+ haszonekey = ISC_TRUE;
+ break;
+ }
+ result = dns_rdataset_next(&keyset);
+ }
+ dns_rdataset_disassociate(&keyset);
+ }
+ if (!haszonekey)
+ return (ISC_FALSE);
+
+ dns_rdataset_init(&nsecset);
+ dns_rdataset_init(&signsecset);
+ result = dns_db_findrdataset(db, origin, NULL, dns_rdatatype_nsec, 0,
+ 0, &nsecset, &signsecset);
+ if (result == ISC_R_SUCCESS) {
+ if (dns_rdataset_isassociated(&signsecset)) {
+ hasnsec = ISC_TRUE;
+ dns_rdataset_disassociate(&signsecset);
+ }
+ dns_rdataset_disassociate(&nsecset);
+ }
+ return (hasnsec);
}
static void
closeversion(dns_db_t *db, dns_dbversion_t **versionp, isc_boolean_t commit) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- rbtdb_version_t *version, *cleanup_version, *least_greater;
- isc_boolean_t rollback = ISC_FALSE;
- rbtdb_changedlist_t cleanup_list;
- rbtdb_changed_t *changed, *next_changed;
- rbtdb_serial_t serial, least_serial;
- dns_rbtnode_t *rbtnode;
- unsigned int refs;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ rbtdb_version_t *version, *cleanup_version, *least_greater;
+ isc_boolean_t rollback = ISC_FALSE;
+ rbtdb_changedlist_t cleanup_list;
+ rbtdb_changed_t *changed, *next_changed;
+ rbtdb_serial_t serial, least_serial;
+ dns_rbtnode_t *rbtnode;
+ unsigned int refs;
isc_boolean_t writer;
- REQUIRE(VALID_RBTDB(rbtdb));
- version = (rbtdb_version_t *)*versionp;
-
- cleanup_version = NULL;
- ISC_LIST_INIT(cleanup_list);
-
- isc_refcount_decrement(&version->references, &refs);
- if (refs > 0) { /* typical and easy case first */
- if (commit) {
- RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read);
- INSIST(!version->writer);
- RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_read);
- }
- goto end;
- }
-
- RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
- serial = version->serial;
- writer = version->writer;
- if (version->writer) {
- if (commit) {
- unsigned cur_ref;
- rbtdb_version_t *cur_version;
-
- INSIST(version->commit_ok);
- INSIST(version == rbtdb->future_version);
- /*
- * The current version is going to be replaced.
- * Release the (likely last) reference to it from the
- * DB itself and unlink it from the open list.
- */
- cur_version = rbtdb->current_version;
- isc_refcount_decrement(&cur_version->references,
- &cur_ref);
- if (cur_ref == 0) {
- if (cur_version->serial == rbtdb->least_serial)
- INSIST(EMPTY(cur_version->changed_list));
- UNLINK(rbtdb->open_versions,
- cur_version, link);
- }
- if (EMPTY(rbtdb->open_versions)) {
- /*
- * We're going to become the least open
- * version.
- */
- make_least_version(rbtdb, version,
- &cleanup_list);
- } else {
- /*
- * Some other open version is the
- * least version. We can't cleanup
- * records that were changed in this
- * version because the older versions
- * may still be in use by an open
- * version.
- *
- * We can, however, discard the
- * changed records for things that
- * we've added that didn't exist in
- * prior versions.
- */
- cleanup_nondirty(version, &cleanup_list);
- }
- /*
- * If the (soon to be former) current version
- * isn't being used by anyone, we can clean
- * it up.
- */
- if (cur_ref == 0) {
- cleanup_version = cur_version;
- APPENDLIST(version->changed_list,
- cleanup_version->changed_list,
- link);
- }
- /*
- * Become the current version.
- */
- version->writer = ISC_FALSE;
- rbtdb->current_version = version;
- rbtdb->current_serial = version->serial;
- rbtdb->future_version = NULL;
-
- /*
- * Keep the current version in the open list, and
- * gain a reference for the DB itself (see the DB
- * creation function below). This must be the only
- * case where we need to increment the counter from
- * zero and need to use isc_refcount_increment0().
- */
- isc_refcount_increment0(&version->references,
- &cur_ref);
- INSIST(cur_ref == 1);
- PREPEND(rbtdb->open_versions,
- rbtdb->current_version, link);
- } else {
- /*
- * We're rolling back this transaction.
- */
- cleanup_list = version->changed_list;
- ISC_LIST_INIT(version->changed_list);
- rollback = ISC_TRUE;
- cleanup_version = version;
- rbtdb->future_version = NULL;
- }
- } else {
- if (version != rbtdb->current_version) {
- /*
- * There are no external or internal references
- * to this version and it can be cleaned up.
- */
- cleanup_version = version;
-
- /*
- * Find the version with the least serial
- * number greater than ours.
- */
- least_greater = PREV(version, link);
- if (least_greater == NULL)
- least_greater = rbtdb->current_version;
-
- INSIST(version->serial < least_greater->serial);
- /*
- * Is this the least open version?
- */
- if (version->serial == rbtdb->least_serial) {
- /*
- * Yes. Install the new least open
- * version.
- */
- make_least_version(rbtdb,
- least_greater,
- &cleanup_list);
- } else {
- /*
- * Add any unexecuted cleanups to
- * those of the least greater version.
- */
- APPENDLIST(least_greater->changed_list,
- version->changed_list,
- link);
- }
- } else if (version->serial == rbtdb->least_serial)
- INSIST(EMPTY(version->changed_list));
- UNLINK(rbtdb->open_versions, version, link);
- }
- least_serial = rbtdb->least_serial;
- RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
-
- /*
- * Update the zone's secure status.
- */
- if (writer && commit && !IS_CACHE(rbtdb))
- rbtdb->secure = iszonesecure(db, rbtdb->origin_node);
-
- if (cleanup_version != NULL) {
- INSIST(EMPTY(cleanup_version->changed_list));
- isc_mem_put(rbtdb->common.mctx, cleanup_version,
- sizeof(*cleanup_version));
- }
-
- if (!EMPTY(cleanup_list)) {
- for (changed = HEAD(cleanup_list);
- changed != NULL;
- changed = next_changed) {
- nodelock_t *lock;
-
- next_changed = NEXT(changed, link);
- rbtnode = changed->node;
- lock = &rbtdb->node_locks[rbtnode->locknum].lock;
-
- NODE_LOCK(lock, isc_rwlocktype_write);
- if (rollback)
- rollback_node(rbtnode, serial);
- decrement_reference(rbtdb, rbtnode, least_serial,
- isc_rwlocktype_write,
- isc_rwlocktype_none);
- NODE_UNLOCK(lock, isc_rwlocktype_write);
-
- isc_mem_put(rbtdb->common.mctx, changed,
- sizeof(*changed));
- }
- }
+ REQUIRE(VALID_RBTDB(rbtdb));
+ version = (rbtdb_version_t *)*versionp;
+
+ cleanup_version = NULL;
+ ISC_LIST_INIT(cleanup_list);
+
+ isc_refcount_decrement(&version->references, &refs);
+ if (refs > 0) { /* typical and easy case first */
+ if (commit) {
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read);
+ INSIST(!version->writer);
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_read);
+ }
+ goto end;
+ }
+
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
+ serial = version->serial;
+ writer = version->writer;
+ if (version->writer) {
+ if (commit) {
+ unsigned cur_ref;
+ rbtdb_version_t *cur_version;
+
+ INSIST(version->commit_ok);
+ INSIST(version == rbtdb->future_version);
+ /*
+ * The current version is going to be replaced.
+ * Release the (likely last) reference to it from the
+ * DB itself and unlink it from the open list.
+ */
+ cur_version = rbtdb->current_version;
+ isc_refcount_decrement(&cur_version->references,
+ &cur_ref);
+ if (cur_ref == 0) {
+ if (cur_version->serial == rbtdb->least_serial)
+ INSIST(EMPTY(cur_version->changed_list));
+ UNLINK(rbtdb->open_versions,
+ cur_version, link);
+ }
+ if (EMPTY(rbtdb->open_versions)) {
+ /*
+ * We're going to become the least open
+ * version.
+ */
+ make_least_version(rbtdb, version,
+ &cleanup_list);
+ } else {
+ /*
+ * Some other open version is the
+ * least version. We can't cleanup
+ * records that were changed in this
+ * version because the older versions
+ * may still be in use by an open
+ * version.
+ *
+ * We can, however, discard the
+ * changed records for things that
+ * we've added that didn't exist in
+ * prior versions.
+ */
+ cleanup_nondirty(version, &cleanup_list);
+ }
+ /*
+ * If the (soon to be former) current version
+ * isn't being used by anyone, we can clean
+ * it up.
+ */
+ if (cur_ref == 0) {
+ cleanup_version = cur_version;
+ APPENDLIST(version->changed_list,
+ cleanup_version->changed_list,
+ link);
+ }
+ /*
+ * Become the current version.
+ */
+ version->writer = ISC_FALSE;
+ rbtdb->current_version = version;
+ rbtdb->current_serial = version->serial;
+ rbtdb->future_version = NULL;
+
+ /*
+ * Keep the current version in the open list, and
+ * gain a reference for the DB itself (see the DB
+ * creation function below). This must be the only
+ * case where we need to increment the counter from
+ * zero and need to use isc_refcount_increment0().
+ */
+ isc_refcount_increment0(&version->references,
+ &cur_ref);
+ INSIST(cur_ref == 1);
+ PREPEND(rbtdb->open_versions,
+ rbtdb->current_version, link);
+ } else {
+ /*
+ * We're rolling back this transaction.
+ */
+ cleanup_list = version->changed_list;
+ ISC_LIST_INIT(version->changed_list);
+ rollback = ISC_TRUE;
+ cleanup_version = version;
+ rbtdb->future_version = NULL;
+ }
+ } else {
+ if (version != rbtdb->current_version) {
+ /*
+ * There are no external or internal references
+ * to this version and it can be cleaned up.
+ */
+ cleanup_version = version;
+
+ /*
+ * Find the version with the least serial
+ * number greater than ours.
+ */
+ least_greater = PREV(version, link);
+ if (least_greater == NULL)
+ least_greater = rbtdb->current_version;
+
+ INSIST(version->serial < least_greater->serial);
+ /*
+ * Is this the least open version?
+ */
+ if (version->serial == rbtdb->least_serial) {
+ /*
+ * Yes. Install the new least open
+ * version.
+ */
+ make_least_version(rbtdb,
+ least_greater,
+ &cleanup_list);
+ } else {
+ /*
+ * Add any unexecuted cleanups to
+ * those of the least greater version.
+ */
+ APPENDLIST(least_greater->changed_list,
+ version->changed_list,
+ link);
+ }
+ } else if (version->serial == rbtdb->least_serial)
+ INSIST(EMPTY(version->changed_list));
+ UNLINK(rbtdb->open_versions, version, link);
+ }
+ least_serial = rbtdb->least_serial;
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
+
+ /*
+ * Update the zone's secure status.
+ */
+ if (writer && commit && !IS_CACHE(rbtdb))
+ rbtdb->secure = iszonesecure(db, rbtdb->origin_node);
+
+ if (cleanup_version != NULL) {
+ INSIST(EMPTY(cleanup_version->changed_list));
+ isc_mem_put(rbtdb->common.mctx, cleanup_version,
+ sizeof(*cleanup_version));
+ }
+
+ if (!EMPTY(cleanup_list)) {
+ /*
+ * We acquire a tree write lock here in order to make sure
+ * that stale nodes will be removed in decrement_reference().
+ * If we didn't have the lock, those nodes could miss the
+ * chance to be removed until the server stops. The write lock
+ * is expensive, but this event should be rare enough to justify
+ * the cost.
+ */
+ RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
+ for (changed = HEAD(cleanup_list);
+ changed != NULL;
+ changed = next_changed) {
+ nodelock_t *lock;
+
+ next_changed = NEXT(changed, link);
+ rbtnode = changed->node;
+ lock = &rbtdb->node_locks[rbtnode->locknum].lock;
+
+ NODE_LOCK(lock, isc_rwlocktype_write);
+ /*
+ * This is a good opportunity to purge any dead nodes,
+ * so use it.
+ */
+ cleanup_dead_nodes(rbtdb, rbtnode->locknum);
+
+ if (rollback)
+ rollback_node(rbtnode, serial);
+ decrement_reference(rbtdb, rbtnode, least_serial,
+ isc_rwlocktype_write,
+ isc_rwlocktype_write);
+
+ NODE_UNLOCK(lock, isc_rwlocktype_write);
+
+ isc_mem_put(rbtdb->common.mctx, changed,
+ sizeof(*changed));
+ }
+ RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
+ }
end:
- *versionp = NULL;
+ *versionp = NULL;
}
/*
@@ -1955,4130 +1879,4032 @@ closeversion(dns_db_t *db, dns_dbversion_t **versionp, isc_boolean_t commit) {
*/
static isc_result_t
add_wildcard_magic(dns_rbtdb_t *rbtdb, dns_name_t *name) {
- isc_result_t result;
- dns_name_t foundname;
- dns_offsets_t offsets;
- unsigned int n;
- dns_rbtnode_t *node = NULL;
-
- dns_name_init(&foundname, offsets);
- n = dns_name_countlabels(name);
- INSIST(n >= 2);
- n--;
- dns_name_getlabelsequence(name, 1, n, &foundname);
- result = dns_rbt_addnode(rbtdb->tree, &foundname, &node);
- if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS)
- return (result);
- node->find_callback = 1;
- node->wild = 1;
- return (ISC_R_SUCCESS);
+ isc_result_t result;
+ dns_name_t foundname;
+ dns_offsets_t offsets;
+ unsigned int n;
+ dns_rbtnode_t *node = NULL;
+
+ dns_name_init(&foundname, offsets);
+ n = dns_name_countlabels(name);
+ INSIST(n >= 2);
+ n--;
+ dns_name_getlabelsequence(name, 1, n, &foundname);
+ result = dns_rbt_addnode(rbtdb->tree, &foundname, &node);
+ if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS)
+ return (result);
+ node->find_callback = 1;
+ node->wild = 1;
+ return (ISC_R_SUCCESS);
}
static isc_result_t
add_empty_wildcards(dns_rbtdb_t *rbtdb, dns_name_t *name) {
- isc_result_t result;
- dns_name_t foundname;
- dns_offsets_t offsets;
- unsigned int n, l, i;
-
- dns_name_init(&foundname, offsets);
- n = dns_name_countlabels(name);
- l = dns_name_countlabels(&rbtdb->common.origin);
- i = l + 1;
- while (i < n) {
- dns_rbtnode_t *node = NULL; /* dummy */
- dns_name_getlabelsequence(name, n - i, i, &foundname);
- if (dns_name_iswildcard(&foundname)) {
- result = add_wildcard_magic(rbtdb, &foundname);
- if (result != ISC_R_SUCCESS)
- return (result);
- result = dns_rbt_addnode(rbtdb->tree, &foundname,
- &node);
- if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS)
- return (result);
- }
- i++;
- }
- return (ISC_R_SUCCESS);
+ isc_result_t result;
+ dns_name_t foundname;
+ dns_offsets_t offsets;
+ unsigned int n, l, i;
+
+ dns_name_init(&foundname, offsets);
+ n = dns_name_countlabels(name);
+ l = dns_name_countlabels(&rbtdb->common.origin);
+ i = l + 1;
+ while (i < n) {
+ dns_rbtnode_t *node = NULL; /* dummy */
+ dns_name_getlabelsequence(name, n - i, i, &foundname);
+ if (dns_name_iswildcard(&foundname)) {
+ result = add_wildcard_magic(rbtdb, &foundname);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ result = dns_rbt_addnode(rbtdb->tree, &foundname,
+ &node);
+ if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS)
+ return (result);
+ }
+ i++;
+ }
+ return (ISC_R_SUCCESS);
}
static isc_result_t
findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
- dns_dbnode_t **nodep)
+ dns_dbnode_t **nodep)
{
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- dns_rbtnode_t *node = NULL;
- dns_name_t nodename;
- isc_result_t result;
- isc_rwlocktype_t locktype = isc_rwlocktype_read;
-
- REQUIRE(VALID_RBTDB(rbtdb));
-
- dns_name_init(&nodename, NULL);
- RWLOCK(&rbtdb->tree_lock, locktype);
- result = dns_rbt_findnode(rbtdb->tree, name, NULL, &node, NULL,
- DNS_RBTFIND_EMPTYDATA, NULL, NULL);
- if (result != ISC_R_SUCCESS) {
- RWUNLOCK(&rbtdb->tree_lock, locktype);
- if (!create) {
- if (result == DNS_R_PARTIALMATCH)
- result = ISC_R_NOTFOUND;
- return (result);
- }
- /*
- * It would be nice to try to upgrade the lock instead of
- * unlocking then relocking.
- */
- locktype = isc_rwlocktype_write;
- RWLOCK(&rbtdb->tree_lock, locktype);
- node = NULL;
- result = dns_rbt_addnode(rbtdb->tree, name, &node);
- if (result == ISC_R_SUCCESS) {
- dns_rbt_namefromnode(node, &nodename);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ dns_rbtnode_t *node = NULL;
+ dns_name_t nodename;
+ isc_result_t result;
+ isc_rwlocktype_t locktype = isc_rwlocktype_read;
+ isc_boolean_t need_relock;
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+
+ dns_name_init(&nodename, NULL);
+ RWLOCK(&rbtdb->tree_lock, locktype);
+ result = dns_rbt_findnode(rbtdb->tree, name, NULL, &node, NULL,
+ DNS_RBTFIND_EMPTYDATA, NULL, NULL);
+ if (result != ISC_R_SUCCESS) {
+ RWUNLOCK(&rbtdb->tree_lock, locktype);
+ if (!create) {
+ if (result == DNS_R_PARTIALMATCH)
+ result = ISC_R_NOTFOUND;
+ return (result);
+ }
+ /*
+ * It would be nice to try to upgrade the lock instead of
+ * unlocking then relocking.
+ */
+ locktype = isc_rwlocktype_write;
+ RWLOCK(&rbtdb->tree_lock, locktype);
+ node = NULL;
+ result = dns_rbt_addnode(rbtdb->tree, name, &node);
+ if (result == ISC_R_SUCCESS) {
+ dns_rbt_namefromnode(node, &nodename);
#ifdef DNS_RBT_USEHASH
- node->locknum = node->hashval % rbtdb->node_lock_count;
+ node->locknum = node->hashval % rbtdb->node_lock_count;
#else
- node->locknum = dns_name_hash(&nodename, ISC_TRUE) %
- rbtdb->node_lock_count;
+ node->locknum = dns_name_hash(&nodename, ISC_TRUE) %
+ rbtdb->node_lock_count;
#endif
- add_empty_wildcards(rbtdb, name);
-
- if (dns_name_iswildcard(name)) {
- result = add_wildcard_magic(rbtdb, name);
- if (result != ISC_R_SUCCESS) {
- RWUNLOCK(&rbtdb->tree_lock, locktype);
- return (result);
- }
- }
- } else if (result != ISC_R_EXISTS) {
- RWUNLOCK(&rbtdb->tree_lock, locktype);
- return (result);
- }
- }
- NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock);
- new_reference(rbtdb, node);
-
- /*
- * If the node just found is in the deadnode list, we need to retrieve
- * it from the list because we are going to use the node. There are
- * other cases where a node is newly referenced, but this should be
- * the only case where it can be in the deadnode list. Also, if we
- * happen to hold a write lock on the tree, it's a good chance to purge
- * dead nodes.
- */
- if (IS_CACHE(rbtdb)) {
- isc_boolean_t need_relock = ISC_FALSE;
-
- NODE_WEAKLOCK(&rbtdb->node_locks[node->locknum].lock,
- isc_rwlocktype_read);
- if (ISC_LINK_LINKED(node, deadlink) && isc_rwlocktype_write)
- need_relock = ISC_TRUE;
- else if (!ISC_LIST_EMPTY(rbtdb->deadnodes[node->locknum]) &&
- locktype == isc_rwlocktype_write)
- need_relock = ISC_TRUE;
- NODE_WEAKUNLOCK(&rbtdb->node_locks[node->locknum].lock,
- isc_rwlocktype_read);
- if (need_relock) {
- NODE_WEAKLOCK(&rbtdb->node_locks[node->locknum].lock,
- isc_rwlocktype_write);
- if (ISC_LINK_LINKED(node, deadlink))
- ISC_LIST_UNLINK(rbtdb->deadnodes[node->locknum],
- node, deadlink);
- if (locktype == isc_rwlocktype_write)
- cleanup_dead_nodes(rbtdb, node->locknum);
- NODE_WEAKUNLOCK(&rbtdb->node_locks[node->locknum].lock,
- isc_rwlocktype_write);
- }
- }
-
- NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock);
- RWUNLOCK(&rbtdb->tree_lock, locktype);
-
- *nodep = (dns_dbnode_t *)node;
-
- return (ISC_R_SUCCESS);
+ add_empty_wildcards(rbtdb, name);
+
+ if (dns_name_iswildcard(name)) {
+ result = add_wildcard_magic(rbtdb, name);
+ if (result != ISC_R_SUCCESS) {
+ RWUNLOCK(&rbtdb->tree_lock, locktype);
+ return (result);
+ }
+ }
+ } else if (result != ISC_R_EXISTS) {
+ RWUNLOCK(&rbtdb->tree_lock, locktype);
+ return (result);
+ }
+ }
+ NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock);
+ new_reference(rbtdb, node);
+
+ /*
+ * If the node just found is in the deadnode list, we need to retrieve
+ * it from the list because we are going to use the node. There are
+ * other cases where a node is newly referenced, but this should be
+ * the only case where it can be in the deadnode list. Also, if we
+ * happen to hold a write lock on the tree, it's a good chance to purge
+ * dead nodes.
+ */
+ need_relock = ISC_FALSE;
+ NODE_WEAKLOCK(&rbtdb->node_locks[node->locknum].lock,
+ isc_rwlocktype_read);
+ if (ISC_LINK_LINKED(node, deadlink) && isc_rwlocktype_write)
+ need_relock = ISC_TRUE;
+ else if (!ISC_LIST_EMPTY(rbtdb->deadnodes[node->locknum]) &&
+ locktype == isc_rwlocktype_write)
+ need_relock = ISC_TRUE;
+ NODE_WEAKUNLOCK(&rbtdb->node_locks[node->locknum].lock,
+ isc_rwlocktype_read);
+ if (need_relock) {
+ NODE_WEAKLOCK(&rbtdb->node_locks[node->locknum].lock,
+ isc_rwlocktype_write);
+ if (ISC_LINK_LINKED(node, deadlink))
+ ISC_LIST_UNLINK(rbtdb->deadnodes[node->locknum],
+ node, deadlink);
+ if (locktype == isc_rwlocktype_write)
+ cleanup_dead_nodes(rbtdb, node->locknum);
+ NODE_WEAKUNLOCK(&rbtdb->node_locks[node->locknum].lock,
+ isc_rwlocktype_write);
+ }
+
+ NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock);
+ RWUNLOCK(&rbtdb->tree_lock, locktype);
+
+ *nodep = (dns_dbnode_t *)node;
+
+ return (ISC_R_SUCCESS);
}
static isc_result_t
zone_zonecut_callback(dns_rbtnode_t *node, dns_name_t *name, void *arg) {
- rbtdb_search_t *search = arg;
- rdatasetheader_t *header, *header_next;
- rdatasetheader_t *dname_header, *sigdname_header, *ns_header;
- rdatasetheader_t *found;
- isc_result_t result;
- dns_rbtnode_t *onode;
-
- /*
- * We only want to remember the topmost zone cut, since it's the one
- * that counts, so we'll just continue if we've already found a
- * zonecut.
- */
- if (search->zonecut != NULL)
- return (DNS_R_CONTINUE);
-
- found = NULL;
- result = DNS_R_CONTINUE;
- onode = search->rbtdb->origin_node;
-
- NODE_LOCK(&(search->rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
-
- /*
- * Look for an NS or DNAME rdataset active in our version.
- */
- ns_header = NULL;
- dname_header = NULL;
- sigdname_header = NULL;
- for (header = node->data; header != NULL; header = header_next) {
- header_next = header->next;
- if (header->type == dns_rdatatype_ns ||
- header->type == dns_rdatatype_dname ||
- header->type == RBTDB_RDATATYPE_SIGDNAME) {
- do {
- if (header->serial <= search->serial &&
- !IGNORE(header)) {
- /*
- * Is this a "this rdataset doesn't
- * exist" record?
- */
- if (NONEXISTENT(header))
- header = NULL;
- break;
- } else
- header = header->down;
- } while (header != NULL);
- if (header != NULL) {
- if (header->type == dns_rdatatype_dname)
- dname_header = header;
- else if (header->type ==
- RBTDB_RDATATYPE_SIGDNAME)
- sigdname_header = header;
- else if (node != onode ||
- IS_STUB(search->rbtdb)) {
- /*
- * We've found an NS rdataset that
- * isn't at the origin node. We check
- * that they're not at the origin node,
- * because otherwise we'd erroneously
- * treat the zone top as if it were
- * a delegation.
- */
- ns_header = header;
- }
- }
- }
- }
-
- /*
- * Did we find anything?
- */
- if (dname_header != NULL) {
- /*
- * Note that DNAME has precedence over NS if both exist.
- */
- found = dname_header;
- search->zonecut_sigrdataset = sigdname_header;
- } else if (ns_header != NULL) {
- found = ns_header;
- search->zonecut_sigrdataset = NULL;
- }
-
- if (found != NULL) {
- /*
- * We increment the reference count on node to ensure that
- * search->zonecut_rdataset will still be valid later.
- */
- new_reference(search->rbtdb, node);
- search->zonecut = node;
- search->zonecut_rdataset = found;
- search->need_cleanup = ISC_TRUE;
- /*
- * Since we've found a zonecut, anything beneath it is
- * glue and is not subject to wildcard matching, so we
- * may clear search->wild.
- */
- search->wild = ISC_FALSE;
- if ((search->options & DNS_DBFIND_GLUEOK) == 0) {
- /*
- * If the caller does not want to find glue, then
- * this is the best answer and the search should
- * stop now.
- */
- result = DNS_R_PARTIALMATCH;
- } else {
- dns_name_t *zcname;
-
- /*
- * The search will continue beneath the zone cut.
- * This may or may not be the best match. In case it
- * is, we need to remember the node name.
- */
- zcname = dns_fixedname_name(&search->zonecut_name);
- RUNTIME_CHECK(dns_name_copy(name, zcname, NULL) ==
- ISC_R_SUCCESS);
- search->copy_name = ISC_TRUE;
- }
- } else {
- /*
- * There is no zonecut at this node which is active in this
- * version.
- *
- * If this is a "wild" node and the caller hasn't disabled
- * wildcard matching, remember that we've seen a wild node
- * in case we need to go searching for wildcard matches
- * later on.
- */
- if (node->wild && (search->options & DNS_DBFIND_NOWILD) == 0)
- search->wild = ISC_TRUE;
- }
-
- NODE_UNLOCK(&(search->rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
-
- return (result);
+ rbtdb_search_t *search = arg;
+ rdatasetheader_t *header, *header_next;
+ rdatasetheader_t *dname_header, *sigdname_header, *ns_header;
+ rdatasetheader_t *found;
+ isc_result_t result;
+ dns_rbtnode_t *onode;
+
+ /*
+ * We only want to remember the topmost zone cut, since it's the one
+ * that counts, so we'll just continue if we've already found a
+ * zonecut.
+ */
+ if (search->zonecut != NULL)
+ return (DNS_R_CONTINUE);
+
+ found = NULL;
+ result = DNS_R_CONTINUE;
+ onode = search->rbtdb->origin_node;
+
+ NODE_LOCK(&(search->rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+
+ /*
+ * Look for an NS or DNAME rdataset active in our version.
+ */
+ ns_header = NULL;
+ dname_header = NULL;
+ sigdname_header = NULL;
+ for (header = node->data; header != NULL; header = header_next) {
+ header_next = header->next;
+ if (header->type == dns_rdatatype_ns ||
+ header->type == dns_rdatatype_dname ||
+ header->type == RBTDB_RDATATYPE_SIGDNAME) {
+ do {
+ if (header->serial <= search->serial &&
+ !IGNORE(header)) {
+ /*
+ * Is this a "this rdataset doesn't
+ * exist" record?
+ */
+ if (NONEXISTENT(header))
+ header = NULL;
+ break;
+ } else
+ header = header->down;
+ } while (header != NULL);
+ if (header != NULL) {
+ if (header->type == dns_rdatatype_dname)
+ dname_header = header;
+ else if (header->type ==
+ RBTDB_RDATATYPE_SIGDNAME)
+ sigdname_header = header;
+ else if (node != onode ||
+ IS_STUB(search->rbtdb)) {
+ /*
+ * We've found an NS rdataset that
+ * isn't at the origin node. We check
+ * that they're not at the origin node,
+ * because otherwise we'd erroneously
+ * treat the zone top as if it were
+ * a delegation.
+ */
+ ns_header = header;
+ }
+ }
+ }
+ }
+
+ /*
+ * Did we find anything?
+ */
+ if (dname_header != NULL) {
+ /*
+ * Note that DNAME has precedence over NS if both exist.
+ */
+ found = dname_header;
+ search->zonecut_sigrdataset = sigdname_header;
+ } else if (ns_header != NULL) {
+ found = ns_header;
+ search->zonecut_sigrdataset = NULL;
+ }
+
+ if (found != NULL) {
+ /*
+ * We increment the reference count on node to ensure that
+ * search->zonecut_rdataset will still be valid later.
+ */
+ new_reference(search->rbtdb, node);
+ search->zonecut = node;
+ search->zonecut_rdataset = found;
+ search->need_cleanup = ISC_TRUE;
+ /*
+ * Since we've found a zonecut, anything beneath it is
+ * glue and is not subject to wildcard matching, so we
+ * may clear search->wild.
+ */
+ search->wild = ISC_FALSE;
+ if ((search->options & DNS_DBFIND_GLUEOK) == 0) {
+ /*
+ * If the caller does not want to find glue, then
+ * this is the best answer and the search should
+ * stop now.
+ */
+ result = DNS_R_PARTIALMATCH;
+ } else {
+ dns_name_t *zcname;
+
+ /*
+ * The search will continue beneath the zone cut.
+ * This may or may not be the best match. In case it
+ * is, we need to remember the node name.
+ */
+ zcname = dns_fixedname_name(&search->zonecut_name);
+ RUNTIME_CHECK(dns_name_copy(name, zcname, NULL) ==
+ ISC_R_SUCCESS);
+ search->copy_name = ISC_TRUE;
+ }
+ } else {
+ /*
+ * There is no zonecut at this node which is active in this
+ * version.
+ *
+ * If this is a "wild" node and the caller hasn't disabled
+ * wildcard matching, remember that we've seen a wild node
+ * in case we need to go searching for wildcard matches
+ * later on.
+ */
+ if (node->wild && (search->options & DNS_DBFIND_NOWILD) == 0)
+ search->wild = ISC_TRUE;
+ }
+
+ NODE_UNLOCK(&(search->rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+
+ return (result);
}
static inline void
bind_rdataset(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node,
- rdatasetheader_t *header, isc_stdtime_t now,
- dns_rdataset_t *rdataset)
+ rdatasetheader_t *header, isc_stdtime_t now,
+ dns_rdataset_t *rdataset)
{
- unsigned char *raw; /* RDATASLAB */
-
- /*
- * Caller must be holding the node reader lock.
- * XXXJT: technically, we need a writer lock, since we'll increment
- * the header count below. However, since the actual counter value
- * doesn't matter, we prioritize performance here. (We may want to
- * use atomic increment when available).
- */
-
- if (rdataset == NULL)
- return;
-
- new_reference(rbtdb, node);
-
- INSIST(rdataset->methods == NULL); /* We must be disassociated. */
-
- rdataset->methods = &rdataset_methods;
- rdataset->rdclass = rbtdb->common.rdclass;
- rdataset->type = RBTDB_RDATATYPE_BASE(header->type);
- rdataset->covers = RBTDB_RDATATYPE_EXT(header->type);
- rdataset->ttl = header->rdh_ttl - now;
- rdataset->trust = header->trust;
- if (NXDOMAIN(header))
- rdataset->attributes |= DNS_RDATASETATTR_NXDOMAIN;
- rdataset->private1 = rbtdb;
- rdataset->private2 = node;
- raw = (unsigned char *)header + sizeof(*header);
- rdataset->private3 = raw;
- rdataset->count = header->count++;
- if (rdataset->count == ISC_UINT32_MAX)
- rdataset->count = 0;
-
- /*
- * Reset iterator state.
- */
- rdataset->privateuint4 = 0;
- rdataset->private5 = NULL;
-
- /*
- * Add noqname proof.
- */
- rdataset->private6 = header->noqname;
- if (rdataset->private6 != NULL)
- rdataset->attributes |= DNS_RDATASETATTR_NOQNAME;
+ unsigned char *raw; /* RDATASLAB */
+
+ /*
+ * Caller must be holding the node reader lock.
+ * XXXJT: technically, we need a writer lock, since we'll increment
+ * the header count below. However, since the actual counter value
+ * doesn't matter, we prioritize performance here. (We may want to
+ * use atomic increment when available).
+ */
+
+ if (rdataset == NULL)
+ return;
+
+ new_reference(rbtdb, node);
+
+ INSIST(rdataset->methods == NULL); /* We must be disassociated. */
+
+ rdataset->methods = &rdataset_methods;
+ rdataset->rdclass = rbtdb->common.rdclass;
+ rdataset->type = RBTDB_RDATATYPE_BASE(header->type);
+ rdataset->covers = RBTDB_RDATATYPE_EXT(header->type);
+ rdataset->ttl = header->rdh_ttl - now;
+ rdataset->trust = header->trust;
+ if (NXDOMAIN(header))
+ rdataset->attributes |= DNS_RDATASETATTR_NXDOMAIN;
+ rdataset->private1 = rbtdb;
+ rdataset->private2 = node;
+ raw = (unsigned char *)header + sizeof(*header);
+ rdataset->private3 = raw;
+ rdataset->count = header->count++;
+ if (rdataset->count == ISC_UINT32_MAX)
+ rdataset->count = 0;
+
+ /*
+ * Reset iterator state.
+ */
+ rdataset->privateuint4 = 0;
+ rdataset->private5 = NULL;
+
+ /*
+ * Add noqname proof.
+ */
+ rdataset->private6 = header->noqname;
+ if (rdataset->private6 != NULL)
+ rdataset->attributes |= DNS_RDATASETATTR_NOQNAME;
}
static inline isc_result_t
setup_delegation(rbtdb_search_t *search, dns_dbnode_t **nodep,
- dns_name_t *foundname, dns_rdataset_t *rdataset,
- dns_rdataset_t *sigrdataset)
+ dns_name_t *foundname, dns_rdataset_t *rdataset,
+ dns_rdataset_t *sigrdataset)
{
- isc_result_t result;
- dns_name_t *zcname;
- rbtdb_rdatatype_t type;
- dns_rbtnode_t *node;
-
- /*
- * The caller MUST NOT be holding any node locks.
- */
-
- node = search->zonecut;
- type = search->zonecut_rdataset->type;
-
- /*
- * If we have to set foundname, we do it before anything else.
- * If we were to set foundname after we had set nodep or bound the
- * rdataset, then we'd have to undo that work if dns_name_copy()
- * failed. By setting foundname first, there's nothing to undo if
- * we have trouble.
- */
- if (foundname != NULL && search->copy_name) {
- zcname = dns_fixedname_name(&search->zonecut_name);
- result = dns_name_copy(zcname, foundname, NULL);
- if (result != ISC_R_SUCCESS)
- return (result);
- }
- if (nodep != NULL) {
- /*
- * Note that we don't have to increment the node's reference
- * count here because we're going to use the reference we
- * already have in the search block.
- */
- *nodep = node;
- search->need_cleanup = ISC_FALSE;
- }
- if (rdataset != NULL) {
- NODE_LOCK(&(search->rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
- bind_rdataset(search->rbtdb, node, search->zonecut_rdataset,
- search->now, rdataset);
- if (sigrdataset != NULL && search->zonecut_sigrdataset != NULL)
- bind_rdataset(search->rbtdb, node,
- search->zonecut_sigrdataset,
- search->now, sigrdataset);
- NODE_UNLOCK(&(search->rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
- }
-
- if (type == dns_rdatatype_dname)
- return (DNS_R_DNAME);
- return (DNS_R_DELEGATION);
+ isc_result_t result;
+ dns_name_t *zcname;
+ rbtdb_rdatatype_t type;
+ dns_rbtnode_t *node;
+
+ /*
+ * The caller MUST NOT be holding any node locks.
+ */
+
+ node = search->zonecut;
+ type = search->zonecut_rdataset->type;
+
+ /*
+ * If we have to set foundname, we do it before anything else.
+ * If we were to set foundname after we had set nodep or bound the
+ * rdataset, then we'd have to undo that work if dns_name_copy()
+ * failed. By setting foundname first, there's nothing to undo if
+ * we have trouble.
+ */
+ if (foundname != NULL && search->copy_name) {
+ zcname = dns_fixedname_name(&search->zonecut_name);
+ result = dns_name_copy(zcname, foundname, NULL);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ }
+ if (nodep != NULL) {
+ /*
+ * Note that we don't have to increment the node's reference
+ * count here because we're going to use the reference we
+ * already have in the search block.
+ */
+ *nodep = node;
+ search->need_cleanup = ISC_FALSE;
+ }
+ if (rdataset != NULL) {
+ NODE_LOCK(&(search->rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+ bind_rdataset(search->rbtdb, node, search->zonecut_rdataset,
+ search->now, rdataset);
+ if (sigrdataset != NULL && search->zonecut_sigrdataset != NULL)
+ bind_rdataset(search->rbtdb, node,
+ search->zonecut_sigrdataset,
+ search->now, sigrdataset);
+ NODE_UNLOCK(&(search->rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+ }
+
+ if (type == dns_rdatatype_dname)
+ return (DNS_R_DNAME);
+ return (DNS_R_DELEGATION);
}
static inline isc_boolean_t
valid_glue(rbtdb_search_t *search, dns_name_t *name, rbtdb_rdatatype_t type,
- dns_rbtnode_t *node)
+ dns_rbtnode_t *node)
{
- unsigned char *raw; /* RDATASLAB */
- unsigned int count, size;
- dns_name_t ns_name;
- isc_boolean_t valid = ISC_FALSE;
- dns_offsets_t offsets;
- isc_region_t region;
- rdatasetheader_t *header;
-
- /*
- * No additional locking is required.
- */
-
- /*
- * Valid glue types are A, AAAA, A6. NS is also a valid glue type
- * if it occurs at a zone cut, but is not valid below it.
- */
- if (type == dns_rdatatype_ns) {
- if (node != search->zonecut) {
- return (ISC_FALSE);
- }
- } else if (type != dns_rdatatype_a &&
- type != dns_rdatatype_aaaa &&
- type != dns_rdatatype_a6) {
- return (ISC_FALSE);
- }
-
- header = search->zonecut_rdataset;
- raw = (unsigned char *)header + sizeof(*header);
- count = raw[0] * 256 + raw[1];
+ unsigned char *raw; /* RDATASLAB */
+ unsigned int count, size;
+ dns_name_t ns_name;
+ isc_boolean_t valid = ISC_FALSE;
+ dns_offsets_t offsets;
+ isc_region_t region;
+ rdatasetheader_t *header;
+
+ /*
+ * No additional locking is required.
+ */
+
+ /*
+ * Valid glue types are A, AAAA, A6. NS is also a valid glue type
+ * if it occurs at a zone cut, but is not valid below it.
+ */
+ if (type == dns_rdatatype_ns) {
+ if (node != search->zonecut) {
+ return (ISC_FALSE);
+ }
+ } else if (type != dns_rdatatype_a &&
+ type != dns_rdatatype_aaaa &&
+ type != dns_rdatatype_a6) {
+ return (ISC_FALSE);
+ }
+
+ header = search->zonecut_rdataset;
+ raw = (unsigned char *)header + sizeof(*header);
+ count = raw[0] * 256 + raw[1];
#if DNS_RDATASET_FIXED
- raw += 2 + (4 * count);
+ raw += 2 + (4 * count);
#else
- raw += 2;
+ raw += 2;
#endif
- while (count > 0) {
- count--;
- size = raw[0] * 256 + raw[1];
+ while (count > 0) {
+ count--;
+ size = raw[0] * 256 + raw[1];
#if DNS_RDATASET_FIXED
- raw += 4;
+ raw += 4;
#else
- raw += 2;
+ raw += 2;
#endif
- region.base = raw;
- region.length = size;
- raw += size;
- /*
- * XXX Until we have rdata structures, we have no choice but
- * to directly access the rdata format.
- */
- dns_name_init(&ns_name, offsets);
- dns_name_fromregion(&ns_name, &region);
- if (dns_name_compare(&ns_name, name) == 0) {
- valid = ISC_TRUE;
- break;
- }
- }
-
- return (valid);
+ region.base = raw;
+ region.length = size;
+ raw += size;
+ /*
+ * XXX Until we have rdata structures, we have no choice but
+ * to directly access the rdata format.
+ */
+ dns_name_init(&ns_name, offsets);
+ dns_name_fromregion(&ns_name, &region);
+ if (dns_name_compare(&ns_name, name) == 0) {
+ valid = ISC_TRUE;
+ break;
+ }
+ }
+
+ return (valid);
}
static inline isc_boolean_t
activeempty(rbtdb_search_t *search, dns_rbtnodechain_t *chain,
- dns_name_t *name)
+ dns_name_t *name)
{
- dns_fixedname_t fnext;
- dns_fixedname_t forigin;
- dns_name_t *next;
- dns_name_t *origin;
- dns_name_t prefix;
- dns_rbtdb_t *rbtdb;
- dns_rbtnode_t *node;
- isc_result_t result;
- isc_boolean_t answer = ISC_FALSE;
- rdatasetheader_t *header;
-
- rbtdb = search->rbtdb;
-
- dns_name_init(&prefix, NULL);
- dns_fixedname_init(&fnext);
- next = dns_fixedname_name(&fnext);
- dns_fixedname_init(&forigin);
- origin = dns_fixedname_name(&forigin);
-
- result = dns_rbtnodechain_next(chain, NULL, NULL);
- while (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) {
- node = NULL;
- result = dns_rbtnodechain_current(chain, &prefix,
- origin, &node);
- if (result != ISC_R_SUCCESS)
- break;
- NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
- for (header = node->data;
- header != NULL;
- header = header->next) {
- if (header->serial <= search->serial &&
- !IGNORE(header) && EXISTS(header))
- break;
- }
- NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
- if (header != NULL)
- break;
- result = dns_rbtnodechain_next(chain, NULL, NULL);
- }
- if (result == ISC_R_SUCCESS)
- result = dns_name_concatenate(&prefix, origin, next, NULL);
- if (result == ISC_R_SUCCESS && dns_name_issubdomain(next, name))
- answer = ISC_TRUE;
- return (answer);
+ dns_fixedname_t fnext;
+ dns_fixedname_t forigin;
+ dns_name_t *next;
+ dns_name_t *origin;
+ dns_name_t prefix;
+ dns_rbtdb_t *rbtdb;
+ dns_rbtnode_t *node;
+ isc_result_t result;
+ isc_boolean_t answer = ISC_FALSE;
+ rdatasetheader_t *header;
+
+ rbtdb = search->rbtdb;
+
+ dns_name_init(&prefix, NULL);
+ dns_fixedname_init(&fnext);
+ next = dns_fixedname_name(&fnext);
+ dns_fixedname_init(&forigin);
+ origin = dns_fixedname_name(&forigin);
+
+ result = dns_rbtnodechain_next(chain, NULL, NULL);
+ while (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) {
+ node = NULL;
+ result = dns_rbtnodechain_current(chain, &prefix,
+ origin, &node);
+ if (result != ISC_R_SUCCESS)
+ break;
+ NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+ for (header = node->data;
+ header != NULL;
+ header = header->next) {
+ if (header->serial <= search->serial &&
+ !IGNORE(header) && EXISTS(header))
+ break;
+ }
+ NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+ if (header != NULL)
+ break;
+ result = dns_rbtnodechain_next(chain, NULL, NULL);
+ }
+ if (result == ISC_R_SUCCESS)
+ result = dns_name_concatenate(&prefix, origin, next, NULL);
+ if (result == ISC_R_SUCCESS && dns_name_issubdomain(next, name))
+ answer = ISC_TRUE;
+ return (answer);
}
static inline isc_boolean_t
activeemtpynode(rbtdb_search_t *search, dns_name_t *qname, dns_name_t *wname) {
- dns_fixedname_t fnext;
- dns_fixedname_t forigin;
- dns_fixedname_t fprev;
- dns_name_t *next;
- dns_name_t *origin;
- dns_name_t *prev;
- dns_name_t name;
- dns_name_t rname;
- dns_name_t tname;
- dns_rbtdb_t *rbtdb;
- dns_rbtnode_t *node;
- dns_rbtnodechain_t chain;
- isc_boolean_t check_next = ISC_TRUE;
- isc_boolean_t check_prev = ISC_TRUE;
- isc_boolean_t answer = ISC_FALSE;
- isc_result_t result;
- rdatasetheader_t *header;
- unsigned int n;
-
- rbtdb = search->rbtdb;
-
- dns_name_init(&name, NULL);
- dns_name_init(&tname, NULL);
- dns_name_init(&rname, NULL);
- dns_fixedname_init(&fnext);
- next = dns_fixedname_name(&fnext);
- dns_fixedname_init(&fprev);
- prev = dns_fixedname_name(&fprev);
- dns_fixedname_init(&forigin);
- origin = dns_fixedname_name(&forigin);
-
- /*
- * Find if qname is at or below a empty node.
- * Use our own copy of the chain.
- */
-
- chain = search->chain;
- do {
- node = NULL;
- result = dns_rbtnodechain_current(&chain, &name,
- origin, &node);
- if (result != ISC_R_SUCCESS)
- break;
- NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
- for (header = node->data;
- header != NULL;
- header = header->next) {
- if (header->serial <= search->serial &&
- !IGNORE(header) && EXISTS(header))
- break;
- }
- NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
- if (header != NULL)
- break;
- result = dns_rbtnodechain_prev(&chain, NULL, NULL);
- } while (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN);
- if (result == ISC_R_SUCCESS)
- result = dns_name_concatenate(&name, origin, prev, NULL);
- if (result != ISC_R_SUCCESS)
- check_prev = ISC_FALSE;
-
- result = dns_rbtnodechain_next(&chain, NULL, NULL);
- while (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) {
- node = NULL;
- result = dns_rbtnodechain_current(&chain, &name,
- origin, &node);
- if (result != ISC_R_SUCCESS)
- break;
- NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
- for (header = node->data;
- header != NULL;
- header = header->next) {
- if (header->serial <= search->serial &&
- !IGNORE(header) && EXISTS(header))
- break;
- }
- NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
- if (header != NULL)
- break;
- result = dns_rbtnodechain_next(&chain, NULL, NULL);
- }
- if (result == ISC_R_SUCCESS)
- result = dns_name_concatenate(&name, origin, next, NULL);
- if (result != ISC_R_SUCCESS)
- check_next = ISC_FALSE;
-
- dns_name_clone(qname, &rname);
-
- /*
- * Remove the wildcard label to find the terminal name.
- */
- n = dns_name_countlabels(wname);
- dns_name_getlabelsequence(wname, 1, n - 1, &tname);
-
- do {
- if ((check_prev && dns_name_issubdomain(prev, &rname)) ||
- (check_next && dns_name_issubdomain(next, &rname))) {
- answer = ISC_TRUE;
- break;
- }
- /*
- * Remove the left hand label.
- */
- n = dns_name_countlabels(&rname);
- dns_name_getlabelsequence(&rname, 1, n - 1, &rname);
- } while (!dns_name_equal(&rname, &tname));
- return (answer);
+ dns_fixedname_t fnext;
+ dns_fixedname_t forigin;
+ dns_fixedname_t fprev;
+ dns_name_t *next;
+ dns_name_t *origin;
+ dns_name_t *prev;
+ dns_name_t name;
+ dns_name_t rname;
+ dns_name_t tname;
+ dns_rbtdb_t *rbtdb;
+ dns_rbtnode_t *node;
+ dns_rbtnodechain_t chain;
+ isc_boolean_t check_next = ISC_TRUE;
+ isc_boolean_t check_prev = ISC_TRUE;
+ isc_boolean_t answer = ISC_FALSE;
+ isc_result_t result;
+ rdatasetheader_t *header;
+ unsigned int n;
+
+ rbtdb = search->rbtdb;
+
+ dns_name_init(&name, NULL);
+ dns_name_init(&tname, NULL);
+ dns_name_init(&rname, NULL);
+ dns_fixedname_init(&fnext);
+ next = dns_fixedname_name(&fnext);
+ dns_fixedname_init(&fprev);
+ prev = dns_fixedname_name(&fprev);
+ dns_fixedname_init(&forigin);
+ origin = dns_fixedname_name(&forigin);
+
+ /*
+ * Find if qname is at or below a empty node.
+ * Use our own copy of the chain.
+ */
+
+ chain = search->chain;
+ do {
+ node = NULL;
+ result = dns_rbtnodechain_current(&chain, &name,
+ origin, &node);
+ if (result != ISC_R_SUCCESS)
+ break;
+ NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+ for (header = node->data;
+ header != NULL;
+ header = header->next) {
+ if (header->serial <= search->serial &&
+ !IGNORE(header) && EXISTS(header))
+ break;
+ }
+ NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+ if (header != NULL)
+ break;
+ result = dns_rbtnodechain_prev(&chain, NULL, NULL);
+ } while (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN);
+ if (result == ISC_R_SUCCESS)
+ result = dns_name_concatenate(&name, origin, prev, NULL);
+ if (result != ISC_R_SUCCESS)
+ check_prev = ISC_FALSE;
+
+ result = dns_rbtnodechain_next(&chain, NULL, NULL);
+ while (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) {
+ node = NULL;
+ result = dns_rbtnodechain_current(&chain, &name,
+ origin, &node);
+ if (result != ISC_R_SUCCESS)
+ break;
+ NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+ for (header = node->data;
+ header != NULL;
+ header = header->next) {
+ if (header->serial <= search->serial &&
+ !IGNORE(header) && EXISTS(header))
+ break;
+ }
+ NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+ if (header != NULL)
+ break;
+ result = dns_rbtnodechain_next(&chain, NULL, NULL);
+ }
+ if (result == ISC_R_SUCCESS)
+ result = dns_name_concatenate(&name, origin, next, NULL);
+ if (result != ISC_R_SUCCESS)
+ check_next = ISC_FALSE;
+
+ dns_name_clone(qname, &rname);
+
+ /*
+ * Remove the wildcard label to find the terminal name.
+ */
+ n = dns_name_countlabels(wname);
+ dns_name_getlabelsequence(wname, 1, n - 1, &tname);
+
+ do {
+ if ((check_prev && dns_name_issubdomain(prev, &rname)) ||
+ (check_next && dns_name_issubdomain(next, &rname))) {
+ answer = ISC_TRUE;
+ break;
+ }
+ /*
+ * Remove the left hand label.
+ */
+ n = dns_name_countlabels(&rname);
+ dns_name_getlabelsequence(&rname, 1, n - 1, &rname);
+ } while (!dns_name_equal(&rname, &tname));
+ return (answer);
}
static inline isc_result_t
find_wildcard(rbtdb_search_t *search, dns_rbtnode_t **nodep,
- dns_name_t *qname)
+ dns_name_t *qname)
{
- unsigned int i, j;
- dns_rbtnode_t *node, *level_node, *wnode;
- rdatasetheader_t *header;
- isc_result_t result = ISC_R_NOTFOUND;
- dns_name_t name;
- dns_name_t *wname;
- dns_fixedname_t fwname;
- dns_rbtdb_t *rbtdb;
- isc_boolean_t done, wild, active;
- dns_rbtnodechain_t wchain;
-
- /*
- * Caller must be holding the tree lock and MUST NOT be holding
- * any node locks.
- */
-
- /*
- * Examine each ancestor level. If the level's wild bit
- * is set, then construct the corresponding wildcard name and
- * search for it. If the wildcard node exists, and is active in
- * this version, we're done. If not, then we next check to see
- * if the ancestor is active in this version. If so, then there
- * can be no possible wildcard match and again we're done. If not,
- * continue the search.
- */
-
- rbtdb = search->rbtdb;
- i = search->chain.level_matches;
- done = ISC_FALSE;
- node = *nodep;
- do {
- NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
-
- /*
- * First we try to figure out if this node is active in
- * the search's version. We do this now, even though we
- * may not need the information, because it simplifies the
- * locking and code flow.
- */
- for (header = node->data;
- header != NULL;
- header = header->next) {
- if (header->serial <= search->serial &&
- !IGNORE(header) && EXISTS(header))
- break;
- }
- if (header != NULL)
- active = ISC_TRUE;
- else
- active = ISC_FALSE;
-
- if (node->wild)
- wild = ISC_TRUE;
- else
- wild = ISC_FALSE;
-
- NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
-
- if (wild) {
- /*
- * Construct the wildcard name for this level.
- */
- dns_name_init(&name, NULL);
- dns_rbt_namefromnode(node, &name);
- dns_fixedname_init(&fwname);
- wname = dns_fixedname_name(&fwname);
- result = dns_name_concatenate(dns_wildcardname, &name,
- wname, NULL);
- j = i;
- while (result == ISC_R_SUCCESS && j != 0) {
- j--;
- level_node = search->chain.levels[j];
- dns_name_init(&name, NULL);
- dns_rbt_namefromnode(level_node, &name);
- result = dns_name_concatenate(wname,
- &name,
- wname,
- NULL);
- }
- if (result != ISC_R_SUCCESS)
- break;
-
- wnode = NULL;
- dns_rbtnodechain_init(&wchain, NULL);
- result = dns_rbt_findnode(rbtdb->tree, wname,
- NULL, &wnode, &wchain,
- DNS_RBTFIND_EMPTYDATA,
- NULL, NULL);
- if (result == ISC_R_SUCCESS) {
- nodelock_t *lock;
-
- /*
- * We have found the wildcard node. If it
- * is active in the search's version, we're
- * done.
- */
- lock = &rbtdb->node_locks[wnode->locknum].lock;
- NODE_LOCK(lock, isc_rwlocktype_read);
- for (header = wnode->data;
- header != NULL;
- header = header->next) {
- if (header->serial <= search->serial &&
- !IGNORE(header) && EXISTS(header))
- break;
- }
- NODE_UNLOCK(lock, isc_rwlocktype_read);
- if (header != NULL ||
- activeempty(search, &wchain, wname)) {
- if (activeemtpynode(search, qname,
- wname)) {
- return (ISC_R_NOTFOUND);
- }
- /*
- * The wildcard node is active!
- *
- * Note: result is still ISC_R_SUCCESS
- * so we don't have to set it.
- */
- *nodep = wnode;
- break;
- }
- } else if (result != ISC_R_NOTFOUND &&
- result != DNS_R_PARTIALMATCH) {
- /*
- * An error has occurred. Bail out.
- */
- break;
- }
- }
-
- if (active) {
- /*
- * The level node is active. Any wildcarding
- * present at higher levels has no
- * effect and we're done.
- */
- result = ISC_R_NOTFOUND;
- break;
- }
-
- if (i > 0) {
- i--;
- node = search->chain.levels[i];
- } else
- done = ISC_TRUE;
- } while (!done);
-
- return (result);
+ unsigned int i, j;
+ dns_rbtnode_t *node, *level_node, *wnode;
+ rdatasetheader_t *header;
+ isc_result_t result = ISC_R_NOTFOUND;
+ dns_name_t name;
+ dns_name_t *wname;
+ dns_fixedname_t fwname;
+ dns_rbtdb_t *rbtdb;
+ isc_boolean_t done, wild, active;
+ dns_rbtnodechain_t wchain;
+
+ /*
+ * Caller must be holding the tree lock and MUST NOT be holding
+ * any node locks.
+ */
+
+ /*
+ * Examine each ancestor level. If the level's wild bit
+ * is set, then construct the corresponding wildcard name and
+ * search for it. If the wildcard node exists, and is active in
+ * this version, we're done. If not, then we next check to see
+ * if the ancestor is active in this version. If so, then there
+ * can be no possible wildcard match and again we're done. If not,
+ * continue the search.
+ */
+
+ rbtdb = search->rbtdb;
+ i = search->chain.level_matches;
+ done = ISC_FALSE;
+ node = *nodep;
+ do {
+ NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+
+ /*
+ * First we try to figure out if this node is active in
+ * the search's version. We do this now, even though we
+ * may not need the information, because it simplifies the
+ * locking and code flow.
+ */
+ for (header = node->data;
+ header != NULL;
+ header = header->next) {
+ if (header->serial <= search->serial &&
+ !IGNORE(header) && EXISTS(header))
+ break;
+ }
+ if (header != NULL)
+ active = ISC_TRUE;
+ else
+ active = ISC_FALSE;
+
+ if (node->wild)
+ wild = ISC_TRUE;
+ else
+ wild = ISC_FALSE;
+
+ NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+
+ if (wild) {
+ /*
+ * Construct the wildcard name for this level.
+ */
+ dns_name_init(&name, NULL);
+ dns_rbt_namefromnode(node, &name);
+ dns_fixedname_init(&fwname);
+ wname = dns_fixedname_name(&fwname);
+ result = dns_name_concatenate(dns_wildcardname, &name,
+ wname, NULL);
+ j = i;
+ while (result == ISC_R_SUCCESS && j != 0) {
+ j--;
+ level_node = search->chain.levels[j];
+ dns_name_init(&name, NULL);
+ dns_rbt_namefromnode(level_node, &name);
+ result = dns_name_concatenate(wname,
+ &name,
+ wname,
+ NULL);
+ }
+ if (result != ISC_R_SUCCESS)
+ break;
+
+ wnode = NULL;
+ dns_rbtnodechain_init(&wchain, NULL);
+ result = dns_rbt_findnode(rbtdb->tree, wname,
+ NULL, &wnode, &wchain,
+ DNS_RBTFIND_EMPTYDATA,
+ NULL, NULL);
+ if (result == ISC_R_SUCCESS) {
+ nodelock_t *lock;
+
+ /*
+ * We have found the wildcard node. If it
+ * is active in the search's version, we're
+ * done.
+ */
+ lock = &rbtdb->node_locks[wnode->locknum].lock;
+ NODE_LOCK(lock, isc_rwlocktype_read);
+ for (header = wnode->data;
+ header != NULL;
+ header = header->next) {
+ if (header->serial <= search->serial &&
+ !IGNORE(header) && EXISTS(header))
+ break;
+ }
+ NODE_UNLOCK(lock, isc_rwlocktype_read);
+ if (header != NULL ||
+ activeempty(search, &wchain, wname)) {
+ if (activeemtpynode(search, qname,
+ wname)) {
+ return (ISC_R_NOTFOUND);
+ }
+ /*
+ * The wildcard node is active!
+ *
+ * Note: result is still ISC_R_SUCCESS
+ * so we don't have to set it.
+ */
+ *nodep = wnode;
+ break;
+ }
+ } else if (result != ISC_R_NOTFOUND &&
+ result != DNS_R_PARTIALMATCH) {
+ /*
+ * An error has occurred. Bail out.
+ */
+ break;
+ }
+ }
+
+ if (active) {
+ /*
+ * The level node is active. Any wildcarding
+ * present at higher levels has no
+ * effect and we're done.
+ */
+ result = ISC_R_NOTFOUND;
+ break;
+ }
+
+ if (i > 0) {
+ i--;
+ node = search->chain.levels[i];
+ } else
+ done = ISC_TRUE;
+ } while (!done);
+
+ return (result);
}
static inline isc_result_t
find_closest_nsec(rbtdb_search_t *search, dns_dbnode_t **nodep,
- dns_name_t *foundname, dns_rdataset_t *rdataset,
- dns_rdataset_t *sigrdataset, isc_boolean_t need_sig)
+ dns_name_t *foundname, dns_rdataset_t *rdataset,
+ dns_rdataset_t *sigrdataset, isc_boolean_t need_sig)
{
- dns_rbtnode_t *node;
- rdatasetheader_t *header, *header_next, *found, *foundsig;
- isc_boolean_t empty_node;
- isc_result_t result;
- dns_fixedname_t fname, forigin;
- dns_name_t *name, *origin;
-
- do {
- node = NULL;
- dns_fixedname_init(&fname);
- name = dns_fixedname_name(&fname);
- dns_fixedname_init(&forigin);
- origin = dns_fixedname_name(&forigin);
- result = dns_rbtnodechain_current(&search->chain, name,
- origin, &node);
- if (result != ISC_R_SUCCESS)
- return (result);
- NODE_LOCK(&(search->rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
- found = NULL;
- foundsig = NULL;
- empty_node = ISC_TRUE;
- for (header = node->data;
- header != NULL;
- header = header_next) {
- header_next = header->next;
- /*
- * Look for an active, extant NSEC or RRSIG NSEC.
- */
- do {
- if (header->serial <= search->serial &&
- !IGNORE(header)) {
- /*
- * Is this a "this rdataset doesn't
- * exist" record?
- */
- if (NONEXISTENT(header))
- header = NULL;
- break;
- } else
- header = header->down;
- } while (header != NULL);
- if (header != NULL) {
- /*
- * We now know that there is at least one
- * active rdataset at this node.
- */
- empty_node = ISC_FALSE;
- if (header->type == dns_rdatatype_nsec) {
- found = header;
- if (foundsig != NULL)
- break;
- } else if (header->type ==
- RBTDB_RDATATYPE_SIGNSEC) {
- foundsig = header;
- if (found != NULL)
- break;
- }
- }
- }
- if (!empty_node) {
- if (found != NULL &&
- (foundsig != NULL || !need_sig))
- {
- /*
- * We've found the right NSEC record.
- *
- * Note: for this to really be the right
- * NSEC record, it's essential that the NSEC
- * records of any nodes obscured by a zone
- * cut have been removed; we assume this is
- * the case.
- */
- result = dns_name_concatenate(name, origin,
- foundname, NULL);
- if (result == ISC_R_SUCCESS) {
- if (nodep != NULL) {
- new_reference(search->rbtdb,
- node);
- *nodep = node;
- }
- bind_rdataset(search->rbtdb, node,
- found, search->now,
- rdataset);
- if (foundsig != NULL)
- bind_rdataset(search->rbtdb,
- node,
- foundsig,
- search->now,
- sigrdataset);
- }
- } else if (found == NULL && foundsig == NULL) {
- /*
- * This node is active, but has no NSEC or
- * RRSIG NSEC. That means it's glue or
- * other obscured zone data that isn't
- * relevant for our search. Treat the
- * node as if it were empty and keep looking.
- */
- empty_node = ISC_TRUE;
- result = dns_rbtnodechain_prev(&search->chain,
- NULL, NULL);
- } else {
- /*
- * We found an active node, but either the
- * NSEC or the RRSIG NSEC is missing. This
- * shouldn't happen.
- */
- result = DNS_R_BADDB;
- }
- } else {
- /*
- * This node isn't active. We've got to keep
- * looking.
- */
- result = dns_rbtnodechain_prev(&search->chain, NULL,
- NULL);
- }
- NODE_UNLOCK(&(search->rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
- } while (empty_node && result == ISC_R_SUCCESS);
-
- /*
- * If the result is ISC_R_NOMORE, then we got to the beginning of
- * the database and didn't find a NSEC record. This shouldn't
- * happen.
- */
- if (result == ISC_R_NOMORE)
- result = DNS_R_BADDB;
-
- return (result);
+ dns_rbtnode_t *node;
+ rdatasetheader_t *header, *header_next, *found, *foundsig;
+ isc_boolean_t empty_node;
+ isc_result_t result;
+ dns_fixedname_t fname, forigin;
+ dns_name_t *name, *origin;
+
+ do {
+ node = NULL;
+ dns_fixedname_init(&fname);
+ name = dns_fixedname_name(&fname);
+ dns_fixedname_init(&forigin);
+ origin = dns_fixedname_name(&forigin);
+ result = dns_rbtnodechain_current(&search->chain, name,
+ origin, &node);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ NODE_LOCK(&(search->rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+ found = NULL;
+ foundsig = NULL;
+ empty_node = ISC_TRUE;
+ for (header = node->data;
+ header != NULL;
+ header = header_next) {
+ header_next = header->next;
+ /*
+ * Look for an active, extant NSEC or RRSIG NSEC.
+ */
+ do {
+ if (header->serial <= search->serial &&
+ !IGNORE(header)) {
+ /*
+ * Is this a "this rdataset doesn't
+ * exist" record?
+ */
+ if (NONEXISTENT(header))
+ header = NULL;
+ break;
+ } else
+ header = header->down;
+ } while (header != NULL);
+ if (header != NULL) {
+ /*
+ * We now know that there is at least one
+ * active rdataset at this node.
+ */
+ empty_node = ISC_FALSE;
+ if (header->type == dns_rdatatype_nsec) {
+ found = header;
+ if (foundsig != NULL)
+ break;
+ } else if (header->type ==
+ RBTDB_RDATATYPE_SIGNSEC) {
+ foundsig = header;
+ if (found != NULL)
+ break;
+ }
+ }
+ }
+ if (!empty_node) {
+ if (found != NULL &&
+ (foundsig != NULL || !need_sig))
+ {
+ /*
+ * We've found the right NSEC record.
+ *
+ * Note: for this to really be the right
+ * NSEC record, it's essential that the NSEC
+ * records of any nodes obscured by a zone
+ * cut have been removed; we assume this is
+ * the case.
+ */
+ result = dns_name_concatenate(name, origin,
+ foundname, NULL);
+ if (result == ISC_R_SUCCESS) {
+ if (nodep != NULL) {
+ new_reference(search->rbtdb,
+ node);
+ *nodep = node;
+ }
+ bind_rdataset(search->rbtdb, node,
+ found, search->now,
+ rdataset);
+ if (foundsig != NULL)
+ bind_rdataset(search->rbtdb,
+ node,
+ foundsig,
+ search->now,
+ sigrdataset);
+ }
+ } else if (found == NULL && foundsig == NULL) {
+ /*
+ * This node is active, but has no NSEC or
+ * RRSIG NSEC. That means it's glue or
+ * other obscured zone data that isn't
+ * relevant for our search. Treat the
+ * node as if it were empty and keep looking.
+ */
+ empty_node = ISC_TRUE;
+ result = dns_rbtnodechain_prev(&search->chain,
+ NULL, NULL);
+ } else {
+ /*
+ * We found an active node, but either the
+ * NSEC or the RRSIG NSEC is missing. This
+ * shouldn't happen.
+ */
+ result = DNS_R_BADDB;
+ }
+ } else {
+ /*
+ * This node isn't active. We've got to keep
+ * looking.
+ */
+ result = dns_rbtnodechain_prev(&search->chain, NULL,
+ NULL);
+ }
+ NODE_UNLOCK(&(search->rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+ } while (empty_node && result == ISC_R_SUCCESS);
+
+ /*
+ * If the result is ISC_R_NOMORE, then we got to the beginning of
+ * the database and didn't find a NSEC record. This shouldn't
+ * happen.
+ */
+ if (result == ISC_R_NOMORE)
+ result = DNS_R_BADDB;
+
+ return (result);
}
static isc_result_t
zone_find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
- dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
- dns_dbnode_t **nodep, dns_name_t *foundname,
- dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
+ dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
+ dns_dbnode_t **nodep, dns_name_t *foundname,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
{
- dns_rbtnode_t *node = NULL;
- isc_result_t result;
- rbtdb_search_t search;
- isc_boolean_t cname_ok = ISC_TRUE;
- isc_boolean_t close_version = ISC_FALSE;
- isc_boolean_t maybe_zonecut = ISC_FALSE;
- isc_boolean_t at_zonecut = ISC_FALSE;
- isc_boolean_t wild;
- isc_boolean_t empty_node;
- rdatasetheader_t *header, *header_next, *found, *nsecheader;
- rdatasetheader_t *foundsig, *cnamesig, *nsecsig;
- rbtdb_rdatatype_t sigtype;
- isc_boolean_t active;
- dns_rbtnodechain_t chain;
- nodelock_t *lock;
-
-
- search.rbtdb = (dns_rbtdb_t *)db;
-
- REQUIRE(VALID_RBTDB(search.rbtdb));
-
- /*
- * We don't care about 'now'.
- */
- UNUSED(now);
-
- /*
- * If the caller didn't supply a version, attach to the current
- * version.
- */
- if (version == NULL) {
- currentversion(db, &version);
- close_version = ISC_TRUE;
- }
-
- search.rbtversion = version;
- search.serial = search.rbtversion->serial;
- search.options = options;
- search.copy_name = ISC_FALSE;
- search.need_cleanup = ISC_FALSE;
- search.wild = ISC_FALSE;
- search.zonecut = NULL;
- dns_fixedname_init(&search.zonecut_name);
- dns_rbtnodechain_init(&search.chain, search.rbtdb->common.mctx);
- search.now = 0;
-
- /*
- * 'wild' will be true iff. we've matched a wildcard.
- */
- wild = ISC_FALSE;
-
- RWLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read);
-
- /*
- * Search down from the root of the tree. If, while going down, we
- * encounter a callback node, zone_zonecut_callback() will search the
- * rdatasets at the zone cut for active DNAME or NS rdatasets.
- */
- result = dns_rbt_findnode(search.rbtdb->tree, name, foundname, &node,
- &search.chain, DNS_RBTFIND_EMPTYDATA,
- zone_zonecut_callback, &search);
-
- if (result == DNS_R_PARTIALMATCH) {
- partial_match:
- if (search.zonecut != NULL) {
- result = setup_delegation(&search, nodep, foundname,
- rdataset, sigrdataset);
- goto tree_exit;
- }
-
- if (search.wild) {
- /*
- * At least one of the levels in the search chain
- * potentially has a wildcard. For each such level,
- * we must see if there's a matching wildcard active
- * in the current version.
- */
- result = find_wildcard(&search, &node, name);
- if (result == ISC_R_SUCCESS) {
- result = dns_name_copy(name, foundname, NULL);
- if (result != ISC_R_SUCCESS)
- goto tree_exit;
- wild = ISC_TRUE;
- goto found;
- }
- else if (result != ISC_R_NOTFOUND)
- goto tree_exit;
- }
-
- chain = search.chain;
- active = activeempty(&search, &chain, name);
-
- /*
- * If we're here, then the name does not exist, is not
- * beneath a zonecut, and there's no matching wildcard.
- */
- if (search.rbtdb->secure ||
- (search.options & DNS_DBFIND_FORCENSEC) != 0)
- {
- result = find_closest_nsec(&search, nodep, foundname,
- rdataset, sigrdataset,
- search.rbtdb->secure);
- if (result == ISC_R_SUCCESS)
- result = active ? DNS_R_EMPTYNAME :
- DNS_R_NXDOMAIN;
- } else
- result = active ? DNS_R_EMPTYNAME : DNS_R_NXDOMAIN;
- goto tree_exit;
- } else if (result != ISC_R_SUCCESS)
- goto tree_exit;
+ dns_rbtnode_t *node = NULL;
+ isc_result_t result;
+ rbtdb_search_t search;
+ isc_boolean_t cname_ok = ISC_TRUE;
+ isc_boolean_t close_version = ISC_FALSE;
+ isc_boolean_t maybe_zonecut = ISC_FALSE;
+ isc_boolean_t at_zonecut = ISC_FALSE;
+ isc_boolean_t wild;
+ isc_boolean_t empty_node;
+ rdatasetheader_t *header, *header_next, *found, *nsecheader;
+ rdatasetheader_t *foundsig, *cnamesig, *nsecsig;
+ rbtdb_rdatatype_t sigtype;
+ isc_boolean_t active;
+ dns_rbtnodechain_t chain;
+ nodelock_t *lock;
+
+
+ search.rbtdb = (dns_rbtdb_t *)db;
+
+ REQUIRE(VALID_RBTDB(search.rbtdb));
+
+ /*
+ * We don't care about 'now'.
+ */
+ UNUSED(now);
+
+ /*
+ * If the caller didn't supply a version, attach to the current
+ * version.
+ */
+ if (version == NULL) {
+ currentversion(db, &version);
+ close_version = ISC_TRUE;
+ }
+
+ search.rbtversion = version;
+ search.serial = search.rbtversion->serial;
+ search.options = options;
+ search.copy_name = ISC_FALSE;
+ search.need_cleanup = ISC_FALSE;
+ search.wild = ISC_FALSE;
+ search.zonecut = NULL;
+ dns_fixedname_init(&search.zonecut_name);
+ dns_rbtnodechain_init(&search.chain, search.rbtdb->common.mctx);
+ search.now = 0;
+
+ /*
+ * 'wild' will be true iff. we've matched a wildcard.
+ */
+ wild = ISC_FALSE;
+
+ RWLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read);
+
+ /*
+ * Search down from the root of the tree. If, while going down, we
+ * encounter a callback node, zone_zonecut_callback() will search the
+ * rdatasets at the zone cut for active DNAME or NS rdatasets.
+ */
+ result = dns_rbt_findnode(search.rbtdb->tree, name, foundname, &node,
+ &search.chain, DNS_RBTFIND_EMPTYDATA,
+ zone_zonecut_callback, &search);
+
+ if (result == DNS_R_PARTIALMATCH) {
+ partial_match:
+ if (search.zonecut != NULL) {
+ result = setup_delegation(&search, nodep, foundname,
+ rdataset, sigrdataset);
+ goto tree_exit;
+ }
+
+ if (search.wild) {
+ /*
+ * At least one of the levels in the search chain
+ * potentially has a wildcard. For each such level,
+ * we must see if there's a matching wildcard active
+ * in the current version.
+ */
+ result = find_wildcard(&search, &node, name);
+ if (result == ISC_R_SUCCESS) {
+ result = dns_name_copy(name, foundname, NULL);
+ if (result != ISC_R_SUCCESS)
+ goto tree_exit;
+ wild = ISC_TRUE;
+ goto found;
+ }
+ else if (result != ISC_R_NOTFOUND)
+ goto tree_exit;
+ }
+
+ chain = search.chain;
+ active = activeempty(&search, &chain, name);
+
+ /*
+ * If we're here, then the name does not exist, is not
+ * beneath a zonecut, and there's no matching wildcard.
+ */
+ if (search.rbtdb->secure ||
+ (search.options & DNS_DBFIND_FORCENSEC) != 0)
+ {
+ result = find_closest_nsec(&search, nodep, foundname,
+ rdataset, sigrdataset,
+ search.rbtdb->secure);
+ if (result == ISC_R_SUCCESS)
+ result = active ? DNS_R_EMPTYNAME :
+ DNS_R_NXDOMAIN;
+ } else
+ result = active ? DNS_R_EMPTYNAME : DNS_R_NXDOMAIN;
+ goto tree_exit;
+ } else if (result != ISC_R_SUCCESS)
+ goto tree_exit;
found:
- /*
- * We have found a node whose name is the desired name, or we
- * have matched a wildcard.
- */
-
- if (search.zonecut != NULL) {
- /*
- * If we're beneath a zone cut, we don't want to look for
- * CNAMEs because they're not legitimate zone glue.
- */
- cname_ok = ISC_FALSE;
- } else {
- /*
- * The node may be a zone cut itself. If it might be one,
- * make sure we check for it later.
- */
- if (node->find_callback &&
- (node != search.rbtdb->origin_node ||
- IS_STUB(search.rbtdb)) &&
- !dns_rdatatype_atparent(type))
- maybe_zonecut = ISC_TRUE;
- }
-
- /*
- * Certain DNSSEC types are not subject to CNAME matching
- * (RFC4035, section 2.5 and RFC3007).
- *
- * We don't check for RRSIG, because we don't store RRSIG records
- * directly.
- */
- if (type == dns_rdatatype_key || type == dns_rdatatype_nsec)
- cname_ok = ISC_FALSE;
-
- /*
- * We now go looking for rdata...
- */
-
- NODE_LOCK(&(search.rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
-
- found = NULL;
- foundsig = NULL;
- sigtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type);
- nsecheader = NULL;
- nsecsig = NULL;
- cnamesig = NULL;
- empty_node = ISC_TRUE;
- for (header = node->data; header != NULL; header = header_next) {
- header_next = header->next;
- /*
- * Look for an active, extant rdataset.
- */
- do {
- if (header->serial <= search.serial &&
- !IGNORE(header)) {
- /*
- * Is this a "this rdataset doesn't
- * exist" record?
- */
- if (NONEXISTENT(header))
- header = NULL;
- break;
- } else
- header = header->down;
- } while (header != NULL);
- if (header != NULL) {
- /*
- * We now know that there is at least one active
- * rdataset at this node.
- */
- empty_node = ISC_FALSE;
-
- /*
- * Do special zone cut handling, if requested.
- */
- if (maybe_zonecut &&
- header->type == dns_rdatatype_ns) {
- /*
- * We increment the reference count on node to
- * ensure that search->zonecut_rdataset will
- * still be valid later.
- */
- new_reference(search.rbtdb, node);
- search.zonecut = node;
- search.zonecut_rdataset = header;
- search.zonecut_sigrdataset = NULL;
- search.need_cleanup = ISC_TRUE;
- maybe_zonecut = ISC_FALSE;
- at_zonecut = ISC_TRUE;
- /*
- * It is not clear if KEY should still be
- * allowed at the parent side of the zone
- * cut or not. It is needed for RFC3007
- * validated updates.
- */
- if ((search.options & DNS_DBFIND_GLUEOK) == 0
- && type != dns_rdatatype_nsec
- && type != dns_rdatatype_key) {
- /*
- * Glue is not OK, but any answer we
- * could return would be glue. Return
- * the delegation.
- */
- found = NULL;
- break;
- }
- if (found != NULL && foundsig != NULL)
- break;
- }
-
- /*
- * If we found a type we were looking for,
- * remember it.
- */
- if (header->type == type ||
- type == dns_rdatatype_any ||
- (header->type == dns_rdatatype_cname &&
- cname_ok)) {
- /*
- * We've found the answer!
- */
- found = header;
- if (header->type == dns_rdatatype_cname &&
- cname_ok) {
- /*
- * We may be finding a CNAME instead
- * of the desired type.
- *
- * If we've already got the CNAME RRSIG,
- * use it, otherwise change sigtype
- * so that we find it.
- */
- if (cnamesig != NULL)
- foundsig = cnamesig;
- else
- sigtype =
- RBTDB_RDATATYPE_SIGCNAME;
- }
- /*
- * If we've got all we need, end the search.
- */
- if (!maybe_zonecut && foundsig != NULL)
- break;
- } else if (header->type == sigtype) {
- /*
- * We've found the RRSIG rdataset for our
- * target type. Remember it.
- */
- foundsig = header;
- /*
- * If we've got all we need, end the search.
- */
- if (!maybe_zonecut && found != NULL)
- break;
- } else if (header->type == dns_rdatatype_nsec) {
- /*
- * Remember a NSEC rdataset even if we're
- * not specifically looking for it, because
- * we might need it later.
- */
- nsecheader = header;
- } else if (header->type == RBTDB_RDATATYPE_SIGNSEC) {
- /*
- * If we need the NSEC rdataset, we'll also
- * need its signature.
- */
- nsecsig = header;
- } else if (cname_ok &&
- header->type == RBTDB_RDATATYPE_SIGCNAME) {
- /*
- * If we get a CNAME match, we'll also need
- * its signature.
- */
- cnamesig = header;
- }
- }
- }
-
- if (empty_node) {
- /*
- * We have an exact match for the name, but there are no
- * active rdatasets in the desired version. That means that
- * this node doesn't exist in the desired version, and that
- * we really have a partial match.
- */
- if (!wild) {
- lock = &search.rbtdb->node_locks[node->locknum].lock;
- NODE_UNLOCK(lock, isc_rwlocktype_read);
- goto partial_match;
- }
- }
-
- /*
- * If we didn't find what we were looking for...
- */
- if (found == NULL) {
- if (search.zonecut != NULL) {
- /*
- * We were trying to find glue at a node beneath a
- * zone cut, but didn't.
- *
- * Return the delegation.
- */
- lock = &search.rbtdb->node_locks[node->locknum].lock;
- NODE_UNLOCK(lock, isc_rwlocktype_read);
- result = setup_delegation(&search, nodep, foundname,
- rdataset, sigrdataset);
- goto tree_exit;
- }
- /*
- * The desired type doesn't exist.
- */
- result = DNS_R_NXRRSET;
- if (search.rbtdb->secure &&
- (nsecheader == NULL || nsecsig == NULL)) {
- /*
- * The zone is secure but there's no NSEC,
- * or the NSEC has no signature!
- */
- if (!wild) {
- result = DNS_R_BADDB;
- goto node_exit;
- }
-
- lock = &search.rbtdb->node_locks[node->locknum].lock;
- NODE_UNLOCK(lock, isc_rwlocktype_read);
- result = find_closest_nsec(&search, nodep, foundname,
- rdataset, sigrdataset,
- search.rbtdb->secure);
- if (result == ISC_R_SUCCESS)
- result = DNS_R_EMPTYWILD;
- goto tree_exit;
- }
- if ((search.options & DNS_DBFIND_FORCENSEC) != 0 &&
- nsecheader == NULL)
- {
- /*
- * There's no NSEC record, and we were told
- * to find one.
- */
- result = DNS_R_BADDB;
- goto node_exit;
- }
- if (nodep != NULL) {
- new_reference(search.rbtdb, node);
- *nodep = node;
- }
- if (search.rbtdb->secure ||
- (search.options & DNS_DBFIND_FORCENSEC) != 0)
- {
- bind_rdataset(search.rbtdb, node, nsecheader,
- 0, rdataset);
- if (nsecsig != NULL)
- bind_rdataset(search.rbtdb, node,
- nsecsig, 0, sigrdataset);
- }
- if (wild)
- foundname->attributes |= DNS_NAMEATTR_WILDCARD;
- goto node_exit;
- }
-
- /*
- * We found what we were looking for, or we found a CNAME.
- */
-
- if (type != found->type &&
- type != dns_rdatatype_any &&
- found->type == dns_rdatatype_cname) {
- /*
- * We weren't doing an ANY query and we found a CNAME instead
- * of the type we were looking for, so we need to indicate
- * that result to the caller.
- */
- result = DNS_R_CNAME;
- } else if (search.zonecut != NULL) {
- /*
- * If we're beneath a zone cut, we must indicate that the
- * result is glue, unless we're actually at the zone cut
- * and the type is NSEC or KEY.
- */
- if (search.zonecut == node) {
- /*
- * It is not clear if KEY should still be
- * allowed at the parent side of the zone
- * cut or not. It is needed for RFC3007
- * validated updates.
- */
- if (type == dns_rdatatype_nsec ||
- type == dns_rdatatype_key)
- result = ISC_R_SUCCESS;
- else if (type == dns_rdatatype_any)
- result = DNS_R_ZONECUT;
- else
- result = DNS_R_GLUE;
- } else
- result = DNS_R_GLUE;
- /*
- * We might have found data that isn't glue, but was occluded
- * by a dynamic update. If the caller cares about this, they
- * will have told us to validate glue.
- *
- * XXX We should cache the glue validity state!
- */
- if (result == DNS_R_GLUE &&
- (search.options & DNS_DBFIND_VALIDATEGLUE) != 0 &&
- !valid_glue(&search, foundname, type, node)) {
- lock = &search.rbtdb->node_locks[node->locknum].lock;
- NODE_UNLOCK(lock, isc_rwlocktype_read);
- result = setup_delegation(&search, nodep, foundname,
- rdataset, sigrdataset);
- goto tree_exit;
- }
- } else {
- /*
- * An ordinary successful query!
- */
- result = ISC_R_SUCCESS;
- }
-
- if (nodep != NULL) {
- if (!at_zonecut)
- new_reference(search.rbtdb, node);
- else
- search.need_cleanup = ISC_FALSE;
- *nodep = node;
- }
-
- if (type != dns_rdatatype_any) {
- bind_rdataset(search.rbtdb, node, found, 0, rdataset);
- if (foundsig != NULL)
- bind_rdataset(search.rbtdb, node, foundsig, 0,
- sigrdataset);
- }
-
- if (wild)
- foundname->attributes |= DNS_NAMEATTR_WILDCARD;
+ /*
+ * We have found a node whose name is the desired name, or we
+ * have matched a wildcard.
+ */
+
+ if (search.zonecut != NULL) {
+ /*
+ * If we're beneath a zone cut, we don't want to look for
+ * CNAMEs because they're not legitimate zone glue.
+ */
+ cname_ok = ISC_FALSE;
+ } else {
+ /*
+ * The node may be a zone cut itself. If it might be one,
+ * make sure we check for it later.
+ */
+ if (node->find_callback &&
+ (node != search.rbtdb->origin_node ||
+ IS_STUB(search.rbtdb)) &&
+ !dns_rdatatype_atparent(type))
+ maybe_zonecut = ISC_TRUE;
+ }
+
+ /*
+ * Certain DNSSEC types are not subject to CNAME matching
+ * (RFC4035, section 2.5 and RFC3007).
+ *
+ * We don't check for RRSIG, because we don't store RRSIG records
+ * directly.
+ */
+ if (type == dns_rdatatype_key || type == dns_rdatatype_nsec)
+ cname_ok = ISC_FALSE;
+
+ /*
+ * We now go looking for rdata...
+ */
+
+ NODE_LOCK(&(search.rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
+
+ found = NULL;
+ foundsig = NULL;
+ sigtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type);
+ nsecheader = NULL;
+ nsecsig = NULL;
+ cnamesig = NULL;
+ empty_node = ISC_TRUE;
+ for (header = node->data; header != NULL; header = header_next) {
+ header_next = header->next;
+ /*
+ * Look for an active, extant rdataset.
+ */
+ do {
+ if (header->serial <= search.serial &&
+ !IGNORE(header)) {
+ /*
+ * Is this a "this rdataset doesn't
+ * exist" record?
+ */
+ if (NONEXISTENT(header))
+ header = NULL;
+ break;
+ } else
+ header = header->down;
+ } while (header != NULL);
+ if (header != NULL) {
+ /*
+ * We now know that there is at least one active
+ * rdataset at this node.
+ */
+ empty_node = ISC_FALSE;
+
+ /*
+ * Do special zone cut handling, if requested.
+ */
+ if (maybe_zonecut &&
+ header->type == dns_rdatatype_ns) {
+ /*
+ * We increment the reference count on node to
+ * ensure that search->zonecut_rdataset will
+ * still be valid later.
+ */
+ new_reference(search.rbtdb, node);
+ search.zonecut = node;
+ search.zonecut_rdataset = header;
+ search.zonecut_sigrdataset = NULL;
+ search.need_cleanup = ISC_TRUE;
+ maybe_zonecut = ISC_FALSE;
+ at_zonecut = ISC_TRUE;
+ /*
+ * It is not clear if KEY should still be
+ * allowed at the parent side of the zone
+ * cut or not. It is needed for RFC3007
+ * validated updates.
+ */
+ if ((search.options & DNS_DBFIND_GLUEOK) == 0
+ && type != dns_rdatatype_nsec
+ && type != dns_rdatatype_key) {
+ /*
+ * Glue is not OK, but any answer we
+ * could return would be glue. Return
+ * the delegation.
+ */
+ found = NULL;
+ break;
+ }
+ if (found != NULL && foundsig != NULL)
+ break;
+ }
+
+ /*
+ * If we found a type we were looking for,
+ * remember it.
+ */
+ if (header->type == type ||
+ type == dns_rdatatype_any ||
+ (header->type == dns_rdatatype_cname &&
+ cname_ok)) {
+ /*
+ * We've found the answer!
+ */
+ found = header;
+ if (header->type == dns_rdatatype_cname &&
+ cname_ok) {
+ /*
+ * We may be finding a CNAME instead
+ * of the desired type.
+ *
+ * If we've already got the CNAME RRSIG,
+ * use it, otherwise change sigtype
+ * so that we find it.
+ */
+ if (cnamesig != NULL)
+ foundsig = cnamesig;
+ else
+ sigtype =
+ RBTDB_RDATATYPE_SIGCNAME;
+ }
+ /*
+ * If we've got all we need, end the search.
+ */
+ if (!maybe_zonecut && foundsig != NULL)
+ break;
+ } else if (header->type == sigtype) {
+ /*
+ * We've found the RRSIG rdataset for our
+ * target type. Remember it.
+ */
+ foundsig = header;
+ /*
+ * If we've got all we need, end the search.
+ */
+ if (!maybe_zonecut && found != NULL)
+ break;
+ } else if (header->type == dns_rdatatype_nsec) {
+ /*
+ * Remember a NSEC rdataset even if we're
+ * not specifically looking for it, because
+ * we might need it later.
+ */
+ nsecheader = header;
+ } else if (header->type == RBTDB_RDATATYPE_SIGNSEC) {
+ /*
+ * If we need the NSEC rdataset, we'll also
+ * need its signature.
+ */
+ nsecsig = header;
+ } else if (cname_ok &&
+ header->type == RBTDB_RDATATYPE_SIGCNAME) {
+ /*
+ * If we get a CNAME match, we'll also need
+ * its signature.
+ */
+ cnamesig = header;
+ }
+ }
+ }
+
+ if (empty_node) {
+ /*
+ * We have an exact match for the name, but there are no
+ * active rdatasets in the desired version. That means that
+ * this node doesn't exist in the desired version, and that
+ * we really have a partial match.
+ */
+ if (!wild) {
+ lock = &search.rbtdb->node_locks[node->locknum].lock;
+ NODE_UNLOCK(lock, isc_rwlocktype_read);
+ goto partial_match;
+ }
+ }
+
+ /*
+ * If we didn't find what we were looking for...
+ */
+ if (found == NULL) {
+ if (search.zonecut != NULL) {
+ /*
+ * We were trying to find glue at a node beneath a
+ * zone cut, but didn't.
+ *
+ * Return the delegation.
+ */
+ lock = &search.rbtdb->node_locks[node->locknum].lock;
+ NODE_UNLOCK(lock, isc_rwlocktype_read);
+ result = setup_delegation(&search, nodep, foundname,
+ rdataset, sigrdataset);
+ goto tree_exit;
+ }
+ /*
+ * The desired type doesn't exist.
+ */
+ result = DNS_R_NXRRSET;
+ if (search.rbtdb->secure &&
+ (nsecheader == NULL || nsecsig == NULL)) {
+ /*
+ * The zone is secure but there's no NSEC,
+ * or the NSEC has no signature!
+ */
+ if (!wild) {
+ result = DNS_R_BADDB;
+ goto node_exit;
+ }
+
+ lock = &search.rbtdb->node_locks[node->locknum].lock;
+ NODE_UNLOCK(lock, isc_rwlocktype_read);
+ result = find_closest_nsec(&search, nodep, foundname,
+ rdataset, sigrdataset,
+ search.rbtdb->secure);
+ if (result == ISC_R_SUCCESS)
+ result = DNS_R_EMPTYWILD;
+ goto tree_exit;
+ }
+ if ((search.options & DNS_DBFIND_FORCENSEC) != 0 &&
+ nsecheader == NULL)
+ {
+ /*
+ * There's no NSEC record, and we were told
+ * to find one.
+ */
+ result = DNS_R_BADDB;
+ goto node_exit;
+ }
+ if (nodep != NULL) {
+ new_reference(search.rbtdb, node);
+ *nodep = node;
+ }
+ if (search.rbtdb->secure ||
+ (search.options & DNS_DBFIND_FORCENSEC) != 0)
+ {
+ bind_rdataset(search.rbtdb, node, nsecheader,
+ 0, rdataset);
+ if (nsecsig != NULL)
+ bind_rdataset(search.rbtdb, node,
+ nsecsig, 0, sigrdataset);
+ }
+ if (wild)
+ foundname->attributes |= DNS_NAMEATTR_WILDCARD;
+ goto node_exit;
+ }
+
+ /*
+ * We found what we were looking for, or we found a CNAME.
+ */
+
+ if (type != found->type &&
+ type != dns_rdatatype_any &&
+ found->type == dns_rdatatype_cname) {
+ /*
+ * We weren't doing an ANY query and we found a CNAME instead
+ * of the type we were looking for, so we need to indicate
+ * that result to the caller.
+ */
+ result = DNS_R_CNAME;
+ } else if (search.zonecut != NULL) {
+ /*
+ * If we're beneath a zone cut, we must indicate that the
+ * result is glue, unless we're actually at the zone cut
+ * and the type is NSEC or KEY.
+ */
+ if (search.zonecut == node) {
+ /*
+ * It is not clear if KEY should still be
+ * allowed at the parent side of the zone
+ * cut or not. It is needed for RFC3007
+ * validated updates.
+ */
+ if (type == dns_rdatatype_nsec ||
+ type == dns_rdatatype_key)
+ result = ISC_R_SUCCESS;
+ else if (type == dns_rdatatype_any)
+ result = DNS_R_ZONECUT;
+ else
+ result = DNS_R_GLUE;
+ } else
+ result = DNS_R_GLUE;
+ /*
+ * We might have found data that isn't glue, but was occluded
+ * by a dynamic update. If the caller cares about this, they
+ * will have told us to validate glue.
+ *
+ * XXX We should cache the glue validity state!
+ */
+ if (result == DNS_R_GLUE &&
+ (search.options & DNS_DBFIND_VALIDATEGLUE) != 0 &&
+ !valid_glue(&search, foundname, type, node)) {
+ lock = &search.rbtdb->node_locks[node->locknum].lock;
+ NODE_UNLOCK(lock, isc_rwlocktype_read);
+ result = setup_delegation(&search, nodep, foundname,
+ rdataset, sigrdataset);
+ goto tree_exit;
+ }
+ } else {
+ /*
+ * An ordinary successful query!
+ */
+ result = ISC_R_SUCCESS;
+ }
+
+ if (nodep != NULL) {
+ if (!at_zonecut)
+ new_reference(search.rbtdb, node);
+ else
+ search.need_cleanup = ISC_FALSE;
+ *nodep = node;
+ }
+
+ if (type != dns_rdatatype_any) {
+ bind_rdataset(search.rbtdb, node, found, 0, rdataset);
+ if (foundsig != NULL)
+ bind_rdataset(search.rbtdb, node, foundsig, 0,
+ sigrdataset);
+ }
+
+ if (wild)
+ foundname->attributes |= DNS_NAMEATTR_WILDCARD;
node_exit:
- NODE_UNLOCK(&(search.rbtdb->node_locks[node->locknum].lock),
- isc_rwlocktype_read);
+ NODE_UNLOCK(&(search.rbtdb->node_locks[node->locknum].lock),
+ isc_rwlocktype_read);
tree_exit:
- RWUNLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read);
+ RWUNLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read);
- /*
- * If we found a zonecut but aren't going to use it, we have to
- * let go of it.
- */
- if (search.need_cleanup) {
- node = search.zonecut;
- lock = &(search.rbtdb->node_locks[node->locknum].lock);
+ /*
+ * If we found a zonecut but aren't going to use it, we have to
+ * let go of it.
+ */
+ if (search.need_cleanup) {
+ node = search.zonecut;
+ lock = &(search.rbtdb->node_locks[node->locknum].lock);
- NODE_LOCK(lock, isc_rwlocktype_read);
- decrement_reference(search.rbtdb, node, 0,
- isc_rwlocktype_read, isc_rwlocktype_none);
- NODE_UNLOCK(lock, isc_rwlocktype_read);
- }
+ NODE_LOCK(lock, isc_rwlocktype_read);
+ decrement_reference(search.rbtdb, node, 0,
+ isc_rwlocktype_read, isc_rwlocktype_none);
+ NODE_UNLOCK(lock, isc_rwlocktype_read);
+ }
- if (close_version)
- closeversion(db, &version, ISC_FALSE);
+ if (close_version)
+ closeversion(db, &version, ISC_FALSE);
- dns_rbtnodechain_reset(&search.chain);
+ dns_rbtnodechain_reset(&search.chain);
- return (result);
+ return (result);
}
static isc_result_t
zone_findzonecut(dns_db_t *db, dns_name_t *name, unsigned int options,
- isc_stdtime_t now, dns_dbnode_t **nodep,
- dns_name_t *foundname,
- dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
+ isc_stdtime_t now, dns_dbnode_t **nodep,
+ dns_name_t *foundname,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
{
- UNUSED(db);
- UNUSED(name);
- UNUSED(options);
- UNUSED(now);
- UNUSED(nodep);
- UNUSED(foundname);
- UNUSED(rdataset);
- UNUSED(sigrdataset);
-
- FATAL_ERROR(__FILE__, __LINE__, "zone_findzonecut() called!");
-
- return (ISC_R_NOTIMPLEMENTED);
+ UNUSED(db);
+ UNUSED(name);
+ UNUSED(options);
+ UNUSED(now);
+ UNUSED(nodep);
+ UNUSED(foundname);
+ UNUSED(rdataset);
+ UNUSED(sigrdataset);
+
+ FATAL_ERROR(__FILE__, __LINE__, "zone_findzonecut() called!");
+
+ return (ISC_R_NOTIMPLEMENTED);
}
static isc_result_t
cache_zonecut_callback(dns_rbtnode_t *node, dns_name_t *name, void *arg) {
- rbtdb_search_t *search = arg;
- rdatasetheader_t *header, *header_prev, *header_next;
- rdatasetheader_t *dname_header, *sigdname_header;
- isc_result_t result;
- nodelock_t *lock;
- isc_rwlocktype_t locktype;
-
- /* XXX comment */
-
- REQUIRE(search->zonecut == NULL);
-
- /*
- * Keep compiler silent.
- */
- UNUSED(name);
-
- lock = &(search->rbtdb->node_locks[node->locknum].lock);
- locktype = isc_rwlocktype_read;
- NODE_LOCK(lock, locktype);
-
- /*
- * Look for a DNAME or RRSIG DNAME rdataset.
- */
- dname_header = NULL;
- sigdname_header = NULL;
- header_prev = NULL;
- for (header = node->data; header != NULL; header = header_next) {
- header_next = header->next;
- if (header->rdh_ttl <= search->now) {
- /*
- * This rdataset is stale. If no one else is
- * using the node, we can clean it up right
- * now, otherwise we mark it as stale, and
- * the node as dirty, so it will get cleaned
- * up later.
- */
- if ((header->rdh_ttl <= search->now - RBTDB_VIRTUAL) &&
- (locktype == isc_rwlocktype_write ||
- NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) {
- /*
- * We update the node's status only when we
- * can get write access; otherwise, we leave
- * others to this work. Periodical cleaning
- * will eventually take the job as the last
- * resort.
- * We won't downgrade the lock, since other
- * rdatasets are probably stale, too.
- */
- locktype = isc_rwlocktype_write;
-
- if (dns_rbtnode_refcurrent(node) == 0) {
- isc_mem_t *mctx;
-
- /*
- * header->down can be non-NULL if the
- * refcount has just decremented to 0
- * but decrement_reference() has not
- * performed clean_cache_node(), in
- * which case we need to purge the
- * stale headers first.
- */
- mctx = search->rbtdb->common.mctx;
- clean_stale_headers(search->rbtdb,
- mctx,
- header);
- if (header_prev != NULL)
- header_prev->next =
- header->next;
- else
- node->data = header->next;
- free_rdataset(search->rbtdb, mctx,
- header);
- } else {
- header->attributes |=
- RDATASET_ATTR_STALE;
- node->dirty = 1;
- header_prev = header;
- }
- } else
- header_prev = header;
- } else if (header->type == dns_rdatatype_dname &&
- EXISTS(header)) {
- dname_header = header;
- header_prev = header;
- } else if (header->type == RBTDB_RDATATYPE_SIGDNAME &&
- EXISTS(header)) {
- sigdname_header = header;
- header_prev = header;
- } else
- header_prev = header;
- }
-
- if (dname_header != NULL &&
- (dname_header->trust != dns_trust_pending ||
- (search->options & DNS_DBFIND_PENDINGOK) != 0)) {
- /*
- * We increment the reference count on node to ensure that
- * search->zonecut_rdataset will still be valid later.
- */
- new_reference(search->rbtdb, node);
- search->zonecut = node;
- search->zonecut_rdataset = dname_header;
- search->zonecut_sigrdataset = sigdname_header;
- search->need_cleanup = ISC_TRUE;
- result = DNS_R_PARTIALMATCH;
- } else
- result = DNS_R_CONTINUE;
-
- NODE_UNLOCK(lock, locktype);
-
- return (result);
+ rbtdb_search_t *search = arg;
+ rdatasetheader_t *header, *header_prev, *header_next;
+ rdatasetheader_t *dname_header, *sigdname_header;
+ isc_result_t result;
+ nodelock_t *lock;
+ isc_rwlocktype_t locktype;
+
+ /* XXX comment */
+
+ REQUIRE(search->zonecut == NULL);
+
+ /*
+ * Keep compiler silent.
+ */
+ UNUSED(name);
+
+ lock = &(search->rbtdb->node_locks[node->locknum].lock);
+ locktype = isc_rwlocktype_read;
+ NODE_LOCK(lock, locktype);
+
+ /*
+ * Look for a DNAME or RRSIG DNAME rdataset.
+ */
+ dname_header = NULL;
+ sigdname_header = NULL;
+ header_prev = NULL;
+ for (header = node->data; header != NULL; header = header_next) {
+ header_next = header->next;
+ if (header->rdh_ttl <= search->now) {
+ /*
+ * This rdataset is stale. If no one else is
+ * using the node, we can clean it up right
+ * now, otherwise we mark it as stale, and
+ * the node as dirty, so it will get cleaned
+ * up later.
+ */
+ if ((header->rdh_ttl <= search->now - RBTDB_VIRTUAL) &&
+ (locktype == isc_rwlocktype_write ||
+ NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) {
+ /*
+ * We update the node's status only when we
+ * can get write access; otherwise, we leave
+ * others to this work. Periodical cleaning
+ * will eventually take the job as the last
+ * resort.
+ * We won't downgrade the lock, since other
+ * rdatasets are probably stale, too.
+ */
+ locktype = isc_rwlocktype_write;
+
+ if (dns_rbtnode_refcurrent(node) == 0) {
+ isc_mem_t *mctx;
+
+ /*
+ * header->down can be non-NULL if the
+ * refcount has just decremented to 0
+ * but decrement_reference() has not
+ * performed clean_cache_node(), in
+ * which case we need to purge the
+ * stale headers first.
+ */
+ mctx = search->rbtdb->common.mctx;
+ clean_stale_headers(search->rbtdb,
+ mctx,
+ header);
+ if (header_prev != NULL)
+ header_prev->next =
+ header->next;
+ else
+ node->data = header->next;
+ free_rdataset(search->rbtdb, mctx,
+ header);
+ } else {
+ header->attributes |=
+ RDATASET_ATTR_STALE;
+ node->dirty = 1;
+ header_prev = header;
+ }
+ } else
+ header_prev = header;
+ } else if (header->type == dns_rdatatype_dname &&
+ EXISTS(header)) {
+ dname_header = header;
+ header_prev = header;
+ } else if (header->type == RBTDB_RDATATYPE_SIGDNAME &&
+ EXISTS(header)) {
+ sigdname_header = header;
+ header_prev = header;
+ } else
+ header_prev = header;
+ }
+
+ if (dname_header != NULL &&
+ (dname_header->trust != dns_trust_pending ||
+ (search->options & DNS_DBFIND_PENDINGOK) != 0)) {
+ /*
+ * We increment the reference count on node to ensure that
+ * search->zonecut_rdataset will still be valid later.
+ */
+ new_reference(search->rbtdb, node);
+ search->zonecut = node;
+ search->zonecut_rdataset = dname_header;
+ search->zonecut_sigrdataset = sigdname_header;
+ search->need_cleanup = ISC_TRUE;
+ result = DNS_R_PARTIALMATCH;
+ } else
+ result = DNS_R_CONTINUE;
+
+ NODE_UNLOCK(lock, locktype);
+
+ return (result);
}
static inline isc_result_t
find_deepest_zonecut(rbtdb_search_t *search, dns_rbtnode_t *node,
- dns_dbnode_t **nodep, dns_name_t *foundname,
- dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
+ dns_dbnode_t **nodep, dns_name_t *foundname,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
{
- unsigned int i;
- dns_rbtnode_t *level_node;
- rdatasetheader_t *header, *header_prev, *header_next;
- rdatasetheader_t *found, *foundsig;
- isc_result_t result = ISC_R_NOTFOUND;
- dns_name_t name;
- dns_rbtdb_t *rbtdb;
- isc_boolean_t done;
- nodelock_t *lock;
- isc_rwlocktype_t locktype;
-
- /*
- * Caller must be holding the tree lock.
- */
-
- rbtdb = search->rbtdb;
- i = search->chain.level_matches;
- done = ISC_FALSE;
- do {
- locktype = isc_rwlocktype_read;
- lock = &rbtdb->node_locks[node->locknum].lock;
- NODE_LOCK(lock, locktype);
-
- /*
- * Look for NS and RRSIG NS rdatasets.
- */
- found = NULL;
- foundsig = NULL;
- header_prev = NULL;
- for (header = node->data;
- header != NULL;
- header = header_next) {
- header_next = header->next;
- if (header->rdh_ttl <= search->now) {
- /*
- * This rdataset is stale. If no one else is
- * using the node, we can clean it up right
- * now, otherwise we mark it as stale, and
- * the node as dirty, so it will get cleaned
- * up later.
- */
- if ((header->rdh_ttl <= search->now -
- RBTDB_VIRTUAL) &&
- (locktype == isc_rwlocktype_write ||
- NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) {
- /*
- * We update the node's status only
- * when we can get write access.
- */
- locktype = isc_rwlocktype_write;
-
- if (dns_rbtnode_refcurrent(node)
- == 0) {
- isc_mem_t *m;
-
- m = search->rbtdb->common.mctx;
- clean_stale_headers(
- search->rbtdb,
- m, header);
- if (header_prev != NULL)
- header_prev->next =
- header->next;
- else
- node->data =
- header->next;
- free_rdataset(rbtdb, m,
- header);
- } else {
- header->attributes |=
- RDATASET_ATTR_STALE;
- node->dirty = 1;
- header_prev = header;
- }
- } else
- header_prev = header;
- } else if (EXISTS(header)) {
- /*
- * We've found an extant rdataset. See if
- * we're interested in it.
- */
- if (header->type == dns_rdatatype_ns) {
- found = header;
- if (foundsig != NULL)
- break;
- } else if (header->type ==
- RBTDB_RDATATYPE_SIGNS) {
- foundsig = header;
- if (found != NULL)
- break;
- }
- header_prev = header;
- } else
- header_prev = header;
- }
-
- if (found != NULL) {
- /*
- * If we have to set foundname, we do it before
- * anything else. If we were to set foundname after
- * we had set nodep or bound the rdataset, then we'd
- * have to undo that work if dns_name_concatenate()
- * failed. By setting foundname first, there's
- * nothing to undo if we have trouble.
- */
- if (foundname != NULL) {
- dns_name_init(&name, NULL);
- dns_rbt_namefromnode(node, &name);
- result = dns_name_copy(&name, foundname, NULL);
- while (result == ISC_R_SUCCESS && i > 0) {
- i--;
- level_node = search->chain.levels[i];
- dns_name_init(&name, NULL);
- dns_rbt_namefromnode(level_node,
- &name);
- result =
- dns_name_concatenate(foundname,
- &name,
- foundname,
- NULL);
- }
- if (result != ISC_R_SUCCESS) {
- *nodep = NULL;
- goto node_exit;
- }
- }
- result = DNS_R_DELEGATION;
- if (nodep != NULL) {
- new_reference(search->rbtdb, node);
- *nodep = node;
- }
- bind_rdataset(search->rbtdb, node, found, search->now,
- rdataset);
- if (foundsig != NULL)
- bind_rdataset(search->rbtdb, node, foundsig,
- search->now, sigrdataset);
- if (need_headerupdate(found, search->now) ||
- (foundsig != NULL &&
- need_headerupdate(foundsig, search->now))) {
- if (locktype != isc_rwlocktype_write) {
- NODE_UNLOCK(lock, locktype);
- NODE_LOCK(lock, isc_rwlocktype_write);
- locktype = isc_rwlocktype_write;
- }
- if (need_headerupdate(found, search->now))
- update_header(search->rbtdb, found,
- search->now);
- if (foundsig != NULL &&
- need_headerupdate(foundsig, search->now)) {
- update_header(search->rbtdb, foundsig,
- search->now);
- }
- }
- }
-
- node_exit:
- NODE_UNLOCK(lock, locktype);
-
- if (found == NULL && i > 0) {
- i--;
- node = search->chain.levels[i];
- } else
- done = ISC_TRUE;
-
- } while (!done);
-
- return (result);
+ unsigned int i;
+ dns_rbtnode_t *level_node;
+ rdatasetheader_t *header, *header_prev, *header_next;
+ rdatasetheader_t *found, *foundsig;
+ isc_result_t result = ISC_R_NOTFOUND;
+ dns_name_t name;
+ dns_rbtdb_t *rbtdb;
+ isc_boolean_t done;
+ nodelock_t *lock;
+ isc_rwlocktype_t locktype;
+
+ /*
+ * Caller must be holding the tree lock.
+ */
+
+ rbtdb = search->rbtdb;
+ i = search->chain.level_matches;
+ done = ISC_FALSE;
+ do {
+ locktype = isc_rwlocktype_read;
+ lock = &rbtdb->node_locks[node->locknum].lock;
+ NODE_LOCK(lock, locktype);
+
+ /*
+ * Look for NS and RRSIG NS rdatasets.
+ */
+ found = NULL;
+ foundsig = NULL;
+ header_prev = NULL;
+ for (header = node->data;
+ header != NULL;
+ header = header_next) {
+ header_next = header->next;
+ if (header->rdh_ttl <= search->now) {
+ /*
+ * This rdataset is stale. If no one else is
+ * using the node, we can clean it up right
+ * now, otherwise we mark it as stale, and
+ * the node as dirty, so it will get cleaned
+ * up later.
+ */
+ if ((header->rdh_ttl <= search->now -
+ RBTDB_VIRTUAL) &&
+ (locktype == isc_rwlocktype_write ||
+ NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) {
+ /*
+ * We update the node's status only
+ * when we can get write access.
+ */
+ locktype = isc_rwlocktype_write;
+
+ if (dns_rbtnode_refcurrent(node)
+ == 0) {
+ isc_mem_t *m;
+
+ m = search->rbtdb->common.mctx;
+ clean_stale_headers(
+ search->rbtdb,
+ m, header);
+ if (header_prev != NULL)
+ header_prev->next =
+ header->next;
+ else
+ node->data =
+ header->next;
+ free_rdataset(rbtdb, m,
+ header);
+ } else {
+ header->attributes |=
+ RDATASET_ATTR_STALE;
+ node->dirty = 1;
+ header_prev = header;
+ }
+ } else
+ header_prev = header;
+ } else if (EXISTS(header)) {
+ /*
+ * We've found an extant rdataset. See if
+ * we're interested in it.
+ */
+ if (header->type == dns_rdatatype_ns) {
+ found = header;
+ if (foundsig != NULL)
+ break;
+ } else if (header->type ==
+ RBTDB_RDATATYPE_SIGNS) {
+ foundsig = header;
+ if (found != NULL)
+ break;
+ }
+ header_prev = header;
+ } else
+ header_prev = header;
+ }
+
+ if (found != NULL) {
+ /*
+ * If we have to set foundname, we do it before
+ * anything else. If we were to set foundname after
+ * we had set nodep or bound the rdataset, then we'd
+ * have to undo that work if dns_name_concatenate()
+ * failed. By setting foundname first, there's
+ * nothing to undo if we have trouble.
+ */
+ if (foundname != NULL) {
+ dns_name_init(&name, NULL);
+ dns_rbt_namefromnode(node, &name);
+ result = dns_name_copy(&name, foundname, NULL);
+ while (result == ISC_R_SUCCESS && i > 0) {
+ i--;
+ level_node = search->chain.levels[i];
+ dns_name_init(&name, NULL);
+ dns_rbt_namefromnode(level_node,
+ &name);
+ result =
+ dns_name_concatenate(foundname,
+ &name,
+ foundname,
+ NULL);
+ }
+ if (result != ISC_R_SUCCESS) {
+ *nodep = NULL;
+ goto node_exit;
+ }
+ }
+ result = DNS_R_DELEGATION;
+ if (nodep != NULL) {
+ new_reference(search->rbtdb, node);
+ *nodep = node;
+ }
+ bind_rdataset(search->rbtdb, node, found, search->now,
+ rdataset);
+ if (foundsig != NULL)
+ bind_rdataset(search->rbtdb, node, foundsig,
+ search->now, sigrdataset);
+ if (need_headerupdate(found, search->now) ||
+ (foundsig != NULL &&
+ need_headerupdate(foundsig, search->now))) {
+ if (locktype != isc_rwlocktype_write) {
+ NODE_UNLOCK(lock, locktype);
+ NODE_LOCK(lock, isc_rwlocktype_write);
+ locktype = isc_rwlocktype_write;
+ }
+ if (need_headerupdate(found, search->now))
+ update_header(search->rbtdb, found,
+ search->now);
+ if (foundsig != NULL &&
+ need_headerupdate(foundsig, search->now)) {
+ update_header(search->rbtdb, foundsig,
+ search->now);
+ }
+ }
+ }
+
+ node_exit:
+ NODE_UNLOCK(lock, locktype);
+
+ if (found == NULL && i > 0) {
+ i--;
+ node = search->chain.levels[i];
+ } else
+ done = ISC_TRUE;
+
+ } while (!done);
+
+ return (result);
}
static isc_result_t
find_coveringnsec(rbtdb_search_t *search, dns_dbnode_t **nodep,
- isc_stdtime_t now, dns_name_t *foundname,
- dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
+ isc_stdtime_t now, dns_name_t *foundname,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
{
- dns_rbtnode_t *node;
- rdatasetheader_t *header, *header_next, *header_prev;
- rdatasetheader_t *found, *foundsig;
- isc_boolean_t empty_node;
- isc_result_t result;
- dns_fixedname_t fname, forigin;
- dns_name_t *name, *origin;
- rbtdb_rdatatype_t matchtype, sigmatchtype;
- nodelock_t *lock;
- isc_rwlocktype_t locktype;
-
- matchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_nsec, 0);
- sigmatchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig,
- dns_rdatatype_nsec);
-
- do {
- node = NULL;
- dns_fixedname_init(&fname);
- name = dns_fixedname_name(&fname);
- dns_fixedname_init(&forigin);
- origin = dns_fixedname_name(&forigin);
- result = dns_rbtnodechain_current(&search->chain, name,
- origin, &node);
- if (result != ISC_R_SUCCESS)
- return (result);
- locktype = isc_rwlocktype_read;
- lock = &(search->rbtdb->node_locks[node->locknum].lock);
- NODE_LOCK(lock, locktype);
- found = NULL;
- foundsig = NULL;
- empty_node = ISC_TRUE;
- header_prev = NULL;
- for (header = node->data;
- header != NULL;
- header = header_next) {
- header_next = header->next;
- if (header->rdh_ttl <= now) {
- /*
- * This rdataset is stale. If no one else is
- * using the node, we can clean it up right
- * now, otherwise we mark it as stale, and the
- * node as dirty, so it will get cleaned up
- * later.
- */
- if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) &&
- (locktype == isc_rwlocktype_write ||
- NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) {
- /*
- * We update the node's status only
- * when we can get write access.
- */
- locktype = isc_rwlocktype_write;
-
- if (dns_rbtnode_refcurrent(node)
- == 0) {
- isc_mem_t *m;
-
- m = search->rbtdb->common.mctx;
- clean_stale_headers(
- search->rbtdb,
- m, header);
- if (header_prev != NULL)
- header_prev->next =
- header->next;
- else
- node->data = header->next;
- free_rdataset(search->rbtdb, m,
- header);
- } else {
- header->attributes |=
- RDATASET_ATTR_STALE;
- node->dirty = 1;
- header_prev = header;
- }
- } else
- header_prev = header;
- continue;
- }
- if (NONEXISTENT(header) ||
- RBTDB_RDATATYPE_BASE(header->type) == 0) {
- header_prev = header;
- continue;
- }
- empty_node = ISC_FALSE;
- if (header->type == matchtype)
- found = header;
- else if (header->type == sigmatchtype)
- foundsig = header;
- header_prev = header;
- }
- if (found != NULL) {
- result = dns_name_concatenate(name, origin,
- foundname, NULL);
- if (result != ISC_R_SUCCESS)
- goto unlock_node;
- bind_rdataset(search->rbtdb, node, found,
- now, rdataset);
- if (foundsig != NULL)
- bind_rdataset(search->rbtdb, node, foundsig,
- now, sigrdataset);
- new_reference(search->rbtdb, node);
- *nodep = node;
- result = DNS_R_COVERINGNSEC;
- } else if (!empty_node) {
- result = ISC_R_NOTFOUND;
- } else
- result = dns_rbtnodechain_prev(&search->chain, NULL,
- NULL);
+ dns_rbtnode_t *node;
+ rdatasetheader_t *header, *header_next, *header_prev;
+ rdatasetheader_t *found, *foundsig;
+ isc_boolean_t empty_node;
+ isc_result_t result;
+ dns_fixedname_t fname, forigin;
+ dns_name_t *name, *origin;
+ rbtdb_rdatatype_t matchtype, sigmatchtype;
+ nodelock_t *lock;
+ isc_rwlocktype_t locktype;
+
+ matchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_nsec, 0);
+ sigmatchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig,
+ dns_rdatatype_nsec);
+
+ do {
+ node = NULL;
+ dns_fixedname_init(&fname);
+ name = dns_fixedname_name(&fname);
+ dns_fixedname_init(&forigin);
+ origin = dns_fixedname_name(&forigin);
+ result = dns_rbtnodechain_current(&search->chain, name,
+ origin, &node);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ locktype = isc_rwlocktype_read;
+ lock = &(search->rbtdb->node_locks[node->locknum].lock);
+ NODE_LOCK(lock, locktype);
+ found = NULL;
+ foundsig = NULL;
+ empty_node = ISC_TRUE;
+ header_prev = NULL;
+ for (header = node->data;
+ header != NULL;
+ header = header_next) {
+ header_next = header->next;
+ if (header->rdh_ttl <= now) {
+ /*
+ * This rdataset is stale. If no one else is
+ * using the node, we can clean it up right
+ * now, otherwise we mark it as stale, and the
+ * node as dirty, so it will get cleaned up
+ * later.
+ */
+ if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) &&
+ (locktype == isc_rwlocktype_write ||
+ NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) {
+ /*
+ * We update the node's status only
+ * when we can get write access.
+ */
+ locktype = isc_rwlocktype_write;
+
+ if (dns_rbtnode_refcurrent(node)
+ == 0) {
+ isc_mem_t *m;
+
+ m = search->rbtdb->common.mctx;
+ clean_stale_headers(
+ search->rbtdb,
+ m, header);
+ if (header_prev != NULL)
+ header_prev->next =
+ header->next;
+ else
+ node->data = header->next;
+ free_rdataset(search->rbtdb, m,
+ header);
+ } else {
+ header->attributes |=
+ RDATASET_ATTR_STALE;
+ node->dirty = 1;
+ header_prev = header;
+ }
+ } else
+ header_prev = header;
+ continue;
+ }
+ if (NONEXISTENT(header) ||
+ RBTDB_RDATATYPE_BASE(header->type) == 0) {
+ header_prev = header;
+ continue;
+ }
+ empty_node = ISC_FALSE;
+ if (header->type == matchtype)
+ found = header;
+ else if (header->type == sigmatchtype)
+ foundsig = header;
+ header_prev = header;
+ }
+ if (found != NULL) {
+ result = dns_name_concatenate(name, origin,
+ foundname, NULL);
+ if (result != ISC_R_SUCCESS)
+ goto unlock_node;
+ bind_rdataset(search->rbtdb, node, found,
+ now, rdataset);
+ if (foundsig != NULL)
+ bind_rdataset(search->rbtdb, node, foundsig,
+ now, sigrdataset);
+ new_reference(search->rbtdb, node);
+ *nodep = node;
+ result = DNS_R_COVERINGNSEC;
+ } else if (!empty_node) {
+ result = ISC_R_NOTFOUND;
+ } else
+ result = dns_rbtnodechain_prev(&search->chain, NULL,
+ NULL);
unlock_node:
- NODE_UNLOCK(lock, locktype);
- } while (empty_node && result == ISC_R_SUCCESS);
- return (result);
+ NODE_UNLOCK(lock, locktype);
+ } while (empty_node && result == ISC_R_SUCCESS);
+ return (result);
}
static isc_result_t
cache_find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
- dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
- dns_dbnode_t **nodep, dns_name_t *foundname,
- dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
+ dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
+ dns_dbnode_t **nodep, dns_name_t *foundname,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
{
- dns_rbtnode_t *node = NULL;
- isc_result_t result;
- rbtdb_search_t search;
- isc_boolean_t cname_ok = ISC_TRUE;
- isc_boolean_t empty_node;
- nodelock_t *lock;
- isc_rwlocktype_t locktype;
- rdatasetheader_t *header, *header_prev, *header_next;
- rdatasetheader_t *found, *nsheader;
- rdatasetheader_t *foundsig, *nssig, *cnamesig;
- rdatasetheader_t *update, *updatesig;
- rbtdb_rdatatype_t sigtype, negtype;
-
- UNUSED(version);
-
- search.rbtdb = (dns_rbtdb_t *)db;
-
- REQUIRE(VALID_RBTDB(search.rbtdb));
- REQUIRE(version == NULL);
-
- if (now == 0)
- isc_stdtime_get(&now);
-
- search.rbtversion = NULL;
- search.serial = 1;
- search.options = options;
- search.copy_name = ISC_FALSE;
- search.need_cleanup = ISC_FALSE;
- search.wild = ISC_FALSE;
- search.zonecut = NULL;
- dns_fixedname_init(&search.zonecut_name);
- dns_rbtnodechain_init(&search.chain, search.rbtdb->common.mctx);
- search.now = now;
- update = NULL;
- updatesig = NULL;
-
- RWLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read);
-
- /*
- * Search down from the root of the tree. If, while going down, we
- * encounter a callback node, cache_zonecut_callback() will search the
- * rdatasets at the zone cut for a DNAME rdataset.
- */
- result = dns_rbt_findnode(search.rbtdb->tree, name, foundname, &node,
- &search.chain, DNS_RBTFIND_EMPTYDATA,
- cache_zonecut_callback, &search);
-
- if (result == DNS_R_PARTIALMATCH) {
- if ((search.options & DNS_DBFIND_COVERINGNSEC) != 0) {
- result = find_coveringnsec(&search, nodep, now,
- foundname, rdataset,
- sigrdataset);
- if (result == DNS_R_COVERINGNSEC)
- goto tree_exit;
- }
- if (search.zonecut != NULL) {
- result = setup_delegation(&search, nodep, foundname,
- rdataset, sigrdataset);
- goto tree_exit;
- } else {
- find_ns:
- result = find_deepest_zonecut(&search, node, nodep,
- foundname, rdataset,
- sigrdataset);
- goto tree_exit;
- }
- } else if (result != ISC_R_SUCCESS)
- goto tree_exit;
-
- /*
- * Certain DNSSEC types are not subject to CNAME matching
- * (RFC4035, section 2.5 and RFC3007).
- *
- * We don't check for RRSIG, because we don't store RRSIG records
- * directly.
- */
- if (type == dns_rdatatype_key || type == dns_rdatatype_nsec)
- cname_ok = ISC_FALSE;
-
- /*
- * We now go looking for rdata...
- */
-
- lock = &(search.rbtdb->node_locks[node->locknum].lock);
- locktype = isc_rwlocktype_read;
- NODE_LOCK(lock, locktype);
-
- found = NULL;
- foundsig = NULL;
- sigtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type);
- negtype = RBTDB_RDATATYPE_VALUE(0, type);
- nsheader = NULL;
- nssig = NULL;
- cnamesig = NULL;
- empty_node = ISC_TRUE;
- header_prev = NULL;
- for (header = node->data; header != NULL; header = header_next) {
- header_next = header->next;
- if (header->rdh_ttl <= now) {
- /*
- * This rdataset is stale. If no one else is using the
- * node, we can clean it up right now, otherwise we
- * mark it as stale, and the node as dirty, so it will
- * get cleaned up later.
- */
- if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) &&
- (locktype == isc_rwlocktype_write ||
- NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) {
- /*
- * We update the node's status only when we
- * can get write access.
- */
- locktype = isc_rwlocktype_write;
-
- if (dns_rbtnode_refcurrent(node) == 0) {
- isc_mem_t *mctx;
-
- mctx = search.rbtdb->common.mctx;
- clean_stale_headers(search.rbtdb, mctx,
- header);
- if (header_prev != NULL)
- header_prev->next =
- header->next;
- else
- node->data = header->next;
- free_rdataset(search.rbtdb, mctx,
- header);
- } else {
- header->attributes |=
- RDATASET_ATTR_STALE;
- node->dirty = 1;
- header_prev = header;
- }
- } else
- header_prev = header;
- } else if (EXISTS(header)) {
- /*
- * We now know that there is at least one active
- * non-stale rdataset at this node.
- */
- empty_node = ISC_FALSE;
-
- /*
- * If we found a type we were looking for, remember
- * it.
- */
- if (header->type == type ||
- (type == dns_rdatatype_any &&
- RBTDB_RDATATYPE_BASE(header->type) != 0) ||
- (cname_ok && header->type ==
- dns_rdatatype_cname)) {
- /*
- * We've found the answer.
- */
- found = header;
- if (header->type == dns_rdatatype_cname &&
- cname_ok &&
- cnamesig != NULL) {
- /*
- * If we've already got the CNAME RRSIG,
- * use it, otherwise change sigtype
- * so that we find it.
- */
- if (cnamesig != NULL)
- foundsig = cnamesig;
- else
- sigtype =
- RBTDB_RDATATYPE_SIGCNAME;
- foundsig = cnamesig;
- }
- } else if (header->type == sigtype) {
- /*
- * We've found the RRSIG rdataset for our
- * target type. Remember it.
- */
- foundsig = header;
- } else if (header->type == RBTDB_RDATATYPE_NCACHEANY ||
- header->type == negtype) {
- /*
- * We've found a negative cache entry.
- */
- found = header;
- } else if (header->type == dns_rdatatype_ns) {
- /*
- * Remember a NS rdataset even if we're
- * not specifically looking for it, because
- * we might need it later.
- */
- nsheader = header;
- } else if (header->type == RBTDB_RDATATYPE_SIGNS) {
- /*
- * If we need the NS rdataset, we'll also
- * need its signature.
- */
- nssig = header;
- } else if (cname_ok &&
- header->type == RBTDB_RDATATYPE_SIGCNAME) {
- /*
- * If we get a CNAME match, we'll also need
- * its signature.
- */
- cnamesig = header;
- }
- header_prev = header;
- } else
- header_prev = header;
- }
-
- if (empty_node) {
- /*
- * We have an exact match for the name, but there are no
- * extant rdatasets. That means that this node doesn't
- * meaningfully exist, and that we really have a partial match.
- */
- NODE_UNLOCK(lock, locktype);
- goto find_ns;
- }
-
- /*
- * If we didn't find what we were looking for...
- */
- if (found == NULL ||
- (found->trust == dns_trust_glue &&
- ((options & DNS_DBFIND_GLUEOK) == 0)) ||
- (found->trust == dns_trust_pending &&
- ((options & DNS_DBFIND_PENDINGOK) == 0))) {
- /*
- * If there is an NS rdataset at this node, then this is the
- * deepest zone cut.
- */
- if (nsheader != NULL) {
- if (nodep != NULL) {
- new_reference(search.rbtdb, node);
- *nodep = node;
- }
- bind_rdataset(search.rbtdb, node, nsheader, search.now,
- rdataset);
- if (need_headerupdate(nsheader, search.now))
- update = nsheader;
- if (nssig != NULL) {
- bind_rdataset(search.rbtdb, node, nssig,
- search.now, sigrdataset);
- if (need_headerupdate(nssig, search.now))
- updatesig = nssig;
- }
- result = DNS_R_DELEGATION;
- goto node_exit;
- }
-
- /*
- * Go find the deepest zone cut.
- */
- NODE_UNLOCK(lock, locktype);
- goto find_ns;
- }
-
- /*
- * We found what we were looking for, or we found a CNAME.
- */
-
- if (nodep != NULL) {
- new_reference(search.rbtdb, node);
- *nodep = node;
- }
-
- if (RBTDB_RDATATYPE_BASE(found->type) == 0) {
- /*
- * We found a negative cache entry.
- */
- if (NXDOMAIN(found))
- result = DNS_R_NCACHENXDOMAIN;
- else
- result = DNS_R_NCACHENXRRSET;
- } else if (type != found->type &&
- type != dns_rdatatype_any &&
- found->type == dns_rdatatype_cname) {
- /*
- * We weren't doing an ANY query and we found a CNAME instead
- * of the type we were looking for, so we need to indicate
- * that result to the caller.
- */
- result = DNS_R_CNAME;
- } else {
- /*
- * An ordinary successful query!
- */
- result = ISC_R_SUCCESS;
- }
-
- if (type != dns_rdatatype_any || result == DNS_R_NCACHENXDOMAIN ||
- result == DNS_R_NCACHENXRRSET) {
- bind_rdataset(search.rbtdb, node, found, search.now,
- rdataset);
- if (need_headerupdate(found, search.now))
- update = found;
- if (foundsig != NULL) {
- bind_rdataset(search.rbtdb, node, foundsig, search.now,
- sigrdataset);
- if (need_headerupdate(foundsig, search.now))
- updatesig = foundsig;
- }
- }
+ dns_rbtnode_t *node = NULL;
+ isc_result_t result;
+ rbtdb_search_t search;
+ isc_boolean_t cname_ok = ISC_TRUE;
+ isc_boolean_t empty_node;
+ nodelock_t *lock;
+ isc_rwlocktype_t locktype;
+ rdatasetheader_t *header, *header_prev, *header_next;
+ rdatasetheader_t *found, *nsheader;
+ rdatasetheader_t *foundsig, *nssig, *cnamesig;
+ rdatasetheader_t *update, *updatesig;
+ rbtdb_rdatatype_t sigtype, negtype;
+
+ UNUSED(version);
+
+ search.rbtdb = (dns_rbtdb_t *)db;
+
+ REQUIRE(VALID_RBTDB(search.rbtdb));
+ REQUIRE(version == NULL);
+
+ if (now == 0)
+ isc_stdtime_get(&now);
+
+ search.rbtversion = NULL;
+ search.serial = 1;
+ search.options = options;
+ search.copy_name = ISC_FALSE;
+ search.need_cleanup = ISC_FALSE;
+ search.wild = ISC_FALSE;
+ search.zonecut = NULL;
+ dns_fixedname_init(&search.zonecut_name);
+ dns_rbtnodechain_init(&search.chain, search.rbtdb->common.mctx);
+ search.now = now;
+ update = NULL;
+ updatesig = NULL;
+
+ RWLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read);
+
+ /*
+ * Search down from the root of the tree. If, while going down, we
+ * encounter a callback node, cache_zonecut_callback() will search the
+ * rdatasets at the zone cut for a DNAME rdataset.
+ */
+ result = dns_rbt_findnode(search.rbtdb->tree, name, foundname, &node,
+ &search.chain, DNS_RBTFIND_EMPTYDATA,
+ cache_zonecut_callback, &search);
+
+ if (result == DNS_R_PARTIALMATCH) {
+ if ((search.options & DNS_DBFIND_COVERINGNSEC) != 0) {
+ result = find_coveringnsec(&search, nodep, now,
+ foundname, rdataset,
+ sigrdataset);
+ if (result == DNS_R_COVERINGNSEC)
+ goto tree_exit;
+ }
+ if (search.zonecut != NULL) {
+ result = setup_delegation(&search, nodep, foundname,
+ rdataset, sigrdataset);
+ goto tree_exit;
+ } else {
+ find_ns:
+ result = find_deepest_zonecut(&search, node, nodep,
+ foundname, rdataset,
+ sigrdataset);
+ goto tree_exit;
+ }
+ } else if (result != ISC_R_SUCCESS)
+ goto tree_exit;
+
+ /*
+ * Certain DNSSEC types are not subject to CNAME matching
+ * (RFC4035, section 2.5 and RFC3007).
+ *
+ * We don't check for RRSIG, because we don't store RRSIG records
+ * directly.
+ */
+ if (type == dns_rdatatype_key || type == dns_rdatatype_nsec)
+ cname_ok = ISC_FALSE;
+
+ /*
+ * We now go looking for rdata...
+ */
+
+ lock = &(search.rbtdb->node_locks[node->locknum].lock);
+ locktype = isc_rwlocktype_read;
+ NODE_LOCK(lock, locktype);
+
+ found = NULL;
+ foundsig = NULL;
+ sigtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type);
+ negtype = RBTDB_RDATATYPE_VALUE(0, type);
+ nsheader = NULL;
+ nssig = NULL;
+ cnamesig = NULL;
+ empty_node = ISC_TRUE;
+ header_prev = NULL;
+ for (header = node->data; header != NULL; header = header_next) {
+ header_next = header->next;
+ if (header->rdh_ttl <= now) {
+ /*
+ * This rdataset is stale. If no one else is using the
+ * node, we can clean it up right now, otherwise we
+ * mark it as stale, and the node as dirty, so it will
+ * get cleaned up later.
+ */
+ if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) &&
+ (locktype == isc_rwlocktype_write ||
+ NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) {
+ /*
+ * We update the node's status only when we
+ * can get write access.
+ */
+ locktype = isc_rwlocktype_write;
+
+ if (dns_rbtnode_refcurrent(node) == 0) {
+ isc_mem_t *mctx;
+
+ mctx = search.rbtdb->common.mctx;
+ clean_stale_headers(search.rbtdb, mctx,
+ header);
+ if (header_prev != NULL)
+ header_prev->next =
+ header->next;
+ else
+ node->data = header->next;
+ free_rdataset(search.rbtdb, mctx,
+ header);
+ } else {
+ header->attributes |=
+ RDATASET_ATTR_STALE;
+ node->dirty = 1;
+ header_prev = header;
+ }
+ } else
+ header_prev = header;
+ } else if (EXISTS(header)) {
+ /*
+ * We now know that there is at least one active
+ * non-stale rdataset at this node.
+ */
+ empty_node = ISC_FALSE;
+
+ /*
+ * If we found a type we were looking for, remember
+ * it.
+ */
+ if (header->type == type ||
+ (type == dns_rdatatype_any &&
+ RBTDB_RDATATYPE_BASE(header->type) != 0) ||
+ (cname_ok && header->type ==
+ dns_rdatatype_cname)) {
+ /*
+ * We've found the answer.
+ */
+ found = header;
+ if (header->type == dns_rdatatype_cname &&
+ cname_ok &&
+ cnamesig != NULL) {
+ /*
+ * If we've already got the CNAME RRSIG,
+ * use it, otherwise change sigtype
+ * so that we find it.
+ */
+ if (cnamesig != NULL)
+ foundsig = cnamesig;
+ else
+ sigtype =
+ RBTDB_RDATATYPE_SIGCNAME;
+ foundsig = cnamesig;
+ }
+ } else if (header->type == sigtype) {
+ /*
+ * We've found the RRSIG rdataset for our
+ * target type. Remember it.
+ */
+ foundsig = header;
+ } else if (header->type == RBTDB_RDATATYPE_NCACHEANY ||
+ header->type == negtype) {
+ /*
+ * We've found a negative cache entry.
+ */
+ found = header;
+ } else if (header->type == dns_rdatatype_ns) {
+ /*
+ * Remember a NS rdataset even if we're
+ * not specifically looking for it, because
+ * we might need it later.
+ */
+ nsheader = header;
+ } else if (header->type == RBTDB_RDATATYPE_SIGNS) {
+ /*
+ * If we need the NS rdataset, we'll also
+ * need its signature.
+ */
+ nssig = header;
+ } else if (cname_ok &&
+ header->type == RBTDB_RDATATYPE_SIGCNAME) {
+ /*
+ * If we get a CNAME match, we'll also need
+ * its signature.
+ */
+ cnamesig = header;
+ }
+ header_prev = header;
+ } else
+ header_prev = header;
+ }
+
+ if (empty_node) {
+ /*
+ * We have an exact match for the name, but there are no
+ * extant rdatasets. That means that this node doesn't
+ * meaningfully exist, and that we really have a partial match.
+ */
+ NODE_UNLOCK(lock, locktype);
+ goto find_ns;
+ }
+
+ /*
+ * If we didn't find what we were looking for...
+ */
+ if (found == NULL ||
+ (found->trust == dns_trust_glue &&
+ ((options & DNS_DBFIND_GLUEOK) == 0)) ||
+ (found->trust == dns_trust_pending &&
+ ((options & DNS_DBFIND_PENDINGOK) == 0))) {
+ /*
+ * If there is an NS rdataset at this node, then this is the
+ * deepest zone cut.
+ */
+ if (nsheader != NULL) {
+ if (nodep != NULL) {
+ new_reference(search.rbtdb, node);
+ *nodep = node;
+ }
+ bind_rdataset(search.rbtdb, node, nsheader, search.now,
+ rdataset);
+ if (need_headerupdate(nsheader, search.now))
+ update = nsheader;
+ if (nssig != NULL) {
+ bind_rdataset(search.rbtdb, node, nssig,
+ search.now, sigrdataset);
+ if (need_headerupdate(nssig, search.now))
+ updatesig = nssig;
+ }
+ result = DNS_R_DELEGATION;
+ goto node_exit;
+ }
+
+ /*
+ * Go find the deepest zone cut.
+ */
+ NODE_UNLOCK(lock, locktype);
+ goto find_ns;
+ }
+
+ /*
+ * We found what we were looking for, or we found a CNAME.
+ */
+
+ if (nodep != NULL) {
+ new_reference(search.rbtdb, node);
+ *nodep = node;
+ }
+
+ if (RBTDB_RDATATYPE_BASE(found->type) == 0) {
+ /*
+ * We found a negative cache entry.
+ */
+ if (NXDOMAIN(found))
+ result = DNS_R_NCACHENXDOMAIN;
+ else
+ result = DNS_R_NCACHENXRRSET;
+ } else if (type != found->type &&
+ type != dns_rdatatype_any &&
+ found->type == dns_rdatatype_cname) {
+ /*
+ * We weren't doing an ANY query and we found a CNAME instead
+ * of the type we were looking for, so we need to indicate
+ * that result to the caller.
+ */
+ result = DNS_R_CNAME;
+ } else {
+ /*
+ * An ordinary successful query!
+ */
+ result = ISC_R_SUCCESS;
+ }
+
+ if (type != dns_rdatatype_any || result == DNS_R_NCACHENXDOMAIN ||
+ result == DNS_R_NCACHENXRRSET) {
+ bind_rdataset(search.rbtdb, node, found, search.now,
+ rdataset);
+ if (need_headerupdate(found, search.now))
+ update = found;
+ if (foundsig != NULL) {
+ bind_rdataset(search.rbtdb, node, foundsig, search.now,
+ sigrdataset);
+ if (need_headerupdate(foundsig, search.now))
+ updatesig = foundsig;
+ }
+ }
node_exit:
- if ((update != NULL || updatesig != NULL) &&
- locktype != isc_rwlocktype_write) {
- NODE_UNLOCK(lock, locktype);
- NODE_LOCK(lock, isc_rwlocktype_write);
- locktype = isc_rwlocktype_write;
- }
- if (update != NULL && need_headerupdate(update, search.now))
- update_header(search.rbtdb, update, search.now);
- if (updatesig != NULL && need_headerupdate(updatesig, search.now))
- update_header(search.rbtdb, updatesig, search.now);
-
- NODE_UNLOCK(lock, locktype);
+ if ((update != NULL || updatesig != NULL) &&
+ locktype != isc_rwlocktype_write) {
+ NODE_UNLOCK(lock, locktype);
+ NODE_LOCK(lock, isc_rwlocktype_write);
+ locktype = isc_rwlocktype_write;
+ }
+ if (update != NULL && need_headerupdate(update, search.now))
+ update_header(search.rbtdb, update, search.now);
+ if (updatesig != NULL && need_headerupdate(updatesig, search.now))
+ update_header(search.rbtdb, updatesig, search.now);
+
+ NODE_UNLOCK(lock, locktype);
tree_exit:
- RWUNLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read);
+ RWUNLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read);
- /*
- * If we found a zonecut but aren't going to use it, we have to
- * let go of it.
- */
- if (search.need_cleanup) {
- node = search.zonecut;
- lock = &(search.rbtdb->node_locks[node->locknum].lock);
+ /*
+ * If we found a zonecut but aren't going to use it, we have to
+ * let go of it.
+ */
+ if (search.need_cleanup) {
+ node = search.zonecut;
+ lock = &(search.rbtdb->node_locks[node->locknum].lock);
- NODE_LOCK(lock, isc_rwlocktype_read);
- decrement_reference(search.rbtdb, node, 0,
- isc_rwlocktype_read, isc_rwlocktype_none);
- NODE_UNLOCK(lock, isc_rwlocktype_read);
- }
+ NODE_LOCK(lock, isc_rwlocktype_read);
+ decrement_reference(search.rbtdb, node, 0,
+ isc_rwlocktype_read, isc_rwlocktype_none);
+ NODE_UNLOCK(lock, isc_rwlocktype_read);
+ }
- dns_rbtnodechain_reset(&search.chain);
+ dns_rbtnodechain_reset(&search.chain);
- return (result);
+ return (result);
}
static isc_result_t
cache_findzonecut(dns_db_t *db, dns_name_t *name, unsigned int options,
- isc_stdtime_t now, dns_dbnode_t **nodep,
- dns_name_t *foundname,
- dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
+ isc_stdtime_t now, dns_dbnode_t **nodep,
+ dns_name_t *foundname,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
{
- dns_rbtnode_t *node = NULL;
- nodelock_t *lock;
- isc_result_t result;
- rbtdb_search_t search;
- rdatasetheader_t *header, *header_prev, *header_next;
- rdatasetheader_t *found, *foundsig;
- unsigned int rbtoptions = DNS_RBTFIND_EMPTYDATA;
- isc_rwlocktype_t locktype;
-
- search.rbtdb = (dns_rbtdb_t *)db;
-
- REQUIRE(VALID_RBTDB(search.rbtdb));
-
- if (now == 0)
- isc_stdtime_get(&now);
-
- search.rbtversion = NULL;
- search.serial = 1;
- search.options = options;
- search.copy_name = ISC_FALSE;
- search.need_cleanup = ISC_FALSE;
- search.wild = ISC_FALSE;
- search.zonecut = NULL;
- dns_fixedname_init(&search.zonecut_name);
- dns_rbtnodechain_init(&search.chain, search.rbtdb->common.mctx);
- search.now = now;
-
- if ((options & DNS_DBFIND_NOEXACT) != 0)
- rbtoptions |= DNS_RBTFIND_NOEXACT;
-
- RWLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read);
-
- /*
- * Search down from the root of the tree.
- */
- result = dns_rbt_findnode(search.rbtdb->tree, name, foundname, &node,
- &search.chain, rbtoptions, NULL, &search);
-
- if (result == DNS_R_PARTIALMATCH) {
- find_ns:
- result = find_deepest_zonecut(&search, node, nodep, foundname,
- rdataset, sigrdataset);
- goto tree_exit;
- } else if (result != ISC_R_SUCCESS)
- goto tree_exit;
-
- /*
- * We now go looking for an NS rdataset at the node.
- */
-
- lock = &(search.rbtdb->node_locks[node->locknum].lock);
- locktype = isc_rwlocktype_read;
- NODE_LOCK(lock, locktype);
-
- found = NULL;
- foundsig = NULL;
- header_prev = NULL;
- for (header = node->data; header != NULL; header = header_next) {
- header_next = header->next;
- if (header->rdh_ttl <= now) {
- /*
- * This rdataset is stale. If no one else is using the
- * node, we can clean it up right now, otherwise we
- * mark it as stale, and the node as dirty, so it will
- * get cleaned up later.
- */
- if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) &&
- (locktype == isc_rwlocktype_write ||
- NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) {
- /*
- * We update the node's status only when we
- * can get write access.
- */
- locktype = isc_rwlocktype_write;
-
- if (dns_rbtnode_refcurrent(node) == 0) {
- isc_mem_t *mctx;
-
- mctx = search.rbtdb->common.mctx;
- clean_stale_headers(search.rbtdb, mctx,
- header);
- if (header_prev != NULL)
- header_prev->next =
- header->next;
- else
- node->data = header->next;
- free_rdataset(search.rbtdb, mctx,
- header);
- } else {
- header->attributes |=
- RDATASET_ATTR_STALE;
- node->dirty = 1;
- header_prev = header;
- }
- } else
- header_prev = header;
- } else if (EXISTS(header)) {
- /*
- * If we found a type we were looking for, remember
- * it.
- */
- if (header->type == dns_rdatatype_ns) {
- /*
- * Remember a NS rdataset even if we're
- * not specifically looking for it, because
- * we might need it later.
- */
- found = header;
- } else if (header->type == RBTDB_RDATATYPE_SIGNS) {
- /*
- * If we need the NS rdataset, we'll also
- * need its signature.
- */
- foundsig = header;
- }
- header_prev = header;
- } else
- header_prev = header;
- }
-
- if (found == NULL) {
- /*
- * No NS records here.
- */
- NODE_UNLOCK(lock, locktype);
- goto find_ns;
- }
-
- if (nodep != NULL) {
- new_reference(search.rbtdb, node);
- *nodep = node;
- }
-
- bind_rdataset(search.rbtdb, node, found, search.now, rdataset);
- if (foundsig != NULL)
- bind_rdataset(search.rbtdb, node, foundsig, search.now,
- sigrdataset);
-
- if (need_headerupdate(found, search.now) ||
- (foundsig != NULL && need_headerupdate(foundsig, search.now))) {
- if (locktype != isc_rwlocktype_write) {
- NODE_UNLOCK(lock, locktype);
- NODE_LOCK(lock, isc_rwlocktype_write);
- locktype = isc_rwlocktype_write;
- }
- if (need_headerupdate(found, search.now))
- update_header(search.rbtdb, found, search.now);
- if (foundsig != NULL &&
- need_headerupdate(foundsig, search.now)) {
- update_header(search.rbtdb, foundsig, search.now);
- }
- }
-
- NODE_UNLOCK(lock, locktype);
+ dns_rbtnode_t *node = NULL;
+ nodelock_t *lock;
+ isc_result_t result;
+ rbtdb_search_t search;
+ rdatasetheader_t *header, *header_prev, *header_next;
+ rdatasetheader_t *found, *foundsig;
+ unsigned int rbtoptions = DNS_RBTFIND_EMPTYDATA;
+ isc_rwlocktype_t locktype;
+
+ search.rbtdb = (dns_rbtdb_t *)db;
+
+ REQUIRE(VALID_RBTDB(search.rbtdb));
+
+ if (now == 0)
+ isc_stdtime_get(&now);
+
+ search.rbtversion = NULL;
+ search.serial = 1;
+ search.options = options;
+ search.copy_name = ISC_FALSE;
+ search.need_cleanup = ISC_FALSE;
+ search.wild = ISC_FALSE;
+ search.zonecut = NULL;
+ dns_fixedname_init(&search.zonecut_name);
+ dns_rbtnodechain_init(&search.chain, search.rbtdb->common.mctx);
+ search.now = now;
+
+ if ((options & DNS_DBFIND_NOEXACT) != 0)
+ rbtoptions |= DNS_RBTFIND_NOEXACT;
+
+ RWLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read);
+
+ /*
+ * Search down from the root of the tree.
+ */
+ result = dns_rbt_findnode(search.rbtdb->tree, name, foundname, &node,
+ &search.chain, rbtoptions, NULL, &search);
+
+ if (result == DNS_R_PARTIALMATCH) {
+ find_ns:
+ result = find_deepest_zonecut(&search, node, nodep, foundname,
+ rdataset, sigrdataset);
+ goto tree_exit;
+ } else if (result != ISC_R_SUCCESS)
+ goto tree_exit;
+
+ /*
+ * We now go looking for an NS rdataset at the node.
+ */
+
+ lock = &(search.rbtdb->node_locks[node->locknum].lock);
+ locktype = isc_rwlocktype_read;
+ NODE_LOCK(lock, locktype);
+
+ found = NULL;
+ foundsig = NULL;
+ header_prev = NULL;
+ for (header = node->data; header != NULL; header = header_next) {
+ header_next = header->next;
+ if (header->rdh_ttl <= now) {
+ /*
+ * This rdataset is stale. If no one else is using the
+ * node, we can clean it up right now, otherwise we
+ * mark it as stale, and the node as dirty, so it will
+ * get cleaned up later.
+ */
+ if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) &&
+ (locktype == isc_rwlocktype_write ||
+ NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) {
+ /*
+ * We update the node's status only when we
+ * can get write access.
+ */
+ locktype = isc_rwlocktype_write;
+
+ if (dns_rbtnode_refcurrent(node) == 0) {
+ isc_mem_t *mctx;
+
+ mctx = search.rbtdb->common.mctx;
+ clean_stale_headers(search.rbtdb, mctx,
+ header);
+ if (header_prev != NULL)
+ header_prev->next =
+ header->next;
+ else
+ node->data = header->next;
+ free_rdataset(search.rbtdb, mctx,
+ header);
+ } else {
+ header->attributes |=
+ RDATASET_ATTR_STALE;
+ node->dirty = 1;
+ header_prev = header;
+ }
+ } else
+ header_prev = header;
+ } else if (EXISTS(header)) {
+ /*
+ * If we found a type we were looking for, remember
+ * it.
+ */
+ if (header->type == dns_rdatatype_ns) {
+ /*
+ * Remember a NS rdataset even if we're
+ * not specifically looking for it, because
+ * we might need it later.
+ */
+ found = header;
+ } else if (header->type == RBTDB_RDATATYPE_SIGNS) {
+ /*
+ * If we need the NS rdataset, we'll also
+ * need its signature.
+ */
+ foundsig = header;
+ }
+ header_prev = header;
+ } else
+ header_prev = header;
+ }
+
+ if (found == NULL) {
+ /*
+ * No NS records here.
+ */
+ NODE_UNLOCK(lock, locktype);
+ goto find_ns;
+ }
+
+ if (nodep != NULL) {
+ new_reference(search.rbtdb, node);
+ *nodep = node;
+ }
+
+ bind_rdataset(search.rbtdb, node, found, search.now, rdataset);
+ if (foundsig != NULL)
+ bind_rdataset(search.rbtdb, node, foundsig, search.now,
+ sigrdataset);
+
+ if (need_headerupdate(found, search.now) ||
+ (foundsig != NULL && need_headerupdate(foundsig, search.now))) {
+ if (locktype != isc_rwlocktype_write) {
+ NODE_UNLOCK(lock, locktype);
+ NODE_LOCK(lock, isc_rwlocktype_write);
+ locktype = isc_rwlocktype_write;
+ }
+ if (need_headerupdate(found, search.now))
+ update_header(search.rbtdb, found, search.now);
+ if (foundsig != NULL &&
+ need_headerupdate(foundsig, search.now)) {
+ update_header(search.rbtdb, foundsig, search.now);
+ }
+ }
+
+ NODE_UNLOCK(lock, locktype);
tree_exit:
- RWUNLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read);
+ RWUNLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read);
- INSIST(!search.need_cleanup);
+ INSIST(!search.need_cleanup);
- dns_rbtnodechain_reset(&search.chain);
+ dns_rbtnodechain_reset(&search.chain);
- if (result == DNS_R_DELEGATION)
- result = ISC_R_SUCCESS;
+ if (result == DNS_R_DELEGATION)
+ result = ISC_R_SUCCESS;
- return (result);
+ return (result);
}
static void
attachnode(dns_db_t *db, dns_dbnode_t *source, dns_dbnode_t **targetp) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- dns_rbtnode_t *node = (dns_rbtnode_t *)source;
- unsigned int refs;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ dns_rbtnode_t *node = (dns_rbtnode_t *)source;
+ unsigned int refs;
- REQUIRE(VALID_RBTDB(rbtdb));
- REQUIRE(targetp != NULL && *targetp == NULL);
+ REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(targetp != NULL && *targetp == NULL);
- NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock);
- dns_rbtnode_refincrement(node, &refs);
- INSIST(refs != 0);
- NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock);
+ NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock);
+ dns_rbtnode_refincrement(node, &refs);
+ INSIST(refs != 0);
+ NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock);
- *targetp = source;
+ *targetp = source;
}
static void
detachnode(dns_db_t *db, dns_dbnode_t **targetp) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- dns_rbtnode_t *node;
- isc_boolean_t want_free = ISC_FALSE;
- isc_boolean_t inactive = ISC_FALSE;
- rbtdb_nodelock_t *nodelock;
-
- REQUIRE(VALID_RBTDB(rbtdb));
- REQUIRE(targetp != NULL && *targetp != NULL);
-
- node = (dns_rbtnode_t *)(*targetp);
- nodelock = &rbtdb->node_locks[node->locknum];
-
- NODE_LOCK(&nodelock->lock, isc_rwlocktype_read);
-
- if (decrement_reference(rbtdb, node, 0, isc_rwlocktype_read,
- isc_rwlocktype_none)) {
- if (isc_refcount_current(&nodelock->references) == 0 &&
- nodelock->exiting) {
- inactive = ISC_TRUE;
- }
- }
-
- NODE_UNLOCK(&nodelock->lock, isc_rwlocktype_read);
-
- *targetp = NULL;
-
- if (inactive) {
- RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
- rbtdb->active--;
- if (rbtdb->active == 0)
- want_free = ISC_TRUE;
- RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
- if (want_free) {
- char buf[DNS_NAME_FORMATSIZE];
- if (dns_name_dynamic(&rbtdb->common.origin))
- dns_name_format(&rbtdb->common.origin, buf,
- sizeof(buf));
- else
- strcpy(buf, "<UNKNOWN>");
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1),
- "calling free_rbtdb(%s)", buf);
- free_rbtdb(rbtdb, ISC_TRUE, NULL);
- }
- }
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ dns_rbtnode_t *node;
+ isc_boolean_t want_free = ISC_FALSE;
+ isc_boolean_t inactive = ISC_FALSE;
+ rbtdb_nodelock_t *nodelock;
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(targetp != NULL && *targetp != NULL);
+
+ node = (dns_rbtnode_t *)(*targetp);
+ nodelock = &rbtdb->node_locks[node->locknum];
+
+ NODE_LOCK(&nodelock->lock, isc_rwlocktype_read);
+
+ if (decrement_reference(rbtdb, node, 0, isc_rwlocktype_read,
+ isc_rwlocktype_none)) {
+ if (isc_refcount_current(&nodelock->references) == 0 &&
+ nodelock->exiting) {
+ inactive = ISC_TRUE;
+ }
+ }
+
+ NODE_UNLOCK(&nodelock->lock, isc_rwlocktype_read);
+
+ *targetp = NULL;
+
+ if (inactive) {
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
+ rbtdb->active--;
+ if (rbtdb->active == 0)
+ want_free = ISC_TRUE;
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
+ if (want_free) {
+ char buf[DNS_NAME_FORMATSIZE];
+ if (dns_name_dynamic(&rbtdb->common.origin))
+ dns_name_format(&rbtdb->common.origin, buf,
+ sizeof(buf));
+ else
+ strcpy(buf, "<UNKNOWN>");
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
+ DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1),
+ "calling free_rbtdb(%s)", buf);
+ free_rbtdb(rbtdb, ISC_TRUE, NULL);
+ }
+ }
}
static isc_result_t
expirenode(dns_db_t *db, dns_dbnode_t *node, isc_stdtime_t now) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- dns_rbtnode_t *rbtnode = node;
- rdatasetheader_t *header;
- isc_boolean_t force_expire = ISC_FALSE;
- /*
- * These are the category and module used by the cache cleaner.
- */
- isc_boolean_t log = ISC_FALSE;
- isc_logcategory_t *category = DNS_LOGCATEGORY_DATABASE;
- isc_logmodule_t *module = DNS_LOGMODULE_CACHE;
- int level = ISC_LOG_DEBUG(2);
- char printname[DNS_NAME_FORMATSIZE];
-
- REQUIRE(VALID_RBTDB(rbtdb));
-
- /*
- * Caller must hold a tree lock.
- */
-
- if (now == 0)
- isc_stdtime_get(&now);
-
- if (rbtdb->overmem) {
- isc_uint32_t val;
-
- isc_random_get(&val);
- /*
- * XXXDCL Could stand to have a better policy, like LRU.
- */
- force_expire = ISC_TF(rbtnode->down == NULL && val % 4 == 0);
-
- /*
- * Note that 'log' can be true IFF rbtdb->overmem is also true.
- * rbtdb->ovemem can currently only be true for cache databases
- * -- hence all of the "overmem cache" log strings.
- */
- log = ISC_TF(isc_log_wouldlog(dns_lctx, level));
- if (log)
- isc_log_write(dns_lctx, category, module, level,
- "overmem cache: %s %s",
- force_expire ? "FORCE" : "check",
- dns_rbt_formatnodename(rbtnode,
- printname,
- sizeof(printname)));
- }
-
- /*
- * We may not need write access, but this code path is not performance
- * sensitive, so it should be okay to always lock as a writer.
- */
- NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_write);
-
- for (header = rbtnode->data; header != NULL; header = header->next)
- if (header->rdh_ttl <= now - RBTDB_VIRTUAL) {
- /*
- * We don't check if refcurrent(rbtnode) == 0 and try
- * to free like we do in cache_find(), because
- * refcurrent(rbtnode) must be non-zero. This is so
- * because 'node' is an argument to the function.
- */
- header->attributes |= RDATASET_ATTR_STALE;
- rbtnode->dirty = 1;
- if (log)
- isc_log_write(dns_lctx, category, module,
- level, "overmem cache: stale %s",
- printname);
- } else if (force_expire) {
- if (! RETAIN(header)) {
- set_ttl(rbtdb, header, 0);
- header->attributes |= RDATASET_ATTR_STALE;
- rbtnode->dirty = 1;
- } else if (log) {
- isc_log_write(dns_lctx, category, module,
- level, "overmem cache: "
- "reprieve by RETAIN() %s",
- printname);
- }
- } else if (rbtdb->overmem && log)
- isc_log_write(dns_lctx, category, module, level,
- "overmem cache: saved %s", printname);
-
- NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_write);
-
- return (ISC_R_SUCCESS);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ dns_rbtnode_t *rbtnode = node;
+ rdatasetheader_t *header;
+ isc_boolean_t force_expire = ISC_FALSE;
+ /*
+ * These are the category and module used by the cache cleaner.
+ */
+ isc_boolean_t log = ISC_FALSE;
+ isc_logcategory_t *category = DNS_LOGCATEGORY_DATABASE;
+ isc_logmodule_t *module = DNS_LOGMODULE_CACHE;
+ int level = ISC_LOG_DEBUG(2);
+ char printname[DNS_NAME_FORMATSIZE];
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+
+ /*
+ * Caller must hold a tree lock.
+ */
+
+ if (now == 0)
+ isc_stdtime_get(&now);
+
+ if (rbtdb->overmem) {
+ isc_uint32_t val;
+
+ isc_random_get(&val);
+ /*
+ * XXXDCL Could stand to have a better policy, like LRU.
+ */
+ force_expire = ISC_TF(rbtnode->down == NULL && val % 4 == 0);
+
+ /*
+ * Note that 'log' can be true IFF rbtdb->overmem is also true.
+ * rbtdb->ovemem can currently only be true for cache databases
+ * -- hence all of the "overmem cache" log strings.
+ */
+ log = ISC_TF(isc_log_wouldlog(dns_lctx, level));
+ if (log)
+ isc_log_write(dns_lctx, category, module, level,
+ "overmem cache: %s %s",
+ force_expire ? "FORCE" : "check",
+ dns_rbt_formatnodename(rbtnode,
+ printname,
+ sizeof(printname)));
+ }
+
+ /*
+ * We may not need write access, but this code path is not performance
+ * sensitive, so it should be okay to always lock as a writer.
+ */
+ NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_write);
+
+ for (header = rbtnode->data; header != NULL; header = header->next)
+ if (header->rdh_ttl <= now - RBTDB_VIRTUAL) {
+ /*
+ * We don't check if refcurrent(rbtnode) == 0 and try
+ * to free like we do in cache_find(), because
+ * refcurrent(rbtnode) must be non-zero. This is so
+ * because 'node' is an argument to the function.
+ */
+ header->attributes |= RDATASET_ATTR_STALE;
+ rbtnode->dirty = 1;
+ if (log)
+ isc_log_write(dns_lctx, category, module,
+ level, "overmem cache: stale %s",
+ printname);
+ } else if (force_expire) {
+ if (! RETAIN(header)) {
+ set_ttl(rbtdb, header, 0);
+ header->attributes |= RDATASET_ATTR_STALE;
+ rbtnode->dirty = 1;
+ } else if (log) {
+ isc_log_write(dns_lctx, category, module,
+ level, "overmem cache: "
+ "reprieve by RETAIN() %s",
+ printname);
+ }
+ } else if (rbtdb->overmem && log)
+ isc_log_write(dns_lctx, category, module, level,
+ "overmem cache: saved %s", printname);
+
+ NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_write);
+
+ return (ISC_R_SUCCESS);
}
static void
overmem(dns_db_t *db, isc_boolean_t overmem) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
-
-#ifdef LRU_DEBUG
- /* XXX: see cache.c:timer_dump() */
- if ((int)overmem == -1) {
- if (!IS_CACHE(rbtdb) || db->rdclass != dns_rdataclass_in)
- return; /* for brevity */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_CACHE, ISC_LOG_INFO,
- "cache DB %p: mem inuse %lu, %u node, "
- "%d/%u current/total cache, %d/%u neg, %d/%u A, %d/%u AAAA, "
- "%d/%u NS, %d/%u PTR, %d/%u glue, "
- "%d/%u additional, purge/scan=%u(%u expiry, %u lru)/%u, "
- "overmem=%d",
- rbtdb,
- (unsigned long)isc_mem_inuse(rbtdb->common.mctx),
- dns_rbt_nodecount(rbtdb->tree),
- rbtdb->cachestat.cache_current, rbtdb->cachestat.cache_total,
- rbtdb->cachestat.ncache_current, rbtdb->cachestat.ncache_total,
- rbtdb->cachestat.a_current, rbtdb->cachestat.a_total,
- rbtdb->cachestat.aaaa_current, rbtdb->cachestat.aaaa_total,
- rbtdb->cachestat.ns_current, rbtdb->cachestat.ns_total,
- rbtdb->cachestat.ptr_current, rbtdb->cachestat.ptr_total,
- rbtdb->cachestat.glue_current, rbtdb->cachestat.glue_total,
- rbtdb->cachestat.additional_current,
- rbtdb->cachestat.additional_total,
- rbtdb->cachestat.stale_purge, rbtdb->cachestat.stale_expire,
- rbtdb->cachestat.stale_lru, rbtdb->cachestat.stale_scan,
- rbtdb->overmem);
- return;
- }
-#endif
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- if (IS_CACHE(rbtdb)) {
- rbtdb->overmem = overmem;
- }
+ if (IS_CACHE(rbtdb))
+ rbtdb->overmem = overmem;
}
static void
printnode(dns_db_t *db, dns_dbnode_t *node, FILE *out) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- dns_rbtnode_t *rbtnode = node;
- isc_boolean_t first;
-
- REQUIRE(VALID_RBTDB(rbtdb));
-
- NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_read);
-
- fprintf(out, "node %p, %u references, locknum = %u\n",
- rbtnode, dns_rbtnode_refcurrent(rbtnode),
- rbtnode->locknum);
- if (rbtnode->data != NULL) {
- rdatasetheader_t *current, *top_next;
-
- for (current = rbtnode->data; current != NULL;
- current = top_next) {
- top_next = current->next;
- first = ISC_TRUE;
- fprintf(out, "\ttype %u", current->type);
- do {
- if (!first)
- fprintf(out, "\t");
- first = ISC_FALSE;
- fprintf(out,
- "\tserial = %lu, ttl = %u, "
- "trust = %u, attributes = %u\n",
- (unsigned long)current->serial,
- current->rdh_ttl,
- current->trust,
- current->attributes);
- current = current->down;
- } while (current != NULL);
- }
- } else
- fprintf(out, "(empty)\n");
-
- NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_read);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ dns_rbtnode_t *rbtnode = node;
+ isc_boolean_t first;
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+
+ NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_read);
+
+ fprintf(out, "node %p, %u references, locknum = %u\n",
+ rbtnode, dns_rbtnode_refcurrent(rbtnode),
+ rbtnode->locknum);
+ if (rbtnode->data != NULL) {
+ rdatasetheader_t *current, *top_next;
+
+ for (current = rbtnode->data; current != NULL;
+ current = top_next) {
+ top_next = current->next;
+ first = ISC_TRUE;
+ fprintf(out, "\ttype %u", current->type);
+ do {
+ if (!first)
+ fprintf(out, "\t");
+ first = ISC_FALSE;
+ fprintf(out,
+ "\tserial = %lu, ttl = %u, "
+ "trust = %u, attributes = %u\n",
+ (unsigned long)current->serial,
+ current->rdh_ttl,
+ current->trust,
+ current->attributes);
+ current = current->down;
+ } while (current != NULL);
+ }
+ } else
+ fprintf(out, "(empty)\n");
+
+ NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_read);
}
static isc_result_t
createiterator(dns_db_t *db, isc_boolean_t relative_names,
- dns_dbiterator_t **iteratorp)
+ dns_dbiterator_t **iteratorp)
{
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- rbtdb_dbiterator_t *rbtdbiter;
-
- REQUIRE(VALID_RBTDB(rbtdb));
-
- rbtdbiter = isc_mem_get(rbtdb->common.mctx, sizeof(*rbtdbiter));
- if (rbtdbiter == NULL)
- return (ISC_R_NOMEMORY);
-
- rbtdbiter->common.methods = &dbiterator_methods;
- rbtdbiter->common.db = NULL;
- dns_db_attach(db, &rbtdbiter->common.db);
- rbtdbiter->common.relative_names = relative_names;
- rbtdbiter->common.magic = DNS_DBITERATOR_MAGIC;
- rbtdbiter->common.cleaning = ISC_FALSE;
- rbtdbiter->paused = ISC_TRUE;
- rbtdbiter->tree_locked = isc_rwlocktype_none;
- rbtdbiter->result = ISC_R_SUCCESS;
- dns_fixedname_init(&rbtdbiter->name);
- dns_fixedname_init(&rbtdbiter->origin);
- rbtdbiter->node = NULL;
- rbtdbiter->delete = 0;
- memset(rbtdbiter->deletions, 0, sizeof(rbtdbiter->deletions));
- dns_rbtnodechain_init(&rbtdbiter->chain, db->mctx);
-
- *iteratorp = (dns_dbiterator_t *)rbtdbiter;
-
- return (ISC_R_SUCCESS);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ rbtdb_dbiterator_t *rbtdbiter;
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+
+ rbtdbiter = isc_mem_get(rbtdb->common.mctx, sizeof(*rbtdbiter));
+ if (rbtdbiter == NULL)
+ return (ISC_R_NOMEMORY);
+
+ rbtdbiter->common.methods = &dbiterator_methods;
+ rbtdbiter->common.db = NULL;
+ dns_db_attach(db, &rbtdbiter->common.db);
+ rbtdbiter->common.relative_names = relative_names;
+ rbtdbiter->common.magic = DNS_DBITERATOR_MAGIC;
+ rbtdbiter->common.cleaning = ISC_FALSE;
+ rbtdbiter->paused = ISC_TRUE;
+ rbtdbiter->tree_locked = isc_rwlocktype_none;
+ rbtdbiter->result = ISC_R_SUCCESS;
+ dns_fixedname_init(&rbtdbiter->name);
+ dns_fixedname_init(&rbtdbiter->origin);
+ rbtdbiter->node = NULL;
+ rbtdbiter->delete = 0;
+ memset(rbtdbiter->deletions, 0, sizeof(rbtdbiter->deletions));
+ dns_rbtnodechain_init(&rbtdbiter->chain, db->mctx);
+
+ *iteratorp = (dns_dbiterator_t *)rbtdbiter;
+
+ return (ISC_R_SUCCESS);
}
static isc_result_t
zone_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
- dns_rdatatype_t type, dns_rdatatype_t covers,
- isc_stdtime_t now, dns_rdataset_t *rdataset,
- dns_rdataset_t *sigrdataset)
+ dns_rdatatype_t type, dns_rdatatype_t covers,
+ isc_stdtime_t now, dns_rdataset_t *rdataset,
+ dns_rdataset_t *sigrdataset)
{
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
- rdatasetheader_t *header, *header_next, *found, *foundsig;
- rbtdb_serial_t serial;
- rbtdb_version_t *rbtversion = version;
- isc_boolean_t close_version = ISC_FALSE;
- rbtdb_rdatatype_t matchtype, sigmatchtype;
-
- REQUIRE(VALID_RBTDB(rbtdb));
- REQUIRE(type != dns_rdatatype_any);
-
- if (rbtversion == NULL) {
- currentversion(db, (dns_dbversion_t **) (void *)(&rbtversion));
- close_version = ISC_TRUE;
- }
- serial = rbtversion->serial;
- now = 0;
-
- NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_read);
-
- found = NULL;
- foundsig = NULL;
- matchtype = RBTDB_RDATATYPE_VALUE(type, covers);
- if (covers == 0)
- sigmatchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type);
- else
- sigmatchtype = 0;
-
- for (header = rbtnode->data; header != NULL; header = header_next) {
- header_next = header->next;
- do {
- if (header->serial <= serial &&
- !IGNORE(header)) {
- /*
- * Is this a "this rdataset doesn't
- * exist" record?
- */
- if (NONEXISTENT(header))
- header = NULL;
- break;
- } else
- header = header->down;
- } while (header != NULL);
- if (header != NULL) {
- /*
- * We have an active, extant rdataset. If it's a
- * type we're looking for, remember it.
- */
- if (header->type == matchtype) {
- found = header;
- if (foundsig != NULL)
- break;
- } else if (header->type == sigmatchtype) {
- foundsig = header;
- if (found != NULL)
- break;
- }
- }
- }
- if (found != NULL) {
- bind_rdataset(rbtdb, rbtnode, found, now, rdataset);
- if (foundsig != NULL)
- bind_rdataset(rbtdb, rbtnode, foundsig, now,
- sigrdataset);
- }
-
- NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_read);
-
- if (close_version)
- closeversion(db, (dns_dbversion_t **) (void *)(&rbtversion),
- ISC_FALSE);
-
- if (found == NULL)
- return (ISC_R_NOTFOUND);
-
- return (ISC_R_SUCCESS);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
+ rdatasetheader_t *header, *header_next, *found, *foundsig;
+ rbtdb_serial_t serial;
+ rbtdb_version_t *rbtversion = version;
+ isc_boolean_t close_version = ISC_FALSE;
+ rbtdb_rdatatype_t matchtype, sigmatchtype;
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(type != dns_rdatatype_any);
+
+ if (rbtversion == NULL) {
+ currentversion(db, (dns_dbversion_t **) (void *)(&rbtversion));
+ close_version = ISC_TRUE;
+ }
+ serial = rbtversion->serial;
+ now = 0;
+
+ NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_read);
+
+ found = NULL;
+ foundsig = NULL;
+ matchtype = RBTDB_RDATATYPE_VALUE(type, covers);
+ if (covers == 0)
+ sigmatchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type);
+ else
+ sigmatchtype = 0;
+
+ for (header = rbtnode->data; header != NULL; header = header_next) {
+ header_next = header->next;
+ do {
+ if (header->serial <= serial &&
+ !IGNORE(header)) {
+ /*
+ * Is this a "this rdataset doesn't
+ * exist" record?
+ */
+ if (NONEXISTENT(header))
+ header = NULL;
+ break;
+ } else
+ header = header->down;
+ } while (header != NULL);
+ if (header != NULL) {
+ /*
+ * We have an active, extant rdataset. If it's a
+ * type we're looking for, remember it.
+ */
+ if (header->type == matchtype) {
+ found = header;
+ if (foundsig != NULL)
+ break;
+ } else if (header->type == sigmatchtype) {
+ foundsig = header;
+ if (found != NULL)
+ break;
+ }
+ }
+ }
+ if (found != NULL) {
+ bind_rdataset(rbtdb, rbtnode, found, now, rdataset);
+ if (foundsig != NULL)
+ bind_rdataset(rbtdb, rbtnode, foundsig, now,
+ sigrdataset);
+ }
+
+ NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_read);
+
+ if (close_version)
+ closeversion(db, (dns_dbversion_t **) (void *)(&rbtversion),
+ ISC_FALSE);
+
+ if (found == NULL)
+ return (ISC_R_NOTFOUND);
+
+ return (ISC_R_SUCCESS);
}
static isc_result_t
cache_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
- dns_rdatatype_t type, dns_rdatatype_t covers,
- isc_stdtime_t now, dns_rdataset_t *rdataset,
- dns_rdataset_t *sigrdataset)
+ dns_rdatatype_t type, dns_rdatatype_t covers,
+ isc_stdtime_t now, dns_rdataset_t *rdataset,
+ dns_rdataset_t *sigrdataset)
{
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
- rdatasetheader_t *header, *header_next, *found, *foundsig;
- rbtdb_rdatatype_t matchtype, sigmatchtype, negtype;
- isc_result_t result;
- nodelock_t *lock;
- isc_rwlocktype_t locktype;
-
- REQUIRE(VALID_RBTDB(rbtdb));
- REQUIRE(type != dns_rdatatype_any);
-
- UNUSED(version);
-
- result = ISC_R_SUCCESS;
-
- if (now == 0)
- isc_stdtime_get(&now);
-
- lock = &rbtdb->node_locks[rbtnode->locknum].lock;
- locktype = isc_rwlocktype_read;
- NODE_LOCK(lock, locktype);
-
- found = NULL;
- foundsig = NULL;
- matchtype = RBTDB_RDATATYPE_VALUE(type, covers);
- negtype = RBTDB_RDATATYPE_VALUE(0, type);
- if (covers == 0)
- sigmatchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type);
- else
- sigmatchtype = 0;
-
- for (header = rbtnode->data; header != NULL; header = header_next) {
- header_next = header->next;
- if (header->rdh_ttl <= now) {
- if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) &&
- (locktype == isc_rwlocktype_write ||
- NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) {
- /*
- * We update the node's status only when we
- * can get write access.
- */
- locktype = isc_rwlocktype_write;
-
- /*
- * We don't check if refcurrent(rbtnode) == 0
- * and try to free like we do in cache_find(),
- * because refcurrent(rbtnode) must be
- * non-zero. This is so because 'node' is an
- * argument to the function.
- */
- header->attributes |= RDATASET_ATTR_STALE;
- rbtnode->dirty = 1;
- }
- } else if (EXISTS(header)) {
- if (header->type == matchtype)
- found = header;
- else if (header->type == RBTDB_RDATATYPE_NCACHEANY ||
- header->type == negtype)
- found = header;
- else if (header->type == sigmatchtype)
- foundsig = header;
- }
- }
- if (found != NULL) {
- bind_rdataset(rbtdb, rbtnode, found, now, rdataset);
- if (foundsig != NULL)
- bind_rdataset(rbtdb, rbtnode, foundsig, now,
- sigrdataset);
- }
-
- NODE_UNLOCK(lock, locktype);
-
- if (found == NULL)
- return (ISC_R_NOTFOUND);
-
- if (RBTDB_RDATATYPE_BASE(found->type) == 0) {
- /*
- * We found a negative cache entry.
- */
- if (NXDOMAIN(found))
- result = DNS_R_NCACHENXDOMAIN;
- else
- result = DNS_R_NCACHENXRRSET;
- }
-
- return (result);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
+ rdatasetheader_t *header, *header_next, *found, *foundsig;
+ rbtdb_rdatatype_t matchtype, sigmatchtype, negtype;
+ isc_result_t result;
+ nodelock_t *lock;
+ isc_rwlocktype_t locktype;
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(type != dns_rdatatype_any);
+
+ UNUSED(version);
+
+ result = ISC_R_SUCCESS;
+
+ if (now == 0)
+ isc_stdtime_get(&now);
+
+ lock = &rbtdb->node_locks[rbtnode->locknum].lock;
+ locktype = isc_rwlocktype_read;
+ NODE_LOCK(lock, locktype);
+
+ found = NULL;
+ foundsig = NULL;
+ matchtype = RBTDB_RDATATYPE_VALUE(type, covers);
+ negtype = RBTDB_RDATATYPE_VALUE(0, type);
+ if (covers == 0)
+ sigmatchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type);
+ else
+ sigmatchtype = 0;
+
+ for (header = rbtnode->data; header != NULL; header = header_next) {
+ header_next = header->next;
+ if (header->rdh_ttl <= now) {
+ if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) &&
+ (locktype == isc_rwlocktype_write ||
+ NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) {
+ /*
+ * We update the node's status only when we
+ * can get write access.
+ */
+ locktype = isc_rwlocktype_write;
+
+ /*
+ * We don't check if refcurrent(rbtnode) == 0
+ * and try to free like we do in cache_find(),
+ * because refcurrent(rbtnode) must be
+ * non-zero. This is so because 'node' is an
+ * argument to the function.
+ */
+ header->attributes |= RDATASET_ATTR_STALE;
+ rbtnode->dirty = 1;
+ }
+ } else if (EXISTS(header)) {
+ if (header->type == matchtype)
+ found = header;
+ else if (header->type == RBTDB_RDATATYPE_NCACHEANY ||
+ header->type == negtype)
+ found = header;
+ else if (header->type == sigmatchtype)
+ foundsig = header;
+ }
+ }
+ if (found != NULL) {
+ bind_rdataset(rbtdb, rbtnode, found, now, rdataset);
+ if (foundsig != NULL)
+ bind_rdataset(rbtdb, rbtnode, foundsig, now,
+ sigrdataset);
+ }
+
+ NODE_UNLOCK(lock, locktype);
+
+ if (found == NULL)
+ return (ISC_R_NOTFOUND);
+
+ if (RBTDB_RDATATYPE_BASE(found->type) == 0) {
+ /*
+ * We found a negative cache entry.
+ */
+ if (NXDOMAIN(found))
+ result = DNS_R_NCACHENXDOMAIN;
+ else
+ result = DNS_R_NCACHENXRRSET;
+ }
+
+ return (result);
}
static isc_result_t
allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
- isc_stdtime_t now, dns_rdatasetiter_t **iteratorp)
+ isc_stdtime_t now, dns_rdatasetiter_t **iteratorp)
{
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
- rbtdb_version_t *rbtversion = version;
- rbtdb_rdatasetiter_t *iterator;
- unsigned int refs;
-
- REQUIRE(VALID_RBTDB(rbtdb));
-
- iterator = isc_mem_get(rbtdb->common.mctx, sizeof(*iterator));
- if (iterator == NULL)
- return (ISC_R_NOMEMORY);
-
- if ((db->attributes & DNS_DBATTR_CACHE) == 0) {
- now = 0;
- if (rbtversion == NULL)
- currentversion(db,
- (dns_dbversion_t **) (void *)(&rbtversion));
- else {
- unsigned int refs;
-
- isc_refcount_increment(&rbtversion->references,
- &refs);
- INSIST(refs > 1);
- }
- } else {
- if (now == 0)
- isc_stdtime_get(&now);
- rbtversion = NULL;
- }
-
- iterator->common.magic = DNS_RDATASETITER_MAGIC;
- iterator->common.methods = &rdatasetiter_methods;
- iterator->common.db = db;
- iterator->common.node = node;
- iterator->common.version = (dns_dbversion_t *)rbtversion;
- iterator->common.now = now;
-
- NODE_STRONGLOCK(&rbtdb->node_locks[rbtnode->locknum].lock);
-
- dns_rbtnode_refincrement(rbtnode, &refs);
- INSIST(refs != 0);
-
- iterator->current = NULL;
-
- NODE_STRONGUNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock);
-
- *iteratorp = (dns_rdatasetiter_t *)iterator;
-
- return (ISC_R_SUCCESS);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
+ rbtdb_version_t *rbtversion = version;
+ rbtdb_rdatasetiter_t *iterator;
+ unsigned int refs;
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+
+ iterator = isc_mem_get(rbtdb->common.mctx, sizeof(*iterator));
+ if (iterator == NULL)
+ return (ISC_R_NOMEMORY);
+
+ if ((db->attributes & DNS_DBATTR_CACHE) == 0) {
+ now = 0;
+ if (rbtversion == NULL)
+ currentversion(db,
+ (dns_dbversion_t **) (void *)(&rbtversion));
+ else {
+ unsigned int refs;
+
+ isc_refcount_increment(&rbtversion->references,
+ &refs);
+ INSIST(refs > 1);
+ }
+ } else {
+ if (now == 0)
+ isc_stdtime_get(&now);
+ rbtversion = NULL;
+ }
+
+ iterator->common.magic = DNS_RDATASETITER_MAGIC;
+ iterator->common.methods = &rdatasetiter_methods;
+ iterator->common.db = db;
+ iterator->common.node = node;
+ iterator->common.version = (dns_dbversion_t *)rbtversion;
+ iterator->common.now = now;
+
+ NODE_STRONGLOCK(&rbtdb->node_locks[rbtnode->locknum].lock);
+
+ dns_rbtnode_refincrement(rbtnode, &refs);
+ INSIST(refs != 0);
+
+ iterator->current = NULL;
+
+ NODE_STRONGUNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock);
+
+ *iteratorp = (dns_rdatasetiter_t *)iterator;
+
+ return (ISC_R_SUCCESS);
}
static isc_boolean_t
cname_and_other_data(dns_rbtnode_t *node, rbtdb_serial_t serial) {
- rdatasetheader_t *header, *header_next;
- isc_boolean_t cname, other_data;
- dns_rdatatype_t rdtype;
-
- /*
- * The caller must hold the node lock.
- */
-
- /*
- * Look for CNAME and "other data" rdatasets active in our version.
- */
- cname = ISC_FALSE;
- other_data = ISC_FALSE;
- for (header = node->data; header != NULL; header = header_next) {
- header_next = header->next;
- if (header->type == dns_rdatatype_cname) {
- /*
- * Look for an active extant CNAME.
- */
- do {
- if (header->serial <= serial &&
- !IGNORE(header)) {
- /*
- * Is this a "this rdataset doesn't
- * exist" record?
- */
- if (NONEXISTENT(header))
- header = NULL;
- break;
- } else
- header = header->down;
- } while (header != NULL);
- if (header != NULL)
- cname = ISC_TRUE;
- } else {
- /*
- * Look for active extant "other data".
- *
- * "Other data" is any rdataset whose type is not
- * KEY, RRSIG KEY, NSEC, RRSIG NSEC or RRSIG CNAME.
- */
- rdtype = RBTDB_RDATATYPE_BASE(header->type);
- if (rdtype == dns_rdatatype_rrsig ||
- rdtype == dns_rdatatype_sig)
- rdtype = RBTDB_RDATATYPE_EXT(header->type);
- if (rdtype != dns_rdatatype_nsec &&
- rdtype != dns_rdatatype_key &&
- rdtype != dns_rdatatype_cname) {
- /*
- * We've found a type that isn't
- * NSEC, KEY, CNAME, or one of their
- * signatures. Is it active and extant?
- */
- do {
- if (header->serial <= serial &&
- !IGNORE(header)) {
- /*
- * Is this a "this rdataset
- * doesn't exist" record?
- */
- if (NONEXISTENT(header))
- header = NULL;
- break;
- } else
- header = header->down;
- } while (header != NULL);
- if (header != NULL)
- other_data = ISC_TRUE;
- }
- }
- }
-
- if (cname && other_data)
- return (ISC_TRUE);
-
- return (ISC_FALSE);
+ rdatasetheader_t *header, *header_next;
+ isc_boolean_t cname, other_data;
+ dns_rdatatype_t rdtype;
+
+ /*
+ * The caller must hold the node lock.
+ */
+
+ /*
+ * Look for CNAME and "other data" rdatasets active in our version.
+ */
+ cname = ISC_FALSE;
+ other_data = ISC_FALSE;
+ for (header = node->data; header != NULL; header = header_next) {
+ header_next = header->next;
+ if (header->type == dns_rdatatype_cname) {
+ /*
+ * Look for an active extant CNAME.
+ */
+ do {
+ if (header->serial <= serial &&
+ !IGNORE(header)) {
+ /*
+ * Is this a "this rdataset doesn't
+ * exist" record?
+ */
+ if (NONEXISTENT(header))
+ header = NULL;
+ break;
+ } else
+ header = header->down;
+ } while (header != NULL);
+ if (header != NULL)
+ cname = ISC_TRUE;
+ } else {
+ /*
+ * Look for active extant "other data".
+ *
+ * "Other data" is any rdataset whose type is not
+ * KEY, RRSIG KEY, NSEC, RRSIG NSEC or RRSIG CNAME.
+ */
+ rdtype = RBTDB_RDATATYPE_BASE(header->type);
+ if (rdtype == dns_rdatatype_rrsig ||
+ rdtype == dns_rdatatype_sig)
+ rdtype = RBTDB_RDATATYPE_EXT(header->type);
+ if (rdtype != dns_rdatatype_nsec &&
+ rdtype != dns_rdatatype_key &&
+ rdtype != dns_rdatatype_cname) {
+ /*
+ * We've found a type that isn't
+ * NSEC, KEY, CNAME, or one of their
+ * signatures. Is it active and extant?
+ */
+ do {
+ if (header->serial <= serial &&
+ !IGNORE(header)) {
+ /*
+ * Is this a "this rdataset
+ * doesn't exist" record?
+ */
+ if (NONEXISTENT(header))
+ header = NULL;
+ break;
+ } else
+ header = header->down;
+ } while (header != NULL);
+ if (header != NULL)
+ other_data = ISC_TRUE;
+ }
+ }
+ }
+
+ if (cname && other_data)
+ return (ISC_TRUE);
+
+ return (ISC_FALSE);
}
-#ifdef LRU_DEBUG
-static void
-cachestat_update(dns_rbtdb_t *rbtdb, rdatasetheader_t *header) {
- if ((header->attributes & RDATASET_ATTR_CACHE) == 0)
- return;
-
- /* XXX: don't use lock for brevity */
- rbtdb->cachestat.cache_total++;
- if (RBTDB_RDATATYPE_BASE(header->type) == 0)
- rbtdb->cachestat.ncache_total++;
- if (header->type == dns_rdatatype_a)
- rbtdb->cachestat.a_total++;
- else if (header->type == dns_rdatatype_aaaa)
- rbtdb->cachestat.aaaa_total++;
- else if (header->type == dns_rdatatype_ns)
- rbtdb->cachestat.ns_total++;
- else if (header->type == dns_rdatatype_ptr)
- rbtdb->cachestat.ptr_total++;
-
- if (header->trust == dns_trust_glue &&
- (header->type == dns_rdatatype_a ||
- header->type == dns_rdatatype_aaaa)) {
- rbtdb->cachestat.glue_total++;
- }
- if (header->trust == dns_trust_additional &&
- (header->type == dns_rdatatype_a ||
- header->type == dns_rdatatype_aaaa)) {
- rbtdb->cachestat.additional_total++;
- }
-}
-#endif
-
static isc_result_t
add(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, rbtdb_version_t *rbtversion,
rdatasetheader_t *newheader, unsigned int options, isc_boolean_t loading,
dns_rdataset_t *addedrdataset, isc_stdtime_t now)
{
- rbtdb_changed_t *changed = NULL;
- rdatasetheader_t *topheader, *topheader_prev, *header;
- unsigned char *merged;
- isc_result_t result;
- isc_boolean_t header_nx;
- isc_boolean_t newheader_nx;
- isc_boolean_t merge;
- dns_rdatatype_t rdtype, covers;
- rbtdb_rdatatype_t negtype;
- dns_trust_t trust;
-
- /*
- * Add an rdatasetheader_t to a node.
- */
-
- /*
- * Caller must be holding the node lock.
- */
-
- if ((options & DNS_DBADD_MERGE) != 0) {
- REQUIRE(rbtversion != NULL);
- merge = ISC_TRUE;
- } else
- merge = ISC_FALSE;
-
- if ((options & DNS_DBADD_FORCE) != 0)
- trust = dns_trust_ultimate;
- else
- trust = newheader->trust;
-
- if (rbtversion != NULL && !loading) {
- /*
- * We always add a changed record, even if no changes end up
- * being made to this node, because it's harmless and
- * simplifies the code.
- */
- changed = add_changed(rbtdb, rbtversion, rbtnode);
- if (changed == NULL) {
- free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
- return (ISC_R_NOMEMORY);
- }
- }
-
- newheader_nx = NONEXISTENT(newheader) ? ISC_TRUE : ISC_FALSE;
- topheader_prev = NULL;
-
- negtype = 0;
- if (rbtversion == NULL && !newheader_nx) {
- rdtype = RBTDB_RDATATYPE_BASE(newheader->type);
- if (rdtype == 0) {
- /*
- * We're adding a negative cache entry.
- */
- covers = RBTDB_RDATATYPE_EXT(newheader->type);
- if (covers == dns_rdatatype_any) {
- /*
- * We're adding an negative cache entry
- * which covers all types (NXDOMAIN,
- * NODATA(QTYPE=ANY)).
- *
- * We make all other data stale so that the
- * only rdataset that can be found at this
- * node is the negative cache entry.
- */
- for (topheader = rbtnode->data;
- topheader != NULL;
- topheader = topheader->next) {
- set_ttl(rbtdb, topheader, 0);
- topheader->attributes |=
- RDATASET_ATTR_STALE;
- }
- rbtnode->dirty = 1;
- goto find_header;
- }
- negtype = RBTDB_RDATATYPE_VALUE(covers, 0);
- } else {
- /*
- * We're adding something that isn't a
- * negative cache entry. Look for an extant
- * non-stale NXDOMAIN/NODATA(QTYPE=ANY) negative
- * cache entry.
- */
- for (topheader = rbtnode->data;
- topheader != NULL;
- topheader = topheader->next) {
- if (topheader->type ==
- RBTDB_RDATATYPE_NCACHEANY)
- break;
- }
- if (topheader != NULL && EXISTS(topheader) &&
- topheader->rdh_ttl > now) {
- /*
- * Found one.
- */
- if (trust < topheader->trust) {
- /*
- * The NXDOMAIN/NODATA(QTYPE=ANY)
- * is more trusted.
- */
- /* set the flag for debug */
- newheader->attributes |=
- RDATASET_ATTR_CANCELED;
- free_rdataset(rbtdb,
- rbtdb->common.mctx,
- newheader);
- if (addedrdataset != NULL)
- bind_rdataset(rbtdb, rbtnode,
- topheader, now,
- addedrdataset);
- return (DNS_R_UNCHANGED);
- }
- /*
- * The new rdataset is better. Expire the
- * NXDOMAIN/NODATA(QTYPE=ANY).
- */
- set_ttl(rbtdb, topheader, 0);
- topheader->attributes |= RDATASET_ATTR_STALE;
- rbtnode->dirty = 1;
- topheader = NULL;
- goto find_header;
- }
- negtype = RBTDB_RDATATYPE_VALUE(0, rdtype);
- }
- }
-
- for (topheader = rbtnode->data;
- topheader != NULL;
- topheader = topheader->next) {
- if (topheader->type == newheader->type ||
- topheader->type == negtype)
- break;
- topheader_prev = topheader;
- }
+ rbtdb_changed_t *changed = NULL;
+ rdatasetheader_t *topheader, *topheader_prev, *header;
+ unsigned char *merged;
+ isc_result_t result;
+ isc_boolean_t header_nx;
+ isc_boolean_t newheader_nx;
+ isc_boolean_t merge;
+ dns_rdatatype_t rdtype, covers;
+ rbtdb_rdatatype_t negtype;
+ dns_trust_t trust;
+
+ /*
+ * Add an rdatasetheader_t to a node.
+ */
+
+ /*
+ * Caller must be holding the node lock.
+ */
+
+ if ((options & DNS_DBADD_MERGE) != 0) {
+ REQUIRE(rbtversion != NULL);
+ merge = ISC_TRUE;
+ } else
+ merge = ISC_FALSE;
+
+ if ((options & DNS_DBADD_FORCE) != 0)
+ trust = dns_trust_ultimate;
+ else
+ trust = newheader->trust;
+
+ if (rbtversion != NULL && !loading) {
+ /*
+ * We always add a changed record, even if no changes end up
+ * being made to this node, because it's harmless and
+ * simplifies the code.
+ */
+ changed = add_changed(rbtdb, rbtversion, rbtnode);
+ if (changed == NULL) {
+ free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
+ return (ISC_R_NOMEMORY);
+ }
+ }
+
+ newheader_nx = NONEXISTENT(newheader) ? ISC_TRUE : ISC_FALSE;
+ topheader_prev = NULL;
+
+ negtype = 0;
+ if (rbtversion == NULL && !newheader_nx) {
+ rdtype = RBTDB_RDATATYPE_BASE(newheader->type);
+ if (rdtype == 0) {
+ /*
+ * We're adding a negative cache entry.
+ */
+ covers = RBTDB_RDATATYPE_EXT(newheader->type);
+ if (covers == dns_rdatatype_any) {
+ /*
+ * We're adding an negative cache entry
+ * which covers all types (NXDOMAIN,
+ * NODATA(QTYPE=ANY)).
+ *
+ * We make all other data stale so that the
+ * only rdataset that can be found at this
+ * node is the negative cache entry.
+ */
+ for (topheader = rbtnode->data;
+ topheader != NULL;
+ topheader = topheader->next) {
+ set_ttl(rbtdb, topheader, 0);
+ topheader->attributes |=
+ RDATASET_ATTR_STALE;
+ }
+ rbtnode->dirty = 1;
+ goto find_header;
+ }
+ negtype = RBTDB_RDATATYPE_VALUE(covers, 0);
+ } else {
+ /*
+ * We're adding something that isn't a
+ * negative cache entry. Look for an extant
+ * non-stale NXDOMAIN/NODATA(QTYPE=ANY) negative
+ * cache entry.
+ */
+ for (topheader = rbtnode->data;
+ topheader != NULL;
+ topheader = topheader->next) {
+ if (topheader->type ==
+ RBTDB_RDATATYPE_NCACHEANY)
+ break;
+ }
+ if (topheader != NULL && EXISTS(topheader) &&
+ topheader->rdh_ttl > now) {
+ /*
+ * Found one.
+ */
+ if (trust < topheader->trust) {
+ /*
+ * The NXDOMAIN/NODATA(QTYPE=ANY)
+ * is more trusted.
+ */
+ free_rdataset(rbtdb,
+ rbtdb->common.mctx,
+ newheader);
+ if (addedrdataset != NULL)
+ bind_rdataset(rbtdb, rbtnode,
+ topheader, now,
+ addedrdataset);
+ return (DNS_R_UNCHANGED);
+ }
+ /*
+ * The new rdataset is better. Expire the
+ * NXDOMAIN/NODATA(QTYPE=ANY).
+ */
+ set_ttl(rbtdb, topheader, 0);
+ topheader->attributes |= RDATASET_ATTR_STALE;
+ rbtnode->dirty = 1;
+ topheader = NULL;
+ goto find_header;
+ }
+ negtype = RBTDB_RDATATYPE_VALUE(0, rdtype);
+ }
+ }
+
+ for (topheader = rbtnode->data;
+ topheader != NULL;
+ topheader = topheader->next) {
+ if (topheader->type == newheader->type ||
+ topheader->type == negtype)
+ break;
+ topheader_prev = topheader;
+ }
find_header:
- /*
- * If header isn't NULL, we've found the right type. There may be
- * IGNORE rdatasets between the top of the chain and the first real
- * data. We skip over them.
- */
- header = topheader;
- while (header != NULL && IGNORE(header))
- header = header->down;
- if (header != NULL) {
- header_nx = NONEXISTENT(header) ? ISC_TRUE : ISC_FALSE;
-
- /*
- * Deleting an already non-existent rdataset has no effect.
- */
- if (header_nx && newheader_nx) {
- free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
- return (DNS_R_UNCHANGED);
- }
-
- /*
- * Trying to add an rdataset with lower trust to a cache DB
- * has no effect, provided that the cache data isn't stale.
- */
- if (rbtversion == NULL && trust < header->trust &&
- (header->rdh_ttl > now || header_nx)) {
- newheader->attributes |= RDATASET_ATTR_CANCELED;
- free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
- if (addedrdataset != NULL)
- bind_rdataset(rbtdb, rbtnode, header, now,
- addedrdataset);
- return (DNS_R_UNCHANGED);
- }
-
- /*
- * Don't merge if a nonexistent rdataset is involved.
- */
- if (merge && (header_nx || newheader_nx))
- merge = ISC_FALSE;
-
- /*
- * If 'merge' is ISC_TRUE, we'll try to create a new rdataset
- * that is the union of 'newheader' and 'header'.
- */
- if (merge) {
- unsigned int flags = 0;
- INSIST(rbtversion->serial >= header->serial);
- merged = NULL;
- result = ISC_R_SUCCESS;
-
- if ((options & DNS_DBADD_EXACT) != 0)
- flags |= DNS_RDATASLAB_EXACT;
- if ((options & DNS_DBADD_EXACTTTL) != 0 &&
- newheader->rdh_ttl != header->rdh_ttl)
- result = DNS_R_NOTEXACT;
- else if (newheader->rdh_ttl != header->rdh_ttl)
- flags |= DNS_RDATASLAB_FORCE;
- if (result == ISC_R_SUCCESS)
- result = dns_rdataslab_merge(
- (unsigned char *)header,
- (unsigned char *)newheader,
- (unsigned int)(sizeof(*newheader)),
- rbtdb->common.mctx,
- rbtdb->common.rdclass,
- (dns_rdatatype_t)header->type,
- flags, &merged);
- if (result == ISC_R_SUCCESS) {
- /*
- * If 'header' has the same serial number as
- * we do, we could clean it up now if we knew
- * that our caller had no references to it.
- * We don't know this, however, so we leave it
- * alone. It will get cleaned up when
- * clean_zone_node() runs.
- */
- free_rdataset(rbtdb, rbtdb->common.mctx,
- newheader);
- newheader = (rdatasetheader_t *)merged;
- } else {
- free_rdataset(rbtdb, rbtdb->common.mctx,
- newheader);
- return (result);
- }
- }
- /*
- * Don't replace existing NS, A and AAAA RRsets
- * in the cache if they are already exist. This
- * prevents named being locked to old servers.
- * Don't lower trust of existing record if the
- * update is forced.
- */
- if (IS_CACHE(rbtdb) && header->rdh_ttl > now &&
- header->type == dns_rdatatype_ns &&
- !header_nx && !newheader_nx &&
- header->trust >= newheader->trust &&
- dns_rdataslab_equalx((unsigned char *)header,
- (unsigned char *)newheader,
- (unsigned int)(sizeof(*newheader)),
- rbtdb->common.rdclass,
- (dns_rdatatype_t)header->type)) {
- /*
- * Honour the new ttl if it is less than the
- * older one.
- */
- if (header->rdh_ttl > newheader->rdh_ttl)
- set_ttl(rbtdb, header, newheader->rdh_ttl);
- if (header->noqname == NULL &&
- newheader->noqname != NULL) {
- header->noqname = newheader->noqname;
- newheader->noqname = NULL;
- }
- newheader->attributes |= RDATASET_ATTR_CANCELED;
- free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
- if (addedrdataset != NULL)
- bind_rdataset(rbtdb, rbtnode, header, now,
- addedrdataset);
- return (ISC_R_SUCCESS);
- }
- if (IS_CACHE(rbtdb) && header->rdh_ttl > now &&
- (header->type == dns_rdatatype_a ||
- header->type == dns_rdatatype_aaaa) &&
- !header_nx && !newheader_nx &&
- header->trust >= newheader->trust &&
- dns_rdataslab_equal((unsigned char *)header,
- (unsigned char *)newheader,
- (unsigned int)(sizeof(*newheader)))) {
- /*
- * Honour the new ttl if it is less than the
- * older one.
- */
- if (header->rdh_ttl > newheader->rdh_ttl)
- set_ttl(rbtdb, header, newheader->rdh_ttl);
- if (header->noqname == NULL &&
- newheader->noqname != NULL) {
- header->noqname = newheader->noqname;
- newheader->noqname = NULL;
- }
- newheader->attributes |= RDATASET_ATTR_CANCELED;
- free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
- if (addedrdataset != NULL)
- bind_rdataset(rbtdb, rbtnode, header, now,
- addedrdataset);
- return (ISC_R_SUCCESS);
- }
- INSIST(rbtversion == NULL ||
- rbtversion->serial >= topheader->serial);
- if (topheader_prev != NULL)
- topheader_prev->next = newheader;
- else
- rbtnode->data = newheader;
- newheader->next = topheader->next;
- if (loading) {
- /*
- * There are no other references to 'header' when
- * loading, so we MAY clean up 'header' now.
- * Since we don't generate changed records when
- * loading, we MUST clean up 'header' now.
- */
- newheader->down = NULL;
- free_rdataset(rbtdb, rbtdb->common.mctx, header);
- } else {
- newheader->down = topheader;
- topheader->next = newheader;
- rbtnode->dirty = 1;
- if (changed != NULL)
- changed->dirty = ISC_TRUE;
- if (rbtversion == NULL) {
- set_ttl(rbtdb, header, 0);
- header->attributes |= RDATASET_ATTR_STALE;
- }
- if (IS_CACHE(rbtdb)) {
- int idx = newheader->node->locknum;
-
- ISC_LIST_PREPEND(rbtdb->rdatasets[idx],
- newheader, lru_link);
-
- /*
- * XXXMLG We don't check the return value
- * here. If it fails, we will not do TTL
- * based expiry on this node. However, we
- * will do it on the LRU side, so memory
- * will not leak... for long.
- */
- isc_heap_insert(rbtdb->heaps[idx], newheader);
- }
-#ifdef LRU_DEBUG
- cachestat_update(rbtdb, newheader);
-#endif
- }
- } else {
- /*
- * No non-IGNORED rdatasets of the given type exist at
- * this node.
- */
-
- /*
- * If we're trying to delete the type, don't bother.
- */
- if (newheader_nx) {
- free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
- return (DNS_R_UNCHANGED);
- }
-
- if (topheader != NULL) {
- /*
- * We have an list of rdatasets of the given type,
- * but they're all marked IGNORE. We simply insert
- * the new rdataset at the head of the list.
- *
- * Ignored rdatasets cannot occur during loading, so
- * we INSIST on it.
- */
- INSIST(!loading);
- INSIST(rbtversion == NULL ||
- rbtversion->serial >= topheader->serial);
- if (topheader_prev != NULL)
- topheader_prev->next = newheader;
- else
- rbtnode->data = newheader;
- newheader->next = topheader->next;
- newheader->down = topheader;
- topheader->next = newheader;
- rbtnode->dirty = 1;
- if (changed != NULL)
- changed->dirty = ISC_TRUE;
- } else {
- /*
- * No rdatasets of the given type exist at the node.
- */
- newheader->next = rbtnode->data;
- newheader->down = NULL;
- rbtnode->data = newheader;
- }
- if (IS_CACHE(rbtdb)) {
- int idx = newheader->node->locknum;
- ISC_LIST_PREPEND(rbtdb->rdatasets[idx],
- newheader, lru_link);
- isc_heap_insert(rbtdb->heaps[idx], newheader);
- }
-#ifdef LRU_DEBUG
- cachestat_update(rbtdb, newheader);
-#endif
- }
-
- /*
- * Check if the node now contains CNAME and other data.
- */
- if (rbtversion != NULL &&
- cname_and_other_data(rbtnode, rbtversion->serial))
- return (DNS_R_CNAMEANDOTHER);
-
- if (addedrdataset != NULL)
- bind_rdataset(rbtdb, rbtnode, newheader, now, addedrdataset);
-
- return (ISC_R_SUCCESS);
+ /*
+ * If header isn't NULL, we've found the right type. There may be
+ * IGNORE rdatasets between the top of the chain and the first real
+ * data. We skip over them.
+ */
+ header = topheader;
+ while (header != NULL && IGNORE(header))
+ header = header->down;
+ if (header != NULL) {
+ header_nx = NONEXISTENT(header) ? ISC_TRUE : ISC_FALSE;
+
+ /*
+ * Deleting an already non-existent rdataset has no effect.
+ */
+ if (header_nx && newheader_nx) {
+ free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
+ return (DNS_R_UNCHANGED);
+ }
+
+ /*
+ * Trying to add an rdataset with lower trust to a cache DB
+ * has no effect, provided that the cache data isn't stale.
+ */
+ if (rbtversion == NULL && trust < header->trust &&
+ (header->rdh_ttl > now || header_nx)) {
+ free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
+ if (addedrdataset != NULL)
+ bind_rdataset(rbtdb, rbtnode, header, now,
+ addedrdataset);
+ return (DNS_R_UNCHANGED);
+ }
+
+ /*
+ * Don't merge if a nonexistent rdataset is involved.
+ */
+ if (merge && (header_nx || newheader_nx))
+ merge = ISC_FALSE;
+
+ /*
+ * If 'merge' is ISC_TRUE, we'll try to create a new rdataset
+ * that is the union of 'newheader' and 'header'.
+ */
+ if (merge) {
+ unsigned int flags = 0;
+ INSIST(rbtversion->serial >= header->serial);
+ merged = NULL;
+ result = ISC_R_SUCCESS;
+
+ if ((options & DNS_DBADD_EXACT) != 0)
+ flags |= DNS_RDATASLAB_EXACT;
+ if ((options & DNS_DBADD_EXACTTTL) != 0 &&
+ newheader->rdh_ttl != header->rdh_ttl)
+ result = DNS_R_NOTEXACT;
+ else if (newheader->rdh_ttl != header->rdh_ttl)
+ flags |= DNS_RDATASLAB_FORCE;
+ if (result == ISC_R_SUCCESS)
+ result = dns_rdataslab_merge(
+ (unsigned char *)header,
+ (unsigned char *)newheader,
+ (unsigned int)(sizeof(*newheader)),
+ rbtdb->common.mctx,
+ rbtdb->common.rdclass,
+ (dns_rdatatype_t)header->type,
+ flags, &merged);
+ if (result == ISC_R_SUCCESS) {
+ /*
+ * If 'header' has the same serial number as
+ * we do, we could clean it up now if we knew
+ * that our caller had no references to it.
+ * We don't know this, however, so we leave it
+ * alone. It will get cleaned up when
+ * clean_zone_node() runs.
+ */
+ free_rdataset(rbtdb, rbtdb->common.mctx,
+ newheader);
+ newheader = (rdatasetheader_t *)merged;
+ } else {
+ free_rdataset(rbtdb, rbtdb->common.mctx,
+ newheader);
+ return (result);
+ }
+ }
+ /*
+ * Don't replace existing NS, A and AAAA RRsets
+ * in the cache if they are already exist. This
+ * prevents named being locked to old servers.
+ * Don't lower trust of existing record if the
+ * update is forced.
+ */
+ if (IS_CACHE(rbtdb) && header->rdh_ttl > now &&
+ header->type == dns_rdatatype_ns &&
+ !header_nx && !newheader_nx &&
+ header->trust >= newheader->trust &&
+ dns_rdataslab_equalx((unsigned char *)header,
+ (unsigned char *)newheader,
+ (unsigned int)(sizeof(*newheader)),
+ rbtdb->common.rdclass,
+ (dns_rdatatype_t)header->type)) {
+ /*
+ * Honour the new ttl if it is less than the
+ * older one.
+ */
+ if (header->rdh_ttl > newheader->rdh_ttl)
+ set_ttl(rbtdb, header, newheader->rdh_ttl);
+ if (header->noqname == NULL &&
+ newheader->noqname != NULL) {
+ header->noqname = newheader->noqname;
+ newheader->noqname = NULL;
+ }
+ free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
+ if (addedrdataset != NULL)
+ bind_rdataset(rbtdb, rbtnode, header, now,
+ addedrdataset);
+ return (ISC_R_SUCCESS);
+ }
+ if (IS_CACHE(rbtdb) && header->rdh_ttl > now &&
+ (header->type == dns_rdatatype_a ||
+ header->type == dns_rdatatype_aaaa) &&
+ !header_nx && !newheader_nx &&
+ header->trust >= newheader->trust &&
+ dns_rdataslab_equal((unsigned char *)header,
+ (unsigned char *)newheader,
+ (unsigned int)(sizeof(*newheader)))) {
+ /*
+ * Honour the new ttl if it is less than the
+ * older one.
+ */
+ if (header->rdh_ttl > newheader->rdh_ttl)
+ set_ttl(rbtdb, header, newheader->rdh_ttl);
+ if (header->noqname == NULL &&
+ newheader->noqname != NULL) {
+ header->noqname = newheader->noqname;
+ newheader->noqname = NULL;
+ }
+ free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
+ if (addedrdataset != NULL)
+ bind_rdataset(rbtdb, rbtnode, header, now,
+ addedrdataset);
+ return (ISC_R_SUCCESS);
+ }
+ INSIST(rbtversion == NULL ||
+ rbtversion->serial >= topheader->serial);
+ if (topheader_prev != NULL)
+ topheader_prev->next = newheader;
+ else
+ rbtnode->data = newheader;
+ newheader->next = topheader->next;
+ if (loading) {
+ /*
+ * There are no other references to 'header' when
+ * loading, so we MAY clean up 'header' now.
+ * Since we don't generate changed records when
+ * loading, we MUST clean up 'header' now.
+ */
+ newheader->down = NULL;
+ free_rdataset(rbtdb, rbtdb->common.mctx, header);
+ } else {
+ newheader->down = topheader;
+ topheader->next = newheader;
+ rbtnode->dirty = 1;
+ if (changed != NULL)
+ changed->dirty = ISC_TRUE;
+ if (rbtversion == NULL) {
+ set_ttl(rbtdb, header, 0);
+ header->attributes |= RDATASET_ATTR_STALE;
+ }
+ if (IS_CACHE(rbtdb)) {
+ int idx = newheader->node->locknum;
+
+ ISC_LIST_PREPEND(rbtdb->rdatasets[idx],
+ newheader, lru_link);
+
+ /*
+ * XXXMLG We don't check the return value
+ * here. If it fails, we will not do TTL
+ * based expiry on this node. However, we
+ * will do it on the LRU side, so memory
+ * will not leak... for long.
+ */
+ isc_heap_insert(rbtdb->heaps[idx], newheader);
+ }
+ }
+ } else {
+ /*
+ * No non-IGNORED rdatasets of the given type exist at
+ * this node.
+ */
+
+ /*
+ * If we're trying to delete the type, don't bother.
+ */
+ if (newheader_nx) {
+ free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
+ return (DNS_R_UNCHANGED);
+ }
+
+ if (topheader != NULL) {
+ /*
+ * We have an list of rdatasets of the given type,
+ * but they're all marked IGNORE. We simply insert
+ * the new rdataset at the head of the list.
+ *
+ * Ignored rdatasets cannot occur during loading, so
+ * we INSIST on it.
+ */
+ INSIST(!loading);
+ INSIST(rbtversion == NULL ||
+ rbtversion->serial >= topheader->serial);
+ if (topheader_prev != NULL)
+ topheader_prev->next = newheader;
+ else
+ rbtnode->data = newheader;
+ newheader->next = topheader->next;
+ newheader->down = topheader;
+ topheader->next = newheader;
+ rbtnode->dirty = 1;
+ if (changed != NULL)
+ changed->dirty = ISC_TRUE;
+ } else {
+ /*
+ * No rdatasets of the given type exist at the node.
+ */
+ newheader->next = rbtnode->data;
+ newheader->down = NULL;
+ rbtnode->data = newheader;
+ }
+ if (IS_CACHE(rbtdb)) {
+ int idx = newheader->node->locknum;
+ ISC_LIST_PREPEND(rbtdb->rdatasets[idx],
+ newheader, lru_link);
+ isc_heap_insert(rbtdb->heaps[idx], newheader);
+ }
+ }
+
+ /*
+ * Check if the node now contains CNAME and other data.
+ */
+ if (rbtversion != NULL &&
+ cname_and_other_data(rbtnode, rbtversion->serial))
+ return (DNS_R_CNAMEANDOTHER);
+
+ if (addedrdataset != NULL)
+ bind_rdataset(rbtdb, rbtnode, newheader, now, addedrdataset);
+
+ return (ISC_R_SUCCESS);
}
static inline isc_boolean_t
delegating_type(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node,
- rbtdb_rdatatype_t type)
+ rbtdb_rdatatype_t type)
{
- if (IS_CACHE(rbtdb)) {
- if (type == dns_rdatatype_dname)
- return (ISC_TRUE);
- else
- return (ISC_FALSE);
- } else if (type == dns_rdatatype_dname ||
- (type == dns_rdatatype_ns &&
- (node != rbtdb->origin_node || IS_STUB(rbtdb))))
- return (ISC_TRUE);
- return (ISC_FALSE);
+ if (IS_CACHE(rbtdb)) {
+ if (type == dns_rdatatype_dname)
+ return (ISC_TRUE);
+ else
+ return (ISC_FALSE);
+ } else if (type == dns_rdatatype_dname ||
+ (type == dns_rdatatype_ns &&
+ (node != rbtdb->origin_node || IS_STUB(rbtdb))))
+ return (ISC_TRUE);
+ return (ISC_FALSE);
}
static inline isc_result_t
addnoqname(dns_rbtdb_t *rbtdb, rdatasetheader_t *newheader,
- dns_rdataset_t *rdataset)
+ dns_rdataset_t *rdataset)
{
- struct noqname *noqname;
- isc_mem_t *mctx = rbtdb->common.mctx;
- dns_name_t name;
- dns_rdataset_t nsec, nsecsig;
- isc_result_t result;
- isc_region_t r;
-
- dns_name_init(&name, NULL);
- dns_rdataset_init(&nsec);
- dns_rdataset_init(&nsecsig);
-
- result = dns_rdataset_getnoqname(rdataset, &name, &nsec, &nsecsig);
- RUNTIME_CHECK(result == ISC_R_SUCCESS);
-
- noqname = isc_mem_get(mctx, sizeof(*noqname));
- if (noqname == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- dns_name_init(&noqname->name, NULL);
- noqname->nsec = NULL;
- noqname->nsecsig = NULL;
- result = dns_name_dup(&name, mctx, &noqname->name);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
- result = dns_rdataslab_fromrdataset(&nsec, mctx, &r, 0);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
- noqname->nsec = r.base;
- result = dns_rdataslab_fromrdataset(&nsecsig, mctx, &r, 0);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
- noqname->nsecsig = r.base;
- dns_rdataset_disassociate(&nsec);
- dns_rdataset_disassociate(&nsecsig);
- newheader->noqname = noqname;
- return (ISC_R_SUCCESS);
+ struct noqname *noqname;
+ isc_mem_t *mctx = rbtdb->common.mctx;
+ dns_name_t name;
+ dns_rdataset_t nsec, nsecsig;
+ isc_result_t result;
+ isc_region_t r;
+
+ dns_name_init(&name, NULL);
+ dns_rdataset_init(&nsec);
+ dns_rdataset_init(&nsecsig);
+
+ result = dns_rdataset_getnoqname(rdataset, &name, &nsec, &nsecsig);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+
+ noqname = isc_mem_get(mctx, sizeof(*noqname));
+ if (noqname == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto cleanup;
+ }
+ dns_name_init(&noqname->name, NULL);
+ noqname->nsec = NULL;
+ noqname->nsecsig = NULL;
+ result = dns_name_dup(&name, mctx, &noqname->name);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+ result = dns_rdataslab_fromrdataset(&nsec, mctx, &r, 0);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+ noqname->nsec = r.base;
+ result = dns_rdataslab_fromrdataset(&nsecsig, mctx, &r, 0);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+ noqname->nsecsig = r.base;
+ dns_rdataset_disassociate(&nsec);
+ dns_rdataset_disassociate(&nsecsig);
+ newheader->noqname = noqname;
+ return (ISC_R_SUCCESS);
cleanup:
- dns_rdataset_disassociate(&nsec);
- dns_rdataset_disassociate(&nsecsig);
- free_noqname(mctx, &noqname);
- return(result);
+ dns_rdataset_disassociate(&nsec);
+ dns_rdataset_disassociate(&nsecsig);
+ free_noqname(mctx, &noqname);
+ return(result);
}
static isc_result_t
addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
- isc_stdtime_t now, dns_rdataset_t *rdataset, unsigned int options,
- dns_rdataset_t *addedrdataset)
+ isc_stdtime_t now, dns_rdataset_t *rdataset, unsigned int options,
+ dns_rdataset_t *addedrdataset)
{
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
- rbtdb_version_t *rbtversion = version;
- isc_region_t region;
- rdatasetheader_t *newheader;
- isc_result_t result;
- isc_boolean_t delegating;
- isc_boolean_t tree_locked = ISC_FALSE;
-
- REQUIRE(VALID_RBTDB(rbtdb));
-
- if (rbtversion == NULL) {
- if (now == 0)
- isc_stdtime_get(&now);
- } else
- now = 0;
-
- result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx,
- &region,
- sizeof(rdatasetheader_t));
- if (result != ISC_R_SUCCESS)
- return (result);
-
- newheader = (rdatasetheader_t *)region.base;
- init_rdataset(rbtdb, newheader);
- set_ttl(rbtdb, newheader, rdataset->ttl + now);
- newheader->type = RBTDB_RDATATYPE_VALUE(rdataset->type,
- rdataset->covers);
- newheader->attributes = 0;
- newheader->noqname = NULL;
- newheader->count = init_count++;
- newheader->trust = rdataset->trust;
- newheader->additional_auth = NULL;
- newheader->additional_glue = NULL;
- newheader->last_used = now;
- newheader->node = rbtnode;
- if (rbtversion != NULL) {
- newheader->serial = rbtversion->serial;
- now = 0;
- } else {
- newheader->serial = 1;
- if ((rdataset->attributes & DNS_RDATASETATTR_NXDOMAIN) != 0)
- newheader->attributes |= RDATASET_ATTR_NXDOMAIN;
- if ((rdataset->attributes & DNS_RDATASETATTR_NOQNAME) != 0) {
- result = addnoqname(rbtdb, newheader, rdataset);
- if (result != ISC_R_SUCCESS) {
- free_rdataset(rbtdb, rbtdb->common.mctx,
- newheader);
- return (result);
- }
- }
- }
-
- /*
- * If we're adding a delegation type (e.g. NS or DNAME for a zone,
- * just DNAME for the cache), then we need to set the callback bit
- * on the node.
- */
- if (delegating_type(rbtdb, rbtnode, rdataset->type))
- delegating = ISC_TRUE;
- else
- delegating = ISC_FALSE;
-
- /*
- * If we're adding a delegation type or the DB is a cache in an overmem
- * state, hold an exclusive lock on the tree. In the latter case
- * the lock does not necessarily have to be acquired but it will help
- * purge stale entries more effectively.
- */
- if (delegating || (IS_CACHE(rbtdb) && rbtdb->overmem)) {
- tree_locked = ISC_TRUE;
- RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
- }
-
- NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_write);
-
-#ifdef LRU_DEBUG
- /* for debug: statistics update */
- if (IS_CACHE(rbtdb) && rdataset->rdclass == dns_rdataclass_in) {
- /* XXX: don't use lock for brevity */
- newheader->attributes |= RDATASET_ATTR_CACHE;
- rbtdb->cachestat.cache_total++;
- rbtdb->cachestat.cache_current++;
- if (rdataset->type == 0) {
- rbtdb->cachestat.ncache_total++;
- rbtdb->cachestat.ncache_current++;
- }
- if (rdataset->type == dns_rdatatype_a) {
- rbtdb->cachestat.a_total++;
- rbtdb->cachestat.a_current++;
- } else if (rdataset->type == dns_rdatatype_aaaa) {
- rbtdb->cachestat.aaaa_total++;
- rbtdb->cachestat.aaaa_current++;
- } else if (rdataset->type == dns_rdatatype_ns) {
- rbtdb->cachestat.ns_total++;
- rbtdb->cachestat.ns_current++;
- } else if (rdataset->type == dns_rdatatype_ptr) {
- rbtdb->cachestat.ptr_total++;
- rbtdb->cachestat.ptr_current++;
- }
- if (rdataset->trust == dns_trust_glue &&
- (rdataset->type == dns_rdatatype_a ||
- rdataset->type == dns_rdatatype_aaaa)) {
- rbtdb->cachestat.glue_total++;
- rbtdb->cachestat.glue_current++;
- }
- if (rdataset->trust == dns_trust_additional &&
- (rdataset->type == dns_rdatatype_a ||
- rdataset->type == dns_rdatatype_aaaa)) {
- rbtdb->cachestat.additional_total++;
- rbtdb->cachestat.additional_current++;
- }
- }
-#endif
-
- if (IS_CACHE(rbtdb)) {
- if (tree_locked)
- cleanup_dead_nodes(rbtdb, rbtnode->locknum);
- check_stale_cache(rbtdb, rbtnode, now, tree_locked);
-
- /*
- * If we've been holding a write lock on the tree just for
- * cleaning, we can release it now. However, we still need the
- * node lock.
- */
- if (tree_locked && !delegating) {
- RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
- tree_locked = ISC_FALSE;
- }
- }
-
- result = add(rbtdb, rbtnode, rbtversion, newheader, options, ISC_FALSE,
- addedrdataset, now);
- if (result == ISC_R_SUCCESS && delegating)
- rbtnode->find_callback = 1;
-
- NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_write);
-
- if (tree_locked)
- RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
-
- /*
- * Update the zone's secure status. If version is non-NULL
- * this is defered until closeversion() is called.
- */
- if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb))
- rbtdb->secure = iszonesecure(db, rbtdb->origin_node);
-
- return (result);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
+ rbtdb_version_t *rbtversion = version;
+ isc_region_t region;
+ rdatasetheader_t *newheader;
+ isc_result_t result;
+ isc_boolean_t delegating;
+ isc_boolean_t tree_locked = ISC_FALSE;
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+
+ if (rbtversion == NULL) {
+ if (now == 0)
+ isc_stdtime_get(&now);
+ } else
+ now = 0;
+
+ result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx,
+ &region,
+ sizeof(rdatasetheader_t));
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ newheader = (rdatasetheader_t *)region.base;
+ init_rdataset(rbtdb, newheader);
+ set_ttl(rbtdb, newheader, rdataset->ttl + now);
+ newheader->type = RBTDB_RDATATYPE_VALUE(rdataset->type,
+ rdataset->covers);
+ newheader->attributes = 0;
+ newheader->noqname = NULL;
+ newheader->count = init_count++;
+ newheader->trust = rdataset->trust;
+ newheader->additional_auth = NULL;
+ newheader->additional_glue = NULL;
+ newheader->last_used = now;
+ newheader->node = rbtnode;
+ if (rbtversion != NULL) {
+ newheader->serial = rbtversion->serial;
+ now = 0;
+ } else {
+ newheader->serial = 1;
+ if ((rdataset->attributes & DNS_RDATASETATTR_NXDOMAIN) != 0)
+ newheader->attributes |= RDATASET_ATTR_NXDOMAIN;
+ if ((rdataset->attributes & DNS_RDATASETATTR_NOQNAME) != 0) {
+ result = addnoqname(rbtdb, newheader, rdataset);
+ if (result != ISC_R_SUCCESS) {
+ free_rdataset(rbtdb, rbtdb->common.mctx,
+ newheader);
+ return (result);
+ }
+ }
+ }
+
+ /*
+ * If we're adding a delegation type (e.g. NS or DNAME for a zone,
+ * just DNAME for the cache), then we need to set the callback bit
+ * on the node.
+ */
+ if (delegating_type(rbtdb, rbtnode, rdataset->type))
+ delegating = ISC_TRUE;
+ else
+ delegating = ISC_FALSE;
+
+ /*
+ * If we're adding a delegation type or the DB is a cache in an overmem
+ * state, hold an exclusive lock on the tree. In the latter case
+ * the lock does not necessarily have to be acquired but it will help
+ * purge stale entries more effectively.
+ */
+ if (delegating || (IS_CACHE(rbtdb) && rbtdb->overmem)) {
+ tree_locked = ISC_TRUE;
+ RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
+ }
+
+ NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_write);
+
+ if (rbtdb->rrsetstats != NULL) {
+ newheader->attributes |= RDATASET_ATTR_STATCOUNT;
+ update_rrsetstats(rbtdb, newheader, ISC_TRUE);
+ }
+
+ if (IS_CACHE(rbtdb)) {
+ if (tree_locked)
+ cleanup_dead_nodes(rbtdb, rbtnode->locknum);
+ check_stale_cache(rbtdb, rbtnode, now, tree_locked);
+
+ /*
+ * If we've been holding a write lock on the tree just for
+ * cleaning, we can release it now. However, we still need the
+ * node lock.
+ */
+ if (tree_locked && !delegating) {
+ RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
+ tree_locked = ISC_FALSE;
+ }
+ }
+
+ result = add(rbtdb, rbtnode, rbtversion, newheader, options, ISC_FALSE,
+ addedrdataset, now);
+ if (result == ISC_R_SUCCESS && delegating)
+ rbtnode->find_callback = 1;
+
+ NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_write);
+
+ if (tree_locked)
+ RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
+
+ /*
+ * Update the zone's secure status. If version is non-NULL
+ * this is defered until closeversion() is called.
+ */
+ if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb))
+ rbtdb->secure = iszonesecure(db, rbtdb->origin_node);
+
+ return (result);
}
static isc_result_t
subtractrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
- dns_rdataset_t *rdataset, unsigned int options,
- dns_rdataset_t *newrdataset)
+ dns_rdataset_t *rdataset, unsigned int options,
+ dns_rdataset_t *newrdataset)
{
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
- rbtdb_version_t *rbtversion = version;
- rdatasetheader_t *topheader, *topheader_prev, *header, *newheader;
- unsigned char *subresult;
- isc_region_t region;
- isc_result_t result;
- rbtdb_changed_t *changed;
-
- REQUIRE(VALID_RBTDB(rbtdb));
-
- result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx,
- &region,
- sizeof(rdatasetheader_t));
- if (result != ISC_R_SUCCESS)
- return (result);
- newheader = (rdatasetheader_t *)region.base;
- init_rdataset(rbtdb, newheader);
- set_ttl(rbtdb, newheader, rdataset->ttl);
- newheader->type = RBTDB_RDATATYPE_VALUE(rdataset->type,
- rdataset->covers);
- newheader->attributes = 0;
- newheader->serial = rbtversion->serial;
- newheader->trust = 0;
- newheader->noqname = NULL;
- newheader->count = init_count++;
- newheader->additional_auth = NULL;
- newheader->additional_glue = NULL;
- newheader->last_used = 0;
- newheader->node = rbtnode;
-
- NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_write);
-
- changed = add_changed(rbtdb, rbtversion, rbtnode);
- if (changed == NULL) {
- free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
- NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_write);
- return (ISC_R_NOMEMORY);
- }
-
- topheader_prev = NULL;
- for (topheader = rbtnode->data;
- topheader != NULL;
- topheader = topheader->next) {
- if (topheader->type == newheader->type)
- break;
- topheader_prev = topheader;
- }
- /*
- * If header isn't NULL, we've found the right type. There may be
- * IGNORE rdatasets between the top of the chain and the first real
- * data. We skip over them.
- */
- header = topheader;
- while (header != NULL && IGNORE(header))
- header = header->down;
- if (header != NULL && EXISTS(header)) {
- unsigned int flags = 0;
- subresult = NULL;
- result = ISC_R_SUCCESS;
- if ((options & DNS_DBSUB_EXACT) != 0) {
- flags |= DNS_RDATASLAB_EXACT;
- if (newheader->rdh_ttl != header->rdh_ttl)
- result = DNS_R_NOTEXACT;
- }
- if (result == ISC_R_SUCCESS)
- result = dns_rdataslab_subtract(
- (unsigned char *)header,
- (unsigned char *)newheader,
- (unsigned int)(sizeof(*newheader)),
- rbtdb->common.mctx,
- rbtdb->common.rdclass,
- (dns_rdatatype_t)header->type,
- flags, &subresult);
- if (result == ISC_R_SUCCESS) {
- free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
- newheader = (rdatasetheader_t *)subresult;
- /*
- * We have to set the serial since the rdataslab
- * subtraction routine copies the reserved portion of
- * header, not newheader.
- */
- newheader->serial = rbtversion->serial;
- /*
- * XXXJT: dns_rdataslab_subtract() copied the pointers
- * to additional info. We need to clear these fields
- * to avoid having duplicated references.
- */
- newheader->additional_auth = NULL;
- newheader->additional_glue = NULL;
- } else if (result == DNS_R_NXRRSET) {
- /*
- * This subtraction would remove all of the rdata;
- * add a nonexistent header instead.
- */
- free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
- newheader = new_rdataset(rbtdb, rbtdb->common.mctx);
- if (newheader == NULL) {
- result = ISC_R_NOMEMORY;
- goto unlock;
- }
- set_ttl(rbtdb, newheader, 0);
- newheader->type = topheader->type;
- newheader->attributes = RDATASET_ATTR_NONEXISTENT;
- newheader->trust = 0;
- newheader->serial = rbtversion->serial;
- newheader->noqname = NULL;
- newheader->count = 0;
- newheader->additional_auth = NULL;
- newheader->additional_glue = NULL;
- } else {
- free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
- goto unlock;
- }
-
- /*
- * If we're here, we want to link newheader in front of
- * topheader.
- */
- INSIST(rbtversion->serial >= topheader->serial);
- if (topheader_prev != NULL)
- topheader_prev->next = newheader;
- else
- rbtnode->data = newheader;
- newheader->next = topheader->next;
- newheader->down = topheader;
- topheader->next = newheader;
- rbtnode->dirty = 1;
- changed->dirty = ISC_TRUE;
- } else {
- /*
- * The rdataset doesn't exist, so we don't need to do anything
- * to satisfy the deletion request.
- */
- free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
- if ((options & DNS_DBSUB_EXACT) != 0)
- result = DNS_R_NOTEXACT;
- else
- result = DNS_R_UNCHANGED;
- }
-
- if (result == ISC_R_SUCCESS && newrdataset != NULL)
- bind_rdataset(rbtdb, rbtnode, newheader, 0, newrdataset);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
+ rbtdb_version_t *rbtversion = version;
+ rdatasetheader_t *topheader, *topheader_prev, *header, *newheader;
+ unsigned char *subresult;
+ isc_region_t region;
+ isc_result_t result;
+ rbtdb_changed_t *changed;
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+
+ result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx,
+ &region,
+ sizeof(rdatasetheader_t));
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ newheader = (rdatasetheader_t *)region.base;
+ init_rdataset(rbtdb, newheader);
+ set_ttl(rbtdb, newheader, rdataset->ttl);
+ newheader->type = RBTDB_RDATATYPE_VALUE(rdataset->type,
+ rdataset->covers);
+ newheader->attributes = 0;
+ newheader->serial = rbtversion->serial;
+ newheader->trust = 0;
+ newheader->noqname = NULL;
+ newheader->count = init_count++;
+ newheader->additional_auth = NULL;
+ newheader->additional_glue = NULL;
+ newheader->last_used = 0;
+ newheader->node = rbtnode;
+
+ NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_write);
+
+ changed = add_changed(rbtdb, rbtversion, rbtnode);
+ if (changed == NULL) {
+ free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
+ NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_write);
+ return (ISC_R_NOMEMORY);
+ }
+
+ topheader_prev = NULL;
+ for (topheader = rbtnode->data;
+ topheader != NULL;
+ topheader = topheader->next) {
+ if (topheader->type == newheader->type)
+ break;
+ topheader_prev = topheader;
+ }
+ /*
+ * If header isn't NULL, we've found the right type. There may be
+ * IGNORE rdatasets between the top of the chain and the first real
+ * data. We skip over them.
+ */
+ header = topheader;
+ while (header != NULL && IGNORE(header))
+ header = header->down;
+ if (header != NULL && EXISTS(header)) {
+ unsigned int flags = 0;
+ subresult = NULL;
+ result = ISC_R_SUCCESS;
+ if ((options & DNS_DBSUB_EXACT) != 0) {
+ flags |= DNS_RDATASLAB_EXACT;
+ if (newheader->rdh_ttl != header->rdh_ttl)
+ result = DNS_R_NOTEXACT;
+ }
+ if (result == ISC_R_SUCCESS)
+ result = dns_rdataslab_subtract(
+ (unsigned char *)header,
+ (unsigned char *)newheader,
+ (unsigned int)(sizeof(*newheader)),
+ rbtdb->common.mctx,
+ rbtdb->common.rdclass,
+ (dns_rdatatype_t)header->type,
+ flags, &subresult);
+ if (result == ISC_R_SUCCESS) {
+ free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
+ newheader = (rdatasetheader_t *)subresult;
+ /*
+ * We have to set the serial since the rdataslab
+ * subtraction routine copies the reserved portion of
+ * header, not newheader.
+ */
+ newheader->serial = rbtversion->serial;
+ /*
+ * XXXJT: dns_rdataslab_subtract() copied the pointers
+ * to additional info. We need to clear these fields
+ * to avoid having duplicated references.
+ */
+ newheader->additional_auth = NULL;
+ newheader->additional_glue = NULL;
+ } else if (result == DNS_R_NXRRSET) {
+ /*
+ * This subtraction would remove all of the rdata;
+ * add a nonexistent header instead.
+ */
+ free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
+ newheader = new_rdataset(rbtdb, rbtdb->common.mctx);
+ if (newheader == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto unlock;
+ }
+ set_ttl(rbtdb, newheader, 0);
+ newheader->type = topheader->type;
+ newheader->attributes = RDATASET_ATTR_NONEXISTENT;
+ newheader->trust = 0;
+ newheader->serial = rbtversion->serial;
+ newheader->noqname = NULL;
+ newheader->count = 0;
+ newheader->additional_auth = NULL;
+ newheader->additional_glue = NULL;
+ newheader->node = rbtnode;
+ newheader->last_used = 0;
+ } else {
+ free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
+ goto unlock;
+ }
+
+ /*
+ * If we're here, we want to link newheader in front of
+ * topheader.
+ */
+ INSIST(rbtversion->serial >= topheader->serial);
+ if (topheader_prev != NULL)
+ topheader_prev->next = newheader;
+ else
+ rbtnode->data = newheader;
+ newheader->next = topheader->next;
+ newheader->down = topheader;
+ topheader->next = newheader;
+ rbtnode->dirty = 1;
+ changed->dirty = ISC_TRUE;
+ } else {
+ /*
+ * The rdataset doesn't exist, so we don't need to do anything
+ * to satisfy the deletion request.
+ */
+ free_rdataset(rbtdb, rbtdb->common.mctx, newheader);
+ if ((options & DNS_DBSUB_EXACT) != 0)
+ result = DNS_R_NOTEXACT;
+ else
+ result = DNS_R_UNCHANGED;
+ }
+
+ if (result == ISC_R_SUCCESS && newrdataset != NULL)
+ bind_rdataset(rbtdb, rbtnode, newheader, 0, newrdataset);
unlock:
- NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_write);
+ NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_write);
- /*
- * Update the zone's secure status. If version is non-NULL
- * this is defered until closeversion() is called.
- */
- if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb))
- rbtdb->secure = iszonesecure(db, rbtdb->origin_node);
+ /*
+ * Update the zone's secure status. If version is non-NULL
+ * this is defered until closeversion() is called.
+ */
+ if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb))
+ rbtdb->secure = iszonesecure(db, rbtdb->origin_node);
- return (result);
+ return (result);
}
static isc_result_t
deleterdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
- dns_rdatatype_t type, dns_rdatatype_t covers)
+ dns_rdatatype_t type, dns_rdatatype_t covers)
{
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
- rbtdb_version_t *rbtversion = version;
- isc_result_t result;
- rdatasetheader_t *newheader;
-
- REQUIRE(VALID_RBTDB(rbtdb));
-
- if (type == dns_rdatatype_any)
- return (ISC_R_NOTIMPLEMENTED);
- if (type == dns_rdatatype_rrsig && covers == 0)
- return (ISC_R_NOTIMPLEMENTED);
-
- newheader = new_rdataset(rbtdb, rbtdb->common.mctx);
- if (newheader == NULL)
- return (ISC_R_NOMEMORY);
- set_ttl(rbtdb, newheader, 0);
- newheader->type = RBTDB_RDATATYPE_VALUE(type, covers);
- newheader->attributes = RDATASET_ATTR_NONEXISTENT;
- newheader->trust = 0;
- newheader->noqname = NULL;
- newheader->additional_auth = NULL;
- newheader->additional_glue = NULL;
- if (rbtversion != NULL)
- newheader->serial = rbtversion->serial;
- else
- newheader->serial = 0;
- newheader->count = 0;
- newheader->last_used = 0;
- newheader->node = rbtnode;
-
- NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_write);
-
- result = add(rbtdb, rbtnode, rbtversion, newheader, DNS_DBADD_FORCE,
- ISC_FALSE, NULL, 0);
-
- NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_write);
-
- /*
- * Update the zone's secure status. If version is non-NULL
- * this is defered until closeversion() is called.
- */
- if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb))
- rbtdb->secure = iszonesecure(db, rbtdb->origin_node);
-
- return (result);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
+ rbtdb_version_t *rbtversion = version;
+ isc_result_t result;
+ rdatasetheader_t *newheader;
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+
+ if (type == dns_rdatatype_any)
+ return (ISC_R_NOTIMPLEMENTED);
+ if (type == dns_rdatatype_rrsig && covers == 0)
+ return (ISC_R_NOTIMPLEMENTED);
+
+ newheader = new_rdataset(rbtdb, rbtdb->common.mctx);
+ if (newheader == NULL)
+ return (ISC_R_NOMEMORY);
+ set_ttl(rbtdb, newheader, 0);
+ newheader->type = RBTDB_RDATATYPE_VALUE(type, covers);
+ newheader->attributes = RDATASET_ATTR_NONEXISTENT;
+ newheader->trust = 0;
+ newheader->noqname = NULL;
+ newheader->additional_auth = NULL;
+ newheader->additional_glue = NULL;
+ if (rbtversion != NULL)
+ newheader->serial = rbtversion->serial;
+ else
+ newheader->serial = 0;
+ newheader->count = 0;
+ newheader->last_used = 0;
+ newheader->node = rbtnode;
+
+ NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_write);
+
+ result = add(rbtdb, rbtnode, rbtversion, newheader, DNS_DBADD_FORCE,
+ ISC_FALSE, NULL, 0);
+
+ NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_write);
+
+ /*
+ * Update the zone's secure status. If version is non-NULL
+ * this is defered until closeversion() is called.
+ */
+ if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb))
+ rbtdb->secure = iszonesecure(db, rbtdb->origin_node);
+
+ return (result);
}
static isc_result_t
loading_addrdataset(void *arg, dns_name_t *name, dns_rdataset_t *rdataset) {
- rbtdb_load_t *loadctx = arg;
- dns_rbtdb_t *rbtdb = loadctx->rbtdb;
- dns_rbtnode_t *node;
- isc_result_t result;
- isc_region_t region;
- rdatasetheader_t *newheader;
-
- /*
- * This routine does no node locking. See comments in
- * 'load' below for more information on loading and
- * locking.
- */
-
-
- /*
- * SOA records are only allowed at top of zone.
- */
- if (rdataset->type == dns_rdatatype_soa &&
- !IS_CACHE(rbtdb) && !dns_name_equal(name, &rbtdb->common.origin))
- return (DNS_R_NOTZONETOP);
-
- add_empty_wildcards(rbtdb, name);
-
- if (dns_name_iswildcard(name)) {
- /*
- * NS record owners cannot legally be wild cards.
- */
- if (rdataset->type == dns_rdatatype_ns)
- return (DNS_R_INVALIDNS);
- result = add_wildcard_magic(rbtdb, name);
- if (result != ISC_R_SUCCESS)
- return (result);
- }
-
- node = NULL;
- result = dns_rbt_addnode(rbtdb->tree, name, &node);
- if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS)
- return (result);
- if (result != ISC_R_EXISTS) {
- dns_name_t foundname;
- dns_name_init(&foundname, NULL);
- dns_rbt_namefromnode(node, &foundname);
+ rbtdb_load_t *loadctx = arg;
+ dns_rbtdb_t *rbtdb = loadctx->rbtdb;
+ dns_rbtnode_t *node;
+ isc_result_t result;
+ isc_region_t region;
+ rdatasetheader_t *newheader;
+
+ /*
+ * This routine does no node locking. See comments in
+ * 'load' below for more information on loading and
+ * locking.
+ */
+
+
+ /*
+ * SOA records are only allowed at top of zone.
+ */
+ if (rdataset->type == dns_rdatatype_soa &&
+ !IS_CACHE(rbtdb) && !dns_name_equal(name, &rbtdb->common.origin))
+ return (DNS_R_NOTZONETOP);
+
+ add_empty_wildcards(rbtdb, name);
+
+ if (dns_name_iswildcard(name)) {
+ /*
+ * NS record owners cannot legally be wild cards.
+ */
+ if (rdataset->type == dns_rdatatype_ns)
+ return (DNS_R_INVALIDNS);
+ result = add_wildcard_magic(rbtdb, name);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ }
+
+ node = NULL;
+ result = dns_rbt_addnode(rbtdb->tree, name, &node);
+ if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS)
+ return (result);
+ if (result != ISC_R_EXISTS) {
+ dns_name_t foundname;
+ dns_name_init(&foundname, NULL);
+ dns_rbt_namefromnode(node, &foundname);
#ifdef DNS_RBT_USEHASH
- node->locknum = node->hashval % rbtdb->node_lock_count;
+ node->locknum = node->hashval % rbtdb->node_lock_count;
#else
- node->locknum = dns_name_hash(&foundname, ISC_TRUE) %
- rbtdb->node_lock_count;
+ node->locknum = dns_name_hash(&foundname, ISC_TRUE) %
+ rbtdb->node_lock_count;
#endif
- }
-
- result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx,
- &region,
- sizeof(rdatasetheader_t));
- if (result != ISC_R_SUCCESS)
- return (result);
- newheader = (rdatasetheader_t *)region.base;
- init_rdataset(rbtdb, newheader);
- set_ttl(rbtdb, newheader,
- rdataset->ttl + loadctx->now); /* XXX overflow check */
- newheader->type = RBTDB_RDATATYPE_VALUE(rdataset->type,
- rdataset->covers);
- newheader->attributes = 0;
- newheader->trust = rdataset->trust;
- newheader->serial = 1;
- newheader->noqname = NULL;
- newheader->count = init_count++;
- newheader->additional_auth = NULL;
- newheader->additional_glue = NULL;
- /* won't be used, but initialize anyway */
- newheader->last_used = 0;
- newheader->node = node;
-
- result = add(rbtdb, node, rbtdb->current_version, newheader,
- DNS_DBADD_MERGE, ISC_TRUE, NULL, 0);
- if (result == ISC_R_SUCCESS &&
- delegating_type(rbtdb, node, rdataset->type))
- node->find_callback = 1;
- else if (result == DNS_R_UNCHANGED)
- result = ISC_R_SUCCESS;
-
- return (result);
+ }
+
+ result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx,
+ &region,
+ sizeof(rdatasetheader_t));
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ newheader = (rdatasetheader_t *)region.base;
+ init_rdataset(rbtdb, newheader);
+ set_ttl(rbtdb, newheader,
+ rdataset->ttl + loadctx->now); /* XXX overflow check */
+ newheader->type = RBTDB_RDATATYPE_VALUE(rdataset->type,
+ rdataset->covers);
+ newheader->attributes = 0;
+ newheader->trust = rdataset->trust;
+ newheader->serial = 1;
+ newheader->noqname = NULL;
+ newheader->count = init_count++;
+ newheader->additional_auth = NULL;
+ newheader->additional_glue = NULL;
+ /* won't be used, but initialize anyway */
+ newheader->last_used = 0;
+ newheader->node = node;
+
+ result = add(rbtdb, node, rbtdb->current_version, newheader,
+ DNS_DBADD_MERGE, ISC_TRUE, NULL, 0);
+ if (result == ISC_R_SUCCESS &&
+ delegating_type(rbtdb, node, rdataset->type))
+ node->find_callback = 1;
+ else if (result == DNS_R_UNCHANGED)
+ result = ISC_R_SUCCESS;
+
+ return (result);
}
static isc_result_t
beginload(dns_db_t *db, dns_addrdatasetfunc_t *addp, dns_dbload_t **dbloadp) {
- rbtdb_load_t *loadctx;
- dns_rbtdb_t *rbtdb;
+ rbtdb_load_t *loadctx;
+ dns_rbtdb_t *rbtdb;
- rbtdb = (dns_rbtdb_t *)db;
+ rbtdb = (dns_rbtdb_t *)db;
- REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(VALID_RBTDB(rbtdb));
- loadctx = isc_mem_get(rbtdb->common.mctx, sizeof(*loadctx));
- if (loadctx == NULL)
- return (ISC_R_NOMEMORY);
+ loadctx = isc_mem_get(rbtdb->common.mctx, sizeof(*loadctx));
+ if (loadctx == NULL)
+ return (ISC_R_NOMEMORY);
- loadctx->rbtdb = rbtdb;
- if (IS_CACHE(rbtdb))
- isc_stdtime_get(&loadctx->now);
- else
- loadctx->now = 0;
+ loadctx->rbtdb = rbtdb;
+ if (IS_CACHE(rbtdb))
+ isc_stdtime_get(&loadctx->now);
+ else
+ loadctx->now = 0;
- RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
- REQUIRE((rbtdb->attributes & (RBTDB_ATTR_LOADED|RBTDB_ATTR_LOADING))
- == 0);
- rbtdb->attributes |= RBTDB_ATTR_LOADING;
+ REQUIRE((rbtdb->attributes & (RBTDB_ATTR_LOADED|RBTDB_ATTR_LOADING))
+ == 0);
+ rbtdb->attributes |= RBTDB_ATTR_LOADING;
- RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
- *addp = loading_addrdataset;
- *dbloadp = loadctx;
+ *addp = loading_addrdataset;
+ *dbloadp = loadctx;
- return (ISC_R_SUCCESS);
+ return (ISC_R_SUCCESS);
}
static isc_result_t
endload(dns_db_t *db, dns_dbload_t **dbloadp) {
- rbtdb_load_t *loadctx;
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ rbtdb_load_t *loadctx;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- REQUIRE(VALID_RBTDB(rbtdb));
- REQUIRE(dbloadp != NULL);
- loadctx = *dbloadp;
- REQUIRE(loadctx->rbtdb == rbtdb);
+ REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(dbloadp != NULL);
+ loadctx = *dbloadp;
+ REQUIRE(loadctx->rbtdb == rbtdb);
- RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
- REQUIRE((rbtdb->attributes & RBTDB_ATTR_LOADING) != 0);
- REQUIRE((rbtdb->attributes & RBTDB_ATTR_LOADED) == 0);
+ REQUIRE((rbtdb->attributes & RBTDB_ATTR_LOADING) != 0);
+ REQUIRE((rbtdb->attributes & RBTDB_ATTR_LOADED) == 0);
- rbtdb->attributes &= ~RBTDB_ATTR_LOADING;
- rbtdb->attributes |= RBTDB_ATTR_LOADED;
+ rbtdb->attributes &= ~RBTDB_ATTR_LOADING;
+ rbtdb->attributes |= RBTDB_ATTR_LOADED;
- RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
- /*
- * If there's a KEY rdataset at the zone origin containing a
- * zone key, we consider the zone secure.
- */
- if (! IS_CACHE(rbtdb))
- rbtdb->secure = iszonesecure(db, rbtdb->origin_node);
+ /*
+ * If there's a KEY rdataset at the zone origin containing a
+ * zone key, we consider the zone secure.
+ */
+ if (! IS_CACHE(rbtdb))
+ rbtdb->secure = iszonesecure(db, rbtdb->origin_node);
- *dbloadp = NULL;
+ *dbloadp = NULL;
- isc_mem_put(rbtdb->common.mctx, loadctx, sizeof(*loadctx));
+ isc_mem_put(rbtdb->common.mctx, loadctx, sizeof(*loadctx));
- return (ISC_R_SUCCESS);
+ return (ISC_R_SUCCESS);
}
static isc_result_t
dump(dns_db_t *db, dns_dbversion_t *version, const char *filename,
dns_masterformat_t masterformat) {
- dns_rbtdb_t *rbtdb;
+ dns_rbtdb_t *rbtdb;
- rbtdb = (dns_rbtdb_t *)db;
+ rbtdb = (dns_rbtdb_t *)db;
- REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(VALID_RBTDB(rbtdb));
- return (dns_master_dump2(rbtdb->common.mctx, db, version,
- &dns_master_style_default,
- filename, masterformat));
+ return (dns_master_dump2(rbtdb->common.mctx, db, version,
+ &dns_master_style_default,
+ filename, masterformat));
}
static void
delete_callback(void *data, void *arg) {
- dns_rbtdb_t *rbtdb = arg;
- rdatasetheader_t *current, *next;
+ dns_rbtdb_t *rbtdb = arg;
+ rdatasetheader_t *current, *next;
- for (current = data; current != NULL; current = next) {
- next = current->next;
- free_rdataset(rbtdb, rbtdb->common.mctx, current);
- }
+ for (current = data; current != NULL; current = next) {
+ next = current->next;
+ free_rdataset(rbtdb, rbtdb->common.mctx, current);
+ }
}
static isc_boolean_t
issecure(dns_db_t *db) {
- dns_rbtdb_t *rbtdb;
- isc_boolean_t secure;
+ dns_rbtdb_t *rbtdb;
+ isc_boolean_t secure;
- rbtdb = (dns_rbtdb_t *)db;
+ rbtdb = (dns_rbtdb_t *)db;
- REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(VALID_RBTDB(rbtdb));
- RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
- secure = rbtdb->secure;
- RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ secure = rbtdb->secure;
+ RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
- return (secure);
+ return (secure);
}
static unsigned int
nodecount(dns_db_t *db) {
- dns_rbtdb_t *rbtdb;
- unsigned int count;
+ dns_rbtdb_t *rbtdb;
+ unsigned int count;
- rbtdb = (dns_rbtdb_t *)db;
+ rbtdb = (dns_rbtdb_t *)db;
- REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(VALID_RBTDB(rbtdb));
- RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
- count = dns_rbt_nodecount(rbtdb->tree);
- RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ count = dns_rbt_nodecount(rbtdb->tree);
+ RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
- return (count);
+ return (count);
}
static void
settask(dns_db_t *db, isc_task_t *task) {
- dns_rbtdb_t *rbtdb;
+ dns_rbtdb_t *rbtdb;
- rbtdb = (dns_rbtdb_t *)db;
+ rbtdb = (dns_rbtdb_t *)db;
- REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(VALID_RBTDB(rbtdb));
- RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
- if (rbtdb->task != NULL)
- isc_task_detach(&rbtdb->task);
- if (task != NULL)
- isc_task_attach(task, &rbtdb->task);
- RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
+ if (rbtdb->task != NULL)
+ isc_task_detach(&rbtdb->task);
+ if (task != NULL)
+ isc_task_attach(task, &rbtdb->task);
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
}
static isc_boolean_t
ispersistent(dns_db_t *db) {
- UNUSED(db);
- return (ISC_FALSE);
+ UNUSED(db);
+ return (ISC_FALSE);
}
static isc_result_t
getoriginnode(dns_db_t *db, dns_dbnode_t **nodep) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
- dns_rbtnode_t *onode;
- isc_result_t result = ISC_R_SUCCESS;
-
- REQUIRE(VALID_RBTDB(rbtdb));
- REQUIRE(nodep != NULL && *nodep == NULL);
-
- /* Note that the access to origin_node doesn't require a DB lock */
- onode = (dns_rbtnode_t *)rbtdb->origin_node;
- if (onode != NULL) {
- NODE_STRONGLOCK(&rbtdb->node_locks[onode->locknum].lock);
- new_reference(rbtdb, onode);
- NODE_STRONGUNLOCK(&rbtdb->node_locks[onode->locknum].lock);
-
- *nodep = rbtdb->origin_node;
- } else {
- INSIST(!IS_CACHE(rbtdb));
- result = ISC_R_NOTFOUND;
- }
-
- return (result);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ dns_rbtnode_t *onode;
+ isc_result_t result = ISC_R_SUCCESS;
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(nodep != NULL && *nodep == NULL);
+
+ /* Note that the access to origin_node doesn't require a DB lock */
+ onode = (dns_rbtnode_t *)rbtdb->origin_node;
+ if (onode != NULL) {
+ NODE_STRONGLOCK(&rbtdb->node_locks[onode->locknum].lock);
+ new_reference(rbtdb, onode);
+ NODE_STRONGUNLOCK(&rbtdb->node_locks[onode->locknum].lock);
+
+ *nodep = rbtdb->origin_node;
+ } else {
+ INSIST(!IS_CACHE(rbtdb));
+ result = ISC_R_NOTFOUND;
+ }
+
+ return (result);
+}
+
+static dns_stats_t *
+getrrsetstats(dns_db_t *db) {
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+
+ REQUIRE(VALID_RBTDB(rbtdb));
+ REQUIRE(IS_CACHE(rbtdb)); /* current restriction */
+
+ return (rbtdb->rrsetstats);
}
static dns_dbmethods_t zone_methods = {
- attach,
- detach,
- beginload,
- endload,
- dump,
- currentversion,
- newversion,
- attachversion,
- closeversion,
- findnode,
- zone_find,
- zone_findzonecut,
- attachnode,
- detachnode,
- expirenode,
- printnode,
- createiterator,
- zone_findrdataset,
- allrdatasets,
- addrdataset,
- subtractrdataset,
- deleterdataset,
- issecure,
- nodecount,
- ispersistent,
- overmem,
- settask,
- getoriginnode,
- NULL,
+ attach,
+ detach,
+ beginload,
+ endload,
+ dump,
+ currentversion,
+ newversion,
+ attachversion,
+ closeversion,
+ findnode,
+ zone_find,
+ zone_findzonecut,
+ attachnode,
+ detachnode,
+ expirenode,
+ printnode,
+ createiterator,
+ zone_findrdataset,
+ allrdatasets,
+ addrdataset,
+ subtractrdataset,
+ deleterdataset,
+ issecure,
+ nodecount,
+ ispersistent,
+ overmem,
+ settask,
+ getoriginnode,
+ NULL,
+ NULL
};
static dns_dbmethods_t cache_methods = {
- attach,
- detach,
- beginload,
- endload,
- dump,
- currentversion,
- newversion,
- attachversion,
- closeversion,
- findnode,
- cache_find,
- cache_findzonecut,
- attachnode,
- detachnode,
- expirenode,
- printnode,
- createiterator,
- cache_findrdataset,
- allrdatasets,
- addrdataset,
- subtractrdataset,
- deleterdataset,
- issecure,
- nodecount,
- ispersistent,
- overmem,
- settask,
- getoriginnode,
- NULL
+ attach,
+ detach,
+ beginload,
+ endload,
+ dump,
+ currentversion,
+ newversion,
+ attachversion,
+ closeversion,
+ findnode,
+ cache_find,
+ cache_findzonecut,
+ attachnode,
+ detachnode,
+ expirenode,
+ printnode,
+ createiterator,
+ cache_findrdataset,
+ allrdatasets,
+ addrdataset,
+ subtractrdataset,
+ deleterdataset,
+ issecure,
+ nodecount,
+ ispersistent,
+ overmem,
+ settask,
+ getoriginnode,
+ NULL,
+ getrrsetstats
};
isc_result_t
@@ -6087,263 +5913,268 @@ dns_rbtdb64_create
#else
dns_rbtdb_create
#endif
- (isc_mem_t *mctx, dns_name_t *origin, dns_dbtype_t type,
- dns_rdataclass_t rdclass, unsigned int argc, char *argv[],
- void *driverarg, dns_db_t **dbp)
+ (isc_mem_t *mctx, dns_name_t *origin, dns_dbtype_t type,
+ dns_rdataclass_t rdclass, unsigned int argc, char *argv[],
+ void *driverarg, dns_db_t **dbp)
{
- dns_rbtdb_t *rbtdb;
- isc_result_t result;
- int i;
- dns_name_t name;
-
- /* Keep the compiler happy. */
- UNUSED(argc);
- UNUSED(argv);
- UNUSED(driverarg);
-
- rbtdb = isc_mem_get(mctx, sizeof(*rbtdb));
- if (rbtdb == NULL)
- return (ISC_R_NOMEMORY);
-
- memset(rbtdb, '\0', sizeof(*rbtdb));
- dns_name_init(&rbtdb->common.origin, NULL);
- rbtdb->common.attributes = 0;
- if (type == dns_dbtype_cache) {
- rbtdb->common.methods = &cache_methods;
- rbtdb->common.attributes |= DNS_DBATTR_CACHE;
- } else if (type == dns_dbtype_stub) {
- rbtdb->common.methods = &zone_methods;
- rbtdb->common.attributes |= DNS_DBATTR_STUB;
- } else
- rbtdb->common.methods = &zone_methods;
- rbtdb->common.rdclass = rdclass;
- rbtdb->common.mctx = NULL;
-
- result = RBTDB_INITLOCK(&rbtdb->lock);
- if (result != ISC_R_SUCCESS)
- goto cleanup_rbtdb;
-
- result = isc_rwlock_init(&rbtdb->tree_lock, 0, 0);
- if (result != ISC_R_SUCCESS)
- goto cleanup_lock;
-
- if (rbtdb->node_lock_count == 0) {
- if (IS_CACHE(rbtdb))
- rbtdb->node_lock_count = DEFAULT_CACHE_NODE_LOCK_COUNT;
- else
- rbtdb->node_lock_count = DEFAULT_NODE_LOCK_COUNT;
- }
- INSIST(rbtdb->node_lock_count < (1 << DNS_RBT_LOCKLENGTH));
- rbtdb->node_locks = isc_mem_get(mctx, rbtdb->node_lock_count *
- sizeof(rbtdb_nodelock_t));
- if (rbtdb->node_locks == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup_tree_lock;
- }
-
- if (IS_CACHE(rbtdb)) {
- rbtdb->rdatasets = isc_mem_get(mctx, rbtdb->node_lock_count *
- sizeof(rdatasetheaderlist_t));
- if (rbtdb->rdatasets == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup_node_locks;
- }
- for (i = 0; i < (int)rbtdb->node_lock_count; i++)
- ISC_LIST_INIT(rbtdb->rdatasets[i]);
-
- rbtdb->deadnodes = isc_mem_get(mctx, rbtdb->node_lock_count *
- sizeof(rbtnodelist_t));
- if (rbtdb->deadnodes == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup_rdatasets;
- }
- for (i = 0; i < (int)rbtdb->node_lock_count; i++)
- ISC_LIST_INIT(rbtdb->deadnodes[i]);
-
- /*
- * Create the heaps.
- */
- rbtdb->heaps = isc_mem_get(mctx, rbtdb->node_lock_count *
- sizeof(isc_heap_t *));
- if (rbtdb->heaps == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup_deadnodes;
- }
- for (i = 0; i < (int)rbtdb->node_lock_count; i++)
- rbtdb->heaps[i] = NULL;
- for (i = 0; i < (int)rbtdb->node_lock_count; i++) {
- result = isc_heap_create(mctx, ttl_sooner,
- ttl_set_index, 0,
- &rbtdb->heaps[i]);
- if (result != ISC_R_SUCCESS)
- goto cleanup_heaps;
- }
- } else {
- rbtdb->rdatasets = NULL;
- rbtdb->deadnodes = NULL;
- rbtdb->heaps = NULL;
- }
-
- rbtdb->active = rbtdb->node_lock_count;
-
- for (i = 0; i < (int)(rbtdb->node_lock_count); i++) {
- result = NODE_INITLOCK(&rbtdb->node_locks[i].lock);
- if (result == ISC_R_SUCCESS) {
- result = isc_refcount_init(&rbtdb->node_locks[i].references, 0);
- if (result != ISC_R_SUCCESS)
- NODE_DESTROYLOCK(&rbtdb->node_locks[i].lock);
- }
- if (result != ISC_R_SUCCESS) {
- while (i-- > 0) {
- NODE_DESTROYLOCK(&rbtdb->node_locks[i].lock);
- isc_refcount_decrement(&rbtdb->node_locks[i].references, NULL);
- isc_refcount_destroy(&rbtdb->node_locks[i].references);
- }
- goto cleanup_heaps;
- }
- rbtdb->node_locks[i].exiting = ISC_FALSE;
- }
-
- /*
- * Attach to the mctx. The database will persist so long as there
- * are references to it, and attaching to the mctx ensures that our
- * mctx won't disappear out from under us.
- */
- isc_mem_attach(mctx, &rbtdb->common.mctx);
-
- /*
- * Must be initalized before free_rbtdb() is called.
- */
- isc_ondestroy_init(&rbtdb->common.ondest);
-
- /*
- * Make a copy of the origin name.
- */
- result = dns_name_dupwithoffsets(origin, mctx, &rbtdb->common.origin);
- if (result != ISC_R_SUCCESS) {
- free_rbtdb(rbtdb, ISC_FALSE, NULL);
- return (result);
- }
-
- /*
- * Make the Red-Black Tree.
- */
- result = dns_rbt_create(mctx, delete_callback, rbtdb, &rbtdb->tree);
- if (result != ISC_R_SUCCESS) {
- free_rbtdb(rbtdb, ISC_FALSE, NULL);
- return (result);
- }
- /*
- * In order to set the node callback bit correctly in zone databases,
- * we need to know if the node has the origin name of the zone.
- * In loading_addrdataset() we could simply compare the new name
- * to the origin name, but this is expensive. Also, we don't know the
- * node name in addrdataset(), so we need another way of knowing the
- * zone's top.
- *
- * We now explicitly create a node for the zone's origin, and then
- * we simply remember the node's address. This is safe, because
- * the top-of-zone node can never be deleted, nor can its address
- * change.
- */
- if (!IS_CACHE(rbtdb)) {
- rbtdb->origin_node = NULL;
- result = dns_rbt_addnode(rbtdb->tree, &rbtdb->common.origin,
- &rbtdb->origin_node);
- if (result != ISC_R_SUCCESS) {
- INSIST(result != ISC_R_EXISTS);
- free_rbtdb(rbtdb, ISC_FALSE, NULL);
- return (result);
- }
- /*
- * We need to give the origin node the right locknum.
- */
- dns_name_init(&name, NULL);
- dns_rbt_namefromnode(rbtdb->origin_node, &name);
+ dns_rbtdb_t *rbtdb;
+ isc_result_t result;
+ int i;
+ dns_name_t name;
+
+ /* Keep the compiler happy. */
+ UNUSED(argc);
+ UNUSED(argv);
+ UNUSED(driverarg);
+
+ rbtdb = isc_mem_get(mctx, sizeof(*rbtdb));
+ if (rbtdb == NULL)
+ return (ISC_R_NOMEMORY);
+
+ memset(rbtdb, '\0', sizeof(*rbtdb));
+ dns_name_init(&rbtdb->common.origin, NULL);
+ rbtdb->common.attributes = 0;
+ if (type == dns_dbtype_cache) {
+ rbtdb->common.methods = &cache_methods;
+ rbtdb->common.attributes |= DNS_DBATTR_CACHE;
+ } else if (type == dns_dbtype_stub) {
+ rbtdb->common.methods = &zone_methods;
+ rbtdb->common.attributes |= DNS_DBATTR_STUB;
+ } else
+ rbtdb->common.methods = &zone_methods;
+ rbtdb->common.rdclass = rdclass;
+ rbtdb->common.mctx = NULL;
+
+ result = RBTDB_INITLOCK(&rbtdb->lock);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_rbtdb;
+
+ result = isc_rwlock_init(&rbtdb->tree_lock, 0, 0);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_lock;
+
+ if (rbtdb->node_lock_count == 0) {
+ if (IS_CACHE(rbtdb))
+ rbtdb->node_lock_count = DEFAULT_CACHE_NODE_LOCK_COUNT;
+ else
+ rbtdb->node_lock_count = DEFAULT_NODE_LOCK_COUNT;
+ }
+ INSIST(rbtdb->node_lock_count < (1 << DNS_RBT_LOCKLENGTH));
+ rbtdb->node_locks = isc_mem_get(mctx, rbtdb->node_lock_count *
+ sizeof(rbtdb_nodelock_t));
+ if (rbtdb->node_locks == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto cleanup_tree_lock;
+ }
+
+ rbtdb->rrsetstats = NULL;
+ if (IS_CACHE(rbtdb)) {
+ result = dns_rdatasetstats_create(mctx, &rbtdb->rrsetstats);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_node_locks;
+ rbtdb->rdatasets = isc_mem_get(mctx, rbtdb->node_lock_count *
+ sizeof(rdatasetheaderlist_t));
+ if (rbtdb->rdatasets == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto cleanup_rrsetstats;
+ }
+ for (i = 0; i < (int)rbtdb->node_lock_count; i++)
+ ISC_LIST_INIT(rbtdb->rdatasets[i]);
+
+ /*
+ * Create the heaps.
+ */
+ rbtdb->heaps = isc_mem_get(mctx, rbtdb->node_lock_count *
+ sizeof(isc_heap_t *));
+ if (rbtdb->heaps == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto cleanup_rdatasets;
+ }
+ for (i = 0; i < (int)rbtdb->node_lock_count; i++)
+ rbtdb->heaps[i] = NULL;
+ for (i = 0; i < (int)rbtdb->node_lock_count; i++) {
+ result = isc_heap_create(mctx, ttl_sooner,
+ ttl_set_index, 0,
+ &rbtdb->heaps[i]);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_heaps;
+ }
+ } else {
+ rbtdb->rdatasets = NULL;
+ rbtdb->heaps = NULL;
+ }
+
+ rbtdb->deadnodes = isc_mem_get(mctx, rbtdb->node_lock_count *
+ sizeof(rbtnodelist_t));
+ if (rbtdb->deadnodes == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto cleanup_heaps;
+ }
+ for (i = 0; i < (int)rbtdb->node_lock_count; i++)
+ ISC_LIST_INIT(rbtdb->deadnodes[i]);
+
+ rbtdb->active = rbtdb->node_lock_count;
+
+ for (i = 0; i < (int)(rbtdb->node_lock_count); i++) {
+ result = NODE_INITLOCK(&rbtdb->node_locks[i].lock);
+ if (result == ISC_R_SUCCESS) {
+ result = isc_refcount_init(&rbtdb->node_locks[i].references, 0);
+ if (result != ISC_R_SUCCESS)
+ NODE_DESTROYLOCK(&rbtdb->node_locks[i].lock);
+ }
+ if (result != ISC_R_SUCCESS) {
+ while (i-- > 0) {
+ NODE_DESTROYLOCK(&rbtdb->node_locks[i].lock);
+ isc_refcount_decrement(&rbtdb->node_locks[i].references, NULL);
+ isc_refcount_destroy(&rbtdb->node_locks[i].references);
+ }
+ goto cleanup_deadnodes;
+ }
+ rbtdb->node_locks[i].exiting = ISC_FALSE;
+ }
+
+ /*
+ * Attach to the mctx. The database will persist so long as there
+ * are references to it, and attaching to the mctx ensures that our
+ * mctx won't disappear out from under us.
+ */
+ isc_mem_attach(mctx, &rbtdb->common.mctx);
+
+ /*
+ * Must be initalized before free_rbtdb() is called.
+ */
+ isc_ondestroy_init(&rbtdb->common.ondest);
+
+ /*
+ * Make a copy of the origin name.
+ */
+ result = dns_name_dupwithoffsets(origin, mctx, &rbtdb->common.origin);
+ if (result != ISC_R_SUCCESS) {
+ free_rbtdb(rbtdb, ISC_FALSE, NULL);
+ return (result);
+ }
+
+ /*
+ * Make the Red-Black Tree.
+ */
+ result = dns_rbt_create(mctx, delete_callback, rbtdb, &rbtdb->tree);
+ if (result != ISC_R_SUCCESS) {
+ free_rbtdb(rbtdb, ISC_FALSE, NULL);
+ return (result);
+ }
+ /*
+ * In order to set the node callback bit correctly in zone databases,
+ * we need to know if the node has the origin name of the zone.
+ * In loading_addrdataset() we could simply compare the new name
+ * to the origin name, but this is expensive. Also, we don't know the
+ * node name in addrdataset(), so we need another way of knowing the
+ * zone's top.
+ *
+ * We now explicitly create a node for the zone's origin, and then
+ * we simply remember the node's address. This is safe, because
+ * the top-of-zone node can never be deleted, nor can its address
+ * change.
+ */
+ if (!IS_CACHE(rbtdb)) {
+ rbtdb->origin_node = NULL;
+ result = dns_rbt_addnode(rbtdb->tree, &rbtdb->common.origin,
+ &rbtdb->origin_node);
+ if (result != ISC_R_SUCCESS) {
+ INSIST(result != ISC_R_EXISTS);
+ free_rbtdb(rbtdb, ISC_FALSE, NULL);
+ return (result);
+ }
+ /*
+ * We need to give the origin node the right locknum.
+ */
+ dns_name_init(&name, NULL);
+ dns_rbt_namefromnode(rbtdb->origin_node, &name);
#ifdef DNS_RBT_USEHASH
- rbtdb->origin_node->locknum =
- rbtdb->origin_node->hashval %
- rbtdb->node_lock_count;
+ rbtdb->origin_node->locknum =
+ rbtdb->origin_node->hashval %
+ rbtdb->node_lock_count;
#else
- rbtdb->origin_node->locknum =
- dns_name_hash(&name, ISC_TRUE) %
- rbtdb->node_lock_count;
+ rbtdb->origin_node->locknum =
+ dns_name_hash(&name, ISC_TRUE) %
+ rbtdb->node_lock_count;
#endif
- }
-
- /*
- * Misc. Initialization.
- */
- result = isc_refcount_init(&rbtdb->references, 1);
- if (result != ISC_R_SUCCESS) {
- free_rbtdb(rbtdb, ISC_FALSE, NULL);
- return (result);
- }
- rbtdb->attributes = 0;
- rbtdb->secure = ISC_FALSE;
- rbtdb->overmem = ISC_FALSE;
- rbtdb->task = NULL;
-
- /*
- * Version Initialization.
- */
- rbtdb->current_serial = 1;
- rbtdb->least_serial = 1;
- rbtdb->next_serial = 2;
- rbtdb->current_version = allocate_version(mctx, 1, 1, ISC_FALSE);
- if (rbtdb->current_version == NULL) {
- isc_refcount_decrement(&rbtdb->references, NULL);
- isc_refcount_destroy(&rbtdb->references);
- free_rbtdb(rbtdb, ISC_FALSE, NULL);
- return (ISC_R_NOMEMORY);
- }
- rbtdb->future_version = NULL;
- ISC_LIST_INIT(rbtdb->open_versions);
- /*
- * Keep the current version in the open list so that list operation
- * won't happen in normal lookup operations.
- */
- PREPEND(rbtdb->open_versions, rbtdb->current_version, link);
-
- rbtdb->common.magic = DNS_DB_MAGIC;
- rbtdb->common.impmagic = RBTDB_MAGIC;
-
- *dbp = (dns_db_t *)rbtdb;
-
- return (ISC_R_SUCCESS);
-
- cleanup_heaps:
- if (rbtdb->heaps != NULL) {
- for (i = 0 ; i < (int)rbtdb->node_lock_count ; i++)
- if (rbtdb->heaps[i] != NULL)
- isc_heap_destroy(&rbtdb->heaps[i]);
- isc_mem_put(mctx, rbtdb->heaps,
- rbtdb->node_lock_count * sizeof(isc_heap_t *));
- }
+ }
+
+ /*
+ * Misc. Initialization.
+ */
+ result = isc_refcount_init(&rbtdb->references, 1);
+ if (result != ISC_R_SUCCESS) {
+ free_rbtdb(rbtdb, ISC_FALSE, NULL);
+ return (result);
+ }
+ rbtdb->attributes = 0;
+ rbtdb->secure = ISC_FALSE;
+ rbtdb->overmem = ISC_FALSE;
+ rbtdb->task = NULL;
+
+ /*
+ * Version Initialization.
+ */
+ rbtdb->current_serial = 1;
+ rbtdb->least_serial = 1;
+ rbtdb->next_serial = 2;
+ rbtdb->current_version = allocate_version(mctx, 1, 1, ISC_FALSE);
+ if (rbtdb->current_version == NULL) {
+ isc_refcount_decrement(&rbtdb->references, NULL);
+ isc_refcount_destroy(&rbtdb->references);
+ free_rbtdb(rbtdb, ISC_FALSE, NULL);
+ return (ISC_R_NOMEMORY);
+ }
+ rbtdb->future_version = NULL;
+ ISC_LIST_INIT(rbtdb->open_versions);
+ /*
+ * Keep the current version in the open list so that list operation
+ * won't happen in normal lookup operations.
+ */
+ PREPEND(rbtdb->open_versions, rbtdb->current_version, link);
+
+ rbtdb->common.magic = DNS_DB_MAGIC;
+ rbtdb->common.impmagic = RBTDB_MAGIC;
+
+ *dbp = (dns_db_t *)rbtdb;
+
+ return (ISC_R_SUCCESS);
cleanup_deadnodes:
- if (rbtdb->deadnodes != NULL)
- isc_mem_put(mctx, rbtdb->deadnodes,
- rbtdb->node_lock_count * sizeof(rbtnodelist_t));
+ isc_mem_put(mctx, rbtdb->deadnodes,
+ rbtdb->node_lock_count * sizeof(rbtnodelist_t));
+
+ cleanup_heaps:
+ if (rbtdb->heaps != NULL) {
+ for (i = 0 ; i < (int)rbtdb->node_lock_count ; i++)
+ if (rbtdb->heaps[i] != NULL)
+ isc_heap_destroy(&rbtdb->heaps[i]);
+ isc_mem_put(mctx, rbtdb->heaps,
+ rbtdb->node_lock_count * sizeof(isc_heap_t *));
+ }
cleanup_rdatasets:
- if (rbtdb->rdatasets != NULL)
- isc_mem_put(mctx, rbtdb->rdatasets, rbtdb->node_lock_count *
- sizeof(rdatasetheaderlist_t));
+ if (rbtdb->rdatasets != NULL)
+ isc_mem_put(mctx, rbtdb->rdatasets, rbtdb->node_lock_count *
+ sizeof(rdatasetheaderlist_t));
+ cleanup_rrsetstats:
+ if (rbtdb->rrsetstats != NULL)
+ dns_stats_detach(&rbtdb->rrsetstats);
cleanup_node_locks:
- isc_mem_put(mctx, rbtdb->node_locks,
- rbtdb->node_lock_count * sizeof(rbtdb_nodelock_t));
+ isc_mem_put(mctx, rbtdb->node_locks,
+ rbtdb->node_lock_count * sizeof(rbtdb_nodelock_t));
cleanup_tree_lock:
- isc_rwlock_destroy(&rbtdb->tree_lock);
+ isc_rwlock_destroy(&rbtdb->tree_lock);
cleanup_lock:
- RBTDB_DESTROYLOCK(&rbtdb->lock);
+ RBTDB_DESTROYLOCK(&rbtdb->lock);
cleanup_rbtdb:
- isc_mem_put(mctx, rbtdb, sizeof(*rbtdb));
- return (result);
+ isc_mem_put(mctx, rbtdb, sizeof(*rbtdb));
+ return (result);
}
@@ -6353,178 +6184,178 @@ dns_rbtdb_create
static void
rdataset_disassociate(dns_rdataset_t *rdataset) {
- dns_db_t *db = rdataset->private1;
- dns_dbnode_t *node = rdataset->private2;
+ dns_db_t *db = rdataset->private1;
+ dns_dbnode_t *node = rdataset->private2;
- detachnode(db, &node);
+ detachnode(db, &node);
}
static isc_result_t
rdataset_first(dns_rdataset_t *rdataset) {
- unsigned char *raw = rdataset->private3; /* RDATASLAB */
- unsigned int count;
+ unsigned char *raw = rdataset->private3; /* RDATASLAB */
+ unsigned int count;
- count = raw[0] * 256 + raw[1];
- if (count == 0) {
- rdataset->private5 = NULL;
- return (ISC_R_NOMORE);
- }
+ count = raw[0] * 256 + raw[1];
+ if (count == 0) {
+ rdataset->private5 = NULL;
+ return (ISC_R_NOMORE);
+ }
#if DNS_RDATASET_FIXED
- if ((rdataset->attributes & DNS_RDATASETATTR_LOADORDER) == 0)
- raw += 2 + (4 * count);
- else
+ if ((rdataset->attributes & DNS_RDATASETATTR_LOADORDER) == 0)
+ raw += 2 + (4 * count);
+ else
#endif
- raw += 2;
-
- /*
- * The privateuint4 field is the number of rdata beyond the
- * cursor position, so we decrement the total count by one
- * before storing it.
- *
- * If DNS_RDATASETATTR_LOADORDER is not set 'raw' points to the
- * first record. If DNS_RDATASETATTR_LOADORDER is set 'raw' points
- * to the first entry in the offset table.
- */
- count--;
- rdataset->privateuint4 = count;
- rdataset->private5 = raw;
-
- return (ISC_R_SUCCESS);
+ raw += 2;
+
+ /*
+ * The privateuint4 field is the number of rdata beyond the
+ * cursor position, so we decrement the total count by one
+ * before storing it.
+ *
+ * If DNS_RDATASETATTR_LOADORDER is not set 'raw' points to the
+ * first record. If DNS_RDATASETATTR_LOADORDER is set 'raw' points
+ * to the first entry in the offset table.
+ */
+ count--;
+ rdataset->privateuint4 = count;
+ rdataset->private5 = raw;
+
+ return (ISC_R_SUCCESS);
}
static isc_result_t
rdataset_next(dns_rdataset_t *rdataset) {
- unsigned int count;
- unsigned int length;
- unsigned char *raw; /* RDATASLAB */
-
- count = rdataset->privateuint4;
- if (count == 0)
- return (ISC_R_NOMORE);
- count--;
- rdataset->privateuint4 = count;
-
- /*
- * Skip forward one record (length + 4) or one offset (4).
- */
- raw = rdataset->private5;
+ unsigned int count;
+ unsigned int length;
+ unsigned char *raw; /* RDATASLAB */
+
+ count = rdataset->privateuint4;
+ if (count == 0)
+ return (ISC_R_NOMORE);
+ count--;
+ rdataset->privateuint4 = count;
+
+ /*
+ * Skip forward one record (length + 4) or one offset (4).
+ */
+ raw = rdataset->private5;
#if DNS_RDATASET_FIXED
- if ((rdataset->attributes & DNS_RDATASETATTR_LOADORDER) == 0) {
+ if ((rdataset->attributes & DNS_RDATASETATTR_LOADORDER) == 0) {
#endif
- length = raw[0] * 256 + raw[1];
- raw += length;
+ length = raw[0] * 256 + raw[1];
+ raw += length;
#if DNS_RDATASET_FIXED
- }
- rdataset->private5 = raw + 4; /* length(2) + order(2) */
+ }
+ rdataset->private5 = raw + 4; /* length(2) + order(2) */
#else
- rdataset->private5 = raw + 2; /* length(2) */
+ rdataset->private5 = raw + 2; /* length(2) */
#endif
- return (ISC_R_SUCCESS);
+ return (ISC_R_SUCCESS);
}
static void
rdataset_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata) {
- unsigned char *raw = rdataset->private5; /* RDATASLAB */
+ unsigned char *raw = rdataset->private5; /* RDATASLAB */
#if DNS_RDATASET_FIXED
- unsigned int offset;
+ unsigned int offset;
#endif
- isc_region_t r;
+ isc_region_t r;
- REQUIRE(raw != NULL);
+ REQUIRE(raw != NULL);
- /*
- * Find the start of the record if not already in private5
- * then skip the length and order fields.
- */
+ /*
+ * Find the start of the record if not already in private5
+ * then skip the length and order fields.
+ */
#if DNS_RDATASET_FIXED
- if ((rdataset->attributes & DNS_RDATASETATTR_LOADORDER) != 0) {
- offset = (raw[0] << 24) + (raw[1] << 16) +
- (raw[2] << 8) + raw[3];
- raw = rdataset->private3;
- raw += offset;
- }
+ if ((rdataset->attributes & DNS_RDATASETATTR_LOADORDER) != 0) {
+ offset = (raw[0] << 24) + (raw[1] << 16) +
+ (raw[2] << 8) + raw[3];
+ raw = rdataset->private3;
+ raw += offset;
+ }
#endif
- r.length = raw[0] * 256 + raw[1];
+ r.length = raw[0] * 256 + raw[1];
#if DNS_RDATASET_FIXED
- raw += 4;
+ raw += 4;
#else
- raw += 2;
+ raw += 2;
#endif
- r.base = raw;
- dns_rdata_fromregion(rdata, rdataset->rdclass, rdataset->type, &r);
+ r.base = raw;
+ dns_rdata_fromregion(rdata, rdataset->rdclass, rdataset->type, &r);
}
static void
rdataset_clone(dns_rdataset_t *source, dns_rdataset_t *target) {
- dns_db_t *db = source->private1;
- dns_dbnode_t *node = source->private2;
- dns_dbnode_t *cloned_node = NULL;
-
- attachnode(db, node, &cloned_node);
- *target = *source;
-
- /*
- * Reset iterator state.
- */
- target->privateuint4 = 0;
- target->private5 = NULL;
+ dns_db_t *db = source->private1;
+ dns_dbnode_t *node = source->private2;
+ dns_dbnode_t *cloned_node = NULL;
+
+ attachnode(db, node, &cloned_node);
+ *target = *source;
+
+ /*
+ * Reset iterator state.
+ */
+ target->privateuint4 = 0;
+ target->private5 = NULL;
}
static unsigned int
rdataset_count(dns_rdataset_t *rdataset) {
- unsigned char *raw = rdataset->private3; /* RDATASLAB */
- unsigned int count;
+ unsigned char *raw = rdataset->private3; /* RDATASLAB */
+ unsigned int count;
- count = raw[0] * 256 + raw[1];
+ count = raw[0] * 256 + raw[1];
- return (count);
+ return (count);
}
static isc_result_t
rdataset_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
- dns_rdataset_t *nsec, dns_rdataset_t *nsecsig)
+ dns_rdataset_t *nsec, dns_rdataset_t *nsecsig)
{
- dns_db_t *db = rdataset->private1;
- dns_dbnode_t *node = rdataset->private2;
- dns_dbnode_t *cloned_node;
- struct noqname *noqname = rdataset->private6;
-
- cloned_node = NULL;
- attachnode(db, node, &cloned_node);
- nsec->methods = &rdataset_methods;
- nsec->rdclass = db->rdclass;
- nsec->type = dns_rdatatype_nsec;
- nsec->covers = 0;
- nsec->ttl = rdataset->ttl;
- nsec->trust = rdataset->trust;
- nsec->private1 = rdataset->private1;
- nsec->private2 = rdataset->private2;
- nsec->private3 = noqname->nsec;
- nsec->privateuint4 = 0;
- nsec->private5 = NULL;
- nsec->private6 = NULL;
-
- cloned_node = NULL;
- attachnode(db, node, &cloned_node);
- nsecsig->methods = &rdataset_methods;
- nsecsig->rdclass = db->rdclass;
- nsecsig->type = dns_rdatatype_rrsig;
- nsecsig->covers = dns_rdatatype_nsec;
- nsecsig->ttl = rdataset->ttl;
- nsecsig->trust = rdataset->trust;
- nsecsig->private1 = rdataset->private1;
- nsecsig->private2 = rdataset->private2;
- nsecsig->private3 = noqname->nsecsig;
- nsecsig->privateuint4 = 0;
- nsecsig->private5 = NULL;
- nsec->private6 = NULL;
-
- dns_name_clone(&noqname->name, name);
-
- return (ISC_R_SUCCESS);
+ dns_db_t *db = rdataset->private1;
+ dns_dbnode_t *node = rdataset->private2;
+ dns_dbnode_t *cloned_node;
+ struct noqname *noqname = rdataset->private6;
+
+ cloned_node = NULL;
+ attachnode(db, node, &cloned_node);
+ nsec->methods = &rdataset_methods;
+ nsec->rdclass = db->rdclass;
+ nsec->type = dns_rdatatype_nsec;
+ nsec->covers = 0;
+ nsec->ttl = rdataset->ttl;
+ nsec->trust = rdataset->trust;
+ nsec->private1 = rdataset->private1;
+ nsec->private2 = rdataset->private2;
+ nsec->private3 = noqname->nsec;
+ nsec->privateuint4 = 0;
+ nsec->private5 = NULL;
+ nsec->private6 = NULL;
+
+ cloned_node = NULL;
+ attachnode(db, node, &cloned_node);
+ nsecsig->methods = &rdataset_methods;
+ nsecsig->rdclass = db->rdclass;
+ nsecsig->type = dns_rdatatype_rrsig;
+ nsecsig->covers = dns_rdatatype_nsec;
+ nsecsig->ttl = rdataset->ttl;
+ nsecsig->trust = rdataset->trust;
+ nsecsig->private1 = rdataset->private1;
+ nsecsig->private2 = rdataset->private2;
+ nsecsig->private3 = noqname->nsecsig;
+ nsecsig->privateuint4 = 0;
+ nsecsig->private5 = NULL;
+ nsec->private6 = NULL;
+
+ dns_name_clone(&noqname->name, name);
+
+ return (ISC_R_SUCCESS);
}
/*
@@ -6533,172 +6364,172 @@ rdataset_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
static void
rdatasetiter_destroy(dns_rdatasetiter_t **iteratorp) {
- rbtdb_rdatasetiter_t *rbtiterator;
+ rbtdb_rdatasetiter_t *rbtiterator;
- rbtiterator = (rbtdb_rdatasetiter_t *)(*iteratorp);
+ rbtiterator = (rbtdb_rdatasetiter_t *)(*iteratorp);
- if (rbtiterator->common.version != NULL)
- closeversion(rbtiterator->common.db,
- &rbtiterator->common.version, ISC_FALSE);
- detachnode(rbtiterator->common.db, &rbtiterator->common.node);
- isc_mem_put(rbtiterator->common.db->mctx, rbtiterator,
- sizeof(*rbtiterator));
+ if (rbtiterator->common.version != NULL)
+ closeversion(rbtiterator->common.db,
+ &rbtiterator->common.version, ISC_FALSE);
+ detachnode(rbtiterator->common.db, &rbtiterator->common.node);
+ isc_mem_put(rbtiterator->common.db->mctx, rbtiterator,
+ sizeof(*rbtiterator));
- *iteratorp = NULL;
+ *iteratorp = NULL;
}
static isc_result_t
rdatasetiter_first(dns_rdatasetiter_t *iterator) {
- rbtdb_rdatasetiter_t *rbtiterator = (rbtdb_rdatasetiter_t *)iterator;
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(rbtiterator->common.db);
- dns_rbtnode_t *rbtnode = rbtiterator->common.node;
- rbtdb_version_t *rbtversion = rbtiterator->common.version;
- rdatasetheader_t *header, *top_next;
- rbtdb_serial_t serial;
- isc_stdtime_t now;
-
- if (IS_CACHE(rbtdb)) {
- serial = 1;
- now = rbtiterator->common.now;
- } else {
- serial = rbtversion->serial;
- now = 0;
- }
-
- NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_read);
-
- for (header = rbtnode->data; header != NULL; header = top_next) {
- top_next = header->next;
- do {
- if (header->serial <= serial && !IGNORE(header)) {
- /*
- * Is this a "this rdataset doesn't exist"
- * record? Or is it too old in the cache?
- *
- * Note: unlike everywhere else, we
- * check for now > header->ttl instead
- * of now >= header->ttl. This allows
- * ANY and RRSIG queries for 0 TTL
- * rdatasets to work.
- */
- if (NONEXISTENT(header) ||
- (now != 0 && now > header->rdh_ttl))
- header = NULL;
- break;
- } else
- header = header->down;
- } while (header != NULL);
- if (header != NULL)
- break;
- }
-
- NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_read);
-
- rbtiterator->current = header;
-
- if (header == NULL)
- return (ISC_R_NOMORE);
-
- return (ISC_R_SUCCESS);
+ rbtdb_rdatasetiter_t *rbtiterator = (rbtdb_rdatasetiter_t *)iterator;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(rbtiterator->common.db);
+ dns_rbtnode_t *rbtnode = rbtiterator->common.node;
+ rbtdb_version_t *rbtversion = rbtiterator->common.version;
+ rdatasetheader_t *header, *top_next;
+ rbtdb_serial_t serial;
+ isc_stdtime_t now;
+
+ if (IS_CACHE(rbtdb)) {
+ serial = 1;
+ now = rbtiterator->common.now;
+ } else {
+ serial = rbtversion->serial;
+ now = 0;
+ }
+
+ NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_read);
+
+ for (header = rbtnode->data; header != NULL; header = top_next) {
+ top_next = header->next;
+ do {
+ if (header->serial <= serial && !IGNORE(header)) {
+ /*
+ * Is this a "this rdataset doesn't exist"
+ * record? Or is it too old in the cache?
+ *
+ * Note: unlike everywhere else, we
+ * check for now > header->ttl instead
+ * of now >= header->ttl. This allows
+ * ANY and RRSIG queries for 0 TTL
+ * rdatasets to work.
+ */
+ if (NONEXISTENT(header) ||
+ (now != 0 && now > header->rdh_ttl))
+ header = NULL;
+ break;
+ } else
+ header = header->down;
+ } while (header != NULL);
+ if (header != NULL)
+ break;
+ }
+
+ NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_read);
+
+ rbtiterator->current = header;
+
+ if (header == NULL)
+ return (ISC_R_NOMORE);
+
+ return (ISC_R_SUCCESS);
}
static isc_result_t
rdatasetiter_next(dns_rdatasetiter_t *iterator) {
- rbtdb_rdatasetiter_t *rbtiterator = (rbtdb_rdatasetiter_t *)iterator;
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(rbtiterator->common.db);
- dns_rbtnode_t *rbtnode = rbtiterator->common.node;
- rbtdb_version_t *rbtversion = rbtiterator->common.version;
- rdatasetheader_t *header, *top_next;
- rbtdb_serial_t serial;
- isc_stdtime_t now;
- rbtdb_rdatatype_t type, negtype;
- dns_rdatatype_t rdtype, covers;
-
- header = rbtiterator->current;
- if (header == NULL)
- return (ISC_R_NOMORE);
-
- if (IS_CACHE(rbtdb)) {
- serial = 1;
- now = rbtiterator->common.now;
- } else {
- serial = rbtversion->serial;
- now = 0;
- }
-
- NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_read);
-
- type = header->type;
- rdtype = RBTDB_RDATATYPE_BASE(header->type);
- if (rdtype == 0) {
- covers = RBTDB_RDATATYPE_EXT(header->type);
- negtype = RBTDB_RDATATYPE_VALUE(covers, 0);
- } else
- negtype = RBTDB_RDATATYPE_VALUE(0, rdtype);
- for (header = header->next; header != NULL; header = top_next) {
- top_next = header->next;
- /*
- * If not walking back up the down list.
- */
- if (header->type != type && header->type != negtype) {
- do {
- if (header->serial <= serial &&
- !IGNORE(header)) {
- /*
- * Is this a "this rdataset doesn't
- * exist" record?
- *
- * Note: unlike everywhere else, we
- * check for now > header->ttl instead
- * of now >= header->ttl. This allows
- * ANY and RRSIG queries for 0 TTL
- * rdatasets to work.
- */
- if ((header->attributes &
- RDATASET_ATTR_NONEXISTENT) != 0 ||
- (now != 0 && now > header->rdh_ttl))
- header = NULL;
- break;
- } else
- header = header->down;
- } while (header != NULL);
- if (header != NULL)
- break;
- }
- }
-
- NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_read);
-
- rbtiterator->current = header;
-
- if (header == NULL)
- return (ISC_R_NOMORE);
-
- return (ISC_R_SUCCESS);
+ rbtdb_rdatasetiter_t *rbtiterator = (rbtdb_rdatasetiter_t *)iterator;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(rbtiterator->common.db);
+ dns_rbtnode_t *rbtnode = rbtiterator->common.node;
+ rbtdb_version_t *rbtversion = rbtiterator->common.version;
+ rdatasetheader_t *header, *top_next;
+ rbtdb_serial_t serial;
+ isc_stdtime_t now;
+ rbtdb_rdatatype_t type, negtype;
+ dns_rdatatype_t rdtype, covers;
+
+ header = rbtiterator->current;
+ if (header == NULL)
+ return (ISC_R_NOMORE);
+
+ if (IS_CACHE(rbtdb)) {
+ serial = 1;
+ now = rbtiterator->common.now;
+ } else {
+ serial = rbtversion->serial;
+ now = 0;
+ }
+
+ NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_read);
+
+ type = header->type;
+ rdtype = RBTDB_RDATATYPE_BASE(header->type);
+ if (rdtype == 0) {
+ covers = RBTDB_RDATATYPE_EXT(header->type);
+ negtype = RBTDB_RDATATYPE_VALUE(covers, 0);
+ } else
+ negtype = RBTDB_RDATATYPE_VALUE(0, rdtype);
+ for (header = header->next; header != NULL; header = top_next) {
+ top_next = header->next;
+ /*
+ * If not walking back up the down list.
+ */
+ if (header->type != type && header->type != negtype) {
+ do {
+ if (header->serial <= serial &&
+ !IGNORE(header)) {
+ /*
+ * Is this a "this rdataset doesn't
+ * exist" record?
+ *
+ * Note: unlike everywhere else, we
+ * check for now > header->ttl instead
+ * of now >= header->ttl. This allows
+ * ANY and RRSIG queries for 0 TTL
+ * rdatasets to work.
+ */
+ if ((header->attributes &
+ RDATASET_ATTR_NONEXISTENT) != 0 ||
+ (now != 0 && now > header->rdh_ttl))
+ header = NULL;
+ break;
+ } else
+ header = header->down;
+ } while (header != NULL);
+ if (header != NULL)
+ break;
+ }
+ }
+
+ NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_read);
+
+ rbtiterator->current = header;
+
+ if (header == NULL)
+ return (ISC_R_NOMORE);
+
+ return (ISC_R_SUCCESS);
}
static void
rdatasetiter_current(dns_rdatasetiter_t *iterator, dns_rdataset_t *rdataset) {
- rbtdb_rdatasetiter_t *rbtiterator = (rbtdb_rdatasetiter_t *)iterator;
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(rbtiterator->common.db);
- dns_rbtnode_t *rbtnode = rbtiterator->common.node;
- rdatasetheader_t *header;
+ rbtdb_rdatasetiter_t *rbtiterator = (rbtdb_rdatasetiter_t *)iterator;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(rbtiterator->common.db);
+ dns_rbtnode_t *rbtnode = rbtiterator->common.node;
+ rdatasetheader_t *header;
- header = rbtiterator->current;
- REQUIRE(header != NULL);
+ header = rbtiterator->current;
+ REQUIRE(header != NULL);
- NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_read);
+ NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_read);
- bind_rdataset(rbtdb, rbtnode, header, rbtiterator->common.now,
- rdataset);
+ bind_rdataset(rbtdb, rbtnode, header, rbtiterator->common.now,
+ rdataset);
- NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
- isc_rwlocktype_read);
+ NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
+ isc_rwlocktype_read);
}
@@ -6708,410 +6539,410 @@ rdatasetiter_current(dns_rdatasetiter_t *iterator, dns_rdataset_t *rdataset) {
static inline void
reference_iter_node(rbtdb_dbiterator_t *rbtdbiter) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
- dns_rbtnode_t *node = rbtdbiter->node;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
+ dns_rbtnode_t *node = rbtdbiter->node;
- if (node == NULL)
- return;
+ if (node == NULL)
+ return;
- INSIST(rbtdbiter->tree_locked != isc_rwlocktype_none);
- NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock);
- new_reference(rbtdb, node);
- NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock);
+ INSIST(rbtdbiter->tree_locked != isc_rwlocktype_none);
+ NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock);
+ new_reference(rbtdb, node);
+ NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock);
}
static inline void
dereference_iter_node(rbtdb_dbiterator_t *rbtdbiter) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
- dns_rbtnode_t *node = rbtdbiter->node;
- nodelock_t *lock;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
+ dns_rbtnode_t *node = rbtdbiter->node;
+ nodelock_t *lock;
- if (node == NULL)
- return;
+ if (node == NULL)
+ return;
- lock = &rbtdb->node_locks[node->locknum].lock;
- NODE_LOCK(lock, isc_rwlocktype_read);
- decrement_reference(rbtdb, node, 0, isc_rwlocktype_read,
- rbtdbiter->tree_locked);
- NODE_UNLOCK(lock, isc_rwlocktype_read);
+ lock = &rbtdb->node_locks[node->locknum].lock;
+ NODE_LOCK(lock, isc_rwlocktype_read);
+ decrement_reference(rbtdb, node, 0, isc_rwlocktype_read,
+ rbtdbiter->tree_locked);
+ NODE_UNLOCK(lock, isc_rwlocktype_read);
- rbtdbiter->node = NULL;
+ rbtdbiter->node = NULL;
}
static void
flush_deletions(rbtdb_dbiterator_t *rbtdbiter) {
- dns_rbtnode_t *node;
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
- isc_boolean_t was_read_locked = ISC_FALSE;
- nodelock_t *lock;
- int i;
-
- if (rbtdbiter->delete != 0) {
- /*
- * Note that "%d node of %d in tree" can report things like
- * "flush_deletions: 59 nodes of 41 in tree". This means
- * That some nodes appear on the deletions list more than
- * once. Only the last occurence will actually be deleted.
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1),
- "flush_deletions: %d nodes of %d in tree",
- rbtdbiter->delete,
- dns_rbt_nodecount(rbtdb->tree));
-
- if (rbtdbiter->tree_locked == isc_rwlocktype_read) {
- RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
- was_read_locked = ISC_TRUE;
- }
- RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
- rbtdbiter->tree_locked = isc_rwlocktype_write;
-
- for (i = 0; i < rbtdbiter->delete; i++) {
- node = rbtdbiter->deletions[i];
- lock = &rbtdb->node_locks[node->locknum].lock;
-
- NODE_LOCK(lock, isc_rwlocktype_read);
- decrement_reference(rbtdb, node, 0,
- isc_rwlocktype_read,
- rbtdbiter->tree_locked);
- NODE_UNLOCK(lock, isc_rwlocktype_read);
- }
-
- rbtdbiter->delete = 0;
-
- RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
- if (was_read_locked) {
- RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
- rbtdbiter->tree_locked = isc_rwlocktype_read;
-
- } else {
- rbtdbiter->tree_locked = isc_rwlocktype_none;
- }
- }
+ dns_rbtnode_t *node;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
+ isc_boolean_t was_read_locked = ISC_FALSE;
+ nodelock_t *lock;
+ int i;
+
+ if (rbtdbiter->delete != 0) {
+ /*
+ * Note that "%d node of %d in tree" can report things like
+ * "flush_deletions: 59 nodes of 41 in tree". This means
+ * That some nodes appear on the deletions list more than
+ * once. Only the last occurence will actually be deleted.
+ */
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
+ DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1),
+ "flush_deletions: %d nodes of %d in tree",
+ rbtdbiter->delete,
+ dns_rbt_nodecount(rbtdb->tree));
+
+ if (rbtdbiter->tree_locked == isc_rwlocktype_read) {
+ RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ was_read_locked = ISC_TRUE;
+ }
+ RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
+ rbtdbiter->tree_locked = isc_rwlocktype_write;
+
+ for (i = 0; i < rbtdbiter->delete; i++) {
+ node = rbtdbiter->deletions[i];
+ lock = &rbtdb->node_locks[node->locknum].lock;
+
+ NODE_LOCK(lock, isc_rwlocktype_read);
+ decrement_reference(rbtdb, node, 0,
+ isc_rwlocktype_read,
+ rbtdbiter->tree_locked);
+ NODE_UNLOCK(lock, isc_rwlocktype_read);
+ }
+
+ rbtdbiter->delete = 0;
+
+ RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
+ if (was_read_locked) {
+ RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ rbtdbiter->tree_locked = isc_rwlocktype_read;
+
+ } else {
+ rbtdbiter->tree_locked = isc_rwlocktype_none;
+ }
+ }
}
static inline void
resume_iteration(rbtdb_dbiterator_t *rbtdbiter) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
- REQUIRE(rbtdbiter->paused);
- REQUIRE(rbtdbiter->tree_locked == isc_rwlocktype_none);
+ REQUIRE(rbtdbiter->paused);
+ REQUIRE(rbtdbiter->tree_locked == isc_rwlocktype_none);
- RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
- rbtdbiter->tree_locked = isc_rwlocktype_read;
+ RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ rbtdbiter->tree_locked = isc_rwlocktype_read;
- rbtdbiter->paused = ISC_FALSE;
+ rbtdbiter->paused = ISC_FALSE;
}
static void
dbiterator_destroy(dns_dbiterator_t **iteratorp) {
- rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)(*iteratorp);
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
- dns_db_t *db = NULL;
+ rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)(*iteratorp);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
+ dns_db_t *db = NULL;
- if (rbtdbiter->tree_locked == isc_rwlocktype_read) {
- RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
- rbtdbiter->tree_locked = isc_rwlocktype_none;
- } else
- INSIST(rbtdbiter->tree_locked == isc_rwlocktype_none);
+ if (rbtdbiter->tree_locked == isc_rwlocktype_read) {
+ RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ rbtdbiter->tree_locked = isc_rwlocktype_none;
+ } else
+ INSIST(rbtdbiter->tree_locked == isc_rwlocktype_none);
- dereference_iter_node(rbtdbiter);
+ dereference_iter_node(rbtdbiter);
- flush_deletions(rbtdbiter);
+ flush_deletions(rbtdbiter);
- dns_db_attach(rbtdbiter->common.db, &db);
- dns_db_detach(&rbtdbiter->common.db);
+ dns_db_attach(rbtdbiter->common.db, &db);
+ dns_db_detach(&rbtdbiter->common.db);
- dns_rbtnodechain_reset(&rbtdbiter->chain);
- isc_mem_put(db->mctx, rbtdbiter, sizeof(*rbtdbiter));
- dns_db_detach(&db);
+ dns_rbtnodechain_reset(&rbtdbiter->chain);
+ isc_mem_put(db->mctx, rbtdbiter, sizeof(*rbtdbiter));
+ dns_db_detach(&db);
- *iteratorp = NULL;
+ *iteratorp = NULL;
}
static isc_result_t
dbiterator_first(dns_dbiterator_t *iterator) {
- isc_result_t result;
- rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db;
- dns_name_t *name, *origin;
-
- if (rbtdbiter->result != ISC_R_SUCCESS &&
- rbtdbiter->result != ISC_R_NOMORE)
- return (rbtdbiter->result);
-
- if (rbtdbiter->paused)
- resume_iteration(rbtdbiter);
-
- dereference_iter_node(rbtdbiter);
-
- name = dns_fixedname_name(&rbtdbiter->name);
- origin = dns_fixedname_name(&rbtdbiter->origin);
- dns_rbtnodechain_reset(&rbtdbiter->chain);
-
- result = dns_rbtnodechain_first(&rbtdbiter->chain, rbtdb->tree, name,
- origin);
-
- if (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) {
- result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL,
- NULL, &rbtdbiter->node);
- if (result == ISC_R_SUCCESS) {
- rbtdbiter->new_origin = ISC_TRUE;
- reference_iter_node(rbtdbiter);
- }
- } else {
- INSIST(result == ISC_R_NOTFOUND);
- result = ISC_R_NOMORE; /* The tree is empty. */
- }
-
- rbtdbiter->result = result;
-
- return (result);
+ isc_result_t result;
+ rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db;
+ dns_name_t *name, *origin;
+
+ if (rbtdbiter->result != ISC_R_SUCCESS &&
+ rbtdbiter->result != ISC_R_NOMORE)
+ return (rbtdbiter->result);
+
+ if (rbtdbiter->paused)
+ resume_iteration(rbtdbiter);
+
+ dereference_iter_node(rbtdbiter);
+
+ name = dns_fixedname_name(&rbtdbiter->name);
+ origin = dns_fixedname_name(&rbtdbiter->origin);
+ dns_rbtnodechain_reset(&rbtdbiter->chain);
+
+ result = dns_rbtnodechain_first(&rbtdbiter->chain, rbtdb->tree, name,
+ origin);
+
+ if (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) {
+ result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL,
+ NULL, &rbtdbiter->node);
+ if (result == ISC_R_SUCCESS) {
+ rbtdbiter->new_origin = ISC_TRUE;
+ reference_iter_node(rbtdbiter);
+ }
+ } else {
+ INSIST(result == ISC_R_NOTFOUND);
+ result = ISC_R_NOMORE; /* The tree is empty. */
+ }
+
+ rbtdbiter->result = result;
+
+ return (result);
}
static isc_result_t
dbiterator_last(dns_dbiterator_t *iterator) {
- isc_result_t result;
- rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db;
- dns_name_t *name, *origin;
-
- if (rbtdbiter->result != ISC_R_SUCCESS &&
- rbtdbiter->result != ISC_R_NOMORE)
- return (rbtdbiter->result);
-
- if (rbtdbiter->paused)
- resume_iteration(rbtdbiter);
-
- dereference_iter_node(rbtdbiter);
-
- name = dns_fixedname_name(&rbtdbiter->name);
- origin = dns_fixedname_name(&rbtdbiter->origin);
- dns_rbtnodechain_reset(&rbtdbiter->chain);
-
- result = dns_rbtnodechain_last(&rbtdbiter->chain, rbtdb->tree, name,
- origin);
- if (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) {
- result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL,
- NULL, &rbtdbiter->node);
- if (result == ISC_R_SUCCESS) {
- rbtdbiter->new_origin = ISC_TRUE;
- reference_iter_node(rbtdbiter);
- }
- } else {
- INSIST(result == ISC_R_NOTFOUND);
- result = ISC_R_NOMORE; /* The tree is empty. */
- }
-
- rbtdbiter->result = result;
-
- return (result);
+ isc_result_t result;
+ rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db;
+ dns_name_t *name, *origin;
+
+ if (rbtdbiter->result != ISC_R_SUCCESS &&
+ rbtdbiter->result != ISC_R_NOMORE)
+ return (rbtdbiter->result);
+
+ if (rbtdbiter->paused)
+ resume_iteration(rbtdbiter);
+
+ dereference_iter_node(rbtdbiter);
+
+ name = dns_fixedname_name(&rbtdbiter->name);
+ origin = dns_fixedname_name(&rbtdbiter->origin);
+ dns_rbtnodechain_reset(&rbtdbiter->chain);
+
+ result = dns_rbtnodechain_last(&rbtdbiter->chain, rbtdb->tree, name,
+ origin);
+ if (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) {
+ result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL,
+ NULL, &rbtdbiter->node);
+ if (result == ISC_R_SUCCESS) {
+ rbtdbiter->new_origin = ISC_TRUE;
+ reference_iter_node(rbtdbiter);
+ }
+ } else {
+ INSIST(result == ISC_R_NOTFOUND);
+ result = ISC_R_NOMORE; /* The tree is empty. */
+ }
+
+ rbtdbiter->result = result;
+
+ return (result);
}
static isc_result_t
dbiterator_seek(dns_dbiterator_t *iterator, dns_name_t *name) {
- isc_result_t result;
- rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db;
- dns_name_t *iname, *origin;
+ isc_result_t result;
+ rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db;
+ dns_name_t *iname, *origin;
- if (rbtdbiter->result != ISC_R_SUCCESS &&
- rbtdbiter->result != ISC_R_NOMORE)
- return (rbtdbiter->result);
+ if (rbtdbiter->result != ISC_R_SUCCESS &&
+ rbtdbiter->result != ISC_R_NOMORE)
+ return (rbtdbiter->result);
- if (rbtdbiter->paused)
- resume_iteration(rbtdbiter);
+ if (rbtdbiter->paused)
+ resume_iteration(rbtdbiter);
- dereference_iter_node(rbtdbiter);
+ dereference_iter_node(rbtdbiter);
- iname = dns_fixedname_name(&rbtdbiter->name);
- origin = dns_fixedname_name(&rbtdbiter->origin);
- dns_rbtnodechain_reset(&rbtdbiter->chain);
+ iname = dns_fixedname_name(&rbtdbiter->name);
+ origin = dns_fixedname_name(&rbtdbiter->origin);
+ dns_rbtnodechain_reset(&rbtdbiter->chain);
- result = dns_rbt_findnode(rbtdb->tree, name, NULL, &rbtdbiter->node,
- &rbtdbiter->chain, DNS_RBTFIND_EMPTYDATA,
- NULL, NULL);
- if (result == ISC_R_SUCCESS) {
- result = dns_rbtnodechain_current(&rbtdbiter->chain, iname,
- origin, NULL);
- if (result == ISC_R_SUCCESS) {
- rbtdbiter->new_origin = ISC_TRUE;
- reference_iter_node(rbtdbiter);
- }
+ result = dns_rbt_findnode(rbtdb->tree, name, NULL, &rbtdbiter->node,
+ &rbtdbiter->chain, DNS_RBTFIND_EMPTYDATA,
+ NULL, NULL);
+ if (result == ISC_R_SUCCESS) {
+ result = dns_rbtnodechain_current(&rbtdbiter->chain, iname,
+ origin, NULL);
+ if (result == ISC_R_SUCCESS) {
+ rbtdbiter->new_origin = ISC_TRUE;
+ reference_iter_node(rbtdbiter);
+ }
- } else if (result == DNS_R_PARTIALMATCH)
- result = ISC_R_NOTFOUND;
+ } else if (result == DNS_R_PARTIALMATCH)
+ result = ISC_R_NOTFOUND;
- rbtdbiter->result = result;
+ rbtdbiter->result = result;
- return (result);
+ return (result);
}
static isc_result_t
dbiterator_prev(dns_dbiterator_t *iterator) {
- isc_result_t result;
- rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
- dns_name_t *name, *origin;
+ isc_result_t result;
+ rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
+ dns_name_t *name, *origin;
- REQUIRE(rbtdbiter->node != NULL);
+ REQUIRE(rbtdbiter->node != NULL);
- if (rbtdbiter->result != ISC_R_SUCCESS)
- return (rbtdbiter->result);
+ if (rbtdbiter->result != ISC_R_SUCCESS)
+ return (rbtdbiter->result);
- if (rbtdbiter->paused)
- resume_iteration(rbtdbiter);
+ if (rbtdbiter->paused)
+ resume_iteration(rbtdbiter);
- name = dns_fixedname_name(&rbtdbiter->name);
- origin = dns_fixedname_name(&rbtdbiter->origin);
- result = dns_rbtnodechain_prev(&rbtdbiter->chain, name, origin);
+ name = dns_fixedname_name(&rbtdbiter->name);
+ origin = dns_fixedname_name(&rbtdbiter->origin);
+ result = dns_rbtnodechain_prev(&rbtdbiter->chain, name, origin);
- dereference_iter_node(rbtdbiter);
+ dereference_iter_node(rbtdbiter);
- if (result == DNS_R_NEWORIGIN || result == ISC_R_SUCCESS) {
- rbtdbiter->new_origin = ISC_TF(result == DNS_R_NEWORIGIN);
- result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL,
- NULL, &rbtdbiter->node);
- }
+ if (result == DNS_R_NEWORIGIN || result == ISC_R_SUCCESS) {
+ rbtdbiter->new_origin = ISC_TF(result == DNS_R_NEWORIGIN);
+ result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL,
+ NULL, &rbtdbiter->node);
+ }
- if (result == ISC_R_SUCCESS)
- reference_iter_node(rbtdbiter);
+ if (result == ISC_R_SUCCESS)
+ reference_iter_node(rbtdbiter);
- rbtdbiter->result = result;
+ rbtdbiter->result = result;
- return (result);
+ return (result);
}
static isc_result_t
dbiterator_next(dns_dbiterator_t *iterator) {
- isc_result_t result;
- rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
- dns_name_t *name, *origin;
+ isc_result_t result;
+ rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
+ dns_name_t *name, *origin;
- REQUIRE(rbtdbiter->node != NULL);
+ REQUIRE(rbtdbiter->node != NULL);
- if (rbtdbiter->result != ISC_R_SUCCESS)
- return (rbtdbiter->result);
+ if (rbtdbiter->result != ISC_R_SUCCESS)
+ return (rbtdbiter->result);
- if (rbtdbiter->paused)
- resume_iteration(rbtdbiter);
+ if (rbtdbiter->paused)
+ resume_iteration(rbtdbiter);
- name = dns_fixedname_name(&rbtdbiter->name);
- origin = dns_fixedname_name(&rbtdbiter->origin);
- result = dns_rbtnodechain_next(&rbtdbiter->chain, name, origin);
+ name = dns_fixedname_name(&rbtdbiter->name);
+ origin = dns_fixedname_name(&rbtdbiter->origin);
+ result = dns_rbtnodechain_next(&rbtdbiter->chain, name, origin);
- dereference_iter_node(rbtdbiter);
+ dereference_iter_node(rbtdbiter);
- if (result == DNS_R_NEWORIGIN || result == ISC_R_SUCCESS) {
- rbtdbiter->new_origin = ISC_TF(result == DNS_R_NEWORIGIN);
- result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL,
- NULL, &rbtdbiter->node);
- }
- if (result == ISC_R_SUCCESS)
- reference_iter_node(rbtdbiter);
+ if (result == DNS_R_NEWORIGIN || result == ISC_R_SUCCESS) {
+ rbtdbiter->new_origin = ISC_TF(result == DNS_R_NEWORIGIN);
+ result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL,
+ NULL, &rbtdbiter->node);
+ }
+ if (result == ISC_R_SUCCESS)
+ reference_iter_node(rbtdbiter);
- rbtdbiter->result = result;
+ rbtdbiter->result = result;
- return (result);
+ return (result);
}
static isc_result_t
dbiterator_current(dns_dbiterator_t *iterator, dns_dbnode_t **nodep,
- dns_name_t *name)
+ dns_name_t *name)
{
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db;
- rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
- dns_rbtnode_t *node = rbtdbiter->node;
- isc_result_t result;
- dns_name_t *nodename = dns_fixedname_name(&rbtdbiter->name);
- dns_name_t *origin = dns_fixedname_name(&rbtdbiter->origin);
-
- REQUIRE(rbtdbiter->result == ISC_R_SUCCESS);
- REQUIRE(rbtdbiter->node != NULL);
-
- if (rbtdbiter->paused)
- resume_iteration(rbtdbiter);
-
- if (name != NULL) {
- if (rbtdbiter->common.relative_names)
- origin = NULL;
- result = dns_name_concatenate(nodename, origin, name, NULL);
- if (result != ISC_R_SUCCESS)
- return (result);
- if (rbtdbiter->common.relative_names && rbtdbiter->new_origin)
- result = DNS_R_NEWORIGIN;
- } else
- result = ISC_R_SUCCESS;
-
- NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock);
- new_reference(rbtdb, node);
- NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock);
-
- *nodep = rbtdbiter->node;
-
- if (iterator->cleaning && result == ISC_R_SUCCESS) {
- isc_result_t expire_result;
-
- /*
- * If the deletion array is full, flush it before trying
- * to expire the current node. The current node can't
- * fully deleted while the iteration cursor is still on it.
- */
- if (rbtdbiter->delete == DELETION_BATCH_MAX)
- flush_deletions(rbtdbiter);
-
- expire_result = expirenode(iterator->db, *nodep, 0);
-
- /*
- * expirenode() currently always returns success.
- */
- if (expire_result == ISC_R_SUCCESS && node->down == NULL) {
- unsigned int refs;
-
- rbtdbiter->deletions[rbtdbiter->delete++] = node;
- NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock);
- dns_rbtnode_refincrement(node, &refs);
- INSIST(refs != 0);
- NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock);
- }
- }
-
- return (result);
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db;
+ rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
+ dns_rbtnode_t *node = rbtdbiter->node;
+ isc_result_t result;
+ dns_name_t *nodename = dns_fixedname_name(&rbtdbiter->name);
+ dns_name_t *origin = dns_fixedname_name(&rbtdbiter->origin);
+
+ REQUIRE(rbtdbiter->result == ISC_R_SUCCESS);
+ REQUIRE(rbtdbiter->node != NULL);
+
+ if (rbtdbiter->paused)
+ resume_iteration(rbtdbiter);
+
+ if (name != NULL) {
+ if (rbtdbiter->common.relative_names)
+ origin = NULL;
+ result = dns_name_concatenate(nodename, origin, name, NULL);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ if (rbtdbiter->common.relative_names && rbtdbiter->new_origin)
+ result = DNS_R_NEWORIGIN;
+ } else
+ result = ISC_R_SUCCESS;
+
+ NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock);
+ new_reference(rbtdb, node);
+ NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock);
+
+ *nodep = rbtdbiter->node;
+
+ if (iterator->cleaning && result == ISC_R_SUCCESS) {
+ isc_result_t expire_result;
+
+ /*
+ * If the deletion array is full, flush it before trying
+ * to expire the current node. The current node can't
+ * fully deleted while the iteration cursor is still on it.
+ */
+ if (rbtdbiter->delete == DELETION_BATCH_MAX)
+ flush_deletions(rbtdbiter);
+
+ expire_result = expirenode(iterator->db, *nodep, 0);
+
+ /*
+ * expirenode() currently always returns success.
+ */
+ if (expire_result == ISC_R_SUCCESS && node->down == NULL) {
+ unsigned int refs;
+
+ rbtdbiter->deletions[rbtdbiter->delete++] = node;
+ NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock);
+ dns_rbtnode_refincrement(node, &refs);
+ INSIST(refs != 0);
+ NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock);
+ }
+ }
+
+ return (result);
}
static isc_result_t
dbiterator_pause(dns_dbiterator_t *iterator) {
- dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db;
- rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
+ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db;
+ rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
- if (rbtdbiter->result != ISC_R_SUCCESS &&
- rbtdbiter->result != ISC_R_NOMORE)
- return (rbtdbiter->result);
+ if (rbtdbiter->result != ISC_R_SUCCESS &&
+ rbtdbiter->result != ISC_R_NOMORE)
+ return (rbtdbiter->result);
- if (rbtdbiter->paused)
- return (ISC_R_SUCCESS);
+ if (rbtdbiter->paused)
+ return (ISC_R_SUCCESS);
- rbtdbiter->paused = ISC_TRUE;
+ rbtdbiter->paused = ISC_TRUE;
- if (rbtdbiter->tree_locked != isc_rwlocktype_none) {
- INSIST(rbtdbiter->tree_locked == isc_rwlocktype_read);
- RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
- rbtdbiter->tree_locked = isc_rwlocktype_none;
- }
+ if (rbtdbiter->tree_locked != isc_rwlocktype_none) {
+ INSIST(rbtdbiter->tree_locked == isc_rwlocktype_read);
+ RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ rbtdbiter->tree_locked = isc_rwlocktype_none;
+ }
- flush_deletions(rbtdbiter);
+ flush_deletions(rbtdbiter);
- return (ISC_R_SUCCESS);
+ return (ISC_R_SUCCESS);
}
static isc_result_t
dbiterator_origin(dns_dbiterator_t *iterator, dns_name_t *name) {
- rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
- dns_name_t *origin = dns_fixedname_name(&rbtdbiter->origin);
+ rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
+ dns_name_t *origin = dns_fixedname_name(&rbtdbiter->origin);
- if (rbtdbiter->result != ISC_R_SUCCESS)
- return (rbtdbiter->result);
+ if (rbtdbiter->result != ISC_R_SUCCESS)
+ return (rbtdbiter->result);
- return (dns_name_copy(origin, name, NULL));
+ return (dns_name_copy(origin, name, NULL));
}
/*%
@@ -7119,352 +6950,351 @@ dbiterator_origin(dns_dbiterator_t *iterator, dns_name_t *name) {
*/
static isc_result_t
rdataset_getadditional(dns_rdataset_t *rdataset, dns_rdatasetadditional_t type,
- dns_rdatatype_t qtype, dns_acache_t *acache,
- dns_zone_t **zonep, dns_db_t **dbp,
- dns_dbversion_t **versionp, dns_dbnode_t **nodep,
- dns_name_t *fname, dns_message_t *msg,
- isc_stdtime_t now)
+ dns_rdatatype_t qtype, dns_acache_t *acache,
+ dns_zone_t **zonep, dns_db_t **dbp,
+ dns_dbversion_t **versionp, dns_dbnode_t **nodep,
+ dns_name_t *fname, dns_message_t *msg,
+ isc_stdtime_t now)
{
- dns_rbtdb_t *rbtdb = rdataset->private1;
- dns_rbtnode_t *rbtnode = rdataset->private2;
- unsigned char *raw = rdataset->private3; /* RDATASLAB */
- unsigned int current_count = rdataset->privateuint4;
- unsigned int count;
- rdatasetheader_t *header;
- nodelock_t *nodelock;
- unsigned int total_count;
- acachectl_t *acarray;
- dns_acacheentry_t *entry;
- isc_result_t result;
-
- UNUSED(qtype); /* we do not use this value at least for now */
- UNUSED(acache);
-
- header = (struct rdatasetheader *)(raw - sizeof(*header));
-
- total_count = raw[0] * 256 + raw[1];
- INSIST(total_count > current_count);
- count = total_count - current_count - 1;
-
- acarray = NULL;
-
- nodelock = &rbtdb->node_locks[rbtnode->locknum].lock;
- NODE_LOCK(nodelock, isc_rwlocktype_read);
-
- switch (type) {
- case dns_rdatasetadditional_fromauth:
- acarray = header->additional_auth;
- break;
- case dns_rdatasetadditional_fromcache:
- acarray = NULL;
- break;
- case dns_rdatasetadditional_fromglue:
- acarray = header->additional_glue;
- break;
- default:
- INSIST(0);
- }
-
- if (acarray == NULL) {
- if (type != dns_rdatasetadditional_fromcache)
- dns_acache_countquerymiss(acache);
- NODE_UNLOCK(nodelock, isc_rwlocktype_read);
- return (ISC_R_NOTFOUND);
- }
-
- if (acarray[count].entry == NULL) {
- dns_acache_countquerymiss(acache);
- NODE_UNLOCK(nodelock, isc_rwlocktype_read);
- return (ISC_R_NOTFOUND);
- }
-
- entry = NULL;
- dns_acache_attachentry(acarray[count].entry, &entry);
-
- NODE_UNLOCK(nodelock, isc_rwlocktype_read);
-
- result = dns_acache_getentry(entry, zonep, dbp, versionp,
- nodep, fname, msg, now);
-
- dns_acache_detachentry(&entry);
-
- return (result);
+ dns_rbtdb_t *rbtdb = rdataset->private1;
+ dns_rbtnode_t *rbtnode = rdataset->private2;
+ unsigned char *raw = rdataset->private3; /* RDATASLAB */
+ unsigned int current_count = rdataset->privateuint4;
+ unsigned int count;
+ rdatasetheader_t *header;
+ nodelock_t *nodelock;
+ unsigned int total_count;
+ acachectl_t *acarray;
+ dns_acacheentry_t *entry;
+ isc_result_t result;
+
+ UNUSED(qtype); /* we do not use this value at least for now */
+ UNUSED(acache);
+
+ header = (struct rdatasetheader *)(raw - sizeof(*header));
+
+ total_count = raw[0] * 256 + raw[1];
+ INSIST(total_count > current_count);
+ count = total_count - current_count - 1;
+
+ acarray = NULL;
+
+ nodelock = &rbtdb->node_locks[rbtnode->locknum].lock;
+ NODE_LOCK(nodelock, isc_rwlocktype_read);
+
+ switch (type) {
+ case dns_rdatasetadditional_fromauth:
+ acarray = header->additional_auth;
+ break;
+ case dns_rdatasetadditional_fromcache:
+ acarray = NULL;
+ break;
+ case dns_rdatasetadditional_fromglue:
+ acarray = header->additional_glue;
+ break;
+ default:
+ INSIST(0);
+ }
+
+ if (acarray == NULL) {
+ if (type != dns_rdatasetadditional_fromcache)
+ dns_acache_countquerymiss(acache);
+ NODE_UNLOCK(nodelock, isc_rwlocktype_read);
+ return (ISC_R_NOTFOUND);
+ }
+
+ if (acarray[count].entry == NULL) {
+ dns_acache_countquerymiss(acache);
+ NODE_UNLOCK(nodelock, isc_rwlocktype_read);
+ return (ISC_R_NOTFOUND);
+ }
+
+ entry = NULL;
+ dns_acache_attachentry(acarray[count].entry, &entry);
+
+ NODE_UNLOCK(nodelock, isc_rwlocktype_read);
+
+ result = dns_acache_getentry(entry, zonep, dbp, versionp,
+ nodep, fname, msg, now);
+
+ dns_acache_detachentry(&entry);
+
+ return (result);
}
static void
acache_callback(dns_acacheentry_t *entry, void **arg) {
- dns_rbtdb_t *rbtdb;
- dns_rbtnode_t *rbtnode;
- nodelock_t *nodelock;
- acachectl_t *acarray = NULL;
- acache_cbarg_t *cbarg;
- unsigned int count;
-
- REQUIRE(arg != NULL);
- cbarg = *arg;
-
- /*
- * The caller must hold the entry lock.
- */
-
- rbtdb = (dns_rbtdb_t *)cbarg->db;
- rbtnode = (dns_rbtnode_t *)cbarg->node;
-
- nodelock = &rbtdb->node_locks[rbtnode->locknum].lock;
- NODE_LOCK(nodelock, isc_rwlocktype_write);
-
- switch (cbarg->type) {
- case dns_rdatasetadditional_fromauth:
- acarray = cbarg->header->additional_auth;
- break;
- case dns_rdatasetadditional_fromglue:
- acarray = cbarg->header->additional_glue;
- break;
- default:
- INSIST(0);
- }
-
- count = cbarg->count;
- if (acarray[count].entry == entry)
- acarray[count].entry = NULL;
- INSIST(acarray[count].cbarg != NULL);
- isc_mem_put(rbtdb->common.mctx, acarray[count].cbarg,
- sizeof(acache_cbarg_t));
- acarray[count].cbarg = NULL;
-
- dns_acache_detachentry(&entry);
-
- NODE_UNLOCK(nodelock, isc_rwlocktype_write);
-
- dns_db_detachnode((dns_db_t *)rbtdb, (dns_dbnode_t **)(void*)&rbtnode);
- dns_db_detach((dns_db_t **)(void*)&rbtdb);
-
- *arg = NULL;
+ dns_rbtdb_t *rbtdb;
+ dns_rbtnode_t *rbtnode;
+ nodelock_t *nodelock;
+ acachectl_t *acarray = NULL;
+ acache_cbarg_t *cbarg;
+ unsigned int count;
+
+ REQUIRE(arg != NULL);
+ cbarg = *arg;
+
+ /*
+ * The caller must hold the entry lock.
+ */
+
+ rbtdb = (dns_rbtdb_t *)cbarg->db;
+ rbtnode = (dns_rbtnode_t *)cbarg->node;
+
+ nodelock = &rbtdb->node_locks[rbtnode->locknum].lock;
+ NODE_LOCK(nodelock, isc_rwlocktype_write);
+
+ switch (cbarg->type) {
+ case dns_rdatasetadditional_fromauth:
+ acarray = cbarg->header->additional_auth;
+ break;
+ case dns_rdatasetadditional_fromglue:
+ acarray = cbarg->header->additional_glue;
+ break;
+ default:
+ INSIST(0);
+ }
+
+ count = cbarg->count;
+ if (acarray != NULL && acarray[count].entry == entry) {
+ acarray[count].entry = NULL;
+ INSIST(acarray[count].cbarg == cbarg);
+ isc_mem_put(rbtdb->common.mctx, cbarg, sizeof(acache_cbarg_t));
+ acarray[count].cbarg = NULL;
+ } else
+ isc_mem_put(rbtdb->common.mctx, cbarg, sizeof(acache_cbarg_t));
+
+ dns_acache_detachentry(&entry);
+
+ NODE_UNLOCK(nodelock, isc_rwlocktype_write);
+
+ dns_db_detachnode((dns_db_t *)rbtdb, (dns_dbnode_t **)(void*)&rbtnode);
+ dns_db_detach((dns_db_t **)(void*)&rbtdb);
+
+ *arg = NULL;
}
static void
acache_cancelentry(isc_mem_t *mctx, dns_acacheentry_t *entry,
- acache_cbarg_t **cbargp)
+ acache_cbarg_t **cbargp)
{
- acache_cbarg_t *cbarg;
+ acache_cbarg_t *cbarg;
- REQUIRE(mctx != NULL);
- REQUIRE(entry != NULL);
- REQUIRE(cbargp != NULL && *cbargp != NULL);
+ REQUIRE(mctx != NULL);
+ REQUIRE(entry != NULL);
+ REQUIRE(cbargp != NULL && *cbargp != NULL);
- cbarg = *cbargp;
+ cbarg = *cbargp;
- dns_acache_cancelentry(entry);
- dns_db_detachnode(cbarg->db, &cbarg->node);
- dns_db_detach(&cbarg->db);
+ dns_acache_cancelentry(entry);
+ dns_db_detachnode(cbarg->db, &cbarg->node);
+ dns_db_detach(&cbarg->db);
- isc_mem_put(mctx, cbarg, sizeof(acache_cbarg_t));
+ isc_mem_put(mctx, cbarg, sizeof(acache_cbarg_t));
- *cbargp = NULL;
+ *cbargp = NULL;
}
static isc_result_t
rdataset_setadditional(dns_rdataset_t *rdataset, dns_rdatasetadditional_t type,
- dns_rdatatype_t qtype, dns_acache_t *acache,
- dns_zone_t *zone, dns_db_t *db,
- dns_dbversion_t *version, dns_dbnode_t *node,
- dns_name_t *fname)
+ dns_rdatatype_t qtype, dns_acache_t *acache,
+ dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *version, dns_dbnode_t *node,
+ dns_name_t *fname)
{
- dns_rbtdb_t *rbtdb = rdataset->private1;
- dns_rbtnode_t *rbtnode = rdataset->private2;
- unsigned char *raw = rdataset->private3; /* RDATASLAB */
- unsigned int current_count = rdataset->privateuint4;
- rdatasetheader_t *header;
- unsigned int total_count, count;
- nodelock_t *nodelock;
- isc_result_t result;
- acachectl_t *acarray;
- dns_acacheentry_t *newentry, *oldentry = NULL;
- acache_cbarg_t *newcbarg, *oldcbarg = NULL;
-
- UNUSED(qtype);
-
- if (type == dns_rdatasetadditional_fromcache)
- return (ISC_R_SUCCESS);
-
- header = (struct rdatasetheader *)(raw - sizeof(*header));
-
- total_count = raw[0] * 256 + raw[1];
- INSIST(total_count > current_count);
- count = total_count - current_count - 1; /* should be private data */
-
- newcbarg = isc_mem_get(rbtdb->common.mctx, sizeof(*newcbarg));
- if (newcbarg == NULL)
- return (ISC_R_NOMEMORY);
- newcbarg->type = type;
- newcbarg->count = count;
- newcbarg->header = header;
- newcbarg->db = NULL;
- dns_db_attach((dns_db_t *)rbtdb, &newcbarg->db);
- newcbarg->node = NULL;
- dns_db_attachnode((dns_db_t *)rbtdb, (dns_dbnode_t *)rbtnode,
- &newcbarg->node);
- newentry = NULL;
- result = dns_acache_createentry(acache, (dns_db_t *)rbtdb,
- acache_callback, newcbarg, &newentry);
- if (result != ISC_R_SUCCESS)
- goto fail;
- /* Set cache data in the new entry. */
- result = dns_acache_setentry(acache, newentry, zone, db,
- version, node, fname);
- if (result != ISC_R_SUCCESS)
- goto fail;
-
- nodelock = &rbtdb->node_locks[rbtnode->locknum].lock;
- NODE_LOCK(nodelock, isc_rwlocktype_write);
-
- acarray = NULL;
- switch (type) {
- case dns_rdatasetadditional_fromauth:
- acarray = header->additional_auth;
- break;
- case dns_rdatasetadditional_fromglue:
- acarray = header->additional_glue;
- break;
- default:
- INSIST(0);
- }
-
- if (acarray == NULL) {
- unsigned int i;
-
- acarray = isc_mem_get(rbtdb->common.mctx, total_count *
- sizeof(acachectl_t));
-
- if (acarray == NULL) {
- NODE_UNLOCK(nodelock, isc_rwlocktype_write);
- goto fail;
- }
-
- for (i = 0; i < total_count; i++) {
- acarray[i].entry = NULL;
- acarray[i].cbarg = NULL;
- }
- }
- switch (type) {
- case dns_rdatasetadditional_fromauth:
- header->additional_auth = acarray;
- break;
- case dns_rdatasetadditional_fromglue:
- header->additional_glue = acarray;
- break;
- default:
- INSIST(0);
- }
-
- if (acarray[count].entry != NULL) {
- /*
- * Swap the entry. Delay cleaning-up the old entry since
- * it would require a node lock.
- */
- oldentry = acarray[count].entry;
- INSIST(acarray[count].cbarg != NULL);
- oldcbarg = acarray[count].cbarg;
- }
- acarray[count].entry = newentry;
- acarray[count].cbarg = newcbarg;
-
- NODE_UNLOCK(nodelock, isc_rwlocktype_write);
-
- if (oldentry != NULL) {
- if (oldcbarg != NULL)
- acache_cancelentry(rbtdb->common.mctx, oldentry,
- &oldcbarg);
- dns_acache_detachentry(&oldentry);
- }
-
- return (ISC_R_SUCCESS);
+ dns_rbtdb_t *rbtdb = rdataset->private1;
+ dns_rbtnode_t *rbtnode = rdataset->private2;
+ unsigned char *raw = rdataset->private3; /* RDATASLAB */
+ unsigned int current_count = rdataset->privateuint4;
+ rdatasetheader_t *header;
+ unsigned int total_count, count;
+ nodelock_t *nodelock;
+ isc_result_t result;
+ acachectl_t *acarray;
+ dns_acacheentry_t *newentry, *oldentry = NULL;
+ acache_cbarg_t *newcbarg, *oldcbarg = NULL;
+
+ UNUSED(qtype);
+
+ if (type == dns_rdatasetadditional_fromcache)
+ return (ISC_R_SUCCESS);
+
+ header = (struct rdatasetheader *)(raw - sizeof(*header));
+
+ total_count = raw[0] * 256 + raw[1];
+ INSIST(total_count > current_count);
+ count = total_count - current_count - 1; /* should be private data */
+
+ newcbarg = isc_mem_get(rbtdb->common.mctx, sizeof(*newcbarg));
+ if (newcbarg == NULL)
+ return (ISC_R_NOMEMORY);
+ newcbarg->type = type;
+ newcbarg->count = count;
+ newcbarg->header = header;
+ newcbarg->db = NULL;
+ dns_db_attach((dns_db_t *)rbtdb, &newcbarg->db);
+ newcbarg->node = NULL;
+ dns_db_attachnode((dns_db_t *)rbtdb, (dns_dbnode_t *)rbtnode,
+ &newcbarg->node);
+ newentry = NULL;
+ result = dns_acache_createentry(acache, (dns_db_t *)rbtdb,
+ acache_callback, newcbarg, &newentry);
+ if (result != ISC_R_SUCCESS)
+ goto fail;
+ /* Set cache data in the new entry. */
+ result = dns_acache_setentry(acache, newentry, zone, db,
+ version, node, fname);
+ if (result != ISC_R_SUCCESS)
+ goto fail;
+
+ nodelock = &rbtdb->node_locks[rbtnode->locknum].lock;
+ NODE_LOCK(nodelock, isc_rwlocktype_write);
+
+ acarray = NULL;
+ switch (type) {
+ case dns_rdatasetadditional_fromauth:
+ acarray = header->additional_auth;
+ break;
+ case dns_rdatasetadditional_fromglue:
+ acarray = header->additional_glue;
+ break;
+ default:
+ INSIST(0);
+ }
+
+ if (acarray == NULL) {
+ unsigned int i;
+
+ acarray = isc_mem_get(rbtdb->common.mctx, total_count *
+ sizeof(acachectl_t));
+
+ if (acarray == NULL) {
+ NODE_UNLOCK(nodelock, isc_rwlocktype_write);
+ goto fail;
+ }
+
+ for (i = 0; i < total_count; i++) {
+ acarray[i].entry = NULL;
+ acarray[i].cbarg = NULL;
+ }
+ }
+ switch (type) {
+ case dns_rdatasetadditional_fromauth:
+ header->additional_auth = acarray;
+ break;
+ case dns_rdatasetadditional_fromglue:
+ header->additional_glue = acarray;
+ break;
+ default:
+ INSIST(0);
+ }
+
+ if (acarray[count].entry != NULL) {
+ /*
+ * Swap the entry. Delay cleaning-up the old entry since
+ * it would require a node lock.
+ */
+ oldentry = acarray[count].entry;
+ INSIST(acarray[count].cbarg != NULL);
+ oldcbarg = acarray[count].cbarg;
+ }
+ acarray[count].entry = newentry;
+ acarray[count].cbarg = newcbarg;
+
+ NODE_UNLOCK(nodelock, isc_rwlocktype_write);
+
+ if (oldentry != NULL) {
+ acache_cancelentry(rbtdb->common.mctx, oldentry, &oldcbarg);
+ dns_acache_detachentry(&oldentry);
+ }
+
+ return (ISC_R_SUCCESS);
fail:
- if (newcbarg != NULL) {
- if (newentry != NULL) {
- acache_cancelentry(rbtdb->common.mctx, newentry,
- &newcbarg);
- dns_acache_detachentry(&newentry);
- } else {
- dns_db_detachnode((dns_db_t *)rbtdb, &newcbarg->node);
- dns_db_detach(&newcbarg->db);
- isc_mem_put(rbtdb->common.mctx, newcbarg,
- sizeof(*newcbarg));
- }
- }
-
- return (result);
+ if (newcbarg != NULL) {
+ if (newentry != NULL) {
+ acache_cancelentry(rbtdb->common.mctx, newentry,
+ &newcbarg);
+ dns_acache_detachentry(&newentry);
+ } else {
+ dns_db_detachnode((dns_db_t *)rbtdb, &newcbarg->node);
+ dns_db_detach(&newcbarg->db);
+ isc_mem_put(rbtdb->common.mctx, newcbarg,
+ sizeof(*newcbarg));
+ }
+ }
+
+ return (result);
}
static isc_result_t
rdataset_putadditional(dns_acache_t *acache, dns_rdataset_t *rdataset,
- dns_rdatasetadditional_t type, dns_rdatatype_t qtype)
+ dns_rdatasetadditional_t type, dns_rdatatype_t qtype)
{
- dns_rbtdb_t *rbtdb = rdataset->private1;
- dns_rbtnode_t *rbtnode = rdataset->private2;
- unsigned char *raw = rdataset->private3; /* RDATASLAB */
- unsigned int current_count = rdataset->privateuint4;
- rdatasetheader_t *header;
- nodelock_t *nodelock;
- unsigned int total_count, count;
- acachectl_t *acarray;
- dns_acacheentry_t *entry;
- acache_cbarg_t *cbarg;
-
- UNUSED(qtype); /* we do not use this value at least for now */
- UNUSED(acache);
-
- if (type == dns_rdatasetadditional_fromcache)
- return (ISC_R_SUCCESS);
-
- header = (struct rdatasetheader *)(raw - sizeof(*header));
-
- total_count = raw[0] * 256 + raw[1];
- INSIST(total_count > current_count);
- count = total_count - current_count - 1;
-
- acarray = NULL;
- entry = NULL;
-
- nodelock = &rbtdb->node_locks[rbtnode->locknum].lock;
- NODE_LOCK(nodelock, isc_rwlocktype_write);
-
- switch (type) {
- case dns_rdatasetadditional_fromauth:
- acarray = header->additional_auth;
- break;
- case dns_rdatasetadditional_fromglue:
- acarray = header->additional_glue;
- break;
- default:
- INSIST(0);
- }
-
- if (acarray == NULL) {
- NODE_UNLOCK(nodelock, isc_rwlocktype_write);
- return (ISC_R_NOTFOUND);
- }
-
- entry = acarray[count].entry;
- if (entry == NULL) {
- NODE_UNLOCK(nodelock, isc_rwlocktype_write);
- return (ISC_R_NOTFOUND);
- }
-
- acarray[count].entry = NULL;
- cbarg = acarray[count].cbarg;
- acarray[count].cbarg = NULL;
-
- NODE_UNLOCK(nodelock, isc_rwlocktype_write);
-
- if (entry != NULL) {
- if (cbarg != NULL)
- acache_cancelentry(rbtdb->common.mctx, entry, &cbarg);
- dns_acache_detachentry(&entry);
- }
-
- return (ISC_R_SUCCESS);
+ dns_rbtdb_t *rbtdb = rdataset->private1;
+ dns_rbtnode_t *rbtnode = rdataset->private2;
+ unsigned char *raw = rdataset->private3; /* RDATASLAB */
+ unsigned int current_count = rdataset->privateuint4;
+ rdatasetheader_t *header;
+ nodelock_t *nodelock;
+ unsigned int total_count, count;
+ acachectl_t *acarray;
+ dns_acacheentry_t *entry;
+ acache_cbarg_t *cbarg;
+
+ UNUSED(qtype); /* we do not use this value at least for now */
+ UNUSED(acache);
+
+ if (type == dns_rdatasetadditional_fromcache)
+ return (ISC_R_SUCCESS);
+
+ header = (struct rdatasetheader *)(raw - sizeof(*header));
+
+ total_count = raw[0] * 256 + raw[1];
+ INSIST(total_count > current_count);
+ count = total_count - current_count - 1;
+
+ acarray = NULL;
+ entry = NULL;
+
+ nodelock = &rbtdb->node_locks[rbtnode->locknum].lock;
+ NODE_LOCK(nodelock, isc_rwlocktype_write);
+
+ switch (type) {
+ case dns_rdatasetadditional_fromauth:
+ acarray = header->additional_auth;
+ break;
+ case dns_rdatasetadditional_fromglue:
+ acarray = header->additional_glue;
+ break;
+ default:
+ INSIST(0);
+ }
+
+ if (acarray == NULL) {
+ NODE_UNLOCK(nodelock, isc_rwlocktype_write);
+ return (ISC_R_NOTFOUND);
+ }
+
+ entry = acarray[count].entry;
+ if (entry == NULL) {
+ NODE_UNLOCK(nodelock, isc_rwlocktype_write);
+ return (ISC_R_NOTFOUND);
+ }
+
+ acarray[count].entry = NULL;
+ cbarg = acarray[count].cbarg;
+ acarray[count].cbarg = NULL;
+
+ NODE_UNLOCK(nodelock, isc_rwlocktype_write);
+
+ if (entry != NULL) {
+ if (cbarg != NULL)
+ acache_cancelentry(rbtdb->common.mctx, entry, &cbarg);
+ dns_acache_detachentry(&entry);
+ }
+
+ return (ISC_R_SUCCESS);
}
/*%
@@ -7487,28 +7317,28 @@ rdataset_putadditional(dns_acache_t *acache, dns_rdataset_t *rdataset,
*/
static inline isc_boolean_t
need_headerupdate(rdatasetheader_t *header, isc_stdtime_t now) {
- if ((header->attributes &
- (RDATASET_ATTR_NONEXISTENT|RDATASET_ATTR_STALE)) != 0)
- return (ISC_FALSE);
+ if ((header->attributes &
+ (RDATASET_ATTR_NONEXISTENT|RDATASET_ATTR_STALE)) != 0)
+ return (ISC_FALSE);
#ifdef ISC_PLATFORM_USETHREADS
- if (header->type == dns_rdatatype_ns ||
- (header->trust == dns_trust_glue &&
- (header->type == dns_rdatatype_a ||
- header->type == dns_rdatatype_aaaa))) {
- /*
- * Glue records are updated if at least 60 seconds have passed
- * since the previous update time.
- */
- return (header->last_used + 60 <= now);
- }
-
- /* Other records are updated if 5 minutes have passed. */
- return (header->last_used + 300 <= now);
+ if (header->type == dns_rdatatype_ns ||
+ (header->trust == dns_trust_glue &&
+ (header->type == dns_rdatatype_a ||
+ header->type == dns_rdatatype_aaaa))) {
+ /*
+ * Glue records are updated if at least 60 seconds have passed
+ * since the previous update time.
+ */
+ return (header->last_used + 60 <= now);
+ }
+
+ /* Other records are updated if 5 minutes have passed. */
+ return (header->last_used + 300 <= now);
#else
- UNUSED(now);
+ UNUSED(now);
- return (ISC_TRUE);
+ return (ISC_TRUE);
#endif
}
@@ -7522,16 +7352,16 @@ need_headerupdate(rdatasetheader_t *header, isc_stdtime_t now) {
*/
static void
update_header(dns_rbtdb_t *rbtdb, rdatasetheader_t *header,
- isc_stdtime_t now)
+ isc_stdtime_t now)
{
- /* To be checked: can we really assume this? XXXMLG */
- INSIST(ISC_LINK_LINKED(header, lru_link));
-
- ISC_LIST_UNLINK(rbtdb->rdatasets[header->node->locknum],
- header, lru_link);
- header->last_used = now;
- ISC_LIST_PREPEND(rbtdb->rdatasets[header->node->locknum],
- header, lru_link);
+ /* To be checked: can we really assume this? XXXMLG */
+ INSIST(ISC_LINK_LINKED(header, lru_link));
+
+ ISC_LIST_UNLINK(rbtdb->rdatasets[header->node->locknum],
+ header, lru_link);
+ header->last_used = now;
+ ISC_LIST_PREPEND(rbtdb->rdatasets[header->node->locknum],
+ header, lru_link);
}
/*%
@@ -7549,83 +7379,65 @@ update_header(dns_rbtdb_t *rbtdb, rdatasetheader_t *header,
*/
static void
check_stale_cache(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode,
- isc_stdtime_t now, isc_boolean_t tree_locked)
+ isc_stdtime_t now, isc_boolean_t tree_locked)
{
- rdatasetheader_t *victim;
- isc_boolean_t overmem = rbtdb->overmem;
- int scans = 0; /* for debug */
- int victims = 0;
-
- /*
- * Check for TTL-based expiry.
- */
- victim = isc_heap_element(rbtdb->heaps[rbtnode->locknum], 1);
- if (victim != NULL && victim->rdh_ttl <= now - RBTDB_VIRTUAL) {
- INSIST(victim->node->locknum == rbtnode->locknum);
-
-#ifdef LRU_DEBUG
- /* for debug */
- rbtdb->cachestat.stale_expire++;
-#endif
- victims++;
-
- set_ttl(rbtdb, victim, 0);
- victim->attributes |= RDATASET_ATTR_STALE;
- victim->node->dirty = 1;
-
- if (dns_rbtnode_refcurrent(victim->node) == 0) {
- INSIST(rbtnode != victim->node);
- /*
- * If no one else is using the node, we can
- * clean it up now. We first need to gain
- * a new reference to the node to meet a
- * requirement of decrement_reference().
- */
- new_reference(rbtdb, victim->node);
- decrement_reference(rbtdb, victim->node, 0,
- isc_rwlocktype_write,
- tree_locked ? isc_rwlocktype_write :
- isc_rwlocktype_none);
- }
- }
-
- /*
- * If we are over memory, delete the end entry from the LRU.
- */
- victim = ISC_LIST_TAIL(rbtdb->rdatasets[rbtnode->locknum]);
- if (victim != NULL && overmem) {
- INSIST(victim->node->locknum == rbtnode->locknum);
-
-#ifdef LRU_DEBUG
- /* for debug */
- rbtdb->cachestat.stale_lru++;
-#endif
- victims++;
- scans++;
-
- set_ttl(rbtdb, victim, 0);
- victim->attributes |= RDATASET_ATTR_STALE;
- victim->node->dirty = 1;
-
- if (dns_rbtnode_refcurrent(victim->node) == 0) {
- INSIST(rbtnode != victim->node);
- /*
- * If no one else is using the node, we can
- * clean it up now. We first need to gain
- * a new reference to the node to meet a
- * requirement of decrement_reference().
- */
- new_reference(rbtdb, victim->node);
- decrement_reference(rbtdb, victim->node, 0,
- isc_rwlocktype_write,
- tree_locked ? isc_rwlocktype_write :
- isc_rwlocktype_none);
- }
- }
-
-#ifdef LRU_DEBUG
- /* update statistics for debug (no lock for brevity) */
- rbtdb->cachestat.stale_scan += scans;
- rbtdb->cachestat.stale_purge += victims;
-#endif
+ rdatasetheader_t *victim;
+ isc_boolean_t overmem = rbtdb->overmem;
+ int victims = 0;
+
+ /*
+ * Check for TTL-based expiry.
+ */
+ victim = isc_heap_element(rbtdb->heaps[rbtnode->locknum], 1);
+ if (victim != NULL && victim->rdh_ttl <= now - RBTDB_VIRTUAL) {
+ INSIST(victim->node->locknum == rbtnode->locknum);
+ victims++;
+
+ set_ttl(rbtdb, victim, 0);
+ victim->attributes |= RDATASET_ATTR_STALE;
+ victim->node->dirty = 1;
+
+ if (dns_rbtnode_refcurrent(victim->node) == 0) {
+ INSIST(rbtnode != victim->node);
+ /*
+ * If no one else is using the node, we can
+ * clean it up now. We first need to gain
+ * a new reference to the node to meet a
+ * requirement of decrement_reference().
+ */
+ new_reference(rbtdb, victim->node);
+ decrement_reference(rbtdb, victim->node, 0,
+ isc_rwlocktype_write,
+ tree_locked ? isc_rwlocktype_write :
+ isc_rwlocktype_none);
+ }
+ }
+
+ /*
+ * If we are over memory, delete the end entry from the LRU.
+ */
+ victim = ISC_LIST_TAIL(rbtdb->rdatasets[rbtnode->locknum]);
+ if (victim != NULL && overmem) {
+ INSIST(victim->node->locknum == rbtnode->locknum);
+ victims++;
+
+ set_ttl(rbtdb, victim, 0);
+ victim->attributes |= RDATASET_ATTR_STALE;
+ victim->node->dirty = 1;
+
+ if (dns_rbtnode_refcurrent(victim->node) == 0) {
+ INSIST(rbtnode != victim->node);
+ /*
+ * If no one else is using the node, we can
+ * clean it up now. We first need to gain
+ * a new reference to the node to meet a
+ * requirement of decrement_reference().
+ */
+ new_reference(rbtdb, victim->node);
+ decrement_reference(rbtdb, victim->node, 0,
+ isc_rwlocktype_write,
+ tree_locked ? isc_rwlocktype_write :
+ isc_rwlocktype_none);
+ }
+ }
}
diff --git a/lib/dns/rdata/generic/txt_16.c b/lib/dns/rdata/generic/txt_16.c
index 1d0a27a0..d3c9dc39 100644
--- a/lib/dns/rdata/generic/txt_16.c
+++ b/lib/dns/rdata/generic/txt_16.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: txt_16.c,v 1.43 2007/06/19 23:47:17 tbox Exp $ */
+/* $Id: txt_16.c,v 1.43.128.2 2008/02/15 23:46:22 tbox Exp $ */
/* Reviewed: Thu Mar 16 15:40:00 PST 2000 by bwelling */
@@ -142,7 +142,7 @@ fromstruct_txt(ARGS_FROMSTRUCT) {
while (region.length > 0) {
length = uint8_fromregion(&region);
isc_region_consume(&region, 1);
- if (region.length <= length)
+ if (region.length < length)
return (ISC_R_UNEXPECTEDEND);
isc_region_consume(&region, length);
}
diff --git a/lib/dns/rdata/in_1/naptr_35.c b/lib/dns/rdata/in_1/naptr_35.c
index 2b28711a..18ea614a 100644
--- a/lib/dns/rdata/in_1/naptr_35.c
+++ b/lib/dns/rdata/in_1/naptr_35.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: naptr_35.c,v 1.51 2007/06/19 23:47:17 tbox Exp $ */
+/* $Id: naptr_35.c,v 1.51.128.2 2008/02/15 23:46:22 tbox Exp $ */
/* Reviewed: Thu Mar 16 16:52:50 PST 2000 by bwelling */
@@ -154,7 +154,7 @@ totext_in_naptr(ARGS_TOTEXT) {
static inline isc_result_t
fromwire_in_naptr(ARGS_FROMWIRE) {
- dns_name_t name;
+ dns_name_t name;
isc_region_t sr;
REQUIRE(type == 35);
@@ -165,7 +165,7 @@ fromwire_in_naptr(ARGS_FROMWIRE) {
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
- dns_name_init(&name, NULL);
+ dns_name_init(&name, NULL);
/*
* Order, preference.
@@ -321,8 +321,8 @@ fromstruct_in_naptr(ARGS_FROMSTRUCT) {
REQUIRE(naptr->common.rdtype == type);
REQUIRE(naptr->common.rdclass == rdclass);
REQUIRE(naptr->flags != NULL || naptr->flags_len == 0);
- REQUIRE(naptr->service != NULL && naptr->service_len == 0);
- REQUIRE(naptr->regexp != NULL && naptr->regexp_len == 0);
+ REQUIRE(naptr->service != NULL || naptr->service_len == 0);
+ REQUIRE(naptr->regexp != NULL || naptr->regexp_len == 0);
UNUSED(type);
UNUSED(rdclass);
diff --git a/lib/dns/rdatalist.c b/lib/dns/rdatalist.c
index 4c775d2a..836d9974 100644
--- a/lib/dns/rdatalist.c
+++ b/lib/dns/rdatalist.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rdatalist.c,v 1.33 2007/06/19 23:47:16 tbox Exp $ */
+/* $Id: rdatalist.c,v 1.33.128.2 2008/04/03 06:08:27 tbox Exp $ */
/*! \file */
@@ -88,6 +88,16 @@ dns_rdatalist_tordataset(dns_rdatalist_t *rdatalist,
return (ISC_R_SUCCESS);
}
+isc_result_t
+dns_rdatalist_fromrdataset(dns_rdataset_t *rdataset,
+ dns_rdatalist_t **rdatalist)
+{
+ REQUIRE(rdatalist != NULL && rdataset != NULL);
+ *rdatalist = rdataset->private1;
+
+ return (ISC_R_SUCCESS);
+}
+
void
isc__rdatalist_disassociate(dns_rdataset_t *rdataset) {
UNUSED(rdataset);
diff --git a/lib/dns/rdataslab.c b/lib/dns/rdataslab.c
index 6de77bac..5059a744 100644
--- a/lib/dns/rdataslab.c
+++ b/lib/dns/rdataslab.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rdataslab.c,v 1.43 2007/06/18 23:47:41 tbox Exp $ */
+/* $Id: rdataslab.c,v 1.43.128.2 2008/04/23 23:46:29 tbox Exp $ */
/*! \file */
@@ -33,10 +33,6 @@
#include <dns/rdataset.h>
#include <dns/rdataslab.h>
-#ifndef DNS_RDATASET_FIXED
-#define DNS_RDATASET_FIXED 1
-#endif
-
/*
* The rdataslab structure allows iteration to occur in both load order
* and DNSSEC order. The structure is as follows:
@@ -246,7 +242,7 @@ dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx,
result = ISC_R_NOMEMORY;
goto free_rdatas;
}
-
+
#if DNS_RDATASET_FIXED
/* Allocate temporary offset table. */
offsettable = isc_mem_get(mctx, nalloc * sizeof(unsigned int));
@@ -288,7 +284,7 @@ dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx,
memcpy(rawbuf, x[i].rdata.data, x[i].rdata.length);
rawbuf += x[i].rdata.length;
}
-
+
#if DNS_RDATASET_FIXED
fillin_offsets(offsetbase, offsettable, nalloc);
isc_mem_put(mctx, offsettable, nalloc * sizeof(unsigned int));
@@ -368,7 +364,7 @@ rdataset_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata) {
raw += 4;
#else
raw += 2;
-#endif
+#endif
r.base = raw;
dns_rdata_fromregion(rdata, rdataset->rdclass, rdataset->type, &r);
}
@@ -511,7 +507,7 @@ rdata_in_slab(unsigned char *slab, unsigned int reservelen,
for (i = 0; i < count; i++) {
rdata_from_slab(&current, rdclass, type, &trdata);
-
+
n = dns_rdata_compare(&trdata, rdata);
if (n == 0)
return (ISC_TRUE);
@@ -799,8 +795,8 @@ dns_rdataslab_subtract(unsigned char *mslab, unsigned char *sslab,
#if DNS_RDATASET_FIXED
unsigned char *offsetbase;
unsigned int *offsettable;
-#endif
unsigned int order;
+#endif
REQUIRE(tslabp != NULL && *tslabp == NULL);
REQUIRE(mslab != NULL && sslab != NULL);
diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c
index e655686b..12a371d3 100644
--- a/lib/dns/resolver.c
+++ b/lib/dns/resolver.c
@@ -15,12 +15,13 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: resolver.c,v 1.355.12.4 2008/01/17 23:46:37 tbox Exp $ */
+/* $Id: resolver.c,v 1.355.12.15 2008/05/06 01:11:30 each Exp $ */
/*! \file */
#include <config.h>
+#include <isc/platform.h>
#include <isc/print.h>
#include <isc/string.h>
#include <isc/random.h>
@@ -53,6 +54,7 @@
#include <dns/resolver.h>
#include <dns/result.h>
#include <dns/rootns.h>
+#include <dns/stats.h>
#include <dns/tsig.h>
#include <dns/validator.h>
@@ -222,7 +224,7 @@ struct fetchctx {
/*%
* Look aside state for DS lookups.
*/
- dns_name_t nsname;
+ dns_name_t nsname;
dns_fetch_t * nsfetch;
dns_rdataset_t nsrrset;
@@ -351,11 +353,7 @@ struct dns_resolver {
isc_timer_t * spillattimer;
isc_boolean_t zero_no_soa_ttl;
isc_timer_t * disppooltimer;
-#ifdef LRU_DEBUG
-#define DUMP_INTERVAL 30 /* seconds */
- isc_timer_t * dumptimer;
- isc_time_t dump_time;
-#endif
+
/* Locked by lock. */
unsigned int references;
isc_boolean_t exiting;
@@ -371,15 +369,6 @@ struct dns_resolver {
/* Locked by poollock. */
dns_dispatch_t ** dispatchv4pool;
dns_dispatch_t ** dispatchv6pool;
-
-#ifdef LRU_DEBUG
- /* Unlocked: just for debug */
- unsigned int extqueries;
- unsigned int extqueries_ns;
- unsigned int extqueries_soa;
- unsigned int extqueries_a;
- unsigned int extqueries_aaaa;
-#endif
};
#define RES_MAGIC ISC_MAGIC('R', 'e', 's', '!')
@@ -403,7 +392,7 @@ static void empty_bucket(dns_resolver_t *res);
static isc_result_t resquery_send(resquery_t *query);
static void resquery_response(isc_task_t *task, isc_event_t *event);
static void resquery_connected(isc_task_t *task, isc_event_t *event);
-static void fctx_try(fetchctx_t *fctx);
+static void fctx_try(fetchctx_t *fctx, isc_boolean_t retrying);
static isc_boolean_t fctx_destroy(fetchctx_t *fctx);
static isc_result_t ncache_adderesult(dns_message_t *message,
dns_db_t *cache, dns_dbnode_t *node,
@@ -414,9 +403,14 @@ static isc_result_t ncache_adderesult(dns_message_t *message,
static void validated(isc_task_t *task, isc_event_t *event);
static void maybe_destroy(fetchctx_t *fctx);
-#ifdef LRU_DEBUG
-static void timer_dump(isc_task_t *task, isc_event_t *ev);
-#endif
+/*%
+ * Increment resolver-related statistics counters.
+ */
+static inline void
+inc_stats(dns_resolver_t *res, dns_statscounter_t counter) {
+ if (res->view->resstats != NULL)
+ dns_generalstats_increment(res->view->resstats, counter);
+}
static isc_result_t
valcreate(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, dns_name_t *name,
@@ -444,6 +438,7 @@ valcreate(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, dns_name_t *name,
valoptions, task, validated, valarg,
&validator);
if (result == ISC_R_SUCCESS) {
+ inc_stats(fctx->res, dns_resstatscounter_val);
if ((valoptions & DNS_VALIDATOR_DEFER) == 0) {
INSIST(fctx->validator == NULL);
fctx->validator = validator;
@@ -988,12 +983,13 @@ resquery_senddone(isc_task_t *task, isc_event_t *event) {
if (result != ISC_R_SUCCESS)
fctx_done(fctx, result);
else
- fctx_try(fctx);
+ fctx_try(fctx, ISC_TRUE);
}
}
static inline isc_result_t
-fctx_addopt(dns_message_t *message, unsigned int version, isc_uint16_t udpsize)
+fctx_addopt(dns_message_t *message, unsigned int version,
+ isc_uint16_t udpsize, isc_boolean_t request_nsid)
{
dns_rdataset_t *rdataset;
dns_rdatalist_t *rdatalist;
@@ -1029,10 +1025,23 @@ fctx_addopt(dns_message_t *message, unsigned int version, isc_uint16_t udpsize)
rdatalist->ttl |= DNS_MESSAGEEXTFLAG_DO;
/*
- * No EDNS options.
+ * Set EDNS options if applicable
*/
- rdata->data = NULL;
- rdata->length = 0;
+ if (request_nsid) {
+ /* Send empty NSID option (RFC5001) */
+ unsigned char data[4];
+ isc_buffer_t buf;
+
+ isc_buffer_init(&buf, data, sizeof(data));
+ isc_buffer_putuint16(&buf, DNS_OPT_NSID);
+ isc_buffer_putuint16(&buf, 0);
+ rdata->data = data;
+ rdata->length = sizeof(data);
+ } else {
+ rdata->data = NULL;
+ rdata->length = 0;
+ }
+
rdata->rdclass = rdatalist->rdclass;
rdata->type = rdatalist->type;
rdata->flags = 0;
@@ -1289,6 +1298,13 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
ISC_LIST_APPEND(fctx->queries, query, link);
query->fctx->nqueries++;
+ if (isc_sockaddr_pf(&addrinfo->sockaddr) == PF_INET)
+ inc_stats(res, dns_resstatscounter_queryv4);
+ else
+ inc_stats(res, dns_resstatscounter_queryv6);
+ if (res->view->resquerystats != NULL)
+ dns_rdatatypestats_increment(res->view->resquerystats,
+ fctx->type);
return (ISC_R_SUCCESS);
@@ -1548,6 +1564,7 @@ resquery_send(resquery_t *query) {
unsigned int version = 0; /* Default version. */
unsigned int flags;
isc_uint16_t udpsize = res->udpsize;
+ isc_boolean_t reqnsid = res->view->requestnsid;
flags = query->addrinfo->flags;
if ((flags & DNS_FETCHOPT_EDNSVERSIONSET) != 0) {
@@ -1558,8 +1575,15 @@ resquery_send(resquery_t *query) {
udpsize = 512;
else if (peer != NULL)
(void)dns_peer_getudpsize(peer, &udpsize);
- result = fctx_addopt(fctx->qmessage, version, udpsize);
- if (result != ISC_R_SUCCESS) {
+
+ /* request NSID for current view or peer? */
+ if (peer != NULL)
+ (void) dns_peer_getrequestnsid(peer, &reqnsid);
+ result = fctx_addopt(fctx->qmessage, version,
+ udpsize, reqnsid);
+ if (reqnsid && result == ISC_R_SUCCESS) {
+ query->options |= DNS_FETCHOPT_WANTNSID;
+ } else if (result != ISC_R_SUCCESS) {
/*
* We couldn't add the OPT, but we'll press on.
* We're not using EDNS0, so set the NOEDNS0
@@ -1665,23 +1689,6 @@ resquery_send(resquery_t *query) {
if (result != ISC_R_SUCCESS)
goto cleanup_message;
-#ifdef LRU_DEBUG
- res->extqueries++;
- switch (fctx->type) {
- case dns_rdatatype_ns:
- res->extqueries_ns++;
- break;
- case dns_rdatatype_soa:
- res->extqueries_soa++;
- break;
- case dns_rdatatype_a:
- res->extqueries_a++;
- break;
- case dns_rdatatype_aaaa:
- res->extqueries_aaaa++;
- break;
- }
-#endif
query->sends++;
QTRACE("sent");
@@ -1816,7 +1823,7 @@ resquery_connected(isc_task_t *task, isc_event_t *event) {
if (result != ISC_R_SUCCESS)
fctx_done(fctx, result);
else
- fctx_try(fctx);
+ fctx_try(fctx, ISC_TRUE);
}
}
@@ -1875,7 +1882,7 @@ fctx_finddone(isc_task_t *task, isc_event_t *event) {
dns_adb_destroyfind(&find);
if (want_try)
- fctx_try(fctx);
+ fctx_try(fctx, ISC_TRUE);
else if (want_done)
fctx_done(fctx, ISC_R_FAILURE);
else if (bucket_empty)
@@ -2270,6 +2277,13 @@ fctx_getaddresses(fetchctx_t *fctx) {
}
while (sa != NULL) {
+ if ((isc_sockaddr_pf(sa) == AF_INET &&
+ fctx->res->dispatchv4 == NULL) ||
+ (isc_sockaddr_pf(sa) == AF_INET6 &&
+ fctx->res->dispatchv6 == NULL)) {
+ sa = ISC_LIST_NEXT(sa, link);
+ continue;
+ }
ai = NULL;
result = dns_adb_findaddrinfo(fctx->adb,
sa, &ai, 0); /* XXXMLG */
@@ -2627,7 +2641,7 @@ fctx_nextaddress(fetchctx_t *fctx) {
}
static void
-fctx_try(fetchctx_t *fctx) {
+fctx_try(fetchctx_t *fctx, isc_boolean_t retrying) {
isc_result_t result;
dns_adbaddrinfo_t *addrinfo;
@@ -2675,6 +2689,8 @@ fctx_try(fetchctx_t *fctx) {
result = fctx_query(fctx, addrinfo, fctx->options);
if (result != ISC_R_SUCCESS)
fctx_done(fctx, result);
+ else if (retrying)
+ inc_stats(fctx->res, dns_resstatscounter_retry);
}
static isc_boolean_t
@@ -2792,7 +2808,7 @@ fctx_timeout(isc_task_t *task, isc_event_t *event) {
/*
* Keep trying.
*/
- fctx_try(fctx);
+ fctx_try(fctx, ISC_TRUE);
}
isc_event_free(&event);
@@ -2962,7 +2978,7 @@ fctx_start(isc_task_t *task, isc_event_t *event) {
if (result != ISC_R_SUCCESS)
fctx_done(fctx, result);
else
- fctx_try(fctx);
+ fctx_try(fctx, ISC_FALSE);
} else if (bucket_empty)
empty_bucket(res);
}
@@ -3565,6 +3581,7 @@ validated(isc_task_t *task, isc_event_t *event) {
if (vevent->result != ISC_R_SUCCESS) {
FCTXTRACE("validation failed");
+ inc_stats(fctx->res, dns_resstatscounter_valfail);
result = ISC_R_NOTFOUND;
if (vevent->rdataset != NULL)
result = dns_db_findnode(fctx->cache, vevent->name,
@@ -3589,7 +3606,7 @@ validated(isc_task_t *task, isc_event_t *event) {
} else if (sentresponse)
fctx_done(fctx, result); /* Locks bucket. */
else
- fctx_try(fctx); /* Locks bucket. */
+ fctx_try(fctx, ISC_TRUE); /* Locks bucket. */
return;
}
@@ -3599,6 +3616,8 @@ validated(isc_task_t *task, isc_event_t *event) {
dns_rdatatype_t covers;
FCTXTRACE("nonexistence validation OK");
+ inc_stats(fctx->res, dns_resstatscounter_valnegsuccess);
+
if (fctx->rmessage->rcode == dns_rcode_nxdomain)
covers = dns_rdatatype_any;
else
@@ -3626,7 +3645,8 @@ validated(isc_task_t *task, isc_event_t *event) {
if (result != ISC_R_SUCCESS)
goto noanswer_response;
goto answer_response;
- }
+ } else
+ inc_stats(fctx->res, dns_resstatscounter_valsuccess);
FCTXTRACE("validation OK");
@@ -5355,7 +5375,7 @@ resume_dslookup(isc_task_t *task, isc_event_t *event) {
/*
* Try again.
*/
- fctx_try(fctx);
+ fctx_try(fctx, ISC_TRUE);
} else {
unsigned int n;
dns_rdataset_t *nsrdataset = NULL;
@@ -5461,6 +5481,65 @@ checknames(dns_message_t *message) {
checknamessection(message, DNS_SECTION_ADDITIONAL);
}
+/*
+ * Log server NSID at log level 'level'
+ */
+static isc_result_t
+log_nsid(dns_rdataset_t *opt, resquery_t *query, int level, isc_mem_t *mctx)
+{
+ static const char hex[17] = "0123456789abcdef";
+ char addrbuf[ISC_SOCKADDR_FORMATSIZE];
+ isc_uint16_t optcode, nsid_len, buflen, i;
+ isc_result_t result;
+ isc_buffer_t nsidbuf;
+ dns_rdata_t rdata;
+ unsigned char *p, *buf, *nsid;
+
+ /* Extract rdata from OPT rdataset */
+ result = dns_rdataset_first(opt);
+ if (result != ISC_R_SUCCESS)
+ return (ISC_R_FAILURE);
+
+ dns_rdata_init(&rdata);
+ dns_rdataset_current(opt, &rdata);
+ if (rdata.length < 4)
+ return (ISC_R_FAILURE);
+
+ /* Check for NSID */
+ isc_buffer_init(&nsidbuf, rdata.data, rdata.length);
+ isc_buffer_add(&nsidbuf, rdata.length);
+ optcode = isc_buffer_getuint16(&nsidbuf);
+ nsid_len = isc_buffer_getuint16(&nsidbuf);
+ if (optcode != DNS_OPT_NSID || nsid_len == 0)
+ return (ISC_R_FAILURE);
+
+ /* Allocate buffer for storing hex version of the NSID */
+ buflen = nsid_len * 2 + 1;
+ buf = isc_mem_get(mctx, buflen);
+ if (buf == NULL)
+ return (ISC_R_NOSPACE);
+
+ /* Convert to hex */
+ p = buf;
+ nsid = rdata.data + 4;
+ for (i = 0; i < nsid_len; i++) {
+ *p++ = hex[(nsid[0] >> 4) & 0xf];
+ *p++ = hex[nsid[0] & 0xf];
+ nsid++;
+ }
+ *p = '\0';
+
+ isc_sockaddr_format(&query->addrinfo->sockaddr, addrbuf,
+ sizeof(addrbuf));
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER,
+ DNS_LOGMODULE_RESOLVER, level,
+ "received NSID '%s' from %s", buf, addrbuf);
+
+ /* Clean up */
+ isc_mem_put(mctx, buf, buflen);
+ return (ISC_R_SUCCESS);
+}
+
static void
log_packet(dns_message_t *message, int level, isc_mem_t *mctx) {
isc_buffer_t buffer;
@@ -5506,6 +5585,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
isc_boolean_t keep_trying, get_nameservers, resend;
isc_boolean_t truncated;
dns_message_t *message;
+ dns_rdataset_t *opt;
fetchctx_t *fctx;
dns_name_t *fname;
dns_fixedname_t foundname;
@@ -5524,6 +5604,11 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
QTRACE("response");
+ if (isc_sockaddr_pf(&query->addrinfo->sockaddr) == PF_INET)
+ inc_stats(fctx->res, dns_resstatscounter_responsev4);
+ else
+ inc_stats(fctx->res, dns_resstatscounter_responsev6);
+
(void)isc_timer_touch(fctx->timer);
keep_trying = ISC_FALSE;
@@ -5625,6 +5710,8 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
query->addrinfo,
DNS_FETCHOPT_NOEDNS0,
DNS_FETCHOPT_NOEDNS0);
+ inc_stats(fctx->res,
+ dns_resstatscounter_edns0fail);
} else {
broken_server = result;
keep_trying = ISC_TRUE;
@@ -5653,6 +5740,8 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
query->addrinfo,
DNS_FETCHOPT_NOEDNS0,
DNS_FETCHOPT_NOEDNS0);
+ inc_stats(fctx->res,
+ dns_resstatscounter_edns0fail);
} else {
broken_server = DNS_R_UNEXPECTEDRCODE;
keep_trying = ISC_TRUE;
@@ -5666,12 +5755,21 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
}
}
+
/*
* Log the incoming packet.
*/
log_packet(message, ISC_LOG_DEBUG(10), fctx->res->mctx);
/*
+ * Did we request NSID? If so, and if the response contains
+ * NSID data, log it at INFO level.
+ */
+ opt = dns_message_getopt(message);
+ if (opt != NULL && (query->options & DNS_FETCHOPT_WANTNSID) != 0)
+ log_nsid(opt, query, ISC_LOG_INFO, fctx->res->mctx);
+
+ /*
* If the message is signed, check the signature. If not, this
* returns success anyway.
*/
@@ -5699,6 +5797,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
truncated = ISC_TRUE;
if (truncated) {
+ inc_stats(fctx->res, dns_resstatscounter_truncated);
if ((options & DNS_FETCHOPT_TCP) != 0) {
broken_server = DNS_R_TRUNCATEDTCP;
keep_trying = ISC_TRUE;
@@ -5720,6 +5819,26 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
}
/*
+ * Update statistics about erroneous responses.
+ */
+ if (message->rcode != dns_rcode_noerror) {
+ switch (message->rcode) {
+ case dns_rcode_nxdomain:
+ inc_stats(fctx->res, dns_resstatscounter_nxdomain);
+ break;
+ case dns_rcode_servfail:
+ inc_stats(fctx->res, dns_resstatscounter_servfail);
+ break;
+ case dns_rcode_formerr:
+ inc_stats(fctx->res, dns_resstatscounter_formerr);
+ break;
+ default:
+ inc_stats(fctx->res, dns_resstatscounter_othererror);
+ break;
+ }
+ }
+
+ /*
* Is the remote server broken, or does it dislike us?
*/
if (message->rcode != dns_rcode_noerror &&
@@ -5744,6 +5863,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
dns_adb_changeflags(fctx->adb, query->addrinfo,
DNS_FETCHOPT_NOEDNS0,
DNS_FETCHOPT_NOEDNS0);
+ inc_stats(fctx->res, dns_resstatscounter_edns0fail);
} else if (message->rcode == dns_rcode_formerr) {
if (ISFORWARDER(query->addrinfo)) {
/*
@@ -5771,12 +5891,10 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
*/
result = DNS_R_YXDOMAIN;
} else if (message->rcode == dns_rcode_badvers) {
- dns_rdataset_t *opt;
unsigned int flags, mask;
unsigned int version;
resend = ISC_TRUE;
- opt = dns_message_getopt(message);
version = (opt->ttl >> 16) & 0xff;
flags = (version << DNS_FETCHOPT_EDNSVERSIONSHIFT) |
DNS_FETCHOPT_EDNSVERSIONSET;
@@ -5819,6 +5937,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
*/
if (fctx->res->lame_ttl != 0 && !ISFORWARDER(query->addrinfo) &&
is_lame(fctx)) {
+ inc_stats(fctx->res, dns_resstatscounter_lame);
log_lame(fctx, query->addrinfo);
result = dns_adb_marklame(fctx->adb, query->addrinfo,
&fctx->name, fctx->type,
@@ -6062,12 +6181,13 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
/*
* Try again.
*/
- fctx_try(fctx);
+ fctx_try(fctx, !get_nameservers);
} else if (resend) {
/*
* Resend (probably with changed options).
*/
FCTXTRACE("resend");
+ inc_stats(fctx->res, dns_resstatscounter_retry);
result = fctx_query(fctx, addrinfo, options);
if (result != ISC_R_SUCCESS)
fctx_done(fctx, result);
@@ -6137,16 +6257,6 @@ destroy(dns_resolver_t *res) {
INSIST(res->nfctx == 0);
-#ifdef LRU_DEBUG
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER,
- DNS_LOGMODULE_RESOLVER, ISC_LOG_INFO,
- "destroying resolver %p: external queries "
- "total/NS/SOA/A/AAAA=%u/%u/%u/%u/%u",
- res, res->extqueries, res->extqueries_ns,
- res->extqueries_soa, res->extqueries_a,
- res->extqueries_aaaa);
-#endif
-
RES_DESTROYLOCK(&res->poollock);
DESTROYLOCK(&res->primelock);
DESTROYLOCK(&res->nlock);
@@ -6184,10 +6294,6 @@ destroy(dns_resolver_t *res) {
}
if (res->disppooltimer != NULL)
isc_timer_detach(&res->disppooltimer);
-#ifdef LRU_DEBUG
- if (res->dumptimer != NULL)
- isc_timer_detach(&res->dumptimer);
-#endif
dns_resolver_reset_algorithms(res);
dns_resolver_resetmustbesecure(res);
#if USE_ALGLOCK
@@ -6321,15 +6427,6 @@ dns_resolver_create(dns_view_t *view,
res->dispatchv4pool = NULL;
res->dispatchv6pool = NULL;
res->disppooltimer = NULL;
-#ifdef LRU_DEBUG
- res->dumptimer = NULL;
- res->extqueries = 0;
- res->extqueries_ns = 0;
- res->extqueries_soa = 0;
- res->extqueries_a = 0;
- res->extqueries_aaaa = 0;
-#endif
-
res->nbuckets = ntasks;
res->activebuckets = ntasks;
res->buckets = isc_mem_get(view->mctx,
@@ -6349,13 +6446,23 @@ dns_resolver_create(dns_view_t *view,
goto cleanup_buckets;
}
res->buckets[i].mctx = NULL;
+ snprintf(name, sizeof(name), "res%u", i);
+#ifdef ISC_PLATFORM_USETHREADS
+ /*
+ * Use a separate memory context for each bucket to reduce
+ * contention among multiple threads. Do this only when
+ * enabling threads because it will be require more memory.
+ */
result = isc_mem_create(0, 0, &res->buckets[i].mctx);
if (result != ISC_R_SUCCESS) {
isc_task_detach(&res->buckets[i].task);
DESTROYLOCK(&res->buckets[i].lock);
goto cleanup_buckets;
}
- snprintf(name, sizeof(name), "res%u", i);
+ isc_mem_setname(res->buckets[i].mctx, name, NULL);
+#else
+ isc_mem_attach(view->mctx, &res->buckets[i].mctx);
+#endif
isc_task_setname(res->buckets[i].task, name, res);
ISC_LIST_INIT(res->buckets[i].fctxs);
res->buckets[i].exiting = ISC_FALSE;
@@ -6402,22 +6509,6 @@ dns_resolver_create(dns_view_t *view,
result = isc_timer_create(timermgr, isc_timertype_inactive, NULL, NULL,
task, spillattimer_countdown, res,
&res->spillattimer);
-
-#ifdef LRU_DEBUG
- {
- isc_interval_t interval;
-
- interval.seconds = DUMP_INTERVAL;
- interval.nanoseconds = 0;
- RUNTIME_CHECK(isc_time_nowplusinterval(&res->dump_time,
- &interval) ==
- ISC_R_SUCCESS);
-
- result = isc_timer_create(timermgr, isc_timertype_once,
- &res->dump_time, NULL, task,
- timer_dump, res, &res->dumptimer);
- }
-#endif
isc_task_detach(&task);
if (result != ISC_R_SUCCESS)
goto cleanup_poollock;
@@ -7605,38 +7696,3 @@ dns_resolver_createdispatchpool(dns_resolver_t *res, unsigned int ndisps,
return (result);
}
-
-#ifdef LRU_DEBUG
-static void
-timer_dump(isc_task_t *task, isc_event_t *ev) {
- dns_resolver_t *res;
- isc_interval_t interval;
- isc_time_t nexttime;
-
- UNUSED(task);
-
- res = ev->ev_arg;
- INSIST(VALID_RESOLVER(res));
-
- if (res->extqueries > 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER,
- DNS_LOGMODULE_RESOLVER, ISC_LOG_INFO,
- "resolver dump %p: external queries "
- "total/NS/SOA/A/AAAA=%u/%u/%u/%u/%u",
- res, res->extqueries, res->extqueries_ns,
- res->extqueries_soa, res->extqueries_a,
- res->extqueries_aaaa);
- }
-
- interval.seconds = DUMP_INTERVAL;
- interval.nanoseconds = 0;
-
- RUNTIME_CHECK(isc_time_add(&res->dump_time, &interval, &nexttime) ==
- ISC_R_SUCCESS); /* XXX: this is not always true */
- res->dump_time = nexttime;
- (void)isc_timer_reset(res->dumptimer, isc_timertype_once,
- &res->dump_time, NULL, ISC_FALSE);
-
- isc_event_free(&ev);
-}
-#endif
diff --git a/lib/dns/rootns.c b/lib/dns/rootns.c
index b3c302bd..0121325f 100644
--- a/lib/dns/rootns.c
+++ b/lib/dns/rootns.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rootns.c,v 1.32 2007/10/30 23:44:01 marka Exp $ */
+/* $Id: rootns.c,v 1.32.24.2 2008/02/05 23:46:39 tbox Exp $ */
/*! \file */
@@ -45,8 +45,6 @@ static char root_ns[] =
";\n"
"; Internet Root Nameservers\n"
";\n"
-"; Thu Sep 23 17:57:37 PDT 1999\n"
-";\n"
"$TTL 518400\n"
". 518400 IN NS A.ROOT-SERVERS.NET.\n"
". 518400 IN NS B.ROOT-SERVERS.NET.\n"
@@ -62,25 +60,31 @@ static char root_ns[] =
". 518400 IN NS L.ROOT-SERVERS.NET.\n"
". 518400 IN NS M.ROOT-SERVERS.NET.\n"
"A.ROOT-SERVERS.NET. 3600000 IN A 198.41.0.4\n"
+"A.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:503:BA3E::2:30\n"
"B.ROOT-SERVERS.NET. 3600000 IN A 192.228.79.201\n"
"C.ROOT-SERVERS.NET. 3600000 IN A 192.33.4.12\n"
"D.ROOT-SERVERS.NET. 3600000 IN A 128.8.10.90\n"
"E.ROOT-SERVERS.NET. 3600000 IN A 192.203.230.10\n"
"F.ROOT-SERVERS.NET. 3600000 IN A 192.5.5.241\n"
+"F.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:500:2F::F\n"
"G.ROOT-SERVERS.NET. 3600000 IN A 192.112.36.4\n"
"H.ROOT-SERVERS.NET. 3600000 IN A 128.63.2.53\n"
+"H.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:500:1::803F:235\n"
"I.ROOT-SERVERS.NET. 3600000 IN A 192.36.148.17\n"
"J.ROOT-SERVERS.NET. 3600000 IN A 192.58.128.30\n"
+"J.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:503:C27::2:30\n"
"K.ROOT-SERVERS.NET. 3600000 IN A 193.0.14.129\n"
+"K.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:7FD::1\n"
"L.ROOT-SERVERS.NET. 3600000 IN A 199.7.83.42\n"
-"M.ROOT-SERVERS.NET. 3600000 IN A 202.12.27.33\n";
+"M.ROOT-SERVERS.NET. 3600000 IN A 202.12.27.33\n"
+"M.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:DC3::35\n";
static isc_result_t
in_rootns(dns_rdataset_t *rootns, dns_name_t *name) {
isc_result_t result;
dns_rdata_t rdata = DNS_RDATA_INIT;
dns_rdata_ns_t ns;
-
+
if (!dns_rdataset_isassociated(rootns))
return (ISC_R_NOTFOUND);
@@ -99,7 +103,7 @@ in_rootns(dns_rdataset_t *rootns, dns_name_t *name) {
return (result);
}
-static isc_result_t
+static isc_result_t
check_node(dns_rdataset_t *rootns, dns_name_t *name,
dns_rdatasetiter_t *rdsiter) {
isc_result_t result;
@@ -227,7 +231,7 @@ dns_rootns_create(isc_mem_t *mctx, dns_rdataclass_t rdclass,
* Default to using the Internet root servers.
*/
result = dns_master_loadbuffer(&source, &db->origin,
- &db->origin, db->rdclass,
+ &db->origin, db->rdclass,
DNS_MASTER_HINT,
&callbacks, db->mctx);
} else
@@ -262,11 +266,11 @@ report(dns_view_t *view, dns_name_t *name, isc_boolean_t missing,
isc_buffer_t buffer;
isc_result_t result;
- if (strcmp(view->name, "_bind") != 0 &&
- strcmp(view->name, "_default") != 0) {
- viewname = view->name;
- sep = ": view ";
- }
+ if (strcmp(view->name, "_bind") != 0 &&
+ strcmp(view->name, "_default") != 0) {
+ viewname = view->name;
+ sep = ": view ";
+ }
dns_name_format(name, namebuf, sizeof(namebuf));
dns_rdatatype_format(rdata->type, typebuf, sizeof(typebuf));
@@ -346,7 +350,7 @@ check_address_records(dns_view_t *view, dns_db_t *hints, dns_db_t *db,
report(view, name, ISC_FALSE, &rdata);
result = dns_rdataset_next(&hintrrset);
}
- }
+ }
if (hresult == ISC_R_NOTFOUND &&
(rresult == ISC_R_SUCCESS || rresult == DNS_R_GLUE)) {
result = dns_rdataset_first(&rootrrset);
@@ -387,7 +391,7 @@ check_address_records(dns_view_t *view, dns_db_t *hints, dns_db_t *db,
dns_rdata_reset(&rdata);
result = dns_rdataset_next(&hintrrset);
}
- }
+ }
if (hresult == ISC_R_NOTFOUND &&
(rresult == ISC_R_SUCCESS || rresult == DNS_R_GLUE)) {
result = dns_rdataset_first(&rootrrset);
@@ -421,11 +425,11 @@ dns_root_checkhints(dns_view_t *view, dns_db_t *hints, dns_db_t *db) {
isc_stdtime_get(&now);
- if (strcmp(view->name, "_bind") != 0 &&
- strcmp(view->name, "_default") != 0) {
- viewname = view->name;
- sep = ": view ";
- }
+ if (strcmp(view->name, "_bind") != 0 &&
+ strcmp(view->name, "_default") != 0) {
+ viewname = view->name;
+ sep = ": view ";
+ }
dns_rdataset_init(&hintns);
dns_rdataset_init(&rootns);
@@ -453,7 +457,7 @@ dns_root_checkhints(dns_view_t *view, dns_db_t *hints, dns_db_t *db) {
dns_result_totext(result));
goto cleanup;
}
-
+
/*
* Look for missing root NS names.
*/
@@ -472,7 +476,7 @@ dns_root_checkhints(dns_view_t *view, dns_db_t *hints, dns_db_t *db) {
"checkhints%s%s: unable to find root "
"NS '%s' in hints", sep, viewname,
namebuf);
- } else
+ } else
check_address_records(view, hints, db, &ns.name, now);
dns_rdata_reset(&rdata);
result = dns_rdataset_next(&rootns);
diff --git a/lib/dns/sdb.c b/lib/dns/sdb.c
index 8c035ccd..2c3002bb 100644
--- a/lib/dns/sdb.c
+++ b/lib/dns/sdb.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: sdb.c,v 1.59.94.3 2008/01/17 23:46:37 tbox Exp $ */
+/* $Id: sdb.c,v 1.59.94.5 2008/04/03 10:51:01 marka Exp $ */
/*! \file */
@@ -1247,6 +1247,7 @@ static dns_dbmethods_t sdb_methods = {
overmem,
settask,
NULL,
+ NULL,
NULL
};
diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c
index 627ea2e1..5ab04834 100644
--- a/lib/dns/sdlz.c
+++ b/lib/dns/sdlz.c
@@ -1,5 +1,5 @@
/*
- * Portions Copyright (C) 2005-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Portions Copyright (C) 2005-2008 Internet Systems Consortium, Inc. ("ISC")
* Portions Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -50,7 +50,7 @@
* USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: sdlz.c,v 1.14 2007/08/27 03:32:27 marka Exp $ */
+/* $Id: sdlz.c,v 1.14.94.3 2008/04/03 10:51:01 marka Exp $ */
/*! \file */
@@ -1051,6 +1051,7 @@ static dns_dbmethods_t sdlzdb_methods = {
overmem,
settask,
NULL,
+ NULL,
NULL
};
@@ -1328,7 +1329,7 @@ dns_sdlzallowzonexfr(void *driverarg, void *dbdata, isc_mem_t *mctx,
return (result);
isc_buffer_putuint8(&b2, 0);
- /* make sure strings are always lowercase */
+ /* make sure strings are always lowercase */
dns_sdlz_tolower(namestr);
dns_sdlz_tolower(clientstr);
@@ -1441,7 +1442,7 @@ dns_sdlzfindzone(void *driverarg, void *dbdata, isc_mem_t *mctx,
return (result);
isc_buffer_putuint8(&b, 0);
- /* make sure strings are always lowercase */
+ /* make sure strings are always lowercase */
dns_sdlz_tolower(namestr);
/* Call SDLZ driver's find zone method */
@@ -1572,7 +1573,7 @@ dns_sdlz_putrr(dns_sdlzlookup_t *lookup, const char *type, dns_ttl_t ttl,
return (ISC_R_SUCCESS);
failure:
- if (rdatabuf != NULL)
+ if (rdatabuf != NULL)
isc_buffer_free(&rdatabuf);
if (lex != NULL)
isc_lex_destroy(&lex);
diff --git a/lib/dns/spnego.c b/lib/dns/spnego.c
index 279d945f..cc61fd6e 100644
--- a/lib/dns/spnego.c
+++ b/lib/dns/spnego.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2006-2008 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: spnego.c,v 1.5 2007/06/19 23:47:16 tbox Exp $ */
+/* $Id: spnego.c,v 1.5.128.3 2008/04/03 06:08:27 tbox Exp $ */
/*! \file
* \brief
@@ -59,21 +59,21 @@
* Copyright (c) 2004 Masarykova universita
* (Masaryk University, Brno, Czech Republic)
* All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. 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.
- *
+ *
* 3. Neither the name of the University 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
@@ -89,35 +89,35 @@
* ----------------------------------------------------------------
*
* Copyright (c) 1997 - 2003 Kungliga Tekniska Högskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- * All rights reserved.
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
*
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
*
- * 2. 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.
+ * 2. 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.
*
- * 3. Neither the name of the Institute nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ * 3. Neither the name of the Institute 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 INSTITUTE 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 INSTITUTE 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.
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE 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 INSTITUTE 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.
*/
/*
@@ -169,88 +169,6 @@
*/
#include "spnego.h"
-/*
- * The isc_mem function keep track of allocation sizes, but we can't
- * get at that information, and we need to know sizes to implement a
- * realloc() clone. So we use a little more memory to keep track of
- * sizes allocated here.
- *
- * These functions follow Harbison & Steele, 4th edition, particularly
- * with regard to realloc()'s behavior.
- */
-
-static void *
-spnego_malloc(size_t size, const char *file, int line)
-{
- char *p;
-
- if (size == 0)
- return (NULL);
- p = isc_mem_allocate(dst__memory_pool, size + sizeof(size_t));
- if (p == NULL)
- return NULL;
- *(size_t *)p = size;
- p += sizeof(size_t);
-#ifdef SPNEGO_ALLOC_DEBUG
- printf("spnego_malloc(%lu) %lx %s %u\n",
- (unsigned long) size, (unsigned long) p, file, line);
-#else
- (void)file;
- (void)line;
-#endif
- return (p);
-}
-
-static void
-spnego_free(void *ptr, const char *file, int line)
-{
- char *p = ptr;
-
- if (p == NULL)
- return;
-#ifdef SPNEGO_ALLOC_DEBUG
- printf("spnego_free(%lx) %s %u\n",
- (unsigned long) p, file, line);
-#else
- (void)file;
- (void)line;
-#endif
- p -= sizeof(size_t);
- isc_mem_free(dst__memory_pool, p);
-}
-
-static void *
-spnego_realloc(void *old_ptr, size_t new_size, const char *file, int line)
-{
- size_t *old_size;
- void *new_ptr;
-
- if (old_ptr == NULL)
- return (spnego_malloc(new_size, file, line));
-
- if (new_size == 0) {
- spnego_free(old_ptr, file, line);
- return (NULL);
- }
-
- old_size = old_ptr;
- old_size--;
- if (*old_size >= new_size)
- return (old_ptr);
-
- new_ptr = spnego_malloc(new_size, file, line);
- if (new_ptr == NULL)
- return (NULL);
-
- memcpy(new_ptr, old_ptr, *old_size);
- spnego_free(old_ptr, file, line);
- return (new_ptr);
-}
-
-#define malloc(x) spnego_malloc(x, __FILE__, __LINE__)
-#define free(x) spnego_free(x, __FILE__, __LINE__)
-#define realloc(x,y) spnego_realloc(x, y, __FILE__, __LINE__)
-
/* asn1_err.h */
/* Generated from ../../../lib/asn1/asn1_err.et */
@@ -318,31 +236,31 @@ enum {
#define ASN1_INDEFINITE 0xdce0deed
-static int
+static int
der_get_length(const unsigned char *p, size_t len,
size_t * val, size_t * size);
-static int
+static int
der_get_octet_string(const unsigned char *p, size_t len,
octet_string * data, size_t * size);
-static int
+static int
der_get_oid(const unsigned char *p, size_t len,
oid * data, size_t * size);
-static int
+static int
der_get_tag(const unsigned char *p, size_t len,
Der_class * class, Der_type * type,
int *tag, size_t * size);
-static int
+static int
der_match_tag(const unsigned char *p, size_t len,
Der_class class, Der_type type,
int tag, size_t * size);
-static int
+static int
der_match_tag_and_length(const unsigned char *p, size_t len,
Der_class class, Der_type type, int tag,
size_t * length_ret, size_t * size);
-static int
+static int
decode_oid(const unsigned char *p, size_t len,
oid * k, size_t * size);
@@ -359,27 +277,27 @@ der_put_int(unsigned char *p, size_t len, int val, size_t *);
static int
der_put_length(unsigned char *p, size_t len, size_t val, size_t *);
-static int
+static int
der_put_octet_string(unsigned char *p, size_t len,
const octet_string * data, size_t *);
-static int
+static int
der_put_oid(unsigned char *p, size_t len,
const oid * data, size_t * size);
-static int
+static int
der_put_tag(unsigned char *p, size_t len, Der_class class, Der_type type,
int tag, size_t *);
-static int
+static int
der_put_length_and_tag(unsigned char *, size_t, size_t,
Der_class, Der_type, int, size_t *);
-static int
+static int
encode_enumerated(unsigned char *p, size_t len,
const unsigned *data, size_t *);
-static int
+static int
encode_octet_string(unsigned char *p, size_t len,
const octet_string * k, size_t *);
-static int
+static int
encode_oid(unsigned char *p, size_t len,
const oid * k, size_t *);
@@ -756,7 +674,7 @@ gss_accept_sec_context_spnego(OM_uint32 *minor_status,
ot = &obuf;
}
ret = send_accept(&minor_status2, output_token, ot, pref);
- if (ot != NULL)
+ if (ot != NULL && ot->length != 0)
gss_release_buffer(&minor_status2, ot);
return (ret);
@@ -1485,8 +1403,11 @@ gssapi_spnego_encapsulate(OM_uint32 * minor_status,
return (GSS_S_FAILURE);
}
p = gssapi_mech_make_header(output_token->value, len, mech);
- if (p == NULL)
+ if (p == NULL) {
+ if (output_token->length != 0)
+ gss_release_buffer(minor_status, output_token);
return (GSS_S_FAILURE);
+ }
memcpy(p, buf, buf_size);
return (GSS_S_COMPLETE);
}
@@ -1550,7 +1471,7 @@ gssapi_krb5_get_mech(const u_char *ptr,
return (mech_len);
}
-static OM_uint32
+static OM_uint32
spnego_initial(OM_uint32 *minor_status,
const gss_cred_id_t initiator_cred_handle,
gss_ctx_id_t *context_handle,
@@ -1659,16 +1580,16 @@ spnego_initial(OM_uint32 *minor_status,
ret = gssapi_spnego_encapsulate(minor_status,
buf + buf_size - len, len,
output_token, GSS_SPNEGO_MECH);
-
- ret = major_status;
+ if (ret == GSS_S_COMPLETE)
+ ret = major_status;
end:
if (token_init.mechToken != NULL) {
- free(token_init.mechToken);
+ free(token_init.mechToken);
token_init.mechToken = NULL;
}
free_NegTokenInit(&token_init);
- if (krb5_output_token.length > 0)
+ if (krb5_output_token.length != 0)
gss_release_buffer(&minor_status2, &krb5_output_token);
if (buf)
free(buf);
@@ -1711,7 +1632,7 @@ spnego_reply(OM_uint32 *minor_status,
* SPNEGO doesn't include gss wrapping on SubsequentContextToken
* like the Kerberos 5 mech does. But lets check for it anyway.
*/
-
+
mech_len = gssapi_krb5_get_mech(input_token->value,
input_token->length,
&p);
@@ -1766,7 +1687,7 @@ spnego_reply(OM_uint32 *minor_status,
free_NegTokenResp(&resp);
return (GSS_S_BAD_MECH);
}
-
+
ret = der_put_oid(oidbuf + sizeof(oidbuf) - 1,
sizeof(oidbuf),
resp.supportedMech,
@@ -1819,7 +1740,7 @@ spnego_reply(OM_uint32 *minor_status,
-OM_uint32
+OM_uint32
gss_init_sec_context_spnego(OM_uint32 *minor_status,
const gss_cred_id_t initiator_cred_handle,
gss_ctx_id_t *context_handle,
diff --git a/lib/dns/stats.c b/lib/dns/stats.c
index 4144b21a..38eda3bd 100644
--- a/lib/dns/stats.c
+++ b/lib/dns/stats.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: stats.c,v 1.12.128.2 2008/01/24 23:46:25 tbox Exp $ */
+/* $Id: stats.c,v 1.12.128.4 2008/04/03 06:20:34 tbox Exp $ */
/*! \file */
@@ -24,24 +24,48 @@
#include <string.h>
#include <isc/atomic.h>
+#include <isc/buffer.h>
+#include <isc/magic.h>
#include <isc/mem.h>
#include <isc/platform.h>
+#include <isc/print.h>
#include <isc/rwlock.h>
#include <isc/util.h>
+#include <dns/opcode.h>
+#include <dns/rdatatype.h>
#include <dns/stats.h>
-LIBDNS_EXTERNAL_DATA const char *dns_statscounter_names[DNS_STATS_NCOUNTERS] =
- {
- "success",
- "referral",
- "nxrrset",
- "nxdomain",
- "recursion",
- "failure",
- "duplicate",
- "dropped"
- };
+#define DNS_STATS_MAGIC ISC_MAGIC('D', 's', 't', 't')
+#define DNS_STATS_VALID(x) ISC_MAGIC_VALID(x, DNS_STATS_MAGIC)
+
+/*%
+ * Statistics types.
+ */
+typedef enum {
+ dns_statstype_general = 0,
+ dns_statstype_rdtype = 1,
+ dns_statstype_rdataset = 2,
+ dns_statstype_opcode = 3
+} dns_statstype_t;
+
+/*%
+ * It doesn't make sense to have 2^16 counters for all possible types since
+ * most of them won't be used. We have counters for the first 256 types and
+ * those explicitly supported in the rdata implementation.
+ * XXXJT: this introduces tight coupling with the rdata implementation.
+ * Ideally, we should have rdata handle this type of details.
+ */
+enum {
+ /* For 0-255, we use the rdtype value as counter indices */
+ rdtypecounter_dlv = 256, /* for dns_rdatatype_dlv */
+ rdtypecounter_others = 257, /* anything else */
+ rdtypecounter_max = 258,
+ /* The following are used for rdataset */
+ rdtypenxcounter_max = rdtypecounter_max * 2,
+ rdtypecounter_nxdomain = rdtypenxcounter_max,
+ rdatasettypecounter_max = rdtypecounter_nxdomain + 1
+};
#ifndef DNS_STATS_USEMULTIFIELDS
#if defined(ISC_RWLOCK_USEATOMIC) && defined(ISC_PLATFORM_HAVEXADD) && !defined(ISC_PLATFORM_HAVEXADDQ)
@@ -61,15 +85,42 @@ typedef isc_uint64_t dns_stat_t;
#endif
struct dns_stats {
- /* XXXJT: do we need a magic? */
+ /*% Unlocked */
+ unsigned int magic;
+ dns_statstype_t type;
+ isc_mem_t *mctx;
+ int ncounters;
+
+ isc_mutex_t lock;
+ unsigned int references; /* locked by lock */
+
+ /*%
+ * Locked by counterlock or unlocked if efficient rwlock is not
+ * available.
+ */
#ifdef ISC_RWLOCK_USEATOMIC
- isc_rwlock_t lock;
+ isc_rwlock_t counterlock;
#endif
- dns_stat_t counters[DNS_STATS_NCOUNTERS];
+ dns_stat_t *counters;
+
+ /*%
+ * We don't want to lock the counters while we are dumping, so we first
+ * copy the current counter values into a local array. This buffer
+ * will be used as the copy destination. It's allocated on creation
+ * of the stats structure so that the dump operation won't fail due
+ * to memory allocation failure.
+ * XXX: this approach is weird for non-threaded build because the
+ * additional memory and the copy overhead could be avoided. We prefer
+ * simplicity here, however, under the assumption that this function
+ * should be only rarely called.
+ */
+ isc_uint64_t *copiedcounters;
};
-isc_result_t
-dns_stats_create(isc_mem_t *mctx, dns_stats_t **statsp) {
+static isc_result_t
+create_stats(isc_mem_t *mctx, dns_statstype_t type, int ncounters,
+ dns_stats_t **statsp)
+{
dns_stats_t *stats;
isc_result_t result = ISC_R_SUCCESS;
@@ -79,50 +130,107 @@ dns_stats_create(isc_mem_t *mctx, dns_stats_t **statsp) {
if (stats == NULL)
return (ISC_R_NOMEMORY);
-#ifdef ISC_RWLOCK_USEATOMIC
- result = isc_rwlock_init(&stats->lock, 0, 0);
- if (result != ISC_R_SUCCESS) {
- isc_mem_put(mctx, stats, sizeof(*stats));
- return (result);
+ result = isc_mutex_init(&stats->lock);
+ if (result != ISC_R_SUCCESS)
+ goto clean_stats;
+
+ stats->counters = isc_mem_get(mctx, sizeof(dns_stat_t) * ncounters);
+ if (stats->counters == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto clean_mutex;
}
+ stats->copiedcounters = isc_mem_get(mctx,
+ sizeof(isc_uint64_t) * ncounters);
+ if (stats->copiedcounters == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto clean_counters;
+ }
+
+#ifdef ISC_RWLOCK_USEATOMIC
+ result = isc_rwlock_init(&stats->counterlock, 0, 0);
+ if (result != ISC_R_SUCCESS)
+ goto clean_copiedcounters;
#endif
- memset(stats->counters, 0, sizeof(dns_stat_t) * DNS_STATS_NCOUNTERS);
+ stats->type = type;
+ stats->references = 1;
+ memset(stats->counters, 0, sizeof(dns_stat_t) * ncounters);
+ stats->mctx = NULL;
+ isc_mem_attach(mctx, &stats->mctx);
+ stats->ncounters = ncounters;
+ stats->magic = DNS_STATS_MAGIC;
*statsp = stats;
return (result);
+
+clean_counters:
+ isc_mem_put(mctx, stats->counters, sizeof(dns_stat_t) * ncounters);
+
+#ifdef ISC_RWLOCK_USEATOMIC
+clean_copiedcounters:
+ isc_mem_put(mctx, stats->copiedcounters,
+ sizeof(dns_stat_t) * ncounters);
+#endif
+
+clean_mutex:
+ DESTROYLOCK(&stats->lock);
+
+clean_stats:
+ isc_mem_put(mctx, stats, sizeof(*stats));
+
+ return (result);
+}
+
+void
+dns_stats_attach(dns_stats_t *stats, dns_stats_t **statsp) {
+ REQUIRE(DNS_STATS_VALID(stats));
+ REQUIRE(statsp != NULL && *statsp == NULL);
+
+ LOCK(&stats->lock);
+ stats->references++;
+ UNLOCK(&stats->lock);
+
+ *statsp = stats;
}
void
-dns_stats_destroy(isc_mem_t *mctx, dns_stats_t **statsp) {
+dns_stats_detach(dns_stats_t **statsp) {
dns_stats_t *stats;
- REQUIRE(statsp != NULL && *statsp != NULL);
+ REQUIRE(statsp != NULL && DNS_STATS_VALID(*statsp));
stats = *statsp;
+ *statsp = NULL;
+ LOCK(&stats->lock);
+ stats->references--;
+ UNLOCK(&stats->lock);
+
+ if (stats->references == 0) {
+ isc_mem_put(stats->mctx, stats->copiedcounters,
+ sizeof(dns_stat_t) * stats->ncounters);
+ isc_mem_put(stats->mctx, stats->counters,
+ sizeof(dns_stat_t) * stats->ncounters);
+ DESTROYLOCK(&stats->lock);
#ifdef ISC_RWLOCK_USEATOMIC
- isc_rwlock_destroy(&stats->lock);
+ isc_rwlock_destroy(&stats->counterlock);
#endif
- isc_mem_put(mctx, stats, sizeof(*stats));
-
- *statsp = NULL;
+ isc_mem_putanddetach(&stats->mctx, stats, sizeof(*stats));
+ }
}
-void
-dns_stats_incrementcounter(dns_stats_t *stats, dns_statscounter_t counter) {
+static inline void
+incrementcounter(dns_stats_t *stats, int counter) {
isc_int32_t prev;
- REQUIRE(counter < DNS_STATS_NCOUNTERS);
-
#ifdef ISC_RWLOCK_USEATOMIC
/*
* We use a "read" lock to prevent other threads from reading the
* counter while we "writing" a counter field. The write access itself
* is protected by the atomic operation.
*/
- isc_rwlock_lock(&stats->lock, isc_rwlocktype_read);
+ isc_rwlock_lock(&stats->counterlock, isc_rwlocktype_read);
#endif
#if DNS_STATS_USEMULTIFIELDS
@@ -146,12 +254,38 @@ dns_stats_incrementcounter(dns_stats_t *stats, dns_statscounter_t counter) {
#endif
#ifdef ISC_RWLOCK_USEATOMIC
- isc_rwlock_unlock(&stats->lock, isc_rwlocktype_read);
+ isc_rwlock_unlock(&stats->counterlock, isc_rwlocktype_read);
#endif
}
-void
-dns_stats_copy(dns_stats_t *src, isc_uint64_t *dst) {
+static inline void
+decrementcounter(dns_stats_t *stats, int counter) {
+ isc_int32_t prev;
+
+#ifdef ISC_RWLOCK_USEATOMIC
+ isc_rwlock_lock(&stats->counterlock, isc_rwlocktype_read);
+#endif
+
+#if DNS_STATS_USEMULTIFIELDS
+ prev = isc_atomic_xadd((isc_int32_t *)&stats->counters[counter].lo, -1);
+ if (prev == 0)
+ isc_atomic_xadd((isc_int32_t *)&stats->counters[counter].hi,
+ -1);
+#elif defined(ISC_PLATFORM_HAVEXADDQ)
+ UNUSED(prev);
+ isc_atomic_xaddq((isc_int64_t *)&stats->counters[counter], -1);
+#else
+ UNUSED(prev);
+ stats->counters[counter]--;
+#endif
+
+#ifdef ISC_RWLOCK_USEATOMIC
+ isc_rwlock_unlock(&stats->counterlock, isc_rwlocktype_read);
+#endif
+}
+
+static void
+copy_counters(dns_stats_t *stats) {
int i;
#ifdef ISC_RWLOCK_USEATOMIC
@@ -159,27 +293,257 @@ dns_stats_copy(dns_stats_t *src, isc_uint64_t *dst) {
* We use a "write" lock before "reading" the statistics counters as
* an exclusive lock.
*/
- isc_rwlock_lock(&src->lock, isc_rwlocktype_write);
+ isc_rwlock_lock(&stats->counterlock, isc_rwlocktype_write);
#endif
#if DNS_STATS_USEMULTIFIELDS
- for (i = 0; i < DNS_STATS_NCOUNTERS; i++) {
- dst[i] = ((isc_uint64_t)src->counters[i].hi) << 32 |
- src->counters[i].lo;
+ for (i = 0; i < stats->ncounters; i++) {
+ stats->copiedcounters[i] =
+ (isc_uint64_t)(stats->counters[i].hi) << 32 |
+ stats->counters[i].lo;
}
#else
UNUSED(i);
- memcpy(dst, src->counters, DNS_STATS_NCOUNTERS * sizeof(dst[0]));
+ memcpy(stats->copiedcounters, stats->counters,
+ stats->ncounters * sizeof(dns_stat_t));
#endif
#ifdef ISC_RWLOCK_USEATOMIC
- isc_rwlock_unlock(&src->lock, isc_rwlocktype_write);
+ isc_rwlock_unlock(&stats->counterlock, isc_rwlocktype_write);
#endif
}
+/*%
+ * Create methods
+ */
+isc_result_t
+dns_generalstats_create(isc_mem_t *mctx, dns_stats_t **statsp, int ncounters) {
+ REQUIRE(statsp != NULL && *statsp == NULL);
+
+ return (create_stats(mctx, dns_statstype_general, ncounters, statsp));
+}
+
+isc_result_t
+dns_rdatatypestats_create(isc_mem_t *mctx, dns_stats_t **statsp) {
+ REQUIRE(statsp != NULL && *statsp == NULL);
+
+ return (create_stats(mctx, dns_statstype_rdtype, rdtypecounter_max,
+ statsp));
+}
+
+isc_result_t
+dns_rdatasetstats_create(isc_mem_t *mctx, dns_stats_t **statsp) {
+ REQUIRE(statsp != NULL && *statsp == NULL);
+
+ return (create_stats(mctx, dns_statstype_rdataset,
+ (rdtypecounter_max * 2) + 1, statsp));
+}
+
+isc_result_t
+dns_opcodestats_create(isc_mem_t *mctx, dns_stats_t **statsp) {
+ REQUIRE(statsp != NULL && *statsp == NULL);
+
+ return (create_stats(mctx, dns_statstype_opcode, 16, statsp));
+}
+
+/*%
+ * Increment/Decrement methods
+ */
+void
+dns_generalstats_increment(dns_stats_t *stats, dns_statscounter_t counter) {
+ REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_general);
+ REQUIRE(counter < stats->ncounters);
+
+ incrementcounter(stats, (int)counter);
+}
+
+void
+dns_rdatatypestats_increment(dns_stats_t *stats, dns_rdatatype_t type) {
+ int counter;
+
+ REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_rdtype);
+
+ if (type == dns_rdatatype_dlv)
+ counter = rdtypecounter_dlv;
+ else if (type > dns_rdatatype_any)
+ counter = rdtypecounter_others;
+ else
+ counter = (int)type;
+
+ incrementcounter(stats, counter);
+}
+
+static inline void
+update_rdatasetstats(dns_stats_t *stats, dns_rdatastatstype_t rrsettype,
+ isc_boolean_t increment)
+{
+ int counter;
+ dns_rdatatype_t rdtype;
+
+ if ((DNS_RDATASTATSTYPE_ATTR(rrsettype) &
+ DNS_RDATASTATSTYPE_ATTR_NXDOMAIN) != 0) {
+ counter = rdtypecounter_nxdomain;
+ } else {
+ rdtype = DNS_RDATASTATSTYPE_BASE(rrsettype);
+ if (rdtype == dns_rdatatype_dlv)
+ counter = (int)rdtypecounter_dlv;
+ else if (rdtype > dns_rdatatype_any)
+ counter = (int)rdtypecounter_others;
+ else
+ counter = (int)rdtype;
+
+ if ((DNS_RDATASTATSTYPE_ATTR(rrsettype) &
+ DNS_RDATASTATSTYPE_ATTR_NXRRSET) != 0)
+ counter += rdtypecounter_max;
+ }
+
+ if (increment)
+ incrementcounter(stats, counter);
+ else
+ decrementcounter(stats, counter);
+}
+
+void
+dns_rdatasetstats_increment(dns_stats_t *stats, dns_rdatastatstype_t rrsettype)
+{
+ REQUIRE(DNS_STATS_VALID(stats) &&
+ stats->type == dns_statstype_rdataset);
+
+ update_rdatasetstats(stats, rrsettype, ISC_TRUE);
+}
+
+void
+dns_rdatasetstats_decrement(dns_stats_t *stats, dns_rdatastatstype_t rrsettype)
+{
+ REQUIRE(DNS_STATS_VALID(stats) &&
+ stats->type == dns_statstype_rdataset);
+
+ update_rdatasetstats(stats, rrsettype, ISC_FALSE);
+}
+void
+dns_opcodestats_increment(dns_stats_t *stats, dns_opcode_t code) {
+ REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_opcode);
+
+ incrementcounter(stats, (int)code);
+}
+
+/*%
+ * Dump methods
+ */
+void
+dns_generalstats_dump(dns_stats_t *stats, dns_generalstats_dumper_t dump_fn,
+ void *arg, unsigned int options)
+{
+ int i;
+
+ REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_general);
+
+ copy_counters(stats);
+
+ for (i = 0; i < stats->ncounters; i++) {
+ if ((options & DNS_STATSDUMP_VERBOSE) == 0 &&
+ stats->copiedcounters[i] == 0)
+ continue;
+ dump_fn(i, stats->copiedcounters[i], arg);
+ }
+}
+
+static void
+dump_rdentry(dns_stats_t *stats, int counter, int rdcounter,
+ dns_rdatastatstype_t attributes,
+ dns_rdatatypestats_dumper_t dump_fn, void * arg,
+ unsigned int options)
+{
+ dns_rdatatype_t rdtype = dns_rdatatype_none; /* sentinel */
+ dns_rdatastatstype_t type;
+
+ if ((options & DNS_STATSDUMP_VERBOSE) == 0 &&
+ stats->copiedcounters[counter] == 0)
+ return;
+ if (rdcounter == rdtypecounter_others)
+ attributes |= DNS_RDATASTATSTYPE_ATTR_OTHERTYPE;
+ else {
+ if (rdcounter == rdtypecounter_dlv)
+ rdtype = dns_rdatatype_dlv;
+ else
+ rdtype = (dns_rdatatype_t)rdcounter;
+ }
+ type = DNS_RDATASTATSTYPE_VALUE((dns_rdatastatstype_t)rdtype,
+ attributes);
+ dump_fn(type, stats->copiedcounters[counter], arg);
+}
+
+void
+dns_rdatatypestats_dump(dns_stats_t *stats, dns_rdatatypestats_dumper_t dump_fn,
+ void *arg, unsigned int options)
+{
+ int i;
+
+ REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_rdtype);
+
+ copy_counters(stats);
+
+ for (i = 0; i < stats->ncounters; i++)
+ dump_rdentry(stats, i, i, 0, dump_fn, arg, options);
+}
+
+void
+dns_rdatasetstats_dump(dns_stats_t *stats, dns_rdatatypestats_dumper_t dump_fn,
+ void *arg, unsigned int options)
+{
+ int i;
+
+ REQUIRE(DNS_STATS_VALID(stats) &&
+ stats->type == dns_statstype_rdataset);
+
+ copy_counters(stats);
+
+ for (i = 0; i < rdtypecounter_max; i++)
+ dump_rdentry(stats, i, i, 0, dump_fn, arg, options);
+ for (i = rdtypecounter_max; i < rdtypenxcounter_max; i++) {
+ dump_rdentry(stats, i, i - rdtypecounter_max,
+ DNS_RDATASTATSTYPE_ATTR_NXRRSET,
+ dump_fn, arg, options);
+ }
+ dump_rdentry(stats, rdtypecounter_nxdomain, 0,
+ DNS_RDATASTATSTYPE_ATTR_NXDOMAIN, dump_fn, arg, options);
+
+ INSIST(i < stats->ncounters);
+}
+
+void
+dns_opcodestats_dump(dns_stats_t *stats, dns_opcodestats_dumper_t dump_fn,
+ void *arg, unsigned int options)
+{
+ int i;
+
+ REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_opcode);
+
+ copy_counters(stats);
+
+ for (i = 0; i < stats->ncounters; i++) {
+ if ((options & DNS_STATSDUMP_VERBOSE) == 0 &&
+ stats->copiedcounters[i] == 0)
+ continue;
+ dump_fn((dns_opcode_t)i, stats->copiedcounters[i], arg);
+ }
+}
+
/***
- *** Obsolete functions follow
+ *** Obsolete variables and functions follow:
***/
+LIBDNS_EXTERNAL_DATA const char *dns_statscounter_names[DNS_STATS_NCOUNTERS] =
+ {
+ "success",
+ "referral",
+ "nxrrset",
+ "nxdomain",
+ "recursion",
+ "failure",
+ "duplicate",
+ "dropped"
+ };
+
isc_result_t
dns_stats_alloccounters(isc_mem_t *mctx, isc_uint64_t **ctrp) {
int i;
diff --git a/lib/dns/tkey.c b/lib/dns/tkey.c
index 8ca3aeed..f94b3ae0 100644
--- a/lib/dns/tkey.c
+++ b/lib/dns/tkey.c
@@ -16,7 +16,7 @@
*/
/*
- * $Id: tkey.c,v 1.87.2.2 2008/01/17 23:46:37 tbox Exp $
+ * $Id: tkey.c,v 1.87.2.3 2008/04/03 00:47:46 marka Exp $
*/
/*! \file */
#include <config.h>
@@ -69,7 +69,7 @@ tkey_log(const char *fmt, ...) {
static void
_dns_tkey_dumpmessage(dns_message_t *msg) {
isc_buffer_t outbuf;
- unsigned char output[2048];
+ unsigned char output[4096];
isc_result_t result;
isc_buffer_init(&outbuf, output, sizeof(output));
@@ -846,7 +846,7 @@ buildquery(dns_message_t *msg, dns_name_t *name,
dns_rdataset_makequestion(question, dns_rdataclass_any,
dns_rdatatype_tkey);
- RETERR(isc_buffer_allocate(msg->mctx, &dynbuf, 2048));
+ RETERR(isc_buffer_allocate(msg->mctx, &dynbuf, 4096));
RETERR(dns_message_gettemprdata(msg, &rdata));
RETERR(dns_rdata_fromstruct(rdata, dns_rdataclass_any,
@@ -984,7 +984,7 @@ dns_tkey_buildgssquery(dns_message_t *msg, dns_name_t *name, dns_name_t *gname,
isc_result_t result;
isc_stdtime_t now;
isc_buffer_t token;
- unsigned char array[2048];
+ unsigned char array[4096];
UNUSED(intoken);
diff --git a/lib/dns/validator.c b/lib/dns/validator.c
index 93df96c9..7fea6a37 100644
--- a/lib/dns/validator.c
+++ b/lib/dns/validator.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: validator.c,v 1.155.52.3 2008/01/17 23:46:37 tbox Exp $ */
+/* $Id: validator.c,v 1.155.52.5 2008/02/19 17:09:08 each Exp $ */
#include <config.h>
@@ -132,7 +132,8 @@ static isc_result_t
nsecvalidate(dns_validator_t *val, isc_boolean_t resume);
static isc_result_t
-proveunsecure(dns_validator_t *val, isc_boolean_t resume);
+proveunsecure(dns_validator_t *val, isc_boolean_t have_ds,
+ isc_boolean_t resume);
static void
validator_logv(dns_validator_t *val, isc_logcategory_t *category,
@@ -363,7 +364,7 @@ dsfetched(isc_task_t *task, isc_event_t *event) {
"falling back to insecurity proof (%s)",
dns_result_totext(eresult));
val->attributes |= VALATTR_INSECURITY;
- result = proveunsecure(val, ISC_FALSE);
+ result = proveunsecure(val, ISC_FALSE, ISC_FALSE);
if (result != DNS_R_WAIT)
validator_done(val, result);
} else {
@@ -442,7 +443,7 @@ dsfetched2(isc_task_t *task, isc_event_t *event) {
validator_done(val, result);
}
} else {
- result = proveunsecure(val, ISC_TRUE);
+ result = proveunsecure(val, ISC_FALSE, ISC_TRUE);
if (result != DNS_R_WAIT)
validator_done(val, result);
}
@@ -455,7 +456,8 @@ dsfetched2(isc_task_t *task, isc_event_t *event) {
* In either case we are still in a secure zone resume
* validation.
*/
- result = proveunsecure(val, ISC_TRUE);
+ result = proveunsecure(val, ISC_TF(eresult == ISC_R_SUCCESS),
+ ISC_TRUE);
if (result != DNS_R_WAIT)
validator_done(val, result);
} else {
@@ -556,7 +558,7 @@ dsvalidated(isc_task_t *task, isc_event_t *event) {
validator_log(val, ISC_LOG_DEBUG(3),
"dsset with trust %d", val->frdataset.trust);
if ((val->attributes & VALATTR_INSECURITY) != 0)
- result = proveunsecure(val, ISC_TRUE);
+ result = proveunsecure(val, ISC_TRUE, ISC_TRUE);
else
result = validatezonekey(val);
if (result != DNS_R_WAIT)
@@ -2222,7 +2224,7 @@ nsecvalidate(dns_validator_t *val, isc_boolean_t resume) {
validator_log(val, ISC_LOG_DEBUG(3),
"nonexistence proof(s) not found");
val->attributes |= VALATTR_INSECURITY;
- return (proveunsecure(val, ISC_FALSE));
+ return (proveunsecure(val, ISC_FALSE, ISC_FALSE));
}
static isc_boolean_t
@@ -2496,7 +2498,8 @@ finddlvsep(dns_validator_t *val, isc_boolean_t resume) {
* \li DNS_R_NOTINSECURE
*/
static isc_result_t
-proveunsecure(dns_validator_t *val, isc_boolean_t resume) {
+proveunsecure(dns_validator_t *val, isc_boolean_t have_ds, isc_boolean_t resume)
+{
isc_result_t result;
dns_fixedname_t fixedsecroot;
dns_name_t *secroot;
@@ -2544,12 +2547,19 @@ proveunsecure(dns_validator_t *val, isc_boolean_t resume) {
val->labels = dns_name_countlabels(secroot) + 1;
} else {
validator_log(val, ISC_LOG_DEBUG(3), "resuming proveunsecure");
- if (val->frdataset.trust >= dns_trust_secure &&
+ /*
+ * If we have a DS rdataset and it is secure then check if
+ * the DS rdataset has a supported algorithm combination.
+ * If not this is a insecure delegation as far as this
+ * resolver is concerned. Fall back to DLV if available.
+ */
+ if (have_ds && val->frdataset.trust >= dns_trust_secure &&
!check_ds(val, dns_fixedname_name(&val->fname),
&val->frdataset)) {
dns_name_format(dns_fixedname_name(&val->fname),
namebuf, sizeof(namebuf));
- if (val->mustbesecure) {
+ if ((val->view->dlv == NULL || DLVTRIED(val)) &&
+ val->mustbesecure) {
validator_log(val, ISC_LOG_WARNING,
"must be secure failure at '%s'",
namebuf);
@@ -2794,7 +2804,7 @@ validator_start(isc_task_t *task, isc_event_t *event) {
validator_log(val, ISC_LOG_DEBUG(3),
"falling back to insecurity proof");
val->attributes |= VALATTR_INSECURITY;
- result = proveunsecure(val, ISC_FALSE);
+ result = proveunsecure(val, ISC_FALSE, ISC_FALSE);
if (result == DNS_R_NOTINSECURE)
result = saved_result;
}
@@ -2808,7 +2818,7 @@ validator_start(isc_task_t *task, isc_event_t *event) {
"attempting insecurity proof");
val->attributes |= VALATTR_INSECURITY;
- result = proveunsecure(val, ISC_FALSE);
+ result = proveunsecure(val, ISC_FALSE, ISC_FALSE);
} else if (val->event->rdataset == NULL &&
val->event->sigrdataset == NULL)
{
diff --git a/lib/dns/view.c b/lib/dns/view.c
index 762b1922..17966c21 100644
--- a/lib/dns/view.c
+++ b/lib/dns/view.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: view.c,v 1.143 2007/06/18 23:47:42 tbox Exp $ */
+/* $Id: view.c,v 1.143.128.3 2008/04/03 06:10:20 marka Exp $ */
/*! \file */
@@ -25,7 +25,6 @@
#include <isc/string.h> /* Required for HP/UX (and others?) */
#include <isc/task.h>
#include <isc/util.h>
-#include <isc/xml.h>
#include <dns/acache.h>
#include <dns/acl.h>
@@ -44,6 +43,7 @@
#include <dns/request.h>
#include <dns/resolver.h>
#include <dns/result.h>
+#include <dns/stats.h>
#include <dns/tsig.h>
#include <dns/zone.h>
#include <dns/zt.h>
@@ -152,6 +152,8 @@ dns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass,
view->delonly = NULL;
view->rootdelonly = ISC_FALSE;
view->rootexclude = NULL;
+ view->resstats = NULL;
+ view->resquerystats = NULL;
/*
* Initialize configuration data with default values.
@@ -322,7 +324,7 @@ destroy(dns_view_t *view) {
name = ISC_LIST_HEAD(view->rootexclude[i]);
while (name != NULL) {
ISC_LIST_UNLINK(view->rootexclude[i],
- name, link);
+ name, link);
dns_name_free(name, view->mctx);
isc_mem_put(view->mctx, name, sizeof(*name));
name = ISC_LIST_HEAD(view->rootexclude[i]);
@@ -332,6 +334,10 @@ destroy(dns_view_t *view) {
sizeof(dns_namelist_t) * DNS_VIEW_DELONLYHASH);
view->rootexclude = NULL;
}
+ if (view->resstats != NULL)
+ dns_stats_detach(&view->resstats);
+ if (view->resquerystats != NULL)
+ dns_stats_detach(&view->resquerystats);
dns_keytable_detach(&view->trustedkeys);
dns_keytable_detach(&view->secroots);
dns_fwdtable_destroy(&view->fwdtable);
@@ -578,6 +584,7 @@ dns_view_createresolver(dns_view_t *view,
}
result = dns_adb_create(mctx, view, timermgr, taskmgr, &view->adb);
+ isc_mem_setname(mctx, "ADB", NULL);
isc_mem_detach(&mctx);
if (result != ISC_R_SUCCESS) {
dns_resolver_shutdown(view->resolver);
@@ -943,7 +950,7 @@ dns_view_simplefind(dns_view_t *view, dns_name_t *name, dns_rdatatype_t type,
isc_result_t
dns_view_findzonecut(dns_view_t *view, dns_name_t *name, dns_name_t *fname,
isc_stdtime_t now, unsigned int options,
- isc_boolean_t use_hints,
+ isc_boolean_t use_hints,
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
{
return(dns_view_findzonecut2(view, name, fname, now, options,
@@ -1157,8 +1164,8 @@ dns_viewlist_findzone(dns_viewlist_t *list, dns_name_t *name,
REQUIRE(list != NULL);
for (view = ISC_LIST_HEAD(*list);
- view != NULL;
- view = ISC_LIST_NEXT(view, link)) {
+ view != NULL;
+ view = ISC_LIST_NEXT(view, link)) {
if (allclasses == ISC_FALSE && view->rdclass != rdclass)
continue;
result = dns_zt_find(view->zonetable, name, 0, NULL,
@@ -1389,7 +1396,7 @@ dns_view_isdelegationonly(dns_view_t *view, dns_name_t *name) {
return (ISC_TRUE);
}
-void
+void
dns_view_setrootdelonly(dns_view_t *view, isc_boolean_t value) {
REQUIRE(DNS_VIEW_VALID(view));
view->rootdelonly = value;
@@ -1407,46 +1414,38 @@ dns_view_freezezones(dns_view_t *view, isc_boolean_t value) {
return (dns_zt_freezezones(view->zonetable, value));
}
-#ifdef HAVE_LIBXML2
-
-struct xmlarg {
- int flags;
- xmlTextWriterPtr xml;
-};
-
-static isc_result_t
-zone_xmlrender(dns_zone_t *zone, void *arg) {
- struct xmlarg *xmlarg = arg;
+void
+dns_view_setresstats(dns_view_t *view, dns_stats_t *stats) {
+ REQUIRE(DNS_VIEW_VALID(view));
+ REQUIRE(!view->frozen);
+ REQUIRE(view->resstats == NULL);
- return (dns_zone_xmlrender(zone, xmlarg->xml, xmlarg->flags));
+ dns_stats_attach(stats, &view->resstats);
}
-isc_result_t
-dns_view_xmlrender(dns_view_t *view, xmlTextWriterPtr xml, int flags)
-{
- struct xmlarg xmlargs;
-
- xmlargs.flags = flags;
- xmlargs.xml = xml;
-
- /* XXXMLG render config data here */
+void
+dns_view_getresstats(dns_view_t *view, dns_stats_t **statsp) {
+ REQUIRE(DNS_VIEW_VALID(view));
+ REQUIRE(statsp != NULL && *statsp == NULL);
- if ((flags & ISC_XML_RENDERSTATS) != 0) {
- xmlTextWriterStartElement(xml, ISC_XMLCHAR "view");
+ if (view->resstats != NULL)
+ dns_stats_attach(view->resstats, statsp);
+}
- xmlTextWriterStartElement(xml, ISC_XMLCHAR "name");
- xmlTextWriterWriteString(xml, ISC_XMLCHAR view->name);
- xmlTextWriterEndElement(xml);
+void
+dns_view_setresquerystats(dns_view_t *view, dns_stats_t *stats) {
+ REQUIRE(DNS_VIEW_VALID(view));
+ REQUIRE(!view->frozen);
+ REQUIRE(view->resquerystats == NULL);
- xmlTextWriterStartElement(xml, ISC_XMLCHAR "zones");
- dns_zt_apply(view->zonetable, ISC_FALSE, zone_xmlrender,
- &xmlargs);
- xmlTextWriterEndElement(xml);
+ dns_stats_attach(stats, &view->resquerystats);
+}
- xmlTextWriterEndElement(xml);
- }
+void
+dns_view_getresquerystats(dns_view_t *view, dns_stats_t **statsp) {
+ REQUIRE(DNS_VIEW_VALID(view));
+ REQUIRE(statsp != NULL && *statsp == NULL);
- return (ISC_R_SUCCESS);
+ if (view->resquerystats != NULL)
+ dns_stats_attach(view->resquerystats, statsp);
}
-
-#endif /* HAVE_LIBXML2 */
diff --git a/lib/dns/win32/libdns.def b/lib/dns/win32/libdns.def
index cc27de6b..3c833854 100644
--- a/lib/dns/win32/libdns.def
+++ b/lib/dns/win32/libdns.def
@@ -100,6 +100,7 @@ dns_db_findnode
dns_db_findrdataset
dns_db_findzonecut
dns_db_getoriginnode
+dns_db_getrrsetstats
dns_db_getsoaserial
dns_db_iscache
dns_db_ispersistent
@@ -172,6 +173,7 @@ dns_dispatchmgr_destroy
dns_dispatchmgr_getblackhole
dns_dispatchmgr_setblackhole
dns_dispatchmgr_setblackportlist
+dns_dispatchmgr_setstats
dns_dlzallowzonexfr
dns_dlzcreate
dns_dlzdestroy
@@ -194,6 +196,9 @@ dns_fwdtable_add
dns_fwdtable_create
dns_fwdtable_destroy
dns_fwdtable_find
+dns_generalstats_create
+dns_generalstats_dump
+dns_generalstats_increment
dns_iptable_addprefix
dns_iptable_attach
dns_iptable_create
@@ -348,6 +353,10 @@ dns_ncache_towire
dns_nsec_build
dns_nsec_buildrdata
dns_nsec_typepresent
+dns_opcode_totext
+dns_opcodestats_create
+dns_opcodestats_dump
+dns_opcodestats_increment
dns_order_add
dns_order_attach
dns_order_create
@@ -360,6 +369,7 @@ dns_peer_getkey
dns_peer_getmaxudp
dns_peer_getprovideixfr
dns_peer_getrequestixfr
+dns_peer_getrequestnsid
dns_peer_getsupportedns
dns_peer_gettransferformat
dns_peer_gettransfers
@@ -373,6 +383,7 @@ dns_peer_setnotifysource
dns_peer_setprovideixfr
dns_peer_setquerysource
dns_peer_setrequestixfr
+dns_peer_setrequestnsid
dns_peer_setsupportedns
dns_peer_settransferformat
dns_peer_settransfers
@@ -434,6 +445,7 @@ dns_rdataclass_format
dns_rdataclass_fromtext
dns_rdataclass_ismeta
dns_rdataclass_totext
+dns_rdatalist_fromrdataset
dns_rdatalist_init
dns_rdatalist_tordataset
dns_rdataset_additionaldata
@@ -454,6 +466,10 @@ dns_rdataset_setadditional
dns_rdataset_totext
dns_rdataset_towire
dns_rdataset_towiresorted
+dns_rdatasetstats_create
+dns_rdatasetstats_decrement
+dns_rdatasetstats_dump
+dns_rdatasetstats_increment
dns_rdatasetiter_current
dns_rdatasetiter_destroy
dns_rdatasetiter_first
@@ -475,6 +491,9 @@ dns_rdatatype_iszonecutauth
dns_rdatatype_notquestion
dns_rdatatype_questiononly
dns_rdatatype_totext
+dns_rdatatypestats_create
+dns_rdatatypestats_dump
+dns_rdatatypestats_increment
dns_request_cancel
dns_request_create
dns_request_createraw
@@ -548,11 +567,9 @@ dns_ssutable_checkrules
dns_ssutable_create
dns_ssutable_detach
dns_stats_alloccounters
-dns_stats_copy
-dns_stats_create
-dns_stats_destroy
+dns_stats_attach
+dns_stats_detach
dns_stats_freecounters
-dns_stats_incrementcounter
dns_tcpmsg_cancelread
dns_tcpmsg_init
dns_tcpmsg_invalidate
@@ -610,6 +627,8 @@ dns_view_flushname
dns_view_freeze
dns_view_freezezones
dns_view_getpeertsig
+dns_view_getresstats
+dns_view_getresquerystats
dns_view_gettsig
dns_view_load
dns_view_loadnew
@@ -617,6 +636,8 @@ dns_view_setcache
dns_view_setdstport
dns_view_sethints
dns_view_setkeyring
+dns_view_setresstats
+dns_view_setresquerystats
dns_view_setrootdelonly
dns_view_simplefind
dns_view_weakattach
@@ -667,9 +688,10 @@ dns_zone_getnotifysrc6
dns_zone_getoptions
dns_zone_getorigin
dns_zone_getqueryacl
+dns_zone_getrequeststats
+dns_zone_getserial
dns_zone_getsigvalidityinterval
dns_zone_getssutable
-dns_zone_getstats
dns_zone_getstatscounters
dns_zone_gettask
dns_zone_gettype
@@ -731,8 +753,10 @@ dns_zone_setoption
dns_zone_setorigin
dns_zone_setqueryacl
dns_zone_setqueryonacl
+dns_zone_setrequeststats
dns_zone_setsigvalidityinterval
dns_zone_setssutable
+dns_zone_setstats
dns_zone_setstatistics
dns_zone_settask
dns_zone_settype
diff --git a/lib/dns/zone.c b/lib/dns/zone.c
index 87add9f6..8e489fc8 100644
--- a/lib/dns/zone.c
+++ b/lib/dns/zone.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zone.c,v 1.470.12.2 2008/01/24 23:46:25 tbox Exp $ */
+/* $Id: zone.c,v 1.470.12.5 2008/04/07 05:30:58 marka Exp $ */
/*! \file */
@@ -33,7 +33,6 @@
#include <isc/taskpool.h>
#include <isc/timer.h>
#include <isc/util.h>
-#include <isc/xml.h>
#include <dns/acache.h>
#include <dns/acl.h>
@@ -249,9 +248,15 @@ struct dns_zone {
ISC_LINK(dns_zone_t) statelink;
dns_zonelist_t *statelist;
/*%
- * Optional per-zone statistics counters (NULL if not present).
+ * Statistics counters about zone management.
*/
- dns_stats_t *counters;
+ dns_stats_t *stats;
+ /*%
+ * Optional per-zone statistics counters. Counted outside of this
+ * module.
+ */
+ isc_boolean_t requeststats_on;
+ dns_stats_t *requeststats;
isc_uint32_t notifydelay;
dns_isselffunc_t isself;
void *isselfarg;
@@ -547,6 +552,15 @@ static const char *dbargv_default[] = { "rbt" };
} \
} while (0)
+/*%
+ * Increment resolver-related statistics counters. Zone must be locked.
+ */
+static inline void
+inc_stats(dns_zone_t *zone, dns_statscounter_t counter) {
+ if (zone->stats != NULL)
+ dns_generalstats_increment(zone->stats, counter);
+}
+
/***
*** Public functions.
***/
@@ -663,7 +677,9 @@ dns_zone_create(dns_zone_t **zonep, isc_mem_t *mctx) {
zone->checkns = NULL;
ISC_LINK_INIT(zone, statelink);
zone->statelist = NULL;
- zone->counters = NULL;
+ zone->stats = NULL;
+ zone->requeststats_on = ISC_FALSE;
+ zone->requeststats = NULL;
zone->notifydelay = 5;
zone->isself = NULL;
zone->isselfarg = NULL;
@@ -735,8 +751,10 @@ zone_free(dns_zone_t *zone) {
if (zone->journal != NULL)
isc_mem_free(zone->mctx, zone->journal);
zone->journal = NULL;
- if (zone->counters != NULL)
- dns_stats_destroy(zone->mctx, &zone->counters);
+ if (zone->stats != NULL)
+ dns_stats_detach(&zone->stats);
+ if (zone->requeststats != NULL)
+ dns_stats_detach(&zone->requeststats);
if (zone->db != NULL)
zone_detachdb(zone);
if (zone->acache != NULL)
@@ -814,7 +832,7 @@ dns_zone_setclass(dns_zone_t *zone, dns_rdataclass_t rdclass) {
}
dns_rdataclass_t
-dns_zone_getclass(dns_zone_t *zone){
+dns_zone_getclass(dns_zone_t *zone) {
REQUIRE(DNS_ZONE_VALID(zone));
return (zone->rdclass);
@@ -829,6 +847,19 @@ dns_zone_setnotifytype(dns_zone_t *zone, dns_notifytype_t notifytype) {
UNLOCK_ZONE(zone);
}
+isc_uint32_t
+dns_zone_getserial(dns_zone_t *zone) {
+ isc_uint32_t serial;
+
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ LOCK_ZONE(zone);
+ serial = zone->serial;
+ UNLOCK_ZONE(zone);
+
+ return (serial);
+}
+
/*
* Single shot.
*/
@@ -3850,6 +3881,16 @@ notify_send_toaddr(isc_task_t *task, isc_event_t *event) {
timeout * 3, timeout,
notify->zone->task, notify_done,
notify, &notify->request);
+ if (result == ISC_R_SUCCESS) {
+ if (isc_sockaddr_pf(&notify->dst) == AF_INET) {
+ inc_stats(notify->zone,
+ dns_zonestatscounter_notifyoutv4);
+ } else {
+ inc_stats(notify->zone,
+ dns_zonestatscounter_notifyoutv6);
+ }
+ }
+
cleanup_key:
if (key != NULL)
dns_tsigkey_detach(&key);
@@ -4919,7 +4960,7 @@ create_query(dns_zone_t *zone, dns_rdatatype_t rdtype,
}
static isc_result_t
-add_opt(dns_message_t *message, isc_uint16_t udpsize) {
+add_opt(dns_message_t *message, isc_uint16_t udpsize, isc_boolean_t reqnsid) {
dns_rdataset_t *rdataset = NULL;
dns_rdatalist_t *rdatalist = NULL;
dns_rdata_t *rdata = NULL;
@@ -4949,11 +4990,21 @@ add_opt(dns_message_t *message, isc_uint16_t udpsize) {
*/
rdatalist->ttl = 0;
- /*
- * No EDNS options.
- */
- rdata->data = NULL;
- rdata->length = 0;
+ /* Set EDNS options if applicable */
+ if (reqnsid) {
+ unsigned char data[4];
+ isc_buffer_t buf;
+
+ isc_buffer_init(&buf, data, sizeof(data));
+ isc_buffer_putuint16(&buf, DNS_OPT_NSID);
+ isc_buffer_putuint16(&buf, 0);
+ rdata->data = data;
+ rdata->length = sizeof(data);
+ } else {
+ rdata->data = NULL;
+ rdata->length = 0;
+ }
+
rdata->rdclass = rdatalist->rdclass;
rdata->type = rdatalist->type;
rdata->flags = 0;
@@ -4988,7 +5039,7 @@ soa_query(isc_task_t *task, isc_event_t *event) {
isc_uint32_t options;
isc_boolean_t cancel = ISC_TRUE;
int timeout;
- isc_boolean_t have_xfrsource;
+ isc_boolean_t have_xfrsource, reqnsid;
isc_uint16_t udpsize = SEND_BUFFER_SIZE;
REQUIRE(DNS_ZONE_VALID(zone));
@@ -5040,6 +5091,7 @@ soa_query(isc_task_t *task, isc_event_t *event) {
(void)dns_view_getpeertsig(zone->view, &masterip, &key);
have_xfrsource = ISC_FALSE;
+ reqnsid = zone->view->requestnsid;
if (zone->view->peers != NULL) {
dns_peer_t *peer = NULL;
isc_boolean_t edns;
@@ -5057,6 +5109,7 @@ soa_query(isc_task_t *task, isc_event_t *event) {
udpsize =
dns_resolver_getudpsize(zone->view->resolver);
(void)dns_peer_getudpsize(peer, &udpsize);
+ (void)dns_peer_getrequestnsid(peer, &reqnsid);
}
}
@@ -5088,7 +5141,7 @@ soa_query(isc_task_t *task, isc_event_t *event) {
DNS_REQUESTOPT_TCP : 0;
if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NOEDNS)) {
- result = add_opt(message, udpsize);
+ result = add_opt(message, udpsize, reqnsid);
if (result != ISC_R_SUCCESS)
zone_debuglog(zone, me, 1,
"unable to add opt record: %s",
@@ -5110,6 +5163,11 @@ soa_query(isc_task_t *task, isc_event_t *event) {
"dns_request_createvia2() failed: %s",
dns_result_totext(result));
goto cleanup;
+ } else {
+ if (isc_sockaddr_pf(&zone->masteraddr) == PF_INET)
+ inc_stats(zone, dns_zonestatscounter_soaoutv4);
+ else
+ inc_stats(zone, dns_zonestatscounter_soaoutv6);
}
cancel = ISC_FALSE;
@@ -5152,7 +5210,7 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) {
dns_tsigkey_t *key = NULL;
dns_dbnode_t *node = NULL;
int timeout;
- isc_boolean_t have_xfrsource = ISC_FALSE;
+ isc_boolean_t have_xfrsource = ISC_FALSE, reqnsid;
isc_uint16_t udpsize = SEND_BUFFER_SIZE;
REQUIRE(DNS_ZONE_VALID(zone));
@@ -5264,6 +5322,7 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) {
if (key == NULL)
(void)dns_view_getpeertsig(zone->view, &masterip, &key);
+ reqnsid = zone->view->requestnsid;
if (zone->view->peers != NULL) {
dns_peer_t *peer = NULL;
isc_boolean_t edns;
@@ -5281,11 +5340,12 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) {
udpsize =
dns_resolver_getudpsize(zone->view->resolver);
(void)dns_peer_getudpsize(peer, &udpsize);
+ (void)dns_peer_getrequestnsid(peer, &reqnsid);
}
}
if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NOEDNS)) {
- result = add_opt(message, udpsize);
+ result = add_opt(message, udpsize, reqnsid);
if (result != ISC_R_SUCCESS)
zone_debuglog(zone, me, 1,
"unable to add opt record: %s",
@@ -5750,6 +5810,10 @@ dns_zone_notifyreceive(dns_zone_t *zone, isc_sockaddr_t *from,
* We only handle NOTIFY (SOA) at the present.
*/
LOCK_ZONE(zone);
+ if (isc_sockaddr_pf(from) == PF_INET)
+ inc_stats(zone, dns_zonestatscounter_notifyinv4);
+ else
+ inc_stats(zone, dns_zonestatscounter_notifyinv6);
if (msg->counts[DNS_SECTION_QUESTION] == 0 ||
dns_message_findname(msg, DNS_SECTION_QUESTION, &zone->origin,
dns_rdatatype_soa, dns_rdatatype_none,
@@ -5804,6 +5868,7 @@ dns_zone_notifyreceive(dns_zone_t *zone, isc_sockaddr_t *from,
UNLOCK_ZONE(zone);
dns_zone_log(zone, ISC_LOG_INFO,
"refused notify from non-master: %s", fromtext);
+ inc_stats(zone, dns_zonestatscounter_notifyrej);
return (DNS_R_REFUSED);
}
@@ -6772,6 +6837,7 @@ zone_xfrdone(dns_zone_t *zone, isc_result_t result) {
dns_result_totext(result));
}
+ inc_stats(zone, dns_zonestatscounter_xfrsuccess);
break;
case DNS_R_BADIXFR:
@@ -6806,6 +6872,7 @@ zone_xfrdone(dns_zone_t *zone, isc_result_t result) {
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_REFRESH);
again = ISC_TRUE;
}
+ inc_stats(zone, dns_zonestatscounter_xfrfail);
break;
}
zone_settimer(zone, &now);
@@ -7095,6 +7162,21 @@ got_transfer_quota(isc_task_t *task, isc_event_t *event) {
zone->tsigkey, zone->mctx,
zone->zmgr->timermgr, zone->zmgr->socketmgr,
zone->task, zone_xfrdone, &zone->xfr);
+ if (result == ISC_R_SUCCESS) {
+ LOCK_ZONE(zone);
+ if (xfrtype == dns_rdatatype_axfr) {
+ if (isc_sockaddr_pf(&masteraddr) == PF_INET)
+ inc_stats(zone, dns_zonestatscounter_axfrreqv4);
+ else
+ inc_stats(zone, dns_zonestatscounter_axfrreqv6);
+ } else if (xfrtype == dns_rdatatype_ixfr) {
+ if (isc_sockaddr_pf(&masteraddr) == PF_INET)
+ inc_stats(zone, dns_zonestatscounter_ixfrreqv4);
+ else
+ inc_stats(zone, dns_zonestatscounter_ixfrreqv6);
+ }
+ UNLOCK_ZONE(zone);
+ }
cleanup:
/*
* Any failure in this function is handled like a failed
@@ -8086,35 +8168,66 @@ dns_zone_isforced(dns_zone_t *zone) {
isc_result_t
dns_zone_setstatistics(dns_zone_t *zone, isc_boolean_t on) {
- isc_result_t result = ISC_R_SUCCESS;
-
- LOCK_ZONE(zone);
- if (on) {
- if (zone->counters != NULL)
- goto done;
- result = dns_stats_create(zone->mctx, &zone->counters);
- } else {
- if (zone->counters == NULL)
- goto done;
- dns_stats_destroy(zone->mctx, &zone->counters);
- }
- done:
- UNLOCK_ZONE(zone);
- return (result);
+ /*
+ * This function is obsoleted.
+ */
+ UNUSED(zone);
+ UNUSED(on);
+ return (ISC_R_NOTIMPLEMENTED);
}
isc_uint64_t *
dns_zone_getstatscounters(dns_zone_t *zone) {
/*
- * This function is obsoleted by dns_zone_getstats().
+ * This function is obsoleted.
*/
UNUSED(zone);
return (NULL);
}
+void
+dns_zone_setstats(dns_zone_t *zone, dns_stats_t *stats) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+ REQUIRE(zone->stats == NULL);
+
+ LOCK_ZONE(zone);
+ zone->stats = NULL;
+ dns_stats_attach(stats, &zone->stats);
+ UNLOCK_ZONE(zone);
+}
+
+void
+dns_zone_setrequeststats(dns_zone_t *zone, dns_stats_t *stats) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ LOCK_ZONE(zone);
+ if (zone->requeststats_on && stats == NULL)
+ zone->requeststats_on = ISC_FALSE;
+ else if (!zone->requeststats_on && stats != NULL) {
+ if (zone->requeststats == NULL) {
+ dns_stats_attach(stats, &zone->requeststats);
+ zone->requeststats_on = ISC_TRUE;
+ }
+ }
+ UNLOCK_ZONE(zone);
+
+ return;
+}
+
dns_stats_t *
-dns_zone_getstats(dns_zone_t *zone) {
- return (zone->counters);
+dns_zone_getrequeststats(dns_zone_t *zone) {
+ /*
+ * We don't lock zone for efficiency reason. This is not catastrophic
+ * because requeststats must always be valid when requeststats_on is
+ * true.
+ * Some counters may be incremented while requeststats_on is becoming
+ * false, or some cannot be incremented just after the statistics are
+ * installed, but it shouldn't matter much in practice.
+ */
+ if (zone->requeststats_on)
+ return (zone->requeststats);
+ else
+ return (NULL);
}
void
@@ -8325,50 +8438,3 @@ dns_zone_getnotifydelay(dns_zone_t *zone) {
return (zone->notifydelay);
}
-
-#ifdef HAVE_LIBXML2
-
-isc_result_t
-dns_zone_xmlrender(dns_zone_t *zone, xmlTextWriterPtr xml, int flags)
-{
- int i;
-
- /* XXXMLG render config data here */
-
- if ((flags & ISC_XML_RENDERSTATS) != 0) {
- xmlTextWriterStartElement(xml, ISC_XMLCHAR "zone");
-
- xmlTextWriterStartElement(xml, ISC_XMLCHAR "name");
- xmlTextWriterWriteString(xml, ISC_XMLCHAR zone->strname);
- xmlTextWriterEndElement(xml);
-
- xmlTextWriterStartElement(xml, ISC_XMLCHAR "rdataclass");
- xmlTextWriterWriteString(xml, ISC_XMLCHAR zone->strrdclass);
- xmlTextWriterEndElement(xml);
-
- xmlTextWriterStartElement(xml, ISC_XMLCHAR "serial");
- xmlTextWriterWriteFormatString(xml, "%u", zone->serial);
- xmlTextWriterEndElement(xml);
-
- if (zone->counters != NULL) {
- isc_uint64_t counters[DNS_STATS_NCOUNTERS];
-
- xmlTextWriterStartElement(xml, ISC_XMLCHAR "counters");
- dns_stats_copy(zone->counters, counters);
- for (i = 0 ; i < DNS_STATS_NCOUNTERS ; i++) {
- xmlTextWriterStartElement(xml,
- ISC_XMLCHAR dns_statscounter_names[i]);
- xmlTextWriterWriteFormatString(xml,
- "%" ISC_PRINT_QUADFORMAT "u",
- counters[i]);
- xmlTextWriterEndElement(xml);
- }
- xmlTextWriterEndElement(xml); /* counters */
- }
- xmlTextWriterEndElement(xml); /* zone */
- }
-
- return (ISC_R_SUCCESS);
-}
-
-#endif /* HAVE_LIBXML2 */
diff --git a/lib/isc/api b/lib/isc/api
index 58fb9f89..d2b48eaa 100644
--- a/lib/isc/api
+++ b/lib/isc/api
@@ -1,3 +1,3 @@
-LIBINTERFACE = 41
+LIBINTERFACE = 42
LIBREVISION = 0
-LIBAGE = 0
+LIBAGE = 1
diff --git a/lib/isc/include/isc/mem.h b/lib/isc/include/isc/mem.h
index ade0794a..37a83668 100644
--- a/lib/isc/include/isc/mem.h
+++ b/lib/isc/include/isc/mem.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1997-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: mem.h,v 1.72 2007/06/18 23:47:44 tbox Exp $ */
+/* $Id: mem.h,v 1.72.128.3 2008/03/31 05:06:47 marka Exp $ */
#ifndef ISC_MEM_H
#define ISC_MEM_H 1
@@ -157,7 +157,7 @@ LIBISC_EXTERNAL_DATA extern unsigned int isc_mem_debugging;
#define isc_mem_strdup(c, p) isc__mem_strdup((c), (p) _ISC_MEM_FILELINE)
#define isc_mempool_get(c) isc__mempool_get((c) _ISC_MEM_FILELINE)
-/*%
+/*%
* isc_mem_putanddetach() is a convienence function for use where you
* have a structure with an attached memory context.
*
@@ -216,7 +216,7 @@ LIBISC_EXTERNAL_DATA extern unsigned int isc_mem_debugging;
#endif
/*@{*/
-isc_result_t
+isc_result_t
isc_mem_create(size_t max_size, size_t target_size,
isc_mem_t **mctxp);
@@ -224,12 +224,12 @@ isc_result_t
isc_mem_create2(size_t max_size, size_t target_size,
isc_mem_t **mctxp, unsigned int flags);
-isc_result_t
+isc_result_t
isc_mem_createx(size_t max_size, size_t target_size,
isc_memalloc_t memalloc, isc_memfree_t memfree,
void *arg, isc_mem_t **mctxp);
-isc_result_t
+isc_result_t
isc_mem_createx2(size_t max_size, size_t target_size,
isc_memalloc_t memalloc, isc_memfree_t memfree,
void *arg, isc_mem_t **mctxp, unsigned int flags);
@@ -266,9 +266,9 @@ isc_mem_createx2(size_t max_size, size_t target_size,
/*@}*/
/*@{*/
-void
+void
isc_mem_attach(isc_mem_t *, isc_mem_t **);
-void
+void
isc_mem_detach(isc_mem_t **);
/*!<
* \brief Attach to / detach from a memory context.
@@ -276,7 +276,7 @@ isc_mem_detach(isc_mem_t **);
* This is intended for applications that use multiple memory contexts
* in such a way that it is not obvious when the last allocations from
* a given context has been freed and destroying the context is safe.
- *
+ *
* Most applications do not need to call these functions as they can
* simply create a single memory context at the beginning of main()
* and destroy it at the end of main(), thereby guaranteeing that it
@@ -284,13 +284,13 @@ isc_mem_detach(isc_mem_t **);
*/
/*@}*/
-void
+void
isc_mem_destroy(isc_mem_t **);
/*%<
* Destroy a memory context.
*/
-isc_result_t
+isc_result_t
isc_mem_ondestroy(isc_mem_t *ctx,
isc_task_t *task,
isc_event_t **event);
@@ -299,13 +299,13 @@ isc_mem_ondestroy(isc_mem_t *ctx,
* been successfully destroyed.
*/
-void
+void
isc_mem_stats(isc_mem_t *mctx, FILE *out);
/*%<
* Print memory usage statistics for 'mctx' on the stream 'out'.
*/
-void
+void
isc_mem_setdestroycheck(isc_mem_t *mctx,
isc_boolean_t on);
/*%<
@@ -314,9 +314,9 @@ isc_mem_setdestroycheck(isc_mem_t *mctx,
*/
/*@{*/
-void
+void
isc_mem_setquota(isc_mem_t *, size_t);
-size_t
+size_t
isc_mem_getquota(isc_mem_t *);
/*%<
* Set/get the memory quota of 'mctx'. This is a hard limit
@@ -325,7 +325,7 @@ isc_mem_getquota(isc_mem_t *);
*/
/*@}*/
-size_t
+size_t
isc_mem_inuse(isc_mem_t *mctx);
/*%<
* Get an estimate of the number of memory in use in 'mctx', in bytes.
@@ -337,13 +337,29 @@ void
isc_mem_setwater(isc_mem_t *mctx, isc_mem_water_t water, void *water_arg,
size_t hiwater, size_t lowater);
/*%<
- * Set high and low water marks for this memory context.
- *
- * When the memory
- * usage of 'mctx' exceeds 'hiwater', '(water)(water_arg, #ISC_MEM_HIWATER)'
- * will be called. When the usage drops below 'lowater', 'water' will
- * again be called, this time with #ISC_MEM_LOWATER.
- *
+ * Set high and low water marks for this memory context.
+ *
+ * When the memory usage of 'mctx' exceeds 'hiwater',
+ * '(water)(water_arg, #ISC_MEM_HIWATER)' will be called. 'water' needs to
+ * call isc_mem_waterack() with #ISC_MEM_HIWATER to acknowlege the state
+ * change. 'water' may be called multiple times.
+ *
+ * When the usage drops below 'lowater', 'water' will again be called, this
+ * time with #ISC_MEM_LOWATER. 'water' need to calls isc_mem_waterack() with
+ * #ISC_MEM_LOWATER to acknowlege the change.
+ *
+ * static void
+ * water(void *arg, int mark) {
+ * struct foo *foo = arg;
+ *
+ * LOCK(&foo->marklock);
+ * if (foo->mark != mark) {
+ * foo->mark = mark;
+ * ....
+ * isc_mem_waterack(foo->mctx, mark);
+ * }
+ * UNLOCK(&foo->marklock);
+ * }
* If 'water' is NULL then 'water_arg', 'hi_water' and 'lo_water' are
* ignored and the state is reset.
*
@@ -354,6 +370,12 @@ isc_mem_setwater(isc_mem_t *mctx, isc_mem_water_t water, void *water_arg,
*/
void
+isc_mem_waterack(isc_mem_t *ctx, int mark);
+/*%<
+ * Called to acknowledge changes in signalled by calls to 'water'.
+ */
+
+void
isc_mem_printactive(isc_mem_t *mctx, FILE *file);
/*%<
* Print to 'file' all active memory in 'mctx'.
@@ -377,6 +399,59 @@ isc_mem_checkdestroyed(FILE *file);
* Fatally fails if there are still active contexts.
*/
+void
+isc_mem_setname(isc_mem_t *ctx, const char *name, void *tag);
+/*%<
+ * Name 'ctx'.
+ *
+ * Notes:
+ *
+ *\li Only the first 15 characters of 'name' will be copied.
+ *
+ *\li 'tag' is for debugging purposes only.
+ *
+ * Requires:
+ *
+ *\li 'ctx' is a valid ctx.
+ */
+
+const char *
+isc_mem_getname(isc_mem_t *ctx);
+/*%<
+ * Get the name of 'ctx', as previously set using isc_mem_setname().
+ *
+ * Requires:
+ *\li 'ctx' is a valid ctx.
+ *
+ * Returns:
+ *\li A non-NULL pointer to a null-terminated string.
+ * If the ctx has not been named, the string is
+ * empty.
+ */
+
+void *
+isc_mem_gettag(isc_mem_t *ctx);
+/*%<
+ * Get the tag value for 'task', as previously set using isc_mem_setname().
+ *
+ * Requires:
+ *\li 'ctx' is a valid ctx.
+ *
+ * Notes:
+ *\li This function is for debugging purposes only.
+ *
+ * Requires:
+ *\li 'ctx' is a valid task.
+ */
+
+#ifdef HAVE_LIBXML2
+void
+isc_mem_renderxml(xmlTextWriterPtr writer);
+/*%<
+ * Render all contexts' statistics and status in XML for writer.
+ */
+#endif /* HAVE_LIBXML2 */
+
/*
* Memory pools
*/
@@ -521,28 +596,23 @@ isc_mempool_setfillcount(isc_mempool_t *mpctx, unsigned int limit);
/*
* Pseudo-private functions for use via macros. Do not call directly.
*/
-void *
+void *
isc__mem_get(isc_mem_t *, size_t _ISC_MEM_FLARG);
-void
+void
isc__mem_putanddetach(isc_mem_t **, void *,
size_t _ISC_MEM_FLARG);
-void
+void
isc__mem_put(isc_mem_t *, void *, size_t _ISC_MEM_FLARG);
-void *
+void *
isc__mem_allocate(isc_mem_t *, size_t _ISC_MEM_FLARG);
-void
+void
isc__mem_free(isc_mem_t *, void * _ISC_MEM_FLARG);
-char *
+char *
isc__mem_strdup(isc_mem_t *, const char *_ISC_MEM_FLARG);
-void *
+void *
isc__mempool_get(isc_mempool_t * _ISC_MEM_FLARG);
-void
-isc__mempool_put(isc_mempool_t *, void * _ISC_MEM_FLARG);
-
-#ifdef HAVE_LIBXML2
void
-isc_mem_renderxml(isc_mem_t *mgr, xmlTextWriterPtr writer);
-#endif /* HAVE_LIBXML2 */
+isc__mempool_put(isc_mempool_t *, void * _ISC_MEM_FLARG);
ISC_LANG_ENDDECLS
diff --git a/lib/isc/mem.c b/lib/isc/mem.c
index 36b9a7b0..bf82ad56 100644
--- a/lib/isc/mem.c
+++ b/lib/isc/mem.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1997-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: mem.c,v 1.137 2007/11/26 04:27:19 marka Exp $ */
+/* $Id: mem.c,v 1.137.16.4 2008/03/31 23:46:42 tbox Exp $ */
/*! \file */
@@ -34,6 +34,7 @@
#include <isc/ondestroy.h>
#include <isc/string.h>
#include <isc/mutex.h>
+#include <isc/print.h>
#include <isc/util.h>
#include <isc/xml.h>
@@ -113,6 +114,12 @@ static ISC_LIST(isc_mem_t) contexts;
static isc_once_t once = ISC_ONCE_INIT;
static isc_mutex_t lock;
+/*%
+ * Total size of lost memory due to a bug of external library.
+ * Locked by the global lock.
+ */
+static isc_uint64_t totallost;
+
struct isc_mem {
unsigned int magic;
isc_ondestroy_t ondestroy;
@@ -125,6 +132,8 @@ struct isc_mem {
isc_boolean_t checkfree;
struct stats * stats;
unsigned int references;
+ char name[16];
+ void * tag;
size_t quota;
size_t total;
size_t inuse;
@@ -135,6 +144,7 @@ struct isc_mem {
isc_mem_water_t water;
void * water_arg;
ISC_LIST(isc_mempool_t) pools;
+ unsigned int poolcnt;
/* ISC_MEMFLAG_INTERNAL */
size_t mem_target;
@@ -148,6 +158,7 @@ struct isc_mem {
#if ISC_MEM_TRACKLINES
debuglist_t * debuglist;
+ unsigned int debuglistcnt;
#endif
unsigned int memalloc_failures;
@@ -193,7 +204,7 @@ struct isc_mempool {
if ((isc_mem_debugging & (ISC_MEM_DEBUGTRACE | \
ISC_MEM_DEBUGRECORD)) != 0 && \
b != NULL) \
- add_trace_entry(a, b, c, d, e); \
+ add_trace_entry(a, b, c, d, e); \
} while (0)
#define DELETE_TRACE(a, b, c, d, e) delete_trace_entry(a, b, c, d, e)
@@ -259,6 +270,7 @@ add_trace_entry(isc_mem_t *mctx, const void *ptr, unsigned int size
dl->count = 1;
ISC_LIST_PREPEND(mctx->debuglist[size], dl, link);
+ mctx->debuglistcnt++;
}
static inline void
@@ -314,7 +326,7 @@ delete_trace_entry(isc_mem_t *mctx, const void *ptr, unsigned int size,
static inline size_t
rmsize(size_t size) {
/*
- * round down to ALIGNMENT_SIZE
+ * round down to ALIGNMENT_SIZE
*/
return (size & (~(ALIGNMENT_SIZE - 1)));
}
@@ -603,7 +615,7 @@ mem_get(isc_mem_t *ctx, size_t size) {
ret = (ctx->memalloc)(ctx->arg, size);
if (ret == NULL)
- ctx->memalloc_failures++;
+ ctx->memalloc_failures++;
#if ISC_MEM_FILL
if (ret != NULL)
@@ -692,6 +704,7 @@ static void
initialize_action(void) {
RUNTIME_CHECK(isc_mutex_init(&lock) == ISC_R_SUCCESS);
ISC_LIST_INIT(contexts);
+ totallost = 0;
}
/*
@@ -705,7 +718,7 @@ isc_mem_createx(size_t init_max_size, size_t target_size,
{
return (isc_mem_createx2(init_max_size, target_size, memalloc, memfree,
arg, ctxp, ISC_MEMFLAG_DEFAULT));
-
+
}
isc_result_t
@@ -742,6 +755,8 @@ isc_mem_createx2(size_t init_max_size, size_t target_size,
ctx->max_size = init_max_size;
ctx->flags = flags;
ctx->references = 1;
+ memset(ctx->name, 0, sizeof(ctx->name));
+ ctx->tag = NULL;
ctx->quota = 0;
ctx->total = 0;
ctx->inuse = 0;
@@ -760,8 +775,10 @@ isc_mem_createx2(size_t init_max_size, size_t target_size,
ctx->checkfree = ISC_TRUE;
#if ISC_MEM_TRACKLINES
ctx->debuglist = NULL;
+ ctx->debuglistcnt = 0;
#endif
ISC_LIST_INIT(ctx->pools);
+ ctx->poolcnt = 0;
ctx->freelists = NULL;
ctx->basic_blocks = NULL;
ctx->basic_table = NULL;
@@ -862,6 +879,7 @@ destroy(isc_mem_t *ctx) {
LOCK(&lock);
ISC_LIST_UNLINK(contexts, ctx, link);
+ totallost += ctx->inuse;
UNLOCK(&lock);
INSIST(ISC_LIST_EMPTY(ctx->pools));
@@ -882,7 +900,7 @@ destroy(isc_mem_t *ctx) {
dl != NULL;
dl = ISC_LIST_HEAD(ctx->debuglist[i])) {
ISC_LIST_UNLINK(ctx->debuglist[i],
- dl, link);
+ dl, link);
free(dl);
}
}
@@ -1086,7 +1104,6 @@ isc__mem_get(isc_mem_t *ctx, size_t size FLARG) {
ADD_TRACE(ctx, ptr, size, file, line);
if (ctx->hi_water != 0U && !ctx->hi_called &&
ctx->inuse > ctx->hi_water) {
- ctx->hi_called = ISC_TRUE;
call_water = ISC_TRUE;
}
if (ctx->inuse > ctx->maxinuse) {
@@ -1142,10 +1159,8 @@ isc__mem_put(isc_mem_t *ctx, void *ptr, size_t size FLARG)
* when the context was pushed over hi_water but then had
* isc_mem_setwater() called with 0 for hi_water and lo_water.
*/
- if (ctx->hi_called &&
+ if (ctx->hi_called &&
(ctx->inuse < ctx->lo_water || ctx->lo_water == 0U)) {
- ctx->hi_called = ISC_FALSE;
-
if (ctx->water != NULL)
call_water = ISC_TRUE;
}
@@ -1155,6 +1170,18 @@ isc__mem_put(isc_mem_t *ctx, void *ptr, size_t size FLARG)
(ctx->water)(ctx->water_arg, ISC_MEM_LOWATER);
}
+void
+isc_mem_waterack(isc_mem_t *ctx, int flag) {
+ REQUIRE(VALID_CONTEXT(ctx));
+
+ MCTXLOCK(ctx, &ctx->lock);
+ if (flag == ISC_MEM_LOWATER)
+ ctx->hi_called = ISC_FALSE;
+ else if (flag == ISC_MEM_HIWATER)
+ ctx->hi_called = ISC_TRUE;
+ MCTXUNLOCK(ctx, &ctx->lock);
+}
+
#if ISC_MEM_TRACKLINES
static void
print_active(isc_mem_t *mctx, FILE *out) {
@@ -1170,11 +1197,11 @@ print_active(isc_mem_t *mctx, FILE *out) {
"memory allocations:\n"));
found = ISC_FALSE;
format = isc_msgcat_get(isc_msgcat, ISC_MSGSET_MEM,
- ISC_MSG_PTRFILELINE,
+ ISC_MSG_PTRFILELINE,
"\tptr %p size %u file %s line %u\n");
for (i = 0; i <= mctx->max_size; i++) {
dl = ISC_LIST_HEAD(mctx->debuglist[i]);
-
+
if (dl != NULL)
found = ISC_TRUE;
@@ -1372,7 +1399,7 @@ isc__mem_free(isc_mem_t *ctx, void *ptr FLARG) {
* when the context was pushed over hi_water but then had
* isc_mem_setwater() called with 0 for hi_water and lo_water.
*/
- if (ctx->hi_called &&
+ if (ctx->hi_called &&
(ctx->inuse < ctx->lo_water || ctx->lo_water == 0U)) {
ctx->hi_called = ISC_FALSE;
@@ -1462,7 +1489,7 @@ isc_mem_inuse(isc_mem_t *ctx) {
void
isc_mem_setwater(isc_mem_t *ctx, isc_mem_water_t water, void *water_arg,
- size_t hiwater, size_t lowater)
+ size_t hiwater, size_t lowater)
{
isc_boolean_t callwater = ISC_FALSE;
isc_mem_water_t oldwater;
@@ -1493,11 +1520,36 @@ isc_mem_setwater(isc_mem_t *ctx, isc_mem_water_t water, void *water_arg,
ctx->hi_called = ISC_FALSE;
}
MCTXUNLOCK(ctx, &ctx->lock);
-
+
if (callwater && oldwater != NULL)
(oldwater)(oldwater_arg, ISC_MEM_LOWATER);
}
+void
+isc_mem_setname(isc_mem_t *ctx, const char *name, void *tag) {
+ REQUIRE(VALID_CONTEXT(ctx));
+
+ LOCK(&ctx->lock);
+ memset(ctx->name, 0, sizeof(ctx->name));
+ strncpy(ctx->name, name, sizeof(ctx->name) - 1);
+ ctx->tag = tag;
+ UNLOCK(&ctx->lock);
+}
+
+const char *
+isc_mem_getname(isc_mem_t *ctx) {
+ REQUIRE(VALID_CONTEXT(ctx));
+
+ return (ctx->name);
+}
+
+void *
+isc_mem_gettag(isc_mem_t *ctx) {
+ REQUIRE(VALID_CONTEXT(ctx));
+
+ return (ctx->tag);
+}
+
/*
* Memory pool stuff
*/
@@ -1537,6 +1589,7 @@ isc_mempool_create(isc_mem_t *mctx, size_t size, isc_mempool_t **mpctxp) {
MCTXLOCK(mctx, &mctx->lock);
ISC_LIST_INITANDAPPEND(mctx->pools, mpctx, link);
+ mctx->poolcnt++;
MCTXUNLOCK(mctx, &mctx->lock);
return (ISC_R_SUCCESS);
@@ -1611,6 +1664,7 @@ isc_mempool_destroy(isc_mempool_t **mpctxp) {
*/
MCTXLOCK(mctx, &mctx->lock);
ISC_LIST_UNLINK(mctx->pools, mpctx, link);
+ mctx->poolcnt--;
MCTXUNLOCK(mctx, &mctx->lock);
mpctx->magic = 0;
@@ -1932,7 +1986,7 @@ isc_mem_printallactive(FILE *file) {
#endif
}
-void
+void
isc_mem_checkdestroyed(FILE *file) {
RUNTIME_CHECK(isc_once_do(&once, initialize_action) == ISC_R_SUCCESS);
@@ -1957,115 +2011,149 @@ isc_mem_checkdestroyed(FILE *file) {
#ifdef HAVE_LIBXML2
-void
-isc_mem_renderxml(isc_mem_t *ctx, xmlTextWriterPtr writer)
-{
- size_t i;
- const struct stats *s;
- const isc_mempool_t *pool;
+typedef struct summarystat {
+ isc_uint64_t total;
+ isc_uint64_t inuse;
+ isc_uint64_t blocksize;
+ isc_uint64_t contextsize;
+} summarystat_t;
+static void
+renderctx(isc_mem_t *ctx, summarystat_t *summary, xmlTextWriterPtr writer) {
REQUIRE(VALID_CONTEXT(ctx));
- MCTXLOCK(ctx, &ctx->lock);
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "references");
- xmlTextWriterWriteFormatString(writer, "%d", ctx->references);
- xmlTextWriterEndElement(writer);
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "context");
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "buckets");
- for (i = 0; i <= ctx->max_size; i++) {
- s = &ctx->stats[i];
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "id");
+ xmlTextWriterWriteFormatString(writer, "%p", ctx);
+ xmlTextWriterEndElement(writer); /* id */
- if (s->totalgets == 0U && s->gets == 0U)
- continue;
+ if (ctx->name[0] != 0) {
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "name");
+ xmlTextWriterWriteFormatString(writer, "%s", ctx->name);
+ xmlTextWriterEndElement(writer); /* name */
+ }
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "bucket");
+ REQUIRE(VALID_CONTEXT(ctx));
+ MCTXLOCK(ctx, &ctx->lock);
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "size");
- xmlTextWriterWriteFormatString(writer, "%ld", (long)i);
- xmlTextWriterEndElement(writer); /* size */
+ summary->contextsize += sizeof(*ctx) +
+ (ctx->max_size + 1) * sizeof(struct stats) +
+ ctx->max_size * sizeof(element *) +
+ ctx->basic_table_count * sizeof(char *);
+#if ISC_MEM_TRACKLINES
+ if (ctx->debuglist != NULL) {
+ summary->contextsize +=
+ (ctx->max_size + 1) * sizeof(debuglist_t) +
+ ctx->debuglistcnt * sizeof(debuglink_t);
+ }
+#endif
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "references");
+ xmlTextWriterWriteFormatString(writer, "%d", ctx->references);
+ xmlTextWriterEndElement(writer); /* references */
+
+ summary->total += ctx->total;
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "total");
+ xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
+ (isc_uint64_t)ctx->total);
+ xmlTextWriterEndElement(writer); /* total */
+
+ summary->inuse += ctx->inuse;
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "inuse");
+ xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
+ (isc_uint64_t)ctx->inuse);
+ xmlTextWriterEndElement(writer); /* inuse */
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "maxinuse");
+ xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
+ (isc_uint64_t)ctx->maxinuse);
+ xmlTextWriterEndElement(writer); /* maxinuse */
+
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "blocksize");
+ if ((ctx->flags & ISC_MEMFLAG_INTERNAL) != 0) {
+ summary->blocksize += ctx->basic_table_count *
+ NUM_BASIC_BLOCKS * ctx->mem_target;
+ xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ (isc_uint64_t)
+ ctx->basic_table_count *
+ NUM_BASIC_BLOCKS *
+ ctx->mem_target);
+ } else
+ xmlTextWriterWriteFormatString(writer, "%s", "-");
+ xmlTextWriterEndElement(writer); /* blocksize */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "totalgets");
- xmlTextWriterWriteFormatString(writer, "%lu", s->totalgets);
- xmlTextWriterEndElement(writer); /* totalgets */
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "pools");
+ xmlTextWriterWriteFormatString(writer, "%u", ctx->poolcnt);
+ xmlTextWriterEndElement(writer); /* pools */
+ summary->contextsize += ctx->poolcnt * sizeof(isc_mempool_t);
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "gets");
- xmlTextWriterWriteFormatString(writer, "%lu", s->gets);
- xmlTextWriterEndElement(writer); /* gets */
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "hiwater");
+ xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
+ (isc_uint64_t)ctx->hi_water);
+ xmlTextWriterEndElement(writer); /* hiwater */
- if ((ctx->flags & ISC_MEMFLAG_INTERNAL) != 0 &&
- (s->blocks != 0U || s->freefrags != 0U)) {
- xmlTextWriterStartElement(writer,
- ISC_XMLCHAR "blocks");
- xmlTextWriterWriteFormatString(writer, "%lu",
- s->blocks);
- xmlTextWriterEndElement(writer); /* blocks */
-
- xmlTextWriterStartElement(writer,
- ISC_XMLCHAR "freefrags");
- xmlTextWriterWriteFormatString(writer, "%lu",
- s->freefrags);
- xmlTextWriterEndElement(writer); /* freefrags */
- }
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "lowater");
+ xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
+ (isc_uint64_t)ctx->lo_water);
+ xmlTextWriterEndElement(writer); /* lowater */
- xmlTextWriterEndElement(writer); /* bucket */
- }
- xmlTextWriterEndElement(writer); /* buckets */
+ MCTXUNLOCK(ctx, &ctx->lock);
- /*
- * Note that since a pool can be locked now, these stats might be
- * somewhat off if the pool is in active use at the time the stats
- * are dumped. The link fields are protected by the isc_mem_t's
- * lock, however, so walking this list and extracting integers from
- * stats fields is always safe.
- */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "pools");
- pool = ISC_LIST_HEAD(ctx->pools);
- while (pool != NULL) {
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "pool");
+ xmlTextWriterEndElement(writer); /* context */
+}
+
+void
+isc_mem_renderxml(xmlTextWriterPtr writer) {
+ isc_mem_t *ctx;
+ summarystat_t summary;
+ isc_uint64_t lost;
- xmlTextWriterWriteElement(writer, ISC_XMLCHAR "name",
- ISC_XMLCHAR pool->name);
+ memset(&summary, 0, sizeof(summary));
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "size");
- xmlTextWriterWriteFormatString(writer, "%ld", (long)pool->size);
- xmlTextWriterEndElement(writer); /* size */
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "contexts");
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "maxalloc");
- xmlTextWriterWriteFormatString(writer, "%u", pool->maxalloc);
- xmlTextWriterEndElement(writer); /* maxalloc */
+ RUNTIME_CHECK(isc_once_do(&once, initialize_action) == ISC_R_SUCCESS);
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "allocated");
- xmlTextWriterWriteFormatString(writer, "%u", pool->allocated);
- xmlTextWriterEndElement(writer); /* allocated */
+ LOCK(&lock);
+ lost = totallost;
+ for (ctx = ISC_LIST_HEAD(contexts);
+ ctx != NULL;
+ ctx = ISC_LIST_NEXT(ctx, link)) {
+ renderctx(ctx, &summary, writer);
+ }
+ UNLOCK(&lock);
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "freecount");
- xmlTextWriterWriteFormatString(writer, "%u", pool->freecount);
- xmlTextWriterEndElement(writer); /* freecount */
+ xmlTextWriterEndElement(writer); /* contexts */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "freemax");
- xmlTextWriterWriteFormatString(writer, "%u", pool->freemax);
- xmlTextWriterEndElement(writer); /* freemax */
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "summary");
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "fillcount");
- xmlTextWriterWriteFormatString(writer, "%u", pool->fillcount);
- xmlTextWriterEndElement(writer); /* fillcount */
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "TotalUse");
+ xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
+ summary.total);
+ xmlTextWriterEndElement(writer); /* TotalUse */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "gets");
- xmlTextWriterWriteFormatString(writer, "%u", pool->gets);
- xmlTextWriterEndElement(writer); /* gets */
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "InUse");
+ xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
+ summary.inuse);
+ xmlTextWriterEndElement(writer); /* InUse */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "locked");
- xmlTextWriterWriteFormatString(writer, "%s",
- ((pool->lock == NULL) ? "No" : "Yes"));
- xmlTextWriterEndElement(writer); /* locked */
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "BlockSize");
+ xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
+ summary.blocksize);
+ xmlTextWriterEndElement(writer); /* BlockSize */
- xmlTextWriterEndElement(writer); /* pool */
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "ContextSize");
+ xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
+ summary.contextsize);
+ xmlTextWriterEndElement(writer); /* ContextSize */
- pool = ISC_LIST_NEXT(pool, link);
- }
- xmlTextWriterEndElement(writer); /* pools */
+ xmlTextWriterStartElement(writer, ISC_XMLCHAR "Lost");
+ xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
+ lost);
+ xmlTextWriterEndElement(writer); /* Lost */
- MCTXUNLOCK(ctx, &ctx->lock);
+ xmlTextWriterEndElement(writer); /* summary */
}
#endif /* HAVE_LIBXML2 */
diff --git a/lib/isc/print.c b/lib/isc/print.c
index 26bf8e52..a64aaf53 100644
--- a/lib/isc/print.c
+++ b/lib/isc/print.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: print.c,v 1.33 2007/06/19 23:47:17 tbox Exp $ */
+/* $Id: print.c,v 1.33.128.2 2008/02/18 23:46:30 tbox Exp $ */
/*! \file */
@@ -246,8 +246,24 @@ isc_print_vsnprintf(char *str, size_t size, const char *format, va_list ap) {
head = "";
tmpui = tmpi;
}
- sprintf(buf, "%" ISC_PRINT_QUADFORMAT "u",
- tmpui);
+ if (tmpui <= 0xffffffffU)
+ sprintf(buf, "%lu",
+ (unsigned long)tmpui);
+ else {
+ unsigned long mid;
+ unsigned long lo;
+ unsigned long hi;
+ lo = tmpui % 1000000000;
+ tmpui /= 1000000000;
+ mid = tmpui % 1000000000;
+ hi = tmpui / 1000000000;
+ if (hi != 0)
+ sprintf(buf, "%lu", hi);
+ else
+ buf[0] = '\n';
+ sprintf(buf + strlen(buf), "%lu", mid);
+ sprintf(buf + strlen(buf), "%lu", lo);
+ }
goto printint;
case 'o':
if (q)
@@ -256,10 +272,29 @@ isc_print_vsnprintf(char *str, size_t size, const char *format, va_list ap) {
tmpui = va_arg(ap, long int);
else
tmpui = va_arg(ap, int);
- sprintf(buf,
- alt ? "%#" ISC_PRINT_QUADFORMAT "o"
- : "%" ISC_PRINT_QUADFORMAT "o",
- tmpui);
+ if (tmpui <= 0xffffffffU)
+ sprintf(buf, alt ? "%#lo" : "%lo",
+ (unsigned long)tmpui);
+ else {
+ unsigned long mid;
+ unsigned long lo;
+ unsigned long hi;
+ lo = tmpui % 010000000000;
+ tmpui /= 010000000000;
+ mid = tmpui % 010000000000;
+ hi = tmpui / 010000000000;
+ if (hi != 0) {
+ sprintf(buf,
+ alt ? "%#lo" : "%lo",
+ hi);
+ sprintf(buf + strlen(buf),
+ "%lo", mid);
+ } else
+ sprintf(buf,
+ alt ? "%#lo" : "%lo",
+ mid);
+ sprintf(buf + strlen(buf), "%lo", lo);
+ }
goto printint;
case 'u':
if (q)
@@ -268,8 +303,24 @@ isc_print_vsnprintf(char *str, size_t size, const char *format, va_list ap) {
tmpui = va_arg(ap, unsigned long int);
else
tmpui = va_arg(ap, unsigned int);
- sprintf(buf, "%" ISC_PRINT_QUADFORMAT "u",
- tmpui);
+ if (tmpui <= 0xffffffffU)
+ sprintf(buf, "%lu",
+ (unsigned long)tmpui);
+ else {
+ unsigned long mid;
+ unsigned long lo;
+ unsigned long hi;
+ lo = tmpui % 1000000000;
+ tmpui /= 1000000000;
+ mid = tmpui % 1000000000;
+ hi = tmpui / 1000000000;
+ if (hi != 0)
+ sprintf(buf, "%lu", hi);
+ else
+ buf[0] = '\n';
+ sprintf(buf + strlen(buf), "%lu", mid);
+ sprintf(buf + strlen(buf), "%lu", lo);
+ }
goto printint;
case 'x':
if (q)
@@ -283,8 +334,15 @@ isc_print_vsnprintf(char *str, size_t size, const char *format, va_list ap) {
if (precision > 2)
precision -= 2;
}
- sprintf(buf, "%" ISC_PRINT_QUADFORMAT "x",
- tmpui);
+ if (tmpui <= 0xffffffffU)
+ sprintf(buf, "%lx",
+ (unsigned long)tmpui);
+ else {
+ unsigned long hi = tmpui>>32;
+ unsigned long lo = tmpui & 0xffffffff;
+ sprintf(buf, "%lx", hi);
+ sprintf(buf + strlen(buf), "%lx", lo);
+ }
goto printint;
case 'X':
if (q)
@@ -298,8 +356,15 @@ isc_print_vsnprintf(char *str, size_t size, const char *format, va_list ap) {
if (precision > 2)
precision -= 2;
}
- sprintf(buf, "%" ISC_PRINT_QUADFORMAT "X",
- tmpui);
+ if (tmpui <= 0xffffffffU)
+ sprintf(buf, "%lX",
+ (unsigned long)tmpui);
+ else {
+ unsigned long hi = tmpui>>32;
+ unsigned long lo = tmpui & 0xffffffff;
+ sprintf(buf, "%lX", hi);
+ sprintf(buf + strlen(buf), "%lX", lo);
+ }
goto printint;
printint:
if (precision != 0 || width != 0) {
diff --git a/lib/isc/pthreads/mutex.c b/lib/isc/pthreads/mutex.c
index c437343e..794803b2 100644
--- a/lib/isc/pthreads/mutex.c
+++ b/lib/isc/pthreads/mutex.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: mutex.c,v 1.14 2007/06/19 23:47:18 tbox Exp $ */
+/* $Id: mutex.c,v 1.14.128.2 2008/04/04 23:46:31 tbox Exp $ */
/*! \file */
@@ -36,23 +36,23 @@
/*% Operations on timevals; adapted from FreeBSD's sys/time.h */
#define timevalclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
#define timevaladd(vvp, uvp) \
- do { \
- (vvp)->tv_sec += (uvp)->tv_sec; \
- (vvp)->tv_usec += (uvp)->tv_usec; \
- if ((vvp)->tv_usec >= 1000000) { \
- (vvp)->tv_sec++; \
- (vvp)->tv_usec -= 1000000; \
- } \
- } while (0)
+ do { \
+ (vvp)->tv_sec += (uvp)->tv_sec; \
+ (vvp)->tv_usec += (uvp)->tv_usec; \
+ if ((vvp)->tv_usec >= 1000000) { \
+ (vvp)->tv_sec++; \
+ (vvp)->tv_usec -= 1000000; \
+ } \
+ } while (0)
#define timevalsub(vvp, uvp) \
- do { \
- (vvp)->tv_sec -= (uvp)->tv_sec; \
- (vvp)->tv_usec -= (uvp)->tv_usec; \
- if ((vvp)->tv_usec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_usec += 1000000; \
- } \
- } while (0)
+ do { \
+ (vvp)->tv_sec -= (uvp)->tv_sec; \
+ (vvp)->tv_usec -= (uvp)->tv_usec; \
+ if ((vvp)->tv_usec < 0) { \
+ (vvp)->tv_sec--; \
+ (vvp)->tv_usec += 1000000; \
+ } \
+ } while (0)
/*@}*/
@@ -77,8 +77,11 @@ struct isc_mutexstats {
isc_mutexlocker_t lockers[ISC_MUTEX_MAX_LOCKERS];
};
-#define TABLESIZE (8 * 1024)
-static isc_mutexstats_t stats[TABLESIZE];
+#ifndef ISC_MUTEX_PROFTABLESIZE
+#define ISC_MUTEX_PROFTABLESIZE (16 * 1024)
+#endif
+static isc_mutexstats_t stats[ISC_MUTEX_PROFTABLESIZE];
+static int stats_next = 0;
static isc_boolean_t stats_init = ISC_FALSE;
static pthread_mutex_t statslock = PTHREAD_MUTEX_INITIALIZER;
@@ -95,21 +98,19 @@ isc_mutex_init_profile(isc_mutex_t *mp, const char *file, int line) {
RUNTIME_CHECK(pthread_mutex_lock(&statslock) == 0);
- if (stats_init == ISC_FALSE) {
- for (i = 0; i < TABLESIZE; i++) {
- stats[i].file = NULL;
- }
+ if (stats_init == ISC_FALSE)
stats_init = ISC_TRUE;
- }
- mp->stats = NULL;
- for (i = 0; i < TABLESIZE; i++) {
- if (stats[i].file == NULL) {
- mp->stats = &stats[i];
- break;
- }
- }
- RUNTIME_CHECK(mp->stats != NULL);
+ /*
+ * If all statistics entries have been used, give up and trigger an
+ * assertion failure. There would be no other way to deal with this
+ * because we'd like to keep record of all locks for the purpose of
+ * debugging and the number of necessary locks is unpredictable.
+ * If this failure is triggered while debugging, named should be
+ * rebuilt with an increased ISC_MUTEX_PROFTABLESIZE.
+ */
+ RUNTIME_CHECK(stats_next < ISC_MUTEX_PROFTABLESIZE);
+ mp->stats = &stats[stats_next++];
RUNTIME_CHECK(pthread_mutex_unlock(&statslock) == 0);
@@ -196,10 +197,9 @@ void
isc_mutex_statsprofile(FILE *fp) {
isc_mutexlocker_t *locker;
int i, j;
+
fprintf(fp, "Mutex stats (in us)\n");
- for (i = 0; i < TABLESIZE; i++) {
- if (stats[i].file == NULL)
- continue;
+ for (i = 0; i < stats_next; i++) {
fprintf(fp, "%-12s %4d: %10u %lu.%06lu %lu.%06lu\n",
stats[i].file, stats[i].line, stats[i].count,
stats[i].locked_total.tv_sec,
@@ -236,7 +236,7 @@ isc_mutex_init_errcheck(isc_mutex_t *mp)
if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK) != 0)
return (ISC_R_UNEXPECTED);
-
+
err = pthread_mutex_init(mp, &attr) != 0)
if (err == ENOMEM)
return (ISC_R_NOMEMORY);
@@ -251,6 +251,7 @@ pthread_mutexattr_t isc__mutex_attrs = {
};
#endif
+#if !(ISC_MUTEX_DEBUG && defined(PTHREAD_MUTEX_ERRORCHECK)) && !ISC_MUTEX_PROFILE
isc_result_t
isc__mutex_init(isc_mutex_t *mp, const char *file, unsigned int line) {
char strbuf[ISC_STRERRORSIZE];
@@ -268,3 +269,4 @@ isc__mutex_init(isc_mutex_t *mp, const char *file, unsigned int line) {
}
return (result);
}
+#endif
diff --git a/lib/isc/task.c b/lib/isc/task.c
index e4b9b637..4b5a5a3c 100644
--- a/lib/isc/task.c
+++ b/lib/isc/task.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: task.c,v 1.105 2007/06/18 23:47:44 tbox Exp $ */
+/* $Id: task.c,v 1.105.128.2 2008/03/27 23:46:28 tbox Exp $ */
/*! \file
* \author Principal Author: Bob Halley
@@ -44,8 +44,6 @@
#include "task_p.h"
#endif /* ISC_PLATFORM_USETHREADS */
-#define ISC_TASK_NAMES 1
-
#ifdef ISC_TASK_TRACE
#define XTRACE(m) fprintf(stderr, "task %p thread %lu: %s\n", \
task, isc_thread_self(), (m))
@@ -90,10 +88,8 @@ struct isc_task {
unsigned int quantum;
unsigned int flags;
isc_stdtime_t now;
-#ifdef ISC_TASK_NAMES
char name[16];
void * tag;
-#endif
/* Locked by task manager lock. */
LINK(isc_task_t) link;
LINK(isc_task_t) ready_link;
@@ -203,10 +199,8 @@ isc_task_create(isc_taskmgr_t *manager, unsigned int quantum,
task->quantum = quantum;
task->flags = 0;
task->now = 0;
-#ifdef ISC_TASK_NAMES
memset(task->name, 0, sizeof(task->name));
task->tag = NULL;
-#endif
INIT_LINK(task, link);
INIT_LINK(task, ready_link);
@@ -701,17 +695,11 @@ isc_task_setname(isc_task_t *task, const char *name, void *tag) {
REQUIRE(VALID_TASK(task));
-#ifdef ISC_TASK_NAMES
LOCK(&task->lock);
memset(task->name, 0, sizeof(task->name));
strncpy(task->name, name, sizeof(task->name) - 1);
task->tag = tag;
UNLOCK(&task->lock);
-#else
- UNUSED(name);
- UNUSED(tag);
-#endif
-
}
const char *
@@ -813,9 +801,9 @@ dispatch(isc_taskmgr_t *manager) {
* task lock.
*/
while ((EMPTY(manager->ready_tasks) ||
- manager->exclusive_requested) &&
- !FINISHED(manager))
- {
+ manager->exclusive_requested) &&
+ !FINISHED(manager))
+ {
XTHREADTRACE(isc_msgcat_get(isc_msgcat,
ISC_MSGSET_GENERAL,
ISC_MSG_WAIT, "wait"));
@@ -1028,7 +1016,7 @@ manager_free(isc_taskmgr_t *manager) {
isc_mem_t *mctx;
#ifdef ISC_PLATFORM_USETHREADS
- (void)isc_condition_destroy(&manager->exclusive_granted);
+ (void)isc_condition_destroy(&manager->exclusive_granted);
(void)isc_condition_destroy(&manager->work_available);
isc_mem_free(manager->mctx, manager->threads);
#endif /* ISC_PLATFORM_USETHREADS */
@@ -1270,19 +1258,19 @@ isc__taskmgr_dispatch(void) {
isc_result_t
isc_task_beginexclusive(isc_task_t *task) {
-#ifdef ISC_PLATFORM_USETHREADS
+#ifdef ISC_PLATFORM_USETHREADS
isc_taskmgr_t *manager = task->manager;
REQUIRE(task->state == task_state_running);
LOCK(&manager->lock);
if (manager->exclusive_requested) {
- UNLOCK(&manager->lock);
+ UNLOCK(&manager->lock);
return (ISC_R_LOCKBUSY);
}
manager->exclusive_requested = ISC_TRUE;
while (manager->tasks_running > 1) {
WAIT(&manager->exclusive_granted, &manager->lock);
}
- UNLOCK(&manager->lock);
+ UNLOCK(&manager->lock);
#else
UNUSED(task);
#endif
@@ -1291,7 +1279,7 @@ isc_task_beginexclusive(isc_task_t *task) {
void
isc_task_endexclusive(isc_task_t *task) {
-#ifdef ISC_PLATFORM_USETHREADS
+#ifdef ISC_PLATFORM_USETHREADS
isc_taskmgr_t *manager = task->manager;
REQUIRE(task->state == task_state_running);
LOCK(&manager->lock);
diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c
index 01ef8a5b..aebd825f 100644
--- a/lib/isc/unix/socket.c
+++ b/lib/isc/unix/socket.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: socket.c,v 1.275.10.3 2008/01/27 02:06:46 marka Exp $ */
+/* $Id: socket.c,v 1.275.10.4 2008/03/27 21:10:24 jinmei Exp $ */
/*! \file */
@@ -65,12 +65,6 @@
#include "socket_p.h"
#endif /* ISC_PLATFORM_USETHREADS */
-/*
- * Support names for sockets.
- */
-#define ISC_SOCKET_NAMES 1
-
-
#if defined(SO_BSDCOMPAT) && defined(__linux__)
#include <sys/utsname.h>
#endif
@@ -166,11 +160,8 @@ struct isc_socket {
unsigned int references;
int fd;
int pf;
-
-#ifdef ISC_SOCKET_NAMES
char name[16];
void * tag;
-#endif
ISC_LIST(isc_socketevent_t) send_list;
ISC_LIST(isc_socketevent_t) recv_list;
@@ -1696,10 +1687,8 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type,
}
#endif /* defined(USE_CMSG) || defined(SO_RCVBUF) */
-#ifdef ISC_SOCKET_NAMES
memset(sock->name, 0, sizeof(sock->name));
sock->tag = NULL;
-#endif
sock->references = 1;
*socketp = sock;
@@ -4048,17 +4037,11 @@ isc_socket_setname(isc_socket_t *socket, const char *name, void *tag) {
REQUIRE(VALID_SOCKET(socket));
-#ifdef ISC_SOCKET_NAMES
LOCK(&socket->lock);
memset(socket->name, 0, sizeof(socket->name));
strncpy(socket->name, name, sizeof(socket->name) - 1);
socket->tag = tag;
UNLOCK(&socket->lock);
-#else
- UNUSED(name);
- UNUSED(tag);
-#endif
-
}
const char *
diff --git a/lib/isc/unix/time.c b/lib/isc/unix/time.c
index 70fd2e18..2697d836 100644
--- a/lib/isc/unix/time.c
+++ b/lib/isc/unix/time.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: time.c,v 1.54 2007/06/18 23:47:48 tbox Exp $ */
+/* $Id: time.c,v 1.54.128.2 2008/02/18 23:46:30 tbox Exp $ */
/*! \file */
@@ -227,7 +227,7 @@ isc_time_nowplusinterval(isc_time_t *t, const isc_interval_t *i) {
t->seconds = tv.tv_sec + i->seconds;
t->nanoseconds = tv.tv_usec * NS_PER_US + i->nanoseconds;
- if (t->nanoseconds > NS_PER_S) {
+ if (t->nanoseconds >= NS_PER_S) {
t->seconds++;
t->nanoseconds -= NS_PER_S;
}
@@ -410,7 +410,7 @@ isc_time_formattimestamp(const isc_time_t *t, char *buf, unsigned int len) {
snprintf(buf + flen, len - flen,
".%03u", t->nanoseconds / 1000000);
else
- snprintf(buf, len, "99-Bad-9999 99:99:99.999");
+ snprintf(buf, len, "99-Bad-9999 99:99:99.999");
}
void
diff --git a/lib/isc/win32/include/isc/platform.h b/lib/isc/win32/include/isc/platform.h
index cababbf6..2354306c 100644
--- a/lib/isc/win32/include/isc/platform.h
+++ b/lib/isc/win32/include/isc/platform.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: platform.h,v 1.14 2007/06/19 23:47:20 tbox Exp $ */
+/* $Id: platform.h,v 1.14.128.2 2008/04/02 23:46:28 tbox Exp $ */
#ifndef ISC_PLATFORM_H
#define ISC_PLATFORM_H 1
@@ -34,6 +34,7 @@
#if _MSC_VER > 1200
#define ISC_PLATFORM_HAVEIN6PKTINFO
#endif
+#define ISC_PLATFORM_HAVESCOPEID
#define ISC_PLATFORM_NEEDPORTT
#undef MSG_TRUNC
#define ISC_PLATFORM_NEEDNTOP
@@ -44,6 +45,8 @@
#define ISC_PLATFORM_NEEDSTRSEP
#define ISC_PLATFORM_NEEDSTRLCPY
+#define ISC_PLATFORM_NEEDSTRLCAT
+#define ISC_PLATFORM_NEEDSTRLCPY
/*
* Used to control how extern data is linked; needed for Win32 platforms.
@@ -68,19 +71,19 @@
#ifdef LIBISC_EXPORTS
#define LIBISC_EXTERNAL_DATA __declspec(dllexport)
#else
-#define LIBISC_EXTERNAL_DATA __declspec(dllimport)
+#define LIBISC_EXTERNAL_DATA __declspec(dllimport)
#endif
#ifdef LIBISCCFG_EXPORTS
#define LIBISCCFG_EXTERNAL_DATA __declspec(dllexport)
#else
-#define LIBISCCFG_EXTERNAL_DATA __declspec(dllimport)
+#define LIBISCCFG_EXTERNAL_DATA __declspec(dllimport)
#endif
#ifdef LIBISCCC_EXPORTS
#define LIBISCCC_EXTERNAL_DATA __declspec(dllexport)
#else
-#define LIBISCCC_EXTERNAL_DATA __declspec(dllimport)
+#define LIBISCCC_EXTERNAL_DATA __declspec(dllimport)
#endif
#ifdef LIBDNS_EXPORTS
diff --git a/lib/isc/win32/interfaceiter.c b/lib/isc/win32/interfaceiter.c
index d2505beb..ed74f6c9 100644
--- a/lib/isc/win32/interfaceiter.c
+++ b/lib/isc/win32/interfaceiter.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: interfaceiter.c,v 1.10 2007/06/18 23:47:49 tbox Exp $ */
+/* $Id: interfaceiter.c,v 1.10.128.3 2008/04/18 19:47:26 each Exp $ */
/*
* Note that this code will need to be revisited to support IPv6 Interfaces.
@@ -62,11 +62,13 @@ struct isc_interfaceiter {
int socket;
INTERFACE_INFO IFData; /* Current Interface Info */
int numIF; /* Current Interface count */
- int totalIF; /* Total Number
- of Interfaces */
- INTERFACE_INFO *buf; /* Buffer for WSAIoctl data. */
- unsigned int bufsize; /* Bytes allocated. */
- INTERFACE_INFO *pos; /* Current offset in IF List */
+ int v4IF; /* Number of IPv4 Interfaces */
+ INTERFACE_INFO *buf4; /* Buffer for WSAIoctl data. */
+ unsigned int buf4size; /* Bytes allocated. */
+ INTERFACE_INFO *pos4; /* Current offset in IF List */
+ SOCKET_ADDRESS_LIST *buf6;
+ unsigned int buf6size; /* Bytes allocated. */
+ unsigned int pos6;
isc_interface_t current; /* Current interface data. */
isc_result_t result; /* Last result code. */
};
@@ -94,6 +96,7 @@ get_addr(unsigned int family, isc_netaddr_t *dst, struct sockaddr *src) {
memcpy(&dst->type.in6,
&((struct sockaddr_in6 *) src)->sin6_addr,
sizeof(struct in6_addr));
+ dst->zone = ((struct sockaddr_in6 *) src)->sin6_scope_id;
break;
default:
INSIST(0);
@@ -103,7 +106,7 @@ get_addr(unsigned int family, isc_netaddr_t *dst, struct sockaddr *src) {
isc_result_t
isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
- char strbuf[ISC_STRERRORSIZE];
+ char strbuf[ISC_STRERRORSIZE];
isc_interfaceiter_t *iter;
isc_result_t result;
int error;
@@ -120,7 +123,15 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
InitSockets();
iter->mctx = mctx;
- iter->buf = NULL;
+ iter->buf4 = NULL;
+ iter->buf6 = NULL;
+ iter->pos4 = NULL;
+ iter->pos6 = 0;
+ iter->buf6size = 0;
+ iter->buf4size = 0;
+ iter->result = ISC_R_FAILURE;
+ iter->numIF = 0;
+ iter->v4IF = 0;
/*
* Create an unbound datagram socket to do the
@@ -128,6 +139,8 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
*/
if ((iter->socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
error = WSAGetLastError();
+ if (error == WSAEAFNOSUPPORT)
+ goto inet6_only;
isc__strerror(error, strbuf, sizeof(strbuf));
UNEXPECTED_ERROR(__FILE__, __LINE__,
"making interface scan socket: %s",
@@ -140,17 +153,17 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
* Get the interface configuration, allocating more memory if
* necessary.
*/
- iter->bufsize = IFCONF_SIZE_INITIAL*sizeof(INTERFACE_INFO);
+ iter->buf4size = IFCONF_SIZE_INITIAL*sizeof(INTERFACE_INFO);
for (;;) {
- iter->buf = isc_mem_get(mctx, iter->bufsize);
- if (iter->buf == NULL) {
+ iter->buf4 = isc_mem_get(mctx, iter->buf4size);
+ if (iter->buf4 == NULL) {
result = ISC_R_NOMEMORY;
goto alloc_failure;
}
if (WSAIoctl(iter->socket, SIO_GET_INTERFACE_LIST,
- 0, 0, iter->buf, iter->bufsize,
+ 0, 0, iter->buf4, iter->buf4size,
&bytesReturned, 0, 0) == SOCKET_ERROR)
{
error = WSAGetLastError();
@@ -174,19 +187,19 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
* case and retry.
*/
if (bytesReturned > 0 &&
- (bytesReturned < iter->bufsize))
+ (bytesReturned < iter->buf4size))
break;
}
- if (iter->bufsize >= IFCONF_SIZE_MAX*sizeof(INTERFACE_INFO)) {
+ if (iter->buf4size >= IFCONF_SIZE_MAX*sizeof(INTERFACE_INFO)) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"get interface configuration: "
"maximum buffer size exceeded");
result = ISC_R_UNEXPECTED;
goto ioctl_failure;
}
- isc_mem_put(mctx, iter->buf, iter->bufsize);
+ isc_mem_put(mctx, iter->buf4, iter->buf4size);
- iter->bufsize += IFCONF_SIZE_INCREMENT *
+ iter->buf4size += IFCONF_SIZE_INCREMENT *
sizeof(INTERFACE_INFO);
}
@@ -194,23 +207,92 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
* A newly created iterator has an undefined position
* until isc_interfaceiter_first() is called.
*/
- iter->pos = NULL;
- iter->result = ISC_R_FAILURE;
- iter->numIF = 0;
- iter->totalIF = bytesReturned/sizeof(INTERFACE_INFO);
+ iter->v4IF = bytesReturned/sizeof(INTERFACE_INFO);
+
+ /* We don't need the socket any more, so close it */
+ closesocket(iter->socket);
+ inet6_only:
+ /*
+ * Create an unbound datagram socket to do the
+ * SIO_ADDRESS_LIST_QUERY WSAIoctl on.
+ */
+ if ((iter->socket = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
+ error = WSAGetLastError();
+ if (error == WSAEAFNOSUPPORT)
+ goto inet_only;
+ isc__strerror(error, strbuf, sizeof(strbuf));
+ UNEXPECTED_ERROR(__FILE__, __LINE__,
+ "making interface scan socket: %s",
+ strbuf);
+ result = ISC_R_UNEXPECTED;
+ goto ioctl_failure;
+ }
+
+ /*
+ * Get the interface configuration, allocating more memory if
+ * necessary.
+ */
+ iter->buf6size = sizeof(SOCKET_ADDRESS_LIST) +
+ IFCONF_SIZE_INITIAL*sizeof(SOCKET_ADDRESS);
+
+ for (;;) {
+ iter->buf6 = isc_mem_get(mctx, iter->buf6size);
+ if (iter->buf6 == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto ioctl_failure;
+ }
+
+ if (WSAIoctl(iter->socket, SIO_ADDRESS_LIST_QUERY,
+ 0, 0, iter->buf6, iter->buf6size,
+ &bytesReturned, 0, 0) == SOCKET_ERROR)
+ {
+ error = WSAGetLastError();
+ if (error != WSAEFAULT && error != WSAENOBUFS) {
+ errno = error;
+ isc__strerror(error, strbuf, sizeof(strbuf));
+ UNEXPECTED_ERROR(__FILE__, __LINE__,
+ "sio address list query: %s",
+ strbuf);
+ result = ISC_R_UNEXPECTED;
+ goto ioctl6_failure;
+ }
+ /*
+ * EINVAL. Retry with a bigger buffer.
+ */
+ } else
+ break;
+
+ if (iter->buf6size >= IFCONF_SIZE_MAX*sizeof(SOCKET_ADDRESS)) {
+ UNEXPECTED_ERROR(__FILE__, __LINE__,
+ "get interface configuration: "
+ "maximum buffer size exceeded");
+ result = ISC_R_UNEXPECTED;
+ goto ioctl6_failure;
+ }
+ isc_mem_put(mctx, iter->buf6, iter->buf6size);
+
+ iter->buf6size += IFCONF_SIZE_INCREMENT *
+ sizeof(SOCKET_ADDRESS);
+ }
+ closesocket(iter->socket);
+
+ inet_only:
iter->magic = IFITER_MAGIC;
*iterp = iter;
- /* We don't need the socket any more, so close it */
- closesocket(iter->socket);
return (ISC_R_SUCCESS);
+ ioctl6_failure:
+ isc_mem_put(mctx, iter->buf6, iter->buf6size);
+
ioctl_failure:
- isc_mem_put(mctx, iter->buf, iter->bufsize);
+ if (iter->buf4 != NULL)
+ isc_mem_put(mctx, iter->buf4, iter->buf4size);
alloc_failure:
- (void) closesocket(iter->socket);
+ if (iter->socket >= 0)
+ (void) closesocket(iter->socket);
socket_failure:
isc_mem_put(mctx, iter, sizeof(*iter));
@@ -226,7 +308,7 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
*/
static isc_result_t
-internal_current(isc_interfaceiter_t *iter, int family) {
+internal_current(isc_interfaceiter_t *iter) {
BOOL ifNamed = FALSE;
unsigned long flags;
@@ -234,9 +316,9 @@ internal_current(isc_interfaceiter_t *iter, int family) {
REQUIRE(iter->numIF >= 0);
memset(&iter->current, 0, sizeof(iter->current));
- iter->current.af = family;
+ iter->current.af = AF_INET;
- get_addr(family, &iter->current.address,
+ get_addr(AF_INET, &iter->current.address,
(struct sockaddr *)&(iter->IFData.iiAddress));
/*
@@ -266,7 +348,7 @@ internal_current(isc_interfaceiter_t *iter, int family) {
* If the interface is point-to-point, get the destination address.
*/
if ((iter->current.flags & INTERFACE_F_POINTTOPOINT) != 0) {
- get_addr(family, &iter->current.dstaddress,
+ get_addr(AF_INET, &iter->current.dstaddress,
(struct sockaddr *)&(iter->IFData.iiBroadcastAddress));
}
@@ -277,15 +359,40 @@ internal_current(isc_interfaceiter_t *iter, int family) {
/*
* Get the network mask.
*/
- switch (family) {
- case AF_INET:
- get_addr(family, &iter->current.netmask,
- (struct sockaddr *)&(iter->IFData.iiNetmask));
- break;
- case AF_INET6:
- break;
- }
+ get_addr(AF_INET, &iter->current.netmask,
+ (struct sockaddr *)&(iter->IFData.iiNetmask));
+
+ return (ISC_R_SUCCESS);
+}
+
+static isc_result_t
+internal_current6(isc_interfaceiter_t *iter) {
+ BOOL ifNamed = FALSE;
+ int i;
+
+ REQUIRE(VALID_IFITER(iter));
+ REQUIRE(iter->pos6 >= 0);
+ REQUIRE(iter->buf6 != 0);
+
+ memset(&iter->current, 0, sizeof(iter->current));
+ iter->current.af = AF_INET6;
+
+ get_addr(AF_INET6, &iter->current.address,
+ iter->buf6->Address[iter->pos6].lpSockaddr);
+
+ /*
+ * Get interface flags.
+ */
+
+ iter->current.flags = INTERFACE_F_UP;
+
+ if (ifNamed == FALSE)
+ sprintf(iter->current.name,
+ "TCP/IPv6 Interface %d", iter->pos6 + 1);
+ for (i = 0; i< 16; i++)
+ iter->current.netmask.type.in6.s6_addr[i] = 0xff;
+ iter->current.netmask.family = AF_INET6;
return (ISC_R_SUCCESS);
}
@@ -298,7 +405,7 @@ internal_current(isc_interfaceiter_t *iter, int family) {
*/
static isc_result_t
internal_next(isc_interfaceiter_t *iter) {
- if (iter->numIF >= iter->totalIF)
+ if (iter->numIF >= iter->v4IF)
return (ISC_R_NOMORE);
/*
@@ -307,21 +414,29 @@ internal_next(isc_interfaceiter_t *iter) {
* Microsoft's implementation is peculiar for returning
* the list in reverse order
*/
-
+
if (iter->numIF == 0)
- iter->pos = (INTERFACE_INFO *)(iter->buf + (iter->totalIF));
+ iter->pos4 = (INTERFACE_INFO *)(iter->buf4 + (iter->v4IF));
- iter->pos--;
- if (&(iter->pos) < &(iter->buf))
+ iter->pos4--;
+ if (&(iter->pos4) < &(iter->buf4))
return (ISC_R_NOMORE);
memset(&(iter->IFData), 0, sizeof(INTERFACE_INFO));
- memcpy(&(iter->IFData), iter->pos, sizeof(INTERFACE_INFO));
+ memcpy(&(iter->IFData), iter->pos4, sizeof(INTERFACE_INFO));
iter->numIF++;
return (ISC_R_SUCCESS);
}
+static isc_result_t
+internal_next6(isc_interfaceiter_t *iter) {
+ if (iter->pos6 == 0)
+ return (ISC_R_NOMORE);
+ iter->pos6--;
+ return (ISC_R_SUCCESS);
+}
+
isc_result_t
isc_interfaceiter_current(isc_interfaceiter_t *iter,
isc_interface_t *ifdata) {
@@ -332,21 +447,13 @@ isc_interfaceiter_current(isc_interfaceiter_t *iter,
isc_result_t
isc_interfaceiter_first(isc_interfaceiter_t *iter) {
- isc_result_t result;
REQUIRE(VALID_IFITER(iter));
- iter->numIF = 0;
- for (;;) {
- result = internal_next(iter);
- if (result != ISC_R_SUCCESS)
- break;
- result = internal_current(iter, AF_INET);
- if (result != ISC_R_IGNORE)
- break;
- }
- iter->result = result;
- return (result);
+ if (iter->buf6 != NULL)
+ iter->pos6 = iter->buf6->iAddressCount;
+ iter->result = ISC_R_SUCCESS;
+ return (isc_interfaceiter_next(iter));
}
isc_result_t
@@ -358,9 +465,16 @@ isc_interfaceiter_next(isc_interfaceiter_t *iter) {
for (;;) {
result = internal_next(iter);
- if (result != ISC_R_SUCCESS)
+ if (result == ISC_R_NOMORE) {
+ result = internal_next6(iter);
+ if (result != ISC_R_SUCCESS)
+ break;
+ result = internal_current6(iter);
+ if (result != ISC_R_IGNORE)
+ break;
+ } else if (result != ISC_R_SUCCESS)
break;
- result = internal_current(iter,AF_INET);
+ result = internal_current(iter);
if (result != ISC_R_IGNORE)
break;
}
@@ -375,10 +489,12 @@ isc_interfaceiter_destroy(isc_interfaceiter_t **iterp) {
iter = *iterp;
REQUIRE(VALID_IFITER(iter));
- isc_mem_put(iter->mctx, iter->buf, iter->bufsize);
+ if (iter->buf4 != NULL)
+ isc_mem_put(iter->mctx, iter->buf4, iter->buf4size);
+ if (iter->buf6 != NULL)
+ isc_mem_put(iter->mctx, iter->buf6, iter->buf6size);
iter->magic = 0;
isc_mem_put(iter->mctx, iter, sizeof(*iter));
*iterp = NULL;
}
-
diff --git a/lib/isc/win32/libisc.def b/lib/isc/win32/libisc.def
index 22822051..dda07ebf 100644
--- a/lib/isc/win32/libisc.def
+++ b/lib/isc/win32/libisc.def
@@ -247,13 +247,17 @@ isc_mem_createx
isc_mem_createx2
isc_mem_destroy
isc_mem_detach
+isc_mem_getname
isc_mem_getquota
+isc_mem_gettag
isc_mem_inuse
isc_mem_ondestroy
isc_mem_setdestroycheck
+isc_mem_setname
isc_mem_setquota
isc_mem_setwater
isc_mem_stats
+isc_mem_waterack
isc_mempool_associatelock
isc_mempool_create
isc_mempool_destroy
diff --git a/lib/isc/win32/net.c b/lib/isc/win32/net.c
index df561a07..37246882 100644
--- a/lib/isc/win32/net.c
+++ b/lib/isc/win32/net.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: net.c,v 1.14 2007/06/18 23:47:49 tbox Exp $ */
+/* $Id: net.c,v 1.14.128.2 2008/04/02 23:46:28 tbox Exp $ */
#include <config.h>
@@ -51,7 +51,7 @@ try_proto(int domain) {
char strbuf[ISC_STRERRORSIZE];
int errval;
- s = socket(domain, SOCK_STREAM, 0);
+ s = socket(domain, SOCK_STREAM, IPPROTO_TCP);
if (s == INVALID_SOCKET) {
errval = WSAGetLastError();
switch (errval) {
@@ -72,53 +72,9 @@ try_proto(int domain) {
}
}
-#ifdef ISC_PLATFORM_HAVEIPV6
-#ifdef WANT_IPV6
-#ifdef ISC_PLATFORM_HAVEIN6PKTINFO
- if (domain == PF_INET6) {
- struct sockaddr_in6 sin6;
- unsigned int len;
-
- /*
- * Check to see if IPv6 is broken, as is common on Linux.
- */
- len = sizeof(sin6);
- if (getsockname(s, (struct sockaddr *)&sin6, (void *)&len) < 0)
- {
- isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
- ISC_LOGMODULE_SOCKET, ISC_LOG_ERROR,
- "retrieving the address of an IPv6 "
- "socket from the kernel failed.");
- isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
- ISC_LOGMODULE_SOCKET, ISC_LOG_ERROR,
- "IPv6 support is disabled.");
- result = ISC_R_NOTFOUND;
- } else {
- if (len == sizeof(struct sockaddr_in6))
- result = ISC_R_SUCCESS;
- else {
- isc_log_write(isc_lctx,
- ISC_LOGCATEGORY_GENERAL,
- ISC_LOGMODULE_SOCKET,
- ISC_LOG_ERROR,
- "IPv6 structures in kernel and "
- "user space do not match.");
- isc_log_write(isc_lctx,
- ISC_LOGCATEGORY_GENERAL,
- ISC_LOGMODULE_SOCKET,
- ISC_LOG_ERROR,
- "IPv6 support is disabled.");
- result = ISC_R_NOTFOUND;
- }
- }
- }
-#endif
-#endif
-#endif
-
closesocket(s);
- return (result);
+ return (ISC_R_SUCCESS);
}
static void
@@ -198,7 +154,7 @@ try_ipv6only(void) {
goto close;
}
- close(s);
+ closesocket(s);
/* check for UDP sockets */
s = socket(PF_INET6, SOCK_DGRAM, 0);
@@ -221,12 +177,10 @@ try_ipv6only(void) {
goto close;
}
- close(s);
-
ipv6only_result = ISC_R_SUCCESS;
close:
- close(s);
+ closeocket(s);
return;
#endif /* IPV6_V6ONLY */
}
@@ -252,7 +206,7 @@ try_ipv6pktinfo(void) {
/* we only use this for UDP sockets */
s = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP);
- if (s == -1) {
+ if (s == INVALID_SOCKET) {
isc__strerror(errno, strbuf, sizeof(strbuf));
UNEXPECTED_ERROR(__FILE__, __LINE__,
"socket() %s: %s",
@@ -276,11 +230,10 @@ try_ipv6pktinfo(void) {
goto close;
}
- close(s);
ipv6pktinfo_result = ISC_R_SUCCESS;
close:
- close(s);
+ closesocket(s);
return;
}
diff --git a/lib/isc/win32/socket.c b/lib/isc/win32/socket.c
index 5a4d6743..d80d593d 100644
--- a/lib/isc/win32/socket.c
+++ b/lib/isc/win32/socket.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: socket.c,v 1.52 2007/08/28 00:39:15 marka Exp $ */
+/* $Id: socket.c,v 1.52.94.2 2008/03/27 23:46:28 tbox Exp $ */
/* This code has been rewritten to take advantage of Windows Sockets
* I/O Completion Ports and Events. I/O Completion Ports is ONLY
@@ -92,8 +92,6 @@
#include "errno2result.h"
-#define ISC_SOCKET_NAMES 1
-
/*
* Define this macro to control the behavior of connection
* resets on UDP sockets. See Microsoft KnowledgeBase Article Q263823
@@ -186,16 +184,16 @@ typedef isc_event_t intev_t;
struct msghdr {
- void *msg_name; /* optional address */
- u_int msg_namelen; /* size of address */
- WSABUF *msg_iov; /* scatter/gather array */
- u_int msg_iovlen; /* # elements in msg_iov */
- void *msg_control; /* ancillary data, see below */
- u_int msg_controllen; /* ancillary data buffer len */
- int msg_flags; /* flags on received message */
+ void *msg_name; /* optional address */
+ u_int msg_namelen; /* size of address */
+ WSABUF *msg_iov; /* scatter/gather array */
+ u_int msg_iovlen; /* # elements in msg_iov */
+ void *msg_control; /* ancillary data, see below */
+ u_int msg_controllen; /* ancillary data buffer len */
+ int msg_flags; /* flags on received message */
int msg_totallen; /* total length of this message */
} msghdr;
-
+
/*%
* The size to raise the recieve buffer to.
*/
@@ -226,11 +224,8 @@ struct isc_socket {
unsigned int references;
SOCKET fd;
int pf;
-
-#ifdef ISC_SOCKET_NAMES
char name[16];
void * tag;
-#endif
ISC_LIST(isc_socketevent_t) send_list;
ISC_LIST(isc_socketevent_t) recv_list;
@@ -510,7 +505,7 @@ iocompletionport_init(isc_socketmgr_t *manager) {
/*
* Worker threads for servicing the I/O
- */
+ */
iocompletionport_createthreads(manager->maxIOCPThreads, manager);
}
@@ -665,7 +660,7 @@ socket_eventlist_add(event_change_t *evchange, sock_event_list *evlist,
*/
isc_boolean_t
socket_eventlist_delete(event_change_t *evchange, sock_event_list *evlist,
- isc_socketmgr_t *manager)
+ isc_socketmgr_t *manager)
{
int i;
WSAEVENT hEvent;
@@ -948,7 +943,7 @@ initialise(void) {
void
InitSockets(void) {
RUNTIME_CHECK(isc_once_do(&initialise_once,
- initialise) == ISC_R_SUCCESS);
+ initialise) == ISC_R_SUCCESS);
if (!initialised)
exit(1);
}
@@ -3865,17 +3860,11 @@ isc_socket_setname(isc_socket_t *socket, const char *name, void *tag) {
REQUIRE(VALID_SOCKET(socket));
-#ifdef ISC_SOCKET_NAMES
LOCK(&socket->lock);
memset(socket->name, 0, sizeof(socket->name));
strncpy(socket->name, name, sizeof(socket->name) - 1);
socket->tag = tag;
UNLOCK(&socket->lock);
-#else
- UNUSED(name);
- UNUSED(tag);
-#endif
-
}
const char *
diff --git a/lib/isccfg/api b/lib/isccfg/api
index e1227550..f57ff8a1 100644
--- a/lib/isccfg/api
+++ b/lib/isccfg/api
@@ -1,3 +1,3 @@
LIBINTERFACE = 40
-LIBREVISION = 1
+LIBREVISION = 2
LIBAGE = 0
diff --git a/lib/isccfg/namedconf.c b/lib/isccfg/namedconf.c
index 4ecc6c81..16317f29 100644
--- a/lib/isccfg/namedconf.c
+++ b/lib/isccfg/namedconf.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: namedconf.c,v 1.78.46.4 2008/01/22 00:31:00 jinmei Exp $ */
+/* $Id: namedconf.c,v 1.78.46.6 2008/04/03 02:12:22 marka Exp $ */
/*! \file */
@@ -733,67 +733,68 @@ static cfg_type_t cfg_type_lookaside = {
static cfg_clausedef_t
view_clauses[] = {
+ { "acache-cleaning-interval", &cfg_type_uint32, 0 },
+ { "acache-enable", &cfg_type_boolean, 0 },
+ { "additional-from-auth", &cfg_type_boolean, 0 },
+ { "additional-from-cache", &cfg_type_boolean, 0 },
{ "allow-query-cache", &cfg_type_bracketed_aml, 0 },
{ "allow-query-cache-on", &cfg_type_bracketed_aml, 0 },
{ "allow-recursion", &cfg_type_bracketed_aml, 0 },
{ "allow-recursion-on", &cfg_type_bracketed_aml, 0 },
{ "allow-v6-synthesis", &cfg_type_bracketed_aml,
CFG_CLAUSEFLAG_OBSOLETE },
- { "sortlist", &cfg_type_bracketed_aml, 0 },
- { "topology", &cfg_type_bracketed_aml, CFG_CLAUSEFLAG_NOTIMP },
{ "auth-nxdomain", &cfg_type_boolean, CFG_CLAUSEFLAG_NEWDEFAULT },
- { "minimal-responses", &cfg_type_boolean, 0 },
- { "recursion", &cfg_type_boolean, 0 },
- { "rrset-order", &cfg_type_rrsetorder, 0 },
- { "provide-ixfr", &cfg_type_boolean, 0 },
- { "request-ixfr", &cfg_type_boolean, 0 },
- { "fetch-glue", &cfg_type_boolean, CFG_CLAUSEFLAG_OBSOLETE },
- { "rfc2308-type1", &cfg_type_boolean, CFG_CLAUSEFLAG_NYI },
- { "additional-from-auth", &cfg_type_boolean, 0 },
- { "additional-from-cache", &cfg_type_boolean, 0 },
- /*
- * Note that the query-source option syntax is different
- * from the other -source options.
- */
- { "query-source", &cfg_type_querysource4, 0 },
- { "query-source-v6", &cfg_type_querysource6, 0 },
- { "cleaning-interval", &cfg_type_uint32, 0 },
- { "min-roots", &cfg_type_uint32, CFG_CLAUSEFLAG_NOTIMP },
- { "lame-ttl", &cfg_type_uint32, 0 },
- { "max-ncache-ttl", &cfg_type_uint32, 0 },
- { "max-cache-ttl", &cfg_type_uint32, 0 },
- { "transfer-format", &cfg_type_transferformat, 0 },
- { "max-cache-size", &cfg_type_size, 0 },
- { "check-names", &cfg_type_checknames, CFG_CLAUSEFLAG_MULTI },
{ "cache-file", &cfg_type_qstring, 0 },
- { "suppress-initial-notify", &cfg_type_boolean, CFG_CLAUSEFLAG_NYI },
- { "preferred-glue", &cfg_type_astring, 0 },
- { "dual-stack-servers", &cfg_type_nameportiplist, 0 },
- { "edns-udp-size", &cfg_type_uint32, 0 },
- { "max-udp-size", &cfg_type_uint32, 0 },
- { "root-delegation-only", &cfg_type_optional_exclude, 0 },
+ { "check-names", &cfg_type_checknames, CFG_CLAUSEFLAG_MULTI },
+ { "cleaning-interval", &cfg_type_uint32, 0 },
+ { "clients-per-query", &cfg_type_uint32, 0 },
{ "disable-algorithms", &cfg_type_disablealgorithm,
CFG_CLAUSEFLAG_MULTI },
+ { "disable-empty-zone", &cfg_type_astring, CFG_CLAUSEFLAG_MULTI },
+ { "dnssec-accept-expired", &cfg_type_boolean, 0 },
{ "dnssec-enable", &cfg_type_boolean, 0 },
- { "dnssec-validation", &cfg_type_boolean, 0 },
{ "dnssec-lookaside", &cfg_type_lookaside, CFG_CLAUSEFLAG_MULTI },
{ "dnssec-must-be-secure", &cfg_type_mustbesecure,
- CFG_CLAUSEFLAG_MULTI },
- { "dnssec-accept-expired", &cfg_type_boolean, 0 },
+ CFG_CLAUSEFLAG_MULTI },
+ { "dnssec-validation", &cfg_type_boolean, 0 },
+ { "dual-stack-servers", &cfg_type_nameportiplist, 0 },
+ { "edns-udp-size", &cfg_type_uint32, 0 },
+ { "empty-contact", &cfg_type_astring, 0 },
+ { "empty-server", &cfg_type_astring, 0 },
+ { "empty-zones-enable", &cfg_type_boolean, 0 },
+ { "fetch-glue", &cfg_type_boolean, CFG_CLAUSEFLAG_OBSOLETE },
{ "ixfr-from-differences", &cfg_type_ixfrdifftype, 0 },
- { "acache-enable", &cfg_type_boolean, 0 },
- { "acache-cleaning-interval", &cfg_type_uint32, 0 },
+ { "lame-ttl", &cfg_type_uint32, 0 },
{ "max-acache-size", &cfg_type_sizenodefault, 0 },
- { "clients-per-query", &cfg_type_uint32, 0 },
+ { "max-cache-size", &cfg_type_size, 0 },
+ { "max-cache-ttl", &cfg_type_uint32, 0 },
{ "max-clients-per-query", &cfg_type_uint32, 0 },
- { "empty-server", &cfg_type_astring, 0 },
- { "empty-contact", &cfg_type_astring, 0 },
- { "empty-zones-enable", &cfg_type_boolean, 0 },
- { "disable-empty-zone", &cfg_type_astring, CFG_CLAUSEFLAG_MULTI },
- { "zero-no-soa-ttl-cache", &cfg_type_boolean, 0 },
- { "use-queryport-pool", &cfg_type_boolean, 0 },
+ { "max-ncache-ttl", &cfg_type_uint32, 0 },
+ { "max-udp-size", &cfg_type_uint32, 0 },
+ { "min-roots", &cfg_type_uint32, CFG_CLAUSEFLAG_NOTIMP },
+ { "minimal-responses", &cfg_type_boolean, 0 },
+ { "preferred-glue", &cfg_type_astring, 0 },
+ { "provide-ixfr", &cfg_type_boolean, 0 },
+ /*
+ * Note that the query-source option syntax is different
+ * from the other -source options.
+ */
+ { "query-source", &cfg_type_querysource4, 0 },
+ { "query-source-v6", &cfg_type_querysource6, 0 },
{ "queryport-pool-ports", &cfg_type_uint32, 0 },
{ "queryport-pool-updateinterval", &cfg_type_uint32, 0 },
+ { "recursion", &cfg_type_boolean, 0 },
+ { "request-ixfr", &cfg_type_boolean, 0 },
+ { "request-nsid", &cfg_type_boolean, 0 },
+ { "rfc2308-type1", &cfg_type_boolean, CFG_CLAUSEFLAG_NYI },
+ { "root-delegation-only", &cfg_type_optional_exclude, 0 },
+ { "rrset-order", &cfg_type_rrsetorder, 0 },
+ { "sortlist", &cfg_type_bracketed_aml, 0 },
+ { "suppress-initial-notify", &cfg_type_boolean, CFG_CLAUSEFLAG_NYI },
+ { "topology", &cfg_type_bracketed_aml, CFG_CLAUSEFLAG_NOTIMP },
+ { "transfer-format", &cfg_type_transferformat, 0 },
+ { "use-queryport-pool", &cfg_type_boolean, 0 },
+ { "zero-no-soa-ttl-cache", &cfg_type_boolean, 0 },
{ NULL, NULL, 0 }
};
@@ -1760,6 +1761,7 @@ static isc_result_t
parse_logversions(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
return (parse_enum_or_other(pctx, type, &cfg_type_uint32, ret));
}
+
static cfg_type_t cfg_type_logversions = {
"logversions", parse_logversions, cfg_print_ustring, cfg_doc_terminal,
&cfg_rep_string, logversions_enums
@@ -1833,8 +1835,19 @@ print_logfile(cfg_printer_t *pctx, const cfg_obj_t *obj) {
}
}
+
+static void
+doc_logfile(cfg_printer_t *pctx, const cfg_type_t *type) {
+ UNUSED(type);
+ cfg_print_cstr(pctx, "<quoted_string>");
+ cfg_print_chars(pctx, " ", 1);
+ cfg_print_cstr(pctx, "[ versions ( \"unlimited\" | <integer> ) ]");
+ cfg_print_chars(pctx, " ", 1);
+ cfg_print_cstr(pctx, "[ size <size> ]");
+}
+
static cfg_type_t cfg_type_logfile = {
- "log_file", parse_logfile, print_logfile, cfg_doc_terminal,
+ "log_file", parse_logfile, print_logfile, doc_logfile,
&cfg_rep_tuple, logfile_fields
};
@@ -1865,8 +1878,8 @@ static cfg_type_t cfg_type_lwres_view = {
};
static cfg_type_t cfg_type_lwres_searchlist = {
- "lwres_searchlist", cfg_parse_bracketed_list, cfg_print_bracketed_list, cfg_doc_bracketed_list,
- &cfg_rep_list, &cfg_type_astring };
+ "lwres_searchlist", cfg_parse_bracketed_list, cfg_print_bracketed_list,
+ cfg_doc_bracketed_list, &cfg_rep_list, &cfg_type_astring };
static cfg_clausedef_t
lwres_clauses[] = {
@@ -1985,15 +1998,15 @@ doc_sockaddrnameport(cfg_printer_t *pctx, const cfg_type_t *type) {
cfg_print_chars(pctx, "( ", 2);
cfg_print_cstr(pctx, "<quoted_string>");
cfg_print_chars(pctx, " ", 1);
- cfg_print_cstr(pctx, "[port <integer>]");
+ cfg_print_cstr(pctx, "[ port <integer> ]");
cfg_print_chars(pctx, " | ", 3);
cfg_print_cstr(pctx, "<ipv4_address>");
cfg_print_chars(pctx, " ", 1);
- cfg_print_cstr(pctx, "[port <integer>]");
+ cfg_print_cstr(pctx, "[ port <integer> ]");
cfg_print_chars(pctx, " | ", 3);
cfg_print_cstr(pctx, "<ipv6_address>");
cfg_print_chars(pctx, " ", 1);
- cfg_print_cstr(pctx, "[port <integer>]");
+ cfg_print_cstr(pctx, "[ port <integer> ]");
cfg_print_chars(pctx, " )", 2);
}
@@ -2071,11 +2084,11 @@ doc_masterselement(cfg_printer_t *pctx, const cfg_type_t *type) {
cfg_print_chars(pctx, " | ", 3);
cfg_print_cstr(pctx, "<ipv4_address>");
cfg_print_chars(pctx, " ", 1);
- cfg_print_cstr(pctx, "[port <integer>]");
+ cfg_print_cstr(pctx, "[ port <integer> ]");
cfg_print_chars(pctx, " | ", 3);
cfg_print_cstr(pctx, "<ipv6_address>");
cfg_print_chars(pctx, " ", 1);
- cfg_print_cstr(pctx, "[port <integer>]");
+ cfg_print_cstr(pctx, "[ port <integer> ]");
cfg_print_chars(pctx, " )", 2);
}
diff --git a/make/rules.in b/make/rules.in
index 01f391af..6ffea9b3 100644
--- a/make/rules.in
+++ b/make/rules.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 1998-2003 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: rules.in,v 1.62 2007/06/18 23:47:57 tbox Exp $
+# $Id: rules.in,v 1.62.128.2 2008/02/18 23:46:30 tbox Exp $
###
### Common Makefile rules for BIND 9.
@@ -104,7 +104,7 @@ STD_CWARNINGS = @STD_CWARNINGS@
BUILD_CC = @BUILD_CC@
BUILD_CFLAGS = @BUILD_CFLAGS@
BUILD_CPPFLAGS = @BUILD_CPPFLAGS@
-BUILD_LDFAGS = @BUILD_LDFAGS@
+BUILD_LDFLAGS = @BUILD_LDFLAGS@
BUILD_LIBS = @BUILD_LIBS@
.SUFFIXES:
diff --git a/version b/version
index 62319749..4bf2e757 100644
--- a/version
+++ b/version
@@ -1,4 +1,4 @@
-# $Id: version,v 1.39.18.1 2008/01/22 23:43:56 each Exp $
+# $Id: version,v 1.39.18.3 2008/05/06 01:47:41 each Exp $
#
# This file must follow /bin/sh rules. It is imported directly via
# configure.
@@ -6,5 +6,5 @@
MAJORVER=9
MINORVER=5
PATCHVER=0
-RELEASETYPE=b
-RELEASEVER=2
+RELEASETYPE=rc
+RELEASEVER=1