diff --git a/components/net/uip/README b/components/net/uip/README new file mode 100644 index 0000000000000000000000000000000000000000..b5015386787325ed22a450f6a4651e0f8853a004 --- /dev/null +++ b/components/net/uip/README @@ -0,0 +1,13 @@ +uIP is a very small implementation of the TCP/IP stack that is written +by Adam Dunkels . More information can be obtained +at the uIP homepage at http://www.sics.se/~adam/uip/. + +This is version $Name: uip-1-0 $. + +The directory structure look as follows: + +apps/ - Example applications +doc/ - Documentation +lib/ - Library code used by some applications +uip/ - uIP TCP/IP stack code +unix/ - uIP as a user space process under FreeBSD or Linux diff --git a/components/net/uip/apps/README b/components/net/uip/apps/README new file mode 100644 index 0000000000000000000000000000000000000000..0096c4e4fd11ea690be0a2b5d6b745508162620b --- /dev/null +++ b/components/net/uip/apps/README @@ -0,0 +1,2 @@ +This directory contains a few example applications. They are not all +heavily tested, however. diff --git a/components/net/uip/apps/dhcpc/Makefile.dhcpc b/components/net/uip/apps/dhcpc/Makefile.dhcpc new file mode 100644 index 0000000000000000000000000000000000000000..f84c84ff4632856c5952ed2a9b2871fb6c9f9517 --- /dev/null +++ b/components/net/uip/apps/dhcpc/Makefile.dhcpc @@ -0,0 +1 @@ +APP_SOURCES += dhcpc.c timer.c diff --git a/components/net/uip/apps/dhcpc/dhcpc.c b/components/net/uip/apps/dhcpc/dhcpc.c new file mode 100644 index 0000000000000000000000000000000000000000..ac738e7e24794acfce979e7d7652f57983af0900 --- /dev/null +++ b/components/net/uip/apps/dhcpc/dhcpc.c @@ -0,0 +1,356 @@ +/* + * Copyright (c) 2005, Swedish Institute of Computer Science + * 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 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 file is part of the uIP TCP/IP stack + * + * @(#)$Id: dhcpc.c,v 1.2 2006/06/11 21:46:37 adam Exp $ + */ + +#include +#include + +#include "uip.h" +#include "dhcpc.h" +#include "timer.h" +#include "pt.h" + +#define STATE_INITIAL 0 +#define STATE_SENDING 1 +#define STATE_OFFER_RECEIVED 2 +#define STATE_CONFIG_RECEIVED 3 + +static struct dhcpc_state s; + +struct dhcp_msg { + u8_t op, htype, hlen, hops; + u8_t xid[4]; + u16_t secs, flags; + u8_t ciaddr[4]; + u8_t yiaddr[4]; + u8_t siaddr[4]; + u8_t giaddr[4]; + u8_t chaddr[16]; +#ifndef UIP_CONF_DHCP_LIGHT + u8_t sname[64]; + u8_t file[128]; +#endif + u8_t options[312]; +}; + +#define BOOTP_BROADCAST 0x8000 + +#define DHCP_REQUEST 1 +#define DHCP_REPLY 2 +#define DHCP_HTYPE_ETHERNET 1 +#define DHCP_HLEN_ETHERNET 6 +#define DHCP_MSG_LEN 236 + +#define DHCPC_SERVER_PORT 67 +#define DHCPC_CLIENT_PORT 68 + +#define DHCPDISCOVER 1 +#define DHCPOFFER 2 +#define DHCPREQUEST 3 +#define DHCPDECLINE 4 +#define DHCPACK 5 +#define DHCPNAK 6 +#define DHCPRELEASE 7 + +#define DHCP_OPTION_SUBNET_MASK 1 +#define DHCP_OPTION_ROUTER 3 +#define DHCP_OPTION_DNS_SERVER 6 +#define DHCP_OPTION_REQ_IPADDR 50 +#define DHCP_OPTION_LEASE_TIME 51 +#define DHCP_OPTION_MSG_TYPE 53 +#define DHCP_OPTION_SERVER_ID 54 +#define DHCP_OPTION_REQ_LIST 55 +#define DHCP_OPTION_END 255 + +static const u8_t xid[4] = {0xad, 0xde, 0x12, 0x23}; +static const u8_t magic_cookie[4] = {99, 130, 83, 99}; +/*---------------------------------------------------------------------------*/ +static u8_t * +add_msg_type(u8_t *optptr, u8_t type) +{ + *optptr++ = DHCP_OPTION_MSG_TYPE; + *optptr++ = 1; + *optptr++ = type; + return optptr; +} +/*---------------------------------------------------------------------------*/ +static u8_t * +add_server_id(u8_t *optptr) +{ + *optptr++ = DHCP_OPTION_SERVER_ID; + *optptr++ = 4; + memcpy(optptr, s.serverid, 4); + return optptr + 4; +} +/*---------------------------------------------------------------------------*/ +static u8_t * +add_req_ipaddr(u8_t *optptr) +{ + *optptr++ = DHCP_OPTION_REQ_IPADDR; + *optptr++ = 4; + memcpy(optptr, s.ipaddr, 4); + return optptr + 4; +} +/*---------------------------------------------------------------------------*/ +static u8_t * +add_req_options(u8_t *optptr) +{ + *optptr++ = DHCP_OPTION_REQ_LIST; + *optptr++ = 3; + *optptr++ = DHCP_OPTION_SUBNET_MASK; + *optptr++ = DHCP_OPTION_ROUTER; + *optptr++ = DHCP_OPTION_DNS_SERVER; + return optptr; +} +/*---------------------------------------------------------------------------*/ +static u8_t * +add_end(u8_t *optptr) +{ + *optptr++ = DHCP_OPTION_END; + return optptr; +} +/*---------------------------------------------------------------------------*/ +static void +create_msg(register struct dhcp_msg *m) +{ + m->op = DHCP_REQUEST; + m->htype = DHCP_HTYPE_ETHERNET; + m->hlen = s.mac_len; + m->hops = 0; + memcpy(m->xid, xid, sizeof(m->xid)); + m->secs = 0; + m->flags = HTONS(BOOTP_BROADCAST); /* Broadcast bit. */ + /* uip_ipaddr_copy(m->ciaddr, uip_hostaddr);*/ + memcpy(m->ciaddr, uip_hostaddr, sizeof(m->ciaddr)); + memset(m->yiaddr, 0, sizeof(m->yiaddr)); + memset(m->siaddr, 0, sizeof(m->siaddr)); + memset(m->giaddr, 0, sizeof(m->giaddr)); + memcpy(m->chaddr, s.mac_addr, s.mac_len); + memset(&m->chaddr[s.mac_len], 0, sizeof(m->chaddr) - s.mac_len); +#ifndef UIP_CONF_DHCP_LIGHT + memset(m->sname, 0, sizeof(m->sname)); + memset(m->file, 0, sizeof(m->file)); +#endif + + memcpy(m->options, magic_cookie, sizeof(magic_cookie)); +} +/*---------------------------------------------------------------------------*/ +static void +send_discover(void) +{ + u8_t *end; + struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata; + + create_msg(m); + + end = add_msg_type(&m->options[4], DHCPDISCOVER); + end = add_req_options(end); + end = add_end(end); + + uip_send(uip_appdata, end - (u8_t *)uip_appdata); +} +/*---------------------------------------------------------------------------*/ +static void +send_request(void) +{ + u8_t *end; + struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata; + + create_msg(m); + + end = add_msg_type(&m->options[4], DHCPREQUEST); + end = add_server_id(end); + end = add_req_ipaddr(end); + end = add_end(end); + + uip_send(uip_appdata, end - (u8_t *)uip_appdata); +} +/*---------------------------------------------------------------------------*/ +static u8_t +parse_options(u8_t *optptr, int len) +{ + u8_t *end = optptr + len; + u8_t type = 0; + + while(optptr < end) { + switch(*optptr) { + case DHCP_OPTION_SUBNET_MASK: + memcpy(s.netmask, optptr + 2, 4); + break; + case DHCP_OPTION_ROUTER: + memcpy(s.default_router, optptr + 2, 4); + break; + case DHCP_OPTION_DNS_SERVER: + memcpy(s.dnsaddr, optptr + 2, 4); + break; + case DHCP_OPTION_MSG_TYPE: + type = *(optptr + 2); + break; + case DHCP_OPTION_SERVER_ID: + memcpy(s.serverid, optptr + 2, 4); + break; + case DHCP_OPTION_LEASE_TIME: + memcpy(s.lease_time, optptr + 2, 4); + break; + case DHCP_OPTION_END: + return type; + } + + optptr += optptr[1] + 2; + } + return type; +} +/*---------------------------------------------------------------------------*/ +static u8_t +parse_msg(void) +{ + struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata; + + if(m->op == DHCP_REPLY && + memcmp(m->xid, xid, sizeof(xid)) == 0 && + memcmp(m->chaddr, s.mac_addr, s.mac_len) == 0) { + memcpy(s.ipaddr, m->yiaddr, 4); + return parse_options(&m->options[4], uip_datalen()); + } + return 0; +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_dhcp(void)) +{ + PT_BEGIN(&s.pt); + + /* try_again:*/ + s.state = STATE_SENDING; + s.ticks = CLOCK_SECOND; + + do { + send_discover(); + timer_set(&s.timer, s.ticks); + PT_WAIT_UNTIL(&s.pt, uip_newdata() || timer_expired(&s.timer)); + + if(uip_newdata() && parse_msg() == DHCPOFFER) { + s.state = STATE_OFFER_RECEIVED; + break; + } + + if(s.ticks < CLOCK_SECOND * 60) { + s.ticks *= 2; + } + } while(s.state != STATE_OFFER_RECEIVED); + + s.ticks = CLOCK_SECOND; + + do { + send_request(); + timer_set(&s.timer, s.ticks); + PT_WAIT_UNTIL(&s.pt, uip_newdata() || timer_expired(&s.timer)); + + if(uip_newdata() && parse_msg() == DHCPACK) { + s.state = STATE_CONFIG_RECEIVED; + break; + } + + if(s.ticks <= CLOCK_SECOND * 10) { + s.ticks += CLOCK_SECOND; + } else { + PT_RESTART(&s.pt); + } + } while(s.state != STATE_CONFIG_RECEIVED); + +#if 0 + printf("Got IP address %d.%d.%d.%d\n", + uip_ipaddr1(s.ipaddr), uip_ipaddr2(s.ipaddr), + uip_ipaddr3(s.ipaddr), uip_ipaddr4(s.ipaddr)); + printf("Got netmask %d.%d.%d.%d\n", + uip_ipaddr1(s.netmask), uip_ipaddr2(s.netmask), + uip_ipaddr3(s.netmask), uip_ipaddr4(s.netmask)); + printf("Got DNS server %d.%d.%d.%d\n", + uip_ipaddr1(s.dnsaddr), uip_ipaddr2(s.dnsaddr), + uip_ipaddr3(s.dnsaddr), uip_ipaddr4(s.dnsaddr)); + printf("Got default router %d.%d.%d.%d\n", + uip_ipaddr1(s.default_router), uip_ipaddr2(s.default_router), + uip_ipaddr3(s.default_router), uip_ipaddr4(s.default_router)); + printf("Lease expires in %ld seconds\n", + ntohs(s.lease_time[0])*65536ul + ntohs(s.lease_time[1])); +#endif + + dhcpc_configured(&s); + + /* timer_stop(&s.timer);*/ + + /* + * PT_END restarts the thread so we do this instead. Eventually we + * should reacquire expired leases here. + */ + while(1) { + PT_YIELD(&s.pt); + } + + PT_END(&s.pt); +} +/*---------------------------------------------------------------------------*/ +void +dhcpc_init(const void *mac_addr, int mac_len) +{ + uip_ipaddr_t addr; + + s.mac_addr = mac_addr; + s.mac_len = mac_len; + + s.state = STATE_INITIAL; + uip_ipaddr(addr, 255,255,255,255); + s.conn = uip_udp_new(&addr, HTONS(DHCPC_SERVER_PORT)); + if(s.conn != NULL) { + uip_udp_bind(s.conn, HTONS(DHCPC_CLIENT_PORT)); + } + PT_INIT(&s.pt); +} +/*---------------------------------------------------------------------------*/ +void +dhcpc_appcall(void) +{ + handle_dhcp(); +} +/*---------------------------------------------------------------------------*/ +void +dhcpc_request(void) +{ + u16_t ipaddr[2]; + + if(s.state == STATE_INITIAL) { + uip_ipaddr(ipaddr, 0,0,0,0); + uip_sethostaddr(ipaddr); + /* handle_dhcp(PROCESS_EVENT_NONE, NULL);*/ + } +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/apps/dhcpc/dhcpc.h b/components/net/uip/apps/dhcpc/dhcpc.h new file mode 100644 index 0000000000000000000000000000000000000000..c6550ec5860de6d5c979a3e36df47220a213c51c --- /dev/null +++ b/components/net/uip/apps/dhcpc/dhcpc.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2005, Swedish Institute of Computer Science + * 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 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 file is part of the uIP TCP/IP stack + * + * @(#)$Id: dhcpc.h,v 1.3 2006/06/11 21:46:37 adam Exp $ + */ +#ifndef __DHCPC_H__ +#define __DHCPC_H__ + +#include "timer.h" +#include "pt.h" + +struct dhcpc_state { + struct pt pt; + char state; + struct uip_udp_conn *conn; + struct timer timer; + u16_t ticks; + const void *mac_addr; + int mac_len; + + u8_t serverid[4]; + + u16_t lease_time[2]; + u16_t ipaddr[2]; + u16_t netmask[2]; + u16_t dnsaddr[2]; + u16_t default_router[2]; +}; + +void dhcpc_init(const void *mac_addr, int mac_len); +void dhcpc_request(void); + +void dhcpc_appcall(void); + +void dhcpc_configured(const struct dhcpc_state *s); + +typedef struct dhcpc_state uip_udp_appstate_t; +#define UIP_UDP_APPCALL dhcpc_appcall + + +#endif /* __DHCPC_H__ */ diff --git a/components/net/uip/apps/hello-world/Makefile.hello-world b/components/net/uip/apps/hello-world/Makefile.hello-world new file mode 100644 index 0000000000000000000000000000000000000000..e34aaf51ab9b9eff330af0712d1a1ff78169bd73 --- /dev/null +++ b/components/net/uip/apps/hello-world/Makefile.hello-world @@ -0,0 +1 @@ +APP_SOURCES += hello-world.c diff --git a/components/net/uip/apps/hello-world/hello-world.c b/components/net/uip/apps/hello-world/hello-world.c new file mode 100644 index 0000000000000000000000000000000000000000..508326bd49440242e3471b8ebebe5403f6e1ac19 --- /dev/null +++ b/components/net/uip/apps/hello-world/hello-world.c @@ -0,0 +1,115 @@ +/** + * \addtogroup helloworld + * @{ + */ + +/** + * \file + * An example of how to write uIP applications + * with protosockets. + * \author + * Adam Dunkels + */ + +/* + * This is a short example of how to write uIP applications using + * protosockets. + */ + +/* + * We define the application state (struct hello_world_state) in the + * hello-world.h file, so we need to include it here. We also include + * uip.h (since this cannot be included in hello-world.h) and + * , since we use the memcpy() function in the code. + */ +#include "hello-world.h" +#include "uip.h" +#include + +/* + * Declaration of the protosocket function that handles the connection + * (defined at the end of the code). + */ +static int handle_connection(struct hello_world_state *s); +static int rt_show_info(struct hello_world_state *s); +/*---------------------------------------------------------------------------*/ +/* + * The initialization function. We must explicitly call this function + * from the system initialization code, some time after uip_init() is + * called. + */ +void +hello_world_init(void) +{ + /* We start to listen for connections on TCP port 1000. */ + uip_listen(HTONS(1000)); +} +/*---------------------------------------------------------------------------*/ +/* + * In hello-world.h we have defined the UIP_APPCALL macro to + * hello_world_appcall so that this funcion is uIP's application + * function. This function is called whenever an uIP event occurs + * (e.g. when a new connection is established, new data arrives, sent + * data is acknowledged, data needs to be retransmitted, etc.). + */ +void +hello_world_appcall(void) +{ + /* + * The uip_conn structure has a field called "appstate" that holds + * the application state of the connection. We make a pointer to + * this to access it easier. + */ + struct hello_world_state *s = &(uip_conn->appstate); + + /* + * If a new connection was just established, we should initialize + * the protosocket in our applications' state structure. + */ + if(uip_connected()) { + PSOCK_INIT(&s->p, s->inputbuffer, sizeof(s->inputbuffer)); + rt_show_info(s); + } + + /* + * Finally, we run the protosocket function that actually handles + * the communication. We pass it a pointer to the application state + * of the current connection. + */ + handle_connection(s); +} +/*---------------------------------------------------------------------------*/ +/* + * This is the protosocket function that handles the communication. A + * protosocket function must always return an int, but must never + * explicitly return - all return statements are hidden in the PSOCK + * macros. + */ +static int rt_show_info(struct hello_world_state *s) +{ + PSOCK_BEGIN(&s->p); + PSOCK_SEND_STR(&s->p,"RT-Thread RTOS"); + PSOCK_READTO(&s->p, '\n'); + PSOCK_END(&s->p); + +} +static int +handle_connection(struct hello_world_state *s) +{ + int i; + for (i=0;iname[i] = 0; + s->inputbuffer[i] = 0; + } + PSOCK_BEGIN(&s->p); + //PSOCK_SEND_STR(&s->p, "Hello. What is your name?\n"); + PSOCK_READTO(&s->p, '\n'); + strncpy(s->name, s->inputbuffer, sizeof(s->name)); + //PSOCK_SEND_STR(&s->p, "Hello "); + PSOCK_SEND_STR(&s->p, s->name); + //PSOCK_CLOSE(&s->p); + + PSOCK_END(&s->p); +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/apps/hello-world/hello-world.h b/components/net/uip/apps/hello-world/hello-world.h new file mode 100644 index 0000000000000000000000000000000000000000..102410a9b74e715a2b5150ed3e28be113a69e0cc --- /dev/null +++ b/components/net/uip/apps/hello-world/hello-world.h @@ -0,0 +1,53 @@ +/** + * \addtogroup apps + * @{ + */ + +/** + * \defgroup helloworld Hello, world + * @{ + * + * A small example showing how to write applications with + * \ref psock "protosockets". + */ + +/** + * \file + * Header file for an example of how to write uIP applications + * with protosockets. + * \author + * Adam Dunkels + */ + +#ifndef __HELLO_WORLD_H__ +#define __HELLO_WORLD_H__ + +/* Since this file will be included by uip.h, we cannot include uip.h + here. But we might need to include uipopt.h if we need the u8_t and + u16_t datatypes. */ +#include "uipopt.h" + +#include "psock.h" + +/* Next, we define the uip_tcp_appstate_t datatype. This is the state + of our application, and the memory required for this state is + allocated together with each TCP connection. One application state + for each TCP connection. */ +#define BUF_SIZE 200 +typedef struct hello_world_state { + struct psock p; + char inputbuffer[BUF_SIZE]; + char name[BUF_SIZE]; +} uip_tcp_appstate_t; + +/* Finally we define the application function to be called by uIP. */ +void hello_world_appcall(void); +#ifndef UIP_APPCALL +#define UIP_APPCALL hello_world_appcall +#endif /* UIP_APPCALL */ + +void hello_world_init(void); + +#endif /* __HELLO_WORLD_H__ */ +/** @} */ +/** @} */ diff --git a/components/net/uip/apps/resolv/Makefile.resolv b/components/net/uip/apps/resolv/Makefile.resolv new file mode 100644 index 0000000000000000000000000000000000000000..94c37d8c861f2584879f93dc7f973e2580b7fcd5 --- /dev/null +++ b/components/net/uip/apps/resolv/Makefile.resolv @@ -0,0 +1 @@ +APP_SOURCES += resolv.c diff --git a/components/net/uip/apps/resolv/resolv.c b/components/net/uip/apps/resolv/resolv.c new file mode 100644 index 0000000000000000000000000000000000000000..8afbca6c552beac27d5755101bf183468c047dda --- /dev/null +++ b/components/net/uip/apps/resolv/resolv.c @@ -0,0 +1,464 @@ +/** + * \addtogroup apps + * @{ + */ + +/** + * \defgroup resolv DNS resolver + * @{ + * + * The uIP DNS resolver functions are used to lookup a hostname and + * map it to a numerical IP address. It maintains a list of resolved + * hostnames that can be queried with the resolv_lookup() + * function. New hostnames can be resolved using the resolv_query() + * function. + * + * When a hostname has been resolved (or found to be non-existant), + * the resolver code calls a callback function called resolv_found() + * that must be implemented by the module that uses the resolver. + */ + +/** + * \file + * DNS host name to IP address resolver. + * \author Adam Dunkels + * + * This file implements a DNS host name to IP address resolver. + */ + +/* + * Copyright (c) 2002-2003, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: resolv.c,v 1.5 2006/06/11 21:46:37 adam Exp $ + * + */ + +#include "resolv.h" +#include "uip.h" + +#include + +#ifndef NULL +#define NULL (void *)0 +#endif /* NULL */ + +/** \internal The maximum number of retries when asking for a name. */ +#define MAX_RETRIES 8 + +/** \internal The DNS message header. */ +struct dns_hdr { + u16_t id; + u8_t flags1, flags2; +#define DNS_FLAG1_RESPONSE 0x80 +#define DNS_FLAG1_OPCODE_STATUS 0x10 +#define DNS_FLAG1_OPCODE_INVERSE 0x08 +#define DNS_FLAG1_OPCODE_STANDARD 0x00 +#define DNS_FLAG1_AUTHORATIVE 0x04 +#define DNS_FLAG1_TRUNC 0x02 +#define DNS_FLAG1_RD 0x01 +#define DNS_FLAG2_RA 0x80 +#define DNS_FLAG2_ERR_MASK 0x0f +#define DNS_FLAG2_ERR_NONE 0x00 +#define DNS_FLAG2_ERR_NAME 0x03 + u16_t numquestions; + u16_t numanswers; + u16_t numauthrr; + u16_t numextrarr; +}; + +/** \internal The DNS answer message structure. */ +struct dns_answer { + /* DNS answer record starts with either a domain name or a pointer + to a name already present somewhere in the packet. */ + u16_t type; + u16_t class; + u16_t ttl[2]; + u16_t len; + uip_ipaddr_t ipaddr; +}; + +struct namemap { +#define STATE_UNUSED 0 +#define STATE_NEW 1 +#define STATE_ASKING 2 +#define STATE_DONE 3 +#define STATE_ERROR 4 + u8_t state; + u8_t tmr; + u8_t retries; + u8_t seqno; + u8_t err; + char name[32]; + uip_ipaddr_t ipaddr; +}; + +#ifndef UIP_CONF_RESOLV_ENTRIES +#define RESOLV_ENTRIES 4 +#else /* UIP_CONF_RESOLV_ENTRIES */ +#define RESOLV_ENTRIES UIP_CONF_RESOLV_ENTRIES +#endif /* UIP_CONF_RESOLV_ENTRIES */ + + +static struct namemap names[RESOLV_ENTRIES]; + +static u8_t seqno; + +static struct uip_udp_conn *resolv_conn = NULL; + + +/*---------------------------------------------------------------------------*/ +/** \internal + * Walk through a compact encoded DNS name and return the end of it. + * + * \return The end of the name. + */ +/*---------------------------------------------------------------------------*/ +static unsigned char * +parse_name(unsigned char *query) +{ + unsigned char n; + + do { + n = *query++; + + while(n > 0) { + /* printf("%c", *query);*/ + ++query; + --n; + }; + /* printf(".");*/ + } while(*query != 0); + /* printf("\n");*/ + return query + 1; +} +/*---------------------------------------------------------------------------*/ +/** \internal + * Runs through the list of names to see if there are any that have + * not yet been queried and, if so, sends out a query. + */ +/*---------------------------------------------------------------------------*/ +static void +check_entries(void) +{ + register struct dns_hdr *hdr; + char *query, *nptr, *nameptr; + static u8_t i; + static u8_t n; + register struct namemap *namemapptr; + + for(i = 0; i < RESOLV_ENTRIES; ++i) { + namemapptr = &names[i]; + if(namemapptr->state == STATE_NEW || + namemapptr->state == STATE_ASKING) { + if(namemapptr->state == STATE_ASKING) { + if(--namemapptr->tmr == 0) { + if(++namemapptr->retries == MAX_RETRIES) { + namemapptr->state = STATE_ERROR; + resolv_found(namemapptr->name, NULL); + continue; + } + namemapptr->tmr = namemapptr->retries; + } else { + /* printf("Timer %d\n", namemapptr->tmr);*/ + /* Its timer has not run out, so we move on to next + entry. */ + continue; + } + } else { + namemapptr->state = STATE_ASKING; + namemapptr->tmr = 1; + namemapptr->retries = 0; + } + hdr = (struct dns_hdr *)uip_appdata; + memset(hdr, 0, sizeof(struct dns_hdr)); + hdr->id = htons(i); + hdr->flags1 = DNS_FLAG1_RD; + hdr->numquestions = HTONS(1); + query = (char *)uip_appdata + 12; + nameptr = namemapptr->name; + --nameptr; + /* Convert hostname into suitable query format. */ + do { + ++nameptr; + nptr = query; + ++query; + for(n = 0; *nameptr != '.' && *nameptr != 0; ++nameptr) { + *query = *nameptr; + ++query; + ++n; + } + *nptr = n; + } while(*nameptr != 0); + { + static unsigned char endquery[] = + {0,0,1,0,1}; + memcpy(query, endquery, 5); + } + uip_udp_send((unsigned char)(query + 5 - (char *)uip_appdata)); + break; + } + } +} +/*---------------------------------------------------------------------------*/ +/** \internal + * Called when new UDP data arrives. + */ +/*---------------------------------------------------------------------------*/ +static void +newdata(void) +{ + char *nameptr; + struct dns_answer *ans; + struct dns_hdr *hdr; + static u8_t nquestions, nanswers; + static u8_t i; + register struct namemap *namemapptr; + + hdr = (struct dns_hdr *)uip_appdata; + /* printf("ID %d\n", htons(hdr->id)); + printf("Query %d\n", hdr->flags1 & DNS_FLAG1_RESPONSE); + printf("Error %d\n", hdr->flags2 & DNS_FLAG2_ERR_MASK); + printf("Num questions %d, answers %d, authrr %d, extrarr %d\n", + htons(hdr->numquestions), + htons(hdr->numanswers), + htons(hdr->numauthrr), + htons(hdr->numextrarr)); + */ + + /* The ID in the DNS header should be our entry into the name + table. */ + i = htons(hdr->id); + namemapptr = &names[i]; + if(i < RESOLV_ENTRIES && + namemapptr->state == STATE_ASKING) { + + /* This entry is now finished. */ + namemapptr->state = STATE_DONE; + namemapptr->err = hdr->flags2 & DNS_FLAG2_ERR_MASK; + + /* Check for error. If so, call callback to inform. */ + if(namemapptr->err != 0) { + namemapptr->state = STATE_ERROR; + resolv_found(namemapptr->name, NULL); + return; + } + + /* We only care about the question(s) and the answers. The authrr + and the extrarr are simply discarded. */ + nquestions = htons(hdr->numquestions); + nanswers = htons(hdr->numanswers); + + /* Skip the name in the question. XXX: This should really be + checked agains the name in the question, to be sure that they + match. */ + nameptr = parse_name((char *)uip_appdata + 12) + 4; + + while(nanswers > 0) { + /* The first byte in the answer resource record determines if it + is a compressed record or a normal one. */ + if(*nameptr & 0xc0) { + /* Compressed name. */ + nameptr +=2; + /* printf("Compressed anwser\n");*/ + } else { + /* Not compressed name. */ + nameptr = parse_name((char *)nameptr); + } + + ans = (struct dns_answer *)nameptr; + /* printf("Answer: type %x, class %x, ttl %x, length %x\n", + htons(ans->type), htons(ans->class), (htons(ans->ttl[0]) + << 16) | htons(ans->ttl[1]), htons(ans->len));*/ + + /* Check for IP address type and Internet class. Others are + discarded. */ + if(ans->type == HTONS(1) && + ans->class == HTONS(1) && + ans->len == HTONS(4)) { + /* printf("IP address %d.%d.%d.%d\n", + htons(ans->ipaddr[0]) >> 8, + htons(ans->ipaddr[0]) & 0xff, + htons(ans->ipaddr[1]) >> 8, + htons(ans->ipaddr[1]) & 0xff);*/ + /* XXX: we should really check that this IP address is the one + we want. */ + namemapptr->ipaddr[0] = ans->ipaddr[0]; + namemapptr->ipaddr[1] = ans->ipaddr[1]; + + resolv_found(namemapptr->name, namemapptr->ipaddr); + return; + } else { + nameptr = nameptr + 10 + htons(ans->len); + } + --nanswers; + } + } + +} +/*---------------------------------------------------------------------------*/ +/** \internal + * The main UDP function. + */ +/*---------------------------------------------------------------------------*/ +void +resolv_appcall(void) +{ + if(uip_udp_conn->rport == HTONS(53)) { + if(uip_poll()) { + check_entries(); + } + if(uip_newdata()) { + newdata(); + } + } +} +/*---------------------------------------------------------------------------*/ +/** + * Queues a name so that a question for the name will be sent out. + * + * \param name The hostname that is to be queried. + */ +/*---------------------------------------------------------------------------*/ +void +resolv_query(char *name) +{ + static u8_t i; + static u8_t lseq, lseqi; + register struct namemap *nameptr; + + lseq = lseqi = 0; + + for(i = 0; i < RESOLV_ENTRIES; ++i) { + nameptr = &names[i]; + if(nameptr->state == STATE_UNUSED) { + break; + } + if(seqno - nameptr->seqno > lseq) { + lseq = seqno - nameptr->seqno; + lseqi = i; + } + } + + if(i == RESOLV_ENTRIES) { + i = lseqi; + nameptr = &names[i]; + } + + /* printf("Using entry %d\n", i);*/ + + strcpy(nameptr->name, name); + nameptr->state = STATE_NEW; + nameptr->seqno = seqno; + ++seqno; +} +/*---------------------------------------------------------------------------*/ +/** + * Look up a hostname in the array of known hostnames. + * + * \note This function only looks in the internal array of known + * hostnames, it does not send out a query for the hostname if none + * was found. The function resolv_query() can be used to send a query + * for a hostname. + * + * \return A pointer to a 4-byte representation of the hostname's IP + * address, or NULL if the hostname was not found in the array of + * hostnames. + */ +/*---------------------------------------------------------------------------*/ +u16_t * +resolv_lookup(char *name) +{ + static u8_t i; + struct namemap *nameptr; + + /* Walk through the list to see if the name is in there. If it is + not, we return NULL. */ + for(i = 0; i < RESOLV_ENTRIES; ++i) { + nameptr = &names[i]; + if(nameptr->state == STATE_DONE && + strcmp(name, nameptr->name) == 0) { + return nameptr->ipaddr; + } + } + return NULL; +} +/*---------------------------------------------------------------------------*/ +/** + * Obtain the currently configured DNS server. + * + * \return A pointer to a 4-byte representation of the IP address of + * the currently configured DNS server or NULL if no DNS server has + * been configured. + */ +/*---------------------------------------------------------------------------*/ +u16_t * +resolv_getserver(void) +{ + if(resolv_conn == NULL) { + return NULL; + } + return resolv_conn->ripaddr; +} +/*---------------------------------------------------------------------------*/ +/** + * Configure which DNS server to use for queries. + * + * \param dnsserver A pointer to a 4-byte representation of the IP + * address of the DNS server to be configured. + */ +/*---------------------------------------------------------------------------*/ +void +resolv_conf(u16_t *dnsserver) +{ + if(resolv_conn != NULL) { + uip_udp_remove(resolv_conn); + } + + resolv_conn = uip_udp_new(dnsserver, HTONS(53)); +} +/*---------------------------------------------------------------------------*/ +/** + * Initalize the resolver. + */ +/*---------------------------------------------------------------------------*/ +void +resolv_init(void) +{ + static u8_t i; + + for(i = 0; i < RESOLV_ENTRIES; ++i) { + names[i].state = STATE_DONE; + } + +} +/*---------------------------------------------------------------------------*/ + +/** @} */ +/** @} */ diff --git a/components/net/uip/apps/resolv/resolv.h b/components/net/uip/apps/resolv/resolv.h new file mode 100644 index 0000000000000000000000000000000000000000..abab34e12753db9e0ca6fa89e01ba602298d577f --- /dev/null +++ b/components/net/uip/apps/resolv/resolv.h @@ -0,0 +1,75 @@ +/** + * \addtogroup resolv + * @{ + */ +/** + * \file + * DNS resolver code header file. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2002-2003, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: resolv.h,v 1.4 2006/06/11 21:46:37 adam Exp $ + * + */ +#ifndef __RESOLV_H__ +#define __RESOLV_H__ + +typedef int uip_udp_appstate_t; +void resolv_appcall(void); +#define UIP_UDP_APPCALL resolv_appcall + +#include "uipopt.h" + +/** + * Callback function which is called when a hostname is found. + * + * This function must be implemented by the module that uses the DNS + * resolver. It is called when a hostname is found, or when a hostname + * was not found. + * + * \param name A pointer to the name that was looked up. \param + * ipaddr A pointer to a 4-byte array containing the IP address of the + * hostname, or NULL if the hostname could not be found. + */ +void resolv_found(char *name, u16_t *ipaddr); + +/* Functions. */ +void resolv_conf(u16_t *dnsserver); +u16_t *resolv_getserver(void); +void resolv_init(void); +u16_t *resolv_lookup(char *name); +void resolv_query(char *name); + +#endif /* __RESOLV_H__ */ + +/** @} */ diff --git a/components/net/uip/apps/smtp/Makefile.smtp b/components/net/uip/apps/smtp/Makefile.smtp new file mode 100644 index 0000000000000000000000000000000000000000..8b3a5aa45c5abb86670221ca412e93eb611e8a78 --- /dev/null +++ b/components/net/uip/apps/smtp/Makefile.smtp @@ -0,0 +1 @@ +APP_SOURCES += smtp.c smtp-strings.c memb.c diff --git a/components/net/uip/apps/smtp/makestrings b/components/net/uip/apps/smtp/makestrings new file mode 100644 index 0000000000000000000000000000000000000000..bea18a6c3489bc8b74fc9b309dbbf58325416074 --- /dev/null +++ b/components/net/uip/apps/smtp/makestrings @@ -0,0 +1,40 @@ +#!/usr/bin/perl + + +sub stringify { + my $name = shift(@_); + open(OUTPUTC, "> $name.c"); + open(OUTPUTH, "> $name.h"); + + open(FILE, "$name"); + + while() { + if(/(.+) "(.+)"/) { + $var = $1; + $data = $2; + + $datan = $data; + $datan =~ s/\\r/\r/g; + $datan =~ s/\\n/\n/g; + $datan =~ s/\\01/\01/g; + $datan =~ s/\\0/\0/g; + + printf(OUTPUTC "const char $var\[%d] = \n", length($datan) + 1); + printf(OUTPUTC "/* \"$data\" */\n"); + printf(OUTPUTC "{"); + for($j = 0; $j < length($datan); $j++) { + printf(OUTPUTC "%#02x, ", unpack("C", substr($datan, $j, 1))); + } + printf(OUTPUTC "};\n"); + + printf(OUTPUTH "extern const char $var\[%d];\n", length($datan) + 1); + + } + } + close(OUTPUTC); + close(OUTPUTH); +} +stringify("smtp-strings"); + +exit 0; + diff --git a/components/net/uip/apps/smtp/smtp-strings b/components/net/uip/apps/smtp/smtp-strings new file mode 100644 index 0000000000000000000000000000000000000000..27f639c2eb0cc0ceb775fefda9bc9cae570d1ebc --- /dev/null +++ b/components/net/uip/apps/smtp/smtp-strings @@ -0,0 +1,11 @@ +smtp_220 "220" +smtp_helo "HELO " +smtp_mail_from "MAIL FROM: " +smtp_rcpt_to "RCPT TO: " +smtp_data "DATA\r\n" +smtp_to "To: " +smtp_from "From: " +smtp_subject "Subject: " +smtp_quit "QUIT\r\n" +smtp_crnl "\r\n" +smtp_crnlperiodcrnl "\r\n.\r\n" \ No newline at end of file diff --git a/components/net/uip/apps/smtp/smtp-strings.c b/components/net/uip/apps/smtp/smtp-strings.c new file mode 100644 index 0000000000000000000000000000000000000000..f3981a17bf1f2d6ad45efd3d099009e811d5cc5d --- /dev/null +++ b/components/net/uip/apps/smtp/smtp-strings.c @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2004, Adam Dunkels. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: smtp-strings.c,v 1.3 2006/06/11 21:46:37 adam Exp $ + */ +const char smtp_220[4] = +/* "220" */ +{0x32, 0x32, 0x30, }; +const char smtp_helo[6] = +/* "HELO " */ +{0x48, 0x45, 0x4c, 0x4f, 0x20, }; +const char smtp_mail_from[12] = +/* "MAIL FROM: " */ +{0x4d, 0x41, 0x49, 0x4c, 0x20, 0x46, 0x52, 0x4f, 0x4d, 0x3a, 0x20, }; +const char smtp_rcpt_to[10] = +/* "RCPT TO: " */ +{0x52, 0x43, 0x50, 0x54, 0x20, 0x54, 0x4f, 0x3a, 0x20, }; +const char smtp_data[7] = +/* "DATA\r\n" */ +{0x44, 0x41, 0x54, 0x41, 0xd, 0xa, }; +const char smtp_to[5] = +/* "To: " */ +{0x54, 0x6f, 0x3a, 0x20, }; +const char smtp_cc[5] = +/* "Cc: " */ +{0x43, 0x63, 0x3a, 0x20, }; +const char smtp_from[7] = +/* "From: " */ +{0x46, 0x72, 0x6f, 0x6d, 0x3a, 0x20, }; +const char smtp_subject[10] = +/* "Subject: " */ +{0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x20, }; +const char smtp_quit[7] = +/* "QUIT\r\n" */ +{0x51, 0x55, 0x49, 0x54, 0xd, 0xa, }; +const char smtp_crnl[3] = +/* "\r\n" */ +{0xd, 0xa, }; +const char smtp_crnlperiodcrnl[6] = +/* "\r\n.\r\n" */ +{0xd, 0xa, 0x2e, 0xd, 0xa, }; diff --git a/components/net/uip/apps/smtp/smtp-strings.h b/components/net/uip/apps/smtp/smtp-strings.h new file mode 100644 index 0000000000000000000000000000000000000000..f5ae68c89479138eb7fb8bf593cff4cecb28fc63 --- /dev/null +++ b/components/net/uip/apps/smtp/smtp-strings.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2004, Adam Dunkels. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: smtp-strings.h,v 1.3 2006/06/11 21:46:37 adam Exp $ + */ +extern const char smtp_220[4]; +extern const char smtp_helo[6]; +extern const char smtp_mail_from[12]; +extern const char smtp_rcpt_to[10]; +extern const char smtp_data[7]; +extern const char smtp_to[5]; +extern const char smtp_cc[5]; +extern const char smtp_from[7]; +extern const char smtp_subject[10]; +extern const char smtp_quit[7]; +extern const char smtp_crnl[3]; +extern const char smtp_crnlperiodcrnl[6]; diff --git a/components/net/uip/apps/smtp/smtp.c b/components/net/uip/apps/smtp/smtp.c new file mode 100644 index 0000000000000000000000000000000000000000..a860006ad0885e38fefa70a68a6a48f2fb0868a3 --- /dev/null +++ b/components/net/uip/apps/smtp/smtp.c @@ -0,0 +1,262 @@ +/** + * \addtogroup apps + * @{ + */ + +/** + * \defgroup smtp SMTP E-mail sender + * @{ + * + * The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is + * the standard way of sending and transfering e-mail on the + * Internet. This simple example implementation is intended as an + * example of how to implement protocols in uIP, and is able to send + * out e-mail but has not been extensively tested. + */ + +/** + * \file + * SMTP example implementation + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2004, Adam Dunkels. + * 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 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 file is part of the uIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: smtp.c,v 1.4 2006/06/11 21:46:37 adam Exp $ + */ +#include "smtp.h" + +#include "smtp-strings.h" +#include "psock.h" +#include "uip.h" + +#include + +static struct smtp_state s; + +static char *localhostname; +static uip_ipaddr_t smtpserver; + +#define ISO_nl 0x0a +#define ISO_cr 0x0d + +#define ISO_period 0x2e + +#define ISO_2 0x32 +#define ISO_3 0x33 +#define ISO_4 0x34 +#define ISO_5 0x35 + + +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(smtp_thread(void)) +{ + PSOCK_BEGIN(&s.psock); + + PSOCK_READTO(&s.psock, ISO_nl); + + if(strncmp(s.inputbuffer, smtp_220, 3) != 0) { + PSOCK_CLOSE(&s.psock); + smtp_done(2); + PSOCK_EXIT(&s.psock); + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_helo); + PSOCK_SEND_STR(&s.psock, localhostname); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + PSOCK_READTO(&s.psock, ISO_nl); + + if(s.inputbuffer[0] != ISO_2) { + PSOCK_CLOSE(&s.psock); + smtp_done(3); + PSOCK_EXIT(&s.psock); + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_mail_from); + PSOCK_SEND_STR(&s.psock, s.from); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + PSOCK_READTO(&s.psock, ISO_nl); + + if(s.inputbuffer[0] != ISO_2) { + PSOCK_CLOSE(&s.psock); + smtp_done(4); + PSOCK_EXIT(&s.psock); + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_rcpt_to); + PSOCK_SEND_STR(&s.psock, s.to); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + PSOCK_READTO(&s.psock, ISO_nl); + + if(s.inputbuffer[0] != ISO_2) { + PSOCK_CLOSE(&s.psock); + smtp_done(5); + PSOCK_EXIT(&s.psock); + } + + if(s.cc != 0) { + PSOCK_SEND_STR(&s.psock, (char *)smtp_rcpt_to); + PSOCK_SEND_STR(&s.psock, s.cc); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + PSOCK_READTO(&s.psock, ISO_nl); + + if(s.inputbuffer[0] != ISO_2) { + PSOCK_CLOSE(&s.psock); + smtp_done(6); + PSOCK_EXIT(&s.psock); + } + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_data); + + PSOCK_READTO(&s.psock, ISO_nl); + + if(s.inputbuffer[0] != ISO_3) { + PSOCK_CLOSE(&s.psock); + smtp_done(7); + PSOCK_EXIT(&s.psock); + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_to); + PSOCK_SEND_STR(&s.psock, s.to); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + if(s.cc != 0) { + PSOCK_SEND_STR(&s.psock, (char *)smtp_cc); + PSOCK_SEND_STR(&s.psock, s.cc); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_from); + PSOCK_SEND_STR(&s.psock, s.from); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + PSOCK_SEND_STR(&s.psock, (char *)smtp_subject); + PSOCK_SEND_STR(&s.psock, s.subject); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + PSOCK_SEND(&s.psock, s.msg, s.msglen); + + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnlperiodcrnl); + + PSOCK_READTO(&s.psock, ISO_nl); + if(s.inputbuffer[0] != ISO_2) { + PSOCK_CLOSE(&s.psock); + smtp_done(8); + PSOCK_EXIT(&s.psock); + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_quit); + smtp_done(SMTP_ERR_OK); + PSOCK_END(&s.psock); +} +/*---------------------------------------------------------------------------*/ +void +smtp_appcall(void) +{ + if(uip_closed()) { + s.connected = 0; + return; + } + if(uip_aborted() || uip_timedout()) { + s.connected = 0; + smtp_done(1); + return; + } + smtp_thread(); +} +/*---------------------------------------------------------------------------*/ +/** + * Specificy an SMTP server and hostname. + * + * This function is used to configure the SMTP module with an SMTP + * server and the hostname of the host. + * + * \param lhostname The hostname of the uIP host. + * + * \param server A pointer to a 4-byte array representing the IP + * address of the SMTP server to be configured. + */ +void +smtp_configure(char *lhostname, void *server) +{ + localhostname = lhostname; + uip_ipaddr_copy(smtpserver, server); +} +/*---------------------------------------------------------------------------*/ +/** + * Send an e-mail. + * + * \param to The e-mail address of the receiver of the e-mail. + * \param cc The e-mail address of the CC: receivers of the e-mail. + * \param from The e-mail address of the sender of the e-mail. + * \param subject The subject of the e-mail. + * \param msg The actual e-mail message. + * \param msglen The length of the e-mail message. + */ +unsigned char +smtp_send(char *to, char *cc, char *from, + char *subject, char *msg, u16_t msglen) +{ + struct uip_conn *conn; + + conn = uip_connect(smtpserver, HTONS(25)); + if(conn == NULL) { + return 0; + } + s.connected = 1; + s.to = to; + s.cc = cc; + s.from = from; + s.subject = subject; + s.msg = msg; + s.msglen = msglen; + + PSOCK_INIT(&s.psock, s.inputbuffer, sizeof(s.inputbuffer)); + + return 1; +} +/*---------------------------------------------------------------------------*/ +void +smtp_init(void) +{ + s.connected = 0; +} +/*---------------------------------------------------------------------------*/ +/** @} */ +/** @} */ diff --git a/components/net/uip/apps/smtp/smtp.h b/components/net/uip/apps/smtp/smtp.h new file mode 100644 index 0000000000000000000000000000000000000000..44d0766e10c730331b3ef570079b9cbe64a3445e --- /dev/null +++ b/components/net/uip/apps/smtp/smtp.h @@ -0,0 +1,103 @@ + +/** + * \addtogroup smtp + * @{ + */ + + +/** + * \file + * SMTP header file + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2002, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: smtp.h,v 1.4 2006/06/11 21:46:37 adam Exp $ + * + */ +#ifndef __SMTP_H__ +#define __SMTP_H__ + +#include "uipopt.h" + +/** + * Error number that signifies a non-error condition. + */ +#define SMTP_ERR_OK 0 + +/** + * Callback function that is called when an e-mail transmission is + * done. + * + * This function must be implemented by the module that uses the SMTP + * module. + * + * \param error The number of the error if an error occured, or + * SMTP_ERR_OK. + */ +void smtp_done(unsigned char error); + +void smtp_init(void); + +/* Functions. */ +void smtp_configure(char *localhostname, u16_t *smtpserver); +unsigned char smtp_send(char *to, char *from, + char *subject, char *msg, + u16_t msglen); +#define SMTP_SEND(to, cc, from, subject, msg) \ + smtp_send(to, cc, from, subject, msg, strlen(msg)) + +void smtp_appcall(void); + +struct smtp_state { + u8_t state; + char *to; + char *from; + char *subject; + char *msg; + u16_t msglen; + + u16_t sentlen, textlen; + u16_t sendptr; + +}; + + +#ifndef UIP_APPCALL +#define UIP_APPCALL smtp_appcall +#endif +typedef struct smtp_state uip_tcp_appstate_t; + + +#endif /* __SMTP_H__ */ + +/** @} */ diff --git a/components/net/uip/apps/telnetd/Makefile.telnetd b/components/net/uip/apps/telnetd/Makefile.telnetd new file mode 100644 index 0000000000000000000000000000000000000000..afb1b593c89ce23351eae1ac385c48fe6f8fa756 --- /dev/null +++ b/components/net/uip/apps/telnetd/Makefile.telnetd @@ -0,0 +1 @@ +APP_SOURCES += telnetd.c shell.c memb.c diff --git a/components/net/uip/apps/telnetd/telnetd.c b/components/net/uip/apps/telnetd/telnetd.c new file mode 100644 index 0000000000000000000000000000000000000000..7a5ae858d7bc5ac4d3e8c47b49f645eae840f6fd --- /dev/null +++ b/components/net/uip/apps/telnetd/telnetd.c @@ -0,0 +1,350 @@ +/* + * Copyright (c) 2003, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack + * + * $Id: telnetd.c,v 1.2 2006/06/07 09:43:54 adam Exp $ + * + */ + +#include "uip.h" +#include "telnetd.h" +#include "memb.h" +#include "shell.h" + +#include + +#define ISO_nl 0x0a +#define ISO_cr 0x0d + +struct telnetd_line { + char line[TELNETD_CONF_LINELEN]; +}; +MEMB(linemem, struct telnetd_line, TELNETD_CONF_NUMLINES); + +#define STATE_NORMAL 0 +#define STATE_IAC 1 +#define STATE_WILL 2 +#define STATE_WONT 3 +#define STATE_DO 4 +#define STATE_DONT 5 +#define STATE_CLOSE 6 + +static struct telnetd_state s; + +#define TELNET_IAC 255 +#define TELNET_WILL 251 +#define TELNET_WONT 252 +#define TELNET_DO 253 +#define TELNET_DONT 254 +/*---------------------------------------------------------------------------*/ +static char * +alloc_line(void) +{ + return memb_alloc(&linemem); +} +/*---------------------------------------------------------------------------*/ +static void +dealloc_line(char *line) +{ + memb_free(&linemem, line); +} +/*---------------------------------------------------------------------------*/ +void +shell_quit(char *str) +{ + s.state = STATE_CLOSE; +} +/*---------------------------------------------------------------------------*/ +static void +sendline(char *line) +{ + static unsigned int i; + + for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) { + if(s.lines[i] == NULL) { + s.lines[i] = line; + break; + } + } + if(i == TELNETD_CONF_NUMLINES) { + dealloc_line(line); + } +} +/*---------------------------------------------------------------------------*/ +void +shell_prompt(char *str) +{ + char *line; + line = alloc_line(); + if(line != NULL) { + strncpy(line, str, TELNETD_CONF_LINELEN); + /* petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/ + sendline(line); + } +} +/*---------------------------------------------------------------------------*/ +void +shell_output(char *str1, char *str2) +{ + static unsigned len; + char *line; + + line = alloc_line(); + if(line != NULL) { + len = strlen(str1); + strncpy(line, str1, TELNETD_CONF_LINELEN); + if(len < TELNETD_CONF_LINELEN) { + strncpy(line + len, str2, TELNETD_CONF_LINELEN - len); + } + len = strlen(line); + if(len < TELNETD_CONF_LINELEN - 2) { + line[len] = ISO_cr; + line[len+1] = ISO_nl; + line[len+2] = 0; + } + /* petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/ + sendline(line); + } +} +/*---------------------------------------------------------------------------*/ +void +telnetd_init(void) +{ + uip_listen(HTONS(23)); + memb_init(&linemem); + shell_init(); +} +/*---------------------------------------------------------------------------*/ +static void +acked(void) +{ + static unsigned int i; + + while(s.numsent > 0) { + dealloc_line(s.lines[0]); + for(i = 1; i < TELNETD_CONF_NUMLINES; ++i) { + s.lines[i - 1] = s.lines[i]; + } + s.lines[TELNETD_CONF_NUMLINES - 1] = NULL; + --s.numsent; + } +} +/*---------------------------------------------------------------------------*/ +static void +senddata(void) +{ + static char *bufptr, *lineptr; + static int buflen, linelen; + + bufptr = uip_appdata; + buflen = 0; + for(s.numsent = 0; s.numsent < TELNETD_CONF_NUMLINES && + s.lines[s.numsent] != NULL ; ++s.numsent) { + lineptr = s.lines[s.numsent]; + linelen = strlen(lineptr); + if(linelen > TELNETD_CONF_LINELEN) { + linelen = TELNETD_CONF_LINELEN; + } + if(buflen + linelen < uip_mss()) { + memcpy(bufptr, lineptr, linelen); + bufptr += linelen; + buflen += linelen; + } else { + break; + } + } + uip_send(uip_appdata, buflen); +} +/*---------------------------------------------------------------------------*/ +static void +closed(void) +{ + static unsigned int i; + + for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) { + if(s.lines[i] != NULL) { + dealloc_line(s.lines[i]); + } + } +} +/*---------------------------------------------------------------------------*/ +static void +get_char(u8_t c) +{ + if(c == ISO_cr) { + return; + } + + s.buf[(int)s.bufptr] = c; + if(s.buf[(int)s.bufptr] == ISO_nl || + s.bufptr == sizeof(s.buf) - 1) { + if(s.bufptr > 0) { + s.buf[(int)s.bufptr] = 0; + /* petsciiconv_topetscii(s.buf, TELNETD_CONF_LINELEN);*/ + } + shell_input(s.buf); + s.bufptr = 0; + } else { + ++s.bufptr; + } +} +/*---------------------------------------------------------------------------*/ +static void +sendopt(u8_t option, u8_t value) +{ + char *line; + line = alloc_line(); + if(line != NULL) { + line[0] = TELNET_IAC; + line[1] = option; + line[2] = value; + line[3] = 0; + sendline(line); + } +} +/*---------------------------------------------------------------------------*/ +static void +newdata(void) +{ + u16_t len; + u8_t c; + char *dataptr; + + + len = uip_datalen(); + dataptr = (char *)uip_appdata; + + while(len > 0 && s.bufptr < sizeof(s.buf)) { + c = *dataptr; + ++dataptr; + --len; + switch(s.state) { + case STATE_IAC: + if(c == TELNET_IAC) { + get_char(c); + s.state = STATE_NORMAL; + } else { + switch(c) { + case TELNET_WILL: + s.state = STATE_WILL; + break; + case TELNET_WONT: + s.state = STATE_WONT; + break; + case TELNET_DO: + s.state = STATE_DO; + break; + case TELNET_DONT: + s.state = STATE_DONT; + break; + default: + s.state = STATE_NORMAL; + break; + } + } + break; + case STATE_WILL: + /* Reply with a DONT */ + sendopt(TELNET_DONT, c); + s.state = STATE_NORMAL; + break; + + case STATE_WONT: + /* Reply with a DONT */ + sendopt(TELNET_DONT, c); + s.state = STATE_NORMAL; + break; + case STATE_DO: + /* Reply with a WONT */ + sendopt(TELNET_WONT, c); + s.state = STATE_NORMAL; + break; + case STATE_DONT: + /* Reply with a WONT */ + sendopt(TELNET_WONT, c); + s.state = STATE_NORMAL; + break; + case STATE_NORMAL: + if(c == TELNET_IAC) { + s.state = STATE_IAC; + } else { + get_char(c); + } + break; + } + + + } + +} +/*---------------------------------------------------------------------------*/ +void +telnetd_appcall(void) +{ + static unsigned int i; + if(uip_connected()) { + /* tcp_markconn(uip_conn, &s);*/ + for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) { + s.lines[i] = NULL; + } + s.bufptr = 0; + s.state = STATE_NORMAL; + + shell_start(); + } + + if(s.state == STATE_CLOSE) { + s.state = STATE_NORMAL; + uip_close(); + return; + } + + if(uip_closed() || + uip_aborted() || + uip_timedout()) { + closed(); + } + + if(uip_acked()) { + acked(); + } + + if(uip_newdata()) { + newdata(); + } + + if(uip_rexmit() || + uip_newdata() || + uip_acked() || + uip_connected() || + uip_poll()) { + senddata(); + } +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/apps/telnetd/telnetd.h b/components/net/uip/apps/telnetd/telnetd.h new file mode 100644 index 0000000000000000000000000000000000000000..2ee8acdb2de555114829d8cbfedc921709f4c24d --- /dev/null +++ b/components/net/uip/apps/telnetd/telnetd.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2003, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack + * + * $Id: telnetd.h,v 1.2 2006/06/07 09:43:54 adam Exp $ + * + */ +#ifndef __TELNETD_H__ +#define __TELNETD_H__ + +#include "uipopt.h" + +void telnetd_appcall(void); + +#ifndef TELNETD_CONF_LINELEN +#define TELNETD_CONF_LINELEN 40 +#endif +#ifndef TELNETD_CONF_NUMLINES +#define TELNETD_CONF_NUMLINES 16 +#endif + +struct telnetd_state { + char *lines[TELNETD_CONF_NUMLINES]; + char buf[TELNETD_CONF_LINELEN]; + char bufptr; + u8_t numsent; + u8_t state; +}; + +typedef struct telnetd_state uip_tcp_appstate_t; + +#ifndef UIP_APPCALL +#define UIP_APPCALL telnetd_appcall +#endif + +#endif /* __TELNETD_H__ */ diff --git a/components/net/uip/apps/telnetd/uip_shell.c b/components/net/uip/apps/telnetd/uip_shell.c new file mode 100644 index 0000000000000000000000000000000000000000..09bf3fa21161ffb3c28f75283cd4dd35e93039e3 --- /dev/null +++ b/components/net/uip/apps/telnetd/uip_shell.c @@ -0,0 +1,123 @@ + /* + * Copyright (c) 2003, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: shell.c,v 1.1 2006/06/07 09:43:54 adam Exp $ + * + */ + +#include "uip_shell.h" + +#include + +struct ptentry { + char *commandstr; + void (* pfunc)(char *str); +}; + +#define SHELL_PROMPT "uIP 1.0> " + +/*---------------------------------------------------------------------------*/ +static void +parse(register char *str, struct ptentry *t) +{ + struct ptentry *p; + for(p = t; p->commandstr != NULL; ++p) { + if(strncmp(p->commandstr, str, strlen(p->commandstr)) == 0) { + break; + } + } + + p->pfunc(str); +} +/*---------------------------------------------------------------------------*/ +static void +inttostr(register char *str, unsigned int i) +{ + str[0] = '0' + i / 100; + if(str[0] == '0') { + str[0] = ' '; + } + str[1] = '0' + (i / 10) % 10; + if(str[0] == ' ' && str[1] == '0') { + str[1] = ' '; + } + str[2] = '0' + i % 10; + str[3] = ' '; + str[4] = 0; +} +/*---------------------------------------------------------------------------*/ +static void +help(char *str) +{ + shell_output("Available commands:", ""); + shell_output("stats - show network statistics", ""); + shell_output("conn - show TCP connections", ""); + shell_output("help, ? - show help", ""); + shell_output("exit - exit shell", ""); +} +/*---------------------------------------------------------------------------*/ +static void +unknown(char *str) +{ + if(strlen(str) > 0) { + shell_output("Unknown command: ", str); + } +} +/*---------------------------------------------------------------------------*/ +static struct ptentry parsetab[] = + {{"stats", help}, + {"conn", help}, + {"help", help}, + {"exit", shell_quit}, + {"?", help}, + + /* Default action */ + {NULL, unknown}}; +/*---------------------------------------------------------------------------*/ +void +shell_init(void) +{ +} +/*---------------------------------------------------------------------------*/ +void +shell_start(void) +{ + shell_output("uIP command shell", ""); + shell_output("Type '?' and return for help", ""); + shell_prompt(SHELL_PROMPT); +} +/*---------------------------------------------------------------------------*/ +void +shell_input(char *cmd) +{ + parse(cmd, parsetab); + shell_prompt(SHELL_PROMPT); +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/apps/telnetd/uip_shell.h b/components/net/uip/apps/telnetd/uip_shell.h new file mode 100644 index 0000000000000000000000000000000000000000..b57d7be2934e457df3d5c54e49d0ec8c1dd65773 --- /dev/null +++ b/components/net/uip/apps/telnetd/uip_shell.h @@ -0,0 +1,104 @@ +/** + * \file + * Interface for the Contiki shell. + * \author Adam Dunkels + * + * Some of the functions declared in this file must be implemented as + * a shell back-end in the architecture specific files of a Contiki + * port. + */ + + +/* + * Copyright (c) 2003, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the Contiki desktop OS. + * + * $Id: shell.h,v 1.1 2006/06/07 09:43:54 adam Exp $ + * + */ +#ifndef __SHELL_H__ +#define __SHELL_H__ + +/** + * Initialize the shell. + * + * Called when the shell front-end process starts. This function may + * be used to start listening for signals. + */ +void shell_init(void); + +/** + * Start the shell back-end. + * + * Called by the front-end when a new shell is started. + */ +void shell_start(void); + +/** + * Process a shell command. + * + * This function will be called by the shell GUI / telnet server whan + * a command has been entered that should be processed by the shell + * back-end. + * + * \param command The command to be processed. + */ +void shell_input(char *command); + +/** + * Quit the shell. + * + */ +void shell_quit(char *); + + +/** + * Print a string to the shell window. + * + * This function is implemented by the shell GUI / telnet server and + * can be called by the shell back-end to output a string in the + * shell window. The string is automatically appended with a linebreak. + * + * \param str1 The first half of the string to be output. + * \param str2 The second half of the string to be output. + */ +void shell_output(char *str1, char *str2); + +/** + * Print a prompt to the shell window. + * + * This function can be used by the shell back-end to print out a + * prompt to the shell window. + * + * \param prompt The prompt to be printed. + * + */ +void shell_prompt(char *prompt); + +#endif /* __SHELL_H__ */ diff --git a/components/net/uip/apps/webclient/Makefile.webclient b/components/net/uip/apps/webclient/Makefile.webclient new file mode 100644 index 0000000000000000000000000000000000000000..e6e7f0828ac000984d56a64943f9c1f63b94ae7a --- /dev/null +++ b/components/net/uip/apps/webclient/Makefile.webclient @@ -0,0 +1 @@ +APP_SOURCES += webclient-strings.c webclient.c diff --git a/components/net/uip/apps/webclient/makestrings b/components/net/uip/apps/webclient/makestrings new file mode 100644 index 0000000000000000000000000000000000000000..6dec075dd3fda836e8e7af9644eb4493b472958b --- /dev/null +++ b/components/net/uip/apps/webclient/makestrings @@ -0,0 +1,40 @@ +#!/usr/bin/perl + + +sub stringify { + my $name = shift(@_); + open(OUTPUTC, "> $name.c"); + open(OUTPUTH, "> $name.h"); + + open(FILE, "$name"); + + while() { + if(/(.+) "(.+)"/) { + $var = $1; + $data = $2; + + $datan = $data; + $datan =~ s/\\r/\r/g; + $datan =~ s/\\n/\n/g; + $datan =~ s/\\01/\01/g; + $datan =~ s/\\0/\0/g; + + printf(OUTPUTC "const char $var\[%d] = \n", length($datan) + 1); + printf(OUTPUTC "/* \"$data\" */\n"); + printf(OUTPUTC "{"); + for($j = 0; $j < length($datan); $j++) { + printf(OUTPUTC "%#02x, ", unpack("C", substr($datan, $j, 1))); + } + printf(OUTPUTC "0 };\n"); + + printf(OUTPUTH "extern const char $var\[%d];\n", length($datan) + 1); + + } + } + close(OUTPUTC); + close(OUTPUTH); +} +stringify("webclient-strings"); + +exit 0; + diff --git a/components/net/uip/apps/webclient/webclient-strings b/components/net/uip/apps/webclient/webclient-strings new file mode 100644 index 0000000000000000000000000000000000000000..a331397238e3a7ce48fe085d31c46db2d481f164 --- /dev/null +++ b/components/net/uip/apps/webclient/webclient-strings @@ -0,0 +1,31 @@ +http_http "http://" +http_200 "200 " +http_301 "301 " +http_302 "302 " +http_get "GET " +http_10 "HTTP/1.0" +http_11 "HTTP/1.1" +http_content_type "content-type: " +http_texthtml "text/html" +http_location "location: " +http_host "host: " +http_crnl "\r\n" +http_index_html "/index.html" +http_404_html "/404.html" +http_content_type_html "Content-type: text/html\r\n\r\n" +http_content_type_css "Content-type: text/css\r\n\r\n" +http_content_type_text "Content-type: text/text\r\n\r\n" +http_content_type_png "Content-type: image/png\r\n\r\n" +http_content_type_gif "Content-type: image/gif\r\n\r\n" +http_content_type_jpg "Content-type: image/jpeg\r\n\r\n" +http_content_type_binary "Content-type: application/octet-stream\r\n\r\n" +http_html ".html" +http_shtml ".shtml" +http_htm ".htm" +http_css ".css" +http_png ".png" +http_gif ".gif" +http_jpg ".jpg" +http_text ".text" +http_txt ".txt" +http_user_agent_fields "Connection: close\r\nUser-Agent: uIP/1.0 (; http://www.sics.se/~adam/uip/)\r\n\r\n" diff --git a/components/net/uip/apps/webclient/webclient-strings.c b/components/net/uip/apps/webclient/webclient-strings.c new file mode 100644 index 0000000000000000000000000000000000000000..94723308e553bf64262b4e879f6e0ded61f170a6 --- /dev/null +++ b/components/net/uip/apps/webclient/webclient-strings.c @@ -0,0 +1,93 @@ +const char http_http[8] = +/* "http://" */ +{0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0 }; +const char http_200[5] = +/* "200 " */ +{0x32, 0x30, 0x30, 0x20, 0 }; +const char http_301[5] = +/* "301 " */ +{0x33, 0x30, 0x31, 0x20, 0 }; +const char http_302[5] = +/* "302 " */ +{0x33, 0x30, 0x32, 0x20, 0 }; +const char http_get[5] = +/* "GET " */ +{0x47, 0x45, 0x54, 0x20, 0 }; +const char http_10[9] = +/* "HTTP/1.0" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0 }; +const char http_11[9] = +/* "HTTP/1.1" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0 }; +const char http_content_type[15] = +/* "content-type: " */ +{0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0 }; +const char http_texthtml[10] = +/* "text/html" */ +{0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0 }; +const char http_location[11] = +/* "location: " */ +{0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0 }; +const char http_host[7] = +/* "host: " */ +{0x68, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0 }; +const char http_crnl[3] = +/* "\r\n" */ +{0xd, 0xa, 0 }; +const char http_index_html[12] = +/* "/index.html" */ +{0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0 }; +const char http_404_html[10] = +/* "/404.html" */ +{0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0 }; +const char http_content_type_html[28] = +/* "Content-type: text/html\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_content_type_css [27] = +/* "Content-type: text/css\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_content_type_text[28] = +/* "Content-type: text/text\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_content_type_png [28] = +/* "Content-type: image/png\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_content_type_gif [28] = +/* "Content-type: image/gif\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_content_type_jpg [29] = +/* "Content-type: image/jpeg\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x65, 0x67, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_content_type_binary[43] = +/* "Content-type: application/octet-stream\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_html[6] = +/* ".html" */ +{0x2e, 0x68, 0x74, 0x6d, 0x6c, 0 }; +const char http_shtml[7] = +/* ".shtml" */ +{0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0 }; +const char http_htm[5] = +/* ".htm" */ +{0x2e, 0x68, 0x74, 0x6d, 0 }; +const char http_css[5] = +/* ".css" */ +{0x2e, 0x63, 0x73, 0x73, 0 }; +const char http_png[5] = +/* ".png" */ +{0x2e, 0x70, 0x6e, 0x67, 0 }; +const char http_gif[5] = +/* ".gif" */ +{0x2e, 0x67, 0x69, 0x66, 0 }; +const char http_jpg[5] = +/* ".jpg" */ +{0x2e, 0x6a, 0x70, 0x67, 0 }; +const char http_text[6] = +/* ".text" */ +{0x2e, 0x74, 0x65, 0x78, 0x74, 0 }; +const char http_txt[5] = +/* ".txt" */ +{0x2e, 0x74, 0x78, 0x74, 0 }; +const char http_user_agent_fields[77] = +/* "Connection: close\r\nUser-Agent: uIP/1.0 (; http://www.sics.se/~adam/uip/)\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x28, 0x3b, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0x29, 0xd, 0xa, 0xd, 0xa, 0 }; diff --git a/components/net/uip/apps/webclient/webclient-strings.h b/components/net/uip/apps/webclient/webclient-strings.h new file mode 100644 index 0000000000000000000000000000000000000000..9e3ec93472c4b08eb45b3b97a5a8b8d0e110e426 --- /dev/null +++ b/components/net/uip/apps/webclient/webclient-strings.h @@ -0,0 +1,31 @@ +extern const char http_http[8]; +extern const char http_200[5]; +extern const char http_301[5]; +extern const char http_302[5]; +extern const char http_get[5]; +extern const char http_10[9]; +extern const char http_11[9]; +extern const char http_content_type[15]; +extern const char http_texthtml[10]; +extern const char http_location[11]; +extern const char http_host[7]; +extern const char http_crnl[3]; +extern const char http_index_html[12]; +extern const char http_404_html[10]; +extern const char http_content_type_html[28]; +extern const char http_content_type_css [27]; +extern const char http_content_type_text[28]; +extern const char http_content_type_png [28]; +extern const char http_content_type_gif [28]; +extern const char http_content_type_jpg [29]; +extern const char http_content_type_binary[43]; +extern const char http_html[6]; +extern const char http_shtml[7]; +extern const char http_htm[5]; +extern const char http_css[5]; +extern const char http_png[5]; +extern const char http_gif[5]; +extern const char http_jpg[5]; +extern const char http_text[6]; +extern const char http_txt[5]; +extern const char http_user_agent_fields[77]; diff --git a/components/net/uip/apps/webclient/webclient.c b/components/net/uip/apps/webclient/webclient.c new file mode 100644 index 0000000000000000000000000000000000000000..746c008c33afe8933d507c82d3209d81c516d495 --- /dev/null +++ b/components/net/uip/apps/webclient/webclient.c @@ -0,0 +1,439 @@ +/** + * \addtogroup apps + * @{ + */ + +/** + * \defgroup webclient Web client + * @{ + * + * This example shows a HTTP client that is able to download web pages + * and files from web servers. It requires a number of callback + * functions to be implemented by the module that utilizes the code: + * webclient_datahandler(), webclient_connected(), + * webclient_timedout(), webclient_aborted(), webclient_closed(). + */ + +/** + * \file + * Implementation of the HTTP client. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2002, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: webclient.c,v 1.2 2006/06/11 21:46:37 adam Exp $ + * + */ + +#include "uip.h" +#include "uiplib.h" +#include "webclient.h" +#include "resolv.h" + +#include + +#define WEBCLIENT_TIMEOUT 100 + +#define WEBCLIENT_STATE_STATUSLINE 0 +#define WEBCLIENT_STATE_HEADERS 1 +#define WEBCLIENT_STATE_DATA 2 +#define WEBCLIENT_STATE_CLOSE 3 + +#define HTTPFLAG_NONE 0 +#define HTTPFLAG_OK 1 +#define HTTPFLAG_MOVED 2 +#define HTTPFLAG_ERROR 3 + + +#define ISO_nl 0x0a +#define ISO_cr 0x0d +#define ISO_space 0x20 + + +static struct webclient_state s; + +/*-----------------------------------------------------------------------------------*/ +char * +webclient_mimetype(void) +{ + return s.mimetype; +} +/*-----------------------------------------------------------------------------------*/ +char * +webclient_filename(void) +{ + return s.file; +} +/*-----------------------------------------------------------------------------------*/ +char * +webclient_hostname(void) +{ + return s.host; +} +/*-----------------------------------------------------------------------------------*/ +unsigned short +webclient_port(void) +{ + return s.port; +} +/*-----------------------------------------------------------------------------------*/ +void +webclient_init(void) +{ + +} +/*-----------------------------------------------------------------------------------*/ +static void +init_connection(void) +{ + s.state = WEBCLIENT_STATE_STATUSLINE; + + s.getrequestleft = sizeof(http_get) - 1 + 1 + + sizeof(http_10) - 1 + + sizeof(http_crnl) - 1 + + sizeof(http_host) - 1 + + sizeof(http_crnl) - 1 + + strlen(http_user_agent_fields) + + strlen(s.file) + strlen(s.host); + s.getrequestptr = 0; + + s.httpheaderlineptr = 0; +} +/*-----------------------------------------------------------------------------------*/ +void +webclient_close(void) +{ + s.state = WEBCLIENT_STATE_CLOSE; +} +/*-----------------------------------------------------------------------------------*/ +unsigned char +webclient_get(char *host, u16_t port, char *file) +{ + struct uip_conn *conn; + uip_ipaddr_t *ipaddr; + static uip_ipaddr_t addr; + + /* First check if the host is an IP address. */ + ipaddr = &addr; + if(uiplib_ipaddrconv(host, (unsigned char *)addr) == 0) { + ipaddr = (uip_ipaddr_t *)resolv_lookup(host); + + if(ipaddr == NULL) { + return 0; + } + } + + conn = uip_connect(ipaddr, htons(port)); + + if(conn == NULL) { + return 0; + } + + s.port = port; + strncpy(s.file, file, sizeof(s.file)); + strncpy(s.host, host, sizeof(s.host)); + + init_connection(); + return 1; +} +/*-----------------------------------------------------------------------------------*/ +static unsigned char * +copy_string(unsigned char *dest, + const unsigned char *src, unsigned char len) +{ + strncpy(dest, src, len); + return dest + len; +} +/*-----------------------------------------------------------------------------------*/ +static void +senddata(void) +{ + u16_t len; + char *getrequest; + char *cptr; + + if(s.getrequestleft > 0) { + cptr = getrequest = (char *)uip_appdata; + + cptr = copy_string(cptr, http_get, sizeof(http_get) - 1); + cptr = copy_string(cptr, s.file, strlen(s.file)); + *cptr++ = ISO_space; + cptr = copy_string(cptr, http_10, sizeof(http_10) - 1); + + cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1); + + cptr = copy_string(cptr, http_host, sizeof(http_host) - 1); + cptr = copy_string(cptr, s.host, strlen(s.host)); + cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1); + + cptr = copy_string(cptr, http_user_agent_fields, + strlen(http_user_agent_fields)); + + len = s.getrequestleft > uip_mss()? + uip_mss(): + s.getrequestleft; + uip_send(&(getrequest[s.getrequestptr]), len); + } +} +/*-----------------------------------------------------------------------------------*/ +static void +acked(void) +{ + u16_t len; + + if(s.getrequestleft > 0) { + len = s.getrequestleft > uip_mss()? + uip_mss(): + s.getrequestleft; + s.getrequestleft -= len; + s.getrequestptr += len; + } +} +/*-----------------------------------------------------------------------------------*/ +static u16_t +parse_statusline(u16_t len) +{ + char *cptr; + + while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) { + s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata; + ++((char *)uip_appdata); + --len; + if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) { + + if((strncmp(s.httpheaderline, http_10, + sizeof(http_10) - 1) == 0) || + (strncmp(s.httpheaderline, http_11, + sizeof(http_11) - 1) == 0)) { + cptr = &(s.httpheaderline[9]); + s.httpflag = HTTPFLAG_NONE; + if(strncmp(cptr, http_200, sizeof(http_200) - 1) == 0) { + /* 200 OK */ + s.httpflag = HTTPFLAG_OK; + } else if(strncmp(cptr, http_301, sizeof(http_301) - 1) == 0 || + strncmp(cptr, http_302, sizeof(http_302) - 1) == 0) { + /* 301 Moved permanently or 302 Found. Location: header line + will contain thw new location. */ + s.httpflag = HTTPFLAG_MOVED; + } else { + s.httpheaderline[s.httpheaderlineptr - 1] = 0; + } + } else { + uip_abort(); + webclient_aborted(); + return 0; + } + + /* We're done parsing the status line, so we reset the pointer + and start parsing the HTTP headers.*/ + s.httpheaderlineptr = 0; + s.state = WEBCLIENT_STATE_HEADERS; + break; + } else { + ++s.httpheaderlineptr; + } + } + return len; +} +/*-----------------------------------------------------------------------------------*/ +static char +casecmp(char *str1, const char *str2, char len) +{ + static char c; + + while(len > 0) { + c = *str1; + /* Force lower-case characters. */ + if(c & 0x40) { + c |= 0x20; + } + if(*str2 != c) { + return 1; + } + ++str1; + ++str2; + --len; + } + return 0; +} +/*-----------------------------------------------------------------------------------*/ +static u16_t +parse_headers(u16_t len) +{ + char *cptr; + static unsigned char i; + + while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) { + s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata; + ++((char *)uip_appdata); + --len; + if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) { + /* We have an entire HTTP header line in s.httpheaderline, so + we parse it. */ + if(s.httpheaderline[0] == ISO_cr) { + /* This was the last header line (i.e., and empty "\r\n"), so + we are done with the headers and proceed with the actual + data. */ + s.state = WEBCLIENT_STATE_DATA; + return len; + } + + s.httpheaderline[s.httpheaderlineptr - 1] = 0; + /* Check for specific HTTP header fields. */ + if(casecmp(s.httpheaderline, http_content_type, + sizeof(http_content_type) - 1) == 0) { + /* Found Content-type field. */ + cptr = strchr(s.httpheaderline, ';'); + if(cptr != NULL) { + *cptr = 0; + } + strncpy(s.mimetype, s.httpheaderline + + sizeof(http_content_type) - 1, sizeof(s.mimetype)); + } else if(casecmp(s.httpheaderline, http_location, + sizeof(http_location) - 1) == 0) { + cptr = s.httpheaderline + + sizeof(http_location) - 1; + + if(strncmp(cptr, http_http, 7) == 0) { + cptr += 7; + for(i = 0; i < s.httpheaderlineptr - 7; ++i) { + if(*cptr == 0 || + *cptr == '/' || + *cptr == ' ' || + *cptr == ':') { + s.host[i] = 0; + break; + } + s.host[i] = *cptr; + ++cptr; + } + } + strncpy(s.file, cptr, sizeof(s.file)); + /* s.file[s.httpheaderlineptr - i] = 0;*/ + } + + + /* We're done parsing, so we reset the pointer and start the + next line. */ + s.httpheaderlineptr = 0; + } else { + ++s.httpheaderlineptr; + } + } + return len; +} +/*-----------------------------------------------------------------------------------*/ +static void +newdata(void) +{ + u16_t len; + + len = uip_datalen(); + + if(s.state == WEBCLIENT_STATE_STATUSLINE) { + len = parse_statusline(len); + } + + if(s.state == WEBCLIENT_STATE_HEADERS && len > 0) { + len = parse_headers(len); + } + + if(len > 0 && s.state == WEBCLIENT_STATE_DATA && + s.httpflag != HTTPFLAG_MOVED) { + webclient_datahandler((char *)uip_appdata, len); + } +} +/*-----------------------------------------------------------------------------------*/ +void +webclient_appcall(void) +{ + if(uip_connected()) { + s.timer = 0; + s.state = WEBCLIENT_STATE_STATUSLINE; + senddata(); + webclient_connected(); + return; + } + + if(s.state == WEBCLIENT_STATE_CLOSE) { + webclient_closed(); + uip_abort(); + return; + } + + if(uip_aborted()) { + webclient_aborted(); + } + if(uip_timedout()) { + webclient_timedout(); + } + + + if(uip_acked()) { + s.timer = 0; + acked(); + } + if(uip_newdata()) { + s.timer = 0; + newdata(); + } + if(uip_rexmit() || + uip_newdata() || + uip_acked()) { + senddata(); + } else if(uip_poll()) { + ++s.timer; + if(s.timer == WEBCLIENT_TIMEOUT) { + webclient_timedout(); + uip_abort(); + return; + } + /* senddata();*/ + } + + if(uip_closed()) { + if(s.httpflag != HTTPFLAG_MOVED) { + /* Send NULL data to signal EOF. */ + webclient_datahandler(NULL, 0); + } else { + if(resolv_lookup(s.host) == NULL) { + resolv_query(s.host); + } + webclient_get(s.host, s.port, s.file); + } + } +} +/*-----------------------------------------------------------------------------------*/ + +/** @} */ +/** @} */ diff --git a/components/net/uip/apps/webclient/webclient.h b/components/net/uip/apps/webclient/webclient.h new file mode 100644 index 0000000000000000000000000000000000000000..44cb95caf8ecd5462ebf95264f35b2bc4f375d1b --- /dev/null +++ b/components/net/uip/apps/webclient/webclient.h @@ -0,0 +1,228 @@ +/** + * \addtogroup webclient + * @{ + */ + +/** + * \file + * Header file for the HTTP client. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2002, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: webclient.h,v 1.2 2006/06/11 21:46:37 adam Exp $ + * + */ +#ifndef __WEBCLIENT_H__ +#define __WEBCLIENT_H__ + + +#include "webclient-strings.h" +#include "uipopt.h" + +#define WEBCLIENT_CONF_MAX_URLLEN 100 + +struct webclient_state { + u8_t timer; + u8_t state; + u8_t httpflag; + + u16_t port; + char host[40]; + char file[WEBCLIENT_CONF_MAX_URLLEN]; + u16_t getrequestptr; + u16_t getrequestleft; + + char httpheaderline[200]; + u16_t httpheaderlineptr; + + char mimetype[32]; +}; + +typedef struct webclient_state uip_tcp_appstate_t; +#define UIP_APPCALL webclient_appcall + +/** + * Callback function that is called from the webclient code when HTTP + * data has been received. + * + * This function must be implemented by the module that uses the + * webclient code. The function is called from the webclient module + * when HTTP data has been received. The function is not called when + * HTTP headers are received, only for the actual data. + * + * \note This function is called many times, repetedly, when data is + * being received, and not once when all data has been received. + * + * \param data A pointer to the data that has been received. + * \param len The length of the data that has been received. + */ +void webclient_datahandler(char *data, u16_t len); + +/** + * Callback function that is called from the webclient code when the + * HTTP connection has been connected to the web server. + * + * This function must be implemented by the module that uses the + * webclient code. + */ +void webclient_connected(void); + +/** + * Callback function that is called from the webclient code if the + * HTTP connection to the web server has timed out. + * + * This function must be implemented by the module that uses the + * webclient code. + */ +void webclient_timedout(void); + +/** + * Callback function that is called from the webclient code if the + * HTTP connection to the web server has been aborted by the web + * server. + * + * This function must be implemented by the module that uses the + * webclient code. + */ +void webclient_aborted(void); + +/** + * Callback function that is called from the webclient code when the + * HTTP connection to the web server has been closed. + * + * This function must be implemented by the module that uses the + * webclient code. + */ +void webclient_closed(void); + + + +/** + * Initialize the webclient module. + */ +void webclient_init(void); + +/** + * Open an HTTP connection to a web server and ask for a file using + * the GET method. + * + * This function opens an HTTP connection to the specified web server + * and requests the specified file using the GET method. When the HTTP + * connection has been connected, the webclient_connected() callback + * function is called and when the HTTP data arrives the + * webclient_datahandler() callback function is called. + * + * The callback function webclient_timedout() is called if the web + * server could not be contacted, and the webclient_aborted() callback + * function is called if the HTTP connection is aborted by the web + * server. + * + * When the HTTP request has been completed and the HTTP connection is + * closed, the webclient_closed() callback function will be called. + * + * \note If the function is passed a host name, it must already be in + * the resolver cache in order for the function to connect to the web + * server. It is therefore up to the calling module to implement the + * resolver calls and the signal handler used for reporting a resolv + * query answer. + * + * \param host A pointer to a string containing either a host name or + * a numerical IP address in dotted decimal notation (e.g., 192.168.23.1). + * + * \param port The port number to which to connect, in host byte order. + * + * \param file A pointer to the name of the file to get. + * + * \retval 0 if the host name could not be found in the cache, or + * if a TCP connection could not be created. + * + * \retval 1 if the connection was initiated. + */ +unsigned char webclient_get(char *host, u16_t port, char *file); + +/** + * Close the currently open HTTP connection. + */ +void webclient_close(void); +void webclient_appcall(void); + +/** + * Obtain the MIME type of the current HTTP data stream. + * + * \return A pointer to a string contaning the MIME type. The string + * may be empty if no MIME type was reported by the web server. + */ +char *webclient_mimetype(void); + +/** + * Obtain the filename of the current HTTP data stream. + * + * The filename of an HTTP request may be changed by the web server, + * and may therefore not be the same as when the original GET request + * was made with webclient_get(). This function is used for obtaining + * the current filename. + * + * \return A pointer to the current filename. + */ +char *webclient_filename(void); + +/** + * Obtain the hostname of the current HTTP data stream. + * + * The hostname of the web server of an HTTP request may be changed + * by the web server, and may therefore not be the same as when the + * original GET request was made with webclient_get(). This function + * is used for obtaining the current hostname. + * + * \return A pointer to the current hostname. + */ +char *webclient_hostname(void); + +/** + * Obtain the port number of the current HTTP data stream. + * + * The port number of an HTTP request may be changed by the web + * server, and may therefore not be the same as when the original GET + * request was made with webclient_get(). This function is used for + * obtaining the current port number. + * + * \return The port number of the current HTTP data stream, in host byte order. + */ +unsigned short webclient_port(void); + + + +#endif /* __WEBCLIENT_H__ */ + +/** @} */ diff --git a/components/net/uip/apps/webserver/Makefile.webserver b/components/net/uip/apps/webserver/Makefile.webserver new file mode 100644 index 0000000000000000000000000000000000000000..7d3e086955298705ae62b1f442d40daec6750655 --- /dev/null +++ b/components/net/uip/apps/webserver/Makefile.webserver @@ -0,0 +1 @@ +APP_SOURCES += httpd.c http-strings.c httpd-fs.c httpd-cgi.c diff --git a/components/net/uip/apps/webserver/http-strings b/components/net/uip/apps/webserver/http-strings new file mode 100644 index 0000000000000000000000000000000000000000..d0b9121be85d986088f8509b13db13851fbbaa74 --- /dev/null +++ b/components/net/uip/apps/webserver/http-strings @@ -0,0 +1,35 @@ +http_http "http://" +http_200 "200 " +http_301 "301 " +http_302 "302 " +http_get "GET " +http_10 "HTTP/1.0" +http_11 "HTTP/1.1" +http_content_type "content-type: " +http_texthtml "text/html" +http_location "location: " +http_host "host: " +http_crnl "\r\n" +http_index_html "/index.html" +http_404_html "/404.html" +http_referer "Referer:" +http_header_200 "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" +http_header_404 "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" +http_content_type_plain "Content-type: text/plain\r\n\r\n" +http_content_type_html "Content-type: text/html\r\n\r\n" +http_content_type_css "Content-type: text/css\r\n\r\n" +http_content_type_text "Content-type: text/text\r\n\r\n" +http_content_type_png "Content-type: image/png\r\n\r\n" +http_content_type_gif "Content-type: image/gif\r\n\r\n" +http_content_type_jpg "Content-type: image/jpeg\r\n\r\n" +http_content_type_binary "Content-type: application/octet-stream\r\n\r\n" +http_html ".html" +http_shtml ".shtml" +http_htm ".htm" +http_css ".css" +http_png ".png" +http_gif ".gif" +http_jpg ".jpg" +http_text ".txt" +http_txt ".txt" + diff --git a/components/net/uip/apps/webserver/http-strings.c b/components/net/uip/apps/webserver/http-strings.c new file mode 100644 index 0000000000000000000000000000000000000000..0d822baf7e3dc4aab875d5df789a39b40cafe9d3 --- /dev/null +++ b/components/net/uip/apps/webserver/http-strings.c @@ -0,0 +1,102 @@ +const char http_http[8] = +/* "http://" */ +{0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, }; +const char http_200[5] = +/* "200 " */ +{0x32, 0x30, 0x30, 0x20, }; +const char http_301[5] = +/* "301 " */ +{0x33, 0x30, 0x31, 0x20, }; +const char http_302[5] = +/* "302 " */ +{0x33, 0x30, 0x32, 0x20, }; +const char http_get[5] = +/* "GET " */ +{0x47, 0x45, 0x54, 0x20, }; +const char http_10[9] = +/* "HTTP/1.0" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, }; +const char http_11[9] = +/* "HTTP/1.1" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, }; +const char http_content_type[15] = +/* "content-type: " */ +{0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, }; +const char http_texthtml[10] = +/* "text/html" */ +{0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_location[11] = +/* "location: " */ +{0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, }; +const char http_host[7] = +/* "host: " */ +{0x68, 0x6f, 0x73, 0x74, 0x3a, 0x20, }; +const char http_crnl[3] = +/* "\r\n" */ +{0xd, 0xa, }; +const char http_index_html[12] = +/* "/index.html" */ +{0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_404_html[10] = +/* "/404.html" */ +{0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_referer[9] = +/* "Referer:" */ +{0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, 0x3a, }; +const char http_header_200[84] = +/* "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, }; +const char http_header_404[91] = +/* "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x34, 0x30, 0x34, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, }; +const char http_content_type_plain[29] = +/* "Content-type: text/plain\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_html[28] = +/* "Content-type: text/html\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_css [27] = +/* "Content-type: text/css\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_text[28] = +/* "Content-type: text/text\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_png [28] = +/* "Content-type: image/png\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_gif [28] = +/* "Content-type: image/gif\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_jpg [29] = +/* "Content-type: image/jpeg\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x65, 0x67, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_binary[43] = +/* "Content-type: application/octet-stream\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xd, 0xa, 0xd, 0xa, }; +const char http_html[6] = +/* ".html" */ +{0x2e, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_shtml[7] = +/* ".shtml" */ +{0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_htm[5] = +/* ".htm" */ +{0x2e, 0x68, 0x74, 0x6d, }; +const char http_css[5] = +/* ".css" */ +{0x2e, 0x63, 0x73, 0x73, }; +const char http_png[5] = +/* ".png" */ +{0x2e, 0x70, 0x6e, 0x67, }; +const char http_gif[5] = +/* ".gif" */ +{0x2e, 0x67, 0x69, 0x66, }; +const char http_jpg[5] = +/* ".jpg" */ +{0x2e, 0x6a, 0x70, 0x67, }; +const char http_text[5] = +/* ".txt" */ +{0x2e, 0x74, 0x78, 0x74, }; +const char http_txt[5] = +/* ".txt" */ +{0x2e, 0x74, 0x78, 0x74, }; diff --git a/components/net/uip/apps/webserver/http-strings.h b/components/net/uip/apps/webserver/http-strings.h new file mode 100644 index 0000000000000000000000000000000000000000..f121dd73a8ff6e720d752dd1652b6b499b3d102a --- /dev/null +++ b/components/net/uip/apps/webserver/http-strings.h @@ -0,0 +1,34 @@ +extern const char http_http[8]; +extern const char http_200[5]; +extern const char http_301[5]; +extern const char http_302[5]; +extern const char http_get[5]; +extern const char http_10[9]; +extern const char http_11[9]; +extern const char http_content_type[15]; +extern const char http_texthtml[10]; +extern const char http_location[11]; +extern const char http_host[7]; +extern const char http_crnl[3]; +extern const char http_index_html[12]; +extern const char http_404_html[10]; +extern const char http_referer[9]; +extern const char http_header_200[84]; +extern const char http_header_404[91]; +extern const char http_content_type_plain[29]; +extern const char http_content_type_html[28]; +extern const char http_content_type_css [27]; +extern const char http_content_type_text[28]; +extern const char http_content_type_png [28]; +extern const char http_content_type_gif [28]; +extern const char http_content_type_jpg [29]; +extern const char http_content_type_binary[43]; +extern const char http_html[6]; +extern const char http_shtml[7]; +extern const char http_htm[5]; +extern const char http_css[5]; +extern const char http_png[5]; +extern const char http_gif[5]; +extern const char http_jpg[5]; +extern const char http_text[5]; +extern const char http_txt[5]; diff --git a/components/net/uip/apps/webserver/httpd-cgi.c b/components/net/uip/apps/webserver/httpd-cgi.c new file mode 100644 index 0000000000000000000000000000000000000000..62570359fbec1d0481df41a68933a33bfe24068b --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-cgi.c @@ -0,0 +1,203 @@ +/** + * \addtogroup httpd + * @{ + */ + +/** + * \file + * Web server script interface + * \author + * Adam Dunkels + * + */ + +/* + * Copyright (c) 2001-2006, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: httpd-cgi.c,v 1.2 2006/06/11 21:46:37 adam Exp $ + * + */ + +#include "uip.h" +#include "psock.h" +#include "httpd.h" +#include "httpd-cgi.h" +#include "httpd-fs.h" + +#include +#include + +HTTPD_CGI_CALL(file, "file-stats", file_stats); +HTTPD_CGI_CALL(tcp, "tcp-connections", tcp_stats); +HTTPD_CGI_CALL(net, "net-stats", net_stats); + +static const struct httpd_cgi_call *calls[] = { &file, &tcp, &net, NULL }; + +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(nullfunction(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +httpd_cgifunction +httpd_cgi(char *name) +{ + const struct httpd_cgi_call **f; + + /* Find the matching name in the table, return the function. */ + for(f = calls; *f != NULL; ++f) { + if(strncmp((*f)->name, name, strlen((*f)->name)) == 0) { + return (*f)->function; + } + } + return nullfunction; +} +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_file_stats(void *arg) +{ + char *f = (char *)arg; + return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, "%5u", httpd_fs_count(f)); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(file_stats(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + + PSOCK_GENERATOR_SEND(&s->sout, generate_file_stats, strchr(ptr, ' ') + 1); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static const char closed[] = /* "CLOSED",*/ +{0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0}; +static const char syn_rcvd[] = /* "SYN-RCVD",*/ +{0x53, 0x59, 0x4e, 0x2d, 0x52, 0x43, 0x56, + 0x44, 0}; +static const char syn_sent[] = /* "SYN-SENT",*/ +{0x53, 0x59, 0x4e, 0x2d, 0x53, 0x45, 0x4e, + 0x54, 0}; +static const char established[] = /* "ESTABLISHED",*/ +{0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48, + 0x45, 0x44, 0}; +static const char fin_wait_1[] = /* "FIN-WAIT-1",*/ +{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49, + 0x54, 0x2d, 0x31, 0}; +static const char fin_wait_2[] = /* "FIN-WAIT-2",*/ +{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49, + 0x54, 0x2d, 0x32, 0}; +static const char closing[] = /* "CLOSING",*/ +{0x43, 0x4c, 0x4f, 0x53, 0x49, + 0x4e, 0x47, 0}; +static const char time_wait[] = /* "TIME-WAIT,"*/ +{0x54, 0x49, 0x4d, 0x45, 0x2d, 0x57, 0x41, + 0x49, 0x54, 0}; +static const char last_ack[] = /* "LAST-ACK"*/ +{0x4c, 0x41, 0x53, 0x54, 0x2d, 0x41, 0x43, + 0x4b, 0}; + +static const char *states[] = { + closed, + syn_rcvd, + syn_sent, + established, + fin_wait_1, + fin_wait_2, + closing, + time_wait, + last_ack}; + + +static unsigned short +generate_tcp_stats(void *arg) +{ + struct uip_conn *conn; + struct httpd_state *s = (struct httpd_state *)arg; + + conn = &uip_conns[s->count]; + return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, + "%d%u.%u.%u.%u:%u%s%u%u%c %c\r\n", + htons(conn->lport), + htons(conn->ripaddr[0]) >> 8, + htons(conn->ripaddr[0]) & 0xff, + htons(conn->ripaddr[1]) >> 8, + htons(conn->ripaddr[1]) & 0xff, + htons(conn->rport), + states[conn->tcpstateflags & UIP_TS_MASK], + conn->nrtx, + conn->timer, + (uip_outstanding(conn))? '*':' ', + (uip_stopped(conn))? '!':' '); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(tcp_stats(struct httpd_state *s, char *ptr)) +{ + + PSOCK_BEGIN(&s->sout); + + for(s->count = 0; s->count < UIP_CONNS; ++s->count) { + if((uip_conns[s->count].tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) { + PSOCK_GENERATOR_SEND(&s->sout, generate_tcp_stats, s); + } + } + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_net_stats(void *arg) +{ + struct httpd_state *s = (struct httpd_state *)arg; + return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, + "%5u\n", ((uip_stats_t *)&uip_stat)[s->count]); +} + +static +PT_THREAD(net_stats(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + +#if UIP_STATISTICS + + for(s->count = 0; s->count < sizeof(uip_stat) / sizeof(uip_stats_t); + ++s->count) { + PSOCK_GENERATOR_SEND(&s->sout, generate_net_stats, s); + } + +#endif /* UIP_STATISTICS */ + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +/** @} */ diff --git a/components/net/uip/apps/webserver/httpd-cgi.h b/components/net/uip/apps/webserver/httpd-cgi.h new file mode 100644 index 0000000000000000000000000000000000000000..e6ba51e73ed67c1432a30d2148bc08be9f3b3105 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-cgi.h @@ -0,0 +1,84 @@ +/** + * \addtogroup httpd + * @{ + */ + +/** + * \file + * Web server script interface header file + * \author + * Adam Dunkels + * + */ + + + +/* + * Copyright (c) 2001, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: httpd-cgi.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ + +#ifndef __HTTPD_CGI_H__ +#define __HTTPD_CGI_H__ + +#include "psock.h" +#include "httpd.h" + +typedef PT_THREAD((* httpd_cgifunction)(struct httpd_state *, char *)); + +httpd_cgifunction httpd_cgi(char *name); + +struct httpd_cgi_call { + const char *name; + const httpd_cgifunction function; +}; + +/** + * \brief HTTPD CGI function declaration + * \param name The C variable name of the function + * \param str The string name of the function, used in the script file + * \param function A pointer to the function that implements it + * + * This macro is used for declaring a HTTPD CGI + * function. This function is then added to the list of + * HTTPD CGI functions with the httpd_cgi_add() function. + * + * \hideinitializer + */ +#define HTTPD_CGI_CALL(name, str, function) \ +static PT_THREAD(function(struct httpd_state *, char *)); \ +static const struct httpd_cgi_call name = {str, function} + +void httpd_cgi_init(void); +#endif /* __HTTPD_CGI_H__ */ + +/** @} */ diff --git a/components/net/uip/apps/webserver/httpd-fs.c b/components/net/uip/apps/webserver/httpd-fs.c new file mode 100644 index 0000000000000000000000000000000000000000..21185e87c7e7867c179385d54db27deb679d7183 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs.c @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * 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 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 file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fs.c,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ + +#include "httpd.h" +#include "httpd-fs.h" +#include "httpd-fsdata.h" + +#ifndef NULL +#define NULL 0 +#endif /* NULL */ + +#include "httpd-fsdata.c" + +#if HTTPD_FS_STATISTICS +static u16_t count[HTTPD_FS_NUMFILES]; +#endif /* HTTPD_FS_STATISTICS */ + +/*-----------------------------------------------------------------------------------*/ +static u8_t +httpd_fs_strcmp(const char *str1, const char *str2) +{ + u8_t i; + i = 0; + loop: + + if(str2[i] == 0 || + str1[i] == '\r' || + str1[i] == '\n') { + return 0; + } + + if(str1[i] != str2[i]) { + return 1; + } + + + ++i; + goto loop; +} +/*-----------------------------------------------------------------------------------*/ +int +httpd_fs_open(const char *name, struct httpd_fs_file *file) +{ +#if HTTPD_FS_STATISTICS + u16_t i = 0; +#endif /* HTTPD_FS_STATISTICS */ + struct httpd_fsdata_file_noconst *f; + + for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT; + f != NULL; + f = (struct httpd_fsdata_file_noconst *)f->next) { + + if(httpd_fs_strcmp(name, f->name) == 0) { + file->data = f->data; + file->len = f->len; +#if HTTPD_FS_STATISTICS + ++count[i]; +#endif /* HTTPD_FS_STATISTICS */ + return 1; + } +#if HTTPD_FS_STATISTICS + ++i; +#endif /* HTTPD_FS_STATISTICS */ + + } + return 0; +} +/*-----------------------------------------------------------------------------------*/ +void +httpd_fs_init(void) +{ +#if HTTPD_FS_STATISTICS + u16_t i; + for(i = 0; i < HTTPD_FS_NUMFILES; i++) { + count[i] = 0; + } +#endif /* HTTPD_FS_STATISTICS */ +} +/*-----------------------------------------------------------------------------------*/ +#if HTTPD_FS_STATISTICS +u16_t httpd_fs_count +(char *name) +{ + struct httpd_fsdata_file_noconst *f; + u16_t i; + + i = 0; + for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT; + f != NULL; + f = (struct httpd_fsdata_file_noconst *)f->next) { + + if(httpd_fs_strcmp(name, f->name) == 0) { + return count[i]; + } + ++i; + } + return 0; +} +#endif /* HTTPD_FS_STATISTICS */ +/*-----------------------------------------------------------------------------------*/ diff --git a/components/net/uip/apps/webserver/httpd-fs.h b/components/net/uip/apps/webserver/httpd-fs.h new file mode 100644 index 0000000000000000000000000000000000000000..d80ed3dff07b7dac29940c35fa90ebd4c04fe8dd --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * 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 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 file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fs.h,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ +#ifndef __HTTPD_FS_H__ +#define __HTTPD_FS_H__ + +#define HTTPD_FS_STATISTICS 1 + +struct httpd_fs_file { + char *data; + int len; +}; + +/* file must be allocated by caller and will be filled in + by the function. */ +int httpd_fs_open(const char *name, struct httpd_fs_file *file); + +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 +u16_t httpd_fs_count(char *name); +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ + +void httpd_fs_init(void); + +#endif /* __HTTPD_FS_H__ */ diff --git a/components/net/uip/apps/webserver/httpd-fs/404.html b/components/net/uip/apps/webserver/httpd-fs/404.html new file mode 100644 index 0000000000000000000000000000000000000000..a17711d02e1cb3f7ad8b74add3768e552860478c --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/404.html @@ -0,0 +1,8 @@ + + +
+

404 - file not found

+

Go here instead.

+
+ + \ No newline at end of file diff --git a/components/net/uip/apps/webserver/httpd-fs/fade.png b/components/net/uip/apps/webserver/httpd-fs/fade.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e69f75deda76937ede6e5d6d3bc94b8d43375e Binary files /dev/null and b/components/net/uip/apps/webserver/httpd-fs/fade.png differ diff --git a/components/net/uip/apps/webserver/httpd-fs/files.shtml b/components/net/uip/apps/webserver/httpd-fs/files.shtml new file mode 100644 index 0000000000000000000000000000000000000000..811e23032239a64bdfa3961c9c2b2e795d6a2753 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/files.shtml @@ -0,0 +1,35 @@ +%!: /header.html +

File statistics

+
+ + + + + + + + + + + + + + + +
/index.html%! file-stats /index.html +
/files.shtml%! file-stats /files.shtml +
/tcp.shtml%! file-stats /tcp.shtml +
/stats.shtml%! file-stats /stats.shtml +
/style.css%! file-stats /style.css +
/404.html%! file-stats /404.html +
/fade.png%! file-stats /fade.png +
+
+%!: /footer.html diff --git a/components/net/uip/apps/webserver/httpd-fs/footer.html b/components/net/uip/apps/webserver/httpd-fs/footer.html new file mode 100644 index 0000000000000000000000000000000000000000..1fd5f4f290d6227f9f2c19fe0f7d10523cc0a75b --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/footer.html @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/components/net/uip/apps/webserver/httpd-fs/header.html b/components/net/uip/apps/webserver/httpd-fs/header.html new file mode 100644 index 0000000000000000000000000000000000000000..7b1a1fe7ee3a6727aa2acf22e057d804fc24fdfa --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/header.html @@ -0,0 +1,18 @@ + + + + Welcome to the uIP web server! + + + + + + +
diff --git a/components/net/uip/apps/webserver/httpd-fs/index.html b/components/net/uip/apps/webserver/httpd-fs/index.html new file mode 100644 index 0000000000000000000000000000000000000000..27cbc93f5a1fe8a2751441a2fdbf47a7d0836dbd --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/index.html @@ -0,0 +1,29 @@ + + + + Welcome to the uIP web server! + + + + + + +
+

+ These web pages are served by a small web server running on top of + the uIP embedded TCP/IP + stack. +

+

+ Click on the links above for web server statistics. +

+ + + diff --git a/components/net/uip/apps/webserver/httpd-fs/processes.shtml b/components/net/uip/apps/webserver/httpd-fs/processes.shtml new file mode 100644 index 0000000000000000000000000000000000000000..2f93e35902c3f0cbab0ac0b10babd057cb20319d --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/processes.shtml @@ -0,0 +1,5 @@ +%!: /header.html +

System processes


+ +%! processes +%!: /footer.html \ No newline at end of file diff --git a/components/net/uip/apps/webserver/httpd-fs/stats.shtml b/components/net/uip/apps/webserver/httpd-fs/stats.shtml new file mode 100644 index 0000000000000000000000000000000000000000..c63ed4afd709b00293eba8b6868c0ddb6df39ea9 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/stats.shtml @@ -0,0 +1,31 @@ +%!: /header.html +

Network statistics

+
+
IDNamePriorityPoll handlerEvent handlerProcstate
+
+IP           Packets received
+             Packets sent
+	     Packets dropped
+IP errors    IP version/header length
+             IP length, high byte
+             IP length, low byte
+             IP fragments
+             Header checksum
+             Wrong protocol
+ICMP	     Packets received
+             Packets sent
+             Packets dropped
+             Type errors
+TCP          Packets received
+             Packets sent
+             Packets dropped
+             Checksum errors
+             Data packets without ACKs
+             Resets
+             Retransmissions
+	     No connection avaliable
+	     Connection attempts to closed ports
+
%! net-stats
+
+ +%!: /footer.html diff --git a/components/net/uip/apps/webserver/httpd-fs/style.css b/components/net/uip/apps/webserver/httpd-fs/style.css new file mode 100644 index 0000000000000000000000000000000000000000..ba6df7f1576738129ed68283f87a5a2913f0ab53 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/style.css @@ -0,0 +1,92 @@ +h1 +{ + text-align: center; + font-size:14pt; + font-family:arial,helvetica; + font-weight:bold; + padding:10px; +} + +body +{ + + background-color: #fffeec; + color:black; + + font-size:8pt; + font-family:arial,helvetica; +} + +.menu +{ + margin: 4px; + width:60%; + + padding:2px; + + border: solid 1px; + background-color: #fffcd2; + text-align:left; + + font-size:9pt; + font-family:arial,helvetica; +} + +div.menubox +{ + width: 25%; + border: 0; + float: left; +text-align: center; +} + +.contentblock +{ + margin: 4px; + width:60%; + + padding:2px; + + border: 1px dotted; + background-color: white; + + font-size:8pt; + font-family:arial,helvetica; + +} + +p.intro +{ + margin-left:20px; + margin-right:20px; + + font-size:10pt; +/* font-weight:bold; */ + font-family:arial,helvetica; +} + +p.clink +{ + font-size:12pt; + font-family:courier,monospace; + text-align:center; +} + +p.clink9 +{ + font-size:9pt; + font-family:courier,monospace; + text-align:center; +} + + +p +{ + padding-left:10px; +} + +p.right +{ + text-align:right; +} + diff --git a/components/net/uip/apps/webserver/httpd-fs/tcp.shtml b/components/net/uip/apps/webserver/httpd-fs/tcp.shtml new file mode 100644 index 0000000000000000000000000000000000000000..4c4bffe97f28b1b421ff3589de0ef1cee7cfa06d --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/tcp.shtml @@ -0,0 +1,5 @@ +%!: /header.html +

Current connections


+ +%! tcp-connections +%!: /footer.html \ No newline at end of file diff --git a/components/net/uip/apps/webserver/httpd-fsdata.c b/components/net/uip/apps/webserver/httpd-fsdata.c new file mode 100644 index 0000000000000000000000000000000000000000..491095ec3033d63128fab131e689e1f5134d907d --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fsdata.c @@ -0,0 +1,607 @@ +static const unsigned char data_processes_shtml[] = { + /* /processes.shtml */ + 0x2f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3c, 0x68, 0x31, + 0x3e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x70, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x3c, 0x2f, 0x68, + 0x31, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, + 0x31, 0x30, 0x30, 0x25, 0x22, 0x3e, 0xa, 0x3c, 0x74, 0x72, + 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x49, 0x44, 0x3c, 0x2f, 0x74, + 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x4e, 0x61, 0x6d, 0x65, + 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x50, + 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, + 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x50, 0x6f, 0x6c, 0x6c, + 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x3c, 0x2f, + 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, + 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x50, + 0x72, 0x6f, 0x63, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3c, 0x2f, + 0x74, 0x68, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x25, + 0x21, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, + 0x73, 0xa, 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x66, 0x6f, 0x6f, + 0x74, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0}; + +static const unsigned char data_404_html[] = { + /* /404.html */ + 0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x3c, + 0x62, 0x6f, 0x64, 0x79, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3d, 0x22, 0x77, 0x68, 0x69, 0x74, 0x65, 0x22, + 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x68, 0x31, 0x3e, 0x34, 0x30, 0x34, 0x20, 0x2d, + 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x2f, 0x68, 0x31, 0x3e, + 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x33, + 0x3e, 0x47, 0x6f, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, 0x68, 0x65, 0x72, 0x65, + 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, + 0x61, 0x64, 0x2e, 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, + 0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, +0}; + +static const unsigned char data_files_shtml[] = { + /* /files.shtml */ + 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3c, 0x68, 0x31, + 0x3e, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x31, + 0x3e, 0xa, 0x3c, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, + 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3d, 0x22, 0x33, 0x30, 0x30, 0x22, 0x3e, + 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, + 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, + 0x3e, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, + 0x6d, 0x6c, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0xa, 0x3c, 0x74, 0x64, 0x3e, 0x25, 0x21, 0x20, 0x66, + 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, + 0x6c, 0xa, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, + 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, + 0x22, 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, 0x70, 0x6e, 0x67, + 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x31, + 0x30, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x25, 0x21, + 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x61, 0x74, + 0x73, 0x20, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, + 0x74, 0x6d, 0x6c, 0xa, 0x3e, 0x20, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x3c, 0x74, 0x72, + 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x2f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, + 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0xa, + 0x3c, 0x74, 0x64, 0x3e, 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, + 0x65, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, 0x2f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, + 0xa, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, + 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, + 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x22, + 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x31, 0x30, + 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x25, 0x21, 0x20, + 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, + 0x20, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x68, + 0x74, 0x6d, 0x6c, 0xa, 0x3e, 0x20, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x3c, 0x74, 0x72, + 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x2f, 0x74, 0x63, 0x70, + 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0xa, 0x3c, 0x74, 0x64, 0x3e, + 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x20, 0x2f, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, + 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, + 0x70, 0x6e, 0x67, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x3d, 0x31, 0x30, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x3d, 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, + 0x74, 0x61, 0x74, 0x73, 0x20, 0x2f, 0x74, 0x63, 0x70, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3e, 0x20, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x3c, + 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x73, 0x74, 0x61, + 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, + 0x6d, 0x6c, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0xa, 0x3c, 0x74, 0x64, 0x3e, 0x25, 0x21, 0x20, 0x66, + 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, + 0x6d, 0x6c, 0xa, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, + 0x64, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, + 0x3d, 0x22, 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, 0x70, 0x6e, + 0x67, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, + 0x31, 0x30, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x25, + 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x61, + 0x74, 0x73, 0x20, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3e, 0x20, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x3c, + 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x73, 0x74, 0x79, + 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x3e, 0x2f, 0x73, + 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0x3c, 0x2f, + 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0xa, 0x3c, 0x74, + 0x64, 0x3e, 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, 0x2f, 0x73, 0x74, 0x79, + 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0xa, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x69, 0x6d, 0x67, + 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x66, 0x61, 0x64, + 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x3d, 0x31, 0x30, 0x20, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x3d, 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, + 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, 0x2f, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0xa, 0x3e, 0x20, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, + 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, + 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x34, + 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x2f, + 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x3c, 0x2f, + 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0xa, 0x3c, 0x74, + 0x64, 0x3e, 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, 0x2f, 0x34, 0x30, 0x34, + 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, + 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x66, 0x61, 0x64, 0x65, + 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x3d, 0x31, 0x30, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3d, 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, 0x2f, 0x34, 0x30, 0x34, + 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3e, 0x20, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x3c, + 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x66, 0x61, 0x64, + 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x3e, 0x2f, 0x66, 0x61, + 0x64, 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0xa, 0x3c, 0x74, 0x64, 0x3e, + 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x20, 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, + 0x70, 0x6e, 0x67, 0xa, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, + 0x74, 0x64, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, + 0x63, 0x3d, 0x22, 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, 0x70, + 0x6e, 0x67, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x3d, 0x31, 0x30, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, + 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x20, 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, + 0x70, 0x6e, 0x67, 0xa, 0x3e, 0x20, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x3c, 0x2f, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x3e, 0xa, 0x3c, 0x2f, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xa, 0x25, 0x21, 0x3a, 0x20, + 0x2f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2e, 0x68, 0x74, + 0x6d, 0x6c, 0xa, 0}; + +static const unsigned char data_footer_html[] = { + /* /footer.html */ + 0x2f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x20, 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xa, + 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0}; + +static const unsigned char data_header_html[] = { + /* /header.html */ + 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x57, 0x65, 0x6c, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x6f, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x49, 0x50, 0x20, 0x77, + 0x65, 0x62, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x21, + 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, + 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, + 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, + 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x3e, 0x20, + 0x20, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, + 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, + 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x23, + 0x66, 0x66, 0x66, 0x65, 0x65, 0x63, 0x22, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x3d, 0x22, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x22, + 0x3e, 0xa, 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6e, + 0x75, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, + 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, + 0x6e, 0x75, 0x62, 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, 0x46, + 0x72, 0x6f, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x3c, + 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6e, 0x75, 0x62, 0x6f, + 0x78, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x68, + 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x46, 0x69, 0x6c, 0x65, 0x20, + 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6e, 0x75, 0x62, + 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, + 0x64, 0x69, 0x76, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, + 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, + 0x65, 0x6e, 0x75, 0x62, 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, + 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0xa, 0x20, 0x20, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x62, 0x72, 0x3e, 0xa, 0x20, 0x20, 0x3c, + 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xa, 0x20, 0x20, 0xa, 0x20, + 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x3e, 0xa, 0}; + +static const unsigned char data_index_html[] = { + /* /index.html */ + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x57, 0x65, 0x6c, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x6f, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x49, 0x50, 0x20, 0x77, + 0x65, 0x62, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x21, + 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, + 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, + 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, + 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x3e, 0x20, + 0x20, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, + 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, + 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x23, + 0x66, 0x66, 0x66, 0x65, 0x65, 0x63, 0x22, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x3d, 0x22, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x22, + 0x3e, 0xa, 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6e, + 0x75, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, + 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, + 0x6e, 0x75, 0x62, 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, 0x46, + 0x72, 0x6f, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x3c, + 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6e, 0x75, 0x62, 0x6f, + 0x78, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x68, + 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x46, 0x69, 0x6c, 0x65, 0x20, + 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6e, 0x75, 0x62, + 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, + 0x64, 0x69, 0x76, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, + 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, + 0x65, 0x6e, 0x75, 0x62, 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, + 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0xa, 0x20, 0x20, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x62, 0x72, 0x3e, 0xa, 0x20, 0x20, 0x3c, + 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xa, 0xa, 0x20, 0x20, 0x3c, + 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x70, + 0x3e, 0xa, 0x20, 0x20, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, + 0x77, 0x65, 0x62, 0x20, 0x70, 0x61, 0x67, 0x65, 0x73, 0x20, + 0x61, 0x72, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, + 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x73, 0x6d, 0x61, 0x6c, + 0x6c, 0x20, 0x77, 0x65, 0x62, 0x20, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, + 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x70, 0x20, 0x6f, 0x66, + 0xa, 0x20, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, + 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, + 0x2f, 0x75, 0x69, 0x70, 0x2f, 0x22, 0x3e, 0x75, 0x49, 0x50, + 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x20, + 0x54, 0x43, 0x50, 0x2f, 0x49, 0x50, 0xa, 0x20, 0x20, 0x73, + 0x74, 0x61, 0x63, 0x6b, 0x3c, 0x2f, 0x61, 0x3e, 0x2e, 0xa, + 0x20, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0xa, 0x20, 0x20, 0x3c, + 0x70, 0x3e, 0xa, 0x20, 0x20, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, + 0x6e, 0x6b, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x77, 0x65, 0x62, 0x20, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0xa, 0x20, 0x20, 0x3c, + 0x2f, 0x70, 0x3e, 0xa, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x62, + 0x6f, 0x64, 0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, + 0x6c, 0x3e, 0xa, 0}; + +static const unsigned char data_style_css[] = { + /* /style.css */ + 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0, + 0x68, 0x31, 0x20, 0xa, 0x7b, 0xa, 0x20, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, + 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, + 0x31, 0x34, 0x70, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, + 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, + 0x61, 0x72, 0x69, 0x61, 0x6c, 0x2c, 0x68, 0x65, 0x6c, 0x76, + 0x65, 0x74, 0x69, 0x63, 0x61, 0x3b, 0xa, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x3a, 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x70, + 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x31, 0x30, 0x70, + 0x78, 0x3b, 0x20, 0xa, 0x7d, 0xa, 0xa, 0x62, 0x6f, 0x64, + 0x79, 0xa, 0x7b, 0xa, 0xa, 0x20, 0x20, 0x62, 0x61, 0x63, + 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x66, 0x66, 0x66, 0x65, + 0x65, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3a, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x3b, 0xa, 0xa, + 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, + 0x65, 0x3a, 0x38, 0x70, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, + 0x3a, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x2c, 0x68, 0x65, 0x6c, + 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x3b, 0xa, 0x7d, 0xa, + 0xa, 0x2e, 0x6d, 0x65, 0x6e, 0x75, 0xa, 0x7b, 0xa, 0x20, + 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x20, 0x34, + 0x70, 0x78, 0x3b, 0xa, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3a, 0x36, 0x30, 0x25, 0x3b, 0xa, 0xa, 0x20, 0x20, + 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x32, 0x70, + 0x78, 0x3b, 0xa, 0x9, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x3a, 0x20, 0x73, 0x6f, 0x6c, 0x69, 0x64, + 0x20, 0x31, 0x70, 0x78, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x61, + 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x66, 0x66, 0x66, + 0x63, 0x64, 0x32, 0x3b, 0xa, 0x20, 0x20, 0x74, 0x65, 0x78, + 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x6c, 0x65, + 0x66, 0x74, 0x3b, 0xa, 0x20, 0x20, 0xa, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x39, + 0x70, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, + 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x61, 0x72, + 0x69, 0x61, 0x6c, 0x2c, 0x68, 0x65, 0x6c, 0x76, 0x65, 0x74, + 0x69, 0x63, 0x61, 0x3b, 0x20, 0x20, 0xa, 0x7d, 0xa, 0xa, + 0x64, 0x69, 0x76, 0x2e, 0x6d, 0x65, 0x6e, 0x75, 0x62, 0x6f, + 0x78, 0xa, 0x7b, 0xa, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3a, 0x20, 0x32, 0x35, 0x25, 0x3b, 0xa, 0x20, 0x20, + 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x30, 0x3b, + 0xa, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x20, + 0x6c, 0x65, 0x66, 0x74, 0x3b, 0xa, 0x74, 0x65, 0x78, 0x74, + 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2e, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0xa, 0x7b, 0x20, 0x20, 0xa, 0x20, 0x20, 0x6d, + 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x20, 0x34, 0x70, 0x78, + 0x3b, 0xa, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, + 0x36, 0x30, 0x25, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x70, 0x61, + 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x32, 0x70, 0x78, 0x3b, + 0xa, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x3a, 0x20, 0x31, 0x70, 0x78, 0x20, 0x64, 0x6f, 0x74, 0x74, + 0x65, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, + 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3a, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3b, + 0xa, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, + 0x69, 0x7a, 0x65, 0x3a, 0x38, 0x70, 0x74, 0x3b, 0xa, 0x20, + 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, + 0x6c, 0x79, 0x3a, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x2c, 0x68, + 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x3b, 0x20, + 0x20, 0xa, 0xa, 0x7d, 0xa, 0xa, 0x70, 0x2e, 0x69, 0x6e, + 0x74, 0x72, 0x6f, 0xa, 0x7b, 0xa, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3a, + 0x32, 0x30, 0x70, 0x78, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x3a, 0x32, 0x30, 0x70, 0x78, 0x3b, 0xa, 0xa, 0x20, 0x20, + 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, + 0x31, 0x30, 0x70, 0x74, 0x3b, 0xa, 0x2f, 0x2a, 0x20, 0x20, + 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x3a, 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0x20, 0x2a, 0x2f, + 0xa, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x66, 0x61, + 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x61, 0x72, 0x69, 0x61, 0x6c, + 0x2c, 0x68, 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, + 0x3b, 0x20, 0x20, 0xa, 0x7d, 0xa, 0xa, 0x70, 0x2e, 0x63, + 0x6c, 0x69, 0x6e, 0x6b, 0xa, 0x7b, 0xa, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x31, + 0x32, 0x70, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x6e, + 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x63, + 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72, 0x2c, 0x6d, 0x6f, 0x6e, + 0x6f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x3b, 0x20, 0x20, 0xa, + 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3a, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, + 0xa, 0x7d, 0xa, 0xa, 0x70, 0x2e, 0x63, 0x6c, 0x69, 0x6e, + 0x6b, 0x39, 0xa, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x6e, + 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x39, 0x70, 0x74, + 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x66, + 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x63, 0x6f, 0x75, 0x72, + 0x69, 0x65, 0x72, 0x2c, 0x6d, 0x6f, 0x6e, 0x6f, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x3b, 0x20, 0x20, 0xa, 0x20, 0x20, 0x74, + 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0xa, 0x7d, 0xa, + 0xa, 0xa, 0x70, 0xa, 0x7b, 0xa, 0x20, 0x20, 0x70, 0x61, + 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x6c, 0x65, 0x66, 0x74, + 0x3a, 0x31, 0x30, 0x70, 0x78, 0x3b, 0xa, 0x7d, 0xa, 0xa, + 0x70, 0x2e, 0x72, 0x69, 0x67, 0x68, 0x74, 0xa, 0x7b, 0xa, + 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3a, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3b, 0x20, + 0xa, 0x7d, 0xa, 0xa, 0}; + +static const unsigned char data_tcp_shtml[] = { + /* /tcp.shtml */ + 0x2f, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3c, 0x68, 0x31, + 0x3e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x3c, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, 0x3e, 0xa, + 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, + 0x68, 0x3e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x3c, 0x2f, + 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, + 0x3e, 0x52, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x74, 0x68, + 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x54, 0x69, 0x6d, 0x65, 0x72, + 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x46, + 0x6c, 0x61, 0x67, 0x73, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, + 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x25, 0x21, 0x20, 0x74, 0x63, + 0x70, 0x2d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0xa, 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x66, + 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, +0}; + +static const unsigned char data_fade_png[] = { + /* /fade.png */ + 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, 0x70, 0x6e, 0x67, 0, + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 00, 00, + 00, 0xd, 0x49, 0x48, 0x44, 0x52, 00, 00, 00, 0x4, + 00, 00, 00, 0xa, 0x8, 0x2, 00, 00, 00, 0x1c, + 0x99, 0x68, 0x59, 00, 00, 00, 0x9, 0x70, 0x48, 0x59, + 0x73, 00, 00, 0xb, 0x13, 00, 00, 0xb, 0x13, 0x1, + 00, 0x9a, 0x9c, 0x18, 00, 00, 00, 0x7, 0x74, 0x49, + 0x4d, 0x45, 0x7, 0xd6, 0x6, 0x8, 0x14, 0x1b, 0x39, 0xaf, + 0x5b, 0xc0, 0xe3, 00, 00, 00, 0x1d, 0x74, 0x45, 0x58, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 00, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, + 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, + 0xef, 0x64, 0x25, 0x6e, 00, 00, 00, 0x3a, 0x49, 0x44, + 0x41, 0x54, 0x8, 0xd7, 0x75, 0x8c, 0x31, 0x12, 00, 0x10, + 0x10, 0xc4, 0x2e, 0x37, 0x9e, 0x40, 0x65, 0xfd, 0xff, 0x83, + 0xf4, 0xa, 0x1c, 0x8d, 0x54, 0x9b, 0xc9, 0xcc, 0x9a, 0x3d, + 0x90, 0x73, 0x71, 0x67, 0x91, 0xd4, 0x74, 0x36, 0xa9, 0x55, + 0x1, 0xf8, 0x29, 0x58, 0xc8, 0xbf, 0x48, 0xc4, 0x81, 0x74, + 0xb, 0xa3, 0xf, 0x7c, 0xdb, 0x4, 0xe8, 0x40, 0x5, 0xdf, + 0xa1, 0xf3, 0xfc, 0x73, 00, 00, 00, 00, 0x49, 0x45, + 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, 0}; + +static const unsigned char data_stats_shtml[] = { + /* /stats.shtml */ + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3c, 0x68, 0x31, + 0x3e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x3c, + 0x2f, 0x68, 0x31, 0x3e, 0xa, 0x3c, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x3e, 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x33, 0x30, + 0x30, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, + 0x22, 0x30, 0x22, 0x3e, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, + 0x74, 0x64, 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, 0xa, 0x49, + 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, + 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, + 0x73, 0x65, 0x6e, 0x74, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64, + 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xa, 0x49, 0x50, 0x20, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x20, 0x20, 0x20, 0x20, + 0x49, 0x50, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, + 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x68, + 0x69, 0x67, 0x68, 0x20, 0x62, 0x79, 0x74, 0x65, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x49, 0x50, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x2c, 0x20, 0x6c, 0x6f, 0x77, 0x20, 0x62, 0x79, 0x74, + 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, 0x66, 0x72, + 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0xa, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0xa, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x57, 0x72, 0x6f, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0xa, 0x49, 0x43, 0x4d, 0x50, 0x9, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xa, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64, + 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xa, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x54, 0x79, 0x70, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0xa, 0x54, 0x43, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xa, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64, + 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xa, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, + 0x61, 0x74, 0x61, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, + 0x41, 0x43, 0x4b, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, + 0x73, 0x65, 0x74, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x4e, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x76, 0x61, 0x6c, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x20, + 0x74, 0x6f, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x20, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0xa, 0x3c, 0x2f, 0x70, 0x72, + 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, + 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, 0x25, 0x21, 0x20, 0x6e, + 0x65, 0x74, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0xa, 0x3c, + 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x3e, 0xa, 0x3c, 0x2f, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x3e, 0xa, 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x66, + 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, + 0xa, 0}; + +const struct httpd_fsdata_file file_processes_shtml[] = {{NULL, data_processes_shtml, data_processes_shtml + 17, sizeof(data_processes_shtml) - 17}}; + +const struct httpd_fsdata_file file_404_html[] = {{file_processes_shtml, data_404_html, data_404_html + 10, sizeof(data_404_html) - 10}}; + +const struct httpd_fsdata_file file_files_shtml[] = {{file_404_html, data_files_shtml, data_files_shtml + 13, sizeof(data_files_shtml) - 13}}; + +const struct httpd_fsdata_file file_footer_html[] = {{file_files_shtml, data_footer_html, data_footer_html + 13, sizeof(data_footer_html) - 13}}; + +const struct httpd_fsdata_file file_header_html[] = {{file_footer_html, data_header_html, data_header_html + 13, sizeof(data_header_html) - 13}}; + +const struct httpd_fsdata_file file_index_html[] = {{file_header_html, data_index_html, data_index_html + 12, sizeof(data_index_html) - 12}}; + +const struct httpd_fsdata_file file_style_css[] = {{file_index_html, data_style_css, data_style_css + 11, sizeof(data_style_css) - 11}}; + +const struct httpd_fsdata_file file_tcp_shtml[] = {{file_style_css, data_tcp_shtml, data_tcp_shtml + 11, sizeof(data_tcp_shtml) - 11}}; + +const struct httpd_fsdata_file file_fade_png[] = {{file_tcp_shtml, data_fade_png, data_fade_png + 10, sizeof(data_fade_png) - 10}}; + +const struct httpd_fsdata_file file_stats_shtml[] = {{file_fade_png, data_stats_shtml, data_stats_shtml + 13, sizeof(data_stats_shtml) - 13}}; + +#define HTTPD_FS_ROOT file_stats_shtml + +#define HTTPD_FS_NUMFILES 10 diff --git a/components/net/uip/apps/webserver/httpd-fsdata.h b/components/net/uip/apps/webserver/httpd-fsdata.h new file mode 100644 index 0000000000000000000000000000000000000000..0ad2d6e785ffd7076d4f514869b0332f12db1954 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fsdata.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * 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 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 file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fsdata.h,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ +#ifndef __HTTPD_FSDATA_H__ +#define __HTTPD_FSDATA_H__ + +#include "uip.h" + +struct httpd_fsdata_file { + const struct httpd_fsdata_file *next; + const char *name; + const char *data; + const int len; +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 + u16_t count; +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ +}; + +struct httpd_fsdata_file_noconst { + struct httpd_fsdata_file *next; + char *name; + char *data; + int len; +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 + u16_t count; +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ +}; + +#endif /* __HTTPD_FSDATA_H__ */ diff --git a/components/net/uip/apps/webserver/httpd.c b/components/net/uip/apps/webserver/httpd.c new file mode 100644 index 0000000000000000000000000000000000000000..937e138252821bcfc5198f706fe23d59cb835cf7 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd.c @@ -0,0 +1,338 @@ +/** + * \addtogroup apps + * @{ + */ + +/** + * \defgroup httpd Web server + * @{ + * The uIP web server is a very simplistic implementation of an HTTP + * server. It can serve web pages and files from a read-only ROM + * filesystem, and provides a very small scripting language. + + */ + +/** + * \file + * Web server + * \author + * Adam Dunkels + */ + + +/* + * Copyright (c) 2004, Adam Dunkels. + * 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 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 file is part of the uIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd.c,v 1.2 2006/06/11 21:46:38 adam Exp $ + */ + +#include "uip.h" +#include "httpd.h" +#include "httpd-fs.h" +#include "httpd-cgi.h" +#include "http-strings.h" + +#include + +#define STATE_WAITING 0 +#define STATE_OUTPUT 1 + +#define ISO_nl 0x0a +#define ISO_space 0x20 +#define ISO_bang 0x21 +#define ISO_percent 0x25 +#define ISO_period 0x2e +#define ISO_slash 0x2f +#define ISO_colon 0x3a + + +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_part_of_file(void *state) +{ + struct httpd_state *s = (struct httpd_state *)state; + + if(s->file.len > uip_mss()) { + s->len = uip_mss(); + } else { + s->len = s->file.len; + } + memcpy(uip_appdata, s->file.data, s->len); + + return s->len; +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_file(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sout); + + do { + PSOCK_GENERATOR_SEND(&s->sout, generate_part_of_file, s); + s->file.len -= s->len; + s->file.data += s->len; + } while(s->file.len > 0); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_part_of_file(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sout); + + PSOCK_SEND(&s->sout, s->file.data, s->len); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static void +next_scriptstate(struct httpd_state *s) +{ + char *p; + p = strchr(s->scriptptr, ISO_nl) + 1; + s->scriptlen -= (unsigned short)(p - s->scriptptr); + s->scriptptr = p; +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_script(struct httpd_state *s)) +{ + char *ptr; + + PT_BEGIN(&s->scriptpt); + + + while(s->file.len > 0) { + + /* Check if we should start executing a script. */ + if(*s->file.data == ISO_percent && + *(s->file.data + 1) == ISO_bang) { + s->scriptptr = s->file.data + 3; + s->scriptlen = s->file.len - 3; + if(*(s->scriptptr - 1) == ISO_colon) { + httpd_fs_open(s->scriptptr + 1, &s->file); + PT_WAIT_THREAD(&s->scriptpt, send_file(s)); + } else { + PT_WAIT_THREAD(&s->scriptpt, + httpd_cgi(s->scriptptr)(s, s->scriptptr)); + } + next_scriptstate(s); + + /* The script is over, so we reset the pointers and continue + sending the rest of the file. */ + s->file.data = s->scriptptr; + s->file.len = s->scriptlen; + } else { + /* See if we find the start of script marker in the block of HTML + to be sent. */ + + if(s->file.len > uip_mss()) { + s->len = uip_mss(); + } else { + s->len = s->file.len; + } + + if(*s->file.data == ISO_percent) { + ptr = strchr(s->file.data + 1, ISO_percent); + } else { + ptr = strchr(s->file.data, ISO_percent); + } + if(ptr != NULL && + ptr != s->file.data) { + s->len = (int)(ptr - s->file.data); + if(s->len >= uip_mss()) { + s->len = uip_mss(); + } + } + PT_WAIT_THREAD(&s->scriptpt, send_part_of_file(s)); + s->file.data += s->len; + s->file.len -= s->len; + + } + } + + PT_END(&s->scriptpt); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_headers(struct httpd_state *s, const char *statushdr)) +{ + char *ptr; + + PSOCK_BEGIN(&s->sout); + + PSOCK_SEND_STR(&s->sout, statushdr); + + ptr = strrchr(s->filename, ISO_period); + if(ptr == NULL) { + PSOCK_SEND_STR(&s->sout, http_content_type_binary); + } else if(strncmp(http_html, ptr, 5) == 0 || + strncmp(http_shtml, ptr, 6) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_html); + } else if(strncmp(http_css, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_css); + } else if(strncmp(http_png, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_png); + } else if(strncmp(http_gif, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_gif); + } else if(strncmp(http_jpg, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_jpg); + } else { + PSOCK_SEND_STR(&s->sout, http_content_type_plain); + } + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_output(struct httpd_state *s)) +{ + char *ptr; + + PT_BEGIN(&s->outputpt); + + if(!httpd_fs_open(s->filename, &s->file)) { + httpd_fs_open(http_404_html, &s->file); + strcpy(s->filename, http_404_html); + PT_WAIT_THREAD(&s->outputpt, + send_headers(s, + http_header_404)); + PT_WAIT_THREAD(&s->outputpt, + send_file(s)); + } else { + PT_WAIT_THREAD(&s->outputpt, + send_headers(s, + http_header_200)); + ptr = strchr(s->filename, ISO_period); + if(ptr != NULL && strncmp(ptr, http_shtml, 6) == 0) { + PT_INIT(&s->scriptpt); + PT_WAIT_THREAD(&s->outputpt, handle_script(s)); + } else { + PT_WAIT_THREAD(&s->outputpt, + send_file(s)); + } + } + PSOCK_CLOSE(&s->sout); + PT_END(&s->outputpt); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_input(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sin); + + PSOCK_READTO(&s->sin, ISO_space); + + + if(strncmp(s->inputbuf, http_get, 4) != 0) { + PSOCK_CLOSE_EXIT(&s->sin); + } + PSOCK_READTO(&s->sin, ISO_space); + + if(s->inputbuf[0] != ISO_slash) { + PSOCK_CLOSE_EXIT(&s->sin); + } + + if(s->inputbuf[1] == ISO_space) { + strncpy(s->filename, http_index_html, sizeof(s->filename)); + } else { + s->inputbuf[PSOCK_DATALEN(&s->sin) - 1] = 0; + strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename)); + } + + /* httpd_log_file(uip_conn->ripaddr, s->filename);*/ + + s->state = STATE_OUTPUT; + + while(1) { + PSOCK_READTO(&s->sin, ISO_nl); + + if(strncmp(s->inputbuf, http_referer, 8) == 0) { + s->inputbuf[PSOCK_DATALEN(&s->sin) - 2] = 0; + /* httpd_log(&s->inputbuf[9]);*/ + } + } + + PSOCK_END(&s->sin); +} +/*---------------------------------------------------------------------------*/ +static void +handle_connection(struct httpd_state *s) +{ + handle_input(s); + if(s->state == STATE_OUTPUT) { + handle_output(s); + } +} +/*---------------------------------------------------------------------------*/ +void +httpd_appcall(void) +{ + struct httpd_state *s = (struct httpd_state *)&(uip_conn->appstate); + + if(uip_closed() || uip_aborted() || uip_timedout()) { + } else if(uip_connected()) { + PSOCK_INIT(&s->sin, s->inputbuf, sizeof(s->inputbuf) - 1); + PSOCK_INIT(&s->sout, s->inputbuf, sizeof(s->inputbuf) - 1); + PT_INIT(&s->outputpt); + s->state = STATE_WAITING; + /* timer_set(&s->timer, CLOCK_SECOND * 100);*/ + s->timer = 0; + handle_connection(s); + } else if(s != NULL) { + if(uip_poll()) { + ++s->timer; + if(s->timer >= 20) { + uip_abort(); + } + } else { + s->timer = 0; + } + handle_connection(s); + } else { + uip_abort(); + } +} +/*---------------------------------------------------------------------------*/ +/** + * \brief Initialize the web server + * + * This function initializes the web server and should be + * called at system boot-up. + */ +void +httpd_init(void) +{ + uip_listen(HTONS(80)); +} +/*---------------------------------------------------------------------------*/ +/** @} */ diff --git a/components/net/uip/apps/webserver/httpd.h b/components/net/uip/apps/webserver/httpd.h new file mode 100644 index 0000000000000000000000000000000000000000..270d49debdd911a9fb783cc63973a5cb2dda3e55 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2001-2005, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: httpd.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ + +#ifndef __HTTPD_H__ +#define __HTTPD_H__ + +#include "psock.h" +#include "httpd-fs.h" + +struct httpd_state { + unsigned char timer; + struct psock sin, sout; + struct pt outputpt, scriptpt; + char inputbuf[50]; + char filename[20]; + char state; + struct httpd_fs_file file; + int len; + char *scriptptr; + int scriptlen; + + unsigned short count; +}; + +void httpd_init(void); +void httpd_appcall(void); + +void httpd_log(char *msg); +void httpd_log_file(u16_t *requester, char *file); + +#endif /* __HTTPD_H__ */ diff --git a/components/net/uip/apps/webserver/makefsdata b/components/net/uip/apps/webserver/makefsdata new file mode 100644 index 0000000000000000000000000000000000000000..b2109abdb7cbb856934d6b609bf65d7f522c3f46 --- /dev/null +++ b/components/net/uip/apps/webserver/makefsdata @@ -0,0 +1,78 @@ +#!/usr/bin/perl + +open(OUTPUT, "> httpd-fsdata.c"); + +chdir("httpd-fs"); + +opendir(DIR, "."); +@files = grep { !/^\./ && !/(CVS|~)/ } readdir(DIR); +closedir(DIR); + +foreach $file (@files) { + + if(-d $file && $file !~ /^\./) { + print "Processing directory $file\n"; + opendir(DIR, $file); + @newfiles = grep { !/^\./ && !/(CVS|~)/ } readdir(DIR); + closedir(DIR); + printf "Adding files @newfiles\n"; + @files = (@files, map { $_ = "$file/$_" } @newfiles); + next; + } +} + +foreach $file (@files) { + if(-f $file) { + + print "Adding file $file\n"; + + open(FILE, $file) || die "Could not open file $file\n"; + + $file =~ s-^-/-; + $fvar = $file; + $fvar =~ s-/-_-g; + $fvar =~ s-\.-_-g; + # for AVR, add PROGMEM here + print(OUTPUT "static const unsigned char data".$fvar."[] = {\n"); + print(OUTPUT "\t/* $file */\n\t"); + for($j = 0; $j < length($file); $j++) { + printf(OUTPUT "%#02x, ", unpack("C", substr($file, $j, 1))); + } + printf(OUTPUT "0,\n"); + + + $i = 0; + while(read(FILE, $data, 1)) { + if($i == 0) { + print(OUTPUT "\t"); + } + printf(OUTPUT "%#02x, ", unpack("C", $data)); + $i++; + if($i == 10) { + print(OUTPUT "\n"); + $i = 0; + } + } + print(OUTPUT "0};\n\n"); + close(FILE); + push(@fvars, $fvar); + push(@pfiles, $file); + } +} + +for($i = 0; $i < @fvars; $i++) { + $file = $pfiles[$i]; + $fvar = $fvars[$i]; + + if($i == 0) { + $prevfile = "NULL"; + } else { + $prevfile = "file" . $fvars[$i - 1]; + } + print(OUTPUT "const struct httpd_fsdata_file file".$fvar."[] = {{$prevfile, data$fvar, "); + print(OUTPUT "data$fvar + ". (length($file) + 1) .", "); + print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) ."}};\n\n"); +} + +print(OUTPUT "#define HTTPD_FS_ROOT file$fvars[$i - 1]\n\n"); +print(OUTPUT "#define HTTPD_FS_NUMFILES $i\n"); diff --git a/components/net/uip/apps/webserver/makestrings b/components/net/uip/apps/webserver/makestrings new file mode 100644 index 0000000000000000000000000000000000000000..20f0e24294ffa3c767ccf4e30859188e9ba2cc6b --- /dev/null +++ b/components/net/uip/apps/webserver/makestrings @@ -0,0 +1,40 @@ +#!/usr/bin/perl + + +sub stringify { + my $name = shift(@_); + open(OUTPUTC, "> $name.c"); + open(OUTPUTH, "> $name.h"); + + open(FILE, "$name"); + + while() { + if(/(.+) "(.+)"/) { + $var = $1; + $data = $2; + + $datan = $data; + $datan =~ s/\\r/\r/g; + $datan =~ s/\\n/\n/g; + $datan =~ s/\\01/\01/g; + $datan =~ s/\\0/\0/g; + + printf(OUTPUTC "const char $var\[%d] = \n", length($datan) + 1); + printf(OUTPUTC "/* \"$data\" */\n"); + printf(OUTPUTC "{"); + for($j = 0; $j < length($datan); $j++) { + printf(OUTPUTC "%#02x, ", unpack("C", substr($datan, $j, 1))); + } + printf(OUTPUTC "};\n"); + + printf(OUTPUTH "extern const char $var\[%d];\n", length($datan) + 1); + + } + } + close(OUTPUTC); + close(OUTPUTH); +} +stringify("http-strings"); + +exit 0; + diff --git a/components/net/uip/apps/webserver/webserver.h b/components/net/uip/apps/webserver/webserver.h new file mode 100644 index 0000000000000000000000000000000000000000..48753e690d4198e300fbb7aa050cdcca3929274f --- /dev/null +++ b/components/net/uip/apps/webserver/webserver.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2002, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack + * + * $Id: webserver.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ +#ifndef __WEBSERVER_H__ +#define __WEBSERVER_H__ + +#include "httpd.h" + +typedef struct httpd_state uip_tcp_appstate_t; +/* UIP_APPCALL: the name of the application function. This function + must return void and take no arguments (i.e., C type "void + appfunc(void)"). */ +#ifndef UIP_APPCALL +#define UIP_APPCALL httpd_appcall +#endif + + +#endif /* __WEBSERVER_H__ */ diff --git a/components/net/uip/doc/Doxyfile b/components/net/uip/doc/Doxyfile new file mode 100644 index 0000000000000000000000000000000000000000..8c6223d5243e347ef95224cb850abe7223df37d7 --- /dev/null +++ b/components/net/uip/doc/Doxyfile @@ -0,0 +1,279 @@ +# Doxyfile 1.4.6 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "uIP 1.0" +PROJECT_NUMBER = +OUTPUT_DIRECTORY = . +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = ../ \ + ../../ +STRIP_FROM_INC_PATH = +SHORT_NAMES = YES +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = YES +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = NO +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = NO +GENERATE_DEPRECATEDLIST= NO +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = NO +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = uip-doc.txt \ + pt-doc.txt \ + examples.txt \ + uip-code-style.txt \ + ../uip/uip.h \ + ../uip/uip.c \ + ../uip/uip_arch.h \ + ../uip/uip_arp.h \ + ../uip/uip_arp.c \ + ../unix/uip-conf.h \ + ../uip/uipopt.h \ + ../uip/uip-split.h \ + ../uip/uip-split.c \ + ../uip/uip-neighbor.h \ + ../uip/uip-neighbor.c \ + ../uip/pt.h \ + ../uip/lc.h \ + ../uip/lc-switch.h \ + ../uip/lc-addrlabels.h \ + ../uip/timer.h \ + ../uip/timer.c \ + ../uip/clock.h \ + ../uip/psock.h \ + ../uip/psock.c \ + ../lib/memb.c \ + ../lib/memb.h \ + ../apps/resolv/resolv.h \ + ../apps/resolv/resolv.c \ + ../apps/dhcpc/dhcpc.h \ + ../apps/dhcpc/dhcpc.c \ + ../apps/smtp/smtp.h \ + ../apps/smtp/smtp.c \ + ../apps/telnetd/telnetd.h \ + ../apps/telnetd/telnetd.c \ + ../apps/telnetd/shell.h \ + ../apps/telnetd/shell.c \ + ../apps/hello-world/hello-world.h \ + ../apps/hello-world/hello-world.c \ + ../apps/webclient/webclient.h \ + ../apps/webclient/webclient.c \ + ../apps/webserver/httpd.h \ + ../apps/webserver/httpd-cgi.h \ + ../apps/webserver/httpd-cgi.c \ + ../apps/webserver/httpd.c +FILE_PATTERNS = +RECURSIVE = NO +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = . ../apps/hello-world ../apps/smtp \ + ../apps/telnetd ../apps/resolv ../apps/webclient \ + ../apps/webserver ../unix ../apps/dhcpc +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = NO +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +USE_HTAGS = NO +VERBATIM_HEADERS = NO +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = YES +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = YES +BINARY_TOC = YES +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = header.tex +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = UIP_UDP +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +HIDE_UNDOC_RELATIONS = NO +HAVE_DOT = NO +CLASS_GRAPH = NO +COLLABORATION_GRAPH = NO +GROUP_GRAPHS = NO +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = NO +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = NO +DIRECTORY_GRAPH = NO +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/components/net/uip/doc/Makefile b/components/net/uip/doc/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..249018aa4345f6e4f069ad535e2fcfe22fb3e99c --- /dev/null +++ b/components/net/uip/doc/Makefile @@ -0,0 +1,7 @@ +all: htmldoc pdfdoc + +htmldoc: + doxygen Doxyfile + +pdfdoc: htmldoc + cd latex; make refman.pdf && mv refman.pdf ../uip-refman.pdf diff --git a/components/net/uip/doc/README b/components/net/uip/doc/README new file mode 100644 index 0000000000000000000000000000000000000000..3a65aef96b76a55c7555ebf8b820f3ed2956ff06 --- /dev/null +++ b/components/net/uip/doc/README @@ -0,0 +1,12 @@ +The files in this directory comprise the uIP documentation. The files +are: + +html/ The uIP reference manual in HTML format. + +uip-refman.pdf The uIP reference manual in a printable PDF version. + +mobisys2003.pdf Conference paper about uIP from the First + International Conference on Mobile Systems, + Applications and Services (MobiSys), San + Francisco, May 2003. + diff --git a/components/net/uip/doc/doxygen.sty b/components/net/uip/doc/doxygen.sty new file mode 100644 index 0000000000000000000000000000000000000000..15e4f66613b5217f17bf1a9bb3aeb423677b1071 --- /dev/null +++ b/components/net/uip/doc/doxygen.sty @@ -0,0 +1,62 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} +\RequirePackage{calc} +\RequirePackage{array} +\pagestyle{fancyplain} +\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}} +\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}} +\lhead[\fancyplain{}{\bfseries\thepage}] + {\fancyplain{}{\bfseries\rightmark}} +\rhead[\fancyplain{}{\bfseries\leftmark}] + {\fancyplain{}{\bfseries\thepage}} +\rfoot[\fancyplain{}{\bfseries\scriptsize Generated on Wed Jun 7 11:37:14 2006 for uIP 1.0-rc0 by doxygen\lfoot[]{\fancyplain{}{\bfseries\scriptsize Generated on Wed Jun 7 11:37:14 2006 for uIP 1.0-rc0 by doxygen}} +\cfoot{} +\newenvironment{CompactList} +{\begin{list}{}{ + \setlength{\leftmargin}{0.5cm} + \setlength{\itemsep}{0pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \renewcommand{\makelabel}{}}} +{\end{list}} +\newenvironment{CompactItemize} +{ + \begin{itemize} + \setlength{\itemsep}{-3pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \setlength{\partopsep}{0pt} +} +{\end{itemize}} +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp} +\newlength{\tmplength} +\newenvironment{TabularC}[1] +{ +\setlength{\tmplength} + {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)} + \par\begin{tabular*}{\linewidth} + {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|} +} +{\end{tabular*}\par} +\newcommand{\entrylabel}[1]{ + {\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\\}}} +\newenvironment{Desc} +{\begin{list}{} + { + \settowidth{\labelwidth}{40pt} + \setlength{\leftmargin}{\labelwidth} + \setlength{\parsep}{0pt} + \setlength{\itemsep}{-4pt} + \renewcommand{\makelabel}{\entrylabel} + } +} +{\end{list}} +\newenvironment{Indent} + {\begin{list}{}{\setlength{\leftmargin}{0.5cm}} + \item[]\ignorespaces} + {\unskip\end{list}} +\setlength{\parindent}{0cm} +\setlength{\parskip}{0.2cm} +\addtocounter{secnumdepth}{1} +\sloppy +\usepackage[T1]{fontenc} diff --git a/components/net/uip/doc/example-mainloop-with-arp.c b/components/net/uip/doc/example-mainloop-with-arp.c new file mode 100644 index 0000000000000000000000000000000000000000..7ed72c538b9f284feac65b0dbea51b97a8cb1e19 --- /dev/null +++ b/components/net/uip/doc/example-mainloop-with-arp.c @@ -0,0 +1,86 @@ +#include "uip.h" +#include "uip_arp.h" +#include "network-device.h" +#include "httpd.h" +#include "timer.h" + +#define BUF ((struct uip_eth_hdr *)&uip_buf[0]) + +/*---------------------------------------------------------------------------*/ +int +main(void) +{ + int i; + uip_ipaddr_t ipaddr; + struct timer periodic_timer, arp_timer; + + timer_set(&periodic_timer, CLOCK_SECOND / 2); + timer_set(&arp_timer, CLOCK_SECOND * 10); + + network_device_init(); + uip_init(); + + uip_ipaddr(ipaddr, 192,168,0,2); + uip_sethostaddr(ipaddr); + + httpd_init(); + + while(1) { + uip_len = network_device_read(); + if(uip_len > 0) { + if(BUF->type == htons(UIP_ETHTYPE_IP)) { + uip_arp_ipin(); + uip_input(); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + network_device_send(); + } + } else if(BUF->type == htons(UIP_ETHTYPE_ARP)) { + uip_arp_arpin(); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + network_device_send(); + } + } + + } else if(timer_expired(&periodic_timer)) { + timer_reset(&periodic_timer); + for(i = 0; i < UIP_CONNS; i++) { + uip_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + network_device_send(); + } + } + +#if UIP_UDP + for(i = 0; i < UIP_UDP_CONNS; i++) { + uip_udp_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + network_device_send(); + } + } +#endif /* UIP_UDP */ + + /* Call the ARP timer function every 10 seconds. */ + if(timer_expired(&arp_timer)) { + timer_reset(&arp_timer); + uip_arp_timer(); + } + } + } + return 0; +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/doc/example-mainloop-without-arp.c b/components/net/uip/doc/example-mainloop-without-arp.c new file mode 100644 index 0000000000000000000000000000000000000000..85800e3ae47c0b171b27ca0941459a66e6437a5e --- /dev/null +++ b/components/net/uip/doc/example-mainloop-without-arp.c @@ -0,0 +1,62 @@ +#include "uip.h" +#include "uip_arp.h" +#include "network-device.h" +#include "httpd.h" +#include "timer.h" + +/*---------------------------------------------------------------------------*/ +int +main(void) +{ + int i; + uip_ipaddr_t ipaddr; + struct timer periodic_timer; + + timer_set(&periodic_timer, CLOCK_SECOND / 2); + + network_device_init(); + uip_init(); + + uip_ipaddr(ipaddr, 192,168,0,2); + uip_sethostaddr(ipaddr); + + httpd_init(); + + while(1) { + uip_len = network_device_read(); + if(uip_len > 0) { + uip_input(); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + network_device_send(); + } + } else if(timer_expired(&periodic_timer)) { + timer_reset(&periodic_timer); + for(i = 0; i < UIP_CONNS; i++) { + uip_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + network_device_send(); + } + } + +#if UIP_UDP + for(i = 0; i < UIP_UDP_CONNS; i++) { + uip_udp_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + network_device_send(); + } + } +#endif /* UIP_UDP */ + } + } + return 0; +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/doc/examples.txt b/components/net/uip/doc/examples.txt new file mode 100644 index 0000000000000000000000000000000000000000..31edddc381605fb19726cb5af8faf692938abb0d --- /dev/null +++ b/components/net/uip/doc/examples.txt @@ -0,0 +1,34 @@ +/** +\defgroup apps Applications +@{ + +The uIP distribution contains a number of example applications that +can be either used directory or studied when learning to develop +applications for uIP. + +*/ + +/** \example hello-world.c */ +/** \example hello-world.h */ + +/** \example smtp.c */ +/** \example smtp.h */ + +/** \example webclient.c */ +/** \example webclient.h */ + +/** \example example-mainloop-with-arp.c */ +/** \example example-mainloop-without-arp.c */ + +/** \example telnetd.c */ +/** \example telnetd.h */ + +/** \example resolv.c */ +/** \example resolv.h */ + +/** \example dhcpc.c */ +/** \example dhcpc.h */ + +/** \example uip-conf.h */ + +/** @} */ diff --git a/components/net/uip/doc/header.tex b/components/net/uip/doc/header.tex new file mode 100644 index 0000000000000000000000000000000000000000..ce91c30f283a455de1a3aed94c9411c2280363a1 --- /dev/null +++ b/components/net/uip/doc/header.tex @@ -0,0 +1,53 @@ +\documentclass[a4paper]{book} +\usepackage{a4wide} +\usepackage{makeidx} +\usepackage{fancyhdr} +\usepackage{graphicx} +\usepackage{multicol} +\usepackage{float} +\usepackage{textcomp} +\usepackage{alltt} +\usepackage{times} +\ifx\pdfoutput\undefined +\usepackage[ps2pdf, + pagebackref=true, + colorlinks=true, + linkcolor=blue + ]{hyperref} +\usepackage{pspicture} +\else +\usepackage[pdftex, + pagebackref=true, + colorlinks=true, + linkcolor=blue + ]{hyperref} +\fi +\usepackage{doxygen} +\makeindex +\setcounter{tocdepth}{1} +\renewcommand{\footrulewidth}{0.4pt} +\begin{document} +\begin{titlepage} +\vspace*{5cm} +\begin{center} +{\Huge The uIP Embedded TCP/IP Stack}\\ +\vspace*{1cm} +{\LARGE The uIP 1.0 Reference Manual}\\ +\vspace*{3cm} +{\Large June 2006}\\ +\vspace*{2cm} +\includegraphics[width=6cm]{../sicslogo.pdf}\\ +\vspace*{1cm} +{\Large Adam Dunkels}\\ +{\Large \texttt{adam@sics.se}}\\ +\vspace*{1cm} +{\LARGE Swedish Institute of Computer Science}\\ +\vspace*{0.5cm} + +\end{center} +\end{titlepage} +\clearemptydoublepage +\pagenumbering{roman} +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} diff --git a/components/net/uip/doc/html/a00036.html b/components/net/uip/doc/html/a00036.html new file mode 100644 index 0000000000000000000000000000000000000000..9ee3cf2840f512f2eaab59bf9fdf61e587d4dacf --- /dev/null +++ b/components/net/uip/doc/html/a00036.html @@ -0,0 +1,120 @@ + + +uIP 1.0: hello-world.c + + + + + +

hello-world.c

00001 /**
+00002  * \addtogroup helloworld
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  *         An example of how to write uIP applications
+00009  *         with protosockets.
+00010  * \author
+00011  *         Adam Dunkels <adam@sics.se>
+00012  */
+00013 
+00014 /*
+00015  * This is a short example of how to write uIP applications using
+00016  * protosockets.
+00017  */
+00018 
+00019 /*
+00020  * We define the application state (struct hello_world_state) in the
+00021  * hello-world.h file, so we need to include it here. We also include
+00022  * uip.h (since this cannot be included in hello-world.h) and
+00023  * <string.h>, since we use the memcpy() function in the code.
+00024  */
+00025 #include "hello-world.h"
+00026 #include "uip.h"
+00027 #include <string.h>
+00028 
+00029 /*
+00030  * Declaration of the protosocket function that handles the connection
+00031  * (defined at the end of the code).
+00032  */
+00033 static int handle_connection(struct hello_world_state *s);
+00034 /*---------------------------------------------------------------------------*/
+00035 /*
+00036  * The initialization function. We must explicitly call this function
+00037  * from the system initialization code, some time after uip_init() is
+00038  * called.
+00039  */
+00040 void
+00041 hello_world_init(void)
+00042 {
+00043   /* We start to listen for connections on TCP port 1000. */
+00044   uip_listen(HTONS(1000));
+00045 }
+00046 /*---------------------------------------------------------------------------*/
+00047 /*
+00048  * In hello-world.h we have defined the UIP_APPCALL macro to
+00049  * hello_world_appcall so that this funcion is uIP's application
+00050  * function. This function is called whenever an uIP event occurs
+00051  * (e.g. when a new connection is established, new data arrives, sent
+00052  * data is acknowledged, data needs to be retransmitted, etc.).
+00053  */
+00054 void
+00055 hello_world_appcall(void)
+00056 {
+00057   /*
+00058    * The uip_conn structure has a field called "appstate" that holds
+00059    * the application state of the connection. We make a pointer to
+00060    * this to access it easier.
+00061    */
+00062   struct hello_world_state *s = &(uip_conn->appstate);
+00063 
+00064   /*
+00065    * If a new connection was just established, we should initialize
+00066    * the protosocket in our applications' state structure.
+00067    */
+00068   if(uip_connected()) {
+00069     PSOCK_INIT(&s->p, s->inputbuffer, sizeof(s->inputbuffer));
+00070   }
+00071 
+00072   /*
+00073    * Finally, we run the protosocket function that actually handles
+00074    * the communication. We pass it a pointer to the application state
+00075    * of the current connection.
+00076    */
+00077   handle_connection(s);
+00078 }
+00079 /*---------------------------------------------------------------------------*/
+00080 /*
+00081  * This is the protosocket function that handles the communication. A
+00082  * protosocket function must always return an int, but must never
+00083  * explicitly return - all return statements are hidden in the PSOCK
+00084  * macros.
+00085  */
+00086 static int
+00087 handle_connection(struct hello_world_state *s)
+00088 {
+00089   PSOCK_BEGIN(&s->p);
+00090 
+00091   PSOCK_SEND_STR(&s->p, "Hello. What is your name?\n");
+00092   PSOCK_READTO(&s->p, '\n');
+00093   strncpy(s->name, s->inputbuffer, sizeof(s->name));
+00094   PSOCK_SEND_STR(&s->p, "Hello ");
+00095   PSOCK_SEND_STR(&s->p, s->name);
+00096   PSOCK_CLOSE(&s->p);
+00097   
+00098   PSOCK_END(&s->p);
+00099 }
+00100 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00037.html b/components/net/uip/doc/html/a00037.html new file mode 100644 index 0000000000000000000000000000000000000000..13d709be48d1ac59934f6360d98cbeb1e25e7674 --- /dev/null +++ b/components/net/uip/doc/html/a00037.html @@ -0,0 +1,72 @@ + + +uIP 1.0: hello-world.h + + + + + +

hello-world.h

00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup helloworld Hello, world
+00008  * @{
+00009  *
+00010  * A small example showing how to write applications with
+00011  * \ref psock "protosockets".
+00012  */
+00013 
+00014 /**
+00015  * \file
+00016  *         Header file for an example of how to write uIP applications
+00017  *         with protosockets.
+00018  * \author
+00019  *         Adam Dunkels <adam@sics.se>
+00020  */
+00021 
+00022 #ifndef __HELLO_WORLD_H__
+00023 #define __HELLO_WORLD_H__
+00024 
+00025 /* Since this file will be included by uip.h, we cannot include uip.h
+00026    here. But we might need to include uipopt.h if we need the u8_t and
+00027    u16_t datatypes. */
+00028 #include "uipopt.h"
+00029 
+00030 #include "psock.h"
+00031 
+00032 /* Next, we define the uip_tcp_appstate_t datatype. This is the state
+00033    of our application, and the memory required for this state is
+00034    allocated together with each TCP connection. One application state
+00035    for each TCP connection. */
+00036 typedef struct hello_world_state {
+00037   struct psock p;
+00038   char inputbuffer[10];
+00039   char name[40];
+00040 } uip_tcp_appstate_t;
+00041 
+00042 /* Finally we define the application function to be called by uIP. */
+00043 void hello_world_appcall(void);
+00044 #ifndef UIP_APPCALL
+00045 #define UIP_APPCALL hello_world_appcall
+00046 #endif /* UIP_APPCALL */
+00047 
+00048 void hello_world_init(void);
+00049 
+00050 #endif /* __HELLO_WORLD_H__ */
+00051 /** @} */
+00052 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00038.html b/components/net/uip/doc/html/a00038.html new file mode 100644 index 0000000000000000000000000000000000000000..f62a2738bcbff61f09c15a3b5cb73aa6dfedc7e8 --- /dev/null +++ b/components/net/uip/doc/html/a00038.html @@ -0,0 +1,282 @@ + + +uIP 1.0: smtp.c + + + + + +

smtp.c

00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup smtp SMTP E-mail sender
+00008  * @{
+00009  *
+00010  * The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is
+00011  * the standard way of sending and transfering e-mail on the
+00012  * Internet. This simple example implementation is intended as an
+00013  * example of how to implement protocols in uIP, and is able to send
+00014  * out e-mail but has not been extensively tested.
+00015  */
+00016 
+00017 /**
+00018  * \file
+00019  * SMTP example implementation
+00020  * \author Adam Dunkels <adam@dunkels.com>
+00021  */
+00022 
+00023 /*
+00024  * Copyright (c) 2004, Adam Dunkels.
+00025  * All rights reserved.
+00026  *
+00027  * Redistribution and use in source and binary forms, with or without
+00028  * modification, are permitted provided that the following conditions
+00029  * are met:
+00030  * 1. Redistributions of source code must retain the above copyright
+00031  *    notice, this list of conditions and the following disclaimer.
+00032  * 2. Redistributions in binary form must reproduce the above copyright
+00033  *    notice, this list of conditions and the following disclaimer in the
+00034  *    documentation and/or other materials provided with the distribution.
+00035  * 3. Neither the name of the Institute nor the names of its contributors
+00036  *    may be used to endorse or promote products derived from this software
+00037  *    without specific prior written permission.
+00038  *
+00039  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00040  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00041  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00042  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00043  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00044  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00045  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00046  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00047  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00048  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00049  * SUCH DAMAGE.
+00050  *
+00051  * This file is part of the uIP TCP/IP stack.
+00052  *
+00053  * Author: Adam Dunkels <adam@sics.se>
+00054  *
+00055  * $Id: smtp.c,v 1.4 2006/06/11 21:46:37 adam Exp $
+00056  */
+00057 #include "smtp.h"
+00058 
+00059 #include "smtp-strings.h"
+00060 #include "psock.h"
+00061 #include "uip.h"
+00062 
+00063 #include <string.h>
+00064 
+00065 static struct smtp_state s;
+00066 
+00067 static char *localhostname;
+00068 static uip_ipaddr_t smtpserver;
+00069 
+00070 #define ISO_nl 0x0a
+00071 #define ISO_cr 0x0d
+00072 
+00073 #define ISO_period 0x2e
+00074 
+00075 #define ISO_2  0x32
+00076 #define ISO_3  0x33
+00077 #define ISO_4  0x34
+00078 #define ISO_5  0x35
+00079 
+00080 
+00081 /*---------------------------------------------------------------------------*/
+00082 static
+00083 PT_THREAD(smtp_thread(void))
+00084 {
+00085   PSOCK_BEGIN(&s.psock);
+00086 
+00087   PSOCK_READTO(&s.psock, ISO_nl);
+00088    
+00089   if(strncmp(s.inputbuffer, smtp_220, 3) != 0) {
+00090     PSOCK_CLOSE(&s.psock);
+00091     smtp_done(2);
+00092     PSOCK_EXIT(&s.psock);
+00093   }
+00094   
+00095   PSOCK_SEND_STR(&s.psock, (char *)smtp_helo);
+00096   PSOCK_SEND_STR(&s.psock, localhostname);
+00097   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00098 
+00099   PSOCK_READTO(&s.psock, ISO_nl);
+00100   
+00101   if(s.inputbuffer[0] != ISO_2) {
+00102     PSOCK_CLOSE(&s.psock);
+00103     smtp_done(3);
+00104     PSOCK_EXIT(&s.psock);
+00105   }
+00106 
+00107   PSOCK_SEND_STR(&s.psock, (char *)smtp_mail_from);
+00108   PSOCK_SEND_STR(&s.psock, s.from);
+00109   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00110 
+00111   PSOCK_READTO(&s.psock, ISO_nl);
+00112   
+00113   if(s.inputbuffer[0] != ISO_2) {
+00114     PSOCK_CLOSE(&s.psock);
+00115     smtp_done(4);
+00116     PSOCK_EXIT(&s.psock);
+00117   }
+00118 
+00119   PSOCK_SEND_STR(&s.psock, (char *)smtp_rcpt_to);
+00120   PSOCK_SEND_STR(&s.psock, s.to);
+00121   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00122 
+00123   PSOCK_READTO(&s.psock, ISO_nl);
+00124   
+00125   if(s.inputbuffer[0] != ISO_2) {
+00126     PSOCK_CLOSE(&s.psock);
+00127     smtp_done(5);
+00128     PSOCK_EXIT(&s.psock);
+00129   }
+00130   
+00131   if(s.cc != 0) {
+00132     PSOCK_SEND_STR(&s.psock, (char *)smtp_rcpt_to);
+00133     PSOCK_SEND_STR(&s.psock, s.cc);
+00134     PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00135 
+00136     PSOCK_READTO(&s.psock, ISO_nl);
+00137   
+00138     if(s.inputbuffer[0] != ISO_2) {
+00139       PSOCK_CLOSE(&s.psock);
+00140       smtp_done(6);
+00141       PSOCK_EXIT(&s.psock);
+00142     }
+00143   }
+00144   
+00145   PSOCK_SEND_STR(&s.psock, (char *)smtp_data);
+00146   
+00147   PSOCK_READTO(&s.psock, ISO_nl);
+00148   
+00149   if(s.inputbuffer[0] != ISO_3) {
+00150     PSOCK_CLOSE(&s.psock);
+00151     smtp_done(7);
+00152     PSOCK_EXIT(&s.psock);
+00153   }
+00154 
+00155   PSOCK_SEND_STR(&s.psock, (char *)smtp_to);
+00156   PSOCK_SEND_STR(&s.psock, s.to);
+00157   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00158   
+00159   if(s.cc != 0) {
+00160     PSOCK_SEND_STR(&s.psock, (char *)smtp_cc);
+00161     PSOCK_SEND_STR(&s.psock, s.cc);
+00162     PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00163   }
+00164   
+00165   PSOCK_SEND_STR(&s.psock, (char *)smtp_from);
+00166   PSOCK_SEND_STR(&s.psock, s.from);
+00167   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00168   
+00169   PSOCK_SEND_STR(&s.psock, (char *)smtp_subject);
+00170   PSOCK_SEND_STR(&s.psock, s.subject);
+00171   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00172 
+00173   PSOCK_SEND(&s.psock, s.msg, s.msglen);
+00174   
+00175   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnlperiodcrnl);
+00176 
+00177   PSOCK_READTO(&s.psock, ISO_nl);
+00178   if(s.inputbuffer[0] != ISO_2) {
+00179     PSOCK_CLOSE(&s.psock);
+00180     smtp_done(8);
+00181     PSOCK_EXIT(&s.psock);
+00182   }
+00183 
+00184   PSOCK_SEND_STR(&s.psock, (char *)smtp_quit);
+00185   smtp_done(SMTP_ERR_OK);
+00186   PSOCK_END(&s.psock);
+00187 }
+00188 /*---------------------------------------------------------------------------*/
+00189 void
+00190 smtp_appcall(void)
+00191 {
+00192   if(uip_closed()) {
+00193     s.connected = 0;
+00194     return;
+00195   }
+00196   if(uip_aborted() || uip_timedout()) {
+00197     s.connected = 0;
+00198     smtp_done(1);
+00199     return;
+00200   }
+00201   smtp_thread();
+00202 }
+00203 /*---------------------------------------------------------------------------*/
+00204 /**
+00205  * Specificy an SMTP server and hostname.
+00206  *
+00207  * This function is used to configure the SMTP module with an SMTP
+00208  * server and the hostname of the host.
+00209  *
+00210  * \param lhostname The hostname of the uIP host.
+00211  *
+00212  * \param server A pointer to a 4-byte array representing the IP
+00213  * address of the SMTP server to be configured.
+00214  */
+00215 void
+00216 smtp_configure(char *lhostname, void *server)
+00217 {
+00218   localhostname = lhostname;
+00219   uip_ipaddr_copy(smtpserver, server);
+00220 }
+00221 /*---------------------------------------------------------------------------*/
+00222 /**
+00223  * Send an e-mail.
+00224  *
+00225  * \param to The e-mail address of the receiver of the e-mail.
+00226  * \param cc The e-mail address of the CC: receivers of the e-mail.
+00227  * \param from The e-mail address of the sender of the e-mail.
+00228  * \param subject The subject of the e-mail.
+00229  * \param msg The actual e-mail message.
+00230  * \param msglen The length of the e-mail message.
+00231  */
+00232 unsigned char
+00233 smtp_send(char *to, char *cc, char *from,
+00234           char *subject, char *msg, u16_t msglen)
+00235 {
+00236   struct uip_conn *conn;
+00237 
+00238   conn = uip_connect(smtpserver, HTONS(25));
+00239   if(conn == NULL) {
+00240     return 0;
+00241   }
+00242   s.connected = 1;
+00243   s.to = to;
+00244   s.cc = cc;
+00245   s.from = from;
+00246   s.subject = subject;
+00247   s.msg = msg;
+00248   s.msglen = msglen;
+00249 
+00250   PSOCK_INIT(&s.psock, s.inputbuffer, sizeof(s.inputbuffer));
+00251   
+00252   return 1;
+00253 }
+00254 /*---------------------------------------------------------------------------*/
+00255 void
+00256 smtp_init(void)
+00257 {
+00258   s.connected = 0;
+00259 }
+00260 /*---------------------------------------------------------------------------*/
+00261 /** @} */
+00262 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00039.html b/components/net/uip/doc/html/a00039.html new file mode 100644 index 0000000000000000000000000000000000000000..fb02d5ad46660606bc5e57e9ba649a49434bfdad --- /dev/null +++ b/components/net/uip/doc/html/a00039.html @@ -0,0 +1,123 @@ + + +uIP 1.0: smtp.h + + + + + +

smtp.h

00001 
+00002 /**
+00003  * \addtogroup smtp
+00004  * @{
+00005  */
+00006 
+00007 
+00008 /**
+00009  * \file
+00010  * SMTP header file
+00011  * \author Adam Dunkels <adam@dunkels.com>
+00012  */
+00013 
+00014 /*
+00015  * Copyright (c) 2002, Adam Dunkels.
+00016  * All rights reserved.
+00017  *
+00018  * Redistribution and use in source and binary forms, with or without
+00019  * modification, are permitted provided that the following conditions
+00020  * are met:
+00021  * 1. Redistributions of source code must retain the above copyright
+00022  *    notice, this list of conditions and the following disclaimer.
+00023  * 2. Redistributions in binary form must reproduce the above copyright
+00024  *    notice, this list of conditions and the following disclaimer in the
+00025  *    documentation and/or other materials provided with the distribution.
+00026  * 3. The name of the author may not be used to endorse or promote
+00027  *    products derived from this software without specific prior
+00028  *    written permission.
+00029  *
+00030  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00031  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00032  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00033  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00034  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00035  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00036  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00037  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00038  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00039  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00040  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00041  *
+00042  * This file is part of the uIP TCP/IP stack.
+00043  *
+00044  * $Id: smtp.h,v 1.4 2006/06/11 21:46:37 adam Exp $
+00045  *
+00046  */
+00047 #ifndef __SMTP_H__
+00048 #define __SMTP_H__
+00049 
+00050 #include "uipopt.h"
+00051 
+00052 /**
+00053  * Error number that signifies a non-error condition.
+00054  */
+00055 #define SMTP_ERR_OK 0
+00056 
+00057 /**
+00058  * Callback function that is called when an e-mail transmission is
+00059  * done.
+00060  *
+00061  * This function must be implemented by the module that uses the SMTP
+00062  * module.
+00063  *
+00064  * \param error The number of the error if an error occured, or
+00065  * SMTP_ERR_OK.
+00066  */
+00067 void smtp_done(unsigned char error);
+00068 
+00069 void smtp_init(void);
+00070 
+00071 /* Functions. */
+00072 void smtp_configure(char *localhostname, u16_t *smtpserver);
+00073 unsigned char smtp_send(char *to, char *from,
+00074                         char *subject, char *msg,
+00075                         u16_t msglen);
+00076 #define SMTP_SEND(to, cc, from, subject, msg) \
+00077         smtp_send(to, cc, from, subject, msg, strlen(msg))
+00078 
+00079 void smtp_appcall(void);
+00080 
+00081 struct smtp_state {
+00082   u8_t state;
+00083   char *to;
+00084   char *from;
+00085   char *subject;
+00086   char *msg;
+00087   u16_t msglen;
+00088   
+00089   u16_t sentlen, textlen;
+00090   u16_t sendptr;
+00091 
+00092 };
+00093 
+00094 
+00095 #ifndef UIP_APPCALL
+00096 #define UIP_APPCALL     smtp_appcall
+00097 #endif
+00098 typedef struct smtp_state uip_tcp_appstate_t;
+00099 
+00100 
+00101 #endif /* __SMTP_H__ */
+00102 
+00103 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00040.html b/components/net/uip/doc/html/a00040.html new file mode 100644 index 0000000000000000000000000000000000000000..1b1f55425ad43b9061b06827d859d4fca7b51221 --- /dev/null +++ b/components/net/uip/doc/html/a00040.html @@ -0,0 +1,459 @@ + + +uIP 1.0: webclient.c + + + + + +

webclient.c

00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup webclient Web client
+00008  * @{
+00009  *
+00010  * This example shows a HTTP client that is able to download web pages
+00011  * and files from web servers. It requires a number of callback
+00012  * functions to be implemented by the module that utilizes the code:
+00013  * webclient_datahandler(), webclient_connected(),
+00014  * webclient_timedout(), webclient_aborted(), webclient_closed().
+00015  */
+00016 
+00017 /**
+00018  * \file
+00019  * Implementation of the HTTP client.
+00020  * \author Adam Dunkels <adam@dunkels.com>
+00021  */
+00022 
+00023 /*
+00024  * Copyright (c) 2002, Adam Dunkels.
+00025  * All rights reserved.
+00026  *
+00027  * Redistribution and use in source and binary forms, with or without
+00028  * modification, are permitted provided that the following conditions
+00029  * are met:
+00030  * 1. Redistributions of source code must retain the above copyright
+00031  *    notice, this list of conditions and the following disclaimer.
+00032  * 2. Redistributions in binary form must reproduce the above
+00033  *    copyright notice, this list of conditions and the following
+00034  *    disclaimer in the documentation and/or other materials provided
+00035  *    with the distribution.
+00036  * 3. The name of the author may not be used to endorse or promote
+00037  *    products derived from this software without specific prior
+00038  *    written permission.
+00039  *
+00040  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00041  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00042  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00043  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00044  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00045  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00046  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00047  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00048  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00049  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00050  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00051  *
+00052  * This file is part of the uIP TCP/IP stack.
+00053  *
+00054  * $Id: webclient.c,v 1.2 2006/06/11 21:46:37 adam Exp $
+00055  *
+00056  */
+00057 
+00058 #include "uip.h"
+00059 #include "uiplib.h"
+00060 #include "webclient.h"
+00061 #include "resolv.h"
+00062 
+00063 #include <string.h>
+00064 
+00065 #define WEBCLIENT_TIMEOUT 100
+00066 
+00067 #define WEBCLIENT_STATE_STATUSLINE 0
+00068 #define WEBCLIENT_STATE_HEADERS    1
+00069 #define WEBCLIENT_STATE_DATA       2
+00070 #define WEBCLIENT_STATE_CLOSE      3
+00071 
+00072 #define HTTPFLAG_NONE   0
+00073 #define HTTPFLAG_OK     1
+00074 #define HTTPFLAG_MOVED  2
+00075 #define HTTPFLAG_ERROR  3
+00076 
+00077 
+00078 #define ISO_nl       0x0a
+00079 #define ISO_cr       0x0d
+00080 #define ISO_space    0x20
+00081 
+00082 
+00083 static struct webclient_state s;
+00084 
+00085 /*-----------------------------------------------------------------------------------*/
+00086 char *
+00087 webclient_mimetype(void)
+00088 {
+00089   return s.mimetype;
+00090 }
+00091 /*-----------------------------------------------------------------------------------*/
+00092 char *
+00093 webclient_filename(void)
+00094 {
+00095   return s.file;
+00096 }
+00097 /*-----------------------------------------------------------------------------------*/
+00098 char *
+00099 webclient_hostname(void)
+00100 {
+00101   return s.host;
+00102 }
+00103 /*-----------------------------------------------------------------------------------*/
+00104 unsigned short
+00105 webclient_port(void)
+00106 {
+00107   return s.port;
+00108 }
+00109 /*-----------------------------------------------------------------------------------*/
+00110 void
+00111 webclient_init(void)
+00112 {
+00113 
+00114 }
+00115 /*-----------------------------------------------------------------------------------*/
+00116 static void
+00117 init_connection(void)
+00118 {
+00119   s.state = WEBCLIENT_STATE_STATUSLINE;
+00120 
+00121   s.getrequestleft = sizeof(http_get) - 1 + 1 +
+00122     sizeof(http_10) - 1 +
+00123     sizeof(http_crnl) - 1 +
+00124     sizeof(http_host) - 1 +
+00125     sizeof(http_crnl) - 1 +
+00126     strlen(http_user_agent_fields) +
+00127     strlen(s.file) + strlen(s.host);
+00128   s.getrequestptr = 0;
+00129 
+00130   s.httpheaderlineptr = 0;
+00131 }
+00132 /*-----------------------------------------------------------------------------------*/
+00133 void
+00134 webclient_close(void)
+00135 {
+00136   s.state = WEBCLIENT_STATE_CLOSE;
+00137 }
+00138 /*-----------------------------------------------------------------------------------*/
+00139 unsigned char
+00140 webclient_get(char *host, u16_t port, char *file)
+00141 {
+00142   struct uip_conn *conn;
+00143   uip_ipaddr_t *ipaddr;
+00144   static uip_ipaddr_t addr;
+00145   
+00146   /* First check if the host is an IP address. */
+00147   ipaddr = &addr;
+00148   if(uiplib_ipaddrconv(host, (unsigned char *)addr) == 0) {
+00149     ipaddr = (uip_ipaddr_t *)resolv_lookup(host);
+00150     
+00151     if(ipaddr == NULL) {
+00152       return 0;
+00153     }
+00154   }
+00155   
+00156   conn = uip_connect(ipaddr, htons(port));
+00157   
+00158   if(conn == NULL) {
+00159     return 0;
+00160   }
+00161   
+00162   s.port = port;
+00163   strncpy(s.file, file, sizeof(s.file));
+00164   strncpy(s.host, host, sizeof(s.host));
+00165   
+00166   init_connection();
+00167   return 1;
+00168 }
+00169 /*-----------------------------------------------------------------------------------*/
+00170 static unsigned char *
+00171 copy_string(unsigned char *dest,
+00172             const unsigned char *src, unsigned char len)
+00173 {
+00174   strncpy(dest, src, len);
+00175   return dest + len;
+00176 }
+00177 /*-----------------------------------------------------------------------------------*/
+00178 static void
+00179 senddata(void)
+00180 {
+00181   u16_t len;
+00182   char *getrequest;
+00183   char *cptr;
+00184   
+00185   if(s.getrequestleft > 0) {
+00186     cptr = getrequest = (char *)uip_appdata;
+00187 
+00188     cptr = copy_string(cptr, http_get, sizeof(http_get) - 1);
+00189     cptr = copy_string(cptr, s.file, strlen(s.file));
+00190     *cptr++ = ISO_space;
+00191     cptr = copy_string(cptr, http_10, sizeof(http_10) - 1);
+00192 
+00193     cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1);
+00194     
+00195     cptr = copy_string(cptr, http_host, sizeof(http_host) - 1);
+00196     cptr = copy_string(cptr, s.host, strlen(s.host));
+00197     cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1);
+00198 
+00199     cptr = copy_string(cptr, http_user_agent_fields,
+00200                        strlen(http_user_agent_fields));
+00201     
+00202     len = s.getrequestleft > uip_mss()?
+00203       uip_mss():
+00204       s.getrequestleft;
+00205     uip_send(&(getrequest[s.getrequestptr]), len);
+00206   }
+00207 }
+00208 /*-----------------------------------------------------------------------------------*/
+00209 static void
+00210 acked(void)
+00211 {
+00212   u16_t len;
+00213   
+00214   if(s.getrequestleft > 0) {
+00215     len = s.getrequestleft > uip_mss()?
+00216       uip_mss():
+00217       s.getrequestleft;
+00218     s.getrequestleft -= len;
+00219     s.getrequestptr += len;
+00220   }
+00221 }
+00222 /*-----------------------------------------------------------------------------------*/
+00223 static u16_t
+00224 parse_statusline(u16_t len)
+00225 {
+00226   char *cptr;
+00227   
+00228   while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) {
+00229     s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata;
+00230     ++((char *)uip_appdata);
+00231     --len;
+00232     if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) {
+00233 
+00234       if((strncmp(s.httpheaderline, http_10,
+00235                   sizeof(http_10) - 1) == 0) ||
+00236          (strncmp(s.httpheaderline, http_11,
+00237                   sizeof(http_11) - 1) == 0)) {
+00238         cptr = &(s.httpheaderline[9]);
+00239         s.httpflag = HTTPFLAG_NONE;
+00240         if(strncmp(cptr, http_200, sizeof(http_200) - 1) == 0) {
+00241           /* 200 OK */
+00242           s.httpflag = HTTPFLAG_OK;
+00243         } else if(strncmp(cptr, http_301, sizeof(http_301) - 1) == 0 ||
+00244                   strncmp(cptr, http_302, sizeof(http_302) - 1) == 0) {
+00245           /* 301 Moved permanently or 302 Found. Location: header line
+00246              will contain thw new location. */
+00247           s.httpflag = HTTPFLAG_MOVED;
+00248         } else {
+00249           s.httpheaderline[s.httpheaderlineptr - 1] = 0;
+00250         }
+00251       } else {
+00252         uip_abort();
+00253         webclient_aborted();
+00254         return 0;
+00255       }
+00256       
+00257       /* We're done parsing the status line, so we reset the pointer
+00258          and start parsing the HTTP headers.*/
+00259       s.httpheaderlineptr = 0;
+00260       s.state = WEBCLIENT_STATE_HEADERS;
+00261       break;
+00262     } else {
+00263       ++s.httpheaderlineptr;
+00264     }
+00265   }
+00266   return len;
+00267 }
+00268 /*-----------------------------------------------------------------------------------*/
+00269 static char
+00270 casecmp(char *str1, const char *str2, char len)
+00271 {
+00272   static char c;
+00273   
+00274   while(len > 0) {
+00275     c = *str1;
+00276     /* Force lower-case characters. */
+00277     if(c & 0x40) {
+00278       c |= 0x20;
+00279     }
+00280     if(*str2 != c) {
+00281       return 1;
+00282     }
+00283     ++str1;
+00284     ++str2;
+00285     --len;
+00286   }
+00287   return 0;
+00288 }
+00289 /*-----------------------------------------------------------------------------------*/
+00290 static u16_t
+00291 parse_headers(u16_t len)
+00292 {
+00293   char *cptr;
+00294   static unsigned char i;
+00295   
+00296   while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) {
+00297     s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata;
+00298     ++((char *)uip_appdata);
+00299     --len;
+00300     if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) {
+00301       /* We have an entire HTTP header line in s.httpheaderline, so
+00302          we parse it. */
+00303       if(s.httpheaderline[0] == ISO_cr) {
+00304         /* This was the last header line (i.e., and empty "\r\n"), so
+00305            we are done with the headers and proceed with the actual
+00306            data. */
+00307         s.state = WEBCLIENT_STATE_DATA;
+00308         return len;
+00309       }
+00310 
+00311       s.httpheaderline[s.httpheaderlineptr - 1] = 0;
+00312       /* Check for specific HTTP header fields. */
+00313       if(casecmp(s.httpheaderline, http_content_type,
+00314                      sizeof(http_content_type) - 1) == 0) {
+00315         /* Found Content-type field. */
+00316         cptr = strchr(s.httpheaderline, ';');
+00317         if(cptr != NULL) {
+00318           *cptr = 0;
+00319         }
+00320         strncpy(s.mimetype, s.httpheaderline +
+00321                 sizeof(http_content_type) - 1, sizeof(s.mimetype));
+00322       } else if(casecmp(s.httpheaderline, http_location,
+00323                             sizeof(http_location) - 1) == 0) {
+00324         cptr = s.httpheaderline +
+00325           sizeof(http_location) - 1;
+00326         
+00327         if(strncmp(cptr, http_http, 7) == 0) {
+00328           cptr += 7;
+00329           for(i = 0; i < s.httpheaderlineptr - 7; ++i) {
+00330             if(*cptr == 0 ||
+00331                *cptr == '/' ||
+00332                *cptr == ' ' ||
+00333                *cptr == ':') {
+00334               s.host[i] = 0;
+00335               break;
+00336             }
+00337             s.host[i] = *cptr;
+00338             ++cptr;
+00339           }
+00340         }
+00341         strncpy(s.file, cptr, sizeof(s.file));
+00342         /*      s.file[s.httpheaderlineptr - i] = 0;*/
+00343       }
+00344 
+00345 
+00346       /* We're done parsing, so we reset the pointer and start the
+00347          next line. */
+00348       s.httpheaderlineptr = 0;
+00349     } else {
+00350       ++s.httpheaderlineptr;
+00351     }
+00352   }
+00353   return len;
+00354 }
+00355 /*-----------------------------------------------------------------------------------*/
+00356 static void
+00357 newdata(void)
+00358 {
+00359   u16_t len;
+00360 
+00361   len = uip_datalen();
+00362 
+00363   if(s.state == WEBCLIENT_STATE_STATUSLINE) {
+00364     len = parse_statusline(len);
+00365   }
+00366   
+00367   if(s.state == WEBCLIENT_STATE_HEADERS && len > 0) {
+00368     len = parse_headers(len);
+00369   }
+00370 
+00371   if(len > 0 && s.state == WEBCLIENT_STATE_DATA &&
+00372      s.httpflag != HTTPFLAG_MOVED) {
+00373     webclient_datahandler((char *)uip_appdata, len);
+00374   }
+00375 }
+00376 /*-----------------------------------------------------------------------------------*/
+00377 void
+00378 webclient_appcall(void)
+00379 {
+00380   if(uip_connected()) {
+00381     s.timer = 0;
+00382     s.state = WEBCLIENT_STATE_STATUSLINE;
+00383     senddata();
+00384     webclient_connected();
+00385     return;
+00386   }
+00387 
+00388   if(s.state == WEBCLIENT_STATE_CLOSE) {
+00389     webclient_closed();
+00390     uip_abort();
+00391     return;
+00392   }
+00393 
+00394   if(uip_aborted()) {
+00395     webclient_aborted();
+00396   }
+00397   if(uip_timedout()) {
+00398     webclient_timedout();
+00399   }
+00400 
+00401   
+00402   if(uip_acked()) {
+00403     s.timer = 0;
+00404     acked();
+00405   }
+00406   if(uip_newdata()) {
+00407     s.timer = 0;
+00408     newdata();
+00409   }
+00410   if(uip_rexmit() ||
+00411      uip_newdata() ||
+00412      uip_acked()) {
+00413     senddata();
+00414   } else if(uip_poll()) {
+00415     ++s.timer;
+00416     if(s.timer == WEBCLIENT_TIMEOUT) {
+00417       webclient_timedout();
+00418       uip_abort();
+00419       return;
+00420     }
+00421         /*    senddata();*/
+00422   }
+00423 
+00424   if(uip_closed()) {
+00425     if(s.httpflag != HTTPFLAG_MOVED) {
+00426       /* Send NULL data to signal EOF. */
+00427       webclient_datahandler(NULL, 0);
+00428     } else {
+00429       if(resolv_lookup(s.host) == NULL) {
+00430         resolv_query(s.host);
+00431       }
+00432       webclient_get(s.host, s.port, s.file);
+00433     }
+00434   }
+00435 }
+00436 /*-----------------------------------------------------------------------------------*/
+00437 
+00438 /** @} */
+00439 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00041.html b/components/net/uip/doc/html/a00041.html new file mode 100644 index 0000000000000000000000000000000000000000..f1f93ea8e36a58bdf4cb8b552d148d28ca5fe3a7 --- /dev/null +++ b/components/net/uip/doc/html/a00041.html @@ -0,0 +1,248 @@ + + +uIP 1.0: webclient.h + + + + + +

webclient.h

00001 /**
+00002  * \addtogroup webclient
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  * Header file for the HTTP client.
+00009  * \author Adam Dunkels <adam@dunkels.com>
+00010  */
+00011 
+00012 /*
+00013  * Copyright (c) 2002, Adam Dunkels.
+00014  * All rights reserved.
+00015  *
+00016  * Redistribution and use in source and binary forms, with or without
+00017  * modification, are permitted provided that the following conditions
+00018  * are met:
+00019  * 1. Redistributions of source code must retain the above copyright
+00020  *    notice, this list of conditions and the following disclaimer.
+00021  * 2. Redistributions in binary form must reproduce the above
+00022  *    copyright notice, this list of conditions and the following
+00023  *    disclaimer in the documentation and/or other materials provided
+00024  *    with the distribution.
+00025  * 3. The name of the author may not be used to endorse or promote
+00026  *    products derived from this software without specific prior
+00027  *    written permission.
+00028  *
+00029  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00030  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00031  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00032  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00033  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00034  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00035  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00036  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00037  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00038  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00039  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00040  *
+00041  * This file is part of the uIP TCP/IP stack.
+00042  *
+00043  * $Id: webclient.h,v 1.2 2006/06/11 21:46:37 adam Exp $
+00044  *
+00045  */
+00046 #ifndef __WEBCLIENT_H__
+00047 #define __WEBCLIENT_H__
+00048 
+00049 
+00050 #include "webclient-strings.h"
+00051 #include "uipopt.h"
+00052 
+00053 #define WEBCLIENT_CONF_MAX_URLLEN 100
+00054 
+00055 struct webclient_state {
+00056   u8_t timer;
+00057   u8_t state;
+00058   u8_t httpflag;
+00059 
+00060   u16_t port;
+00061   char host[40];
+00062   char file[WEBCLIENT_CONF_MAX_URLLEN];
+00063   u16_t getrequestptr;
+00064   u16_t getrequestleft;
+00065   
+00066   char httpheaderline[200];
+00067   u16_t httpheaderlineptr;
+00068 
+00069   char mimetype[32];
+00070 };
+00071 
+00072 typedef struct webclient_state uip_tcp_appstate_t;
+00073 #define UIP_APPCALL webclient_appcall
+00074 
+00075 /**
+00076  * Callback function that is called from the webclient code when HTTP
+00077  * data has been received.
+00078  *
+00079  * This function must be implemented by the module that uses the
+00080  * webclient code. The function is called from the webclient module
+00081  * when HTTP data has been received. The function is not called when
+00082  * HTTP headers are received, only for the actual data.
+00083  *
+00084  * \note This function is called many times, repetedly, when data is
+00085  * being received, and not once when all data has been received.
+00086  *
+00087  * \param data A pointer to the data that has been received.
+00088  * \param len The length of the data that has been received.
+00089  */
+00090 void webclient_datahandler(char *data, u16_t len);
+00091 
+00092 /**
+00093  * Callback function that is called from the webclient code when the
+00094  * HTTP connection has been connected to the web server.
+00095  *
+00096  * This function must be implemented by the module that uses the
+00097  * webclient code.
+00098  */
+00099 void webclient_connected(void);
+00100 
+00101 /**
+00102  * Callback function that is called from the webclient code if the
+00103  * HTTP connection to the web server has timed out.
+00104  *
+00105  * This function must be implemented by the module that uses the
+00106  * webclient code.
+00107  */
+00108 void webclient_timedout(void);
+00109 
+00110 /**
+00111  * Callback function that is called from the webclient code if the
+00112  * HTTP connection to the web server has been aborted by the web
+00113  * server.
+00114  *
+00115  * This function must be implemented by the module that uses the
+00116  * webclient code.
+00117  */
+00118 void webclient_aborted(void);
+00119 
+00120 /**
+00121  * Callback function that is called from the webclient code when the
+00122  * HTTP connection to the web server has been closed.
+00123  *
+00124  * This function must be implemented by the module that uses the
+00125  * webclient code.
+00126  */
+00127 void webclient_closed(void);
+00128 
+00129 
+00130 
+00131 /**
+00132  * Initialize the webclient module.
+00133  */
+00134 void webclient_init(void);
+00135 
+00136 /**
+00137  * Open an HTTP connection to a web server and ask for a file using
+00138  * the GET method.
+00139  *
+00140  * This function opens an HTTP connection to the specified web server
+00141  * and requests the specified file using the GET method. When the HTTP
+00142  * connection has been connected, the webclient_connected() callback
+00143  * function is called and when the HTTP data arrives the
+00144  * webclient_datahandler() callback function is called.
+00145  *
+00146  * The callback function webclient_timedout() is called if the web
+00147  * server could not be contacted, and the webclient_aborted() callback
+00148  * function is called if the HTTP connection is aborted by the web
+00149  * server.
+00150  *
+00151  * When the HTTP request has been completed and the HTTP connection is
+00152  * closed, the webclient_closed() callback function will be called.
+00153  *
+00154  * \note If the function is passed a host name, it must already be in
+00155  * the resolver cache in order for the function to connect to the web
+00156  * server. It is therefore up to the calling module to implement the
+00157  * resolver calls and the signal handler used for reporting a resolv
+00158  * query answer.
+00159  *
+00160  * \param host A pointer to a string containing either a host name or
+00161  * a numerical IP address in dotted decimal notation (e.g., 192.168.23.1).
+00162  *
+00163  * \param port The port number to which to connect, in host byte order.
+00164  *
+00165  * \param file A pointer to the name of the file to get.
+00166  *
+00167  * \retval 0 if the host name could not be found in the cache, or
+00168  * if a TCP connection could not be created.
+00169  *
+00170  * \retval 1 if the connection was initiated.
+00171  */
+00172 unsigned char webclient_get(char *host, u16_t port, char *file);
+00173 
+00174 /**
+00175  * Close the currently open HTTP connection.
+00176  */
+00177 void webclient_close(void);
+00178 void webclient_appcall(void);
+00179 
+00180 /**
+00181  * Obtain the MIME type of the current HTTP data stream.
+00182  *
+00183  * \return A pointer to a string contaning the MIME type. The string
+00184  * may be empty if no MIME type was reported by the web server.
+00185  */
+00186 char *webclient_mimetype(void);
+00187 
+00188 /**
+00189  * Obtain the filename of the current HTTP data stream.
+00190  *
+00191  * The filename of an HTTP request may be changed by the web server,
+00192  * and may therefore not be the same as when the original GET request
+00193  * was made with webclient_get(). This function is used for obtaining
+00194  * the current filename.
+00195  *
+00196  * \return A pointer to the current filename.
+00197  */
+00198 char *webclient_filename(void);
+00199 
+00200 /**
+00201  * Obtain the hostname of the current HTTP data stream.
+00202  *
+00203  * The hostname of the web server of an HTTP request may be changed
+00204  * by the web server, and may therefore not be the same as when the
+00205  * original GET request was made with webclient_get(). This function
+00206  * is used for obtaining the current hostname.
+00207  *
+00208  * \return A pointer to the current hostname.
+00209  */
+00210 char *webclient_hostname(void);
+00211 
+00212 /**
+00213  * Obtain the port number of the current HTTP data stream.
+00214  *
+00215  * The port number of an HTTP request may be changed by the web
+00216  * server, and may therefore not be the same as when the original GET
+00217  * request was made with webclient_get(). This function is used for
+00218  * obtaining the current port number.
+00219  *
+00220  * \return The port number of the current HTTP data stream, in host byte order.
+00221  */
+00222 unsigned short webclient_port(void);
+00223 
+00224 
+00225 
+00226 #endif /* __WEBCLIENT_H__ */
+00227 
+00228 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00042.html b/components/net/uip/doc/html/a00042.html new file mode 100644 index 0000000000000000000000000000000000000000..ecff751f8016ebe5e40c4405740f39bd54806782 --- /dev/null +++ b/components/net/uip/doc/html/a00042.html @@ -0,0 +1,106 @@ + + +uIP 1.0: example-mainloop-with-arp.c + + + + + +

example-mainloop-with-arp.c

00001 #include "uip.h"
+00002 #include "uip_arp.h"
+00003 #include "network-device.h"
+00004 #include "httpd.h"
+00005 #include "timer.h"
+00006 
+00007 #define BUF ((struct uip_eth_hdr *)&uip_buf[0])
+00008 
+00009 /*---------------------------------------------------------------------------*/
+00010 int
+00011 main(void)
+00012 {
+00013   int i;
+00014   uip_ipaddr_t ipaddr;
+00015   struct timer periodic_timer, arp_timer;
+00016   
+00017   timer_set(&periodic_timer, CLOCK_SECOND / 2);
+00018   timer_set(&arp_timer, CLOCK_SECOND * 10);
+00019   
+00020   network_device_init();
+00021   uip_init();
+00022 
+00023   uip_ipaddr(ipaddr, 192,168,0,2);
+00024   uip_sethostaddr(ipaddr);
+00025 
+00026   httpd_init();
+00027   
+00028   while(1) {
+00029     uip_len = network_device_read();
+00030     if(uip_len > 0) {
+00031       if(BUF->type == htons(UIP_ETHTYPE_IP)) {
+00032         uip_arp_ipin();
+00033         uip_input();
+00034         /* If the above function invocation resulted in data that
+00035            should be sent out on the network, the global variable
+00036            uip_len is set to a value > 0. */
+00037         if(uip_len > 0) {
+00038           uip_arp_out();
+00039           network_device_send();
+00040         }
+00041       } else if(BUF->type == htons(UIP_ETHTYPE_ARP)) {
+00042         uip_arp_arpin();
+00043         /* If the above function invocation resulted in data that
+00044            should be sent out on the network, the global variable
+00045            uip_len is set to a value > 0. */
+00046         if(uip_len > 0) {
+00047           network_device_send();
+00048         }
+00049       }
+00050 
+00051     } else if(timer_expired(&periodic_timer)) {
+00052       timer_reset(&periodic_timer);
+00053       for(i = 0; i < UIP_CONNS; i++) {
+00054         uip_periodic(i);
+00055         /* If the above function invocation resulted in data that
+00056            should be sent out on the network, the global variable
+00057            uip_len is set to a value > 0. */
+00058         if(uip_len > 0) {
+00059           uip_arp_out();
+00060           network_device_send();
+00061         }
+00062       }
+00063 
+00064 #if UIP_UDP
+00065       for(i = 0; i < UIP_UDP_CONNS; i++) {
+00066         uip_udp_periodic(i);
+00067         /* If the above function invocation resulted in data that
+00068            should be sent out on the network, the global variable
+00069            uip_len is set to a value > 0. */
+00070         if(uip_len > 0) {
+00071           uip_arp_out();
+00072           network_device_send();
+00073         }
+00074       }
+00075 #endif /* UIP_UDP */
+00076       
+00077       /* Call the ARP timer function every 10 seconds. */
+00078       if(timer_expired(&arp_timer)) {
+00079         timer_reset(&arp_timer);
+00080         uip_arp_timer();
+00081       }
+00082     }
+00083   }
+00084   return 0;
+00085 }
+00086 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00043.html b/components/net/uip/doc/html/a00043.html new file mode 100644 index 0000000000000000000000000000000000000000..be8d85ccf1d7fd067cebbeba9173dd0e38070cbf --- /dev/null +++ b/components/net/uip/doc/html/a00043.html @@ -0,0 +1,82 @@ + + +uIP 1.0: example-mainloop-without-arp.c + + + + + +

example-mainloop-without-arp.c

00001 #include "uip.h"
+00002 #include "uip_arp.h"
+00003 #include "network-device.h"
+00004 #include "httpd.h"
+00005 #include "timer.h"
+00006 
+00007 /*---------------------------------------------------------------------------*/
+00008 int
+00009 main(void)
+00010 {
+00011   int i;
+00012   uip_ipaddr_t ipaddr;
+00013   struct timer periodic_timer;
+00014   
+00015   timer_set(&periodic_timer, CLOCK_SECOND / 2);
+00016   
+00017   network_device_init();
+00018   uip_init();
+00019 
+00020   uip_ipaddr(ipaddr, 192,168,0,2);
+00021   uip_sethostaddr(ipaddr);
+00022 
+00023   httpd_init();
+00024   
+00025   while(1) {
+00026     uip_len = network_device_read();
+00027     if(uip_len > 0) {
+00028       uip_input();
+00029       /* If the above function invocation resulted in data that
+00030          should be sent out on the network, the global variable
+00031          uip_len is set to a value > 0. */
+00032       if(uip_len > 0) {
+00033         network_device_send();
+00034       }
+00035     } else if(timer_expired(&periodic_timer)) {
+00036       timer_reset(&periodic_timer);
+00037       for(i = 0; i < UIP_CONNS; i++) {
+00038         uip_periodic(i);
+00039         /* If the above function invocation resulted in data that
+00040            should be sent out on the network, the global variable
+00041            uip_len is set to a value > 0. */
+00042         if(uip_len > 0) {
+00043           network_device_send();
+00044         }
+00045       }
+00046 
+00047 #if UIP_UDP
+00048       for(i = 0; i < UIP_UDP_CONNS; i++) {
+00049         uip_udp_periodic(i);
+00050         /* If the above function invocation resulted in data that
+00051            should be sent out on the network, the global variable
+00052            uip_len is set to a value > 0. */
+00053         if(uip_len > 0) {
+00054           network_device_send();
+00055         }
+00056       }
+00057 #endif /* UIP_UDP */
+00058     }
+00059   }
+00060   return 0;
+00061 }
+00062 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00044.html b/components/net/uip/doc/html/a00044.html new file mode 100644 index 0000000000000000000000000000000000000000..63af613811897b69f8cca62f2d63e3d179c2e778 --- /dev/null +++ b/components/net/uip/doc/html/a00044.html @@ -0,0 +1,370 @@ + + +uIP 1.0: telnetd.c + + + + + +

telnetd.c

00001 /*
+00002  * Copyright (c) 2003, Adam Dunkels.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. The name of the author may not be used to endorse or promote
+00014  *    products derived from this software without specific prior
+00015  *    written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00018  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00019  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00021  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00023  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00024  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00025  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00026  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00027  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * $Id: telnetd.c,v 1.2 2006/06/07 09:43:54 adam Exp $
+00032  *
+00033  */
+00034 
+00035 #include "uip.h"
+00036 #include "telnetd.h"
+00037 #include "memb.h"
+00038 #include "shell.h"
+00039 
+00040 #include <string.h>
+00041 
+00042 #define ISO_nl       0x0a
+00043 #define ISO_cr       0x0d
+00044 
+00045 struct telnetd_line {
+00046   char line[TELNETD_CONF_LINELEN];
+00047 };
+00048 MEMB(linemem, struct telnetd_line, TELNETD_CONF_NUMLINES);
+00049 
+00050 #define STATE_NORMAL 0
+00051 #define STATE_IAC    1
+00052 #define STATE_WILL   2
+00053 #define STATE_WONT   3
+00054 #define STATE_DO     4
+00055 #define STATE_DONT   5
+00056 #define STATE_CLOSE  6
+00057 
+00058 static struct telnetd_state s;
+00059 
+00060 #define TELNET_IAC   255
+00061 #define TELNET_WILL  251
+00062 #define TELNET_WONT  252
+00063 #define TELNET_DO    253
+00064 #define TELNET_DONT  254
+00065 /*---------------------------------------------------------------------------*/
+00066 static char *
+00067 alloc_line(void)
+00068 {
+00069   return memb_alloc(&linemem);
+00070 }
+00071 /*---------------------------------------------------------------------------*/
+00072 static void
+00073 dealloc_line(char *line)
+00074 {
+00075   memb_free(&linemem, line);
+00076 }
+00077 /*---------------------------------------------------------------------------*/
+00078 void
+00079 shell_quit(char *str)
+00080 {
+00081   s.state = STATE_CLOSE;
+00082 }
+00083 /*---------------------------------------------------------------------------*/
+00084 static void
+00085 sendline(char *line)
+00086 {
+00087   static unsigned int i;
+00088   
+00089   for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+00090     if(s.lines[i] == NULL) {
+00091       s.lines[i] = line;
+00092       break;
+00093     }
+00094   }
+00095   if(i == TELNETD_CONF_NUMLINES) {
+00096     dealloc_line(line);
+00097   }
+00098 }
+00099 /*---------------------------------------------------------------------------*/
+00100 void
+00101 shell_prompt(char *str)
+00102 {
+00103   char *line;
+00104   line = alloc_line();
+00105   if(line != NULL) {
+00106     strncpy(line, str, TELNETD_CONF_LINELEN);
+00107     /*    petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/
+00108     sendline(line);
+00109   }
+00110 }
+00111 /*---------------------------------------------------------------------------*/
+00112 void
+00113 shell_output(char *str1, char *str2)
+00114 {
+00115   static unsigned len;
+00116   char *line;
+00117 
+00118   line = alloc_line();
+00119   if(line != NULL) {
+00120     len = strlen(str1);
+00121     strncpy(line, str1, TELNETD_CONF_LINELEN);
+00122     if(len < TELNETD_CONF_LINELEN) {
+00123       strncpy(line + len, str2, TELNETD_CONF_LINELEN - len);
+00124     }
+00125     len = strlen(line);
+00126     if(len < TELNETD_CONF_LINELEN - 2) {
+00127       line[len] = ISO_cr;
+00128       line[len+1] = ISO_nl;
+00129       line[len+2] = 0;
+00130     }
+00131     /*    petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/
+00132     sendline(line);
+00133   }
+00134 }
+00135 /*---------------------------------------------------------------------------*/
+00136 void
+00137 telnetd_init(void)
+00138 {
+00139   uip_listen(HTONS(23));
+00140   memb_init(&linemem);
+00141   shell_init();
+00142 }
+00143 /*---------------------------------------------------------------------------*/
+00144 static void
+00145 acked(void)
+00146 {
+00147   static unsigned int i;
+00148   
+00149   while(s.numsent > 0) {
+00150     dealloc_line(s.lines[0]);
+00151     for(i = 1; i < TELNETD_CONF_NUMLINES; ++i) {
+00152       s.lines[i - 1] = s.lines[i];
+00153     }
+00154     s.lines[TELNETD_CONF_NUMLINES - 1] = NULL;
+00155     --s.numsent;
+00156   }
+00157 }
+00158 /*---------------------------------------------------------------------------*/
+00159 static void
+00160 senddata(void)
+00161 {
+00162   static char *bufptr, *lineptr;
+00163   static int buflen, linelen;
+00164   
+00165   bufptr = uip_appdata;
+00166   buflen = 0;
+00167   for(s.numsent = 0; s.numsent < TELNETD_CONF_NUMLINES &&
+00168         s.lines[s.numsent] != NULL ; ++s.numsent) {
+00169     lineptr = s.lines[s.numsent];
+00170     linelen = strlen(lineptr);
+00171     if(linelen > TELNETD_CONF_LINELEN) {
+00172       linelen = TELNETD_CONF_LINELEN;
+00173     }
+00174     if(buflen + linelen < uip_mss()) {
+00175       memcpy(bufptr, lineptr, linelen);
+00176       bufptr += linelen;
+00177       buflen += linelen;
+00178     } else {
+00179       break;
+00180     }
+00181   }
+00182   uip_send(uip_appdata, buflen);
+00183 }
+00184 /*---------------------------------------------------------------------------*/
+00185 static void
+00186 closed(void)
+00187 {
+00188   static unsigned int i;
+00189   
+00190   for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+00191     if(s.lines[i] != NULL) {
+00192       dealloc_line(s.lines[i]);
+00193     }
+00194   }
+00195 }
+00196 /*---------------------------------------------------------------------------*/
+00197 static void
+00198 get_char(u8_t c)
+00199 {
+00200   if(c == ISO_cr) {
+00201     return;
+00202   }
+00203   
+00204   s.buf[(int)s.bufptr] = c;
+00205   if(s.buf[(int)s.bufptr] == ISO_nl ||
+00206      s.bufptr == sizeof(s.buf) - 1) {
+00207     if(s.bufptr > 0) {
+00208       s.buf[(int)s.bufptr] = 0;
+00209       /*      petsciiconv_topetscii(s.buf, TELNETD_CONF_LINELEN);*/
+00210     }
+00211     shell_input(s.buf);
+00212     s.bufptr = 0;
+00213   } else {
+00214     ++s.bufptr;
+00215   }
+00216 }
+00217 /*---------------------------------------------------------------------------*/
+00218 static void
+00219 sendopt(u8_t option, u8_t value)
+00220 {
+00221   char *line;
+00222   line = alloc_line();
+00223   if(line != NULL) {
+00224     line[0] = TELNET_IAC;
+00225     line[1] = option;
+00226     line[2] = value;
+00227     line[3] = 0;
+00228     sendline(line);
+00229   }
+00230 }
+00231 /*---------------------------------------------------------------------------*/
+00232 static void
+00233 newdata(void)
+00234 {
+00235   u16_t len;
+00236   u8_t c;
+00237   char *dataptr;
+00238     
+00239   
+00240   len = uip_datalen();
+00241   dataptr = (char *)uip_appdata;
+00242   
+00243   while(len > 0 && s.bufptr < sizeof(s.buf)) {
+00244     c = *dataptr;
+00245     ++dataptr;
+00246     --len;
+00247     switch(s.state) {
+00248     case STATE_IAC:
+00249       if(c == TELNET_IAC) {
+00250         get_char(c);
+00251         s.state = STATE_NORMAL;
+00252       } else {
+00253         switch(c) {
+00254         case TELNET_WILL:
+00255           s.state = STATE_WILL;
+00256           break;
+00257         case TELNET_WONT:
+00258           s.state = STATE_WONT;
+00259           break;
+00260         case TELNET_DO:
+00261           s.state = STATE_DO;
+00262           break;
+00263         case TELNET_DONT:
+00264           s.state = STATE_DONT;
+00265           break;
+00266         default:
+00267           s.state = STATE_NORMAL;
+00268           break;
+00269         }
+00270       }
+00271       break;
+00272     case STATE_WILL:
+00273       /* Reply with a DONT */
+00274       sendopt(TELNET_DONT, c);
+00275       s.state = STATE_NORMAL;
+00276       break;
+00277       
+00278     case STATE_WONT:
+00279       /* Reply with a DONT */
+00280       sendopt(TELNET_DONT, c);
+00281       s.state = STATE_NORMAL;
+00282       break;
+00283     case STATE_DO:
+00284       /* Reply with a WONT */
+00285       sendopt(TELNET_WONT, c);
+00286       s.state = STATE_NORMAL;
+00287       break;
+00288     case STATE_DONT:
+00289       /* Reply with a WONT */
+00290       sendopt(TELNET_WONT, c);
+00291       s.state = STATE_NORMAL;
+00292       break;
+00293     case STATE_NORMAL:
+00294       if(c == TELNET_IAC) {
+00295         s.state = STATE_IAC;
+00296       } else {
+00297         get_char(c);
+00298       }
+00299       break;
+00300     }
+00301 
+00302     
+00303   }
+00304   
+00305 }
+00306 /*---------------------------------------------------------------------------*/
+00307 void
+00308 telnetd_appcall(void)
+00309 {
+00310   static unsigned int i;
+00311   if(uip_connected()) {
+00312     /*    tcp_markconn(uip_conn, &s);*/
+00313     for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+00314       s.lines[i] = NULL;
+00315     }
+00316     s.bufptr = 0;
+00317     s.state = STATE_NORMAL;
+00318 
+00319     shell_start();
+00320   }
+00321 
+00322   if(s.state == STATE_CLOSE) {
+00323     s.state = STATE_NORMAL;
+00324     uip_close();
+00325     return;
+00326   }
+00327   
+00328   if(uip_closed() ||
+00329      uip_aborted() ||
+00330      uip_timedout()) {
+00331     closed();
+00332   }
+00333   
+00334   if(uip_acked()) {
+00335     acked();
+00336   }
+00337   
+00338   if(uip_newdata()) {
+00339     newdata();
+00340   }
+00341   
+00342   if(uip_rexmit() ||
+00343      uip_newdata() ||
+00344      uip_acked() ||
+00345      uip_connected() ||
+00346      uip_poll()) {
+00347     senddata();
+00348   }
+00349 }
+00350 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00045.html b/components/net/uip/doc/html/a00045.html new file mode 100644 index 0000000000000000000000000000000000000000..7ed6df90205e03a6b613e7cd93b9f7d81a2b305d --- /dev/null +++ b/components/net/uip/doc/html/a00045.html @@ -0,0 +1,83 @@ + + +uIP 1.0: telnetd.h + + + + + +

telnetd.h

00001 /*
+00002  * Copyright (c) 2003, Adam Dunkels.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above
+00011  *    copyright notice, this list of conditions and the following
+00012  *    disclaimer in the documentation and/or other materials provided
+00013  *    with the distribution.
+00014  * 3. The name of the author may not be used to endorse or promote
+00015  *    products derived from this software without specific prior
+00016  *    written permission.
+00017  *
+00018  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00019  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00020  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00021  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00022  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00023  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00024  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00025  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00026  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00027  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00028  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00029  *
+00030  * This file is part of the uIP TCP/IP stack
+00031  *
+00032  * $Id: telnetd.h,v 1.2 2006/06/07 09:43:54 adam Exp $
+00033  *
+00034  */
+00035 #ifndef __TELNETD_H__
+00036 #define __TELNETD_H__
+00037 
+00038 #include "uipopt.h"
+00039 
+00040 void telnetd_appcall(void);
+00041 
+00042 #ifndef TELNETD_CONF_LINELEN
+00043 #define TELNETD_CONF_LINELEN 40
+00044 #endif
+00045 #ifndef TELNETD_CONF_NUMLINES
+00046 #define TELNETD_CONF_NUMLINES 16
+00047 #endif
+00048 
+00049 struct telnetd_state {
+00050   char *lines[TELNETD_CONF_NUMLINES];
+00051   char buf[TELNETD_CONF_LINELEN];
+00052   char bufptr;
+00053   u8_t numsent;
+00054   u8_t state;
+00055 };
+00056 
+00057 typedef struct telnetd_state uip_tcp_appstate_t;
+00058 
+00059 #ifndef UIP_APPCALL
+00060 #define UIP_APPCALL     telnetd_appcall
+00061 #endif
+00062 
+00063 #endif /* __TELNETD_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00046.html b/components/net/uip/doc/html/a00046.html new file mode 100644 index 0000000000000000000000000000000000000000..9e877ea147b7c66ed61d69ce6cc4dbb6c64499ce --- /dev/null +++ b/components/net/uip/doc/html/a00046.html @@ -0,0 +1,484 @@ + + +uIP 1.0: resolv.c + + + + + +

resolv.c

00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup resolv DNS resolver
+00008  * @{
+00009  *
+00010  * The uIP DNS resolver functions are used to lookup a hostname and
+00011  * map it to a numerical IP address. It maintains a list of resolved
+00012  * hostnames that can be queried with the resolv_lookup()
+00013  * function. New hostnames can be resolved using the resolv_query()
+00014  * function.
+00015  *
+00016  * When a hostname has been resolved (or found to be non-existant),
+00017  * the resolver code calls a callback function called resolv_found()
+00018  * that must be implemented by the module that uses the resolver.
+00019  */
+00020 
+00021 /**
+00022  * \file
+00023  * DNS host name to IP address resolver.
+00024  * \author Adam Dunkels <adam@dunkels.com>
+00025  *
+00026  * This file implements a DNS host name to IP address resolver.
+00027  */
+00028 
+00029 /*
+00030  * Copyright (c) 2002-2003, Adam Dunkels.
+00031  * All rights reserved.
+00032  *
+00033  * Redistribution and use in source and binary forms, with or without
+00034  * modification, are permitted provided that the following conditions
+00035  * are met:
+00036  * 1. Redistributions of source code must retain the above copyright
+00037  *    notice, this list of conditions and the following disclaimer.
+00038  * 2. Redistributions in binary form must reproduce the above copyright
+00039  *    notice, this list of conditions and the following disclaimer in the
+00040  *    documentation and/or other materials provided with the distribution.
+00041  * 3. The name of the author may not be used to endorse or promote
+00042  *    products derived from this software without specific prior
+00043  *    written permission.
+00044  *
+00045  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00046  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00047  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00048  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00049  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00050  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00051  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00052  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00053  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00054  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00055  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00056  *
+00057  * This file is part of the uIP TCP/IP stack.
+00058  *
+00059  * $Id: resolv.c,v 1.5 2006/06/11 21:46:37 adam Exp $
+00060  *
+00061  */
+00062 
+00063 #include "resolv.h"
+00064 #include "uip.h"
+00065 
+00066 #include <string.h>
+00067 
+00068 #ifndef NULL
+00069 #define NULL (void *)0
+00070 #endif /* NULL */
+00071 
+00072 /** \internal The maximum number of retries when asking for a name. */
+00073 #define MAX_RETRIES 8
+00074 
+00075 /** \internal The DNS message header. */
+00076 struct dns_hdr {
+00077   u16_t id;
+00078   u8_t flags1, flags2;
+00079 #define DNS_FLAG1_RESPONSE        0x80
+00080 #define DNS_FLAG1_OPCODE_STATUS   0x10
+00081 #define DNS_FLAG1_OPCODE_INVERSE  0x08
+00082 #define DNS_FLAG1_OPCODE_STANDARD 0x00
+00083 #define DNS_FLAG1_AUTHORATIVE     0x04
+00084 #define DNS_FLAG1_TRUNC           0x02
+00085 #define DNS_FLAG1_RD              0x01
+00086 #define DNS_FLAG2_RA              0x80
+00087 #define DNS_FLAG2_ERR_MASK        0x0f
+00088 #define DNS_FLAG2_ERR_NONE        0x00
+00089 #define DNS_FLAG2_ERR_NAME        0x03
+00090   u16_t numquestions;
+00091   u16_t numanswers;
+00092   u16_t numauthrr;
+00093   u16_t numextrarr;
+00094 };
+00095 
+00096 /** \internal The DNS answer message structure. */
+00097 struct dns_answer {
+00098   /* DNS answer record starts with either a domain name or a pointer
+00099      to a name already present somewhere in the packet. */
+00100   u16_t type;
+00101   u16_t class;
+00102   u16_t ttl[2];
+00103   u16_t len;
+00104   uip_ipaddr_t ipaddr;
+00105 };
+00106 
+00107 struct namemap {
+00108 #define STATE_UNUSED 0
+00109 #define STATE_NEW    1
+00110 #define STATE_ASKING 2
+00111 #define STATE_DONE   3
+00112 #define STATE_ERROR  4
+00113   u8_t state;
+00114   u8_t tmr;
+00115   u8_t retries;
+00116   u8_t seqno;
+00117   u8_t err;
+00118   char name[32];
+00119   uip_ipaddr_t ipaddr;
+00120 };
+00121 
+00122 #ifndef UIP_CONF_RESOLV_ENTRIES
+00123 #define RESOLV_ENTRIES 4
+00124 #else /* UIP_CONF_RESOLV_ENTRIES */
+00125 #define RESOLV_ENTRIES UIP_CONF_RESOLV_ENTRIES
+00126 #endif /* UIP_CONF_RESOLV_ENTRIES */
+00127 
+00128 
+00129 static struct namemap names[RESOLV_ENTRIES];
+00130 
+00131 static u8_t seqno;
+00132 
+00133 static struct uip_udp_conn *resolv_conn = NULL;
+00134 
+00135 
+00136 /*---------------------------------------------------------------------------*/
+00137 /** \internal
+00138  * Walk through a compact encoded DNS name and return the end of it.
+00139  *
+00140  * \return The end of the name.
+00141  */
+00142 /*---------------------------------------------------------------------------*/
+00143 static unsigned char *
+00144 parse_name(unsigned char *query)
+00145 {
+00146   unsigned char n;
+00147 
+00148   do {
+00149     n = *query++;
+00150     
+00151     while(n > 0) {
+00152       /*      printf("%c", *query);*/
+00153       ++query;
+00154       --n;
+00155     };
+00156     /*    printf(".");*/
+00157   } while(*query != 0);
+00158   /*  printf("\n");*/
+00159   return query + 1;
+00160 }
+00161 /*---------------------------------------------------------------------------*/
+00162 /** \internal
+00163  * Runs through the list of names to see if there are any that have
+00164  * not yet been queried and, if so, sends out a query.
+00165  */
+00166 /*---------------------------------------------------------------------------*/
+00167 static void
+00168 check_entries(void)
+00169 {
+00170   register struct dns_hdr *hdr;
+00171   char *query, *nptr, *nameptr;
+00172   static u8_t i;
+00173   static u8_t n;
+00174   register struct namemap *namemapptr;
+00175   
+00176   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00177     namemapptr = &names[i];
+00178     if(namemapptr->state == STATE_NEW ||
+00179        namemapptr->state == STATE_ASKING) {
+00180       if(namemapptr->state == STATE_ASKING) {
+00181         if(--namemapptr->tmr == 0) {
+00182           if(++namemapptr->retries == MAX_RETRIES) {
+00183             namemapptr->state = STATE_ERROR;
+00184             resolv_found(namemapptr->name, NULL);
+00185             continue;
+00186           }
+00187           namemapptr->tmr = namemapptr->retries;
+00188         } else {
+00189           /*      printf("Timer %d\n", namemapptr->tmr);*/
+00190           /* Its timer has not run out, so we move on to next
+00191              entry. */
+00192           continue;
+00193         }
+00194       } else {
+00195         namemapptr->state = STATE_ASKING;
+00196         namemapptr->tmr = 1;
+00197         namemapptr->retries = 0;
+00198       }
+00199       hdr = (struct dns_hdr *)uip_appdata;
+00200       memset(hdr, 0, sizeof(struct dns_hdr));
+00201       hdr->id = htons(i);
+00202       hdr->flags1 = DNS_FLAG1_RD;
+00203       hdr->numquestions = HTONS(1);
+00204       query = (char *)uip_appdata + 12;
+00205       nameptr = namemapptr->name;
+00206       --nameptr;
+00207       /* Convert hostname into suitable query format. */
+00208       do {
+00209         ++nameptr;
+00210         nptr = query;
+00211         ++query;
+00212         for(n = 0; *nameptr != '.' && *nameptr != 0; ++nameptr) {
+00213           *query = *nameptr;
+00214           ++query;
+00215           ++n;
+00216         }
+00217         *nptr = n;
+00218       } while(*nameptr != 0);
+00219       {
+00220         static unsigned char endquery[] =
+00221           {0,0,1,0,1};
+00222         memcpy(query, endquery, 5);
+00223       }
+00224       uip_udp_send((unsigned char)(query + 5 - (char *)uip_appdata));
+00225       break;
+00226     }
+00227   }
+00228 }
+00229 /*---------------------------------------------------------------------------*/
+00230 /** \internal
+00231  * Called when new UDP data arrives.
+00232  */
+00233 /*---------------------------------------------------------------------------*/
+00234 static void
+00235 newdata(void)
+00236 {
+00237   char *nameptr;
+00238   struct dns_answer *ans;
+00239   struct dns_hdr *hdr;
+00240   static u8_t nquestions, nanswers;
+00241   static u8_t i;
+00242   register struct namemap *namemapptr;
+00243   
+00244   hdr = (struct dns_hdr *)uip_appdata;
+00245   /*  printf("ID %d\n", htons(hdr->id));
+00246       printf("Query %d\n", hdr->flags1 & DNS_FLAG1_RESPONSE);
+00247       printf("Error %d\n", hdr->flags2 & DNS_FLAG2_ERR_MASK);
+00248       printf("Num questions %d, answers %d, authrr %d, extrarr %d\n",
+00249       htons(hdr->numquestions),
+00250       htons(hdr->numanswers),
+00251       htons(hdr->numauthrr),
+00252       htons(hdr->numextrarr));
+00253   */
+00254 
+00255   /* The ID in the DNS header should be our entry into the name
+00256      table. */
+00257   i = htons(hdr->id);
+00258   namemapptr = &names[i];
+00259   if(i < RESOLV_ENTRIES &&
+00260      namemapptr->state == STATE_ASKING) {
+00261 
+00262     /* This entry is now finished. */
+00263     namemapptr->state = STATE_DONE;
+00264     namemapptr->err = hdr->flags2 & DNS_FLAG2_ERR_MASK;
+00265 
+00266     /* Check for error. If so, call callback to inform. */
+00267     if(namemapptr->err != 0) {
+00268       namemapptr->state = STATE_ERROR;
+00269       resolv_found(namemapptr->name, NULL);
+00270       return;
+00271     }
+00272 
+00273     /* We only care about the question(s) and the answers. The authrr
+00274        and the extrarr are simply discarded. */
+00275     nquestions = htons(hdr->numquestions);
+00276     nanswers = htons(hdr->numanswers);
+00277 
+00278     /* Skip the name in the question. XXX: This should really be
+00279        checked agains the name in the question, to be sure that they
+00280        match. */
+00281     nameptr = parse_name((char *)uip_appdata + 12) + 4;
+00282 
+00283     while(nanswers > 0) {
+00284       /* The first byte in the answer resource record determines if it
+00285          is a compressed record or a normal one. */
+00286       if(*nameptr & 0xc0) {
+00287         /* Compressed name. */
+00288         nameptr +=2;
+00289         /*      printf("Compressed anwser\n");*/
+00290       } else {
+00291         /* Not compressed name. */
+00292         nameptr = parse_name((char *)nameptr);
+00293       }
+00294 
+00295       ans = (struct dns_answer *)nameptr;
+00296       /*      printf("Answer: type %x, class %x, ttl %x, length %x\n",
+00297              htons(ans->type), htons(ans->class), (htons(ans->ttl[0])
+00298              << 16) | htons(ans->ttl[1]), htons(ans->len));*/
+00299 
+00300       /* Check for IP address type and Internet class. Others are
+00301          discarded. */
+00302       if(ans->type == HTONS(1) &&
+00303          ans->class == HTONS(1) &&
+00304          ans->len == HTONS(4)) {
+00305         /*      printf("IP address %d.%d.%d.%d\n",
+00306                htons(ans->ipaddr[0]) >> 8,
+00307                htons(ans->ipaddr[0]) & 0xff,
+00308                htons(ans->ipaddr[1]) >> 8,
+00309                htons(ans->ipaddr[1]) & 0xff);*/
+00310         /* XXX: we should really check that this IP address is the one
+00311            we want. */
+00312         namemapptr->ipaddr[0] = ans->ipaddr[0];
+00313         namemapptr->ipaddr[1] = ans->ipaddr[1];
+00314         
+00315         resolv_found(namemapptr->name, namemapptr->ipaddr);
+00316         return;
+00317       } else {
+00318         nameptr = nameptr + 10 + htons(ans->len);
+00319       }
+00320       --nanswers;
+00321     }
+00322   }
+00323 
+00324 }
+00325 /*---------------------------------------------------------------------------*/
+00326 /** \internal
+00327  * The main UDP function.
+00328  */
+00329 /*---------------------------------------------------------------------------*/
+00330 void
+00331 resolv_appcall(void)
+00332 {
+00333   if(uip_udp_conn->rport == HTONS(53)) {
+00334     if(uip_poll()) {
+00335       check_entries();
+00336     }
+00337     if(uip_newdata()) {
+00338       newdata();
+00339     }
+00340   }
+00341 }
+00342 /*---------------------------------------------------------------------------*/
+00343 /**
+00344  * Queues a name so that a question for the name will be sent out.
+00345  *
+00346  * \param name The hostname that is to be queried.
+00347  */
+00348 /*---------------------------------------------------------------------------*/
+00349 void
+00350 resolv_query(char *name)
+00351 {
+00352   static u8_t i;
+00353   static u8_t lseq, lseqi;
+00354   register struct namemap *nameptr;
+00355       
+00356   lseq = lseqi = 0;
+00357   
+00358   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00359     nameptr = &names[i];
+00360     if(nameptr->state == STATE_UNUSED) {
+00361       break;
+00362     }
+00363     if(seqno - nameptr->seqno > lseq) {
+00364       lseq = seqno - nameptr->seqno;
+00365       lseqi = i;
+00366     }
+00367   }
+00368 
+00369   if(i == RESOLV_ENTRIES) {
+00370     i = lseqi;
+00371     nameptr = &names[i];
+00372   }
+00373 
+00374   /*  printf("Using entry %d\n", i);*/
+00375 
+00376   strcpy(nameptr->name, name);
+00377   nameptr->state = STATE_NEW;
+00378   nameptr->seqno = seqno;
+00379   ++seqno;
+00380 }
+00381 /*---------------------------------------------------------------------------*/
+00382 /**
+00383  * Look up a hostname in the array of known hostnames.
+00384  *
+00385  * \note This function only looks in the internal array of known
+00386  * hostnames, it does not send out a query for the hostname if none
+00387  * was found. The function resolv_query() can be used to send a query
+00388  * for a hostname.
+00389  *
+00390  * \return A pointer to a 4-byte representation of the hostname's IP
+00391  * address, or NULL if the hostname was not found in the array of
+00392  * hostnames.
+00393  */
+00394 /*---------------------------------------------------------------------------*/
+00395 u16_t *
+00396 resolv_lookup(char *name)
+00397 {
+00398   static u8_t i;
+00399   struct namemap *nameptr;
+00400   
+00401   /* Walk through the list to see if the name is in there. If it is
+00402      not, we return NULL. */
+00403   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00404     nameptr = &names[i];
+00405     if(nameptr->state == STATE_DONE &&
+00406        strcmp(name, nameptr->name) == 0) {
+00407       return nameptr->ipaddr;
+00408     }
+00409   }
+00410   return NULL;
+00411 }
+00412 /*---------------------------------------------------------------------------*/
+00413 /**
+00414  * Obtain the currently configured DNS server.
+00415  *
+00416  * \return A pointer to a 4-byte representation of the IP address of
+00417  * the currently configured DNS server or NULL if no DNS server has
+00418  * been configured.
+00419  */
+00420 /*---------------------------------------------------------------------------*/
+00421 u16_t *
+00422 resolv_getserver(void)
+00423 {
+00424   if(resolv_conn == NULL) {
+00425     return NULL;
+00426   }
+00427   return resolv_conn->ripaddr;
+00428 }
+00429 /*---------------------------------------------------------------------------*/
+00430 /**
+00431  * Configure which DNS server to use for queries.
+00432  *
+00433  * \param dnsserver A pointer to a 4-byte representation of the IP
+00434  * address of the DNS server to be configured.
+00435  */
+00436 /*---------------------------------------------------------------------------*/
+00437 void
+00438 resolv_conf(u16_t *dnsserver)
+00439 {
+00440   if(resolv_conn != NULL) {
+00441     uip_udp_remove(resolv_conn);
+00442   }
+00443   
+00444   resolv_conn = uip_udp_new(dnsserver, HTONS(53));
+00445 }
+00446 /*---------------------------------------------------------------------------*/
+00447 /**
+00448  * Initalize the resolver.
+00449  */
+00450 /*---------------------------------------------------------------------------*/
+00451 void
+00452 resolv_init(void)
+00453 {
+00454   static u8_t i;
+00455   
+00456   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00457     names[i].state = STATE_DONE;
+00458   }
+00459 
+00460 }
+00461 /*---------------------------------------------------------------------------*/
+00462 
+00463 /** @} */
+00464 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00047.html b/components/net/uip/doc/html/a00047.html new file mode 100644 index 0000000000000000000000000000000000000000..76d0ccc9c5b0df6862337ee595071671a1d6454b --- /dev/null +++ b/components/net/uip/doc/html/a00047.html @@ -0,0 +1,95 @@ + + +uIP 1.0: resolv.h + + + + + +

resolv.h

00001 /**
+00002  * \addtogroup resolv
+00003  * @{
+00004  */
+00005 /**
+00006  * \file
+00007  * DNS resolver code header file.
+00008  * \author Adam Dunkels <adam@dunkels.com>
+00009  */
+00010 
+00011 /*
+00012  * Copyright (c) 2002-2003, Adam Dunkels.
+00013  * All rights reserved.
+00014  *
+00015  * Redistribution and use in source and binary forms, with or without
+00016  * modification, are permitted provided that the following conditions
+00017  * are met:
+00018  * 1. Redistributions of source code must retain the above copyright
+00019  *    notice, this list of conditions and the following disclaimer.
+00020  * 2. Redistributions in binary form must reproduce the above copyright
+00021  *    notice, this list of conditions and the following disclaimer in the
+00022  *    documentation and/or other materials provided with the distribution.
+00023  * 3. The name of the author may not be used to endorse or promote
+00024  *    products derived from this software without specific prior
+00025  *    written permission.
+00026  *
+00027  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00028  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00029  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00030  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00031  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00032  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00033  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00034  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00035  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00036  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00037  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00038  *
+00039  * This file is part of the uIP TCP/IP stack.
+00040  *
+00041  * $Id: resolv.h,v 1.4 2006/06/11 21:46:37 adam Exp $
+00042  *
+00043  */
+00044 #ifndef __RESOLV_H__
+00045 #define __RESOLV_H__
+00046 
+00047 typedef int uip_udp_appstate_t;
+00048 void resolv_appcall(void);
+00049 #define UIP_UDP_APPCALL resolv_appcall
+00050 
+00051 #include "uipopt.h"
+00052 
+00053 /**
+00054  * Callback function which is called when a hostname is found.
+00055  *
+00056  * This function must be implemented by the module that uses the DNS
+00057  * resolver. It is called when a hostname is found, or when a hostname
+00058  * was not found.
+00059  *
+00060  * \param name A pointer to the name that was looked up.  \param
+00061  * ipaddr A pointer to a 4-byte array containing the IP address of the
+00062  * hostname, or NULL if the hostname could not be found.
+00063  */
+00064 void resolv_found(char *name, u16_t *ipaddr);
+00065 
+00066 /* Functions. */
+00067 void resolv_conf(u16_t *dnsserver);
+00068 u16_t *resolv_getserver(void);
+00069 void resolv_init(void);
+00070 u16_t *resolv_lookup(char *name);
+00071 void resolv_query(char *name);
+00072 
+00073 #endif /* __RESOLV_H__ */
+00074 
+00075 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00048.html b/components/net/uip/doc/html/a00048.html new file mode 100644 index 0000000000000000000000000000000000000000..d19bf1353567a95fb555a2520eb98d73d4310c81 --- /dev/null +++ b/components/net/uip/doc/html/a00048.html @@ -0,0 +1,376 @@ + + +uIP 1.0: dhcpc.c + + + + + +

dhcpc.c

00001 /*
+00002  * Copyright (c) 2005, Swedish Institute of Computer Science
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * @(#)$Id: dhcpc.c,v 1.2 2006/06/11 21:46:37 adam Exp $
+00032  */
+00033 
+00034 #include <stdio.h>
+00035 #include <string.h>
+00036 
+00037 #include "uip.h"
+00038 #include "dhcpc.h"
+00039 #include "timer.h"
+00040 #include "pt.h"
+00041 
+00042 #define STATE_INITIAL         0
+00043 #define STATE_SENDING         1
+00044 #define STATE_OFFER_RECEIVED  2
+00045 #define STATE_CONFIG_RECEIVED 3
+00046 
+00047 static struct dhcpc_state s;
+00048 
+00049 struct dhcp_msg {
+00050   u8_t op, htype, hlen, hops;
+00051   u8_t xid[4];
+00052   u16_t secs, flags;
+00053   u8_t ciaddr[4];
+00054   u8_t yiaddr[4];
+00055   u8_t siaddr[4];
+00056   u8_t giaddr[4];
+00057   u8_t chaddr[16];
+00058 #ifndef UIP_CONF_DHCP_LIGHT
+00059   u8_t sname[64];
+00060   u8_t file[128];
+00061 #endif
+00062   u8_t options[312];
+00063 };
+00064 
+00065 #define BOOTP_BROADCAST 0x8000
+00066 
+00067 #define DHCP_REQUEST        1
+00068 #define DHCP_REPLY          2
+00069 #define DHCP_HTYPE_ETHERNET 1
+00070 #define DHCP_HLEN_ETHERNET  6
+00071 #define DHCP_MSG_LEN      236
+00072 
+00073 #define DHCPC_SERVER_PORT  67
+00074 #define DHCPC_CLIENT_PORT  68
+00075 
+00076 #define DHCPDISCOVER  1
+00077 #define DHCPOFFER     2
+00078 #define DHCPREQUEST   3
+00079 #define DHCPDECLINE   4
+00080 #define DHCPACK       5
+00081 #define DHCPNAK       6
+00082 #define DHCPRELEASE   7
+00083 
+00084 #define DHCP_OPTION_SUBNET_MASK   1
+00085 #define DHCP_OPTION_ROUTER        3
+00086 #define DHCP_OPTION_DNS_SERVER    6
+00087 #define DHCP_OPTION_REQ_IPADDR   50
+00088 #define DHCP_OPTION_LEASE_TIME   51
+00089 #define DHCP_OPTION_MSG_TYPE     53
+00090 #define DHCP_OPTION_SERVER_ID    54
+00091 #define DHCP_OPTION_REQ_LIST     55
+00092 #define DHCP_OPTION_END         255
+00093 
+00094 static const u8_t xid[4] = {0xad, 0xde, 0x12, 0x23};
+00095 static const u8_t magic_cookie[4] = {99, 130, 83, 99};
+00096 /*---------------------------------------------------------------------------*/
+00097 static u8_t *
+00098 add_msg_type(u8_t *optptr, u8_t type)
+00099 {
+00100   *optptr++ = DHCP_OPTION_MSG_TYPE;
+00101   *optptr++ = 1;
+00102   *optptr++ = type;
+00103   return optptr;
+00104 }
+00105 /*---------------------------------------------------------------------------*/
+00106 static u8_t *
+00107 add_server_id(u8_t *optptr)
+00108 {
+00109   *optptr++ = DHCP_OPTION_SERVER_ID;
+00110   *optptr++ = 4;
+00111   memcpy(optptr, s.serverid, 4);
+00112   return optptr + 4;
+00113 }
+00114 /*---------------------------------------------------------------------------*/
+00115 static u8_t *
+00116 add_req_ipaddr(u8_t *optptr)
+00117 {
+00118   *optptr++ = DHCP_OPTION_REQ_IPADDR;
+00119   *optptr++ = 4;
+00120   memcpy(optptr, s.ipaddr, 4);
+00121   return optptr + 4;
+00122 }
+00123 /*---------------------------------------------------------------------------*/
+00124 static u8_t *
+00125 add_req_options(u8_t *optptr)
+00126 {
+00127   *optptr++ = DHCP_OPTION_REQ_LIST;
+00128   *optptr++ = 3;
+00129   *optptr++ = DHCP_OPTION_SUBNET_MASK;
+00130   *optptr++ = DHCP_OPTION_ROUTER;
+00131   *optptr++ = DHCP_OPTION_DNS_SERVER;
+00132   return optptr;
+00133 }
+00134 /*---------------------------------------------------------------------------*/
+00135 static u8_t *
+00136 add_end(u8_t *optptr)
+00137 {
+00138   *optptr++ = DHCP_OPTION_END;
+00139   return optptr;
+00140 }
+00141 /*---------------------------------------------------------------------------*/
+00142 static void
+00143 create_msg(register struct dhcp_msg *m)
+00144 {
+00145   m->op = DHCP_REQUEST;
+00146   m->htype = DHCP_HTYPE_ETHERNET;
+00147   m->hlen = s.mac_len;
+00148   m->hops = 0;
+00149   memcpy(m->xid, xid, sizeof(m->xid));
+00150   m->secs = 0;
+00151   m->flags = HTONS(BOOTP_BROADCAST); /*  Broadcast bit. */
+00152   /*  uip_ipaddr_copy(m->ciaddr, uip_hostaddr);*/
+00153   memcpy(m->ciaddr, uip_hostaddr, sizeof(m->ciaddr));
+00154   memset(m->yiaddr, 0, sizeof(m->yiaddr));
+00155   memset(m->siaddr, 0, sizeof(m->siaddr));
+00156   memset(m->giaddr, 0, sizeof(m->giaddr));
+00157   memcpy(m->chaddr, s.mac_addr, s.mac_len);
+00158   memset(&m->chaddr[s.mac_len], 0, sizeof(m->chaddr) - s.mac_len);
+00159 #ifndef UIP_CONF_DHCP_LIGHT
+00160   memset(m->sname, 0, sizeof(m->sname));
+00161   memset(m->file, 0, sizeof(m->file));
+00162 #endif
+00163 
+00164   memcpy(m->options, magic_cookie, sizeof(magic_cookie));
+00165 }
+00166 /*---------------------------------------------------------------------------*/
+00167 static void
+00168 send_discover(void)
+00169 {
+00170   u8_t *end;
+00171   struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata;
+00172 
+00173   create_msg(m);
+00174 
+00175   end = add_msg_type(&m->options[4], DHCPDISCOVER);
+00176   end = add_req_options(end);
+00177   end = add_end(end);
+00178 
+00179   uip_send(uip_appdata, end - (u8_t *)uip_appdata);
+00180 }
+00181 /*---------------------------------------------------------------------------*/
+00182 static void
+00183 send_request(void)
+00184 {
+00185   u8_t *end;
+00186   struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata;
+00187 
+00188   create_msg(m);
+00189   
+00190   end = add_msg_type(&m->options[4], DHCPREQUEST);
+00191   end = add_server_id(end);
+00192   end = add_req_ipaddr(end);
+00193   end = add_end(end);
+00194   
+00195   uip_send(uip_appdata, end - (u8_t *)uip_appdata);
+00196 }
+00197 /*---------------------------------------------------------------------------*/
+00198 static u8_t
+00199 parse_options(u8_t *optptr, int len)
+00200 {
+00201   u8_t *end = optptr + len;
+00202   u8_t type = 0;
+00203 
+00204   while(optptr < end) {
+00205     switch(*optptr) {
+00206     case DHCP_OPTION_SUBNET_MASK:
+00207       memcpy(s.netmask, optptr + 2, 4);
+00208       break;
+00209     case DHCP_OPTION_ROUTER:
+00210       memcpy(s.default_router, optptr + 2, 4);
+00211       break;
+00212     case DHCP_OPTION_DNS_SERVER:
+00213       memcpy(s.dnsaddr, optptr + 2, 4);
+00214       break;
+00215     case DHCP_OPTION_MSG_TYPE:
+00216       type = *(optptr + 2);
+00217       break;
+00218     case DHCP_OPTION_SERVER_ID:
+00219       memcpy(s.serverid, optptr + 2, 4);
+00220       break;
+00221     case DHCP_OPTION_LEASE_TIME:
+00222       memcpy(s.lease_time, optptr + 2, 4);
+00223       break;
+00224     case DHCP_OPTION_END:
+00225       return type;
+00226     }
+00227 
+00228     optptr += optptr[1] + 2;
+00229   }
+00230   return type;
+00231 }
+00232 /*---------------------------------------------------------------------------*/
+00233 static u8_t
+00234 parse_msg(void)
+00235 {
+00236   struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata;
+00237   
+00238   if(m->op == DHCP_REPLY &&
+00239      memcmp(m->xid, xid, sizeof(xid)) == 0 &&
+00240      memcmp(m->chaddr, s.mac_addr, s.mac_len) == 0) {
+00241     memcpy(s.ipaddr, m->yiaddr, 4);
+00242     return parse_options(&m->options[4], uip_datalen());
+00243   }
+00244   return 0;
+00245 }
+00246 /*---------------------------------------------------------------------------*/
+00247 static
+00248 PT_THREAD(handle_dhcp(void))
+00249 {
+00250   PT_BEGIN(&s.pt);
+00251   
+00252   /* try_again:*/
+00253   s.state = STATE_SENDING;
+00254   s.ticks = CLOCK_SECOND;
+00255 
+00256   do {
+00257     send_discover();
+00258     timer_set(&s.timer, s.ticks);
+00259     PT_WAIT_UNTIL(&s.pt, uip_newdata() || timer_expired(&s.timer));
+00260 
+00261     if(uip_newdata() && parse_msg() == DHCPOFFER) {
+00262       s.state = STATE_OFFER_RECEIVED;
+00263       break;
+00264     }
+00265 
+00266     if(s.ticks < CLOCK_SECOND * 60) {
+00267       s.ticks *= 2;
+00268     }
+00269   } while(s.state != STATE_OFFER_RECEIVED);
+00270   
+00271   s.ticks = CLOCK_SECOND;
+00272 
+00273   do {
+00274     send_request();
+00275     timer_set(&s.timer, s.ticks);
+00276     PT_WAIT_UNTIL(&s.pt, uip_newdata() || timer_expired(&s.timer));
+00277 
+00278     if(uip_newdata() && parse_msg() == DHCPACK) {
+00279       s.state = STATE_CONFIG_RECEIVED;
+00280       break;
+00281     }
+00282 
+00283     if(s.ticks <= CLOCK_SECOND * 10) {
+00284       s.ticks += CLOCK_SECOND;
+00285     } else {
+00286       PT_RESTART(&s.pt);
+00287     }
+00288   } while(s.state != STATE_CONFIG_RECEIVED);
+00289   
+00290 #if 0
+00291   printf("Got IP address %d.%d.%d.%d\n",
+00292          uip_ipaddr1(s.ipaddr), uip_ipaddr2(s.ipaddr),
+00293          uip_ipaddr3(s.ipaddr), uip_ipaddr4(s.ipaddr));
+00294   printf("Got netmask %d.%d.%d.%d\n",
+00295          uip_ipaddr1(s.netmask), uip_ipaddr2(s.netmask),
+00296          uip_ipaddr3(s.netmask), uip_ipaddr4(s.netmask));
+00297   printf("Got DNS server %d.%d.%d.%d\n",
+00298          uip_ipaddr1(s.dnsaddr), uip_ipaddr2(s.dnsaddr),
+00299          uip_ipaddr3(s.dnsaddr), uip_ipaddr4(s.dnsaddr));
+00300   printf("Got default router %d.%d.%d.%d\n",
+00301          uip_ipaddr1(s.default_router), uip_ipaddr2(s.default_router),
+00302          uip_ipaddr3(s.default_router), uip_ipaddr4(s.default_router));
+00303   printf("Lease expires in %ld seconds\n",
+00304          ntohs(s.lease_time[0])*65536ul + ntohs(s.lease_time[1]));
+00305 #endif
+00306 
+00307   dhcpc_configured(&s);
+00308   
+00309   /*  timer_stop(&s.timer);*/
+00310 
+00311   /*
+00312    * PT_END restarts the thread so we do this instead. Eventually we
+00313    * should reacquire expired leases here.
+00314    */
+00315   while(1) {
+00316     PT_YIELD(&s.pt);
+00317   }
+00318 
+00319   PT_END(&s.pt);
+00320 }
+00321 /*---------------------------------------------------------------------------*/
+00322 void
+00323 dhcpc_init(const void *mac_addr, int mac_len)
+00324 {
+00325   uip_ipaddr_t addr;
+00326   
+00327   s.mac_addr = mac_addr;
+00328   s.mac_len  = mac_len;
+00329 
+00330   s.state = STATE_INITIAL;
+00331   uip_ipaddr(addr, 255,255,255,255);
+00332   s.conn = uip_udp_new(&addr, HTONS(DHCPC_SERVER_PORT));
+00333   if(s.conn != NULL) {
+00334     uip_udp_bind(s.conn, HTONS(DHCPC_CLIENT_PORT));
+00335   }
+00336   PT_INIT(&s.pt);
+00337 }
+00338 /*---------------------------------------------------------------------------*/
+00339 void
+00340 dhcpc_appcall(void)
+00341 {
+00342   handle_dhcp();
+00343 }
+00344 /*---------------------------------------------------------------------------*/
+00345 void
+00346 dhcpc_request(void)
+00347 {
+00348   u16_t ipaddr[2];
+00349   
+00350   if(s.state == STATE_INITIAL) {
+00351     uip_ipaddr(ipaddr, 0,0,0,0);
+00352     uip_sethostaddr(ipaddr);
+00353     /*    handle_dhcp(PROCESS_EVENT_NONE, NULL);*/
+00354   }
+00355 }
+00356 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00049.html b/components/net/uip/doc/html/a00049.html new file mode 100644 index 0000000000000000000000000000000000000000..5b5a7c036836a9b0f4d497221b96219445e90235 --- /dev/null +++ b/components/net/uip/doc/html/a00049.html @@ -0,0 +1,88 @@ + + +uIP 1.0: dhcpc.h + + + + + +

dhcpc.h

00001 /*
+00002  * Copyright (c) 2005, Swedish Institute of Computer Science
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * @(#)$Id: dhcpc.h,v 1.3 2006/06/11 21:46:37 adam Exp $
+00032  */
+00033 #ifndef __DHCPC_H__
+00034 #define __DHCPC_H__
+00035 
+00036 #include "timer.h"
+00037 #include "pt.h"
+00038 
+00039 struct dhcpc_state {
+00040   struct pt pt;
+00041   char state;
+00042   struct uip_udp_conn *conn;
+00043   struct timer timer;
+00044   u16_t ticks;
+00045   const void *mac_addr;
+00046   int mac_len;
+00047   
+00048   u8_t serverid[4];
+00049 
+00050   u16_t lease_time[2];
+00051   u16_t ipaddr[2];
+00052   u16_t netmask[2];
+00053   u16_t dnsaddr[2];
+00054   u16_t default_router[2];
+00055 };
+00056 
+00057 void dhcpc_init(const void *mac_addr, int mac_len);
+00058 void dhcpc_request(void);
+00059 
+00060 void dhcpc_appcall(void);
+00061 
+00062 void dhcpc_configured(const struct dhcpc_state *s);
+00063 
+00064 typedef struct dhcpc_state uip_udp_appstate_t;
+00065 #define UIP_UDP_APPCALL dhcpc_appcall
+00066 
+00067 
+00068 #endif /* __DHCPC_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00050.html b/components/net/uip/doc/html/a00050.html new file mode 100644 index 0000000000000000000000000000000000000000..ddfa65690d636e5aeeb93a56e6b9e15c5a713cf0 --- /dev/null +++ b/components/net/uip/doc/html/a00050.html @@ -0,0 +1,177 @@ + + +uIP 1.0: uip-conf.h + + + + + +

uip-conf.h

00001 /**
+00002  * \addtogroup uipopt
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \name Project-specific configuration options
+00008  * @{
+00009  *
+00010  * uIP has a number of configuration options that can be overridden
+00011  * for each project. These are kept in a project-specific uip-conf.h
+00012  * file and all configuration names have the prefix UIP_CONF.
+00013  */
+00014 
+00015 /*
+00016  * Copyright (c) 2006, Swedish Institute of Computer Science.
+00017  * All rights reserved.
+00018  *
+00019  * Redistribution and use in source and binary forms, with or without
+00020  * modification, are permitted provided that the following conditions
+00021  * are met:
+00022  * 1. Redistributions of source code must retain the above copyright
+00023  *    notice, this list of conditions and the following disclaimer.
+00024  * 2. Redistributions in binary form must reproduce the above copyright
+00025  *    notice, this list of conditions and the following disclaimer in the
+00026  *    documentation and/or other materials provided with the distribution.
+00027  * 3. Neither the name of the Institute nor the names of its contributors
+00028  *    may be used to endorse or promote products derived from this software
+00029  *    without specific prior written permission.
+00030  *
+00031  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00032  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00033  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00034  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00035  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00036  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00037  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00038  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00039  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00040  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00041  * SUCH DAMAGE.
+00042  *
+00043  * This file is part of the uIP TCP/IP stack
+00044  *
+00045  * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $
+00046  */
+00047 
+00048 /**
+00049  * \file
+00050  *         An example uIP configuration file
+00051  * \author
+00052  *         Adam Dunkels <adam@sics.se>
+00053  */
+00054 
+00055 #ifndef __UIP_CONF_H__
+00056 #define __UIP_CONF_H__
+00057 
+00058 #include <inttypes.h>
+00059 
+00060 /**
+00061  * 8 bit datatype
+00062  *
+00063  * This typedef defines the 8-bit type used throughout uIP.
+00064  *
+00065  * \hideinitializer
+00066  */
+00067 typedef uint8_t u8_t;
+00068 
+00069 /**
+00070  * 16 bit datatype
+00071  *
+00072  * This typedef defines the 16-bit type used throughout uIP.
+00073  *
+00074  * \hideinitializer
+00075  */
+00076 typedef uint16_t u16_t;
+00077 
+00078 /**
+00079  * Statistics datatype
+00080  *
+00081  * This typedef defines the dataype used for keeping statistics in
+00082  * uIP.
+00083  *
+00084  * \hideinitializer
+00085  */
+00086 typedef unsigned short uip_stats_t;
+00087 
+00088 /**
+00089  * Maximum number of TCP connections.
+00090  *
+00091  * \hideinitializer
+00092  */
+00093 #define UIP_CONF_MAX_CONNECTIONS 40
+00094 
+00095 /**
+00096  * Maximum number of listening TCP ports.
+00097  *
+00098  * \hideinitializer
+00099  */
+00100 #define UIP_CONF_MAX_LISTENPORTS 40
+00101 
+00102 /**
+00103  * uIP buffer size.
+00104  *
+00105  * \hideinitializer
+00106  */
+00107 #define UIP_CONF_BUFFER_SIZE     420
+00108 
+00109 /**
+00110  * CPU byte order.
+00111  *
+00112  * \hideinitializer
+00113  */
+00114 #define UIP_CONF_BYTE_ORDER      LITTLE_ENDIAN
+00115 
+00116 /**
+00117  * Logging on or off
+00118  *
+00119  * \hideinitializer
+00120  */
+00121 #define UIP_CONF_LOGGING         1
+00122 
+00123 /**
+00124  * UDP support on or off
+00125  *
+00126  * \hideinitializer
+00127  */
+00128 #define UIP_CONF_UDP             0
+00129 
+00130 /**
+00131  * UDP checksums on or off
+00132  *
+00133  * \hideinitializer
+00134  */
+00135 #define UIP_CONF_UDP_CHECKSUMS   1
+00136 
+00137 /**
+00138  * uIP statistics on or off
+00139  *
+00140  * \hideinitializer
+00141  */
+00142 #define UIP_CONF_STATISTICS      1
+00143 
+00144 /* Here we include the header file for the application(s) we use in
+00145    our project. */
+00146 /*#include "smtp.h"*/
+00147 /*#include "hello-world.h"*/
+00148 /*#include "telnetd.h"*/
+00149 #include "webserver.h"
+00150 /*#include "dhcpc.h"*/
+00151 /*#include "resolv.h"*/
+00152 /*#include "webclient.h"*/
+00153 
+00154 #endif /* __UIP_CONF_H__ */
+00155 
+00156 /** @} */
+00157 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00051.html b/components/net/uip/doc/html/a00051.html new file mode 100644 index 0000000000000000000000000000000000000000..e9197ffefa9e6406423b69b3840bfc8c362b3e3a --- /dev/null +++ b/components/net/uip/doc/html/a00051.html @@ -0,0 +1,138 @@ + + +uIP 1.0: uip-code-style.c + + + + + +

uip-code-style.c

00001 /* This is the official code style of uIP. */
+00002 
+00003 /**
+00004  * \defgroup codestyle Coding style
+00005  *
+00006  * This is how a Doxygen module is documented - start with a \defgroup
+00007  * Doxygen keyword at the beginning of the file to define a module,
+00008  * and use the \addtogroup Doxygen keyword in all other files that
+00009  * belong to the same module. Typically, the \defgroup is placed in
+00010  * the .h file and \addtogroup in the .c file.
+00011  *
+00012  * @{
+00013  */
+00014 
+00015 /**
+00016  * \file
+00017  *         A brief description of what this file is.
+00018  * \author
+00019  *         Adam Dunkels <adam@sics.se>
+00020  *
+00021  *         Every file that is part of a documented module has to have
+00022  *         a \file block, else it will not show up in the Doxygen
+00023  *         "Modules" * section.
+00024  */
+00025 
+00026 /* Single line comments look like this. */
+00027 
+00028 /*
+00029  * Multi-line comments look like this. Comments should prefferably be
+00030  * full sentences, filled to look like real paragraphs.
+00031  */
+00032 
+00033 #include "uip.h"
+00034 
+00035 /*
+00036  * Make sure that non-global variables are all maked with the static
+00037  * keyword. This keeps the size of the symbol table down.
+00038  */
+00039 static int flag;
+00040 
+00041 /*
+00042  * All variables and functions that are visible outside of the file
+00043  * should have the module name prepended to them. This makes it easy
+00044  * to know where to look for function and variable definitions.
+00045  *
+00046  * Put dividers (a single-line comment consisting only of dashes)
+00047  * between functions.
+00048  */
+00049 /*---------------------------------------------------------------------------*/
+00050 /**
+00051  * \brief      Use Doxygen documentation for functions.
+00052  * \param c    Briefly describe all parameters.
+00053  * \return     Briefly describe the return value.
+00054  * \retval 0   Functions that return a few specified values
+00055  * \retval 1   can use the \retval keyword instead of \return.
+00056  *
+00057  *             Put a longer description of what the function does
+00058  *             after the preamble of Doxygen keywords.
+00059  *
+00060  *             This template should always be used to document
+00061  *             functions. The text following the introduction is used
+00062  *             as the function's documentation.
+00063  *
+00064  *             Function prototypes have the return type on one line,
+00065  *             the name and arguments on one line (with no space
+00066  *             between the name and the first parenthesis), followed
+00067  *             by a single curly bracket on its own line.
+00068  */
+00069 void
+00070 code_style_example_function(void)
+00071 {
+00072   /*
+00073    * Local variables should always be declared at the start of the
+00074    * function.
+00075    */
+00076   int i;                   /* Use short variable names for loop
+00077                               counters. */
+00078 
+00079   /*
+00080    * There should be no space between keywords and the first
+00081    * parenthesis. There should be spaces around binary operators, no
+00082    * spaces between a unary operator and its operand.
+00083    *
+00084    * Curly brackets following for(), if(), do, and case() statements
+00085    * should follow the statement on the same line.
+00086    */
+00087   for(i = 0; i < 10; ++i) {
+00088     /*
+00089      * Always use full blocks (curly brackets) after if(), for(), and
+00090      * while() statements, even though the statement is a single line
+00091      * of code. This makes the code easier to read and modifications
+00092      * are less error prone.
+00093      */
+00094     if(i == c) {
+00095       return c;           /* No parentesis around return values. */
+00096     } else {              /* The else keyword is placed inbetween
+00097                              curly brackers, always on its own line. */
+00098       c++;
+00099     }
+00100   }
+00101 }
+00102 /*---------------------------------------------------------------------------*/
+00103 /*
+00104  * Static (non-global) functions do not need Doxygen comments. The
+00105  * name should not be prepended with the module name - doing so would
+00106  * create confusion.
+00107  */
+00108 static void
+00109 an_example_function(void)
+00110 {
+00111   
+00112 }
+00113 /*---------------------------------------------------------------------------*/
+00114 
+00115 /* The following stuff ends the \defgroup block at the beginning of
+00116    the file: */
+00117 
+00118 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00077.html b/components/net/uip/doc/html/a00077.html new file mode 100644 index 0000000000000000000000000000000000000000..824f4391339db1ba59a8fcf7e3e35e9c3bb3ee2d --- /dev/null +++ b/components/net/uip/doc/html/a00077.html @@ -0,0 +1,78 @@ + + +uIP 1.0: dhcpc_state Struct Reference + + + + + + +

dhcpc_state Struct Reference


Detailed Description

+
Examples:
+ +

+dhcpc.c, and dhcpc.h.

+

+ +

+Definition at line 39 of file dhcpc.h.

LocalRemoteStateRetransmissionsTimerFlags
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+pt pt
+char state
+uip_udp_connconn
+timer timer
+u16_t ticks
+const void * mac_addr
+int mac_len
+u8_t serverid [4]
+u16_t lease_time [2]
+u16_t ipaddr [2]
+u16_t netmask [2]
+u16_t dnsaddr [2]
+u16_t default_router [2]
+
Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00078.html b/components/net/uip/doc/html/a00078.html new file mode 100644 index 0000000000000000000000000000000000000000..ef60451c248ec6c07e19c734633e1a32d8de8394 --- /dev/null +++ b/components/net/uip/doc/html/a00078.html @@ -0,0 +1,51 @@ + + +uIP 1.0: hello_world_state Struct Reference + + + + + + +

hello_world_state Struct Reference
+ +[Hello, world] +


Detailed Description

+
Examples:
+ +

+hello-world.c, and hello-world.h.

+

+ +

+Definition at line 36 of file hello-world.h. + + + + + + + + +

Data Fields

+psock p
+char inputbuffer [10]
+char name [40]
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00079.html b/components/net/uip/doc/html/a00079.html new file mode 100644 index 0000000000000000000000000000000000000000..2701b54928fc0830f2924949d7190205d938a442 --- /dev/null +++ b/components/net/uip/doc/html/a00079.html @@ -0,0 +1,45 @@ + + +uIP 1.0: httpd_cgi_call Struct Reference + + + + + + +

httpd_cgi_call Struct Reference
+ +[Web server] +


Detailed Description

+ +

+ +

+Definition at line 60 of file httpd-cgi.h. + + + + + + +

Data Fields

+const char * name
+const httpd_cgifunction function
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00080.html b/components/net/uip/doc/html/a00080.html new file mode 100644 index 0000000000000000000000000000000000000000..737ea1318df3107e6864d703b805cb4521ec3051 --- /dev/null +++ b/components/net/uip/doc/html/a00080.html @@ -0,0 +1,69 @@ + + +uIP 1.0: httpd_state Struct Reference + + + + + + +

httpd_state Struct Reference


Detailed Description

+ +

+ +

+Definition at line 41 of file httpd.h. + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+unsigned char timer
+psock sin sout
+pt outputpt scriptpt
+char inputbuf [50]
+char filename [20]
+char state
+httpd_fs_file file
+int len
+char * scriptptr
+int scriptlen
+unsigned short count
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00081.html b/components/net/uip/doc/html/a00081.html new file mode 100644 index 0000000000000000000000000000000000000000..821207bf72993971983bbf34902e9269ffcc3e05 --- /dev/null +++ b/components/net/uip/doc/html/a00081.html @@ -0,0 +1,51 @@ + + +uIP 1.0: memb_blocks Struct Reference + + + + + + +

memb_blocks Struct Reference
+ +[Memory block management functions] +


Detailed Description

+ +

+ +

+Definition at line 105 of file memb.h. + + + + + + + + + + +

Data Fields

+unsigned short size
+unsigned short num
+char * count
+void * mem
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00082.html b/components/net/uip/doc/html/a00082.html new file mode 100644 index 0000000000000000000000000000000000000000..0da540dd5de99120fff2585d11522dbe0c3a1ecd --- /dev/null +++ b/components/net/uip/doc/html/a00082.html @@ -0,0 +1,73 @@ + + +uIP 1.0: psock Struct Reference + + + + + + +

psock Struct Reference
+ +[Protosockets library] +

#include <psock.h> +

+


Detailed Description

+The representation of a protosocket. +

+The protosocket structrure is an opaque structure with no user-visible elements.

Examples:
+ +

+hello-world.h.

+

+ +

+Definition at line 106 of file psock.h. + + + + + + + + + + + + + + + + + + + + +

Data Fields

+pt pt psockpt
+const u8_tsendptr
+u8_treadptr
+char * bufptr
+u16_t sendlen
+u16_t readlen
+psock_buf buf
+unsigned int bufsize
+unsigned char state
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00083.html b/components/net/uip/doc/html/a00083.html new file mode 100644 index 0000000000000000000000000000000000000000..2cfc0334835f9b20a62e740c5d62a9b33464be68 --- /dev/null +++ b/components/net/uip/doc/html/a00083.html @@ -0,0 +1,45 @@ + + +uIP 1.0: psock_buf Struct Reference + + + + + + +

psock_buf Struct Reference
+ +[Protosockets library] +


Detailed Description

+ +

+ +

+Definition at line 95 of file psock.h. + + + + + + +

Data Fields

+u8_tptr
+unsigned short left
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00084.html b/components/net/uip/doc/html/a00084.html new file mode 100644 index 0000000000000000000000000000000000000000..7a7741fdffd2526c3ad8a92325fe5d8262836d1f --- /dev/null +++ b/components/net/uip/doc/html/a00084.html @@ -0,0 +1,45 @@ + + +uIP 1.0: pt Struct Reference + + + + + + +

pt Struct Reference
+ +[Protothreads] +


Detailed Description

+
Examples:
+ +

+dhcpc.h.

+

+ +

+Definition at line 54 of file pt.h. + + + + +

Data Fields

+lc_t lc
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00085.html b/components/net/uip/doc/html/a00085.html new file mode 100644 index 0000000000000000000000000000000000000000..4226e0ecbc15b18dd90b5b1b8f0296e7aca38f4e --- /dev/null +++ b/components/net/uip/doc/html/a00085.html @@ -0,0 +1,69 @@ + + +uIP 1.0: smtp_state Struct Reference + + + + + + +

smtp_state Struct Reference
+ +[SMTP E-mail sender] +


Detailed Description

+
Examples:
+ +

+hello-world.h, smtp.c, and smtp.h.

+

+ +

+Definition at line 81 of file smtp.h. + + + + + + + + + + + + + + + + + + + + +

Data Fields

+u8_t state
+char * to
+char * from
+char * subject
+char * msg
+u16_t msglen
+u16_t sentlen
+u16_t textlen
+u16_t sendptr
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00086.html b/components/net/uip/doc/html/a00086.html new file mode 100644 index 0000000000000000000000000000000000000000..1611163d6ffebd5ad70f5a625e351a3123eda26b --- /dev/null +++ b/components/net/uip/doc/html/a00086.html @@ -0,0 +1,54 @@ + + +uIP 1.0: telnetd_state Struct Reference + + + + + + +

telnetd_state Struct Reference


Detailed Description

+
Examples:
+ +

+telnetd.c, and telnetd.h.

+

+ +

+Definition at line 49 of file telnetd.h. + + + + + + + + + + + + +

Data Fields

+char * lines [TELNETD_CONF_NUMLINES]
+char buf [TELNETD_CONF_LINELEN]
+char bufptr
+u8_t numsent
+u8_t state
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00087.html b/components/net/uip/doc/html/a00087.html new file mode 100644 index 0000000000000000000000000000000000000000..3b2fec3c87efb3d04b6768a2f966c8ec07a813a5 --- /dev/null +++ b/components/net/uip/doc/html/a00087.html @@ -0,0 +1,52 @@ + + +uIP 1.0: timer Struct Reference + + + + + + +

timer Struct Reference
+ +[Timer library] +

#include <timer.h> +

+


Detailed Description

+A timer. +

+This structure is used for declaring a timer. The timer must be set with timer_set() before it can be used.

Examples:
+ +

+dhcpc.h, example-mainloop-with-arp.c, example-mainloop-without-arp.c, and webclient.h.

+

+ +

+Definition at line 74 of file timer.h. + + + + + + +

Data Fields

+clock_time_t start
+clock_time_t interval
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00088.html b/components/net/uip/doc/html/a00088.html new file mode 100644 index 0000000000000000000000000000000000000000..7ca46ae6a441436b8e3e47aac8efa752fa26ee71 --- /dev/null +++ b/components/net/uip/doc/html/a00088.html @@ -0,0 +1,103 @@ + + +uIP 1.0: uip_conn Struct Reference + + + + + + +

uip_conn Struct Reference
+ +[The uIP TCP/IP stack] +

#include <uip.h> +

+


Detailed Description

+Representation of a uIP TCP connection. +

+The uip_conn structure is used for identifying a connection. All but one field in the structure are to be considered read-only by an application. The only exception is the appstate field whos purpose is to let the application store application-specific state (e.g., file pointers) for the connection. The type of this field is configured in the "uipopt.h" header file. +

+ +

+Definition at line 1153 of file uip.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+uip_ipaddr_t ripaddr
 The IP address of the remote host.
+u16_t lport
 The local TCP port, in network byte order.
+u16_t rport
 The local remote TCP port, in network byte order.
+u8_t rcv_nxt [4]
 The sequence number that we expect to receive next.
+u8_t snd_nxt [4]
 The sequence number that was last sent by us.
+u16_t len
 Length of the data that was previously sent.
+u16_t mss
 Current maximum segment size for the connection.
+u16_t initialmss
 Initial maximum segment size for the connection.
+u8_t sa
 Retransmission time-out calculation state variable.
+u8_t sv
 Retransmission time-out calculation state variable.
+u8_t rto
 Retransmission time-out.
+u8_t tcpstateflags
 TCP state and flags.
+u8_t timer
 The retransmission timer.
+u8_t nrtx
 The number of retransmissions for the last segment sent.
+uip_tcp_appstate_t appstate
 The application state.
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00089.html b/components/net/uip/doc/html/a00089.html new file mode 100644 index 0000000000000000000000000000000000000000..d935ccddff9340d44de5521c9197e5cdc7bf1901 --- /dev/null +++ b/components/net/uip/doc/html/a00089.html @@ -0,0 +1,44 @@ + + +uIP 1.0: uip_eth_addr Struct Reference + + + + + + +

uip_eth_addr Struct Reference
+ +[The uIP TCP/IP stack] +

#include <uip.h> +

+


Detailed Description

+Representation of a 48-bit Ethernet address. +

+ +

+Definition at line 1542 of file uip.h. + + + + +

Data Fields

+u8_t addr [6]
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00090.html b/components/net/uip/doc/html/a00090.html new file mode 100644 index 0000000000000000000000000000000000000000..ee37ca509971305f786784f8be594ece372f02ae --- /dev/null +++ b/components/net/uip/doc/html/a00090.html @@ -0,0 +1,50 @@ + + +uIP 1.0: uip_eth_hdr Struct Reference + + + + + + +

uip_eth_hdr Struct Reference
+ +[uIP Address Resolution Protocol] +

#include <uip_arp.h> +

+


Detailed Description

+The Ethernet header. +

+ +

+Definition at line 63 of file uip_arp.h. + + + + + + + + +

Data Fields

+uip_eth_addr dest
+uip_eth_addr src
+u16_t type
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00091.html b/components/net/uip/doc/html/a00091.html new file mode 100644 index 0000000000000000000000000000000000000000..63a2a523c5ed14eb264e56c442948fef74b3beba --- /dev/null +++ b/components/net/uip/doc/html/a00091.html @@ -0,0 +1,84 @@ + + +uIP 1.0: uip_icmpip_hdr Struct Reference + + + + + + +

uip_icmpip_hdr Struct Reference
+ +[The uIP TCP/IP stack] +


Detailed Description

+ +

+ +

+Definition at line 1423 of file uip.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+u8_t vhl
+u8_t tos
+u8_t len [2]
+u8_t ipid [2]
+u8_t ipoffset [2]
+u8_t ttl
+u8_t proto
+u16_t ipchksum
+u16_t srcipaddr [2]
+u16_t destipaddr [2]
+u8_t type
+u8_t icode
+u16_t icmpchksum
+u16_t id
+u16_t seqno
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00092.html b/components/net/uip/doc/html/a00092.html new file mode 100644 index 0000000000000000000000000000000000000000..93c00c2a85452848fa63e1155b82404bd4f32c85 --- /dev/null +++ b/components/net/uip/doc/html/a00092.html @@ -0,0 +1,39 @@ + + +uIP 1.0: uip_neighbor_addr Struct Reference + + + + + + +

uip_neighbor_addr Struct Reference


Detailed Description

+ +

+ +

+Definition at line 47 of file uip-neighbor.h. + + + + +

Data Fields

+uip_eth_addr addr
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00093.html b/components/net/uip/doc/html/a00093.html new file mode 100644 index 0000000000000000000000000000000000000000..2d3a91a40bb1277f21c97e52d9d2e40758cd7b70 --- /dev/null +++ b/components/net/uip/doc/html/a00093.html @@ -0,0 +1,143 @@ + + +uIP 1.0: uip_stats Struct Reference + + + + + + +

uip_stats Struct Reference
+ +[The uIP TCP/IP stack] +

#include <uip.h> +

+


Detailed Description

+The structure holding the TCP/IP statistics that are gathered if UIP_STATISTICS is set to 1. +

+ +

+Definition at line 1232 of file uip.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+struct {
   uip_stats_t   drop
 Number of dropped packets at the IP layer.
   uip_stats_t   recv
 Number of received packets at the IP layer.
   uip_stats_t   sent
 Number of sent packets at the IP layer.
   uip_stats_t   vhlerr
 Number of packets dropped due to wrong IP version or header length.
   uip_stats_t   hblenerr
 Number of packets dropped due to wrong IP length, high byte.
   uip_stats_t   lblenerr
 Number of packets dropped due to wrong IP length, low byte.
   uip_stats_t   fragerr
 Number of packets dropped since they were IP fragments.
   uip_stats_t   chkerr
 Number of packets dropped due to IP checksum errors.
   uip_stats_t   protoerr
 Number of packets dropped since they were neither ICMP, UDP nor TCP.
ip
 IP statistics.
+struct {
   uip_stats_t   drop
 Number of dropped ICMP packets.
   uip_stats_t   recv
 Number of received ICMP packets.
   uip_stats_t   sent
 Number of sent ICMP packets.
   uip_stats_t   typeerr
 Number of ICMP packets with a wrong type.
icmp
 ICMP statistics.
+struct {
   uip_stats_t   drop
 Number of dropped TCP segments.
   uip_stats_t   recv
 Number of recived TCP segments.
   uip_stats_t   sent
 Number of sent TCP segments.
   uip_stats_t   chkerr
 Number of TCP segments with a bad checksum.
   uip_stats_t   ackerr
 Number of TCP segments with a bad ACK number.
   uip_stats_t   rst
 Number of recevied TCP RST (reset) segments.
   uip_stats_t   rexmit
 Number of retransmitted TCP segments.
   uip_stats_t   syndrop
 Number of dropped SYNs due to too few connections was avaliable.
   uip_stats_t   synrst
 Number of SYNs for closed ports, triggering a RST.
tcp
 TCP statistics.
+struct {
   uip_stats_t   drop
 Number of dropped UDP segments.
   uip_stats_t   recv
 Number of recived UDP segments.
   uip_stats_t   sent
 Number of sent UDP segments.
   uip_stats_t   chkerr
 Number of UDP segments with a bad checksum.
udp
 UDP statistics.
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00094.html b/components/net/uip/doc/html/a00094.html new file mode 100644 index 0000000000000000000000000000000000000000..7d21f8c66fb00dc4c12cefa776771bad6bc3ece5 --- /dev/null +++ b/components/net/uip/doc/html/a00094.html @@ -0,0 +1,99 @@ + + +uIP 1.0: uip_tcpip_hdr Struct Reference + + + + + + +

uip_tcpip_hdr Struct Reference
+ +[The uIP TCP/IP stack] +


Detailed Description

+ +

+ +

+Definition at line 1386 of file uip.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+u8_t vhl
+u8_t tos
+u8_t len [2]
+u8_t ipid [2]
+u8_t ipoffset [2]
+u8_t ttl
+u8_t proto
+u16_t ipchksum
+u16_t srcipaddr [2]
+u16_t destipaddr [2]
+u16_t srcport
+u16_t destport
+u8_t seqno [4]
+u8_t ackno [4]
+u8_t tcpoffset
+u8_t flags
+u8_t wnd [2]
+u16_t tcpchksum
+u8_t urgp [2]
+u8_t optdata [4]
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00095.html b/components/net/uip/doc/html/a00095.html new file mode 100644 index 0000000000000000000000000000000000000000..f61d8975aac60ea970adbdf89810f40d6b7b1538 --- /dev/null +++ b/components/net/uip/doc/html/a00095.html @@ -0,0 +1,64 @@ + + +uIP 1.0: uip_udp_conn Struct Reference + + + + + + +

uip_udp_conn Struct Reference
+ +[The uIP TCP/IP stack] +

#include <uip.h> +

+


Detailed Description

+Representation of a uIP UDP connection.
Examples:
+ +

+dhcpc.h, and resolv.c.

+

+ +

+Definition at line 1210 of file uip.h. + + + + + + + + + + + + + + + + + +

Data Fields

+uip_ipaddr_t ripaddr
 The IP address of the remote peer.
+u16_t lport
 The local port number in network byte order.
+u16_t rport
 The remote port number in network byte order.
+u8_t ttl
 Default time-to-live.
+uip_udp_appstate_t appstate
 The application state.
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00096.html b/components/net/uip/doc/html/a00096.html new file mode 100644 index 0000000000000000000000000000000000000000..48d6bf35cd66c43dda27acebfcb69d0eb90cb511 --- /dev/null +++ b/components/net/uip/doc/html/a00096.html @@ -0,0 +1,81 @@ + + +uIP 1.0: uip_udpip_hdr Struct Reference + + + + + + +

uip_udpip_hdr Struct Reference
+ +[The uIP TCP/IP stack] +


Detailed Description

+ +

+ +

+Definition at line 1460 of file uip.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+u8_t vhl
+u8_t tos
+u8_t len [2]
+u8_t ipid [2]
+u8_t ipoffset [2]
+u8_t ttl
+u8_t proto
+u16_t ipchksum
+u16_t srcipaddr [2]
+u16_t destipaddr [2]
+u16_t srcport
+u16_t destport
+u16_t udplen
+u16_t udpchksum
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00097.html b/components/net/uip/doc/html/a00097.html new file mode 100644 index 0000000000000000000000000000000000000000..da7b8527f6ddaf75fae9d4bc9ffd4542341594eb --- /dev/null +++ b/components/net/uip/doc/html/a00097.html @@ -0,0 +1,75 @@ + + +uIP 1.0: webclient_state Struct Reference + + + + + + +

webclient_state Struct Reference
+ +[Web client] +


Detailed Description

+
Examples:
+ +

+webclient.c, and webclient.h.

+

+ +

+Definition at line 55 of file webclient.h. + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+u8_t timer
+u8_t state
+u8_t httpflag
+u16_t port
+char host [40]
+char file [WEBCLIENT_CONF_MAX_URLLEN]
+u16_t getrequestptr
+u16_t getrequestleft
+char httpheaderline [200]
+u16_t httpheaderlineptr
+char mimetype [32]
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00100.html b/components/net/uip/doc/html/a00100.html new file mode 100644 index 0000000000000000000000000000000000000000..8291183fb600a8c3959a3894c1e65db6263ca045 --- /dev/null +++ b/components/net/uip/doc/html/a00100.html @@ -0,0 +1,48 @@ + + +uIP 1.0: apps/hello-world/hello-world.c File Reference + + + + + + +

apps/hello-world/hello-world.c File Reference


Detailed Description

+An example of how to write uIP applications with protosockets. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file hello-world.c. +

+#include "hello-world.h"
+#include "uip.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + +

Functions

+void hello_world_init (void)
+void hello_world_appcall (void)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00101.html b/components/net/uip/doc/html/a00101.html new file mode 100644 index 0000000000000000000000000000000000000000..f4761b8430a1ac1765f2ffcf4067046e12dce8e0 --- /dev/null +++ b/components/net/uip/doc/html/a00101.html @@ -0,0 +1,54 @@ + + +uIP 1.0: apps/hello-world/hello-world.h File Reference + + + + + + +

apps/hello-world/hello-world.h File Reference


Detailed Description

+Header file for an example of how to write uIP applications with protosockets. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file hello-world.h. +

+#include "uipopt.h"
+#include "psock.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + +

Data Structures

struct  hello_world_state

Defines

+#define UIP_APPCALL   hello_world_appcall

Functions

+void hello_world_appcall (void)
+void hello_world_init (void)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00102.html b/components/net/uip/doc/html/a00102.html new file mode 100644 index 0000000000000000000000000000000000000000..1f4e3fa79256e6242508e49aca8e0f142569ac3a --- /dev/null +++ b/components/net/uip/doc/html/a00102.html @@ -0,0 +1,119 @@ + + +uIP 1.0: apps/resolv/resolv.c File Reference + + + + + + +

apps/resolv/resolv.c File Reference


Detailed Description

+DNS host name to IP address resolver. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+This file implements a DNS host name to IP address resolver. +

+Definition in file resolv.c. +

+#include "resolv.h"
+#include "uip.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define NULL   (void *)0
+#define MAX_RETRIES   8
+#define DNS_FLAG1_RESPONSE   0x80
+#define DNS_FLAG1_OPCODE_STATUS   0x10
+#define DNS_FLAG1_OPCODE_INVERSE   0x08
+#define DNS_FLAG1_OPCODE_STANDARD   0x00
+#define DNS_FLAG1_AUTHORATIVE   0x04
+#define DNS_FLAG1_TRUNC   0x02
+#define DNS_FLAG1_RD   0x01
+#define DNS_FLAG2_RA   0x80
+#define DNS_FLAG2_ERR_MASK   0x0f
+#define DNS_FLAG2_ERR_NONE   0x00
+#define DNS_FLAG2_ERR_NAME   0x03
+#define STATE_UNUSED   0
+#define STATE_NEW   1
+#define STATE_ASKING   2
+#define STATE_DONE   3
+#define STATE_ERROR   4
+#define RESOLV_ENTRIES   4

Functions

+void resolv_appcall (void)
void resolv_query (char *name)
 Queues a name so that a question for the name will be sent out.
u16_tresolv_lookup (char *name)
 Look up a hostname in the array of known hostnames.
u16_tresolv_getserver (void)
 Obtain the currently configured DNS server.
void resolv_conf (u16_t *dnsserver)
 Configure which DNS server to use for queries.
+void resolv_init (void)
 Initalize the resolver.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00103.html b/components/net/uip/doc/html/a00103.html new file mode 100644 index 0000000000000000000000000000000000000000..cf6a03ad9cf1799dfb2ab9dc964b0a5127543b8d --- /dev/null +++ b/components/net/uip/doc/html/a00103.html @@ -0,0 +1,84 @@ + + +uIP 1.0: apps/resolv/resolv.h File Reference + + + + + + +

apps/resolv/resolv.h File Reference


Detailed Description

+DNS resolver code header file. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file resolv.h. +

+#include "uipopt.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Appication specific configurations

An uIP application is implemented using a single application function that is called by uIP whenever a TCP/IP event occurs. The name of this function must be registered with uIP at compile time using the UIP_APPCALL definition.

+uIP applications can store the application state within the uip_conn structure by specifying the type of the application structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.

+The file containing the definitions must be included in the uipopt.h file.

+The following example illustrates how this can look.

void httpd_appcall(void);
+#define UIP_APPCALL     httpd_appcall
+
+struct httpd_state {
+  u8_t state;
+  u16_t count;
+  char *dataptr;
+  char *script;
+};
+typedef struct httpd_state uip_tcp_appstate_t
+


typedef int uip_udp_appstate_t
 The type of the application state that is to be stored in the uip_conn structure.

Defines

+#define UIP_UDP_APPCALL   resolv_appcall

Functions

+void resolv_appcall (void)
void resolv_found (char *name, u16_t *ipaddr)
 Callback function which is called when a hostname is found.
void resolv_conf (u16_t *dnsserver)
 Configure which DNS server to use for queries.
u16_tresolv_getserver (void)
 Obtain the currently configured DNS server.
+void resolv_init (void)
 Initalize the resolver.
u16_tresolv_lookup (char *name)
 Look up a hostname in the array of known hostnames.
void resolv_query (char *name)
 Queues a name so that a question for the name will be sent out.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00104.html b/components/net/uip/doc/html/a00104.html new file mode 100644 index 0000000000000000000000000000000000000000..b769a45c732a24add012ecb2970ce87e54fd4a26 --- /dev/null +++ b/components/net/uip/doc/html/a00104.html @@ -0,0 +1,78 @@ + + +uIP 1.0: apps/smtp/smtp.c File Reference + + + + + + +

apps/smtp/smtp.c File Reference


Detailed Description

+SMTP example implementation. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file smtp.c. +

+#include "smtp.h"
+#include "smtp-strings.h"
+#include "psock.h"
+#include "uip.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define ISO_nl   0x0a
+#define ISO_cr   0x0d
+#define ISO_period   0x2e
+#define ISO_2   0x32
+#define ISO_3   0x33
+#define ISO_4   0x34
+#define ISO_5   0x35

Functions

+void smtp_appcall (void)
void smtp_configure (char *lhostname, void *server)
 Specificy an SMTP server and hostname.
unsigned char smtp_send (char *to, char *cc, char *from, char *subject, char *msg, u16_t msglen)
 Send an e-mail.
+void smtp_init (void)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00105.html b/components/net/uip/doc/html/a00105.html new file mode 100644 index 0000000000000000000000000000000000000000..4a8d15b8dc2cc70dbc3616396badf6e8715eed2e --- /dev/null +++ b/components/net/uip/doc/html/a00105.html @@ -0,0 +1,82 @@ + + +uIP 1.0: apps/smtp/smtp.h File Reference + + + + + + +

apps/smtp/smtp.h File Reference


Detailed Description

+SMTP header file. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file smtp.h. +

+#include "uipopt.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  smtp_state

Appication specific configurations

An uIP application is implemented using a single application function that is called by uIP whenever a TCP/IP event occurs. The name of this function must be registered with uIP at compile time using the UIP_APPCALL definition.

+uIP applications can store the application state within the uip_conn structure by specifying the type of the application structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.

+The file containing the definitions must be included in the uipopt.h file.

+The following example illustrates how this can look.

void httpd_appcall(void);
+#define UIP_APPCALL     httpd_appcall
+
+struct httpd_state {
+  u8_t state;
+  u16_t count;
+  char *dataptr;
+  char *script;
+};
+typedef struct httpd_state uip_tcp_appstate_t
+


+#define UIP_APPCALL   smtp_appcall
 The name of the application function that uIP should call in response to TCP/IP events.
typedef smtp_state uip_tcp_appstate_t
 The type of the application state that is to be stored in the uip_conn structure.

Defines

+#define SMTP_ERR_OK   0
 Error number that signifies a non-error condition.
+#define SMTP_SEND(to, cc, from, subject, msg)   smtp_send(to, cc, from, subject, msg, strlen(msg))

Functions

void smtp_done (unsigned char error)
 Callback function that is called when an e-mail transmission is done.
+void smtp_init (void)
+void smtp_appcall (void)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00107.html b/components/net/uip/doc/html/a00107.html new file mode 100644 index 0000000000000000000000000000000000000000..74d281601e27446bd1fc7884f17bf637c6945b63 --- /dev/null +++ b/components/net/uip/doc/html/a00107.html @@ -0,0 +1,268 @@ + + +uIP 1.0: apps/telnetd/shell.h File Reference + + + + + + +

apps/telnetd/shell.h File Reference


Detailed Description

+Interface for the Contiki shell. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+Some of the functions declared in this file must be implemented as a shell back-end in the architecture specific files of a Contiki port. +

+Definition in file shell.h. +

+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + +

Functions

void shell_init (void)
 Initialize the shell.
void shell_start (void)
 Start the shell back-end.
void shell_input (char *command)
 Process a shell command.
+void shell_quit (char *)
 Quit the shell.
void shell_output (char *str1, char *str2)
 Print a string to the shell window.
void shell_prompt (char *prompt)
 Print a prompt to the shell window.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void shell_init void   ) 
+
+ + + + + +
+   + + +

+Initialize the shell. +

+Called when the shell front-end process starts. This function may be used to start listening for signals.

Examples:
+telnetd.c.
+

+Definition at line 105 of file shell.c. +

+References shell_init(). +

+Referenced by shell_init().

+

+ + + + +
+ + + + + + + + + +
void shell_input char *  command  ) 
+
+ + + + + +
+   + + +

+Process a shell command. +

+This function will be called by the shell GUI / telnet server whan a command has been entered that should be processed by the shell back-end.

+

Parameters:
+ + +
command The command to be processed.
+
+
Examples:
+telnetd.c.
+

+Definition at line 118 of file shell.c. +

+References shell_input(). +

+Referenced by shell_input().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void shell_output char *  str1,
char *  str2
+
+ + + + + +
+   + + +

+Print a string to the shell window. +

+This function is implemented by the shell GUI / telnet server and can be called by the shell back-end to output a string in the shell window. The string is automatically appended with a linebreak.

+

Parameters:
+ + + +
str1 The first half of the string to be output.
str2 The second half of the string to be output.
+
+
Examples:
+telnetd.c.
+

+Definition at line 113 of file telnetd.c. +

+References ISO_cr, ISO_nl, and NULL.

+

+ + + + +
+ + + + + + + + + +
void shell_prompt char *  prompt  ) 
+
+ + + + + +
+   + + +

+Print a prompt to the shell window. +

+This function can be used by the shell back-end to print out a prompt to the shell window.

+

Parameters:
+ + +
prompt The prompt to be printed.
+
+
Examples:
+telnetd.c.
+

+Definition at line 101 of file telnetd.c. +

+References NULL.

+

+ + + + +
+ + + + + + + + + +
void shell_start void   ) 
+
+ + + + + +
+   + + +

+Start the shell back-end. +

+Called by the front-end when a new shell is started.

Examples:
+telnetd.c.
+

+Definition at line 110 of file shell.c. +

+References shell_start(). +

+Referenced by shell_start().

+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00110.html b/components/net/uip/doc/html/a00110.html new file mode 100644 index 0000000000000000000000000000000000000000..509e8130f237043243ad1cf388ee91d7f6ab31a7 --- /dev/null +++ b/components/net/uip/doc/html/a00110.html @@ -0,0 +1,107 @@ + + +uIP 1.0: apps/webclient/webclient.c File Reference + + + + + + +

apps/webclient/webclient.c File Reference


Detailed Description

+Implementation of the HTTP client. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file webclient.c. +

+#include "uip.h"
+#include "uiplib.h"
+#include "webclient.h"
+#include "resolv.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define WEBCLIENT_TIMEOUT   100
+#define WEBCLIENT_STATE_STATUSLINE   0
+#define WEBCLIENT_STATE_HEADERS   1
+#define WEBCLIENT_STATE_DATA   2
+#define WEBCLIENT_STATE_CLOSE   3
+#define HTTPFLAG_NONE   0
+#define HTTPFLAG_OK   1
+#define HTTPFLAG_MOVED   2
+#define HTTPFLAG_ERROR   3
+#define ISO_nl   0x0a
+#define ISO_cr   0x0d
+#define ISO_space   0x20

Functions

char * webclient_mimetype (void)
 Obtain the MIME type of the current HTTP data stream.
char * webclient_filename (void)
 Obtain the filename of the current HTTP data stream.
char * webclient_hostname (void)
 Obtain the hostname of the current HTTP data stream.
unsigned short webclient_port (void)
 Obtain the port number of the current HTTP data stream.
+void webclient_init (void)
 Initialize the webclient module.
+void webclient_close (void)
 Close the currently open HTTP connection.
unsigned char webclient_get (char *host, u16_t port, char *file)
 Open an HTTP connection to a web server and ask for a file using the GET method.
+void webclient_appcall (void)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00111.html b/components/net/uip/doc/html/a00111.html new file mode 100644 index 0000000000000000000000000000000000000000..454dbfab0dec771d7a24e20b69d40012ba9199fc --- /dev/null +++ b/components/net/uip/doc/html/a00111.html @@ -0,0 +1,96 @@ + + +uIP 1.0: apps/webclient/webclient.h File Reference + + + + + + +

apps/webclient/webclient.h File Reference


Detailed Description

+Header file for the HTTP client. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file webclient.h. +

+#include "webclient-strings.h"
+#include "uipopt.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  webclient_state

Defines

+#define WEBCLIENT_CONF_MAX_URLLEN   100
+#define UIP_APPCALL   webclient_appcall

Typedefs

+typedef webclient_state uip_tcp_appstate_t

Functions

void webclient_datahandler (char *data, u16_t len)
 Callback function that is called from the webclient code when HTTP data has been received.
void webclient_connected (void)
 Callback function that is called from the webclient code when the HTTP connection has been connected to the web server.
void webclient_timedout (void)
 Callback function that is called from the webclient code if the HTTP connection to the web server has timed out.
void webclient_aborted (void)
 Callback function that is called from the webclient code if the HTTP connection to the web server has been aborted by the web server.
void webclient_closed (void)
 Callback function that is called from the webclient code when the HTTP connection to the web server has been closed.
+void webclient_init (void)
 Initialize the webclient module.
unsigned char webclient_get (char *host, u16_t port, char *file)
 Open an HTTP connection to a web server and ask for a file using the GET method.
+void webclient_close (void)
 Close the currently open HTTP connection.
+void webclient_appcall (void)
char * webclient_mimetype (void)
 Obtain the MIME type of the current HTTP data stream.
char * webclient_filename (void)
 Obtain the filename of the current HTTP data stream.
char * webclient_hostname (void)
 Obtain the hostname of the current HTTP data stream.
unsigned short webclient_port (void)
 Obtain the port number of the current HTTP data stream.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00112.html b/components/net/uip/doc/html/a00112.html new file mode 100644 index 0000000000000000000000000000000000000000..213268557c958d3da0fcbbd9ef96499031fce895 --- /dev/null +++ b/components/net/uip/doc/html/a00112.html @@ -0,0 +1,49 @@ + + +uIP 1.0: apps/webserver/httpd-cgi.c File Reference + + + + + + +

apps/webserver/httpd-cgi.c File Reference


Detailed Description

+Web server script interface. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file httpd-cgi.c. +

+#include "uip.h"
+#include "psock.h"
+#include "httpd.h"
+#include "httpd-cgi.h"
+#include "httpd-fs.h"
+#include <stdio.h>
+#include <string.h>
+ +

+Go to the source code of this file. + + + + +

Functions

+httpd_cgifunction httpd_cgi (char *name)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00113.html b/components/net/uip/doc/html/a00113.html new file mode 100644 index 0000000000000000000000000000000000000000..62dbfa62faae1a9eaf8d20c3ee684dcf803f1325 --- /dev/null +++ b/components/net/uip/doc/html/a00113.html @@ -0,0 +1,51 @@ + + +uIP 1.0: apps/webserver/httpd-cgi.h File Reference + + + + + + +

apps/webserver/httpd-cgi.h File Reference


Detailed Description

+Web server script interface header file. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file httpd-cgi.h. +

+#include "psock.h"
+#include "httpd.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + +

Data Structures

struct  httpd_cgi_call

Defines

#define HTTPD_CGI_CALL(name, str, function)
 HTTPD CGI function declaration.

Functions

+httpd_cgifunction httpd_cgi (char *name)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00114.html b/components/net/uip/doc/html/a00114.html new file mode 100644 index 0000000000000000000000000000000000000000..62d611fec117b634f63f0e11eaf50d489214222c --- /dev/null +++ b/components/net/uip/doc/html/a00114.html @@ -0,0 +1,79 @@ + + +uIP 1.0: apps/webserver/httpd.c File Reference + + + + + + +

apps/webserver/httpd.c File Reference


Detailed Description

+Web server. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file httpd.c. +

+#include "uip.h"
+#include "httpd.h"
+#include "httpd-fs.h"
+#include "httpd-cgi.h"
+#include "http-strings.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define STATE_WAITING   0
+#define STATE_OUTPUT   1
+#define ISO_nl   0x0a
+#define ISO_space   0x20
+#define ISO_bang   0x21
+#define ISO_percent   0x25
+#define ISO_period   0x2e
+#define ISO_slash   0x2f
+#define ISO_colon   0x3a

Functions

+void httpd_appcall (void)
void httpd_init (void)
 Initialize the web server.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00120.html b/components/net/uip/doc/html/a00120.html new file mode 100644 index 0000000000000000000000000000000000000000..3043a5d44c65b041abe7e4cfaaa0c219d7a27f52 --- /dev/null +++ b/components/net/uip/doc/html/a00120.html @@ -0,0 +1,50 @@ + + +uIP 1.0: lib/memb.c File Reference + + + + + + +

lib/memb.c File Reference


Detailed Description

+Memory block allocation routines. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file memb.c. +

+#include <string.h>
+#include "memb.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + +

Functions

void memb_init (struct memb_blocks *m)
 Initialize a memory block that was declared with MEMB().
void * memb_alloc (struct memb_blocks *m)
 Allocate a memory block from a block of memory declared with MEMB().
char memb_free (struct memb_blocks *m, void *ptr)
 Deallocate a memory block from a memory block previously declared with MEMB().
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00121.html b/components/net/uip/doc/html/a00121.html new file mode 100644 index 0000000000000000000000000000000000000000..fd04d559295a3adcfd771f89ac1f9c8e366e4aa9 --- /dev/null +++ b/components/net/uip/doc/html/a00121.html @@ -0,0 +1,61 @@ + + +uIP 1.0: lib/memb.h File Reference + + + + + + +

lib/memb.h File Reference


Detailed Description

+Memory block allocation routines. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file memb.h. +

+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  memb_blocks

Defines

+#define MEMB_CONCAT2(s1, s2)   s1##s2
+#define MEMB_CONCAT(s1, s2)   MEMB_CONCAT2(s1, s2)
#define MEMB(name, structure, num)
 Declare a memory block.

Functions

void memb_init (struct memb_blocks *m)
 Initialize a memory block that was declared with MEMB().
void * memb_alloc (struct memb_blocks *m)
 Allocate a memory block from a block of memory declared with MEMB().
char memb_free (struct memb_blocks *m, void *ptr)
 Deallocate a memory block from a memory block previously declared with MEMB().
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00123.html b/components/net/uip/doc/html/a00123.html new file mode 100644 index 0000000000000000000000000000000000000000..6cbb1a8baa1e909e9ca10a246bfcef79bdcb74cd --- /dev/null +++ b/components/net/uip/doc/html/a00123.html @@ -0,0 +1,57 @@ + + +uIP 1.0: uip/lc-addrlabels.h File Reference + + + + + + +

uip/lc-addrlabels.h File Reference


Detailed Description

+Implementation of local continuations based on the "Labels as values" feature of gcc. +

+

Author:
Adam Dunkels <adam@sics.se>
+This implementation of local continuations is based on a special feature of the GCC C compiler called "labels as values". This feature allows assigning pointers with the address of the code corresponding to a particular C label.

+For more information, see the GCC documentation: http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html

+Thanks to dividuum for finding the nice local scope label implementation. +

+Definition in file lc-addrlabels.h. +

+ +

+Go to the source code of this file. + + + + + + + + + + + + + +

Defines

+#define LC_INIT(s)   s = NULL
+#define LC_RESUME(s)
+#define LC_SET(s)   do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0)
+#define LC_END(s)

Typedefs

+typedef void * lc_t
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00124.html b/components/net/uip/doc/html/a00124.html new file mode 100644 index 0000000000000000000000000000000000000000..a338d450bdd014c47d2583260bc8a5e6da36765e --- /dev/null +++ b/components/net/uip/doc/html/a00124.html @@ -0,0 +1,59 @@ + + +uIP 1.0: uip/lc-switch.h File Reference + + + + + + +

uip/lc-switch.h File Reference


Detailed Description

+Implementation of local continuations based on switch() statment. +

+

Author:
Adam Dunkels <adam@sics.se>
+This implementation of local continuations uses the C switch() statement to resume execution of a function somewhere inside the function's body. The implementation is based on the fact that switch() statements are able to jump directly into the bodies of control structures such as if() or while() statmenets.

+This implementation borrows heavily from Simon Tatham's coroutines implementation in C: http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html +

+Definition in file lc-switch.h. +

+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + +

Defines

+#define __LC_SWTICH_H__
+#define LC_INIT(s)   s = 0;
+#define LC_RESUME(s)   switch(s) { case 0:
+#define LC_SET(s)   s = __LINE__; case __LINE__:
+#define LC_END(s)   }

Typedefs

+typedef unsigned short lc_t
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00125.html b/components/net/uip/doc/html/a00125.html new file mode 100644 index 0000000000000000000000000000000000000000..ddcb20b9b0302041b7600534db62eabed500879f --- /dev/null +++ b/components/net/uip/doc/html/a00125.html @@ -0,0 +1,39 @@ + + +uIP 1.0: uip/lc.h File Reference + + + + + + +

uip/lc.h File Reference


Detailed Description

+Local continuations. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file lc.h. +

+#include "lc-switch.h"
+ +

+Go to the source code of this file. + +
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00127.html b/components/net/uip/doc/html/a00127.html new file mode 100644 index 0000000000000000000000000000000000000000..c4cf5527975375b917fb58a05d8a7c8b5667a2f4 --- /dev/null +++ b/components/net/uip/doc/html/a00127.html @@ -0,0 +1,99 @@ + + +uIP 1.0: uip/psock.h File Reference + + + + + + +

uip/psock.h File Reference


Detailed Description

+Protosocket library header file. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file psock.h. +

+#include "uipopt.h"
+#include "pt.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  psock_buf
struct  psock
 The representation of a protosocket. More...

Defines

#define PSOCK_INIT(psock, buffer, buffersize)
 Initialize a protosocket.
#define PSOCK_BEGIN(psock)
 Start the protosocket protothread in a function.
#define PSOCK_SEND(psock, data, datalen)
 Send data.
#define PSOCK_SEND_STR(psock, str)
 Send a null-terminated string.
#define PSOCK_GENERATOR_SEND(psock, generator, arg)
 Generate data with a function and send it.
#define PSOCK_CLOSE(psock)
 Close a protosocket.
#define PSOCK_READBUF(psock)
 Read data until the buffer is full.
#define PSOCK_READTO(psock, c)
 Read data up to a specified character.
#define PSOCK_DATALEN(psock)
 The length of the data that was previously read.
#define PSOCK_EXIT(psock)
 Exit the protosocket's protothread.
#define PSOCK_CLOSE_EXIT(psock)
 Close a protosocket and exit the protosocket's protothread.
#define PSOCK_END(psock)
 Declare the end of a protosocket's protothread.
#define PSOCK_NEWDATA(psock)
 Check if new data has arrived on a protosocket.
#define PSOCK_WAIT_UNTIL(psock, condition)
 Wait until a condition is true.
+#define PSOCK_WAIT_THREAD(psock, condition)   PT_WAIT_THREAD(&((psock)->pt), (condition))

Functions

+u16_t psock_datalen (struct psock *psock)
+char psock_newdata (struct psock *s)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00128.html b/components/net/uip/doc/html/a00128.html new file mode 100644 index 0000000000000000000000000000000000000000..087b66848942e468518b029d5fa642f9a577fb00 --- /dev/null +++ b/components/net/uip/doc/html/a00128.html @@ -0,0 +1,101 @@ + + +uIP 1.0: uip/pt.h File Reference + + + + + + +

uip/pt.h File Reference


Detailed Description

+Protothreads implementation. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file pt.h. +

+#include "lc.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  pt

Initialization

#define PT_INIT(pt)
 Initialize a protothread.

Declaration and definition

#define PT_THREAD(name_args)
 Declaration of a protothread.
#define PT_BEGIN(pt)
 Declare the start of a protothread inside the C function implementing the protothread.
#define PT_END(pt)
 Declare the end of a protothread.

Blocked wait

#define PT_WAIT_UNTIL(pt, condition)
 Block and wait until condition is true.
#define PT_WAIT_WHILE(pt, cond)
 Block and wait while condition is true.

Hierarchical protothreads

#define PT_WAIT_THREAD(pt, thread)
 Block and wait until a child protothread completes.
#define PT_SPAWN(pt, child, thread)
 Spawn a child protothread and wait until it exits.

Exiting and restarting

#define PT_RESTART(pt)
 Restart the protothread.
#define PT_EXIT(pt)
 Exit the protothread.

Calling a protothread

#define PT_SCHEDULE(f)
 Schedule a protothread.

Yielding from a protothread

#define PT_YIELD(pt)
 Yield from the current protothread.
#define PT_YIELD_UNTIL(pt, cond)
 Yield from the protothread until a condition occurs.

Defines

+#define PT_WAITING   0
+#define PT_EXITED   1
+#define PT_ENDED   2
+#define PT_YIELDED   3
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00129.html b/components/net/uip/doc/html/a00129.html new file mode 100644 index 0000000000000000000000000000000000000000..2d89eba3bd7ff15af43772fc912a8d94bdc5a0d0 --- /dev/null +++ b/components/net/uip/doc/html/a00129.html @@ -0,0 +1,53 @@ + + +uIP 1.0: uip/timer.c File Reference + + + + + + +

uip/timer.c File Reference


Detailed Description

+Timer library implementation. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file timer.c. +

+#include "clock.h"
+#include "timer.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + +

Functions

void timer_set (struct timer *t, clock_time_t interval)
 Set a timer.
void timer_reset (struct timer *t)
 Reset the timer with the same interval.
void timer_restart (struct timer *t)
 Restart the timer from the current point in time.
int timer_expired (struct timer *t)
 Check if a timer has expired.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00130.html b/components/net/uip/doc/html/a00130.html new file mode 100644 index 0000000000000000000000000000000000000000..95da0338716d3723d428118b2595ddd62744ef64 --- /dev/null +++ b/components/net/uip/doc/html/a00130.html @@ -0,0 +1,56 @@ + + +uIP 1.0: uip/timer.h File Reference + + + + + + +

uip/timer.h File Reference


Detailed Description

+Timer library header file. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file timer.h. +

+#include "clock.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + +

Data Structures

struct  timer
 A timer. More...

Functions

void timer_set (struct timer *t, clock_time_t interval)
 Set a timer.
void timer_reset (struct timer *t)
 Reset the timer with the same interval.
void timer_restart (struct timer *t)
 Restart the timer from the current point in time.
int timer_expired (struct timer *t)
 Check if a timer has expired.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00131.html b/components/net/uip/doc/html/a00131.html new file mode 100644 index 0000000000000000000000000000000000000000..8370948415d826ad6afe9c62a423a84e98c16ab8 --- /dev/null +++ b/components/net/uip/doc/html/a00131.html @@ -0,0 +1,63 @@ + + +uIP 1.0: uip/uip-neighbor.c File Reference + + + + + + +

uip/uip-neighbor.c File Reference


Detailed Description

+Database of link-local neighbors, used by IPv6 code and to be used by a future ARP code rewrite. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file uip-neighbor.c. +

+#include "uip-neighbor.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + +

Defines

+#define MAX_TIME   128
+#define ENTRIES   8

Functions

+void uip_neighbor_init (void)
+void uip_neighbor_periodic (void)
+void uip_neighbor_add (uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr)
+void uip_neighbor_update (uip_ipaddr_t ipaddr)
+uip_neighbor_addruip_neighbor_lookup (uip_ipaddr_t ipaddr)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00132.html b/components/net/uip/doc/html/a00132.html new file mode 100644 index 0000000000000000000000000000000000000000..dc5b6496f93a4be7089cd878969b485931d1cbd9 --- /dev/null +++ b/components/net/uip/doc/html/a00132.html @@ -0,0 +1,58 @@ + + +uIP 1.0: uip/uip-neighbor.h File Reference + + + + + + +

uip/uip-neighbor.h File Reference


Detailed Description

+Header file for database of link-local neighbors, used by IPv6 code and to be used by future ARP code. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file uip-neighbor.h. +

+#include "uip.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + +

Data Structures

struct  uip_neighbor_addr

Functions

+void uip_neighbor_init (void)
+void uip_neighbor_add (uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr)
+void uip_neighbor_update (uip_ipaddr_t ipaddr)
+uip_neighbor_addruip_neighbor_lookup (uip_ipaddr_t ipaddr)
+void uip_neighbor_periodic (void)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00134.html b/components/net/uip/doc/html/a00134.html new file mode 100644 index 0000000000000000000000000000000000000000..179ad8ff99d8e2945801e84e9718abc33bd31c71 --- /dev/null +++ b/components/net/uip/doc/html/a00134.html @@ -0,0 +1,42 @@ + + +uIP 1.0: uip/uip-split.h File Reference + + + + + + +

uip/uip-split.h File Reference


Detailed Description

+Module for splitting outbound TCP segments in two to avoid the delayed ACK throughput degradation. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file uip-split.h. +

+ +

+Go to the source code of this file. + + + + + +

Functions

void uip_split_output (void)
 Handle outgoing packets.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00135.html b/components/net/uip/doc/html/a00135.html new file mode 100644 index 0000000000000000000000000000000000000000..8cbccdcc946d2744334cef868e0b6f532babbf08 --- /dev/null +++ b/components/net/uip/doc/html/a00135.html @@ -0,0 +1,215 @@ + + +uIP 1.0: uip/uip.c File Reference + + + + + + +

uip/uip.c File Reference


Detailed Description

+The uIP TCP/IP stack code. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file uip.c. +

+#include "uip.h"
+#include "uipopt.h"
+#include "uip_arch.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define DEBUG_PRINTF()
+#define TCP_FIN   0x01
+#define TCP_SYN   0x02
+#define TCP_RST   0x04
+#define TCP_PSH   0x08
+#define TCP_ACK   0x10
+#define TCP_URG   0x20
+#define TCP_CTL   0x3f
+#define TCP_OPT_END   0
+#define TCP_OPT_NOOP   1
+#define TCP_OPT_MSS   2
+#define TCP_OPT_MSS_LEN   4
+#define ICMP_ECHO_REPLY   0
+#define ICMP_ECHO   8
+#define ICMP6_ECHO_REPLY   129
+#define ICMP6_ECHO   128
+#define ICMP6_NEIGHBOR_SOLICITATION   135
+#define ICMP6_NEIGHBOR_ADVERTISEMENT   136
+#define ICMP6_FLAG_S   (1 << 6)
+#define ICMP6_OPTION_SOURCE_LINK_ADDRESS   1
+#define ICMP6_OPTION_TARGET_LINK_ADDRESS   2
+#define BUF   ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
+#define FBUF   ((struct uip_tcpip_hdr *)&uip_reassbuf[0])
+#define ICMPBUF   ((struct uip_icmpip_hdr *)&uip_buf[UIP_LLH_LEN])
+#define UDPBUF   ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN])
+#define UIP_STAT(s)
+#define UIP_LOG(m)

Functions

void uip_setipid (u16_t id)
 uIP initialization function.
void uip_add32 (u8_t *op32, u16_t op16)
 Carry out a 32-bit addition.
u16_t uip_chksum (u16_t *buf, u16_t len)
 Calculate the Internet checksum over a buffer.
u16_t uip_ipchksum (void)
 Calculate the IP header checksum of the packet header in uip_buf.
u16_t uip_tcpchksum (void)
 Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
void uip_init (void)
 uIP initialization function.
uip_connuip_connect (uip_ipaddr_t *ripaddr, u16_t rport)
 Connect to a remote host using TCP.
uip_udp_connuip_udp_new (uip_ipaddr_t *ripaddr, u16_t rport)
 Set up a new UDP connection.
void uip_unlisten (u16_t port)
 Stop listening to the specified port.
void uip_listen (u16_t port)
 Start listening to the specified port.
+void uip_process (u8_t flag)
u16_t htons (u16_t val)
 Convert 16-bit quantity from host byte order to network byte order.
void uip_send (const void *data, int len)
 Send data on the current connection.

Variables

+uip_ipaddr_t uip_hostaddr
+uip_ipaddr_t uip_draddr
+uip_ipaddr_t uip_netmask
+uip_eth_addr uip_ethaddr = {{0,0,0,0,0,0}}
u8_t uip_buf [UIP_BUFSIZE+2]
 The uIP packet buffer.
void * uip_appdata
 Pointer to the application data in the packet buffer.
+void * uip_sappdata
u16_t uip_len
 The length of the packet in the uip_buf buffer.
+u16_t uip_slen
+u8_t uip_flags
uip_connuip_conn
 Pointer to the current TCP connection.
+uip_conn uip_conns [UIP_CONNS]
+u16_t uip_listenports [UIP_LISTENPORTS]
+uip_udp_connuip_udp_conn
 The current UDP connection.
+uip_udp_conn uip_udp_conns [UIP_UDP_CONNS]
+u8_t uip_acc32 [4]
 4-byte array used for the 32-bit sequence number calculations.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00136.html b/components/net/uip/doc/html/a00136.html new file mode 100644 index 0000000000000000000000000000000000000000..341701bce64a4aeb5ac343812e27fcc295554862 --- /dev/null +++ b/components/net/uip/doc/html/a00136.html @@ -0,0 +1,400 @@ + + +uIP 1.0: uip/uip.h File Reference + + + + + + +

uip/uip.h File Reference


Detailed Description

+Header file for the uIP TCP/IP stack. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+The uIP TCP/IP stack header file contains definitions for a number of C macros that are used by uIP programs as well as internal uIP structures, TCP/IP header structures and function declarations. +

+Definition in file uip.h. +

+#include "uipopt.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  uip_conn
 Representation of a uIP TCP connection. More...
struct  uip_udp_conn
 Representation of a uIP UDP connection. More...
struct  uip_stats
 The structure holding the TCP/IP statistics that are gathered if UIP_STATISTICS is set to 1. More...
struct  uip_tcpip_hdr
struct  uip_icmpip_hdr
struct  uip_udpip_hdr
struct  uip_eth_addr
 Representation of a 48-bit Ethernet address. More...

Defines

#define uip_sethostaddr(addr)
 Set the IP address of this host.
#define uip_gethostaddr(addr)
 Get the IP address of this host.
#define uip_setdraddr(addr)
 Set the default router's IP address.
#define uip_setnetmask(addr)
 Set the netmask.
#define uip_getdraddr(addr)
 Get the default router's IP address.
#define uip_getnetmask(addr)
 Get the netmask.
#define uip_input()
 Process an incoming packet.
#define uip_periodic(conn)
 Periodic processing for a connection identified by its number.
+#define uip_conn_active(conn)   (uip_conns[conn].tcpstateflags != UIP_CLOSED)
#define uip_periodic_conn(conn)
 Perform periodic processing for a connection identified by a pointer to its structure.
#define uip_poll_conn(conn)
 Reuqest that a particular connection should be polled.
#define uip_udp_periodic(conn)
 Periodic processing for a UDP connection identified by its number.
#define uip_udp_periodic_conn(conn)
 Periodic processing for a UDP connection identified by a pointer to its structure.
+#define uip_outstanding(conn)   ((conn)->len)
#define uip_datalen()
 The length of any incoming data that is currently avaliable (if avaliable) in the uip_appdata buffer.
#define uip_urgdatalen()
 The length of any out-of-band data (urgent data) that has arrived on the connection.
#define uip_close()
 Close the current connection.
#define uip_abort()
 Abort the current connection.
#define uip_stop()
 Tell the sending host to stop sending data.
+#define uip_stopped(conn)
 Find out if the current connection has been previously stopped with uip_stop().
#define uip_restart()
 Restart the current connection, if is has previously been stopped with uip_stop().
#define uip_udpconnection()
 Is the current connection a UDP connection?
#define uip_newdata()
 Is new incoming data available?
#define uip_acked()
 Has previously sent data been acknowledged?
#define uip_connected()
 Has the connection just been connected?
#define uip_closed()
 Has the connection been closed by the other end?
#define uip_aborted()
 Has the connection been aborted by the other end?
#define uip_timedout()
 Has the connection timed out?
#define uip_rexmit()
 Do we need to retransmit previously data?
#define uip_poll()
 Is the connection being polled by uIP?
+#define uip_initialmss()
 Get the initial maxium segment size (MSS) of the current connection.
#define uip_mss()
 Get the current maxium segment size that can be sent on the current connection.
#define uip_udp_remove(conn)
 Removed a UDP connection.
#define uip_udp_bind(conn, port)
 Bind a UDP connection to a local port.
#define uip_udp_send(len)
 Send a UDP datagram of length len on the current connection.
#define uip_ipaddr(addr, addr0, addr1, addr2, addr3)
 Construct an IP address from four bytes.
#define uip_ip6addr(addr, addr0, addr1, addr2, addr3, addr4, addr5, addr6, addr7)
 Construct an IPv6 address from eight 16-bit words.
#define uip_ipaddr_copy(dest, src)
 Copy an IP address to another IP address.
#define uip_ipaddr_cmp(addr1, addr2)
 Compare two IP addresses.
#define uip_ipaddr_maskcmp(addr1, addr2, mask)
 Compare two IP addresses with netmasks.
#define uip_ipaddr_mask(dest, src, mask)
 Mask out the network part of an IP address.
#define uip_ipaddr1(addr)
 Pick the first octet of an IP address.
#define uip_ipaddr2(addr)
 Pick the second octet of an IP address.
#define uip_ipaddr3(addr)
 Pick the third octet of an IP address.
#define uip_ipaddr4(addr)
 Pick the fourth octet of an IP address.
#define HTONS(n)
 Convert 16-bit quantity from host byte order to network byte order.
+#define ntohs   htons
+#define UIP_ACKDATA   1
+#define UIP_NEWDATA   2
+#define UIP_REXMIT   4
+#define UIP_POLL   8
+#define UIP_CLOSE   16
+#define UIP_ABORT   32
+#define UIP_CONNECTED   64
+#define UIP_TIMEDOUT   128
+#define UIP_DATA   1
+#define UIP_TIMER   2
+#define UIP_POLL_REQUEST   3
+#define UIP_UDP_SEND_CONN   4
+#define UIP_UDP_TIMER   5
+#define UIP_CLOSED   0
+#define UIP_SYN_RCVD   1
+#define UIP_SYN_SENT   2
+#define UIP_ESTABLISHED   3
+#define UIP_FIN_WAIT_1   4
+#define UIP_FIN_WAIT_2   5
+#define UIP_CLOSING   6
+#define UIP_TIME_WAIT   7
+#define UIP_LAST_ACK   8
+#define UIP_TS_MASK   15
+#define UIP_STOPPED   16
#define UIP_APPDATA_SIZE
 The buffer size available for user data in the uip_buf buffer.
+#define UIP_PROTO_ICMP   1
+#define UIP_PROTO_TCP   6
+#define UIP_PROTO_UDP   17
+#define UIP_PROTO_ICMP6   58
+#define UIP_IPH_LEN   20
+#define UIP_UDPH_LEN   8
+#define UIP_TCPH_LEN   20
+#define UIP_IPUDPH_LEN   (UIP_UDPH_LEN + UIP_IPH_LEN)
+#define UIP_IPTCPH_LEN   (UIP_TCPH_LEN + UIP_IPH_LEN)
+#define UIP_TCPIP_HLEN   UIP_IPTCPH_LEN

Typedefs

+typedef u16_t uip_ip4addr_t [2]
 Repressentation of an IP address.
+typedef u16_t uip_ip6addr_t [8]
+typedef uip_ip4addr_t uip_ipaddr_t

Functions

void uip_init (void)
 uIP initialization function.
void uip_setipid (u16_t id)
 uIP initialization function.
void uip_listen (u16_t port)
 Start listening to the specified port.
void uip_unlisten (u16_t port)
 Stop listening to the specified port.
uip_connuip_connect (uip_ipaddr_t *ripaddr, u16_t port)
 Connect to a remote host using TCP.
void uip_send (const void *data, int len)
 Send data on the current connection.
uip_udp_connuip_udp_new (uip_ipaddr_t *ripaddr, u16_t rport)
 Set up a new UDP connection.
u16_t htons (u16_t val)
 Convert 16-bit quantity from host byte order to network byte order.
+void uip_process (u8_t flag)
u16_t uip_chksum (u16_t *buf, u16_t len)
 Calculate the Internet checksum over a buffer.
u16_t uip_ipchksum (void)
 Calculate the IP header checksum of the packet header in uip_buf.
u16_t uip_tcpchksum (void)
 Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
u16_t uip_udpchksum (void)
 Calculate the UDP checksum of the packet in uip_buf and uip_appdata.

Variables

u8_t uip_buf [UIP_BUFSIZE+2]
 The uIP packet buffer.
void * uip_appdata
 Pointer to the application data in the packet buffer.
u16_t uip_len
 The length of the packet in the uip_buf buffer.
uip_connuip_conn
 Pointer to the current TCP connection.
+uip_conn uip_conns [UIP_CONNS]
+u8_t uip_acc32 [4]
 4-byte array used for the 32-bit sequence number calculations.
+uip_udp_connuip_udp_conn
 The current UDP connection.
+uip_udp_conn uip_udp_conns [UIP_UDP_CONNS]
uip_stats uip_stat
 The uIP TCP/IP statistics.
+u8_t uip_flags
+uip_ipaddr_t uip_hostaddr
+uip_ipaddr_t uip_netmask
+uip_ipaddr_t uip_draddr
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00137.html b/components/net/uip/doc/html/a00137.html new file mode 100644 index 0000000000000000000000000000000000000000..12938893695f554a3807f87cf8bbec797d0a1a0a --- /dev/null +++ b/components/net/uip/doc/html/a00137.html @@ -0,0 +1,52 @@ + + +uIP 1.0: uip/uip_arch.h File Reference + + + + + + +

uip/uip_arch.h File Reference


Detailed Description

+Declarations of architecture specific functions. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file uip_arch.h. +

+#include "uip.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + +

Functions

void uip_add32 (u8_t *op32, u16_t op16)
 Carry out a 32-bit addition.
u16_t uip_chksum (u16_t *buf, u16_t len)
 Calculate the Internet checksum over a buffer.
u16_t uip_ipchksum (void)
 Calculate the IP header checksum of the packet header in uip_buf.
u16_t uip_tcpchksum (void)
 Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00138.html b/components/net/uip/doc/html/a00138.html new file mode 100644 index 0000000000000000000000000000000000000000..b7845d551f9e1e8c16b4809e09ac24f7be162128 --- /dev/null +++ b/components/net/uip/doc/html/a00138.html @@ -0,0 +1,70 @@ + + +uIP 1.0: uip/uip_arp.c File Reference + + + + + + +

uip/uip_arp.c File Reference


Detailed Description

+Implementation of the ARP Address Resolution Protocol. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file uip_arp.c. +

+#include "uip_arp.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define ARP_REQUEST   1
+#define ARP_REPLY   2
+#define ARP_HWTYPE_ETH   1
+#define BUF   ((struct arp_hdr *)&uip_buf[0])
+#define IPBUF   ((struct ethip_hdr *)&uip_buf[0])

Functions

+void uip_arp_init (void)
 Initialize the ARP module.
void uip_arp_timer (void)
 Periodic ARP processing function.
void uip_arp_arpin (void)
 ARP processing for incoming ARP packets.
void uip_arp_out (void)
 Prepend Ethernet header to an outbound IP packet and see if we need to send out an ARP request.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00139.html b/components/net/uip/doc/html/a00139.html new file mode 100644 index 0000000000000000000000000000000000000000..00cb3b75c0abf0027ca0355eca5f6bec1fd4df5f --- /dev/null +++ b/components/net/uip/doc/html/a00139.html @@ -0,0 +1,77 @@ + + +uIP 1.0: uip/uip_arp.h File Reference + + + + + + +

uip/uip_arp.h File Reference


Detailed Description

+Macros and definitions for the ARP module. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file uip_arp.h. +

+#include "uip.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  uip_eth_hdr
 The Ethernet header. More...

Defines

+#define UIP_ETHTYPE_ARP   0x0806
+#define UIP_ETHTYPE_IP   0x0800
+#define UIP_ETHTYPE_IP6   0x86dd
+#define uip_arp_ipin()
#define uip_setethaddr(eaddr)
 Specifiy the Ethernet MAC address.

Functions

+void uip_arp_init (void)
 Initialize the ARP module.
void uip_arp_arpin (void)
 ARP processing for incoming ARP packets.
void uip_arp_out (void)
 Prepend Ethernet header to an outbound IP packet and see if we need to send out an ARP request.
void uip_arp_timer (void)
 Periodic ARP processing function.

Variables

+uip_eth_addr uip_ethaddr
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00140.html b/components/net/uip/doc/html/a00140.html new file mode 100644 index 0000000000000000000000000000000000000000..a413b004472befab50597effad7c2a7f6164709f --- /dev/null +++ b/components/net/uip/doc/html/a00140.html @@ -0,0 +1,143 @@ + + +uIP 1.0: uip/uipopt.h File Reference + + + + + + +

uip/uipopt.h File Reference


Detailed Description

+Configuration options for uIP. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+This file is used for tweaking various configuration options for uIP. You should make a copy of this file into one of your project's directories instead of editing this example "uipopt.h" file that comes with the uIP distribution. +

+Definition in file uipopt.h. +

+#include "uip-conf.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Static configuration options

These configuration options can be used for setting the IP address settings statically, but only if UIP_FIXEDADDR is set to 1. The configuration options for a specific node includes IP address, netmask and default router as well as the Ethernet address. The netmask, default router and Ethernet address are appliciable only if uIP should be run over Ethernet.

+All of these should be changed to suit your project.

#define UIP_FIXEDADDR
 Determines if uIP should use a fixed IP address or not.
#define UIP_PINGADDRCONF
 Ping IP address asignment.
#define UIP_FIXEDETHADDR
 Specifies if the uIP ARP module should be compiled with a fixed Ethernet MAC address or not.

IP configuration options

#define UIP_TTL   64
 The IP TTL (time to live) of IP packets sent by uIP.
#define UIP_REASSEMBLY
 Turn on support for IP packet reassembly.
+#define UIP_REASS_MAXAGE   40
 The maximum time an IP fragment should wait in the reassembly buffer before it is dropped.

UDP configuration options

+#define UIP_UDP
 Toggles wether UDP support should be compiled in or not.
#define UIP_UDP_CHECKSUMS
 Toggles if UDP checksums should be used or not.
+#define UIP_UDP_CONNS
 The maximum amount of concurrent UDP connections.

TCP configuration options

#define UIP_ACTIVE_OPEN
 Determines if support for opening connections from uIP should be compiled in.
#define UIP_CONNS
 The maximum number of simultaneously open TCP connections.
#define UIP_LISTENPORTS
 The maximum number of simultaneously listening TCP ports.
#define UIP_URGDATA
 Determines if support for TCP urgent data notification should be compiled in.
#define UIP_RTO   3
 The initial retransmission timeout counted in timer pulses.
#define UIP_MAXRTX   8
 The maximum number of times a segment should be retransmitted before the connection should be aborted.
#define UIP_MAXSYNRTX   5
 The maximum number of times a SYN segment should be retransmitted before a connection request should be deemed to have been unsuccessful.
#define UIP_TCP_MSS   (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
 The TCP maximum segment size.
#define UIP_RECEIVE_WINDOW
 The size of the advertised receiver's window.
#define UIP_TIME_WAIT_TIMEOUT   120
 How long a connection should stay in the TIME_WAIT state.

ARP configuration options

#define UIP_ARPTAB_SIZE
 The size of the ARP table.
#define UIP_ARP_MAXAGE   120
 The maxium age of ARP table entries measured in 10ths of seconds.

General configuration options

#define UIP_BUFSIZE
 The size of the uIP packet buffer.
#define UIP_STATISTICS
 Determines if statistics support should be compiled in.
#define UIP_LOGGING
 Determines if logging of certain events should be compiled in.
#define UIP_BROADCAST
 Broadcast support.
#define UIP_LLH_LEN
 The link level header length.
void uip_log (char *msg)
 Print out a uIP log message.

CPU architecture configuration

The CPU architecture configuration is where the endianess of the CPU on which uIP is to be run is specified. Most CPUs today are little endian, and the most notable exception are the Motorolas which are big endian. The BYTE_ORDER macro should be changed to reflect the CPU architecture on which uIP is to be run.

#define UIP_BYTE_ORDER
 The byte order of the CPU architecture on which uIP is to be run.

Defines

+#define UIP_LITTLE_ENDIAN   3412
+#define UIP_BIG_ENDIAN   1234
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00141.html b/components/net/uip/doc/html/a00141.html new file mode 100644 index 0000000000000000000000000000000000000000..4b0e595872e603dff4937fb89d5bedcd9e2aa157 --- /dev/null +++ b/components/net/uip/doc/html/a00141.html @@ -0,0 +1,83 @@ + + +uIP 1.0: unix/uip-conf.h File Reference + + + + + + +

unix/uip-conf.h File Reference


Detailed Description

+An example uIP configuration file. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file uip-conf.h. +

+#include <inttypes.h>
+#include "webserver.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Project-specific configuration options

uIP has a number of configuration options that can be overridden for each project. These are kept in a project-specific uip-conf.h file and all configuration names have the prefix UIP_CONF.

+#define UIP_CONF_MAX_CONNECTIONS
 Maximum number of TCP connections.
+#define UIP_CONF_MAX_LISTENPORTS
 Maximum number of listening TCP ports.
+#define UIP_CONF_BUFFER_SIZE
 uIP buffer size.
+#define UIP_CONF_BYTE_ORDER
 CPU byte order.
+#define UIP_CONF_LOGGING
 Logging on or off.
+#define UIP_CONF_UDP
 UDP support on or off.
+#define UIP_CONF_UDP_CHECKSUMS
 UDP checksums on or off.
+#define UIP_CONF_STATISTICS
 uIP statistics on or off
typedef uint8_t u8_t
 8 bit datatype
typedef uint16_t u16_t
 16 bit datatype
typedef unsigned short uip_stats_t
 Statistics datatype.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00142.html b/components/net/uip/doc/html/a00142.html new file mode 100644 index 0000000000000000000000000000000000000000..c2db21d3c41c40dc029656a1c6d786cfd6589b75 --- /dev/null +++ b/components/net/uip/doc/html/a00142.html @@ -0,0 +1,690 @@ + + +uIP 1.0: Protothreads + + + + + +

Protothreads


Detailed Description

+Protothreads are a type of lightweight stackless threads designed for severly memory constrained systems such as deeply embedded systems or sensor network nodes. +

+Protothreads provides linear code execution for event-driven systems implemented in C. Protothreads can be used with or without an RTOS.

+Protothreads are a extremely lightweight, stackless type of threads that provides a blocking context on top of an event-driven system, without the overhead of per-thread stacks. The purpose of protothreads is to implement sequential flow of control without complex state machines or full multi-threading. Protothreads provides conditional blocking inside C functions.

+The advantage of protothreads over a purely event-driven approach is that protothreads provides a sequential code structure that allows for blocking functions. In purely event-driven systems, blocking must be implemented by manually breaking the function into two pieces - one for the piece of code before the blocking call and one for the code after the blocking call. This makes it hard to use control structures such as if() conditionals and while() loops.

+The advantage of protothreads over ordinary threads is that a protothread do not require a separate stack. In memory constrained systems, the overhead of allocating multiple stacks can consume large amounts of the available memory. In contrast, each protothread only requires between two and twelve bytes of state, depending on the architecture.

+

Note:
Because protothreads do not save the stack context across a blocking call, local variables are not preserved when the protothread blocks. This means that local variables should be used with utmost care - if in doubt, do not use local variables inside a protothread!
+Main features:

+

    +
  • No machine specific code - the protothreads library is pure C
+

+

    +
  • Does not use error-prone functions such as longjmp()
+

+

    +
  • Very small RAM overhead - only two bytes per protothread
+

+

    +
  • Can be used with or without an OS
+

+

    +
  • Provides blocking wait without full multi-threading or stack-switching
+

+Examples applications:

+

    +
  • Memory constrained systems
+

+

    +
  • Event-driven protocol stacks
+

+

    +
  • Deeply embedded systems
+

+

    +
  • Sensor network nodes
+

+The protothreads API consists of four basic operations: initialization: PT_INIT(), execution: PT_BEGIN(), conditional blocking: PT_WAIT_UNTIL() and exit: PT_END(). On top of these, two convenience functions are built: reversed condition blocking: PT_WAIT_WHILE() and protothread blocking: PT_WAIT_THREAD().

+

See also:
Protothreads API documentation
+The protothreads library is released under a BSD-style license that allows for both non-commercial and commercial usage. The only requirement is that credit is given.

+Authors

+The protothreads library was written by Adam Dunkels <adam@sics.se> with support from Oliver Schmidt <ol.sc@web.de>.

+Protothreads

+Protothreads are a extremely lightweight, stackless threads that provides a blocking context on top of an event-driven system, without the overhead of per-thread stacks. The purpose of protothreads is to implement sequential flow of control without using complex state machines or full multi-threading. Protothreads provides conditional blocking inside a C function.

+In memory constrained systems, such as deeply embedded systems, traditional multi-threading may have a too large memory overhead. In traditional multi-threading, each thread requires its own stack, that typically is over-provisioned. The stacks may use large parts of the available memory.

+The main advantage of protothreads over ordinary threads is that protothreads are very lightweight: a protothread does not require its own stack. Rather, all protothreads run on the same stack and context switching is done by stack rewinding. This is advantageous in memory constrained systems, where a stack for a thread might use a large part of the available memory. A protothread only requires only two bytes of memory per protothread. Moreover, protothreads are implemented in pure C and do not require any machine-specific assembler code.

+A protothread runs within a single C function and cannot span over other functions. A protothread may call normal C functions, but cannot block inside a called function. Blocking inside nested function calls is instead made by spawning a separate protothread for each potentially blocking function. The advantage of this approach is that blocking is explicit: the programmer knows exactly which functions that block that which functions the never blocks.

+Protothreads are similar to asymmetric co-routines. The main difference is that co-routines uses a separate stack for each co-routine, whereas protothreads are stackless. The most similar mechanism to protothreads are Python generators. These are also stackless constructs, but have a different purpose. Protothreads provides blocking contexts inside a C function, whereas Python generators provide multiple exit points from a generator function.

+Local variables

+
Note:
Because protothreads do not save the stack context across a blocking call, local variables are not preserved when the protothread blocks. This means that local variables should be used with utmost care - if in doubt, do not use local variables inside a protothread!
+

+Scheduling

+A protothread is driven by repeated calls to the function in which the protothread is running. Each time the function is called, the protothread will run until it blocks or exits. Thus the scheduling of protothreads is done by the application that uses protothreads.

+Implementation

+Protothreads are implemented using local continuations. A local continuation represents the current state of execution at a particular place in the program, but does not provide any call history or local variables. A local continuation can be set in a specific function to capture the state of the function. After a local continuation has been set can be resumed in order to restore the state of the function at the point where the local continuation was set.

+Local continuations can be implemented in a variety of ways:

+

    +
  1. by using machine specific assembler code,
  2. by using standard C constructs, or
  3. by using compiler extensions.
+

+The first way works by saving and restoring the processor state, except for stack pointers, and requires between 16 and 32 bytes of memory per protothread. The exact amount of memory required depends on the architecture.

+The standard C implementation requires only two bytes of state per protothread and utilizes the C switch() statement in a non-obvious way that is similar to Duff's device. This implementation does, however, impose a slight restriction to the code that uses protothreads in that the code cannot use switch() statements itself.

+Certain compilers has C extensions that can be used to implement protothreads. GCC supports label pointers that can be used for this purpose. With this implementation, protothreads require 4 bytes of RAM per protothread. +

+ + + + + + + +

+

+ + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  pt.h
 Protothreads implementation.

Modules

 Local continuations
 Local continuations form the basis for implementing protothreads.

Data Structures

struct  pt

Initialization

#define PT_INIT(pt)
 Initialize a protothread.

Declaration and definition

#define PT_THREAD(name_args)
 Declaration of a protothread.
#define PT_BEGIN(pt)
 Declare the start of a protothread inside the C function implementing the protothread.
#define PT_END(pt)
 Declare the end of a protothread.

Blocked wait

#define PT_WAIT_UNTIL(pt, condition)
 Block and wait until condition is true.
#define PT_WAIT_WHILE(pt, cond)
 Block and wait while condition is true.

Hierarchical protothreads

#define PT_WAIT_THREAD(pt, thread)
 Block and wait until a child protothread completes.
#define PT_SPAWN(pt, child, thread)
 Spawn a child protothread and wait until it exits.

Exiting and restarting

#define PT_RESTART(pt)
 Restart the protothread.
#define PT_EXIT(pt)
 Exit the protothread.

Calling a protothread

#define PT_SCHEDULE(f)
 Schedule a protothread.

Yielding from a protothread

#define PT_YIELD(pt)
 Yield from the current protothread.
#define PT_YIELD_UNTIL(pt, cond)
 Yield from the protothread until a condition occurs.

Defines

+#define PT_WAITING   0
+#define PT_EXITED   1
+#define PT_ENDED   2
+#define PT_YIELDED   3
+


Define Documentation

+

+ + + + +
+ + + + + + + + + +
#define PT_BEGIN pt   ) 
+
+ + + + + +
+   + + +

+Declare the start of a protothread inside the C function implementing the protothread. +

+This macro is used to declare the starting point of a protothread. It should be placed at the start of the function in which the protothread runs. All C statements above the PT_BEGIN() invokation will be executed each time the protothread is scheduled.

+

Parameters:
+ + +
pt A pointer to the protothread control structure.
+
+
Examples:
+dhcpc.c.
+

+Definition at line 115 of file pt.h.

+

+ + + + +
+ + + + + + + + + +
#define PT_END pt   ) 
+
+ + + + + +
+   + + +

+Declare the end of a protothread. +

+This macro is used for declaring that a protothread ends. It must always be used together with a matching PT_BEGIN() macro.

+

Parameters:
+ + +
pt A pointer to the protothread control structure.
+
+
Examples:
+dhcpc.c.
+

+Definition at line 127 of file pt.h.

+

+ + + + +
+ + + + + + + + + +
#define PT_EXIT pt   ) 
+
+ + + + + +
+   + + +

+Exit the protothread. +

+This macro causes the protothread to exit. If the protothread was spawned by another protothread, the parent protothread will become unblocked and can continue to run.

+

Parameters:
+ + +
pt A pointer to the protothread control structure.
+
+ +

+Definition at line 246 of file pt.h.

+

+ + + + +
+ + + + + + + + + +
#define PT_INIT pt   ) 
+
+ + + + + +
+   + + +

+Initialize a protothread. +

+Initializes a protothread. Initialization must be done prior to starting to execute the protothread.

+

Parameters:
+ + +
pt A pointer to the protothread control structure.
+
+
See also:
PT_SPAWN()
+
Examples:
+dhcpc.c.
+

+Definition at line 80 of file pt.h. +

+Referenced by httpd_appcall().

+

+ + + + +
+ + + + + + + + + +
#define PT_RESTART pt   ) 
+
+ + + + + +
+   + + +

+Restart the protothread. +

+This macro will block and cause the running protothread to restart its execution at the place of the PT_BEGIN() call.

+

Parameters:
+ + +
pt A pointer to the protothread control structure.
+
+
Examples:
+dhcpc.c.
+

+Definition at line 229 of file pt.h.

+

+ + + + +
+ + + + + + + + + +
#define PT_SCHEDULE  ) 
+
+ + + + + +
+   + + +

+Schedule a protothread. +

+This function shedules a protothread. The return value of the function is non-zero if the protothread is running or zero if the protothread has exited.

+

Parameters:
+ + +
f The call to the C function implementing the protothread to be scheduled
+
+ +

+Definition at line 271 of file pt.h.

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define PT_SPAWN pt,
child,
thread   ) 
+
+ + + + + +
+   + + +

+Spawn a child protothread and wait until it exits. +

+This macro spawns a child protothread and waits until it exits. The macro can only be used within a protothread.

+

Parameters:
+ + + + +
pt A pointer to the protothread control structure.
child A pointer to the child protothread's control structure.
thread The child protothread with arguments
+
+ +

+Definition at line 206 of file pt.h.

+

+ + + + +
+ + + + + + + + + +
#define PT_THREAD name_args   ) 
+
+ + + + + +
+   + + +

+Declaration of a protothread. +

+This macro is used to declare a protothread. All protothreads must be declared with this macro.

+

Parameters:
+ + +
name_args The name and arguments of the C function implementing the protothread.
+
+
Examples:
+dhcpc.c, and smtp.c.
+

+Definition at line 100 of file pt.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PT_WAIT_THREAD pt,
thread   ) 
+
+ + + + + +
+   + + +

+Block and wait until a child protothread completes. +

+This macro schedules a child protothread. The current protothread will block until the child protothread completes.

+

Note:
The child protothread must be manually initialized with the PT_INIT() function before this function is used.
+
Parameters:
+ + + +
pt A pointer to the protothread control structure.
thread The child protothread with arguments
+
+
See also:
PT_SPAWN()
+ +

+Definition at line 192 of file pt.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PT_WAIT_UNTIL pt,
condition   ) 
+
+ + + + + +
+   + + +

+Block and wait until condition is true. +

+This macro blocks the protothread until the specified condition is true.

+

Parameters:
+ + + +
pt A pointer to the protothread control structure.
condition The condition.
+
+
Examples:
+dhcpc.c.
+

+Definition at line 148 of file pt.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PT_WAIT_WHILE pt,
cond   ) 
+
+ + + + + +
+   + + +

+Block and wait while condition is true. +

+This function blocks and waits while condition is true. See PT_WAIT_UNTIL().

+

Parameters:
+ + + +
pt A pointer to the protothread control structure.
cond The condition.
+
+ +

+Definition at line 167 of file pt.h.

+

+ + + + +
+ + + + + + + + + +
#define PT_YIELD pt   ) 
+
+ + + + + +
+   + + +

+Yield from the current protothread. +

+This function will yield the protothread, thereby allowing other processing to take place in the system.

+

Parameters:
+ + +
pt A pointer to the protothread control structure.
+
+
Examples:
+dhcpc.c.
+

+Definition at line 290 of file pt.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PT_YIELD_UNTIL pt,
cond   ) 
+
+ + + + + +
+   + + +

+Yield from the protothread until a condition occurs. +

+

Parameters:
+ + + +
pt A pointer to the protothread control structure.
cond The condition.
+
+This function will yield the protothread, until the specified condition evaluates to true. +

+Definition at line 310 of file pt.h.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00143.html b/components/net/uip/doc/html/a00143.html new file mode 100644 index 0000000000000000000000000000000000000000..28224e073217ddbb8241ac18713de679b66bf641 --- /dev/null +++ b/components/net/uip/doc/html/a00143.html @@ -0,0 +1,54 @@ + + +uIP 1.0: Applications + + + + + +

Applications


Detailed Description

+The uIP distribution contains a number of example applications that can be either used directory or studied when learning to develop applications for uIP. +

+ +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+


Modules

 DNS resolver
 The uIP DNS resolver functions are used to lookup a hostname and map it to a numerical IP address.
 SMTP E-mail sender
 The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is the standard way of sending and transfering e-mail on the Internet.
 Hello, world
 A small example showing how to write applications with protosockets.
 Web client
 This example shows a HTTP client that is able to download web pages and files from web servers.
 Web server
 The uIP web server is a very simplistic implementation of an HTTP server.
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00144.html b/components/net/uip/doc/html/a00144.html new file mode 100644 index 0000000000000000000000000000000000000000..5cca5bb290651536ceb5fc046dbb4b82685afa65 --- /dev/null +++ b/components/net/uip/doc/html/a00144.html @@ -0,0 +1,328 @@ + + +uIP 1.0: uIP configuration functions + + + + + +

uIP configuration functions
+ +[The uIP TCP/IP stack] +


Detailed Description

+The uIP configuration functions are used for setting run-time parameters in uIP such as IP addresses. +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + +

Defines

#define uip_sethostaddr(addr)
 Set the IP address of this host.
#define uip_gethostaddr(addr)
 Get the IP address of this host.
#define uip_setdraddr(addr)
 Set the default router's IP address.
#define uip_setnetmask(addr)
 Set the netmask.
#define uip_getdraddr(addr)
 Get the default router's IP address.
#define uip_getnetmask(addr)
 Get the netmask.
#define uip_setethaddr(eaddr)
 Specifiy the Ethernet MAC address.
+


Define Documentation

+

+ + + + +
+ + + + + + + + + +
#define uip_getdraddr addr   ) 
+
+ + + + + +
+   + + +

+Get the default router's IP address. +

+

Parameters:
+ + +
addr A pointer to a uip_ipaddr_t variable that will be filled in with the IP address of the default router.
+
+ +

+Definition at line 161 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_gethostaddr addr   ) 
+
+ + + + + +
+   + + +

+Get the IP address of this host. +

+The IP address is represented as a 4-byte array where the first octet of the IP address is put in the first member of the 4-byte array.

+Example:

 uip_ipaddr_t hostaddr;
+
+ uip_gethostaddr(&hostaddr);
+
Parameters:
+ + +
addr A pointer to a uip_ipaddr_t variable that will be filled in with the currently configured IP address.
+
+ +

+Definition at line 126 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_getnetmask addr   ) 
+
+ + + + + +
+   + + +

+Get the netmask. +

+

Parameters:
+ + +
addr A pointer to a uip_ipaddr_t variable that will be filled in with the value of the netmask.
+
+ +

+Definition at line 171 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_setdraddr addr   ) 
+
+ + + + + +
+   + + +

+Set the default router's IP address. +

+

Parameters:
+ + +
addr A pointer to a uip_ipaddr_t variable containing the IP address of the default router.
+
+
See also:
uip_ipaddr()
+ +

+Definition at line 138 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_setethaddr eaddr   ) 
+
+ + + + + +
+   + + +

+Specifiy the Ethernet MAC address. +

+The ARP code needs to know the MAC address of the Ethernet card in order to be able to respond to ARP queries and to generate working Ethernet headers.

+

Note:
This macro only specifies the Ethernet MAC address to the ARP code. It cannot be used to change the MAC address of the Ethernet card.
+
Parameters:
+ + +
eaddr A pointer to a struct uip_eth_addr containing the Ethernet MAC address of the Ethernet card.
+
+ +

+Definition at line 134 of file uip_arp.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_sethostaddr addr   ) 
+
+ + + + + +
+   + + +

+Set the IP address of this host. +

+The IP address is represented as a 4-byte array where the first octet of the IP address is put in the first member of the 4-byte array.

+Example:

 uip_ipaddr_t addr;
+
+ uip_ipaddr(&addr, 192,168,1,2);
+ uip_sethostaddr(&addr);
+
Parameters:
+ + +
addr A pointer to an IP address of type uip_ipaddr_t;
+
+
See also:
uip_ipaddr()
+
Examples:
+dhcpc.c, example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 106 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_setnetmask addr   ) 
+
+ + + + + +
+   + + +

+Set the netmask. +

+

Parameters:
+ + +
addr A pointer to a uip_ipaddr_t variable containing the IP address of the netmask.
+
+
See also:
uip_ipaddr()
+ +

+Definition at line 150 of file uip.h.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00145.html b/components/net/uip/doc/html/a00145.html new file mode 100644 index 0000000000000000000000000000000000000000..d087f911b8174af749bece3340ae01c3a512d879 --- /dev/null +++ b/components/net/uip/doc/html/a00145.html @@ -0,0 +1,106 @@ + + +uIP 1.0: uIP initialization functions + + + + + +

uIP initialization functions
+ +[The uIP TCP/IP stack] +


Detailed Description

+The uIP initialization functions are used for booting uIP. +

+ +

+ + + + + + + + + +

Functions

void uip_init (void)
 uIP initialization function.
void uip_setipid (u16_t id)
 uIP initialization function.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void uip_init void   ) 
+
+ + + + + +
+   + + +

+uIP initialization function. +

+This function should be called at boot up to initilize the uIP TCP/IP stack.

Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 379 of file uip.c. +

+References UIP_LISTENPORTS.

+

+ + + + +
+ + + + + + + + + +
void uip_setipid u16_t  id  ) 
+
+ + + + + +
+   + + +

+uIP initialization function. +

+This function may be used at boot time to set the initial ip_id. +

+Definition at line 181 of file uip.c.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00146.html b/components/net/uip/doc/html/a00146.html new file mode 100644 index 0000000000000000000000000000000000000000..33a3b5dd8403f140cff5224dad9f322e0c5f597f --- /dev/null +++ b/components/net/uip/doc/html/a00146.html @@ -0,0 +1,383 @@ + + +uIP 1.0: uIP device driver functions + + + + + +

uIP device driver functions
+ +[The uIP TCP/IP stack] +


Detailed Description

+These functions are used by a network device driver for interacting with uIP. +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

#define uip_input()
 Process an incoming packet.
#define uip_periodic(conn)
 Periodic processing for a connection identified by its number.
+#define uip_conn_active(conn)   (uip_conns[conn].tcpstateflags != UIP_CLOSED)
#define uip_periodic_conn(conn)
 Perform periodic processing for a connection identified by a pointer to its structure.
#define uip_poll_conn(conn)
 Reuqest that a particular connection should be polled.
#define uip_udp_periodic(conn)
 Periodic processing for a UDP connection identified by its number.
#define uip_udp_periodic_conn(conn)
 Periodic processing for a UDP connection identified by a pointer to its structure.

Variables

u8_t uip_buf [UIP_BUFSIZE+2]
 The uIP packet buffer.
+


Define Documentation

+

+ + + + +
+ + + + +  + + + + +
#define uip_input  ) 
+
+ + + + + +
+   + + +

+Process an incoming packet. +

+This function should be called when the device driver has received a packet from the network. The packet from the device driver must be present in the uip_buf buffer, and the length of the packet should be placed in the uip_len variable.

+When the function returns, there may be an outbound packet placed in the uip_buf packet buffer. If so, the uip_len variable is set to the length of the packet. If no packet is to be sent out, the uip_len variable is set to 0.

+The usual way of calling the function is presented by the source code below.

  uip_len = devicedriver_poll();
+  if(uip_len > 0) {
+    uip_input();
+    if(uip_len > 0) {
+      devicedriver_send();
+    }
+  }
+

+

Note:
If you are writing a uIP device driver that needs ARP (Address Resolution Protocol), e.g., when running uIP over Ethernet, you will need to call the uIP ARP code before calling this function:
  #define BUF ((struct uip_eth_hdr *)&uip_buf[0])
+  uip_len = ethernet_devicedrver_poll();
+  if(uip_len > 0) {
+    if(BUF->type == HTONS(UIP_ETHTYPE_IP)) {
+      uip_arp_ipin();
+      uip_input();
+      if(uip_len > 0) {
+        uip_arp_out();
+        ethernet_devicedriver_send();
+      }
+    } else if(BUF->type == HTONS(UIP_ETHTYPE_ARP)) {
+      uip_arp_arpin();
+      if(uip_len > 0) {
+        ethernet_devicedriver_send();
+      }
+    }
+
+
Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 257 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_periodic conn   ) 
+
+ + + + + +
+   + + +

+Periodic processing for a connection identified by its number. +

+This function does the necessary periodic processing (timers, polling) for a uIP TCP conneciton, and should be called when the periodic uIP timer goes off. It should be called for every connection, regardless of whether they are open of closed.

+When the function returns, it may have an outbound packet waiting for service in the uIP packet buffer, and if so the uip_len variable is set to a value larger than zero. The device driver should be called to send out the packet.

+The ususal way of calling the function is through a for() loop like this:

  for(i = 0; i < UIP_CONNS; ++i) {
+    uip_periodic(i);
+    if(uip_len > 0) {
+      devicedriver_send();
+    }
+  }
+

+

Note:
If you are writing a uIP device driver that needs ARP (Address Resolution Protocol), e.g., when running uIP over Ethernet, you will need to call the uip_arp_out() function before calling the device driver:
  for(i = 0; i < UIP_CONNS; ++i) {
+    uip_periodic(i);
+    if(uip_len > 0) {
+      uip_arp_out();
+      ethernet_devicedriver_send();
+    }
+  }
+
+
Parameters:
+ + +
conn The number of the connection which is to be periodically polled.
+
+
Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 301 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_periodic_conn conn   ) 
+
+ + + + + +
+   + + +

+Perform periodic processing for a connection identified by a pointer to its structure. +

+Same as uip_periodic() but takes a pointer to the actual uip_conn struct instead of an integer as its argument. This function can be used to force periodic processing of a specific connection.

+

Parameters:
+ + +
conn A pointer to the uip_conn struct for the connection to be processed.
+
+ +

+Definition at line 323 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_poll_conn conn   ) 
+
+ + + + + +
+   + + +

+Reuqest that a particular connection should be polled. +

+Similar to uip_periodic_conn() but does not perform any timer processing. The application is polled for new data.

+

Parameters:
+ + +
conn A pointer to the uip_conn struct for the connection to be processed.
+
+ +

+Definition at line 337 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_udp_periodic conn   ) 
+
+ + + + + +
+   + + +

+Periodic processing for a UDP connection identified by its number. +

+This function is essentially the same as uip_periodic(), but for UDP connections. It is called in a similar fashion as the uip_periodic() function:

  for(i = 0; i < UIP_UDP_CONNS; i++) {
+    uip_udp_periodic(i);
+    if(uip_len > 0) {
+      devicedriver_send();
+    }
+  }
+

+

Note:
As for the uip_periodic() function, special care has to be taken when using uIP together with ARP and Ethernet:
  for(i = 0; i < UIP_UDP_CONNS; i++) {
+    uip_udp_periodic(i);
+    if(uip_len > 0) {
+      uip_arp_out();
+      ethernet_devicedriver_send();
+    }
+  }
+
+
Parameters:
+ + +
conn The number of the UDP connection to be processed.
+
+
Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 373 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_udp_periodic_conn conn   ) 
+
+ + + + + +
+   + + +

+Periodic processing for a UDP connection identified by a pointer to its structure. +

+Same as uip_udp_periodic() but takes a pointer to the actual uip_conn struct instead of an integer as its argument. This function can be used to force periodic processing of a specific connection.

+

Parameters:
+ + +
conn A pointer to the uip_udp_conn struct for the connection to be processed.
+
+ +

+Definition at line 390 of file uip.h.

+


Variable Documentation

+

+ + + + +
+ + + + +
u8_t uip_buf[UIP_BUFSIZE+2]
+
+ + + + + +
+   + + +

+The uIP packet buffer. +

+The uip_buf array is used to hold incoming and outgoing packets. The device driver should place incoming data into this buffer. When sending data, the device driver should read the link level headers and the TCP/IP headers from this buffer. The size of the link level headers is configured by the UIP_LLH_LEN define.

+

Note:
The application data need not be placed in this buffer, so the device driver must read it from the place pointed to by the uip_appdata pointer as illustrated by the following example:
 void
+ devicedriver_send(void)
+ {
+    hwsend(&uip_buf[0], UIP_LLH_LEN);
+    if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) {
+      hwsend(&uip_buf[UIP_LLH_LEN], uip_len - UIP_LLH_LEN);
+    } else {
+      hwsend(&uip_buf[UIP_LLH_LEN], UIP_TCPIP_HLEN);
+      hwsend(uip_appdata, uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN);
+    }
+ }
+
+ +

+Definition at line 139 of file uip.c. +

+Referenced by uip_process().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00147.html b/components/net/uip/doc/html/a00147.html new file mode 100644 index 0000000000000000000000000000000000000000..8e7f247bb2569c3e99718a93f4cc464551bc74d7 --- /dev/null +++ b/components/net/uip/doc/html/a00147.html @@ -0,0 +1,1046 @@ + + +uIP 1.0: uIP application functions + + + + + +

uIP application functions
+ +[The uIP TCP/IP stack] +


Detailed Description

+Functions used by an application running of top of uIP. +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define uip_outstanding(conn)   ((conn)->len)
#define uip_datalen()
 The length of any incoming data that is currently avaliable (if avaliable) in the uip_appdata buffer.
#define uip_urgdatalen()
 The length of any out-of-band data (urgent data) that has arrived on the connection.
#define uip_close()
 Close the current connection.
#define uip_abort()
 Abort the current connection.
#define uip_stop()
 Tell the sending host to stop sending data.
+#define uip_stopped(conn)
 Find out if the current connection has been previously stopped with uip_stop().
#define uip_restart()
 Restart the current connection, if is has previously been stopped with uip_stop().
#define uip_udpconnection()
 Is the current connection a UDP connection?
#define uip_newdata()
 Is new incoming data available?
#define uip_acked()
 Has previously sent data been acknowledged?
#define uip_connected()
 Has the connection just been connected?
#define uip_closed()
 Has the connection been closed by the other end?
#define uip_aborted()
 Has the connection been aborted by the other end?
#define uip_timedout()
 Has the connection timed out?
#define uip_rexmit()
 Do we need to retransmit previously data?
#define uip_poll()
 Is the connection being polled by uIP?
+#define uip_initialmss()
 Get the initial maxium segment size (MSS) of the current connection.
#define uip_mss()
 Get the current maxium segment size that can be sent on the current connection.
#define uip_udp_remove(conn)
 Removed a UDP connection.
#define uip_udp_bind(conn, port)
 Bind a UDP connection to a local port.
#define uip_udp_send(len)
 Send a UDP datagram of length len on the current connection.

Functions

void uip_listen (u16_t port)
 Start listening to the specified port.
void uip_unlisten (u16_t port)
 Stop listening to the specified port.
uip_connuip_connect (uip_ipaddr_t *ripaddr, u16_t port)
 Connect to a remote host using TCP.
void uip_send (const void *data, int len)
 Send data on the current connection.
uip_udp_connuip_udp_new (uip_ipaddr_t *ripaddr, u16_t rport)
 Set up a new UDP connection.
+


Define Documentation

+

+ + + + +
+ + + + +  + + + + +
#define uip_abort  ) 
+
+ + + + + +
+   + + +

+Abort the current connection. +

+This function will abort (reset) the current connection, and is usually used when an error has occured that prevents using the uip_close() function.

Examples:
+webclient.c.
+

+Definition at line 581 of file uip.h. +

+Referenced by httpd_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_aborted  ) 
+
+ + + + + +
+   + + +

+Has the connection been aborted by the other end? +

+Non-zero if the current connection has been aborted (reset) by the remote host.

Examples:
+smtp.c, telnetd.c, and webclient.c.
+

+Definition at line 680 of file uip.h. +

+Referenced by httpd_appcall(), smtp_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_acked  ) 
+
+ + + + + +
+   + + +

+Has previously sent data been acknowledged? +

+Will reduce to non-zero if the previously sent data has been acknowledged by the remote host. This means that the application can send new data.

Examples:
+telnetd.c, and webclient.c.
+

+Definition at line 648 of file uip.h. +

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_close  ) 
+
+ + + + + +
+   + + +

+Close the current connection. +

+This function will close the current connection in a nice way.

Examples:
+telnetd.c.
+

+Definition at line 570 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_closed  ) 
+
+ + + + + +
+   + + +

+Has the connection been closed by the other end? +

+Is non-zero if the connection has been closed by the remote host. The application may then do the necessary clean-ups.

Examples:
+smtp.c, telnetd.c, and webclient.c.
+

+Definition at line 670 of file uip.h. +

+Referenced by httpd_appcall(), smtp_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_connected  ) 
+
+ + + + + +
+   + + +

+Has the connection just been connected? +

+Reduces to non-zero if the current connection has been connected to a remote host. This will happen both if the connection has been actively opened (with uip_connect()) or passively opened (with uip_listen()).

Examples:
+hello-world.c, telnetd.c, and webclient.c.
+

+Definition at line 660 of file uip.h. +

+Referenced by hello_world_appcall(), httpd_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_datalen  ) 
+
+ + + + + +
+   + + +

+The length of any incoming data that is currently avaliable (if avaliable) in the uip_appdata buffer. +

+The test function uip_data() must first be used to check if there is any data available at all.

Examples:
+dhcpc.c, telnetd.c, and webclient.c.
+

+Definition at line 550 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_mss  ) 
+
+ + + + + +
+   + + +

+Get the current maxium segment size that can be sent on the current connection. +

+The current maxiumum segment size that can be sent on the connection is computed from the receiver's window and the MSS of the connection (which also is available by calling uip_initialmss()).

Examples:
+telnetd.c, and webclient.c.
+

+Definition at line 737 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_newdata  ) 
+
+ + + + + +
+   + + +

+Is new incoming data available? +

+Will reduce to non-zero if there is new data for the application present at the uip_appdata pointer. The size of the data is avaliable through the uip_len variable.

Examples:
+dhcpc.c, resolv.c, telnetd.c, and webclient.c.
+

+Definition at line 637 of file uip.h. +

+Referenced by psock_newdata(), resolv_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_poll  ) 
+
+ + + + + +
+   + + +

+Is the connection being polled by uIP? +

+Is non-zero if the reason the application is invoked is that the current connection has been idle for a while and should be polled.

+The polling event can be used for sending data without having to wait for the remote host to send data.

Examples:
+resolv.c, telnetd.c, and webclient.c.
+

+Definition at line 716 of file uip.h. +

+Referenced by httpd_appcall(), resolv_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_restart  ) 
+
+ + + + + +
+   + + +

+Restart the current connection, if is has previously been stopped with uip_stop(). +

+This function will open the receiver's window again so that we start receiving data for the current connection. +

+Definition at line 610 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_rexmit  ) 
+
+ + + + + +
+   + + +

+Do we need to retransmit previously data? +

+Reduces to non-zero if the previously sent data has been lost in the network, and the application should retransmit it. The application should send the exact same data as it did the last time, using the uip_send() function.

Examples:
+telnetd.c, and webclient.c.
+

+Definition at line 702 of file uip.h. +

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_stop  ) 
+
+ + + + + +
+   + + +

+Tell the sending host to stop sending data. +

+This function will close our receiver's window so that we stop receiving data for the current connection. +

+Definition at line 591 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_timedout  ) 
+
+ + + + + +
+   + + +

+Has the connection timed out? +

+Non-zero if the current connection has been aborted due to too many retransmissions.

Examples:
+smtp.c, telnetd.c, and webclient.c.
+

+Definition at line 690 of file uip.h. +

+Referenced by httpd_appcall(), smtp_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + + + + + + + + + +
#define uip_udp_bind conn,
port   ) 
+
+ + + + + +
+   + + +

+Bind a UDP connection to a local port. +

+

Parameters:
+ + + +
conn A pointer to the uip_udp_conn structure for the connection.
port The local port number, in network byte order.
+
+
Examples:
+dhcpc.c.
+

+Definition at line 787 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_udp_remove conn   ) 
+
+ + + + + +
+   + + +

+Removed a UDP connection. +

+

Parameters:
+ + +
conn A pointer to the uip_udp_conn structure for the connection.
+
+
Examples:
+resolv.c.
+

+Definition at line 775 of file uip.h. +

+Referenced by resolv_conf().

+

+ + + + +
+ + + + + + + + + +
#define uip_udp_send len   ) 
+
+ + + + + +
+   + + +

+Send a UDP datagram of length len on the current connection. +

+This function can only be called in response to a UDP event (poll or newdata). The data must be present in the uip_buf buffer, at the place pointed to by the uip_appdata pointer.

+

Parameters:
+ + +
len The length of the data in the uip_buf buffer.
+
+
Examples:
+resolv.c.
+

+Definition at line 800 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_udpconnection  ) 
+
+ + + + + +
+   + + +

+Is the current connection a UDP connection? +

+This function checks whether the current connection is a UDP connection. +

+Definition at line 626 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_urgdatalen  ) 
+
+ + + + + +
+   + + +

+The length of any out-of-band data (urgent data) that has arrived on the connection. +

+

Note:
The configuration parameter UIP_URGDATA must be set for this function to be enabled.
+ +

+Definition at line 561 of file uip.h.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
struct uip_conn* uip_connect uip_ipaddr_t ripaddr,
u16_t  port
+
+ + + + + +
+   + + +

+Connect to a remote host using TCP. +

+This function is used to start a new connection to the specified port on the specied host. It allocates a new connection identifier, sets the connection to the SYN_SENT state and sets the retransmission timer to 0. This will cause a TCP SYN segment to be sent out the next time this connection is periodically processed, which usually is done within 0.5 seconds after the call to uip_connect().

+

Note:
This function is avaliable only if support for active open has been configured by defining UIP_ACTIVE_OPEN to 1 in uipopt.h.

+Since this function requires the port number to be in network byte order, a conversion using HTONS() or htons() is necessary.

+
 uip_ipaddr_t ipaddr;
+
+ uip_ipaddr(&ipaddr, 192,168,1,2);
+ uip_connect(&ipaddr, HTONS(80));
+

+

Parameters:
+ + + +
ripaddr The IP address of the remote hot.
port A 16-bit port number in network byte order.
+
+
Returns:
A pointer to the uIP connection identifier for the new connection, or NULL if no connection could be allocated.
+
Examples:
+smtp.c, and webclient.c.
+

+Definition at line 407 of file uip.c. +

+References htons(), uip_conn::lport, uip_conn::tcpstateflags, UIP_CLOSED, uip_conn, UIP_CONNS, and uip_conns. +

+Referenced by smtp_send(), and webclient_get().

+

+ + + + +
+ + + + + + + + + +
void uip_listen u16_t  port  ) 
+
+ + + + + +
+   + + +

+Start listening to the specified port. +

+

Note:
Since this function expects the port number in network byte order, a conversion using HTONS() or htons() is necessary.
+
 uip_listen(HTONS(80));
+

+

Parameters:
+ + +
port A 16-bit port number in network byte order.
+
+
Examples:
+hello-world.c, and telnetd.c.
+

+Definition at line 529 of file uip.c. +

+References UIP_LISTENPORTS. +

+Referenced by hello_world_init(), and httpd_init().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void uip_send const void *  data,
int  len
+
+ + + + + +
+   + + +

+Send data on the current connection. +

+This function is used to send out a single segment of TCP data. Only applications that have been invoked by uIP for event processing can send data.

+The amount of data that actually is sent out after a call to this funcion is determined by the maximum amount of data TCP allows. uIP will automatically crop the data so that only the appropriate amount of data is sent. The function uip_mss() can be used to query uIP for the amount of data that actually will be sent.

+

Note:
This function does not guarantee that the sent data will arrive at the destination. If the data is lost in the network, the application will be invoked with the uip_rexmit() event being set. The application will then have to resend the data using this function.
+
Parameters:
+ + + +
data A pointer to the data which is to be sent.
len The maximum amount of data bytes to be sent.
+
+
Examples:
+dhcpc.c, telnetd.c, and webclient.c.
+

+Definition at line 1888 of file uip.c. +

+References uip_sappdata, and uip_slen.

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
struct uip_udp_conn* uip_udp_new uip_ipaddr_t ripaddr,
u16_t  rport
+
+ + + + + +
+   + + +

+Set up a new UDP connection. +

+This function sets up a new UDP connection. The function will automatically allocate an unused local port for the new connection. However, another port can be chosen by using the uip_udp_bind() call, after the uip_udp_new() function has been called.

+Example:

 uip_ipaddr_t addr;
+ struct uip_udp_conn *c;
+ 
+ uip_ipaddr(&addr, 192,168,2,1);
+ c = uip_udp_new(&addr, HTONS(12345));
+ if(c != NULL) {
+   uip_udp_bind(c, HTONS(12344));
+ }
+
Parameters:
+ + + +
ripaddr The IP address of the remote host.
rport The remote port number in network byte order.
+
+
Returns:
The uip_udp_conn structure for the new connection or NULL if no connection could be allocated.
+
Examples:
+dhcpc.c, and resolv.c.
+

+Definition at line 473 of file uip.c. +

+References htons(), uip_udp_conn::lport, uip_udp_conn, UIP_UDP_CONNS, and uip_udp_conns. +

+Referenced by resolv_conf().

+

+ + + + +
+ + + + + + + + + +
void uip_unlisten u16_t  port  ) 
+
+ + + + + +
+   + + +

+Stop listening to the specified port. +

+

Note:
Since this function expects the port number in network byte order, a conversion using HTONS() or htons() is necessary.
+

+

Parameters:
+ + +
port A 16-bit port number in network byte order.
+
+ +

+Definition at line 518 of file uip.c. +

+References UIP_LISTENPORTS.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00148.html b/components/net/uip/doc/html/a00148.html new file mode 100644 index 0000000000000000000000000000000000000000..16158a41afb44902746e516d63bf8901e3148493 --- /dev/null +++ b/components/net/uip/doc/html/a00148.html @@ -0,0 +1,634 @@ + + +uIP 1.0: uIP conversion functions + + + + + +

uIP conversion functions
+ +[The uIP TCP/IP stack] +


Detailed Description

+These functions can be used for converting between different data formats used by uIP. +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

#define uip_ipaddr(addr, addr0, addr1, addr2, addr3)
 Construct an IP address from four bytes.
#define uip_ip6addr(addr, addr0, addr1, addr2, addr3, addr4, addr5, addr6, addr7)
 Construct an IPv6 address from eight 16-bit words.
#define uip_ipaddr_copy(dest, src)
 Copy an IP address to another IP address.
#define uip_ipaddr_cmp(addr1, addr2)
 Compare two IP addresses.
#define uip_ipaddr_maskcmp(addr1, addr2, mask)
 Compare two IP addresses with netmasks.
#define uip_ipaddr_mask(dest, src, mask)
 Mask out the network part of an IP address.
#define uip_ipaddr1(addr)
 Pick the first octet of an IP address.
#define uip_ipaddr2(addr)
 Pick the second octet of an IP address.
#define uip_ipaddr3(addr)
 Pick the third octet of an IP address.
#define uip_ipaddr4(addr)
 Pick the fourth octet of an IP address.
#define HTONS(n)
 Convert 16-bit quantity from host byte order to network byte order.
+#define ntohs   htons

Functions

u16_t htons (u16_t val)
 Convert 16-bit quantity from host byte order to network byte order.
+


Define Documentation

+

+ + + + +
+ + + + + + + + + +
#define HTONS  ) 
+
+ + + + + +
+   + + +

+Convert 16-bit quantity from host byte order to network byte order. +

+This macro is primarily used for converting constants from host byte order to network byte order. For converting variables to network byte order, use the htons() function instead.

Examples:
+dhcpc.c, hello-world.c, resolv.c, smtp.c, and telnetd.c.
+

+Definition at line 1070 of file uip.h. +

+Referenced by hello_world_init(), htons(), httpd_init(), resolv_appcall(), resolv_conf(), smtp_send(), uip_arp_arpin(), and uip_process().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#define uip_ip6addr addr,
addr0,
addr1,
addr2,
addr3,
addr4,
addr5,
addr6,
addr7   ) 
+
+ + + + + +
+   + + +

+Construct an IPv6 address from eight 16-bit words. +

+This function constructs an IPv6 address. +

+Definition at line 852 of file uip.h.

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + +
#define uip_ipaddr addr,
addr0,
addr1,
addr2,
addr3   ) 
+
+ + + + + +
+   + + +

+Construct an IP address from four bytes. +

+This function constructs an IP address of the type that uIP handles internally from four bytes. The function is handy for specifying IP addresses to use with e.g. the uip_connect() function.

+Example:

 uip_ipaddr_t ipaddr;
+ struct uip_conn *c;
+ 
+ uip_ipaddr(&ipaddr, 192,168,1,2);
+ c = uip_connect(&ipaddr, HTONS(80));
+

+

Parameters:
+ + + + + + +
addr A pointer to a uip_ipaddr_t variable that will be filled in with the IP address.
addr0 The first octet of the IP address.
addr1 The second octet of the IP address.
addr2 The third octet of the IP address.
addr3 The forth octet of the IP address.
+
+
Examples:
+dhcpc.c, example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 840 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_ipaddr1 addr   ) 
+
+ + + + + +
+   + + +

+Pick the first octet of an IP address. +

+Picks out the first octet of an IP address.

+Example:

 uip_ipaddr_t ipaddr;
+ u8_t octet;
+
+ uip_ipaddr(&ipaddr, 1,2,3,4);
+ octet = uip_ipaddr1(&ipaddr);
+

+In the example above, the variable "octet" will contain the value 1.

Examples:
+dhcpc.c.
+

+Definition at line 995 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_ipaddr2 addr   ) 
+
+ + + + + +
+   + + +

+Pick the second octet of an IP address. +

+Picks out the second octet of an IP address.

+Example:

 uip_ipaddr_t ipaddr;
+ u8_t octet;
+
+ uip_ipaddr(&ipaddr, 1,2,3,4);
+ octet = uip_ipaddr2(&ipaddr);
+

+In the example above, the variable "octet" will contain the value 2.

Examples:
+dhcpc.c.
+

+Definition at line 1015 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_ipaddr3 addr   ) 
+
+ + + + + +
+   + + +

+Pick the third octet of an IP address. +

+Picks out the third octet of an IP address.

+Example:

 uip_ipaddr_t ipaddr;
+ u8_t octet;
+
+ uip_ipaddr(&ipaddr, 1,2,3,4);
+ octet = uip_ipaddr3(&ipaddr);
+

+In the example above, the variable "octet" will contain the value 3.

Examples:
+dhcpc.c.
+

+Definition at line 1035 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_ipaddr4 addr   ) 
+
+ + + + + +
+   + + +

+Pick the fourth octet of an IP address. +

+Picks out the fourth octet of an IP address.

+Example:

 uip_ipaddr_t ipaddr;
+ u8_t octet;
+
+ uip_ipaddr(&ipaddr, 1,2,3,4);
+ octet = uip_ipaddr4(&ipaddr);
+

+In the example above, the variable "octet" will contain the value 4.

Examples:
+dhcpc.c.
+

+Definition at line 1055 of file uip.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define uip_ipaddr_cmp addr1,
addr2   ) 
+
+ + + + + +
+   + + +

+Compare two IP addresses. +

+Compares two IP addresses.

+Example:

 uip_ipaddr_t ipaddr1, ipaddr2;
+
+ uip_ipaddr(&ipaddr1, 192,16,1,2);
+ if(uip_ipaddr_cmp(&ipaddr2, &ipaddr1)) {
+    printf("They are the same");
+ }
+

+

Parameters:
+ + + +
addr1 The first IP address.
addr2 The second IP address.
+
+ +

+Definition at line 911 of file uip.h. +

+Referenced by uip_arp_arpin(), uip_arp_out(), and uip_process().

+

+ + + + +
+ + + + + + + + + + + + +
#define uip_ipaddr_copy dest,
src   ) 
+
+ + + + + +
+   + + +

+Copy an IP address to another IP address. +

+Copies an IP address from one place to another.

+Example:

 uip_ipaddr_t ipaddr1, ipaddr2;
+
+ uip_ipaddr(&ipaddr1, 192,16,1,2);
+ uip_ipaddr_copy(&ipaddr2, &ipaddr1);
+

+

Parameters:
+ + + +
dest The destination for the copy.
src The source from where to copy.
+
+
Examples:
+smtp.c.
+

+Definition at line 882 of file uip.h. +

+Referenced by smtp_configure(), uip_arp_out(), and uip_process().

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define uip_ipaddr_mask dest,
src,
mask   ) 
+
+ + + + + +
+   + + +

+Mask out the network part of an IP address. +

+Masks out the network part of an IP address, given the address and the netmask.

+Example:

 uip_ipaddr_t ipaddr1, ipaddr2, netmask;
+
+ uip_ipaddr(&ipaddr1, 192,16,1,2);
+ uip_ipaddr(&netmask, 255,255,255,0);
+ uip_ipaddr_mask(&ipaddr2, &ipaddr1, &netmask);
+

+In the example above, the variable "ipaddr2" will contain the IP address 192.168.1.0.

+

Parameters:
+ + + + +
dest Where the result is to be placed.
src The IP address.
mask The netmask.
+
+ +

+Definition at line 972 of file uip.h.

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define uip_ipaddr_maskcmp addr1,
addr2,
mask   ) 
+
+ + + + + +
+   + + +

+Compare two IP addresses with netmasks. +

+Compares two IP addresses with netmasks. The masks are used to mask out the bits that are to be compared.

+Example:

 uip_ipaddr_t ipaddr1, ipaddr2, mask;
+
+ uip_ipaddr(&mask, 255,255,255,0);
+ uip_ipaddr(&ipaddr1, 192,16,1,2);
+ uip_ipaddr(&ipaddr2, 192,16,1,3);
+ if(uip_ipaddr_maskcmp(&ipaddr1, &ipaddr2, &mask)) {
+    printf("They are the same");
+ }
+

+

Parameters:
+ + + + +
addr1 The first IP address.
addr2 The second IP address.
mask The netmask.
+
+ +

+Definition at line 941 of file uip.h. +

+Referenced by uip_arp_out().

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
u16_t htons u16_t  val  ) 
+
+ + + + + +
+   + + +

+Convert 16-bit quantity from host byte order to network byte order. +

+This function is primarily used for converting variables from host byte order to network byte order. For converting constants to network byte order, use the HTONS() macro instead.

Examples:
+example-mainloop-with-arp.c, resolv.c, and webclient.c.
+

+Definition at line 1882 of file uip.c. +

+References HTONS. +

+Referenced by uip_chksum(), uip_connect(), uip_ipchksum(), uip_udp_new(), and webclient_get().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00149.html b/components/net/uip/doc/html/a00149.html new file mode 100644 index 0000000000000000000000000000000000000000..ad39b08344e0b94315eae7bc21236c82d2da47e1 --- /dev/null +++ b/components/net/uip/doc/html/a00149.html @@ -0,0 +1,68 @@ + + +uIP 1.0: Variables used in uIP device drivers + + + + + +

Variables used in uIP device drivers
+ +[The uIP TCP/IP stack] +


Detailed Description

+uIP has a few global variables that are used in device drivers for uIP. +

+ +

+ + + + + + +

Variables

u16_t uip_len
 The length of the packet in the uip_buf buffer.
+


Variable Documentation

+

+ + + + +
+ + + + +
u16_t uip_len
+
+ + + + + +
+   + + +

+The length of the packet in the uip_buf buffer. +

+The global variable uip_len holds the length of the packet in the uip_buf buffer.

+When the network device driver calls the uIP input function, uip_len should be set to the length of the packet in the uip_buf buffer.

+When sending packets, the device driver should use the contents of the uip_len variable to determine the length of the outgoing packet.

Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 155 of file uip.c. +

+Referenced by uip_arp_arpin(), uip_process(), and uip_split_output().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00150.html b/components/net/uip/doc/html/a00150.html new file mode 100644 index 0000000000000000000000000000000000000000..56806e01f6811027680292784b3cf99d113216da --- /dev/null +++ b/components/net/uip/doc/html/a00150.html @@ -0,0 +1,1248 @@ + + +uIP 1.0: The uIP TCP/IP stack + + + + + +

The uIP TCP/IP stack


Detailed Description

+uIP is an implementation of the TCP/IP protocol stack intended for small 8-bit and 16-bit microcontrollers. +

+uIP provides the necessary protocols for Internet communication, with a very small code footprint and RAM requirements - the uIP code size is on the order of a few kilobytes and RAM usage is on the order of a few hundred bytes. +

+ + + + + + + +

+

+ + + +

+

+ + + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  uip.h
 Header file for the uIP TCP/IP stack.
file  uip.c
 The uIP TCP/IP stack code.

Modules

 uIP configuration functions
 The uIP configuration functions are used for setting run-time parameters in uIP such as IP addresses.
 uIP initialization functions
 The uIP initialization functions are used for booting uIP.
 uIP device driver functions
 These functions are used by a network device driver for interacting with uIP.
 uIP application functions
 Functions used by an application running of top of uIP.
 uIP conversion functions
 These functions can be used for converting between different data formats used by uIP.
 Variables used in uIP device drivers
 uIP has a few global variables that are used in device drivers for uIP.
 uIP Address Resolution Protocol
 The Address Resolution Protocol ARP is used for mapping between IP addresses and link level addresses such as the Ethernet MAC addresses.
 uIP TCP throughput booster hack
 The basic uIP TCP implementation only allows each TCP connection to have a single TCP segment in flight at any given time.
 Architecture specific uIP functions
 The functions in the architecture specific module implement the IP check sum and 32-bit additions.

Data Structures

struct  uip_conn
 Representation of a uIP TCP connection. More...
struct  uip_udp_conn
 Representation of a uIP UDP connection. More...
struct  uip_stats
 The structure holding the TCP/IP statistics that are gathered if UIP_STATISTICS is set to 1. More...
struct  uip_tcpip_hdr
struct  uip_icmpip_hdr
struct  uip_udpip_hdr
struct  uip_eth_addr
 Representation of a 48-bit Ethernet address. More...

Defines

+#define UIP_ACKDATA   1
+#define UIP_NEWDATA   2
+#define UIP_REXMIT   4
+#define UIP_POLL   8
+#define UIP_CLOSE   16
+#define UIP_ABORT   32
+#define UIP_CONNECTED   64
+#define UIP_TIMEDOUT   128
+#define UIP_DATA   1
+#define UIP_TIMER   2
+#define UIP_POLL_REQUEST   3
+#define UIP_UDP_SEND_CONN   4
+#define UIP_UDP_TIMER   5
+#define UIP_CLOSED   0
+#define UIP_SYN_RCVD   1
+#define UIP_SYN_SENT   2
+#define UIP_ESTABLISHED   3
+#define UIP_FIN_WAIT_1   4
+#define UIP_FIN_WAIT_2   5
+#define UIP_CLOSING   6
+#define UIP_TIME_WAIT   7
+#define UIP_LAST_ACK   8
+#define UIP_TS_MASK   15
+#define UIP_STOPPED   16
#define UIP_APPDATA_SIZE
 The buffer size available for user data in the uip_buf buffer.
+#define UIP_PROTO_ICMP   1
+#define UIP_PROTO_TCP   6
+#define UIP_PROTO_UDP   17
+#define UIP_PROTO_ICMP6   58
+#define UIP_IPH_LEN   20
+#define UIP_UDPH_LEN   8
+#define UIP_TCPH_LEN   20
+#define UIP_IPUDPH_LEN   (UIP_UDPH_LEN + UIP_IPH_LEN)
+#define UIP_IPTCPH_LEN   (UIP_TCPH_LEN + UIP_IPH_LEN)
+#define UIP_TCPIP_HLEN   UIP_IPTCPH_LEN
+#define TCP_FIN   0x01
+#define TCP_SYN   0x02
+#define TCP_RST   0x04
+#define TCP_PSH   0x08
+#define TCP_ACK   0x10
+#define TCP_URG   0x20
+#define TCP_CTL   0x3f
+#define TCP_OPT_END   0
+#define TCP_OPT_NOOP   1
+#define TCP_OPT_MSS   2
+#define TCP_OPT_MSS_LEN   4
+#define ICMP_ECHO_REPLY   0
+#define ICMP_ECHO   8
+#define ICMP6_ECHO_REPLY   129
+#define ICMP6_ECHO   128
+#define ICMP6_NEIGHBOR_SOLICITATION   135
+#define ICMP6_NEIGHBOR_ADVERTISEMENT   136
+#define ICMP6_FLAG_S   (1 << 6)
+#define ICMP6_OPTION_SOURCE_LINK_ADDRESS   1
+#define ICMP6_OPTION_TARGET_LINK_ADDRESS   2
+#define BUF   ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
+#define FBUF   ((struct uip_tcpip_hdr *)&uip_reassbuf[0])
+#define ICMPBUF   ((struct uip_icmpip_hdr *)&uip_buf[UIP_LLH_LEN])
+#define UDPBUF   ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN])
+#define UIP_STAT(s)
+#define UIP_LOG(m)

Typedefs

+typedef u16_t uip_ip4addr_t [2]
 Repressentation of an IP address.
+typedef u16_t uip_ip6addr_t [8]
+typedef uip_ip4addr_t uip_ipaddr_t

Functions

+void uip_process (u8_t flag)
u16_t uip_chksum (u16_t *buf, u16_t len)
 Calculate the Internet checksum over a buffer.
u16_t uip_ipchksum (void)
 Calculate the IP header checksum of the packet header in uip_buf.
u16_t uip_tcpchksum (void)
 Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
u16_t uip_udpchksum (void)
 Calculate the UDP checksum of the packet in uip_buf and uip_appdata.
void uip_setipid (u16_t id)
 uIP initialization function.
void uip_add32 (u8_t *op32, u16_t op16)
 Carry out a 32-bit addition.
void uip_init (void)
 uIP initialization function.
uip_connuip_connect (uip_ipaddr_t *ripaddr, u16_t rport)
 Connect to a remote host using TCP.
uip_udp_connuip_udp_new (uip_ipaddr_t *ripaddr, u16_t rport)
 Set up a new UDP connection.
void uip_unlisten (u16_t port)
 Stop listening to the specified port.
void uip_listen (u16_t port)
 Start listening to the specified port.
u16_t htons (u16_t val)
 Convert 16-bit quantity from host byte order to network byte order.
void uip_send (const void *data, int len)
 Send data on the current connection.

Variables

void * uip_appdata
 Pointer to the application data in the packet buffer.
uip_connuip_conn
 Pointer to the current TCP connection.
+uip_conn uip_conns [UIP_CONNS]
+uip_udp_connuip_udp_conn
 The current UDP connection.
+uip_udp_conn uip_udp_conns [UIP_UDP_CONNS]
uip_stats uip_stat
 The uIP TCP/IP statistics.
+u8_t uip_flags
+uip_ipaddr_t uip_hostaddr
+uip_ipaddr_t uip_netmask
+uip_ipaddr_t uip_draddr
+uip_ipaddr_t uip_hostaddr
+uip_ipaddr_t uip_draddr
+uip_ipaddr_t uip_netmask
+uip_eth_addr uip_ethaddr = {{0,0,0,0,0,0}}
u8_t uip_buf [UIP_BUFSIZE+2]
 The uIP packet buffer.
void * uip_appdata
 Pointer to the application data in the packet buffer.
+void * uip_sappdata
u16_t uip_len
 The length of the packet in the uip_buf buffer.
+u16_t uip_slen
+u8_t uip_flags
uip_connuip_conn
 Pointer to the current TCP connection.
+uip_conn uip_conns [UIP_CONNS]
+u16_t uip_listenports [UIP_LISTENPORTS]
+uip_udp_connuip_udp_conn
 The current UDP connection.
+uip_udp_conn uip_udp_conns [UIP_UDP_CONNS]
+u8_t uip_acc32 [4]
 4-byte array used for the 32-bit sequence number calculations.
+


Define Documentation

+

+ + + + +
+ + + + +
#define UIP_APPDATA_SIZE
+
+ + + + + +
+   + + +

+The buffer size available for user data in the uip_buf buffer. +

+This macro holds the available size for user data in the uip_buf buffer. The macro is intended to be used for checking bounds of available user data.

+Example:

 snprintf(uip_appdata, UIP_APPDATA_SIZE, "%u\n", i);
+
+

+Definition at line 1506 of file uip.h.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
u16_t htons u16_t  val  ) 
+
+ + + + + +
+   + + +

+Convert 16-bit quantity from host byte order to network byte order. +

+This function is primarily used for converting variables from host byte order to network byte order. For converting constants to network byte order, use the HTONS() macro instead. +

+Definition at line 1882 of file uip.c. +

+References HTONS. +

+Referenced by uip_chksum(), uip_connect(), uip_ipchksum(), uip_udp_new(), and webclient_get().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void uip_add32 u8_t op32,
u16_t  op16
+
+ + + + + +
+   + + +

+Carry out a 32-bit addition. +

+Because not all architectures for which uIP is intended has native 32-bit arithmetic, uIP uses an external C function for doing the required 32-bit additions in the TCP protocol processing. This function should add the two arguments and place the result in the global variable uip_acc32.

+

Note:
The 32-bit integer pointed to by the op32 parameter and the result in the uip_acc32 variable are in network byte order (big endian).
+
Parameters:
+ + + +
op32 A pointer to a 4-byte array representing a 32-bit integer in network byte order (big endian).
op16 A 16-bit integer in host byte order.
+
+ +

+Definition at line 249 of file uip.c. +

+Referenced by uip_split_output().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
u16_t uip_chksum u16_t buf,
u16_t  len
+
+ + + + + +
+   + + +

+Calculate the Internet checksum over a buffer. +

+The Internet checksum is the one's complement of the one's complement sum of all 16-bit words in the buffer.

+See RFC1071.

+

Parameters:
+ + + +
buf A pointer to the buffer over which the checksum is to be computed.
len The length of the buffer over which the checksum is to be computed.
+
+
Returns:
The Internet checksum of the buffer.
+ +

+Definition at line 311 of file uip.c. +

+References htons().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
struct uip_conn* uip_connect uip_ipaddr_t ripaddr,
u16_t  port
+
+ + + + + +
+   + + +

+Connect to a remote host using TCP. +

+This function is used to start a new connection to the specified port on the specied host. It allocates a new connection identifier, sets the connection to the SYN_SENT state and sets the retransmission timer to 0. This will cause a TCP SYN segment to be sent out the next time this connection is periodically processed, which usually is done within 0.5 seconds after the call to uip_connect().

+

Note:
This function is avaliable only if support for active open has been configured by defining UIP_ACTIVE_OPEN to 1 in uipopt.h.

+Since this function requires the port number to be in network byte order, a conversion using HTONS() or htons() is necessary.

+
 uip_ipaddr_t ipaddr;
+
+ uip_ipaddr(&ipaddr, 192,168,1,2);
+ uip_connect(&ipaddr, HTONS(80));
+

+

Parameters:
+ + + +
ripaddr The IP address of the remote hot.
port A 16-bit port number in network byte order.
+
+
Returns:
A pointer to the uIP connection identifier for the new connection, or NULL if no connection could be allocated.
+ +

+Definition at line 407 of file uip.c. +

+References htons(), uip_conn::lport, uip_conn::tcpstateflags, UIP_CLOSED, uip_conn, uip_conns, and UIP_CONNS. +

+Referenced by smtp_send(), and webclient_get().

+

+ + + + +
+ + + + + + + + + +
void uip_init void   ) 
+
+ + + + + +
+   + + +

+uIP initialization function. +

+This function should be called at boot up to initilize the uIP TCP/IP stack. +

+Definition at line 379 of file uip.c. +

+References UIP_LISTENPORTS.

+

+ + + + +
+ + + + + + + + + +
u16_t uip_ipchksum void   ) 
+
+ + + + + +
+   + + +

+Calculate the IP header checksum of the packet header in uip_buf. +

+The IP header checksum is the Internet checksum of the 20 bytes of the IP header.

+

Returns:
The IP header checksum of the IP header in the uip_buf buffer.
+ +

+Definition at line 318 of file uip.c. +

+References DEBUG_PRINTF, htons(), UIP_IPH_LEN, and UIP_LLH_LEN. +

+Referenced by uip_process(), and uip_split_output().

+

+ + + + +
+ + + + + + + + + +
void uip_listen u16_t  port  ) 
+
+ + + + + +
+   + + +

+Start listening to the specified port. +

+

Note:
Since this function expects the port number in network byte order, a conversion using HTONS() or htons() is necessary.
+
 uip_listen(HTONS(80));
+

+

Parameters:
+ + +
port A 16-bit port number in network byte order.
+
+ +

+Definition at line 529 of file uip.c. +

+References UIP_LISTENPORTS. +

+Referenced by hello_world_init(), and httpd_init().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void uip_send const void *  data,
int  len
+
+ + + + + +
+   + + +

+Send data on the current connection. +

+This function is used to send out a single segment of TCP data. Only applications that have been invoked by uIP for event processing can send data.

+The amount of data that actually is sent out after a call to this funcion is determined by the maximum amount of data TCP allows. uIP will automatically crop the data so that only the appropriate amount of data is sent. The function uip_mss() can be used to query uIP for the amount of data that actually will be sent.

+

Note:
This function does not guarantee that the sent data will arrive at the destination. If the data is lost in the network, the application will be invoked with the uip_rexmit() event being set. The application will then have to resend the data using this function.
+
Parameters:
+ + + +
data A pointer to the data which is to be sent.
len The maximum amount of data bytes to be sent.
+
+ +

+Definition at line 1888 of file uip.c. +

+References uip_sappdata, and uip_slen.

+

+ + + + +
+ + + + + + + + + +
void uip_setipid u16_t  id  ) 
+
+ + + + + +
+   + + +

+uIP initialization function. +

+This function may be used at boot time to set the initial ip_id. +

+Definition at line 181 of file uip.c.

+

+ + + + +
+ + + + + + + + + +
u16_t uip_tcpchksum void   ) 
+
+ + + + + +
+   + + +

+Calculate the TCP checksum of the packet in uip_buf and uip_appdata. +

+The TCP checksum is the Internet checksum of data contents of the TCP segment, and a pseudo-header as defined in RFC793.

+

Returns:
The TCP checksum of the TCP segment in uip_buf and pointed to by uip_appdata.
+ +

+Definition at line 364 of file uip.c. +

+References UIP_PROTO_TCP. +

+Referenced by uip_split_output().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
struct uip_udp_conn* uip_udp_new uip_ipaddr_t ripaddr,
u16_t  rport
+
+ + + + + +
+   + + +

+Set up a new UDP connection. +

+This function sets up a new UDP connection. The function will automatically allocate an unused local port for the new connection. However, another port can be chosen by using the uip_udp_bind() call, after the uip_udp_new() function has been called.

+Example:

 uip_ipaddr_t addr;
+ struct uip_udp_conn *c;
+ 
+ uip_ipaddr(&addr, 192,168,2,1);
+ c = uip_udp_new(&addr, HTONS(12345));
+ if(c != NULL) {
+   uip_udp_bind(c, HTONS(12344));
+ }
+
Parameters:
+ + + +
ripaddr The IP address of the remote host.
rport The remote port number in network byte order.
+
+
Returns:
The uip_udp_conn structure for the new connection or NULL if no connection could be allocated.
+ +

+Definition at line 473 of file uip.c. +

+References htons(), uip_udp_conn::lport, uip_udp_conn, uip_udp_conns, and UIP_UDP_CONNS. +

+Referenced by resolv_conf().

+

+ + + + +
+ + + + + + + + + +
u16_t uip_udpchksum void   ) 
+
+ + + + + +
+   + + +

+Calculate the UDP checksum of the packet in uip_buf and uip_appdata. +

+The UDP checksum is the Internet checksum of data contents of the UDP segment, and a pseudo-header as defined in RFC768.

+

Returns:
The UDP checksum of the UDP segment in uip_buf and pointed to by uip_appdata.
+ +

+Referenced by uip_process().

+

+ + + + +
+ + + + + + + + + +
void uip_unlisten u16_t  port  ) 
+
+ + + + + +
+   + + +

+Stop listening to the specified port. +

+

Note:
Since this function expects the port number in network byte order, a conversion using HTONS() or htons() is necessary.
+

+

Parameters:
+ + +
port A 16-bit port number in network byte order.
+
+ +

+Definition at line 518 of file uip.c. +

+References UIP_LISTENPORTS.

+


Variable Documentation

+

+ + + + +
+ + + + +
void* uip_appdata
+
+ + + + + +
+   + + +

+Pointer to the application data in the packet buffer. +

+This pointer points to the application data when the application is called. If the application wishes to send data, the application may use this space to write the data into before calling uip_send(). +

+Definition at line 143 of file uip.c. +

+Referenced by uip_process(), and uip_split_output().

+

+ + + + +
+ + + + +
void* uip_appdata
+
+ + + + + +
+   + + +

+Pointer to the application data in the packet buffer. +

+This pointer points to the application data when the application is called. If the application wishes to send data, the application may use this space to write the data into before calling uip_send().

Examples:
+dhcpc.c, resolv.c, telnetd.c, and webclient.c.
+

+Definition at line 143 of file uip.c. +

+Referenced by uip_process(), and uip_split_output().

+

+ + + + +
+ + + + +
u8_t uip_buf[UIP_BUFSIZE+2]
+
+ + + + + +
+   + + +

+The uIP packet buffer. +

+The uip_buf array is used to hold incoming and outgoing packets. The device driver should place incoming data into this buffer. When sending data, the device driver should read the link level headers and the TCP/IP headers from this buffer. The size of the link level headers is configured by the UIP_LLH_LEN define.

+

Note:
The application data need not be placed in this buffer, so the device driver must read it from the place pointed to by the uip_appdata pointer as illustrated by the following example:
 void
+ devicedriver_send(void)
+ {
+    hwsend(&uip_buf[0], UIP_LLH_LEN);
+    if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) {
+      hwsend(&uip_buf[UIP_LLH_LEN], uip_len - UIP_LLH_LEN);
+    } else {
+      hwsend(&uip_buf[UIP_LLH_LEN], UIP_TCPIP_HLEN);
+      hwsend(uip_appdata, uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN);
+    }
+ }
+
+ +

+Definition at line 139 of file uip.c. +

+Referenced by uip_process().

+

+ + + + +
+ + + + +
struct uip_conn* uip_conn
+
+ + + + + +
+   + + +

+Pointer to the current TCP connection. +

+The uip_conn pointer can be used to access the current TCP connection. +

+Definition at line 163 of file uip.c. +

+Referenced by uip_connect().

+

+ + + + +
+ + + + +
struct uip_conn* uip_conn
+
+ + + + + +
+   + + +

+Pointer to the current TCP connection. +

+The uip_conn pointer can be used to access the current TCP connection.

Examples:
+hello-world.c, smtp.c, and webclient.c.
+

+Definition at line 163 of file uip.c. +

+Referenced by uip_connect().

+

+ + + + +
+ + + + +
u16_t uip_len
+
+ + + + + +
+   + + +

+The length of the packet in the uip_buf buffer. +

+The global variable uip_len holds the length of the packet in the uip_buf buffer.

+When the network device driver calls the uIP input function, uip_len should be set to the length of the packet in the uip_buf buffer.

+When sending packets, the device driver should use the contents of the uip_len variable to determine the length of the outgoing packet. +

+Definition at line 155 of file uip.c. +

+Referenced by uip_arp_arpin(), uip_process(), and uip_split_output().

+

+ + + + +
+ + + + +
struct uip_stats uip_stat
+
+ + + + + +
+   + + +

+The uIP TCP/IP statistics. +

+This is the variable in which the uIP TCP/IP statistics are gathered. +

+Referenced by uip_process().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00151.html b/components/net/uip/doc/html/a00151.html new file mode 100644 index 0000000000000000000000000000000000000000..aa144cf2d078282b38df5cb355bc79bf4f978748 --- /dev/null +++ b/components/net/uip/doc/html/a00151.html @@ -0,0 +1,221 @@ + + +uIP 1.0: Architecture specific uIP functions + + + + + +

Architecture specific uIP functions
+ +[The uIP TCP/IP stack] +


Detailed Description

+The functions in the architecture specific module implement the IP check sum and 32-bit additions. +

+The IP checksum calculation is the most computationally expensive operation in the TCP/IP stack and it therefore pays off to implement this in efficient assembler. The purpose of the uip-arch module is to let the checksum functions to be implemented in architecture specific assembler. +

+ + + + + + + +

+

+ + + + + + + + + + + + + + + + +

Files

file  uip_arch.h
 Declarations of architecture specific functions.

Functions

void uip_add32 (u8_t *op32, u16_t op16)
 Carry out a 32-bit addition.
u16_t uip_chksum (u16_t *buf, u16_t len)
 Calculate the Internet checksum over a buffer.
u16_t uip_ipchksum (void)
 Calculate the IP header checksum of the packet header in uip_buf.
u16_t uip_tcpchksum (void)
 Calculate the TCP checksum of the packet in uip_buf and uip_appdata.

Variables

+u8_t uip_acc32 [4]
 4-byte array used for the 32-bit sequence number calculations.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void uip_add32 u8_t op32,
u16_t  op16
+
+ + + + + +
+   + + +

+Carry out a 32-bit addition. +

+Because not all architectures for which uIP is intended has native 32-bit arithmetic, uIP uses an external C function for doing the required 32-bit additions in the TCP protocol processing. This function should add the two arguments and place the result in the global variable uip_acc32.

+

Note:
The 32-bit integer pointed to by the op32 parameter and the result in the uip_acc32 variable are in network byte order (big endian).
+
Parameters:
+ + + +
op32 A pointer to a 4-byte array representing a 32-bit integer in network byte order (big endian).
op16 A 16-bit integer in host byte order.
+
+ +

+Definition at line 249 of file uip.c. +

+Referenced by uip_split_output().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
u16_t uip_chksum u16_t buf,
u16_t  len
+
+ + + + + +
+   + + +

+Calculate the Internet checksum over a buffer. +

+The Internet checksum is the one's complement of the one's complement sum of all 16-bit words in the buffer.

+See RFC1071.

+

Note:
This function is not called in the current version of uIP, but future versions might make use of it.
+
Parameters:
+ + + +
buf A pointer to the buffer over which the checksum is to be computed.
len The length of the buffer over which the checksum is to be computed.
+
+
Returns:
The Internet checksum of the buffer.
+
+

+ + + + +
+ + + + + + + + + +
u16_t uip_ipchksum void   ) 
+
+ + + + + +
+   + + +

+Calculate the IP header checksum of the packet header in uip_buf. +

+The IP header checksum is the Internet checksum of the 20 bytes of the IP header.

+

Returns:
The IP header checksum of the IP header in the uip_buf buffer.
+
+

+ + + + +
+ + + + + + + + + +
u16_t uip_tcpchksum void   ) 
+
+ + + + + +
+   + + +

+Calculate the TCP checksum of the packet in uip_buf and uip_appdata. +

+The TCP checksum is the Internet checksum of data contents of the TCP segment, and a pseudo-header as defined in RFC793.

+

Note:
The uip_appdata pointer that points to the packet data may point anywhere in memory, so it is not possible to simply calculate the Internet checksum of the contents of the uip_buf buffer.
+
Returns:
The TCP checksum of the TCP segment in uip_buf and pointed to by uip_appdata.
+
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00152.html b/components/net/uip/doc/html/a00152.html new file mode 100644 index 0000000000000000000000000000000000000000..b44513c477788677cb0a217b08ecb9094b0d3cf1 --- /dev/null +++ b/components/net/uip/doc/html/a00152.html @@ -0,0 +1,205 @@ + + +uIP 1.0: uIP Address Resolution Protocol + + + + + +

uIP Address Resolution Protocol
+ +[The uIP TCP/IP stack] +


Detailed Description

+The Address Resolution Protocol ARP is used for mapping between IP addresses and link level addresses such as the Ethernet MAC addresses. +

+ARP uses broadcast queries to ask for the link level address of a known IP address and the host which is configured with the IP address for which the query was meant, will respond with its link level address.

+

Note:
This ARP implementation only supports Ethernet.
+ +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  uip_arp.h
 Macros and definitions for the ARP module.
file  uip_arp.c
 Implementation of the ARP Address Resolution Protocol.

Data Structures

struct  uip_eth_hdr
 The Ethernet header. More...

Defines

+#define UIP_ETHTYPE_ARP   0x0806
+#define UIP_ETHTYPE_IP   0x0800
+#define UIP_ETHTYPE_IP6   0x86dd
+#define uip_arp_ipin()
+#define ARP_REQUEST   1
+#define ARP_REPLY   2
+#define ARP_HWTYPE_ETH   1
+#define BUF   ((struct arp_hdr *)&uip_buf[0])
+#define IPBUF   ((struct ethip_hdr *)&uip_buf[0])

Functions

+void uip_arp_init (void)
 Initialize the ARP module.
void uip_arp_arpin (void)
 ARP processing for incoming ARP packets.
void uip_arp_out (void)
 Prepend Ethernet header to an outbound IP packet and see if we need to send out an ARP request.
void uip_arp_timer (void)
 Periodic ARP processing function.

Variables

+uip_eth_addr uip_ethaddr
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void uip_arp_arpin void   ) 
+
+ + + + + +
+   + + +

+ARP processing for incoming ARP packets. +

+This function should be called by the device driver when an ARP packet has been received. The function will act differently depending on the ARP packet type: if it is a reply for a request that we previously sent out, the ARP cache will be filled in with the values from the ARP reply. If the incoming ARP packet is an ARP request for our IP address, an ARP reply packet is created and put into the uip_buf[] buffer.

+When the function returns, the value of the global variable uip_len indicates whether the device driver should send out a packet or not. If uip_len is zero, no packet should be sent. If uip_len is non-zero, it contains the length of the outbound packet that is present in the uip_buf[] buffer.

+This function expects an ARP packet with a prepended Ethernet header in the uip_buf[] buffer, and the length of the packet in the global variable uip_len.

Examples:
+example-mainloop-with-arp.c.
+

+Definition at line 278 of file uip_arp.c. +

+References uip_eth_addr::addr, ARP_REPLY, ARP_REQUEST, BUF, HTONS, uip_ethaddr, UIP_ETHTYPE_ARP, uip_hostaddr, uip_ipaddr_cmp, and uip_len.

+

+ + + + +
+ + + + + + + + + +
void uip_arp_out void   ) 
+
+ + + + + +
+   + + +

+Prepend Ethernet header to an outbound IP packet and see if we need to send out an ARP request. +

+This function should be called before sending out an IP packet. The function checks the destination IP address of the IP packet to see what Ethernet MAC address that should be used as a destination MAC address on the Ethernet.

+If the destination IP address is in the local network (determined by logical ANDing of netmask and our IP address), the function checks the ARP cache to see if an entry for the destination IP address is found. If so, an Ethernet header is prepended and the function returns. If no ARP cache entry is found for the destination IP address, the packet in the uip_buf[] is replaced by an ARP request packet for the IP address. The IP packet is dropped and it is assumed that they higher level protocols (e.g., TCP) eventually will retransmit the dropped packet.

+If the destination IP address is not on the local network, the IP address of the default router is used instead.

+When the function returns, a packet is present in the uip_buf[] buffer, and the length of the packet is in the global variable uip_len.

Examples:
+example-mainloop-with-arp.c.
+

+Definition at line 354 of file uip_arp.c. +

+References uip_eth_addr::addr, IPBUF, UIP_ARPTAB_SIZE, uip_draddr, uip_hostaddr, uip_ipaddr_cmp, uip_ipaddr_copy, and uip_ipaddr_maskcmp.

+

+ + + + +
+ + + + + + + + + +
void uip_arp_timer void   ) 
+
+ + + + + +
+   + + +

+Periodic ARP processing function. +

+This function performs periodic timer processing in the ARP module and should be called at regular intervals. The recommended interval is 10 seconds between the calls.

Examples:
+example-mainloop-with-arp.c.
+

+Definition at line 142 of file uip_arp.c. +

+References UIP_ARP_MAXAGE, and UIP_ARPTAB_SIZE.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00153.html b/components/net/uip/doc/html/a00153.html new file mode 100644 index 0000000000000000000000000000000000000000..e30399531998d90847cf6ce053e094219f871f76 --- /dev/null +++ b/components/net/uip/doc/html/a00153.html @@ -0,0 +1,1059 @@ + + +uIP 1.0: Configuration options for uIP + + + + + +

Configuration options for uIP


Detailed Description

+uIP is configured using the per-project configuration file uipopt.h. +

+This file contains all compile-time options for uIP and should be tweaked to match each specific project. The uIP distribution contains a documented example "uipopt.h" that can be copied and modified for each project.

+

Note:
Most of the configuration options in the uipopt.h should not be changed, but rather the per-project uip-conf.h file.
+ +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  uip-conf.h
 An example uIP configuration file.
file  uipopt.h
 Configuration options for uIP.

Project-specific configuration options

uIP has a number of configuration options that can be overridden for each project. These are kept in a project-specific uip-conf.h file and all configuration names have the prefix UIP_CONF.

+#define UIP_CONF_MAX_CONNECTIONS
 Maximum number of TCP connections.
+#define UIP_CONF_MAX_LISTENPORTS
 Maximum number of listening TCP ports.
+#define UIP_CONF_BUFFER_SIZE
 uIP buffer size.
+#define UIP_CONF_BYTE_ORDER
 CPU byte order.
+#define UIP_CONF_LOGGING
 Logging on or off.
+#define UIP_CONF_UDP
 UDP support on or off.
+#define UIP_CONF_UDP_CHECKSUMS
 UDP checksums on or off.
+#define UIP_CONF_STATISTICS
 uIP statistics on or off
typedef uint8_t u8_t
 8 bit datatype
typedef uint16_t u16_t
 16 bit datatype
typedef unsigned short uip_stats_t
 Statistics datatype.

Static configuration options

These configuration options can be used for setting the IP address settings statically, but only if UIP_FIXEDADDR is set to 1. The configuration options for a specific node includes IP address, netmask and default router as well as the Ethernet address. The netmask, default router and Ethernet address are appliciable only if uIP should be run over Ethernet.

+All of these should be changed to suit your project.

#define UIP_FIXEDADDR
 Determines if uIP should use a fixed IP address or not.
#define UIP_PINGADDRCONF
 Ping IP address asignment.
#define UIP_FIXEDETHADDR
 Specifies if the uIP ARP module should be compiled with a fixed Ethernet MAC address or not.

IP configuration options

#define UIP_TTL   64
 The IP TTL (time to live) of IP packets sent by uIP.
#define UIP_REASSEMBLY
 Turn on support for IP packet reassembly.
+#define UIP_REASS_MAXAGE   40
 The maximum time an IP fragment should wait in the reassembly buffer before it is dropped.

UDP configuration options

+#define UIP_UDP
 Toggles wether UDP support should be compiled in or not.
#define UIP_UDP_CHECKSUMS
 Toggles if UDP checksums should be used or not.
+#define UIP_UDP_CONNS
 The maximum amount of concurrent UDP connections.

TCP configuration options

#define UIP_ACTIVE_OPEN
 Determines if support for opening connections from uIP should be compiled in.
#define UIP_CONNS
 The maximum number of simultaneously open TCP connections.
#define UIP_LISTENPORTS
 The maximum number of simultaneously listening TCP ports.
#define UIP_URGDATA
 Determines if support for TCP urgent data notification should be compiled in.
#define UIP_RTO   3
 The initial retransmission timeout counted in timer pulses.
#define UIP_MAXRTX   8
 The maximum number of times a segment should be retransmitted before the connection should be aborted.
#define UIP_MAXSYNRTX   5
 The maximum number of times a SYN segment should be retransmitted before a connection request should be deemed to have been unsuccessful.
#define UIP_TCP_MSS   (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
 The TCP maximum segment size.
#define UIP_RECEIVE_WINDOW
 The size of the advertised receiver's window.
#define UIP_TIME_WAIT_TIMEOUT   120
 How long a connection should stay in the TIME_WAIT state.

ARP configuration options

#define UIP_ARPTAB_SIZE
 The size of the ARP table.
#define UIP_ARP_MAXAGE   120
 The maxium age of ARP table entries measured in 10ths of seconds.

General configuration options

#define UIP_BUFSIZE
 The size of the uIP packet buffer.
#define UIP_STATISTICS
 Determines if statistics support should be compiled in.
#define UIP_LOGGING
 Determines if logging of certain events should be compiled in.
#define UIP_BROADCAST
 Broadcast support.
#define UIP_LLH_LEN
 The link level header length.
void uip_log (char *msg)
 Print out a uIP log message.

CPU architecture configuration

The CPU architecture configuration is where the endianess of the CPU on which uIP is to be run is specified. Most CPUs today are little endian, and the most notable exception are the Motorolas which are big endian. The BYTE_ORDER macro should be changed to reflect the CPU architecture on which uIP is to be run.

#define UIP_BYTE_ORDER
 The byte order of the CPU architecture on which uIP is to be run.

Appication specific configurations

An uIP application is implemented using a single application function that is called by uIP whenever a TCP/IP event occurs. The name of this function must be registered with uIP at compile time using the UIP_APPCALL definition.

+uIP applications can store the application state within the uip_conn structure by specifying the type of the application structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.

+The file containing the definitions must be included in the uipopt.h file.

+The following example illustrates how this can look.

void httpd_appcall(void);
+#define UIP_APPCALL     httpd_appcall
+
+struct httpd_state {
+  u8_t state;
+  u16_t count;
+  char *dataptr;
+  char *script;
+};
+typedef struct httpd_state uip_tcp_appstate_t
+


+#define UIP_APPCALL   smtp_appcall
 The name of the application function that uIP should call in response to TCP/IP events.
typedef smtp_state uip_tcp_appstate_t
 The type of the application state that is to be stored in the uip_conn structure.
typedef int uip_udp_appstate_t
 The type of the application state that is to be stored in the uip_conn structure.

Defines

+#define UIP_LITTLE_ENDIAN   3412
+#define UIP_BIG_ENDIAN   1234
+


Define Documentation

+

+ + + + +
+ + + + +
#define UIP_ACTIVE_OPEN
+
+ + + + + +
+   + + +

+Determines if support for opening connections from uIP should be compiled in. +

+If the applications that are running on top of uIP for this project do not need to open outgoing TCP connections, this configration option can be turned off to reduce the code size of uIP. +

+Definition at line 233 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_ARP_MAXAGE   120
+
+ + + + + +
+   + + +

+The maxium age of ARP table entries measured in 10ths of seconds. +

+An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD default). +

+Definition at line 358 of file uipopt.h. +

+Referenced by uip_arp_timer().

+

+ + + + +
+ + + + +
#define UIP_ARPTAB_SIZE
+
+ + + + + +
+   + + +

+The size of the ARP table. +

+This option should be set to a larger value if this uIP node will have many connections from the local network. +

+Definition at line 349 of file uipopt.h. +

+Referenced by uip_arp_init(), uip_arp_out(), and uip_arp_timer().

+

+ + + + +
+ + + + +
#define UIP_BROADCAST
+
+ + + + + +
+   + + +

+Broadcast support. +

+This flag configures IP broadcast support. This is useful only together with UDP. +

+Definition at line 423 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_BUFSIZE
+
+ + + + + +
+   + + +

+The size of the uIP packet buffer. +

+The uIP packet buffer should not be smaller than 60 bytes, and does not need to be larger than 1500 bytes. Lower size results in lower TCP throughput, larger size results in higher TCP throughput. +

+Definition at line 379 of file uipopt.h. +

+Referenced by uip_split_output().

+

+ + + + +
+ + + + +
#define UIP_BYTE_ORDER
+
+ + + + + +
+   + + +

+The byte order of the CPU architecture on which uIP is to be run. +

+This option can be either BIG_ENDIAN (Motorola byte order) or LITTLE_ENDIAN (Intel byte order). +

+Definition at line 475 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_CONNS
+
+ + + + + +
+   + + +

+The maximum number of simultaneously open TCP connections. +

+Since the TCP connections are statically allocated, turning this configuration knob down results in less RAM used. Each TCP connection requires approximatly 30 bytes of memory.

Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 245 of file uipopt.h. +

+Referenced by uip_connect().

+

+ + + + +
+ + + + +
#define UIP_FIXEDADDR
+
+ + + + + +
+   + + +

+Determines if uIP should use a fixed IP address or not. +

+If uIP should use a fixed IP address, the settings are set in the uipopt.h file. If not, the macros uip_sethostaddr(), uip_setdraddr() and uip_setnetmask() should be used instead. +

+Definition at line 97 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_FIXEDETHADDR
+
+ + + + + +
+   + + +

+Specifies if the uIP ARP module should be compiled with a fixed Ethernet MAC address or not. +

+If this configuration option is 0, the macro uip_setethaddr() can be used to specify the Ethernet address at run-time. +

+Definition at line 127 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_LISTENPORTS
+
+ + + + + +
+   + + +

+The maximum number of simultaneously listening TCP ports. +

+Each listening TCP port requires 2 bytes of memory. +

+Definition at line 259 of file uipopt.h. +

+Referenced by uip_init(), uip_listen(), and uip_unlisten().

+

+ + + + +
+ + + + +
#define UIP_LLH_LEN
+
+ + + + + +
+   + + +

+The link level header length. +

+This is the offset into the uip_buf where the IP header can be found. For Ethernet, this should be set to 14. For SLIP, this should be set to 0. +

+Definition at line 448 of file uipopt.h. +

+Referenced by uip_ipchksum(), uip_process(), and uip_split_output().

+

+ + + + +
+ + + + +
#define UIP_LOGGING
+
+ + + + + +
+   + + +

+Determines if logging of certain events should be compiled in. +

+This is useful mostly for debugging. The function uip_log() must be implemented to suit the architecture of the project, if logging is turned on. +

+Definition at line 408 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_MAXRTX   8
+
+ + + + + +
+   + + +

+The maximum number of times a segment should be retransmitted before the connection should be aborted. +

+This should not be changed. +

+Definition at line 288 of file uipopt.h. +

+Referenced by uip_process().

+

+ + + + +
+ + + + +
#define UIP_MAXSYNRTX   5
+
+ + + + + +
+   + + +

+The maximum number of times a SYN segment should be retransmitted before a connection request should be deemed to have been unsuccessful. +

+This should not need to be changed. +

+Definition at line 297 of file uipopt.h. +

+Referenced by uip_process().

+

+ + + + +
+ + + + +
#define UIP_PINGADDRCONF
+
+ + + + + +
+   + + +

+Ping IP address asignment. +

+uIP uses a "ping" packets for setting its own IP address if this option is set. If so, uIP will start with an empty IP address and the destination IP address of the first incoming "ping" (ICMP echo) packet will be used for setting the hosts IP address.

+

Note:
This works only if UIP_FIXEDADDR is 0.
+ +

+Definition at line 114 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_REASSEMBLY
+
+ + + + + +
+   + + +

+Turn on support for IP packet reassembly. +

+uIP supports reassembly of fragmented IP packets. This features requires an additonal amount of RAM to hold the reassembly buffer and the reassembly code size is approximately 700 bytes. The reassembly buffer is of the same size as the uip_buf buffer (configured by UIP_BUFSIZE).

+

Note:
IP packet reassembly is not heavily tested.
+ +

+Definition at line 156 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_RECEIVE_WINDOW
+
+ + + + + +
+   + + +

+The size of the advertised receiver's window. +

+Should be set low (i.e., to the size of the uip_buf buffer) is the application is slow to process incoming data, or high (32768 bytes) if the application processes data quickly. +

+Definition at line 317 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_RTO   3
+
+ + + + + +
+   + + +

+The initial retransmission timeout counted in timer pulses. +

+This should not be changed. +

+Definition at line 280 of file uipopt.h. +

+Referenced by uip_process().

+

+ + + + +
+ + + + +
#define UIP_STATISTICS
+
+ + + + + +
+   + + +

+Determines if statistics support should be compiled in. +

+The statistics is useful for debugging and to show the user. +

+Definition at line 393 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_TCP_MSS   (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
+
+ + + + + +
+   + + +

+The TCP maximum segment size. +

+This is should not be to set to more than UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN. +

+Definition at line 305 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_TIME_WAIT_TIMEOUT   120
+
+ + + + + +
+   + + +

+How long a connection should stay in the TIME_WAIT state. +

+This configiration option has no real implication, and it should be left untouched. +

+Definition at line 328 of file uipopt.h. +

+Referenced by uip_process().

+

+ + + + +
+ + + + +
#define UIP_TTL   64
+
+ + + + + +
+   + + +

+The IP TTL (time to live) of IP packets sent by uIP. +

+This should normally not be changed. +

+Definition at line 141 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_UDP_CHECKSUMS
+
+ + + + + +
+   + + +

+Toggles if UDP checksums should be used or not. +

+

Note:
Support for UDP checksums is currently not included in uIP, so this option has no function.
+ +

+Definition at line 195 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_URGDATA
+
+ + + + + +
+   + + +

+Determines if support for TCP urgent data notification should be compiled in. +

+Urgent data (out-of-band data) is a rarely used TCP feature that very seldom would be required. +

+Definition at line 273 of file uipopt.h.

+


Typedef Documentation

+

+ + + + +
+ + + + +
typedef uint16_t u16_t
+
+ + + + + +
+   + + +

+16 bit datatype +

+This typedef defines the 16-bit type used throughout uIP.

Examples:
+dhcpc.c, dhcpc.h, resolv.c, resolv.h, smtp.c, smtp.h, telnetd.c, and uip-conf.h.
+

+Definition at line 76 of file uip-conf.h.

+

+ + + + +
+ + + + +
typedef uint8_t u8_t
+
+ + + + + +
+   + + +

+8 bit datatype +

+This typedef defines the 8-bit type used throughout uIP.

Examples:
+dhcpc.c, dhcpc.h, resolv.c, smtp.h, telnetd.c, telnetd.h, and uip-conf.h.
+

+Definition at line 67 of file uip-conf.h.

+

+ + + + +
+ + + + +
typedef unsigned short uip_stats_t
+
+ + + + + +
+   + + +

+Statistics datatype. +

+This typedef defines the dataype used for keeping statistics in uIP. +

+Definition at line 86 of file uip-conf.h.

+

+ + + + +
+ + + + +
typedef uip_tcp_appstate_t
+
+ + + + + +
+   + + +

+The type of the application state that is to be stored in the uip_conn structure. +

+This usually is typedef:ed to a struct holding application state information.

Examples:
+smtp.h, telnetd.h, and webclient.h.
+

+Definition at line 98 of file smtp.h.

+

+ + + + +
+ + + + +
typedef uip_udp_appstate_t
+
+ + + + + +
+   + + +

+The type of the application state that is to be stored in the uip_conn structure. +

+This usually is typedef:ed to a struct holding application state information.

Examples:
+dhcpc.h.
+

+Definition at line 47 of file resolv.h.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void uip_log char *  msg  ) 
+
+ + + + + +
+   + + +

+Print out a uIP log message. +

+This function must be implemented by the module that uses uIP, and is called by uIP whenever a log message is generated.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00154.html b/components/net/uip/doc/html/a00154.html new file mode 100644 index 0000000000000000000000000000000000000000..8c2a7bf27b690aea8cdcbce378b71b9362bd0960 --- /dev/null +++ b/components/net/uip/doc/html/a00154.html @@ -0,0 +1,79 @@ + + +uIP 1.0: uIP TCP throughput booster hack + + + + + +

uIP TCP throughput booster hack
+ +[The uIP TCP/IP stack] +


Detailed Description

+The basic uIP TCP implementation only allows each TCP connection to have a single TCP segment in flight at any given time. +

+Because of the delayed ACK algorithm employed by most TCP receivers, uIP's limit on the amount of in-flight TCP segments seriously reduces the maximum achievable throughput for sending data from uIP.

+The uip-split module is a hack which tries to remedy this situation. By splitting maximum sized outgoing TCP segments into two, the delayed ACK algorithm is not invoked at TCP receivers. This improves the throughput when sending data from uIP by orders of magnitude.

+The uip-split module uses the uip-fw module (uIP IP packet forwarding) for sending packets. Therefore, the uip-fw module must be set up with the appropriate network interfaces for this module to work. +

+ + + + + + + +

+

+ + + +

Files

file  uip-split.h
 Module for splitting outbound TCP segments in two to avoid the delayed ACK throughput degradation.

Functions

void uip_split_output (void)
 Handle outgoing packets.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void uip_split_output void   ) 
+
+ + + + + +
+   + + +

+Handle outgoing packets. +

+This function inspects an outgoing packet in the uip_buf buffer and sends it out using the uip_fw_output() function. If the packet is a full-sized TCP segment it will be split into two segments and transmitted separately. This function should be called instead of the actual device driver output function, or the uip_fw_output() function.

+The headers of the outgoing packet is assumed to be in the uip_buf buffer and the payload is assumed to be wherever uip_appdata points. The length of the outgoing packet is assumed to be in the uip_len variable. +

+Definition at line 49 of file uip-split.c. +

+References BUF, uip_acc32, uip_add32(), uip_appdata, UIP_BUFSIZE, uip_ipchksum(), UIP_IPH_LEN, uip_len, UIP_LLH_LEN, UIP_PROTO_TCP, uip_tcpchksum(), and UIP_TCPIP_HLEN.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00155.html b/components/net/uip/doc/html/a00155.html new file mode 100644 index 0000000000000000000000000000000000000000..157811a53cb8bbc715be9eea9c927c3eea08df4e --- /dev/null +++ b/components/net/uip/doc/html/a00155.html @@ -0,0 +1,82 @@ + + +uIP 1.0: Local continuations + + + + + +

Local continuations
+ +[Protothreads] +


Detailed Description

+Local continuations form the basis for implementing protothreads. +

+A local continuation can be set in a specific function to capture the state of the function. After a local continuation has been set can be resumed in order to restore the state of the function at the point where the local continuation was set. +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + +

Files

file  lc.h
 Local continuations.
file  lc-switch.h
 Implementation of local continuations based on switch() statment.
file  lc-addrlabels.h
 Implementation of local continuations based on the "Labels as values" feature of gcc.

Defines

+#define __LC_SWTICH_H__
+#define LC_INIT(s)   s = 0;
+#define LC_RESUME(s)   switch(s) { case 0:
+#define LC_SET(s)   s = __LINE__; case __LINE__:
+#define LC_END(s)   }
+#define LC_INIT(s)   s = NULL
+#define LC_RESUME(s)
+#define LC_SET(s)   do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0)
+#define LC_END(s)

Typedefs

+typedef unsigned short lc_t
+typedef void * lc_t
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00156.html b/components/net/uip/doc/html/a00156.html new file mode 100644 index 0000000000000000000000000000000000000000..9df0786dfd344ea576ab709ffaf69972834a8e88 --- /dev/null +++ b/components/net/uip/doc/html/a00156.html @@ -0,0 +1,237 @@ + + +uIP 1.0: Timer library + + + + + +

Timer library


Detailed Description

+The timer library provides functions for setting, resetting and restarting timers, and for checking if a timer has expired. +

+An application must "manually" check if its timers have expired; this is not done automatically.

+A timer is declared as a struct timer and all access to the timer is made by a pointer to the declared timer.

+

Note:
The timer library uses the Clock library to measure time. Intervals should be specified in the format used by the clock library.
+ +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + +

Files

file  timer.h
 Timer library header file.
file  timer.c
 Timer library implementation.

Data Structures

struct  timer
 A timer. More...

Functions

void timer_set (struct timer *t, clock_time_t interval)
 Set a timer.
void timer_reset (struct timer *t)
 Reset the timer with the same interval.
void timer_restart (struct timer *t)
 Restart the timer from the current point in time.
int timer_expired (struct timer *t)
 Check if a timer has expired.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
int timer_expired struct timer t  ) 
+
+ + + + + +
+   + + +

+Check if a timer has expired. +

+This function tests if a timer has expired and returns true or false depending on its status.

+

Parameters:
+ + +
t A pointer to the timer
+
+
Returns:
Non-zero if the timer has expired, zero otherwise.
+
Examples:
+dhcpc.c, example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 121 of file timer.c. +

+References clock_time(), interval, and start.

+

+ + + + +
+ + + + + + + + + +
void timer_reset struct timer t  ) 
+
+ + + + + +
+   + + +

+Reset the timer with the same interval. +

+This function resets the timer with the same interval that was given to the timer_set() function. The start point of the interval is the exact time that the timer last expired. Therefore, this function will cause the timer to be stable over time, unlike the timer_rester() function.

+

Parameters:
+ + +
t A pointer to the timer.
+
+
See also:
timer_restart()
+
Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 84 of file timer.c. +

+References interval, and start.

+

+ + + + +
+ + + + + + + + + +
void timer_restart struct timer t  ) 
+
+ + + + + +
+   + + +

+Restart the timer from the current point in time. +

+This function restarts a timer with the same interval that was given to the timer_set() function. The timer will start at the current time.

+

Note:
A periodic timer will drift if this function is used to reset it. For preioric timers, use the timer_reset() function instead.
+
Parameters:
+ + +
t A pointer to the timer.
+
+
See also:
timer_reset()
+ +

+Definition at line 104 of file timer.c. +

+References clock_time(), and start.

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void timer_set struct timer t,
clock_time_t  interval
+
+ + + + + +
+   + + +

+Set a timer. +

+This function is used to set a timer for a time sometime in the future. The function timer_expired() will evaluate to true after the timer has expired.

+

Parameters:
+ + + +
t A pointer to the timer
interval The interval before the timer expires.
+
+
Examples:
+dhcpc.c, example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 64 of file timer.c. +

+References clock_time(), interval, and start.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00157.html b/components/net/uip/doc/html/a00157.html new file mode 100644 index 0000000000000000000000000000000000000000..a89ac8d5a105428d9d00821c2df1ecf931b1fe70 --- /dev/null +++ b/components/net/uip/doc/html/a00157.html @@ -0,0 +1,108 @@ + + +uIP 1.0: Clock interface + + + + + +

Clock interface


Detailed Description

+The clock interface is the interface between the timer library and the platform specific clock functionality. +

+The clock interface must be implemented for each platform that uses the timer library.

+The clock interface does only one this: it measures time. The clock interface provides a macro, CLOCK_SECOND, which corresponds to one second of system time.

+

See also:
Timer library
+ +

+ + + + + + + + + + + + + +

Defines

+#define CLOCK_SECOND
 A second, measured in system clock time.

Functions

void clock_init (void)
 Initialize the clock library.
clock_time_t clock_time (void)
 Get the current clock time.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void clock_init void   ) 
+
+ + + + + +
+   + + +

+Initialize the clock library. +

+This function initializes the clock library and should be called from the main() function of the system.

+

+ + + + +
+ + + + + + + + + +
clock_time_t clock_time void   ) 
+
+ + + + + +
+   + + +

+Get the current clock time. +

+This function returns the current system clock time.

+

Returns:
The current clock time, measured in system ticks.
+ +

+Referenced by timer_expired(), timer_restart(), and timer_set().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00158.html b/components/net/uip/doc/html/a00158.html new file mode 100644 index 0000000000000000000000000000000000000000..4d56cceeab8dfe7dbc1f91ea0f3fc1f24f729215 --- /dev/null +++ b/components/net/uip/doc/html/a00158.html @@ -0,0 +1,693 @@ + + +uIP 1.0: Protosockets library + + + + + +

Protosockets library


Detailed Description

+The protosocket library provides an interface to the uIP stack that is similar to the traditional BSD socket interface. +

+Unlike programs written for the ordinary uIP event-driven interface, programs written with the protosocket library are executed in a sequential fashion and does not have to be implemented as explicit state machines.

+Protosockets only work with TCP connections.

+The protosocket library uses Protothreads protothreads to provide sequential control flow. This makes the protosockets lightweight in terms of memory, but also means that protosockets inherits the functional limitations of protothreads. Each protosocket lives only within a single function. Automatic variables (stack variables) are not retained across a protosocket library function call.

+

Note:
Because the protosocket library uses protothreads, local variables will not always be saved across a call to a protosocket library function. It is therefore advised that local variables are used with extreme care.
+The protosocket library provides functions for sending data without having to deal with retransmissions and acknowledgements, as well as functions for reading data without having to deal with data being split across more than one TCP segment.

+Because each protosocket runs as a protothread, the protosocket has to be started with a call to PSOCK_BEGIN() at the start of the function in which the protosocket is used. Similarly, the protosocket protothread can be terminated by a call to PSOCK_EXIT(). +

+ + + + + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  psock.h
 Protosocket library header file.

Data Structures

struct  psock_buf
struct  psock
 The representation of a protosocket. More...

Defines

#define PSOCK_INIT(psock, buffer, buffersize)
 Initialize a protosocket.
#define PSOCK_BEGIN(psock)
 Start the protosocket protothread in a function.
#define PSOCK_SEND(psock, data, datalen)
 Send data.
#define PSOCK_SEND_STR(psock, str)
 Send a null-terminated string.
#define PSOCK_GENERATOR_SEND(psock, generator, arg)
 Generate data with a function and send it.
#define PSOCK_CLOSE(psock)
 Close a protosocket.
#define PSOCK_READBUF(psock)
 Read data until the buffer is full.
#define PSOCK_READTO(psock, c)
 Read data up to a specified character.
#define PSOCK_DATALEN(psock)
 The length of the data that was previously read.
#define PSOCK_EXIT(psock)
 Exit the protosocket's protothread.
#define PSOCK_CLOSE_EXIT(psock)
 Close a protosocket and exit the protosocket's protothread.
#define PSOCK_END(psock)
 Declare the end of a protosocket's protothread.
#define PSOCK_NEWDATA(psock)
 Check if new data has arrived on a protosocket.
#define PSOCK_WAIT_UNTIL(psock, condition)
 Wait until a condition is true.
+#define PSOCK_WAIT_THREAD(psock, condition)   PT_WAIT_THREAD(&((psock)->pt), (condition))

Functions

+u16_t psock_datalen (struct psock *psock)
+char psock_newdata (struct psock *s)
+


Define Documentation

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_BEGIN psock   ) 
+
+ + + + + +
+   + + +

+Start the protosocket protothread in a function. +

+This macro starts the protothread associated with the protosocket and must come before other protosocket calls in the function it is used.

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket to be started.
+
+
Examples:
+hello-world.c, and smtp.c.
+

+Definition at line 158 of file psock.h.

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_CLOSE psock   ) 
+
+ + + + + +
+   + + +

+Close a protosocket. +

+This macro closes a protosocket and can only be called from within the protothread in which the protosocket lives.

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket that is to be closed.
+
+
Examples:
+hello-world.c, and smtp.c.
+

+Definition at line 235 of file psock.h.

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_CLOSE_EXIT psock   ) 
+
+ + + + + +
+   + + +

+Close a protosocket and exit the protosocket's protothread. +

+This macro closes a protosocket and exits the protosocket's protothread.

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket.
+
+ +

+Definition at line 308 of file psock.h.

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_DATALEN psock   ) 
+
+ + + + + +
+   + + +

+The length of the data that was previously read. +

+This macro returns the length of the data that was previously read using PSOCK_READTO() or PSOCK_READ().

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket holding the data.
+
+ +

+Definition at line 281 of file psock.h.

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_END psock   ) 
+
+ + + + + +
+   + + +

+Declare the end of a protosocket's protothread. +

+This macro is used for declaring that the protosocket's protothread ends. It must always be used together with a matching PSOCK_BEGIN() macro.

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket.
+
+
Examples:
+hello-world.c, and smtp.c.
+

+Definition at line 325 of file psock.h.

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_EXIT psock   ) 
+
+ + + + + +
+   + + +

+Exit the protosocket's protothread. +

+This macro terminates the protothread of the protosocket and should almost always be used in conjunction with PSOCK_CLOSE().

+

See also:
PSOCK_CLOSE_EXIT()
+
Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket.
+
+
Examples:
+smtp.c.
+

+Definition at line 297 of file psock.h.

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define PSOCK_GENERATOR_SEND psock,
generator,
arg   ) 
+
+ + + + + +
+   + + +

+Generate data with a function and send it. +

+

Parameters:
+ + + + +
psock Pointer to the protosocket.
generator Pointer to the generator function
arg Argument to the generator function
+
+This function generates data and sends it over the protosocket. This can be used to dynamically generate data for a transmission, instead of generating the data in a buffer beforehand. This function reduces the need for buffer memory. The generator function is implemented by the application, and a pointer to the function is given as an argument with the call to PSOCK_GENERATOR_SEND().

+The generator function should place the generated data directly in the uip_appdata buffer, and return the length of the generated data. The generator function is called by the protosocket layer when the data first is sent, and once for every retransmission that is needed. +

+Definition at line 219 of file psock.h.

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define PSOCK_INIT psock,
buffer,
buffersize   ) 
+
+ + + + + +
+   + + +

+Initialize a protosocket. +

+This macro initializes a protosocket and must be called before the protosocket is used. The initialization also specifies the input buffer for the protosocket.

+

Parameters:
+ + + + +
psock (struct psock *) A pointer to the protosocket to be initialized
buffer (char *) A pointer to the input buffer for the protosocket.
buffersize (unsigned int) The size of the input buffer.
+
+
Examples:
+hello-world.c, and smtp.c.
+

+Definition at line 144 of file psock.h. +

+Referenced by hello_world_appcall(), httpd_appcall(), and smtp_send().

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_NEWDATA psock   ) 
+
+ + + + + +
+   + + +

+Check if new data has arrived on a protosocket. +

+This macro is used in conjunction with the PSOCK_WAIT_UNTIL() macro to check if data has arrived on a protosocket.

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket.
+
+ +

+Definition at line 339 of file psock.h.

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_READBUF psock   ) 
+
+ + + + + +
+   + + +

+Read data until the buffer is full. +

+This macro will block waiting for data and read the data into the input buffer specified with the call to PSOCK_INIT(). Data is read until the buffer is full..

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket from which data should be read.
+
+ +

+Definition at line 250 of file psock.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PSOCK_READTO psock,
 ) 
+
+ + + + + +
+   + + +

+Read data up to a specified character. +

+This macro will block waiting for data and read the data into the input buffer specified with the call to PSOCK_INIT(). Data is only read until the specifieed character appears in the data stream.

+

Parameters:
+ + + +
psock (struct psock *) A pointer to the protosocket from which data should be read.
c (char) The character at which to stop reading.
+
+
Examples:
+hello-world.c, and smtp.c.
+

+Definition at line 268 of file psock.h.

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define PSOCK_SEND psock,
data,
datalen   ) 
+
+ + + + + +
+   + + +

+Send data. +

+This macro sends data over a protosocket. The protosocket protothread blocks until all data has been sent and is known to have been received by the remote end of the TCP connection.

+

Parameters:
+ + + + +
psock (struct psock *) A pointer to the protosocket over which data is to be sent.
data (char *) A pointer to the data that is to be sent.
datalen (unsigned int) The length of the data that is to be sent.
+
+
Examples:
+smtp.c.
+

+Definition at line 178 of file psock.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PSOCK_SEND_STR psock,
str   ) 
+
+ + + + + +
+   + + +

+Send a null-terminated string. +

+

Parameters:
+ + + +
psock Pointer to the protosocket.
str The string to be sent.
+
+This function sends a null-terminated string over the protosocket.
Examples:
+hello-world.c, and smtp.c.
+

+Definition at line 191 of file psock.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PSOCK_WAIT_UNTIL psock,
condition   ) 
+
+ + + + + +
+   + + +

+Wait until a condition is true. +

+This macro blocks the protothread until the specified condition is true. The macro PSOCK_NEWDATA() can be used to check if new data arrives when the protosocket is waiting.

+Typically, this macro is used as follows:

+

 PT_THREAD(thread(struct psock *s, struct timer *t))
+ {
+   PSOCK_BEGIN(s);
+
+   PSOCK_WAIT_UNTIL(s, PSOCK_NEWADATA(s) || timer_expired(t));
+   
+   if(PSOCK_NEWDATA(s)) {
+     PSOCK_READTO(s, '\n');
+   } else {
+     handle_timed_out(s);
+   }
+   
+   PSOCK_END(s);
+ }
+

+

Parameters:
+ + + +
psock (struct psock *) A pointer to the protosocket.
condition The condition to wait for.
+
+ +

+Definition at line 372 of file psock.h.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00159.html b/components/net/uip/doc/html/a00159.html new file mode 100644 index 0000000000000000000000000000000000000000..3564fa91a19531a9e375b5689e3b6ea7652c023e --- /dev/null +++ b/components/net/uip/doc/html/a00159.html @@ -0,0 +1,251 @@ + + +uIP 1.0: Memory block management functions + + + + + +

Memory block management functions


Detailed Description

+The memory block allocation routines provide a simple yet powerful set of functions for managing a set of memory blocks of fixed size. +

+A set of memory blocks is statically declared with the MEMB() macro. Memory blocks are allocated from the declared memory by the memb_alloc() function, and are deallocated with the memb_free() function.

+

Note:
Because of namespace clashes only one MEMB() can be declared per C module, and the name scope of a MEMB() memory block is local to each C module.
+The following example shows how to declare and use a memory block called "cmem" which has 8 chunks of memory with each memory chunk being 20 bytes large. +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + +

Files

file  memb.c
 Memory block allocation routines.
file  memb.h
 Memory block allocation routines.

Data Structures

struct  memb_blocks

Defines

+#define MEMB_CONCAT2(s1, s2)   s1##s2
+#define MEMB_CONCAT(s1, s2)   MEMB_CONCAT2(s1, s2)
#define MEMB(name, structure, num)
 Declare a memory block.

Functions

void memb_init (struct memb_blocks *m)
 Initialize a memory block that was declared with MEMB().
void * memb_alloc (struct memb_blocks *m)
 Allocate a memory block from a block of memory declared with MEMB().
char memb_free (struct memb_blocks *m, void *ptr)
 Deallocate a memory block from a memory block previously declared with MEMB().
+


Define Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define MEMB name,
structure,
num   ) 
+
+ + + + + +
+   + + +

+Value:

static char MEMB_CONCAT(name,_memb_count)[num]; \
+        static structure MEMB_CONCAT(name,_memb_mem)[num]; \
+        static struct memb_blocks name = {sizeof(structure), num, \
+                                          MEMB_CONCAT(name,_memb_count), \
+                                          (void *)MEMB_CONCAT(name,_memb_mem)}
+
Declare a memory block. +

+This macro is used to staticall declare a block of memory that can be used by the block allocation functions. The macro statically declares a C array with a size that matches the specified number of blocks and their individual sizes.

+Example:

MEMB(connections, sizeof(struct connection), 16);
+

+

Parameters:
+ + + + +
name The name of the memory block (later used with memb_init(), memb_alloc() and memb_free()).
size The size of each memory chunk, in bytes.
num The total number of memory chunks in the block.
+
+
Examples:
+telnetd.c.
+

+Definition at line 98 of file memb.h.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void * memb_alloc struct memb_blocks m  ) 
+
+ + + + + +
+   + + +

+Allocate a memory block from a block of memory declared with MEMB(). +

+

Parameters:
+ + +
m A memory block previosly declared with MEMB().
+
+
Examples:
+telnetd.c.
+

+Definition at line 59 of file memb.c. +

+References memb_blocks::count, memb_blocks::mem, memb_blocks::num, and memb_blocks::size.

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
char memb_free struct memb_blocks m,
void *  ptr
+
+ + + + + +
+   + + +

+Deallocate a memory block from a memory block previously declared with MEMB(). +

+

Parameters:
+ + + +
m m A memory block previosly declared with MEMB().
ptr A pointer to the memory block that is to be deallocated.
+
+
Returns:
The new reference count for the memory block (should be 0 if successfully deallocated) or -1 if the pointer "ptr" did not point to a legal memory block.
+
Examples:
+telnetd.c.
+

+Definition at line 79 of file memb.c. +

+References memb_blocks::count, memb_blocks::mem, and memb_blocks::size.

+

+ + + + +
+ + + + + + + + + +
void memb_init struct memb_blocks m  ) 
+
+ + + + + +
+   + + +

+Initialize a memory block that was declared with MEMB(). +

+

Parameters:
+ + +
m A memory block previosly declared with MEMB().
+
+
Examples:
+telnetd.c.
+

+Definition at line 52 of file memb.c. +

+References memb_blocks::count, memb_blocks::mem, memb_blocks::num, and memb_blocks::size.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00160.html b/components/net/uip/doc/html/a00160.html new file mode 100644 index 0000000000000000000000000000000000000000..ffd42f9d8aa1147074a7065893ba8e11410482a2 --- /dev/null +++ b/components/net/uip/doc/html/a00160.html @@ -0,0 +1,284 @@ + + +uIP 1.0: DNS resolver + + + + + +

DNS resolver
+ +[Applications] +


Detailed Description

+The uIP DNS resolver functions are used to lookup a hostname and map it to a numerical IP address. +

+It maintains a list of resolved hostnames that can be queried with the resolv_lookup() function. New hostnames can be resolved using the resolv_query() function.

+When a hostname has been resolved (or found to be non-existant), the resolver code calls a callback function called resolv_found() that must be implemented by the module that uses the resolver. +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  resolv.h
 DNS resolver code header file.
file  resolv.c
 DNS host name to IP address resolver.

Defines

+#define UIP_UDP_APPCALL   resolv_appcall
+#define NULL   (void *)0
+#define MAX_RETRIES   8
+#define RESOLV_ENTRIES   4

Functions

+void resolv_appcall (void)
void resolv_found (char *name, u16_t *ipaddr)
 Callback function which is called when a hostname is found.
void resolv_conf (u16_t *dnsserver)
 Configure which DNS server to use for queries.
u16_tresolv_getserver (void)
 Obtain the currently configured DNS server.
+void resolv_init (void)
 Initalize the resolver.
u16_tresolv_lookup (char *name)
 Look up a hostname in the array of known hostnames.
void resolv_query (char *name)
 Queues a name so that a question for the name will be sent out.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void resolv_conf u16_t dnsserver  ) 
+
+ + + + + +
+   + + +

+Configure which DNS server to use for queries. +

+

Parameters:
+ + +
dnsserver A pointer to a 4-byte representation of the IP address of the DNS server to be configured.
+
+
Examples:
+resolv.c, and resolv.h.
+

+Definition at line 438 of file resolv.c. +

+References HTONS, NULL, uip_udp_new(), and uip_udp_remove.

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void resolv_found char *  name,
u16_t ipaddr
+
+ + + + + +
+   + + +

+Callback function which is called when a hostname is found. +

+This function must be implemented by the module that uses the DNS resolver. It is called when a hostname is found, or when a hostname was not found.

+

Parameters:
+ + + +
name A pointer to the name that was looked up.
ipaddr A pointer to a 4-byte array containing the IP address of the hostname, or NULL if the hostname could not be found.
+
+
Examples:
+resolv.c, and resolv.h.
+

+ + + + +
+ + + + + + + + + +
u16_t * resolv_getserver void   ) 
+
+ + + + + +
+   + + +

+Obtain the currently configured DNS server. +

+

Returns:
A pointer to a 4-byte representation of the IP address of the currently configured DNS server or NULL if no DNS server has been configured.
+
Examples:
+resolv.c, and resolv.h.
+

+Definition at line 422 of file resolv.c. +

+References NULL, and uip_udp_conn::ripaddr.

+

+ + + + +
+ + + + + + + + + +
u16_t * resolv_lookup char *  name  ) 
+
+ + + + + +
+   + + +

+Look up a hostname in the array of known hostnames. +

+

Note:
This function only looks in the internal array of known hostnames, it does not send out a query for the hostname if none was found. The function resolv_query() can be used to send a query for a hostname.
+
Returns:
A pointer to a 4-byte representation of the hostname's IP address, or NULL if the hostname was not found in the array of hostnames.
+
Examples:
+resolv.c, resolv.h, and webclient.c.
+

+Definition at line 396 of file resolv.c. +

+References RESOLV_ENTRIES, and STATE_DONE. +

+Referenced by webclient_appcall(), and webclient_get().

+

+ + + + +
+ + + + + + + + + +
void resolv_query char *  name  ) 
+
+ + + + + +
+   + + +

+Queues a name so that a question for the name will be sent out. +

+

Parameters:
+ + +
name The hostname that is to be queried.
+
+
Examples:
+resolv.c, resolv.h, and webclient.c.
+

+Definition at line 350 of file resolv.c. +

+References RESOLV_ENTRIES, and STATE_UNUSED. +

+Referenced by webclient_appcall().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00161.html b/components/net/uip/doc/html/a00161.html new file mode 100644 index 0000000000000000000000000000000000000000..16d6fbb9198890530414c6f48b7770be96233905 --- /dev/null +++ b/components/net/uip/doc/html/a00161.html @@ -0,0 +1,257 @@ + + +uIP 1.0: SMTP E-mail sender + + + + + +

SMTP E-mail sender
+ +[Applications] +


Detailed Description

+The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is the standard way of sending and transfering e-mail on the Internet. +

+This simple example implementation is intended as an example of how to implement protocols in uIP, and is able to send out e-mail but has not been extensively tested. +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  smtp.h
 SMTP header file.
file  smtp.c
 SMTP example implementation.

Data Structures

struct  smtp_state

Defines

+#define SMTP_ERR_OK   0
 Error number that signifies a non-error condition.
+#define SMTP_SEND(to, cc, from, subject, msg)   smtp_send(to, cc, from, subject, msg, strlen(msg))
+#define ISO_nl   0x0a
+#define ISO_cr   0x0d
+#define ISO_period   0x2e
+#define ISO_2   0x32
+#define ISO_3   0x33
+#define ISO_4   0x34
+#define ISO_5   0x35

Functions

void smtp_done (unsigned char error)
 Callback function that is called when an e-mail transmission is done.
+void smtp_init (void)
+void smtp_appcall (void)
void smtp_configure (char *lhostname, void *server)
 Specificy an SMTP server and hostname.
unsigned char smtp_send (char *to, char *cc, char *from, char *subject, char *msg, u16_t msglen)
 Send an e-mail.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void smtp_configure char *  lhostname,
void *  server
+
+ + + + + +
+   + + +

+Specificy an SMTP server and hostname. +

+This function is used to configure the SMTP module with an SMTP server and the hostname of the host.

+

Parameters:
+ + + +
lhostname The hostname of the uIP host.
server A pointer to a 4-byte array representing the IP address of the SMTP server to be configured.
+
+ +

+Definition at line 216 of file smtp.c. +

+References uip_ipaddr_copy.

+

+ + + + +
+ + + + + + + + + +
void smtp_done unsigned char  error  ) 
+
+ + + + + +
+   + + +

+Callback function that is called when an e-mail transmission is done. +

+This function must be implemented by the module that uses the SMTP module.

+

Parameters:
+ + +
error The number of the error if an error occured, or SMTP_ERR_OK.
+
+
Examples:
+smtp.c, and smtp.h.
+

+Referenced by smtp_appcall().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
unsigned char smtp_send char *  to,
char *  cc,
char *  from,
char *  subject,
char *  msg,
u16_t  msglen
+
+ + + + + +
+   + + +

+Send an e-mail. +

+

Parameters:
+ + + + + + + +
to The e-mail address of the receiver of the e-mail.
cc The e-mail address of the CC: receivers of the e-mail.
from The e-mail address of the sender of the e-mail.
subject The subject of the e-mail.
msg The actual e-mail message.
msglen The length of the e-mail message.
+
+ +

+Definition at line 233 of file smtp.c. +

+References smtp_state::from, HTONS, smtp_state::msg, smtp_state::msglen, NULL, PSOCK_INIT, smtp_state::subject, smtp_state::to, and uip_connect().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00162.html b/components/net/uip/doc/html/a00162.html new file mode 100644 index 0000000000000000000000000000000000000000..8fada3bd13d01234854ae56e92cbd23f4b8de540 --- /dev/null +++ b/components/net/uip/doc/html/a00162.html @@ -0,0 +1,56 @@ + + +uIP 1.0: Hello, world + + + + + +

Hello, world
+ +[Applications] +


Detailed Description

+A small example showing how to write applications with protosockets. +

+ +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + +

Files

file  hello-world.h
 Header file for an example of how to write uIP applications with protosockets.
file  hello-world.c
 An example of how to write uIP applications with protosockets.

Data Structures

struct  hello_world_state

Defines

+#define UIP_APPCALL   hello_world_appcall

Functions

+void hello_world_appcall (void)
+void hello_world_init (void)
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00163.html b/components/net/uip/doc/html/a00163.html new file mode 100644 index 0000000000000000000000000000000000000000..96515e2f4a0cda540ac7bfa6530c4b5a046ccdf3 --- /dev/null +++ b/components/net/uip/doc/html/a00163.html @@ -0,0 +1,533 @@ + + +uIP 1.0: Web client + + + + + +

Web client
+ +[Applications] +


Detailed Description

+This example shows a HTTP client that is able to download web pages and files from web servers. +

+It requires a number of callback functions to be implemented by the module that utilizes the code: webclient_datahandler(), webclient_connected(), webclient_timedout(), webclient_aborted(), webclient_closed(). +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  webclient.h
 Header file for the HTTP client.
file  webclient.c
 Implementation of the HTTP client.

Data Structures

struct  webclient_state

Defines

+#define WEBCLIENT_CONF_MAX_URLLEN   100
+#define UIP_APPCALL   webclient_appcall
+#define WEBCLIENT_TIMEOUT   100
+#define WEBCLIENT_STATE_STATUSLINE   0
+#define WEBCLIENT_STATE_HEADERS   1
+#define WEBCLIENT_STATE_DATA   2
+#define WEBCLIENT_STATE_CLOSE   3
+#define HTTPFLAG_NONE   0
+#define HTTPFLAG_OK   1
+#define HTTPFLAG_MOVED   2
+#define HTTPFLAG_ERROR   3
+#define ISO_nl   0x0a
+#define ISO_cr   0x0d
+#define ISO_space   0x20

Typedefs

+typedef webclient_state uip_tcp_appstate_t

Functions

void webclient_datahandler (char *data, u16_t len)
 Callback function that is called from the webclient code when HTTP data has been received.
void webclient_connected (void)
 Callback function that is called from the webclient code when the HTTP connection has been connected to the web server.
void webclient_timedout (void)
 Callback function that is called from the webclient code if the HTTP connection to the web server has timed out.
void webclient_aborted (void)
 Callback function that is called from the webclient code if the HTTP connection to the web server has been aborted by the web server.
void webclient_closed (void)
 Callback function that is called from the webclient code when the HTTP connection to the web server has been closed.
+void webclient_init (void)
 Initialize the webclient module.
unsigned char webclient_get (char *host, u16_t port, char *file)
 Open an HTTP connection to a web server and ask for a file using the GET method.
+void webclient_close (void)
 Close the currently open HTTP connection.
+void webclient_appcall (void)
char * webclient_mimetype (void)
 Obtain the MIME type of the current HTTP data stream.
char * webclient_filename (void)
 Obtain the filename of the current HTTP data stream.
char * webclient_hostname (void)
 Obtain the hostname of the current HTTP data stream.
unsigned short webclient_port (void)
 Obtain the port number of the current HTTP data stream.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void webclient_aborted void   ) 
+
+ + + + + +
+   + + +

+Callback function that is called from the webclient code if the HTTP connection to the web server has been aborted by the web server. +

+This function must be implemented by the module that uses the webclient code.

Examples:
+webclient.c, and webclient.h.
+

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + + + + + + +
void webclient_closed void   ) 
+
+ + + + + +
+   + + +

+Callback function that is called from the webclient code when the HTTP connection to the web server has been closed. +

+This function must be implemented by the module that uses the webclient code.

Examples:
+webclient.c, and webclient.h.
+

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + + + + + + +
void webclient_connected void   ) 
+
+ + + + + +
+   + + +

+Callback function that is called from the webclient code when the HTTP connection has been connected to the web server. +

+This function must be implemented by the module that uses the webclient code.

Examples:
+webclient.c, and webclient.h.
+

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void webclient_datahandler char *  data,
u16_t  len
+
+ + + + + +
+   + + +

+Callback function that is called from the webclient code when HTTP data has been received. +

+This function must be implemented by the module that uses the webclient code. The function is called from the webclient module when HTTP data has been received. The function is not called when HTTP headers are received, only for the actual data.

+

Note:
This function is called many times, repetedly, when data is being received, and not once when all data has been received.
+
Parameters:
+ + + +
data A pointer to the data that has been received.
len The length of the data that has been received.
+
+
Examples:
+webclient.c, and webclient.h.
+

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + + + + + + +
char * webclient_filename void   ) 
+
+ + + + + +
+   + + +

+Obtain the filename of the current HTTP data stream. +

+The filename of an HTTP request may be changed by the web server, and may therefore not be the same as when the original GET request was made with webclient_get(). This function is used for obtaining the current filename.

+

Returns:
A pointer to the current filename.
+
Examples:
+webclient.c, and webclient.h.
+

+Definition at line 93 of file webclient.c. +

+References webclient_state::file.

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
unsigned char webclient_get char *  host,
u16_t  port,
char *  file
+
+ + + + + +
+   + + +

+Open an HTTP connection to a web server and ask for a file using the GET method. +

+This function opens an HTTP connection to the specified web server and requests the specified file using the GET method. When the HTTP connection has been connected, the webclient_connected() callback function is called and when the HTTP data arrives the webclient_datahandler() callback function is called.

+The callback function webclient_timedout() is called if the web server could not be contacted, and the webclient_aborted() callback function is called if the HTTP connection is aborted by the web server.

+When the HTTP request has been completed and the HTTP connection is closed, the webclient_closed() callback function will be called.

+

Note:
If the function is passed a host name, it must already be in the resolver cache in order for the function to connect to the web server. It is therefore up to the calling module to implement the resolver calls and the signal handler used for reporting a resolv query answer.
+
Parameters:
+ + + + +
host A pointer to a string containing either a host name or a numerical IP address in dotted decimal notation (e.g., 192.168.23.1).
port The port number to which to connect, in host byte order.
file A pointer to the name of the file to get.
+
+
Return values:
+ + + +
0 if the host name could not be found in the cache, or if a TCP connection could not be created.
1 if the connection was initiated.
+
+
Examples:
+webclient.c, and webclient.h.
+

+Definition at line 140 of file webclient.c. +

+References webclient_state::file, webclient_state::host, htons(), NULL, webclient_state::port, resolv_lookup(), and uip_connect(). +

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + + + + + + +
char * webclient_hostname void   ) 
+
+ + + + + +
+   + + +

+Obtain the hostname of the current HTTP data stream. +

+The hostname of the web server of an HTTP request may be changed by the web server, and may therefore not be the same as when the original GET request was made with webclient_get(). This function is used for obtaining the current hostname.

+

Returns:
A pointer to the current hostname.
+
Examples:
+webclient.c, and webclient.h.
+

+Definition at line 99 of file webclient.c. +

+References webclient_state::host.

+

+ + + + +
+ + + + + + + + + +
char * webclient_mimetype void   ) 
+
+ + + + + +
+   + + +

+Obtain the MIME type of the current HTTP data stream. +

+

Returns:
A pointer to a string contaning the MIME type. The string may be empty if no MIME type was reported by the web server.
+
Examples:
+webclient.c, and webclient.h.
+

+Definition at line 87 of file webclient.c. +

+References webclient_state::mimetype.

+

+ + + + +
+ + + + + + + + + +
unsigned short webclient_port void   ) 
+
+ + + + + +
+   + + +

+Obtain the port number of the current HTTP data stream. +

+The port number of an HTTP request may be changed by the web server, and may therefore not be the same as when the original GET request was made with webclient_get(). This function is used for obtaining the current port number.

+

Returns:
The port number of the current HTTP data stream, in host byte order.
+
Examples:
+webclient.c, and webclient.h.
+

+Definition at line 105 of file webclient.c. +

+References webclient_state::port.

+

+ + + + +
+ + + + + + + + + +
void webclient_timedout void   ) 
+
+ + + + + +
+   + + +

+Callback function that is called from the webclient code if the HTTP connection to the web server has timed out. +

+This function must be implemented by the module that uses the webclient code.

Examples:
+webclient.c, and webclient.h.
+

+Referenced by webclient_appcall().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00164.html b/components/net/uip/doc/html/a00164.html new file mode 100644 index 0000000000000000000000000000000000000000..67c80c701281cffed35a0c950e4164ddd5faa1bf --- /dev/null +++ b/components/net/uip/doc/html/a00164.html @@ -0,0 +1,172 @@ + + +uIP 1.0: Web server + + + + + +

Web server
+ +[Applications] +


Detailed Description

+The uIP web server is a very simplistic implementation of an HTTP server. +

+It can serve web pages and files from a read-only ROM filesystem, and provides a very small scripting language. +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  httpd-cgi.h
 Web server script interface header file.
file  httpd-cgi.c
 Web server script interface.
file  httpd.c
 Web server.

Data Structures

struct  httpd_cgi_call

Defines

#define HTTPD_CGI_CALL(name, str, function)
 HTTPD CGI function declaration.
+#define STATE_WAITING   0
+#define STATE_OUTPUT   1
+#define ISO_nl   0x0a
+#define ISO_space   0x20
+#define ISO_bang   0x21
+#define ISO_percent   0x25
+#define ISO_period   0x2e
+#define ISO_slash   0x2f
+#define ISO_colon   0x3a

Functions

+httpd_cgifunction httpd_cgi (char *name)
+void httpd_appcall (void)
void httpd_init (void)
 Initialize the web server.
+


Define Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define HTTPD_CGI_CALL name,
str,
function   ) 
+
+ + + + + +
+   + + +

+HTTPD CGI function declaration. +

+

Parameters:
+ + + + +
name The C variable name of the function
str The string name of the function, used in the script file
function A pointer to the function that implements it
+
+This macro is used for declaring a HTTPD CGI function. This function is then added to the list of HTTPD CGI functions with the httpd_cgi_add() function. +

+Definition at line 77 of file httpd-cgi.h.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void httpd_init void   ) 
+
+ + + + + +
+   + + +

+Initialize the web server. +

+This function initializes the web server and should be called at system boot-up. +

+Definition at line 333 of file httpd.c. +

+References HTONS, and uip_listen().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00168.html b/components/net/uip/doc/html/a00168.html new file mode 100644 index 0000000000000000000000000000000000000000..955e16759a1e73334cc5e57a85eb1543f51e46a3 --- /dev/null +++ b/components/net/uip/doc/html/a00168.html @@ -0,0 +1,381 @@ + + +uIP 1.0: apps/dhcpc/dhcpc.c Source File + + + + + + +

apps/dhcpc/dhcpc.c

00001 /*
+00002  * Copyright (c) 2005, Swedish Institute of Computer Science
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * @(#)$Id: dhcpc.c,v 1.2 2006/06/11 21:46:37 adam Exp $
+00032  */
+00033 
+00034 #include <stdio.h>
+00035 #include <string.h>
+00036 
+00037 #include "uip.h"
+00038 #include "dhcpc.h"
+00039 #include "timer.h"
+00040 #include "pt.h"
+00041 
+00042 #define STATE_INITIAL         0
+00043 #define STATE_SENDING         1
+00044 #define STATE_OFFER_RECEIVED  2
+00045 #define STATE_CONFIG_RECEIVED 3
+00046 
+00047 static struct dhcpc_state s;
+00048 
+00049 struct dhcp_msg {
+00050   u8_t op, htype, hlen, hops;
+00051   u8_t xid[4];
+00052   u16_t secs, flags;
+00053   u8_t ciaddr[4];
+00054   u8_t yiaddr[4];
+00055   u8_t siaddr[4];
+00056   u8_t giaddr[4];
+00057   u8_t chaddr[16];
+00058 #ifndef UIP_CONF_DHCP_LIGHT
+00059   u8_t sname[64];
+00060   u8_t file[128];
+00061 #endif
+00062   u8_t options[312];
+00063 };
+00064 
+00065 #define BOOTP_BROADCAST 0x8000
+00066 
+00067 #define DHCP_REQUEST        1
+00068 #define DHCP_REPLY          2
+00069 #define DHCP_HTYPE_ETHERNET 1
+00070 #define DHCP_HLEN_ETHERNET  6
+00071 #define DHCP_MSG_LEN      236
+00072 
+00073 #define DHCPC_SERVER_PORT  67
+00074 #define DHCPC_CLIENT_PORT  68
+00075 
+00076 #define DHCPDISCOVER  1
+00077 #define DHCPOFFER     2
+00078 #define DHCPREQUEST   3
+00079 #define DHCPDECLINE   4
+00080 #define DHCPACK       5
+00081 #define DHCPNAK       6
+00082 #define DHCPRELEASE   7
+00083 
+00084 #define DHCP_OPTION_SUBNET_MASK   1
+00085 #define DHCP_OPTION_ROUTER        3
+00086 #define DHCP_OPTION_DNS_SERVER    6
+00087 #define DHCP_OPTION_REQ_IPADDR   50
+00088 #define DHCP_OPTION_LEASE_TIME   51
+00089 #define DHCP_OPTION_MSG_TYPE     53
+00090 #define DHCP_OPTION_SERVER_ID    54
+00091 #define DHCP_OPTION_REQ_LIST     55
+00092 #define DHCP_OPTION_END         255
+00093 
+00094 static const u8_t xid[4] = {0xad, 0xde, 0x12, 0x23};
+00095 static const u8_t magic_cookie[4] = {99, 130, 83, 99};
+00096 /*---------------------------------------------------------------------------*/
+00097 static u8_t *
+00098 add_msg_type(u8_t *optptr, u8_t type)
+00099 {
+00100   *optptr++ = DHCP_OPTION_MSG_TYPE;
+00101   *optptr++ = 1;
+00102   *optptr++ = type;
+00103   return optptr;
+00104 }
+00105 /*---------------------------------------------------------------------------*/
+00106 static u8_t *
+00107 add_server_id(u8_t *optptr)
+00108 {
+00109   *optptr++ = DHCP_OPTION_SERVER_ID;
+00110   *optptr++ = 4;
+00111   memcpy(optptr, s.serverid, 4);
+00112   return optptr + 4;
+00113 }
+00114 /*---------------------------------------------------------------------------*/
+00115 static u8_t *
+00116 add_req_ipaddr(u8_t *optptr)
+00117 {
+00118   *optptr++ = DHCP_OPTION_REQ_IPADDR;
+00119   *optptr++ = 4;
+00120   memcpy(optptr, s.ipaddr, 4);
+00121   return optptr + 4;
+00122 }
+00123 /*---------------------------------------------------------------------------*/
+00124 static u8_t *
+00125 add_req_options(u8_t *optptr)
+00126 {
+00127   *optptr++ = DHCP_OPTION_REQ_LIST;
+00128   *optptr++ = 3;
+00129   *optptr++ = DHCP_OPTION_SUBNET_MASK;
+00130   *optptr++ = DHCP_OPTION_ROUTER;
+00131   *optptr++ = DHCP_OPTION_DNS_SERVER;
+00132   return optptr;
+00133 }
+00134 /*---------------------------------------------------------------------------*/
+00135 static u8_t *
+00136 add_end(u8_t *optptr)
+00137 {
+00138   *optptr++ = DHCP_OPTION_END;
+00139   return optptr;
+00140 }
+00141 /*---------------------------------------------------------------------------*/
+00142 static void
+00143 create_msg(register struct dhcp_msg *m)
+00144 {
+00145   m->op = DHCP_REQUEST;
+00146   m->htype = DHCP_HTYPE_ETHERNET;
+00147   m->hlen = s.mac_len;
+00148   m->hops = 0;
+00149   memcpy(m->xid, xid, sizeof(m->xid));
+00150   m->secs = 0;
+00151   m->flags = HTONS(BOOTP_BROADCAST); /*  Broadcast bit. */
+00152   /*  uip_ipaddr_copy(m->ciaddr, uip_hostaddr);*/
+00153   memcpy(m->ciaddr, uip_hostaddr, sizeof(m->ciaddr));
+00154   memset(m->yiaddr, 0, sizeof(m->yiaddr));
+00155   memset(m->siaddr, 0, sizeof(m->siaddr));
+00156   memset(m->giaddr, 0, sizeof(m->giaddr));
+00157   memcpy(m->chaddr, s.mac_addr, s.mac_len);
+00158   memset(&m->chaddr[s.mac_len], 0, sizeof(m->chaddr) - s.mac_len);
+00159 #ifndef UIP_CONF_DHCP_LIGHT
+00160   memset(m->sname, 0, sizeof(m->sname));
+00161   memset(m->file, 0, sizeof(m->file));
+00162 #endif
+00163 
+00164   memcpy(m->options, magic_cookie, sizeof(magic_cookie));
+00165 }
+00166 /*---------------------------------------------------------------------------*/
+00167 static void
+00168 send_discover(void)
+00169 {
+00170   u8_t *end;
+00171   struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata;
+00172 
+00173   create_msg(m);
+00174 
+00175   end = add_msg_type(&m->options[4], DHCPDISCOVER);
+00176   end = add_req_options(end);
+00177   end = add_end(end);
+00178 
+00179   uip_send(uip_appdata, end - (u8_t *)uip_appdata);
+00180 }
+00181 /*---------------------------------------------------------------------------*/
+00182 static void
+00183 send_request(void)
+00184 {
+00185   u8_t *end;
+00186   struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata;
+00187 
+00188   create_msg(m);
+00189   
+00190   end = add_msg_type(&m->options[4], DHCPREQUEST);
+00191   end = add_server_id(end);
+00192   end = add_req_ipaddr(end);
+00193   end = add_end(end);
+00194   
+00195   uip_send(uip_appdata, end - (u8_t *)uip_appdata);
+00196 }
+00197 /*---------------------------------------------------------------------------*/
+00198 static u8_t
+00199 parse_options(u8_t *optptr, int len)
+00200 {
+00201   u8_t *end = optptr + len;
+00202   u8_t type = 0;
+00203 
+00204   while(optptr < end) {
+00205     switch(*optptr) {
+00206     case DHCP_OPTION_SUBNET_MASK:
+00207       memcpy(s.netmask, optptr + 2, 4);
+00208       break;
+00209     case DHCP_OPTION_ROUTER:
+00210       memcpy(s.default_router, optptr + 2, 4);
+00211       break;
+00212     case DHCP_OPTION_DNS_SERVER:
+00213       memcpy(s.dnsaddr, optptr + 2, 4);
+00214       break;
+00215     case DHCP_OPTION_MSG_TYPE:
+00216       type = *(optptr + 2);
+00217       break;
+00218     case DHCP_OPTION_SERVER_ID:
+00219       memcpy(s.serverid, optptr + 2, 4);
+00220       break;
+00221     case DHCP_OPTION_LEASE_TIME:
+00222       memcpy(s.lease_time, optptr + 2, 4);
+00223       break;
+00224     case DHCP_OPTION_END:
+00225       return type;
+00226     }
+00227 
+00228     optptr += optptr[1] + 2;
+00229   }
+00230   return type;
+00231 }
+00232 /*---------------------------------------------------------------------------*/
+00233 static u8_t
+00234 parse_msg(void)
+00235 {
+00236   struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata;
+00237   
+00238   if(m->op == DHCP_REPLY &&
+00239      memcmp(m->xid, xid, sizeof(xid)) == 0 &&
+00240      memcmp(m->chaddr, s.mac_addr, s.mac_len) == 0) {
+00241     memcpy(s.ipaddr, m->yiaddr, 4);
+00242     return parse_options(&m->options[4], uip_datalen());
+00243   }
+00244   return 0;
+00245 }
+00246 /*---------------------------------------------------------------------------*/
+00247 static
+00248 PT_THREAD(handle_dhcp(void))
+00249 {
+00250   PT_BEGIN(&s.pt);
+00251   
+00252   /* try_again:*/
+00253   s.state = STATE_SENDING;
+00254   s.ticks = CLOCK_SECOND;
+00255 
+00256   do {
+00257     send_discover();
+00258     timer_set(&s.timer, s.ticks);
+00259     PT_WAIT_UNTIL(&s.pt, uip_newdata() || timer_expired(&s.timer));
+00260 
+00261     if(uip_newdata() && parse_msg() == DHCPOFFER) {
+00262       s.state = STATE_OFFER_RECEIVED;
+00263       break;
+00264     }
+00265 
+00266     if(s.ticks < CLOCK_SECOND * 60) {
+00267       s.ticks *= 2;
+00268     }
+00269   } while(s.state != STATE_OFFER_RECEIVED);
+00270   
+00271   s.ticks = CLOCK_SECOND;
+00272 
+00273   do {
+00274     send_request();
+00275     timer_set(&s.timer, s.ticks);
+00276     PT_WAIT_UNTIL(&s.pt, uip_newdata() || timer_expired(&s.timer));
+00277 
+00278     if(uip_newdata() && parse_msg() == DHCPACK) {
+00279       s.state = STATE_CONFIG_RECEIVED;
+00280       break;
+00281     }
+00282 
+00283     if(s.ticks <= CLOCK_SECOND * 10) {
+00284       s.ticks += CLOCK_SECOND;
+00285     } else {
+00286       PT_RESTART(&s.pt);
+00287     }
+00288   } while(s.state != STATE_CONFIG_RECEIVED);
+00289   
+00290 #if 0
+00291   printf("Got IP address %d.%d.%d.%d\n",
+00292          uip_ipaddr1(s.ipaddr), uip_ipaddr2(s.ipaddr),
+00293          uip_ipaddr3(s.ipaddr), uip_ipaddr4(s.ipaddr));
+00294   printf("Got netmask %d.%d.%d.%d\n",
+00295          uip_ipaddr1(s.netmask), uip_ipaddr2(s.netmask),
+00296          uip_ipaddr3(s.netmask), uip_ipaddr4(s.netmask));
+00297   printf("Got DNS server %d.%d.%d.%d\n",
+00298          uip_ipaddr1(s.dnsaddr), uip_ipaddr2(s.dnsaddr),
+00299          uip_ipaddr3(s.dnsaddr), uip_ipaddr4(s.dnsaddr));
+00300   printf("Got default router %d.%d.%d.%d\n",
+00301          uip_ipaddr1(s.default_router), uip_ipaddr2(s.default_router),
+00302          uip_ipaddr3(s.default_router), uip_ipaddr4(s.default_router));
+00303   printf("Lease expires in %ld seconds\n",
+00304          ntohs(s.lease_time[0])*65536ul + ntohs(s.lease_time[1]));
+00305 #endif
+00306 
+00307   dhcpc_configured(&s);
+00308   
+00309   /*  timer_stop(&s.timer);*/
+00310 
+00311   /*
+00312    * PT_END restarts the thread so we do this instead. Eventually we
+00313    * should reacquire expired leases here.
+00314    */
+00315   while(1) {
+00316     PT_YIELD(&s.pt);
+00317   }
+00318 
+00319   PT_END(&s.pt);
+00320 }
+00321 /*---------------------------------------------------------------------------*/
+00322 void
+00323 dhcpc_init(const void *mac_addr, int mac_len)
+00324 {
+00325   uip_ipaddr_t addr;
+00326   
+00327   s.mac_addr = mac_addr;
+00328   s.mac_len  = mac_len;
+00329 
+00330   s.state = STATE_INITIAL;
+00331   uip_ipaddr(addr, 255,255,255,255);
+00332   s.conn = uip_udp_new(&addr, HTONS(DHCPC_SERVER_PORT));
+00333   if(s.conn != NULL) {
+00334     uip_udp_bind(s.conn, HTONS(DHCPC_CLIENT_PORT));
+00335   }
+00336   PT_INIT(&s.pt);
+00337 }
+00338 /*---------------------------------------------------------------------------*/
+00339 void
+00340 dhcpc_appcall(void)
+00341 {
+00342   handle_dhcp();
+00343 }
+00344 /*---------------------------------------------------------------------------*/
+00345 void
+00346 dhcpc_request(void)
+00347 {
+00348   u16_t ipaddr[2];
+00349   
+00350   if(s.state == STATE_INITIAL) {
+00351     uip_ipaddr(ipaddr, 0,0,0,0);
+00352     uip_sethostaddr(ipaddr);
+00353     /*    handle_dhcp(PROCESS_EVENT_NONE, NULL);*/
+00354   }
+00355 }
+00356 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00169.html b/components/net/uip/doc/html/a00169.html new file mode 100644 index 0000000000000000000000000000000000000000..c3ed91306c2bc206b2c5b87f5cb353ba3f33dea3 --- /dev/null +++ b/components/net/uip/doc/html/a00169.html @@ -0,0 +1,93 @@ + + +uIP 1.0: apps/dhcpc/dhcpc.h Source File + + + + + + +

apps/dhcpc/dhcpc.h

00001 /*
+00002  * Copyright (c) 2005, Swedish Institute of Computer Science
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * @(#)$Id: dhcpc.h,v 1.3 2006/06/11 21:46:37 adam Exp $
+00032  */
+00033 #ifndef __DHCPC_H__
+00034 #define __DHCPC_H__
+00035 
+00036 #include "timer.h"
+00037 #include "pt.h"
+00038 
+00039 struct dhcpc_state {
+00040   struct pt pt;
+00041   char state;
+00042   struct uip_udp_conn *conn;
+00043   struct timer timer;
+00044   u16_t ticks;
+00045   const void *mac_addr;
+00046   int mac_len;
+00047   
+00048   u8_t serverid[4];
+00049 
+00050   u16_t lease_time[2];
+00051   u16_t ipaddr[2];
+00052   u16_t netmask[2];
+00053   u16_t dnsaddr[2];
+00054   u16_t default_router[2];
+00055 };
+00056 
+00057 void dhcpc_init(const void *mac_addr, int mac_len);
+00058 void dhcpc_request(void);
+00059 
+00060 void dhcpc_appcall(void);
+00061 
+00062 void dhcpc_configured(const struct dhcpc_state *s);
+00063 
+00064 typedef struct dhcpc_state uip_udp_appstate_t;
+00065 #define UIP_UDP_APPCALL dhcpc_appcall
+00066 
+00067 
+00068 #endif /* __DHCPC_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00170.html b/components/net/uip/doc/html/a00170.html new file mode 100644 index 0000000000000000000000000000000000000000..20a39c092df0bfa4935449657f6ea16c43f57f02 --- /dev/null +++ b/components/net/uip/doc/html/a00170.html @@ -0,0 +1,125 @@ + + +uIP 1.0: apps/hello-world/hello-world.c Source File + + + + + + +

apps/hello-world/hello-world.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup helloworld
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  *         An example of how to write uIP applications
+00009  *         with protosockets.
+00010  * \author
+00011  *         Adam Dunkels <adam@sics.se>
+00012  */
+00013 
+00014 /*
+00015  * This is a short example of how to write uIP applications using
+00016  * protosockets.
+00017  */
+00018 
+00019 /*
+00020  * We define the application state (struct hello_world_state) in the
+00021  * hello-world.h file, so we need to include it here. We also include
+00022  * uip.h (since this cannot be included in hello-world.h) and
+00023  * <string.h>, since we use the memcpy() function in the code.
+00024  */
+00025 #include "hello-world.h"
+00026 #include "uip.h"
+00027 #include <string.h>
+00028 
+00029 /*
+00030  * Declaration of the protosocket function that handles the connection
+00031  * (defined at the end of the code).
+00032  */
+00033 static int handle_connection(struct hello_world_state *s);
+00034 /*---------------------------------------------------------------------------*/
+00035 /*
+00036  * The initialization function. We must explicitly call this function
+00037  * from the system initialization code, some time after uip_init() is
+00038  * called.
+00039  */
+00040 void
+00041 hello_world_init(void)
+00042 {
+00043   /* We start to listen for connections on TCP port 1000. */
+00044   uip_listen(HTONS(1000));
+00045 }
+00046 /*---------------------------------------------------------------------------*/
+00047 /*
+00048  * In hello-world.h we have defined the UIP_APPCALL macro to
+00049  * hello_world_appcall so that this funcion is uIP's application
+00050  * function. This function is called whenever an uIP event occurs
+00051  * (e.g. when a new connection is established, new data arrives, sent
+00052  * data is acknowledged, data needs to be retransmitted, etc.).
+00053  */
+00054 void
+00055 hello_world_appcall(void)
+00056 {
+00057   /*
+00058    * The uip_conn structure has a field called "appstate" that holds
+00059    * the application state of the connection. We make a pointer to
+00060    * this to access it easier.
+00061    */
+00062   struct hello_world_state *s = &(uip_conn->appstate);
+00063 
+00064   /*
+00065    * If a new connection was just established, we should initialize
+00066    * the protosocket in our applications' state structure.
+00067    */
+00068   if(uip_connected()) {
+00069     PSOCK_INIT(&s->p, s->inputbuffer, sizeof(s->inputbuffer));
+00070   }
+00071 
+00072   /*
+00073    * Finally, we run the protosocket function that actually handles
+00074    * the communication. We pass it a pointer to the application state
+00075    * of the current connection.
+00076    */
+00077   handle_connection(s);
+00078 }
+00079 /*---------------------------------------------------------------------------*/
+00080 /*
+00081  * This is the protosocket function that handles the communication. A
+00082  * protosocket function must always return an int, but must never
+00083  * explicitly return - all return statements are hidden in the PSOCK
+00084  * macros.
+00085  */
+00086 static int
+00087 handle_connection(struct hello_world_state *s)
+00088 {
+00089   PSOCK_BEGIN(&s->p);
+00090 
+00091   PSOCK_SEND_STR(&s->p, "Hello. What is your name?\n");
+00092   PSOCK_READTO(&s->p, '\n');
+00093   strncpy(s->name, s->inputbuffer, sizeof(s->name));
+00094   PSOCK_SEND_STR(&s->p, "Hello ");
+00095   PSOCK_SEND_STR(&s->p, s->name);
+00096   PSOCK_CLOSE(&s->p);
+00097   
+00098   PSOCK_END(&s->p);
+00099 }
+00100 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00171.html b/components/net/uip/doc/html/a00171.html new file mode 100644 index 0000000000000000000000000000000000000000..768f61b64b7ac85de15d353c79cd201dcc4cf924 --- /dev/null +++ b/components/net/uip/doc/html/a00171.html @@ -0,0 +1,77 @@ + + +uIP 1.0: apps/hello-world/hello-world.h Source File + + + + + + +

apps/hello-world/hello-world.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup helloworld Hello, world
+00008  * @{
+00009  *
+00010  * A small example showing how to write applications with
+00011  * \ref psock "protosockets".
+00012  */
+00013 
+00014 /**
+00015  * \file
+00016  *         Header file for an example of how to write uIP applications
+00017  *         with protosockets.
+00018  * \author
+00019  *         Adam Dunkels <adam@sics.se>
+00020  */
+00021 
+00022 #ifndef __HELLO_WORLD_H__
+00023 #define __HELLO_WORLD_H__
+00024 
+00025 /* Since this file will be included by uip.h, we cannot include uip.h
+00026    here. But we might need to include uipopt.h if we need the u8_t and
+00027    u16_t datatypes. */
+00028 #include "uipopt.h"
+00029 
+00030 #include "psock.h"
+00031 
+00032 /* Next, we define the uip_tcp_appstate_t datatype. This is the state
+00033    of our application, and the memory required for this state is
+00034    allocated together with each TCP connection. One application state
+00035    for each TCP connection. */
+00036 typedef struct hello_world_state {
+00037   struct psock p;
+00038   char inputbuffer[10];
+00039   char name[40];
+00040 } uip_tcp_appstate_t;
+00041 
+00042 /* Finally we define the application function to be called by uIP. */
+00043 void hello_world_appcall(void);
+00044 #ifndef UIP_APPCALL
+00045 #define UIP_APPCALL hello_world_appcall
+00046 #endif /* UIP_APPCALL */
+00047 
+00048 void hello_world_init(void);
+00049 
+00050 #endif /* __HELLO_WORLD_H__ */
+00051 /** @} */
+00052 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00172.html b/components/net/uip/doc/html/a00172.html new file mode 100644 index 0000000000000000000000000000000000000000..1bf08f6dc34bce737b6974904919d2736eb339ab --- /dev/null +++ b/components/net/uip/doc/html/a00172.html @@ -0,0 +1,489 @@ + + +uIP 1.0: apps/resolv/resolv.c Source File + + + + + + +

apps/resolv/resolv.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup resolv DNS resolver
+00008  * @{
+00009  *
+00010  * The uIP DNS resolver functions are used to lookup a hostname and
+00011  * map it to a numerical IP address. It maintains a list of resolved
+00012  * hostnames that can be queried with the resolv_lookup()
+00013  * function. New hostnames can be resolved using the resolv_query()
+00014  * function.
+00015  *
+00016  * When a hostname has been resolved (or found to be non-existant),
+00017  * the resolver code calls a callback function called resolv_found()
+00018  * that must be implemented by the module that uses the resolver.
+00019  */
+00020 
+00021 /**
+00022  * \file
+00023  * DNS host name to IP address resolver.
+00024  * \author Adam Dunkels <adam@dunkels.com>
+00025  *
+00026  * This file implements a DNS host name to IP address resolver.
+00027  */
+00028 
+00029 /*
+00030  * Copyright (c) 2002-2003, Adam Dunkels.
+00031  * All rights reserved.
+00032  *
+00033  * Redistribution and use in source and binary forms, with or without
+00034  * modification, are permitted provided that the following conditions
+00035  * are met:
+00036  * 1. Redistributions of source code must retain the above copyright
+00037  *    notice, this list of conditions and the following disclaimer.
+00038  * 2. Redistributions in binary form must reproduce the above copyright
+00039  *    notice, this list of conditions and the following disclaimer in the
+00040  *    documentation and/or other materials provided with the distribution.
+00041  * 3. The name of the author may not be used to endorse or promote
+00042  *    products derived from this software without specific prior
+00043  *    written permission.
+00044  *
+00045  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00046  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00047  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00048  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00049  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00050  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00051  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00052  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00053  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00054  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00055  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00056  *
+00057  * This file is part of the uIP TCP/IP stack.
+00058  *
+00059  * $Id: resolv.c,v 1.5 2006/06/11 21:46:37 adam Exp $
+00060  *
+00061  */
+00062 
+00063 #include "resolv.h"
+00064 #include "uip.h"
+00065 
+00066 #include <string.h>
+00067 
+00068 #ifndef NULL
+00069 #define NULL (void *)0
+00070 #endif /* NULL */
+00071 
+00072 /** \internal The maximum number of retries when asking for a name. */
+00073 #define MAX_RETRIES 8
+00074 
+00075 /** \internal The DNS message header. */
+00076 struct dns_hdr {
+00077   u16_t id;
+00078   u8_t flags1, flags2;
+00079 #define DNS_FLAG1_RESPONSE        0x80
+00080 #define DNS_FLAG1_OPCODE_STATUS   0x10
+00081 #define DNS_FLAG1_OPCODE_INVERSE  0x08
+00082 #define DNS_FLAG1_OPCODE_STANDARD 0x00
+00083 #define DNS_FLAG1_AUTHORATIVE     0x04
+00084 #define DNS_FLAG1_TRUNC           0x02
+00085 #define DNS_FLAG1_RD              0x01
+00086 #define DNS_FLAG2_RA              0x80
+00087 #define DNS_FLAG2_ERR_MASK        0x0f
+00088 #define DNS_FLAG2_ERR_NONE        0x00
+00089 #define DNS_FLAG2_ERR_NAME        0x03
+00090   u16_t numquestions;
+00091   u16_t numanswers;
+00092   u16_t numauthrr;
+00093   u16_t numextrarr;
+00094 };
+00095 
+00096 /** \internal The DNS answer message structure. */
+00097 struct dns_answer {
+00098   /* DNS answer record starts with either a domain name or a pointer
+00099      to a name already present somewhere in the packet. */
+00100   u16_t type;
+00101   u16_t class;
+00102   u16_t ttl[2];
+00103   u16_t len;
+00104   uip_ipaddr_t ipaddr;
+00105 };
+00106 
+00107 struct namemap {
+00108 #define STATE_UNUSED 0
+00109 #define STATE_NEW    1
+00110 #define STATE_ASKING 2
+00111 #define STATE_DONE   3
+00112 #define STATE_ERROR  4
+00113   u8_t state;
+00114   u8_t tmr;
+00115   u8_t retries;
+00116   u8_t seqno;
+00117   u8_t err;
+00118   char name[32];
+00119   uip_ipaddr_t ipaddr;
+00120 };
+00121 
+00122 #ifndef UIP_CONF_RESOLV_ENTRIES
+00123 #define RESOLV_ENTRIES 4
+00124 #else /* UIP_CONF_RESOLV_ENTRIES */
+00125 #define RESOLV_ENTRIES UIP_CONF_RESOLV_ENTRIES
+00126 #endif /* UIP_CONF_RESOLV_ENTRIES */
+00127 
+00128 
+00129 static struct namemap names[RESOLV_ENTRIES];
+00130 
+00131 static u8_t seqno;
+00132 
+00133 static struct uip_udp_conn *resolv_conn = NULL;
+00134 
+00135 
+00136 /*---------------------------------------------------------------------------*/
+00137 /** \internal
+00138  * Walk through a compact encoded DNS name and return the end of it.
+00139  *
+00140  * \return The end of the name.
+00141  */
+00142 /*---------------------------------------------------------------------------*/
+00143 static unsigned char *
+00144 parse_name(unsigned char *query)
+00145 {
+00146   unsigned char n;
+00147 
+00148   do {
+00149     n = *query++;
+00150     
+00151     while(n > 0) {
+00152       /*      printf("%c", *query);*/
+00153       ++query;
+00154       --n;
+00155     };
+00156     /*    printf(".");*/
+00157   } while(*query != 0);
+00158   /*  printf("\n");*/
+00159   return query + 1;
+00160 }
+00161 /*---------------------------------------------------------------------------*/
+00162 /** \internal
+00163  * Runs through the list of names to see if there are any that have
+00164  * not yet been queried and, if so, sends out a query.
+00165  */
+00166 /*---------------------------------------------------------------------------*/
+00167 static void
+00168 check_entries(void)
+00169 {
+00170   register struct dns_hdr *hdr;
+00171   char *query, *nptr, *nameptr;
+00172   static u8_t i;
+00173   static u8_t n;
+00174   register struct namemap *namemapptr;
+00175   
+00176   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00177     namemapptr = &names[i];
+00178     if(namemapptr->state == STATE_NEW ||
+00179        namemapptr->state == STATE_ASKING) {
+00180       if(namemapptr->state == STATE_ASKING) {
+00181         if(--namemapptr->tmr == 0) {
+00182           if(++namemapptr->retries == MAX_RETRIES) {
+00183             namemapptr->state = STATE_ERROR;
+00184             resolv_found(namemapptr->name, NULL);
+00185             continue;
+00186           }
+00187           namemapptr->tmr = namemapptr->retries;
+00188         } else {
+00189           /*      printf("Timer %d\n", namemapptr->tmr);*/
+00190           /* Its timer has not run out, so we move on to next
+00191              entry. */
+00192           continue;
+00193         }
+00194       } else {
+00195         namemapptr->state = STATE_ASKING;
+00196         namemapptr->tmr = 1;
+00197         namemapptr->retries = 0;
+00198       }
+00199       hdr = (struct dns_hdr *)uip_appdata;
+00200       memset(hdr, 0, sizeof(struct dns_hdr));
+00201       hdr->id = htons(i);
+00202       hdr->flags1 = DNS_FLAG1_RD;
+00203       hdr->numquestions = HTONS(1);
+00204       query = (char *)uip_appdata + 12;
+00205       nameptr = namemapptr->name;
+00206       --nameptr;
+00207       /* Convert hostname into suitable query format. */
+00208       do {
+00209         ++nameptr;
+00210         nptr = query;
+00211         ++query;
+00212         for(n = 0; *nameptr != '.' && *nameptr != 0; ++nameptr) {
+00213           *query = *nameptr;
+00214           ++query;
+00215           ++n;
+00216         }
+00217         *nptr = n;
+00218       } while(*nameptr != 0);
+00219       {
+00220         static unsigned char endquery[] =
+00221           {0,0,1,0,1};
+00222         memcpy(query, endquery, 5);
+00223       }
+00224       uip_udp_send((unsigned char)(query + 5 - (char *)uip_appdata));
+00225       break;
+00226     }
+00227   }
+00228 }
+00229 /*---------------------------------------------------------------------------*/
+00230 /** \internal
+00231  * Called when new UDP data arrives.
+00232  */
+00233 /*---------------------------------------------------------------------------*/
+00234 static void
+00235 newdata(void)
+00236 {
+00237   char *nameptr;
+00238   struct dns_answer *ans;
+00239   struct dns_hdr *hdr;
+00240   static u8_t nquestions, nanswers;
+00241   static u8_t i;
+00242   register struct namemap *namemapptr;
+00243   
+00244   hdr = (struct dns_hdr *)uip_appdata;
+00245   /*  printf("ID %d\n", htons(hdr->id));
+00246       printf("Query %d\n", hdr->flags1 & DNS_FLAG1_RESPONSE);
+00247       printf("Error %d\n", hdr->flags2 & DNS_FLAG2_ERR_MASK);
+00248       printf("Num questions %d, answers %d, authrr %d, extrarr %d\n",
+00249       htons(hdr->numquestions),
+00250       htons(hdr->numanswers),
+00251       htons(hdr->numauthrr),
+00252       htons(hdr->numextrarr));
+00253   */
+00254 
+00255   /* The ID in the DNS header should be our entry into the name
+00256      table. */
+00257   i = htons(hdr->id);
+00258   namemapptr = &names[i];
+00259   if(i < RESOLV_ENTRIES &&
+00260      namemapptr->state == STATE_ASKING) {
+00261 
+00262     /* This entry is now finished. */
+00263     namemapptr->state = STATE_DONE;
+00264     namemapptr->err = hdr->flags2 & DNS_FLAG2_ERR_MASK;
+00265 
+00266     /* Check for error. If so, call callback to inform. */
+00267     if(namemapptr->err != 0) {
+00268       namemapptr->state = STATE_ERROR;
+00269       resolv_found(namemapptr->name, NULL);
+00270       return;
+00271     }
+00272 
+00273     /* We only care about the question(s) and the answers. The authrr
+00274        and the extrarr are simply discarded. */
+00275     nquestions = htons(hdr->numquestions);
+00276     nanswers = htons(hdr->numanswers);
+00277 
+00278     /* Skip the name in the question. XXX: This should really be
+00279        checked agains the name in the question, to be sure that they
+00280        match. */
+00281     nameptr = parse_name((char *)uip_appdata + 12) + 4;
+00282 
+00283     while(nanswers > 0) {
+00284       /* The first byte in the answer resource record determines if it
+00285          is a compressed record or a normal one. */
+00286       if(*nameptr & 0xc0) {
+00287         /* Compressed name. */
+00288         nameptr +=2;
+00289         /*      printf("Compressed anwser\n");*/
+00290       } else {
+00291         /* Not compressed name. */
+00292         nameptr = parse_name((char *)nameptr);
+00293       }
+00294 
+00295       ans = (struct dns_answer *)nameptr;
+00296       /*      printf("Answer: type %x, class %x, ttl %x, length %x\n",
+00297              htons(ans->type), htons(ans->class), (htons(ans->ttl[0])
+00298              << 16) | htons(ans->ttl[1]), htons(ans->len));*/
+00299 
+00300       /* Check for IP address type and Internet class. Others are
+00301          discarded. */
+00302       if(ans->type == HTONS(1) &&
+00303          ans->class == HTONS(1) &&
+00304          ans->len == HTONS(4)) {
+00305         /*      printf("IP address %d.%d.%d.%d\n",
+00306                htons(ans->ipaddr[0]) >> 8,
+00307                htons(ans->ipaddr[0]) & 0xff,
+00308                htons(ans->ipaddr[1]) >> 8,
+00309                htons(ans->ipaddr[1]) & 0xff);*/
+00310         /* XXX: we should really check that this IP address is the one
+00311            we want. */
+00312         namemapptr->ipaddr[0] = ans->ipaddr[0];
+00313         namemapptr->ipaddr[1] = ans->ipaddr[1];
+00314         
+00315         resolv_found(namemapptr->name, namemapptr->ipaddr);
+00316         return;
+00317       } else {
+00318         nameptr = nameptr + 10 + htons(ans->len);
+00319       }
+00320       --nanswers;
+00321     }
+00322   }
+00323 
+00324 }
+00325 /*---------------------------------------------------------------------------*/
+00326 /** \internal
+00327  * The main UDP function.
+00328  */
+00329 /*---------------------------------------------------------------------------*/
+00330 void
+00331 resolv_appcall(void)
+00332 {
+00333   if(uip_udp_conn->rport == HTONS(53)) {
+00334     if(uip_poll()) {
+00335       check_entries();
+00336     }
+00337     if(uip_newdata()) {
+00338       newdata();
+00339     }
+00340   }
+00341 }
+00342 /*---------------------------------------------------------------------------*/
+00343 /**
+00344  * Queues a name so that a question for the name will be sent out.
+00345  *
+00346  * \param name The hostname that is to be queried.
+00347  */
+00348 /*---------------------------------------------------------------------------*/
+00349 void
+00350 resolv_query(char *name)
+00351 {
+00352   static u8_t i;
+00353   static u8_t lseq, lseqi;
+00354   register struct namemap *nameptr;
+00355       
+00356   lseq = lseqi = 0;
+00357   
+00358   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00359     nameptr = &names[i];
+00360     if(nameptr->state == STATE_UNUSED) {
+00361       break;
+00362     }
+00363     if(seqno - nameptr->seqno > lseq) {
+00364       lseq = seqno - nameptr->seqno;
+00365       lseqi = i;
+00366     }
+00367   }
+00368 
+00369   if(i == RESOLV_ENTRIES) {
+00370     i = lseqi;
+00371     nameptr = &names[i];
+00372   }
+00373 
+00374   /*  printf("Using entry %d\n", i);*/
+00375 
+00376   strcpy(nameptr->name, name);
+00377   nameptr->state = STATE_NEW;
+00378   nameptr->seqno = seqno;
+00379   ++seqno;
+00380 }
+00381 /*---------------------------------------------------------------------------*/
+00382 /**
+00383  * Look up a hostname in the array of known hostnames.
+00384  *
+00385  * \note This function only looks in the internal array of known
+00386  * hostnames, it does not send out a query for the hostname if none
+00387  * was found. The function resolv_query() can be used to send a query
+00388  * for a hostname.
+00389  *
+00390  * \return A pointer to a 4-byte representation of the hostname's IP
+00391  * address, or NULL if the hostname was not found in the array of
+00392  * hostnames.
+00393  */
+00394 /*---------------------------------------------------------------------------*/
+00395 u16_t *
+00396 resolv_lookup(char *name)
+00397 {
+00398   static u8_t i;
+00399   struct namemap *nameptr;
+00400   
+00401   /* Walk through the list to see if the name is in there. If it is
+00402      not, we return NULL. */
+00403   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00404     nameptr = &names[i];
+00405     if(nameptr->state == STATE_DONE &&
+00406        strcmp(name, nameptr->name) == 0) {
+00407       return nameptr->ipaddr;
+00408     }
+00409   }
+00410   return NULL;
+00411 }
+00412 /*---------------------------------------------------------------------------*/
+00413 /**
+00414  * Obtain the currently configured DNS server.
+00415  *
+00416  * \return A pointer to a 4-byte representation of the IP address of
+00417  * the currently configured DNS server or NULL if no DNS server has
+00418  * been configured.
+00419  */
+00420 /*---------------------------------------------------------------------------*/
+00421 u16_t *
+00422 resolv_getserver(void)
+00423 {
+00424   if(resolv_conn == NULL) {
+00425     return NULL;
+00426   }
+00427   return resolv_conn->ripaddr;
+00428 }
+00429 /*---------------------------------------------------------------------------*/
+00430 /**
+00431  * Configure which DNS server to use for queries.
+00432  *
+00433  * \param dnsserver A pointer to a 4-byte representation of the IP
+00434  * address of the DNS server to be configured.
+00435  */
+00436 /*---------------------------------------------------------------------------*/
+00437 void
+00438 resolv_conf(u16_t *dnsserver)
+00439 {
+00440   if(resolv_conn != NULL) {
+00441     uip_udp_remove(resolv_conn);
+00442   }
+00443   
+00444   resolv_conn = uip_udp_new(dnsserver, HTONS(53));
+00445 }
+00446 /*---------------------------------------------------------------------------*/
+00447 /**
+00448  * Initalize the resolver.
+00449  */
+00450 /*---------------------------------------------------------------------------*/
+00451 void
+00452 resolv_init(void)
+00453 {
+00454   static u8_t i;
+00455   
+00456   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00457     names[i].state = STATE_DONE;
+00458   }
+00459 
+00460 }
+00461 /*---------------------------------------------------------------------------*/
+00462 
+00463 /** @} */
+00464 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00173.html b/components/net/uip/doc/html/a00173.html new file mode 100644 index 0000000000000000000000000000000000000000..1b9f8dfb22aa44ef971daf44d39ab45fab6835f4 --- /dev/null +++ b/components/net/uip/doc/html/a00173.html @@ -0,0 +1,100 @@ + + +uIP 1.0: apps/resolv/resolv.h Source File + + + + + + +

apps/resolv/resolv.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup resolv
+00003  * @{
+00004  */
+00005 /**
+00006  * \file
+00007  * DNS resolver code header file.
+00008  * \author Adam Dunkels <adam@dunkels.com>
+00009  */
+00010 
+00011 /*
+00012  * Copyright (c) 2002-2003, Adam Dunkels.
+00013  * All rights reserved.
+00014  *
+00015  * Redistribution and use in source and binary forms, with or without
+00016  * modification, are permitted provided that the following conditions
+00017  * are met:
+00018  * 1. Redistributions of source code must retain the above copyright
+00019  *    notice, this list of conditions and the following disclaimer.
+00020  * 2. Redistributions in binary form must reproduce the above copyright
+00021  *    notice, this list of conditions and the following disclaimer in the
+00022  *    documentation and/or other materials provided with the distribution.
+00023  * 3. The name of the author may not be used to endorse or promote
+00024  *    products derived from this software without specific prior
+00025  *    written permission.
+00026  *
+00027  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00028  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00029  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00030  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00031  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00032  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00033  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00034  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00035  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00036  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00037  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00038  *
+00039  * This file is part of the uIP TCP/IP stack.
+00040  *
+00041  * $Id: resolv.h,v 1.4 2006/06/11 21:46:37 adam Exp $
+00042  *
+00043  */
+00044 #ifndef __RESOLV_H__
+00045 #define __RESOLV_H__
+00046 
+00047 typedef int uip_udp_appstate_t;
+00048 void resolv_appcall(void);
+00049 #define UIP_UDP_APPCALL resolv_appcall
+00050 
+00051 #include "uipopt.h"
+00052 
+00053 /**
+00054  * Callback function which is called when a hostname is found.
+00055  *
+00056  * This function must be implemented by the module that uses the DNS
+00057  * resolver. It is called when a hostname is found, or when a hostname
+00058  * was not found.
+00059  *
+00060  * \param name A pointer to the name that was looked up.  \param
+00061  * ipaddr A pointer to a 4-byte array containing the IP address of the
+00062  * hostname, or NULL if the hostname could not be found.
+00063  */
+00064 void resolv_found(char *name, u16_t *ipaddr);
+00065 
+00066 /* Functions. */
+00067 void resolv_conf(u16_t *dnsserver);
+00068 u16_t *resolv_getserver(void);
+00069 void resolv_init(void);
+00070 u16_t *resolv_lookup(char *name);
+00071 void resolv_query(char *name);
+00072 
+00073 #endif /* __RESOLV_H__ */
+00074 
+00075 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00174.html b/components/net/uip/doc/html/a00174.html new file mode 100644 index 0000000000000000000000000000000000000000..c535c4aec39f9fbcde8e0b99efdcc057a82ff240 --- /dev/null +++ b/components/net/uip/doc/html/a00174.html @@ -0,0 +1,287 @@ + + +uIP 1.0: apps/smtp/smtp.c Source File + + + + + + +

apps/smtp/smtp.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup smtp SMTP E-mail sender
+00008  * @{
+00009  *
+00010  * The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is
+00011  * the standard way of sending and transfering e-mail on the
+00012  * Internet. This simple example implementation is intended as an
+00013  * example of how to implement protocols in uIP, and is able to send
+00014  * out e-mail but has not been extensively tested.
+00015  */
+00016 
+00017 /**
+00018  * \file
+00019  * SMTP example implementation
+00020  * \author Adam Dunkels <adam@dunkels.com>
+00021  */
+00022 
+00023 /*
+00024  * Copyright (c) 2004, Adam Dunkels.
+00025  * All rights reserved.
+00026  *
+00027  * Redistribution and use in source and binary forms, with or without
+00028  * modification, are permitted provided that the following conditions
+00029  * are met:
+00030  * 1. Redistributions of source code must retain the above copyright
+00031  *    notice, this list of conditions and the following disclaimer.
+00032  * 2. Redistributions in binary form must reproduce the above copyright
+00033  *    notice, this list of conditions and the following disclaimer in the
+00034  *    documentation and/or other materials provided with the distribution.
+00035  * 3. Neither the name of the Institute nor the names of its contributors
+00036  *    may be used to endorse or promote products derived from this software
+00037  *    without specific prior written permission.
+00038  *
+00039  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00040  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00041  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00042  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00043  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00044  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00045  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00046  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00047  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00048  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00049  * SUCH DAMAGE.
+00050  *
+00051  * This file is part of the uIP TCP/IP stack.
+00052  *
+00053  * Author: Adam Dunkels <adam@sics.se>
+00054  *
+00055  * $Id: smtp.c,v 1.4 2006/06/11 21:46:37 adam Exp $
+00056  */
+00057 #include "smtp.h"
+00058 
+00059 #include "smtp-strings.h"
+00060 #include "psock.h"
+00061 #include "uip.h"
+00062 
+00063 #include <string.h>
+00064 
+00065 static struct smtp_state s;
+00066 
+00067 static char *localhostname;
+00068 static uip_ipaddr_t smtpserver;
+00069 
+00070 #define ISO_nl 0x0a
+00071 #define ISO_cr 0x0d
+00072 
+00073 #define ISO_period 0x2e
+00074 
+00075 #define ISO_2  0x32
+00076 #define ISO_3  0x33
+00077 #define ISO_4  0x34
+00078 #define ISO_5  0x35
+00079 
+00080 
+00081 /*---------------------------------------------------------------------------*/
+00082 static
+00083 PT_THREAD(smtp_thread(void))
+00084 {
+00085   PSOCK_BEGIN(&s.psock);
+00086 
+00087   PSOCK_READTO(&s.psock, ISO_nl);
+00088    
+00089   if(strncmp(s.inputbuffer, smtp_220, 3) != 0) {
+00090     PSOCK_CLOSE(&s.psock);
+00091     smtp_done(2);
+00092     PSOCK_EXIT(&s.psock);
+00093   }
+00094   
+00095   PSOCK_SEND_STR(&s.psock, (char *)smtp_helo);
+00096   PSOCK_SEND_STR(&s.psock, localhostname);
+00097   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00098 
+00099   PSOCK_READTO(&s.psock, ISO_nl);
+00100   
+00101   if(s.inputbuffer[0] != ISO_2) {
+00102     PSOCK_CLOSE(&s.psock);
+00103     smtp_done(3);
+00104     PSOCK_EXIT(&s.psock);
+00105   }
+00106 
+00107   PSOCK_SEND_STR(&s.psock, (char *)smtp_mail_from);
+00108   PSOCK_SEND_STR(&s.psock, s.from);
+00109   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00110 
+00111   PSOCK_READTO(&s.psock, ISO_nl);
+00112   
+00113   if(s.inputbuffer[0] != ISO_2) {
+00114     PSOCK_CLOSE(&s.psock);
+00115     smtp_done(4);
+00116     PSOCK_EXIT(&s.psock);
+00117   }
+00118 
+00119   PSOCK_SEND_STR(&s.psock, (char *)smtp_rcpt_to);
+00120   PSOCK_SEND_STR(&s.psock, s.to);
+00121   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00122 
+00123   PSOCK_READTO(&s.psock, ISO_nl);
+00124   
+00125   if(s.inputbuffer[0] != ISO_2) {
+00126     PSOCK_CLOSE(&s.psock);
+00127     smtp_done(5);
+00128     PSOCK_EXIT(&s.psock);
+00129   }
+00130   
+00131   if(s.cc != 0) {
+00132     PSOCK_SEND_STR(&s.psock, (char *)smtp_rcpt_to);
+00133     PSOCK_SEND_STR(&s.psock, s.cc);
+00134     PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00135 
+00136     PSOCK_READTO(&s.psock, ISO_nl);
+00137   
+00138     if(s.inputbuffer[0] != ISO_2) {
+00139       PSOCK_CLOSE(&s.psock);
+00140       smtp_done(6);
+00141       PSOCK_EXIT(&s.psock);
+00142     }
+00143   }
+00144   
+00145   PSOCK_SEND_STR(&s.psock, (char *)smtp_data);
+00146   
+00147   PSOCK_READTO(&s.psock, ISO_nl);
+00148   
+00149   if(s.inputbuffer[0] != ISO_3) {
+00150     PSOCK_CLOSE(&s.psock);
+00151     smtp_done(7);
+00152     PSOCK_EXIT(&s.psock);
+00153   }
+00154 
+00155   PSOCK_SEND_STR(&s.psock, (char *)smtp_to);
+00156   PSOCK_SEND_STR(&s.psock, s.to);
+00157   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00158   
+00159   if(s.cc != 0) {
+00160     PSOCK_SEND_STR(&s.psock, (char *)smtp_cc);
+00161     PSOCK_SEND_STR(&s.psock, s.cc);
+00162     PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00163   }
+00164   
+00165   PSOCK_SEND_STR(&s.psock, (char *)smtp_from);
+00166   PSOCK_SEND_STR(&s.psock, s.from);
+00167   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00168   
+00169   PSOCK_SEND_STR(&s.psock, (char *)smtp_subject);
+00170   PSOCK_SEND_STR(&s.psock, s.subject);
+00171   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00172 
+00173   PSOCK_SEND(&s.psock, s.msg, s.msglen);
+00174   
+00175   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnlperiodcrnl);
+00176 
+00177   PSOCK_READTO(&s.psock, ISO_nl);
+00178   if(s.inputbuffer[0] != ISO_2) {
+00179     PSOCK_CLOSE(&s.psock);
+00180     smtp_done(8);
+00181     PSOCK_EXIT(&s.psock);
+00182   }
+00183 
+00184   PSOCK_SEND_STR(&s.psock, (char *)smtp_quit);
+00185   smtp_done(SMTP_ERR_OK);
+00186   PSOCK_END(&s.psock);
+00187 }
+00188 /*---------------------------------------------------------------------------*/
+00189 void
+00190 smtp_appcall(void)
+00191 {
+00192   if(uip_closed()) {
+00193     s.connected = 0;
+00194     return;
+00195   }
+00196   if(uip_aborted() || uip_timedout()) {
+00197     s.connected = 0;
+00198     smtp_done(1);
+00199     return;
+00200   }
+00201   smtp_thread();
+00202 }
+00203 /*---------------------------------------------------------------------------*/
+00204 /**
+00205  * Specificy an SMTP server and hostname.
+00206  *
+00207  * This function is used to configure the SMTP module with an SMTP
+00208  * server and the hostname of the host.
+00209  *
+00210  * \param lhostname The hostname of the uIP host.
+00211  *
+00212  * \param server A pointer to a 4-byte array representing the IP
+00213  * address of the SMTP server to be configured.
+00214  */
+00215 void
+00216 smtp_configure(char *lhostname, void *server)
+00217 {
+00218   localhostname = lhostname;
+00219   uip_ipaddr_copy(smtpserver, server);
+00220 }
+00221 /*---------------------------------------------------------------------------*/
+00222 /**
+00223  * Send an e-mail.
+00224  *
+00225  * \param to The e-mail address of the receiver of the e-mail.
+00226  * \param cc The e-mail address of the CC: receivers of the e-mail.
+00227  * \param from The e-mail address of the sender of the e-mail.
+00228  * \param subject The subject of the e-mail.
+00229  * \param msg The actual e-mail message.
+00230  * \param msglen The length of the e-mail message.
+00231  */
+00232 unsigned char
+00233 smtp_send(char *to, char *cc, char *from,
+00234           char *subject, char *msg, u16_t msglen)
+00235 {
+00236   struct uip_conn *conn;
+00237 
+00238   conn = uip_connect(smtpserver, HTONS(25));
+00239   if(conn == NULL) {
+00240     return 0;
+00241   }
+00242   s.connected = 1;
+00243   s.to = to;
+00244   s.cc = cc;
+00245   s.from = from;
+00246   s.subject = subject;
+00247   s.msg = msg;
+00248   s.msglen = msglen;
+00249 
+00250   PSOCK_INIT(&s.psock, s.inputbuffer, sizeof(s.inputbuffer));
+00251   
+00252   return 1;
+00253 }
+00254 /*---------------------------------------------------------------------------*/
+00255 void
+00256 smtp_init(void)
+00257 {
+00258   s.connected = 0;
+00259 }
+00260 /*---------------------------------------------------------------------------*/
+00261 /** @} */
+00262 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00175.html b/components/net/uip/doc/html/a00175.html new file mode 100644 index 0000000000000000000000000000000000000000..98342be7afc752ef88a228cd2aa44dba122bde97 --- /dev/null +++ b/components/net/uip/doc/html/a00175.html @@ -0,0 +1,128 @@ + + +uIP 1.0: apps/smtp/smtp.h Source File + + + + + + +

apps/smtp/smtp.h

Go to the documentation of this file.
00001 
+00002 /**
+00003  * \addtogroup smtp
+00004  * @{
+00005  */
+00006 
+00007 
+00008 /**
+00009  * \file
+00010  * SMTP header file
+00011  * \author Adam Dunkels <adam@dunkels.com>
+00012  */
+00013 
+00014 /*
+00015  * Copyright (c) 2002, Adam Dunkels.
+00016  * All rights reserved.
+00017  *
+00018  * Redistribution and use in source and binary forms, with or without
+00019  * modification, are permitted provided that the following conditions
+00020  * are met:
+00021  * 1. Redistributions of source code must retain the above copyright
+00022  *    notice, this list of conditions and the following disclaimer.
+00023  * 2. Redistributions in binary form must reproduce the above copyright
+00024  *    notice, this list of conditions and the following disclaimer in the
+00025  *    documentation and/or other materials provided with the distribution.
+00026  * 3. The name of the author may not be used to endorse or promote
+00027  *    products derived from this software without specific prior
+00028  *    written permission.
+00029  *
+00030  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00031  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00032  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00033  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00034  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00035  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00036  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00037  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00038  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00039  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00040  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00041  *
+00042  * This file is part of the uIP TCP/IP stack.
+00043  *
+00044  * $Id: smtp.h,v 1.4 2006/06/11 21:46:37 adam Exp $
+00045  *
+00046  */
+00047 #ifndef __SMTP_H__
+00048 #define __SMTP_H__
+00049 
+00050 #include "uipopt.h"
+00051 
+00052 /**
+00053  * Error number that signifies a non-error condition.
+00054  */
+00055 #define SMTP_ERR_OK 0
+00056 
+00057 /**
+00058  * Callback function that is called when an e-mail transmission is
+00059  * done.
+00060  *
+00061  * This function must be implemented by the module that uses the SMTP
+00062  * module.
+00063  *
+00064  * \param error The number of the error if an error occured, or
+00065  * SMTP_ERR_OK.
+00066  */
+00067 void smtp_done(unsigned char error);
+00068 
+00069 void smtp_init(void);
+00070 
+00071 /* Functions. */
+00072 void smtp_configure(char *localhostname, u16_t *smtpserver);
+00073 unsigned char smtp_send(char *to, char *from,
+00074                         char *subject, char *msg,
+00075                         u16_t msglen);
+00076 #define SMTP_SEND(to, cc, from, subject, msg) \
+00077         smtp_send(to, cc, from, subject, msg, strlen(msg))
+00078 
+00079 void smtp_appcall(void);
+00080 
+00081 struct smtp_state {
+00082   u8_t state;
+00083   char *to;
+00084   char *from;
+00085   char *subject;
+00086   char *msg;
+00087   u16_t msglen;
+00088   
+00089   u16_t sentlen, textlen;
+00090   u16_t sendptr;
+00091 
+00092 };
+00093 
+00094 
+00095 #ifndef UIP_APPCALL
+00096 #define UIP_APPCALL     smtp_appcall
+00097 #endif
+00098 typedef struct smtp_state uip_tcp_appstate_t;
+00099 
+00100 
+00101 #endif /* __SMTP_H__ */
+00102 
+00103 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00176.html b/components/net/uip/doc/html/a00176.html new file mode 100644 index 0000000000000000000000000000000000000000..100bf7aa627d0e0d459e4892330223c836f76bb8 --- /dev/null +++ b/components/net/uip/doc/html/a00176.html @@ -0,0 +1,148 @@ + + +uIP 1.0: apps/telnetd/shell.c Source File + + + + + + +

apps/telnetd/shell.c

00001  /*
+00002  * Copyright (c) 2003, Adam Dunkels.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. The name of the author may not be used to endorse or promote
+00014  *    products derived from this software without specific prior
+00015  *    written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00018  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00019  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00021  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00023  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00024  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00025  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00026  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00027  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack.
+00030  *
+00031  * $Id: shell.c,v 1.1 2006/06/07 09:43:54 adam Exp $
+00032  *
+00033  */
+00034 
+00035 #include "shell.h"
+00036 
+00037 #include <string.h>
+00038 
+00039 struct ptentry {
+00040   char *commandstr;
+00041   void (* pfunc)(char *str);
+00042 };
+00043 
+00044 #define SHELL_PROMPT "uIP 1.0> "
+00045 
+00046 /*---------------------------------------------------------------------------*/
+00047 static void
+00048 parse(register char *str, struct ptentry *t)
+00049 {
+00050   struct ptentry *p;
+00051   for(p = t; p->commandstr != NULL; ++p) {
+00052     if(strncmp(p->commandstr, str, strlen(p->commandstr)) == 0) {
+00053       break;
+00054     }
+00055   }
+00056 
+00057   p->pfunc(str);
+00058 }
+00059 /*---------------------------------------------------------------------------*/
+00060 static void
+00061 inttostr(register char *str, unsigned int i)
+00062 {
+00063   str[0] = '0' + i / 100;
+00064   if(str[0] == '0') {
+00065     str[0] = ' ';
+00066   }
+00067   str[1] = '0' + (i / 10) % 10;
+00068   if(str[0] == ' ' && str[1] == '0') {
+00069     str[1] = ' ';
+00070   }
+00071   str[2] = '0' + i % 10;
+00072   str[3] = ' ';
+00073   str[4] = 0;
+00074 }
+00075 /*---------------------------------------------------------------------------*/
+00076 static void
+00077 help(char *str)
+00078 {
+00079   shell_output("Available commands:", "");
+00080   shell_output("stats   - show network statistics", "");
+00081   shell_output("conn    - show TCP connections", "");
+00082   shell_output("help, ? - show help", "");
+00083   shell_output("exit    - exit shell", "");
+00084 }
+00085 /*---------------------------------------------------------------------------*/
+00086 static void
+00087 unknown(char *str)
+00088 {
+00089   if(strlen(str) > 0) {
+00090     shell_output("Unknown command: ", str);
+00091   }
+00092 }
+00093 /*---------------------------------------------------------------------------*/
+00094 static struct ptentry parsetab[] =
+00095   {{"stats", help},
+00096    {"conn", help},
+00097    {"help", help},
+00098    {"exit", shell_quit},
+00099    {"?", help},
+00100 
+00101    /* Default action */
+00102    {NULL, unknown}};
+00103 /*---------------------------------------------------------------------------*/
+00104 void
+00105 shell_init(void)
+00106 {
+00107 }
+00108 /*---------------------------------------------------------------------------*/
+00109 void
+00110 shell_start(void)
+00111 {
+00112   shell_output("uIP command shell", "");
+00113   shell_output("Type '?' and return for help", "");
+00114   shell_prompt(SHELL_PROMPT);
+00115 }
+00116 /*---------------------------------------------------------------------------*/
+00117 void
+00118 shell_input(char *cmd)
+00119 {
+00120   parse(cmd, parsetab);
+00121   shell_prompt(SHELL_PROMPT);
+00122 }
+00123 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00177.html b/components/net/uip/doc/html/a00177.html new file mode 100644 index 0000000000000000000000000000000000000000..2126707f18f498d959142aba9b4ca95c2b6e3397 --- /dev/null +++ b/components/net/uip/doc/html/a00177.html @@ -0,0 +1,129 @@ + + +uIP 1.0: apps/telnetd/shell.h Source File + + + + + + +

apps/telnetd/shell.h

Go to the documentation of this file.
00001 /**
+00002  * \file
+00003  * Interface for the Contiki shell.
+00004  * \author Adam Dunkels <adam@dunkels.com>
+00005  *
+00006  * Some of the functions declared in this file must be implemented as
+00007  * a shell back-end in the architecture specific files of a Contiki
+00008  * port.
+00009  */
+00010 
+00011 
+00012 /*
+00013  * Copyright (c) 2003, Adam Dunkels.
+00014  * All rights reserved.
+00015  *
+00016  * Redistribution and use in source and binary forms, with or without
+00017  * modification, are permitted provided that the following conditions
+00018  * are met:
+00019  * 1. Redistributions of source code must retain the above copyright
+00020  *    notice, this list of conditions and the following disclaimer.
+00021  * 2. Redistributions in binary form must reproduce the above copyright
+00022  *    notice, this list of conditions and the following disclaimer in the
+00023  *    documentation and/or other materials provided with the distribution.
+00024  * 3. The name of the author may not be used to endorse or promote
+00025  *    products derived from this software without specific prior
+00026  *    written permission.
+00027  *
+00028  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00029  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00030  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00031  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00032  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00033  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00034  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00035  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00036  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00037  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00038  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00039  *
+00040  * This file is part of the Contiki desktop OS.
+00041  *
+00042  * $Id: shell.h,v 1.1 2006/06/07 09:43:54 adam Exp $
+00043  *
+00044  */
+00045 #ifndef __SHELL_H__
+00046 #define __SHELL_H__
+00047 
+00048 /**
+00049  * Initialize the shell.
+00050  *
+00051  * Called when the shell front-end process starts. This function may
+00052  * be used to start listening for signals.
+00053  */
+00054 void shell_init(void);
+00055 
+00056 /**
+00057  * Start the shell back-end.
+00058  *
+00059  * Called by the front-end when a new shell is started.
+00060  */
+00061 void shell_start(void);
+00062 
+00063 /**
+00064  * Process a shell command.
+00065  *
+00066  * This function will be called by the shell GUI / telnet server whan
+00067  * a command has been entered that should be processed by the shell
+00068  * back-end.
+00069  *
+00070  * \param command The command to be processed.
+00071  */
+00072 void shell_input(char *command);
+00073 
+00074 /**
+00075  * Quit the shell.
+00076  *
+00077  */
+00078 void shell_quit(char *);
+00079 
+00080 
+00081 /**
+00082  * Print a string to the shell window.
+00083  *
+00084  * This function is implemented by the shell GUI / telnet server and
+00085  * can be called by the shell back-end to output a string in the
+00086  * shell window. The string is automatically appended with a linebreak.
+00087  *
+00088  * \param str1 The first half of the string to be output.
+00089  * \param str2 The second half of the string to be output.
+00090  */
+00091 void shell_output(char *str1, char *str2);
+00092 
+00093 /**
+00094  * Print a prompt to the shell window.
+00095  *
+00096  * This function can be used by the shell back-end to print out a
+00097  * prompt to the shell window.
+00098  *
+00099  * \param prompt The prompt to be printed.
+00100  *
+00101  */
+00102 void shell_prompt(char *prompt);
+00103 
+00104 #endif /* __SHELL_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00178.html b/components/net/uip/doc/html/a00178.html new file mode 100644 index 0000000000000000000000000000000000000000..9b19f4e723e81e39d7f0099c822f9fedbec7d3ee --- /dev/null +++ b/components/net/uip/doc/html/a00178.html @@ -0,0 +1,375 @@ + + +uIP 1.0: apps/telnetd/telnetd.c Source File + + + + + + +

apps/telnetd/telnetd.c

00001 /*
+00002  * Copyright (c) 2003, Adam Dunkels.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. The name of the author may not be used to endorse or promote
+00014  *    products derived from this software without specific prior
+00015  *    written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00018  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00019  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00021  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00023  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00024  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00025  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00026  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00027  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * $Id: telnetd.c,v 1.2 2006/06/07 09:43:54 adam Exp $
+00032  *
+00033  */
+00034 
+00035 #include "uip.h"
+00036 #include "telnetd.h"
+00037 #include "memb.h"
+00038 #include "shell.h"
+00039 
+00040 #include <string.h>
+00041 
+00042 #define ISO_nl       0x0a
+00043 #define ISO_cr       0x0d
+00044 
+00045 struct telnetd_line {
+00046   char line[TELNETD_CONF_LINELEN];
+00047 };
+00048 MEMB(linemem, struct telnetd_line, TELNETD_CONF_NUMLINES);
+00049 
+00050 #define STATE_NORMAL 0
+00051 #define STATE_IAC    1
+00052 #define STATE_WILL   2
+00053 #define STATE_WONT   3
+00054 #define STATE_DO     4
+00055 #define STATE_DONT   5
+00056 #define STATE_CLOSE  6
+00057 
+00058 static struct telnetd_state s;
+00059 
+00060 #define TELNET_IAC   255
+00061 #define TELNET_WILL  251
+00062 #define TELNET_WONT  252
+00063 #define TELNET_DO    253
+00064 #define TELNET_DONT  254
+00065 /*---------------------------------------------------------------------------*/
+00066 static char *
+00067 alloc_line(void)
+00068 {
+00069   return memb_alloc(&linemem);
+00070 }
+00071 /*---------------------------------------------------------------------------*/
+00072 static void
+00073 dealloc_line(char *line)
+00074 {
+00075   memb_free(&linemem, line);
+00076 }
+00077 /*---------------------------------------------------------------------------*/
+00078 void
+00079 shell_quit(char *str)
+00080 {
+00081   s.state = STATE_CLOSE;
+00082 }
+00083 /*---------------------------------------------------------------------------*/
+00084 static void
+00085 sendline(char *line)
+00086 {
+00087   static unsigned int i;
+00088   
+00089   for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+00090     if(s.lines[i] == NULL) {
+00091       s.lines[i] = line;
+00092       break;
+00093     }
+00094   }
+00095   if(i == TELNETD_CONF_NUMLINES) {
+00096     dealloc_line(line);
+00097   }
+00098 }
+00099 /*---------------------------------------------------------------------------*/
+00100 void
+00101 shell_prompt(char *str)
+00102 {
+00103   char *line;
+00104   line = alloc_line();
+00105   if(line != NULL) {
+00106     strncpy(line, str, TELNETD_CONF_LINELEN);
+00107     /*    petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/
+00108     sendline(line);
+00109   }
+00110 }
+00111 /*---------------------------------------------------------------------------*/
+00112 void
+00113 shell_output(char *str1, char *str2)
+00114 {
+00115   static unsigned len;
+00116   char *line;
+00117 
+00118   line = alloc_line();
+00119   if(line != NULL) {
+00120     len = strlen(str1);
+00121     strncpy(line, str1, TELNETD_CONF_LINELEN);
+00122     if(len < TELNETD_CONF_LINELEN) {
+00123       strncpy(line + len, str2, TELNETD_CONF_LINELEN - len);
+00124     }
+00125     len = strlen(line);
+00126     if(len < TELNETD_CONF_LINELEN - 2) {
+00127       line[len] = ISO_cr;
+00128       line[len+1] = ISO_nl;
+00129       line[len+2] = 0;
+00130     }
+00131     /*    petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/
+00132     sendline(line);
+00133   }
+00134 }
+00135 /*---------------------------------------------------------------------------*/
+00136 void
+00137 telnetd_init(void)
+00138 {
+00139   uip_listen(HTONS(23));
+00140   memb_init(&linemem);
+00141   shell_init();
+00142 }
+00143 /*---------------------------------------------------------------------------*/
+00144 static void
+00145 acked(void)
+00146 {
+00147   static unsigned int i;
+00148   
+00149   while(s.numsent > 0) {
+00150     dealloc_line(s.lines[0]);
+00151     for(i = 1; i < TELNETD_CONF_NUMLINES; ++i) {
+00152       s.lines[i - 1] = s.lines[i];
+00153     }
+00154     s.lines[TELNETD_CONF_NUMLINES - 1] = NULL;
+00155     --s.numsent;
+00156   }
+00157 }
+00158 /*---------------------------------------------------------------------------*/
+00159 static void
+00160 senddata(void)
+00161 {
+00162   static char *bufptr, *lineptr;
+00163   static int buflen, linelen;
+00164   
+00165   bufptr = uip_appdata;
+00166   buflen = 0;
+00167   for(s.numsent = 0; s.numsent < TELNETD_CONF_NUMLINES &&
+00168         s.lines[s.numsent] != NULL ; ++s.numsent) {
+00169     lineptr = s.lines[s.numsent];
+00170     linelen = strlen(lineptr);
+00171     if(linelen > TELNETD_CONF_LINELEN) {
+00172       linelen = TELNETD_CONF_LINELEN;
+00173     }
+00174     if(buflen + linelen < uip_mss()) {
+00175       memcpy(bufptr, lineptr, linelen);
+00176       bufptr += linelen;
+00177       buflen += linelen;
+00178     } else {
+00179       break;
+00180     }
+00181   }
+00182   uip_send(uip_appdata, buflen);
+00183 }
+00184 /*---------------------------------------------------------------------------*/
+00185 static void
+00186 closed(void)
+00187 {
+00188   static unsigned int i;
+00189   
+00190   for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+00191     if(s.lines[i] != NULL) {
+00192       dealloc_line(s.lines[i]);
+00193     }
+00194   }
+00195 }
+00196 /*---------------------------------------------------------------------------*/
+00197 static void
+00198 get_char(u8_t c)
+00199 {
+00200   if(c == ISO_cr) {
+00201     return;
+00202   }
+00203   
+00204   s.buf[(int)s.bufptr] = c;
+00205   if(s.buf[(int)s.bufptr] == ISO_nl ||
+00206      s.bufptr == sizeof(s.buf) - 1) {
+00207     if(s.bufptr > 0) {
+00208       s.buf[(int)s.bufptr] = 0;
+00209       /*      petsciiconv_topetscii(s.buf, TELNETD_CONF_LINELEN);*/
+00210     }
+00211     shell_input(s.buf);
+00212     s.bufptr = 0;
+00213   } else {
+00214     ++s.bufptr;
+00215   }
+00216 }
+00217 /*---------------------------------------------------------------------------*/
+00218 static void
+00219 sendopt(u8_t option, u8_t value)
+00220 {
+00221   char *line;
+00222   line = alloc_line();
+00223   if(line != NULL) {
+00224     line[0] = TELNET_IAC;
+00225     line[1] = option;
+00226     line[2] = value;
+00227     line[3] = 0;
+00228     sendline(line);
+00229   }
+00230 }
+00231 /*---------------------------------------------------------------------------*/
+00232 static void
+00233 newdata(void)
+00234 {
+00235   u16_t len;
+00236   u8_t c;
+00237   char *dataptr;
+00238     
+00239   
+00240   len = uip_datalen();
+00241   dataptr = (char *)uip_appdata;
+00242   
+00243   while(len > 0 && s.bufptr < sizeof(s.buf)) {
+00244     c = *dataptr;
+00245     ++dataptr;
+00246     --len;
+00247     switch(s.state) {
+00248     case STATE_IAC:
+00249       if(c == TELNET_IAC) {
+00250         get_char(c);
+00251         s.state = STATE_NORMAL;
+00252       } else {
+00253         switch(c) {
+00254         case TELNET_WILL:
+00255           s.state = STATE_WILL;
+00256           break;
+00257         case TELNET_WONT:
+00258           s.state = STATE_WONT;
+00259           break;
+00260         case TELNET_DO:
+00261           s.state = STATE_DO;
+00262           break;
+00263         case TELNET_DONT:
+00264           s.state = STATE_DONT;
+00265           break;
+00266         default:
+00267           s.state = STATE_NORMAL;
+00268           break;
+00269         }
+00270       }
+00271       break;
+00272     case STATE_WILL:
+00273       /* Reply with a DONT */
+00274       sendopt(TELNET_DONT, c);
+00275       s.state = STATE_NORMAL;
+00276       break;
+00277       
+00278     case STATE_WONT:
+00279       /* Reply with a DONT */
+00280       sendopt(TELNET_DONT, c);
+00281       s.state = STATE_NORMAL;
+00282       break;
+00283     case STATE_DO:
+00284       /* Reply with a WONT */
+00285       sendopt(TELNET_WONT, c);
+00286       s.state = STATE_NORMAL;
+00287       break;
+00288     case STATE_DONT:
+00289       /* Reply with a WONT */
+00290       sendopt(TELNET_WONT, c);
+00291       s.state = STATE_NORMAL;
+00292       break;
+00293     case STATE_NORMAL:
+00294       if(c == TELNET_IAC) {
+00295         s.state = STATE_IAC;
+00296       } else {
+00297         get_char(c);
+00298       }
+00299       break;
+00300     }
+00301 
+00302     
+00303   }
+00304   
+00305 }
+00306 /*---------------------------------------------------------------------------*/
+00307 void
+00308 telnetd_appcall(void)
+00309 {
+00310   static unsigned int i;
+00311   if(uip_connected()) {
+00312     /*    tcp_markconn(uip_conn, &s);*/
+00313     for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+00314       s.lines[i] = NULL;
+00315     }
+00316     s.bufptr = 0;
+00317     s.state = STATE_NORMAL;
+00318 
+00319     shell_start();
+00320   }
+00321 
+00322   if(s.state == STATE_CLOSE) {
+00323     s.state = STATE_NORMAL;
+00324     uip_close();
+00325     return;
+00326   }
+00327   
+00328   if(uip_closed() ||
+00329      uip_aborted() ||
+00330      uip_timedout()) {
+00331     closed();
+00332   }
+00333   
+00334   if(uip_acked()) {
+00335     acked();
+00336   }
+00337   
+00338   if(uip_newdata()) {
+00339     newdata();
+00340   }
+00341   
+00342   if(uip_rexmit() ||
+00343      uip_newdata() ||
+00344      uip_acked() ||
+00345      uip_connected() ||
+00346      uip_poll()) {
+00347     senddata();
+00348   }
+00349 }
+00350 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00179.html b/components/net/uip/doc/html/a00179.html new file mode 100644 index 0000000000000000000000000000000000000000..139d6f07f8a58bd09cc29ceb2036f70a012c8711 --- /dev/null +++ b/components/net/uip/doc/html/a00179.html @@ -0,0 +1,88 @@ + + +uIP 1.0: apps/telnetd/telnetd.h Source File + + + + + + +

apps/telnetd/telnetd.h

00001 /*
+00002  * Copyright (c) 2003, Adam Dunkels.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above
+00011  *    copyright notice, this list of conditions and the following
+00012  *    disclaimer in the documentation and/or other materials provided
+00013  *    with the distribution.
+00014  * 3. The name of the author may not be used to endorse or promote
+00015  *    products derived from this software without specific prior
+00016  *    written permission.
+00017  *
+00018  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00019  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00020  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00021  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00022  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00023  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00024  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00025  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00026  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00027  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00028  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00029  *
+00030  * This file is part of the uIP TCP/IP stack
+00031  *
+00032  * $Id: telnetd.h,v 1.2 2006/06/07 09:43:54 adam Exp $
+00033  *
+00034  */
+00035 #ifndef __TELNETD_H__
+00036 #define __TELNETD_H__
+00037 
+00038 #include "uipopt.h"
+00039 
+00040 void telnetd_appcall(void);
+00041 
+00042 #ifndef TELNETD_CONF_LINELEN
+00043 #define TELNETD_CONF_LINELEN 40
+00044 #endif
+00045 #ifndef TELNETD_CONF_NUMLINES
+00046 #define TELNETD_CONF_NUMLINES 16
+00047 #endif
+00048 
+00049 struct telnetd_state {
+00050   char *lines[TELNETD_CONF_NUMLINES];
+00051   char buf[TELNETD_CONF_LINELEN];
+00052   char bufptr;
+00053   u8_t numsent;
+00054   u8_t state;
+00055 };
+00056 
+00057 typedef struct telnetd_state uip_tcp_appstate_t;
+00058 
+00059 #ifndef UIP_APPCALL
+00060 #define UIP_APPCALL     telnetd_appcall
+00061 #endif
+00062 
+00063 #endif /* __TELNETD_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00180.html b/components/net/uip/doc/html/a00180.html new file mode 100644 index 0000000000000000000000000000000000000000..6f1abbc686169cfa18cf3402ef390a0144d7b8a8 --- /dev/null +++ b/components/net/uip/doc/html/a00180.html @@ -0,0 +1,464 @@ + + +uIP 1.0: apps/webclient/webclient.c Source File + + + + + + +

apps/webclient/webclient.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup webclient Web client
+00008  * @{
+00009  *
+00010  * This example shows a HTTP client that is able to download web pages
+00011  * and files from web servers. It requires a number of callback
+00012  * functions to be implemented by the module that utilizes the code:
+00013  * webclient_datahandler(), webclient_connected(),
+00014  * webclient_timedout(), webclient_aborted(), webclient_closed().
+00015  */
+00016 
+00017 /**
+00018  * \file
+00019  * Implementation of the HTTP client.
+00020  * \author Adam Dunkels <adam@dunkels.com>
+00021  */
+00022 
+00023 /*
+00024  * Copyright (c) 2002, Adam Dunkels.
+00025  * All rights reserved.
+00026  *
+00027  * Redistribution and use in source and binary forms, with or without
+00028  * modification, are permitted provided that the following conditions
+00029  * are met:
+00030  * 1. Redistributions of source code must retain the above copyright
+00031  *    notice, this list of conditions and the following disclaimer.
+00032  * 2. Redistributions in binary form must reproduce the above
+00033  *    copyright notice, this list of conditions and the following
+00034  *    disclaimer in the documentation and/or other materials provided
+00035  *    with the distribution.
+00036  * 3. The name of the author may not be used to endorse or promote
+00037  *    products derived from this software without specific prior
+00038  *    written permission.
+00039  *
+00040  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00041  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00042  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00043  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00044  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00045  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00046  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00047  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00048  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00049  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00050  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00051  *
+00052  * This file is part of the uIP TCP/IP stack.
+00053  *
+00054  * $Id: webclient.c,v 1.2 2006/06/11 21:46:37 adam Exp $
+00055  *
+00056  */
+00057 
+00058 #include "uip.h"
+00059 #include "uiplib.h"
+00060 #include "webclient.h"
+00061 #include "resolv.h"
+00062 
+00063 #include <string.h>
+00064 
+00065 #define WEBCLIENT_TIMEOUT 100
+00066 
+00067 #define WEBCLIENT_STATE_STATUSLINE 0
+00068 #define WEBCLIENT_STATE_HEADERS    1
+00069 #define WEBCLIENT_STATE_DATA       2
+00070 #define WEBCLIENT_STATE_CLOSE      3
+00071 
+00072 #define HTTPFLAG_NONE   0
+00073 #define HTTPFLAG_OK     1
+00074 #define HTTPFLAG_MOVED  2
+00075 #define HTTPFLAG_ERROR  3
+00076 
+00077 
+00078 #define ISO_nl       0x0a
+00079 #define ISO_cr       0x0d
+00080 #define ISO_space    0x20
+00081 
+00082 
+00083 static struct webclient_state s;
+00084 
+00085 /*-----------------------------------------------------------------------------------*/
+00086 char *
+00087 webclient_mimetype(void)
+00088 {
+00089   return s.mimetype;
+00090 }
+00091 /*-----------------------------------------------------------------------------------*/
+00092 char *
+00093 webclient_filename(void)
+00094 {
+00095   return s.file;
+00096 }
+00097 /*-----------------------------------------------------------------------------------*/
+00098 char *
+00099 webclient_hostname(void)
+00100 {
+00101   return s.host;
+00102 }
+00103 /*-----------------------------------------------------------------------------------*/
+00104 unsigned short
+00105 webclient_port(void)
+00106 {
+00107   return s.port;
+00108 }
+00109 /*-----------------------------------------------------------------------------------*/
+00110 void
+00111 webclient_init(void)
+00112 {
+00113 
+00114 }
+00115 /*-----------------------------------------------------------------------------------*/
+00116 static void
+00117 init_connection(void)
+00118 {
+00119   s.state = WEBCLIENT_STATE_STATUSLINE;
+00120 
+00121   s.getrequestleft = sizeof(http_get) - 1 + 1 +
+00122     sizeof(http_10) - 1 +
+00123     sizeof(http_crnl) - 1 +
+00124     sizeof(http_host) - 1 +
+00125     sizeof(http_crnl) - 1 +
+00126     strlen(http_user_agent_fields) +
+00127     strlen(s.file) + strlen(s.host);
+00128   s.getrequestptr = 0;
+00129 
+00130   s.httpheaderlineptr = 0;
+00131 }
+00132 /*-----------------------------------------------------------------------------------*/
+00133 void
+00134 webclient_close(void)
+00135 {
+00136   s.state = WEBCLIENT_STATE_CLOSE;
+00137 }
+00138 /*-----------------------------------------------------------------------------------*/
+00139 unsigned char
+00140 webclient_get(char *host, u16_t port, char *file)
+00141 {
+00142   struct uip_conn *conn;
+00143   uip_ipaddr_t *ipaddr;
+00144   static uip_ipaddr_t addr;
+00145   
+00146   /* First check if the host is an IP address. */
+00147   ipaddr = &addr;
+00148   if(uiplib_ipaddrconv(host, (unsigned char *)addr) == 0) {
+00149     ipaddr = (uip_ipaddr_t *)resolv_lookup(host);
+00150     
+00151     if(ipaddr == NULL) {
+00152       return 0;
+00153     }
+00154   }
+00155   
+00156   conn = uip_connect(ipaddr, htons(port));
+00157   
+00158   if(conn == NULL) {
+00159     return 0;
+00160   }
+00161   
+00162   s.port = port;
+00163   strncpy(s.file, file, sizeof(s.file));
+00164   strncpy(s.host, host, sizeof(s.host));
+00165   
+00166   init_connection();
+00167   return 1;
+00168 }
+00169 /*-----------------------------------------------------------------------------------*/
+00170 static unsigned char *
+00171 copy_string(unsigned char *dest,
+00172             const unsigned char *src, unsigned char len)
+00173 {
+00174   strncpy(dest, src, len);
+00175   return dest + len;
+00176 }
+00177 /*-----------------------------------------------------------------------------------*/
+00178 static void
+00179 senddata(void)
+00180 {
+00181   u16_t len;
+00182   char *getrequest;
+00183   char *cptr;
+00184   
+00185   if(s.getrequestleft > 0) {
+00186     cptr = getrequest = (char *)uip_appdata;
+00187 
+00188     cptr = copy_string(cptr, http_get, sizeof(http_get) - 1);
+00189     cptr = copy_string(cptr, s.file, strlen(s.file));
+00190     *cptr++ = ISO_space;
+00191     cptr = copy_string(cptr, http_10, sizeof(http_10) - 1);
+00192 
+00193     cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1);
+00194     
+00195     cptr = copy_string(cptr, http_host, sizeof(http_host) - 1);
+00196     cptr = copy_string(cptr, s.host, strlen(s.host));
+00197     cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1);
+00198 
+00199     cptr = copy_string(cptr, http_user_agent_fields,
+00200                        strlen(http_user_agent_fields));
+00201     
+00202     len = s.getrequestleft > uip_mss()?
+00203       uip_mss():
+00204       s.getrequestleft;
+00205     uip_send(&(getrequest[s.getrequestptr]), len);
+00206   }
+00207 }
+00208 /*-----------------------------------------------------------------------------------*/
+00209 static void
+00210 acked(void)
+00211 {
+00212   u16_t len;
+00213   
+00214   if(s.getrequestleft > 0) {
+00215     len = s.getrequestleft > uip_mss()?
+00216       uip_mss():
+00217       s.getrequestleft;
+00218     s.getrequestleft -= len;
+00219     s.getrequestptr += len;
+00220   }
+00221 }
+00222 /*-----------------------------------------------------------------------------------*/
+00223 static u16_t
+00224 parse_statusline(u16_t len)
+00225 {
+00226   char *cptr;
+00227   
+00228   while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) {
+00229     s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata;
+00230     ++((char *)uip_appdata);
+00231     --len;
+00232     if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) {
+00233 
+00234       if((strncmp(s.httpheaderline, http_10,
+00235                   sizeof(http_10) - 1) == 0) ||
+00236          (strncmp(s.httpheaderline, http_11,
+00237                   sizeof(http_11) - 1) == 0)) {
+00238         cptr = &(s.httpheaderline[9]);
+00239         s.httpflag = HTTPFLAG_NONE;
+00240         if(strncmp(cptr, http_200, sizeof(http_200) - 1) == 0) {
+00241           /* 200 OK */
+00242           s.httpflag = HTTPFLAG_OK;
+00243         } else if(strncmp(cptr, http_301, sizeof(http_301) - 1) == 0 ||
+00244                   strncmp(cptr, http_302, sizeof(http_302) - 1) == 0) {
+00245           /* 301 Moved permanently or 302 Found. Location: header line
+00246              will contain thw new location. */
+00247           s.httpflag = HTTPFLAG_MOVED;
+00248         } else {
+00249           s.httpheaderline[s.httpheaderlineptr - 1] = 0;
+00250         }
+00251       } else {
+00252         uip_abort();
+00253         webclient_aborted();
+00254         return 0;
+00255       }
+00256       
+00257       /* We're done parsing the status line, so we reset the pointer
+00258          and start parsing the HTTP headers.*/
+00259       s.httpheaderlineptr = 0;
+00260       s.state = WEBCLIENT_STATE_HEADERS;
+00261       break;
+00262     } else {
+00263       ++s.httpheaderlineptr;
+00264     }
+00265   }
+00266   return len;
+00267 }
+00268 /*-----------------------------------------------------------------------------------*/
+00269 static char
+00270 casecmp(char *str1, const char *str2, char len)
+00271 {
+00272   static char c;
+00273   
+00274   while(len > 0) {
+00275     c = *str1;
+00276     /* Force lower-case characters. */
+00277     if(c & 0x40) {
+00278       c |= 0x20;
+00279     }
+00280     if(*str2 != c) {
+00281       return 1;
+00282     }
+00283     ++str1;
+00284     ++str2;
+00285     --len;
+00286   }
+00287   return 0;
+00288 }
+00289 /*-----------------------------------------------------------------------------------*/
+00290 static u16_t
+00291 parse_headers(u16_t len)
+00292 {
+00293   char *cptr;
+00294   static unsigned char i;
+00295   
+00296   while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) {
+00297     s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata;
+00298     ++((char *)uip_appdata);
+00299     --len;
+00300     if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) {
+00301       /* We have an entire HTTP header line in s.httpheaderline, so
+00302          we parse it. */
+00303       if(s.httpheaderline[0] == ISO_cr) {
+00304         /* This was the last header line (i.e., and empty "\r\n"), so
+00305            we are done with the headers and proceed with the actual
+00306            data. */
+00307         s.state = WEBCLIENT_STATE_DATA;
+00308         return len;
+00309       }
+00310 
+00311       s.httpheaderline[s.httpheaderlineptr - 1] = 0;
+00312       /* Check for specific HTTP header fields. */
+00313       if(casecmp(s.httpheaderline, http_content_type,
+00314                      sizeof(http_content_type) - 1) == 0) {
+00315         /* Found Content-type field. */
+00316         cptr = strchr(s.httpheaderline, ';');
+00317         if(cptr != NULL) {
+00318           *cptr = 0;
+00319         }
+00320         strncpy(s.mimetype, s.httpheaderline +
+00321                 sizeof(http_content_type) - 1, sizeof(s.mimetype));
+00322       } else if(casecmp(s.httpheaderline, http_location,
+00323                             sizeof(http_location) - 1) == 0) {
+00324         cptr = s.httpheaderline +
+00325           sizeof(http_location) - 1;
+00326         
+00327         if(strncmp(cptr, http_http, 7) == 0) {
+00328           cptr += 7;
+00329           for(i = 0; i < s.httpheaderlineptr - 7; ++i) {
+00330             if(*cptr == 0 ||
+00331                *cptr == '/' ||
+00332                *cptr == ' ' ||
+00333                *cptr == ':') {
+00334               s.host[i] = 0;
+00335               break;
+00336             }
+00337             s.host[i] = *cptr;
+00338             ++cptr;
+00339           }
+00340         }
+00341         strncpy(s.file, cptr, sizeof(s.file));
+00342         /*      s.file[s.httpheaderlineptr - i] = 0;*/
+00343       }
+00344 
+00345 
+00346       /* We're done parsing, so we reset the pointer and start the
+00347          next line. */
+00348       s.httpheaderlineptr = 0;
+00349     } else {
+00350       ++s.httpheaderlineptr;
+00351     }
+00352   }
+00353   return len;
+00354 }
+00355 /*-----------------------------------------------------------------------------------*/
+00356 static void
+00357 newdata(void)
+00358 {
+00359   u16_t len;
+00360 
+00361   len = uip_datalen();
+00362 
+00363   if(s.state == WEBCLIENT_STATE_STATUSLINE) {
+00364     len = parse_statusline(len);
+00365   }
+00366   
+00367   if(s.state == WEBCLIENT_STATE_HEADERS && len > 0) {
+00368     len = parse_headers(len);
+00369   }
+00370 
+00371   if(len > 0 && s.state == WEBCLIENT_STATE_DATA &&
+00372      s.httpflag != HTTPFLAG_MOVED) {
+00373     webclient_datahandler((char *)uip_appdata, len);
+00374   }
+00375 }
+00376 /*-----------------------------------------------------------------------------------*/
+00377 void
+00378 webclient_appcall(void)
+00379 {
+00380   if(uip_connected()) {
+00381     s.timer = 0;
+00382     s.state = WEBCLIENT_STATE_STATUSLINE;
+00383     senddata();
+00384     webclient_connected();
+00385     return;
+00386   }
+00387 
+00388   if(s.state == WEBCLIENT_STATE_CLOSE) {
+00389     webclient_closed();
+00390     uip_abort();
+00391     return;
+00392   }
+00393 
+00394   if(uip_aborted()) {
+00395     webclient_aborted();
+00396   }
+00397   if(uip_timedout()) {
+00398     webclient_timedout();
+00399   }
+00400 
+00401   
+00402   if(uip_acked()) {
+00403     s.timer = 0;
+00404     acked();
+00405   }
+00406   if(uip_newdata()) {
+00407     s.timer = 0;
+00408     newdata();
+00409   }
+00410   if(uip_rexmit() ||
+00411      uip_newdata() ||
+00412      uip_acked()) {
+00413     senddata();
+00414   } else if(uip_poll()) {
+00415     ++s.timer;
+00416     if(s.timer == WEBCLIENT_TIMEOUT) {
+00417       webclient_timedout();
+00418       uip_abort();
+00419       return;
+00420     }
+00421         /*    senddata();*/
+00422   }
+00423 
+00424   if(uip_closed()) {
+00425     if(s.httpflag != HTTPFLAG_MOVED) {
+00426       /* Send NULL data to signal EOF. */
+00427       webclient_datahandler(NULL, 0);
+00428     } else {
+00429       if(resolv_lookup(s.host) == NULL) {
+00430         resolv_query(s.host);
+00431       }
+00432       webclient_get(s.host, s.port, s.file);
+00433     }
+00434   }
+00435 }
+00436 /*-----------------------------------------------------------------------------------*/
+00437 
+00438 /** @} */
+00439 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00181.html b/components/net/uip/doc/html/a00181.html new file mode 100644 index 0000000000000000000000000000000000000000..4407232c44f79a53de55bd196b3cb16ef36f96b5 --- /dev/null +++ b/components/net/uip/doc/html/a00181.html @@ -0,0 +1,253 @@ + + +uIP 1.0: apps/webclient/webclient.h Source File + + + + + + +

apps/webclient/webclient.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup webclient
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  * Header file for the HTTP client.
+00009  * \author Adam Dunkels <adam@dunkels.com>
+00010  */
+00011 
+00012 /*
+00013  * Copyright (c) 2002, Adam Dunkels.
+00014  * All rights reserved.
+00015  *
+00016  * Redistribution and use in source and binary forms, with or without
+00017  * modification, are permitted provided that the following conditions
+00018  * are met:
+00019  * 1. Redistributions of source code must retain the above copyright
+00020  *    notice, this list of conditions and the following disclaimer.
+00021  * 2. Redistributions in binary form must reproduce the above
+00022  *    copyright notice, this list of conditions and the following
+00023  *    disclaimer in the documentation and/or other materials provided
+00024  *    with the distribution.
+00025  * 3. The name of the author may not be used to endorse or promote
+00026  *    products derived from this software without specific prior
+00027  *    written permission.
+00028  *
+00029  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00030  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00031  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00032  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00033  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00034  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00035  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00036  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00037  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00038  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00039  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00040  *
+00041  * This file is part of the uIP TCP/IP stack.
+00042  *
+00043  * $Id: webclient.h,v 1.2 2006/06/11 21:46:37 adam Exp $
+00044  *
+00045  */
+00046 #ifndef __WEBCLIENT_H__
+00047 #define __WEBCLIENT_H__
+00048 
+00049 
+00050 #include "webclient-strings.h"
+00051 #include "uipopt.h"
+00052 
+00053 #define WEBCLIENT_CONF_MAX_URLLEN 100
+00054 
+00055 struct webclient_state {
+00056   u8_t timer;
+00057   u8_t state;
+00058   u8_t httpflag;
+00059 
+00060   u16_t port;
+00061   char host[40];
+00062   char file[WEBCLIENT_CONF_MAX_URLLEN];
+00063   u16_t getrequestptr;
+00064   u16_t getrequestleft;
+00065   
+00066   char httpheaderline[200];
+00067   u16_t httpheaderlineptr;
+00068 
+00069   char mimetype[32];
+00070 };
+00071 
+00072 typedef struct webclient_state uip_tcp_appstate_t;
+00073 #define UIP_APPCALL webclient_appcall
+00074 
+00075 /**
+00076  * Callback function that is called from the webclient code when HTTP
+00077  * data has been received.
+00078  *
+00079  * This function must be implemented by the module that uses the
+00080  * webclient code. The function is called from the webclient module
+00081  * when HTTP data has been received. The function is not called when
+00082  * HTTP headers are received, only for the actual data.
+00083  *
+00084  * \note This function is called many times, repetedly, when data is
+00085  * being received, and not once when all data has been received.
+00086  *
+00087  * \param data A pointer to the data that has been received.
+00088  * \param len The length of the data that has been received.
+00089  */
+00090 void webclient_datahandler(char *data, u16_t len);
+00091 
+00092 /**
+00093  * Callback function that is called from the webclient code when the
+00094  * HTTP connection has been connected to the web server.
+00095  *
+00096  * This function must be implemented by the module that uses the
+00097  * webclient code.
+00098  */
+00099 void webclient_connected(void);
+00100 
+00101 /**
+00102  * Callback function that is called from the webclient code if the
+00103  * HTTP connection to the web server has timed out.
+00104  *
+00105  * This function must be implemented by the module that uses the
+00106  * webclient code.
+00107  */
+00108 void webclient_timedout(void);
+00109 
+00110 /**
+00111  * Callback function that is called from the webclient code if the
+00112  * HTTP connection to the web server has been aborted by the web
+00113  * server.
+00114  *
+00115  * This function must be implemented by the module that uses the
+00116  * webclient code.
+00117  */
+00118 void webclient_aborted(void);
+00119 
+00120 /**
+00121  * Callback function that is called from the webclient code when the
+00122  * HTTP connection to the web server has been closed.
+00123  *
+00124  * This function must be implemented by the module that uses the
+00125  * webclient code.
+00126  */
+00127 void webclient_closed(void);
+00128 
+00129 
+00130 
+00131 /**
+00132  * Initialize the webclient module.
+00133  */
+00134 void webclient_init(void);
+00135 
+00136 /**
+00137  * Open an HTTP connection to a web server and ask for a file using
+00138  * the GET method.
+00139  *
+00140  * This function opens an HTTP connection to the specified web server
+00141  * and requests the specified file using the GET method. When the HTTP
+00142  * connection has been connected, the webclient_connected() callback
+00143  * function is called and when the HTTP data arrives the
+00144  * webclient_datahandler() callback function is called.
+00145  *
+00146  * The callback function webclient_timedout() is called if the web
+00147  * server could not be contacted, and the webclient_aborted() callback
+00148  * function is called if the HTTP connection is aborted by the web
+00149  * server.
+00150  *
+00151  * When the HTTP request has been completed and the HTTP connection is
+00152  * closed, the webclient_closed() callback function will be called.
+00153  *
+00154  * \note If the function is passed a host name, it must already be in
+00155  * the resolver cache in order for the function to connect to the web
+00156  * server. It is therefore up to the calling module to implement the
+00157  * resolver calls and the signal handler used for reporting a resolv
+00158  * query answer.
+00159  *
+00160  * \param host A pointer to a string containing either a host name or
+00161  * a numerical IP address in dotted decimal notation (e.g., 192.168.23.1).
+00162  *
+00163  * \param port The port number to which to connect, in host byte order.
+00164  *
+00165  * \param file A pointer to the name of the file to get.
+00166  *
+00167  * \retval 0 if the host name could not be found in the cache, or
+00168  * if a TCP connection could not be created.
+00169  *
+00170  * \retval 1 if the connection was initiated.
+00171  */
+00172 unsigned char webclient_get(char *host, u16_t port, char *file);
+00173 
+00174 /**
+00175  * Close the currently open HTTP connection.
+00176  */
+00177 void webclient_close(void);
+00178 void webclient_appcall(void);
+00179 
+00180 /**
+00181  * Obtain the MIME type of the current HTTP data stream.
+00182  *
+00183  * \return A pointer to a string contaning the MIME type. The string
+00184  * may be empty if no MIME type was reported by the web server.
+00185  */
+00186 char *webclient_mimetype(void);
+00187 
+00188 /**
+00189  * Obtain the filename of the current HTTP data stream.
+00190  *
+00191  * The filename of an HTTP request may be changed by the web server,
+00192  * and may therefore not be the same as when the original GET request
+00193  * was made with webclient_get(). This function is used for obtaining
+00194  * the current filename.
+00195  *
+00196  * \return A pointer to the current filename.
+00197  */
+00198 char *webclient_filename(void);
+00199 
+00200 /**
+00201  * Obtain the hostname of the current HTTP data stream.
+00202  *
+00203  * The hostname of the web server of an HTTP request may be changed
+00204  * by the web server, and may therefore not be the same as when the
+00205  * original GET request was made with webclient_get(). This function
+00206  * is used for obtaining the current hostname.
+00207  *
+00208  * \return A pointer to the current hostname.
+00209  */
+00210 char *webclient_hostname(void);
+00211 
+00212 /**
+00213  * Obtain the port number of the current HTTP data stream.
+00214  *
+00215  * The port number of an HTTP request may be changed by the web
+00216  * server, and may therefore not be the same as when the original GET
+00217  * request was made with webclient_get(). This function is used for
+00218  * obtaining the current port number.
+00219  *
+00220  * \return The port number of the current HTTP data stream, in host byte order.
+00221  */
+00222 unsigned short webclient_port(void);
+00223 
+00224 
+00225 
+00226 #endif /* __WEBCLIENT_H__ */
+00227 
+00228 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00182.html b/components/net/uip/doc/html/a00182.html new file mode 100644 index 0000000000000000000000000000000000000000..cb9d145797f14e1ccca067a98a2e1792609ab1b9 --- /dev/null +++ b/components/net/uip/doc/html/a00182.html @@ -0,0 +1,228 @@ + + +uIP 1.0: apps/webserver/httpd-cgi.c Source File + + + + + + +

apps/webserver/httpd-cgi.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup httpd
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  *         Web server script interface
+00009  * \author
+00010  *         Adam Dunkels <adam@sics.se>
+00011  *
+00012  */
+00013 
+00014 /*
+00015  * Copyright (c) 2001-2006, Adam Dunkels.
+00016  * All rights reserved.
+00017  *
+00018  * Redistribution and use in source and binary forms, with or without
+00019  * modification, are permitted provided that the following conditions
+00020  * are met:
+00021  * 1. Redistributions of source code must retain the above copyright
+00022  *    notice, this list of conditions and the following disclaimer.
+00023  * 2. Redistributions in binary form must reproduce the above copyright
+00024  *    notice, this list of conditions and the following disclaimer in the
+00025  *    documentation and/or other materials provided with the distribution.
+00026  * 3. The name of the author may not be used to endorse or promote
+00027  *    products derived from this software without specific prior
+00028  *    written permission.
+00029  *
+00030  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00031  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00032  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00033  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00034  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00035  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00036  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00037  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00038  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00039  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00040  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00041  *
+00042  * This file is part of the uIP TCP/IP stack.
+00043  *
+00044  * $Id: httpd-cgi.c,v 1.2 2006/06/11 21:46:37 adam Exp $
+00045  *
+00046  */
+00047 
+00048 #include "uip.h"
+00049 #include "psock.h"
+00050 #include "httpd.h"
+00051 #include "httpd-cgi.h"
+00052 #include "httpd-fs.h"
+00053 
+00054 #include <stdio.h>
+00055 #include <string.h>
+00056 
+00057 HTTPD_CGI_CALL(file, "file-stats", file_stats);
+00058 HTTPD_CGI_CALL(tcp, "tcp-connections", tcp_stats);
+00059 HTTPD_CGI_CALL(net, "net-stats", net_stats);
+00060 
+00061 static const struct httpd_cgi_call *calls[] = { &file, &tcp, &net, NULL };
+00062 
+00063 /*---------------------------------------------------------------------------*/
+00064 static
+00065 PT_THREAD(nullfunction(struct httpd_state *s, char *ptr))
+00066 {
+00067   PSOCK_BEGIN(&s->sout);
+00068   PSOCK_END(&s->sout);
+00069 }
+00070 /*---------------------------------------------------------------------------*/
+00071 httpd_cgifunction
+00072 httpd_cgi(char *name)
+00073 {
+00074   const struct httpd_cgi_call **f;
+00075 
+00076   /* Find the matching name in the table, return the function. */
+00077   for(f = calls; *f != NULL; ++f) {
+00078     if(strncmp((*f)->name, name, strlen((*f)->name)) == 0) {
+00079       return (*f)->function;
+00080     }
+00081   }
+00082   return nullfunction;
+00083 }
+00084 /*---------------------------------------------------------------------------*/
+00085 static unsigned short
+00086 generate_file_stats(void *arg)
+00087 {
+00088   char *f = (char *)arg;
+00089   return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, "%5u", httpd_fs_count(f));
+00090 }
+00091 /*---------------------------------------------------------------------------*/
+00092 static
+00093 PT_THREAD(file_stats(struct httpd_state *s, char *ptr))
+00094 {
+00095   PSOCK_BEGIN(&s->sout);
+00096 
+00097   PSOCK_GENERATOR_SEND(&s->sout, generate_file_stats, strchr(ptr, ' ') + 1);
+00098   
+00099   PSOCK_END(&s->sout);
+00100 }
+00101 /*---------------------------------------------------------------------------*/
+00102 static const char closed[] =   /*  "CLOSED",*/
+00103 {0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0};
+00104 static const char syn_rcvd[] = /*  "SYN-RCVD",*/
+00105 {0x53, 0x59, 0x4e, 0x2d, 0x52, 0x43, 0x56,
+00106  0x44,  0};
+00107 static const char syn_sent[] = /*  "SYN-SENT",*/
+00108 {0x53, 0x59, 0x4e, 0x2d, 0x53, 0x45, 0x4e,
+00109  0x54,  0};
+00110 static const char established[] = /*  "ESTABLISHED",*/
+00111 {0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48,
+00112  0x45, 0x44, 0};
+00113 static const char fin_wait_1[] = /*  "FIN-WAIT-1",*/
+00114 {0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,
+00115  0x54, 0x2d, 0x31, 0};
+00116 static const char fin_wait_2[] = /*  "FIN-WAIT-2",*/
+00117 {0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,
+00118  0x54, 0x2d, 0x32, 0};
+00119 static const char closing[] = /*  "CLOSING",*/
+00120 {0x43, 0x4c, 0x4f, 0x53, 0x49,
+00121  0x4e, 0x47, 0};
+00122 static const char time_wait[] = /*  "TIME-WAIT,"*/
+00123 {0x54, 0x49, 0x4d, 0x45, 0x2d, 0x57, 0x41,
+00124  0x49, 0x54, 0};
+00125 static const char last_ack[] = /*  "LAST-ACK"*/
+00126 {0x4c, 0x41, 0x53, 0x54, 0x2d, 0x41, 0x43,
+00127  0x4b, 0};
+00128 
+00129 static const char *states[] = {
+00130   closed,
+00131   syn_rcvd,
+00132   syn_sent,
+00133   established,
+00134   fin_wait_1,
+00135   fin_wait_2,
+00136   closing,
+00137   time_wait,
+00138   last_ack};
+00139   
+00140 
+00141 static unsigned short
+00142 generate_tcp_stats(void *arg)
+00143 {
+00144   struct uip_conn *conn;
+00145   struct httpd_state *s = (struct httpd_state *)arg;
+00146     
+00147   conn = &uip_conns[s->count];
+00148   return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE,
+00149                  "<tr><td>%d</td><td>%u.%u.%u.%u:%u</td><td>%s</td><td>%u</td><td>%u</td><td>%c %c</td></tr>\r\n",
+00150                  htons(conn->lport),
+00151                  htons(conn->ripaddr[0]) >> 8,
+00152                  htons(conn->ripaddr[0]) & 0xff,
+00153                  htons(conn->ripaddr[1]) >> 8,
+00154                  htons(conn->ripaddr[1]) & 0xff,
+00155                  htons(conn->rport),
+00156                  states[conn->tcpstateflags & UIP_TS_MASK],
+00157                  conn->nrtx,
+00158                  conn->timer,
+00159                  (uip_outstanding(conn))? '*':' ',
+00160                  (uip_stopped(conn))? '!':' ');
+00161 }
+00162 /*---------------------------------------------------------------------------*/
+00163 static
+00164 PT_THREAD(tcp_stats(struct httpd_state *s, char *ptr))
+00165 {
+00166   
+00167   PSOCK_BEGIN(&s->sout);
+00168 
+00169   for(s->count = 0; s->count < UIP_CONNS; ++s->count) {
+00170     if((uip_conns[s->count].tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) {
+00171       PSOCK_GENERATOR_SEND(&s->sout, generate_tcp_stats, s);
+00172     }
+00173   }
+00174 
+00175   PSOCK_END(&s->sout);
+00176 }
+00177 /*---------------------------------------------------------------------------*/
+00178 static unsigned short
+00179 generate_net_stats(void *arg)
+00180 {
+00181   struct httpd_state *s = (struct httpd_state *)arg;
+00182   return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE,
+00183                   "%5u\n", ((uip_stats_t *)&uip_stat)[s->count]);
+00184 }
+00185 
+00186 static
+00187 PT_THREAD(net_stats(struct httpd_state *s, char *ptr))
+00188 {
+00189   PSOCK_BEGIN(&s->sout);
+00190 
+00191 #if UIP_STATISTICS
+00192 
+00193   for(s->count = 0; s->count < sizeof(uip_stat) / sizeof(uip_stats_t);
+00194       ++s->count) {
+00195     PSOCK_GENERATOR_SEND(&s->sout, generate_net_stats, s);
+00196   }
+00197   
+00198 #endif /* UIP_STATISTICS */
+00199   
+00200   PSOCK_END(&s->sout);
+00201 }
+00202 /*---------------------------------------------------------------------------*/
+00203 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00183.html b/components/net/uip/doc/html/a00183.html new file mode 100644 index 0000000000000000000000000000000000000000..0c753470baa4a29a43c6003a88c4f2bd01d2109a --- /dev/null +++ b/components/net/uip/doc/html/a00183.html @@ -0,0 +1,109 @@ + + +uIP 1.0: apps/webserver/httpd-cgi.h Source File + + + + + + +

apps/webserver/httpd-cgi.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup httpd
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  *         Web server script interface header file
+00009  * \author
+00010  *         Adam Dunkels <adam@sics.se>
+00011  *
+00012  */
+00013 
+00014 
+00015 
+00016 /*
+00017  * Copyright (c) 2001, Adam Dunkels.
+00018  * All rights reserved.
+00019  *
+00020  * Redistribution and use in source and binary forms, with or without
+00021  * modification, are permitted provided that the following conditions
+00022  * are met:
+00023  * 1. Redistributions of source code must retain the above copyright
+00024  *    notice, this list of conditions and the following disclaimer.
+00025  * 2. Redistributions in binary form must reproduce the above copyright
+00026  *    notice, this list of conditions and the following disclaimer in the
+00027  *    documentation and/or other materials provided with the distribution.
+00028  * 3. The name of the author may not be used to endorse or promote
+00029  *    products derived from this software without specific prior
+00030  *    written permission.
+00031  *
+00032  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00033  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00034  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00035  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00036  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00037  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00038  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00039  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00040  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00041  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00042  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00043  *
+00044  * This file is part of the uIP TCP/IP stack.
+00045  *
+00046  * $Id: httpd-cgi.h,v 1.2 2006/06/11 21:46:38 adam Exp $
+00047  *
+00048  */
+00049 
+00050 #ifndef __HTTPD_CGI_H__
+00051 #define __HTTPD_CGI_H__
+00052 
+00053 #include "psock.h"
+00054 #include "httpd.h"
+00055 
+00056 typedef PT_THREAD((* httpd_cgifunction)(struct httpd_state *, char *));
+00057 
+00058 httpd_cgifunction httpd_cgi(char *name);
+00059 
+00060 struct httpd_cgi_call {
+00061   const char *name;
+00062   const httpd_cgifunction function;
+00063 };
+00064 
+00065 /**
+00066  * \brief      HTTPD CGI function declaration
+00067  * \param name The C variable name of the function
+00068  * \param str  The string name of the function, used in the script file
+00069  * \param function A pointer to the function that implements it
+00070  *
+00071  *             This macro is used for declaring a HTTPD CGI
+00072  *             function. This function is then added to the list of
+00073  *             HTTPD CGI functions with the httpd_cgi_add() function.
+00074  *
+00075  * \hideinitializer
+00076  */
+00077 #define HTTPD_CGI_CALL(name, str, function) \
+00078 static PT_THREAD(function(struct httpd_state *, char *)); \
+00079 static const struct httpd_cgi_call name = {str, function}
+00080 
+00081 void httpd_cgi_init(void);
+00082 #endif /* __HTTPD_CGI_H__ */
+00083 
+00084 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00184.html b/components/net/uip/doc/html/a00184.html new file mode 100644 index 0000000000000000000000000000000000000000..f49fd5669d0d5010425bee8c4efd6b5213d4fbfb --- /dev/null +++ b/components/net/uip/doc/html/a00184.html @@ -0,0 +1,363 @@ + + +uIP 1.0: apps/webserver/httpd.c Source File + + + + + + +

apps/webserver/httpd.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup httpd Web server
+00008  * @{
+00009  * The uIP web server is a very simplistic implementation of an HTTP
+00010  * server. It can serve web pages and files from a read-only ROM
+00011  * filesystem, and provides a very small scripting language.
+00012 
+00013  */
+00014 
+00015 /**
+00016  * \file
+00017  *         Web server
+00018  * \author
+00019  *         Adam Dunkels <adam@sics.se>
+00020  */
+00021 
+00022 
+00023 /*
+00024  * Copyright (c) 2004, Adam Dunkels.
+00025  * All rights reserved.
+00026  *
+00027  * Redistribution and use in source and binary forms, with or without
+00028  * modification, are permitted provided that the following conditions
+00029  * are met:
+00030  * 1. Redistributions of source code must retain the above copyright
+00031  *    notice, this list of conditions and the following disclaimer.
+00032  * 2. Redistributions in binary form must reproduce the above copyright
+00033  *    notice, this list of conditions and the following disclaimer in the
+00034  *    documentation and/or other materials provided with the distribution.
+00035  * 3. Neither the name of the Institute nor the names of its contributors
+00036  *    may be used to endorse or promote products derived from this software
+00037  *    without specific prior written permission.
+00038  *
+00039  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00040  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00041  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00042  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00043  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00044  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00045  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00046  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00047  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00048  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00049  * SUCH DAMAGE.
+00050  *
+00051  * This file is part of the uIP TCP/IP stack.
+00052  *
+00053  * Author: Adam Dunkels <adam@sics.se>
+00054  *
+00055  * $Id: httpd.c,v 1.2 2006/06/11 21:46:38 adam Exp $
+00056  */
+00057 
+00058 #include "uip.h"
+00059 #include "httpd.h"
+00060 #include "httpd-fs.h"
+00061 #include "httpd-cgi.h"
+00062 #include "http-strings.h"
+00063 
+00064 #include <string.h>
+00065 
+00066 #define STATE_WAITING 0
+00067 #define STATE_OUTPUT  1
+00068 
+00069 #define ISO_nl      0x0a
+00070 #define ISO_space   0x20
+00071 #define ISO_bang    0x21
+00072 #define ISO_percent 0x25
+00073 #define ISO_period  0x2e
+00074 #define ISO_slash   0x2f
+00075 #define ISO_colon   0x3a
+00076 
+00077 
+00078 /*---------------------------------------------------------------------------*/
+00079 static unsigned short
+00080 generate_part_of_file(void *state)
+00081 {
+00082   struct httpd_state *s = (struct httpd_state *)state;
+00083 
+00084   if(s->file.len > uip_mss()) {
+00085     s->len = uip_mss();
+00086   } else {
+00087     s->len = s->file.len;
+00088   }
+00089   memcpy(uip_appdata, s->file.data, s->len);
+00090   
+00091   return s->len;
+00092 }
+00093 /*---------------------------------------------------------------------------*/
+00094 static
+00095 PT_THREAD(send_file(struct httpd_state *s))
+00096 {
+00097   PSOCK_BEGIN(&s->sout);
+00098   
+00099   do {
+00100     PSOCK_GENERATOR_SEND(&s->sout, generate_part_of_file, s);
+00101     s->file.len -= s->len;
+00102     s->file.data += s->len;
+00103   } while(s->file.len > 0);
+00104       
+00105   PSOCK_END(&s->sout);
+00106 }
+00107 /*---------------------------------------------------------------------------*/
+00108 static
+00109 PT_THREAD(send_part_of_file(struct httpd_state *s))
+00110 {
+00111   PSOCK_BEGIN(&s->sout);
+00112 
+00113   PSOCK_SEND(&s->sout, s->file.data, s->len);
+00114   
+00115   PSOCK_END(&s->sout);
+00116 }
+00117 /*---------------------------------------------------------------------------*/
+00118 static void
+00119 next_scriptstate(struct httpd_state *s)
+00120 {
+00121   char *p;
+00122   p = strchr(s->scriptptr, ISO_nl) + 1;
+00123   s->scriptlen -= (unsigned short)(p - s->scriptptr);
+00124   s->scriptptr = p;
+00125 }
+00126 /*---------------------------------------------------------------------------*/
+00127 static
+00128 PT_THREAD(handle_script(struct httpd_state *s))
+00129 {
+00130   char *ptr;
+00131   
+00132   PT_BEGIN(&s->scriptpt);
+00133 
+00134 
+00135   while(s->file.len > 0) {
+00136 
+00137     /* Check if we should start executing a script. */
+00138     if(*s->file.data == ISO_percent &&
+00139        *(s->file.data + 1) == ISO_bang) {
+00140       s->scriptptr = s->file.data + 3;
+00141       s->scriptlen = s->file.len - 3;
+00142       if(*(s->scriptptr - 1) == ISO_colon) {
+00143         httpd_fs_open(s->scriptptr + 1, &s->file);
+00144         PT_WAIT_THREAD(&s->scriptpt, send_file(s));
+00145       } else {
+00146         PT_WAIT_THREAD(&s->scriptpt,
+00147                        httpd_cgi(s->scriptptr)(s, s->scriptptr));
+00148       }
+00149       next_scriptstate(s);
+00150       
+00151       /* The script is over, so we reset the pointers and continue
+00152          sending the rest of the file. */
+00153       s->file.data = s->scriptptr;
+00154       s->file.len = s->scriptlen;
+00155     } else {
+00156       /* See if we find the start of script marker in the block of HTML
+00157          to be sent. */
+00158 
+00159       if(s->file.len > uip_mss()) {
+00160         s->len = uip_mss();
+00161       } else {
+00162         s->len = s->file.len;
+00163       }
+00164 
+00165       if(*s->file.data == ISO_percent) {
+00166         ptr = strchr(s->file.data + 1, ISO_percent);
+00167       } else {
+00168         ptr = strchr(s->file.data, ISO_percent);
+00169       }
+00170       if(ptr != NULL &&
+00171          ptr != s->file.data) {
+00172         s->len = (int)(ptr - s->file.data);
+00173         if(s->len >= uip_mss()) {
+00174           s->len = uip_mss();
+00175         }
+00176       }
+00177       PT_WAIT_THREAD(&s->scriptpt, send_part_of_file(s));
+00178       s->file.data += s->len;
+00179       s->file.len -= s->len;
+00180       
+00181     }
+00182   }
+00183   
+00184   PT_END(&s->scriptpt);
+00185 }
+00186 /*---------------------------------------------------------------------------*/
+00187 static
+00188 PT_THREAD(send_headers(struct httpd_state *s, const char *statushdr))
+00189 {
+00190   char *ptr;
+00191 
+00192   PSOCK_BEGIN(&s->sout);
+00193 
+00194   PSOCK_SEND_STR(&s->sout, statushdr);
+00195 
+00196   ptr = strrchr(s->filename, ISO_period);
+00197   if(ptr == NULL) {
+00198     PSOCK_SEND_STR(&s->sout, http_content_type_binary);
+00199   } else if(strncmp(http_html, ptr, 5) == 0 ||
+00200             strncmp(http_shtml, ptr, 6) == 0) {
+00201     PSOCK_SEND_STR(&s->sout, http_content_type_html);
+00202   } else if(strncmp(http_css, ptr, 4) == 0) {
+00203     PSOCK_SEND_STR(&s->sout, http_content_type_css);
+00204   } else if(strncmp(http_png, ptr, 4) == 0) {
+00205     PSOCK_SEND_STR(&s->sout, http_content_type_png);
+00206   } else if(strncmp(http_gif, ptr, 4) == 0) {
+00207     PSOCK_SEND_STR(&s->sout, http_content_type_gif);
+00208   } else if(strncmp(http_jpg, ptr, 4) == 0) {
+00209     PSOCK_SEND_STR(&s->sout, http_content_type_jpg);
+00210   } else {
+00211     PSOCK_SEND_STR(&s->sout, http_content_type_plain);
+00212   }
+00213   PSOCK_END(&s->sout);
+00214 }
+00215 /*---------------------------------------------------------------------------*/
+00216 static
+00217 PT_THREAD(handle_output(struct httpd_state *s))
+00218 {
+00219   char *ptr;
+00220   
+00221   PT_BEGIN(&s->outputpt);
+00222  
+00223   if(!httpd_fs_open(s->filename, &s->file)) {
+00224     httpd_fs_open(http_404_html, &s->file);
+00225     strcpy(s->filename, http_404_html);
+00226     PT_WAIT_THREAD(&s->outputpt,
+00227                    send_headers(s,
+00228                    http_header_404));
+00229     PT_WAIT_THREAD(&s->outputpt,
+00230                    send_file(s));
+00231   } else {
+00232     PT_WAIT_THREAD(&s->outputpt,
+00233                    send_headers(s,
+00234                    http_header_200));
+00235     ptr = strchr(s->filename, ISO_period);
+00236     if(ptr != NULL && strncmp(ptr, http_shtml, 6) == 0) {
+00237       PT_INIT(&s->scriptpt);
+00238       PT_WAIT_THREAD(&s->outputpt, handle_script(s));
+00239     } else {
+00240       PT_WAIT_THREAD(&s->outputpt,
+00241                      send_file(s));
+00242     }
+00243   }
+00244   PSOCK_CLOSE(&s->sout);
+00245   PT_END(&s->outputpt);
+00246 }
+00247 /*---------------------------------------------------------------------------*/
+00248 static
+00249 PT_THREAD(handle_input(struct httpd_state *s))
+00250 {
+00251   PSOCK_BEGIN(&s->sin);
+00252 
+00253   PSOCK_READTO(&s->sin, ISO_space);
+00254 
+00255   
+00256   if(strncmp(s->inputbuf, http_get, 4) != 0) {
+00257     PSOCK_CLOSE_EXIT(&s->sin);
+00258   }
+00259   PSOCK_READTO(&s->sin, ISO_space);
+00260 
+00261   if(s->inputbuf[0] != ISO_slash) {
+00262     PSOCK_CLOSE_EXIT(&s->sin);
+00263   }
+00264 
+00265   if(s->inputbuf[1] == ISO_space) {
+00266     strncpy(s->filename, http_index_html, sizeof(s->filename));
+00267   } else {
+00268     s->inputbuf[PSOCK_DATALEN(&s->sin) - 1] = 0;
+00269     strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename));
+00270   }
+00271 
+00272   /*  httpd_log_file(uip_conn->ripaddr, s->filename);*/
+00273   
+00274   s->state = STATE_OUTPUT;
+00275 
+00276   while(1) {
+00277     PSOCK_READTO(&s->sin, ISO_nl);
+00278 
+00279     if(strncmp(s->inputbuf, http_referer, 8) == 0) {
+00280       s->inputbuf[PSOCK_DATALEN(&s->sin) - 2] = 0;
+00281       /*      httpd_log(&s->inputbuf[9]);*/
+00282     }
+00283   }
+00284   
+00285   PSOCK_END(&s->sin);
+00286 }
+00287 /*---------------------------------------------------------------------------*/
+00288 static void
+00289 handle_connection(struct httpd_state *s)
+00290 {
+00291   handle_input(s);
+00292   if(s->state == STATE_OUTPUT) {
+00293     handle_output(s);
+00294   }
+00295 }
+00296 /*---------------------------------------------------------------------------*/
+00297 void
+00298 httpd_appcall(void)
+00299 {
+00300   struct httpd_state *s = (struct httpd_state *)&(uip_conn->appstate);
+00301 
+00302   if(uip_closed() || uip_aborted() || uip_timedout()) {
+00303   } else if(uip_connected()) {
+00304     PSOCK_INIT(&s->sin, s->inputbuf, sizeof(s->inputbuf) - 1);
+00305     PSOCK_INIT(&s->sout, s->inputbuf, sizeof(s->inputbuf) - 1);
+00306     PT_INIT(&s->outputpt);
+00307     s->state = STATE_WAITING;
+00308     /*    timer_set(&s->timer, CLOCK_SECOND * 100);*/
+00309     s->timer = 0;
+00310     handle_connection(s);
+00311   } else if(s != NULL) {
+00312     if(uip_poll()) {
+00313       ++s->timer;
+00314       if(s->timer >= 20) {
+00315         uip_abort();
+00316       }
+00317     } else {
+00318       s->timer = 0;
+00319     }
+00320     handle_connection(s);
+00321   } else {
+00322     uip_abort();
+00323   }
+00324 }
+00325 /*---------------------------------------------------------------------------*/
+00326 /**
+00327  * \brief      Initialize the web server
+00328  *
+00329  *             This function initializes the web server and should be
+00330  *             called at system boot-up.
+00331  */
+00332 void
+00333 httpd_init(void)
+00334 {
+00335   uip_listen(HTONS(80));
+00336 }
+00337 /*---------------------------------------------------------------------------*/
+00338 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00185.html b/components/net/uip/doc/html/a00185.html new file mode 100644 index 0000000000000000000000000000000000000000..7dea1e4df8c78c3b2a4b7162d529a194278b2f7f --- /dev/null +++ b/components/net/uip/doc/html/a00185.html @@ -0,0 +1,87 @@ + + +uIP 1.0: apps/webserver/httpd.h Source File + + + + + + +

apps/webserver/httpd.h

00001 /*
+00002  * Copyright (c) 2001-2005, Adam Dunkels.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. The name of the author may not be used to endorse or promote
+00014  *    products derived from this software without specific prior
+00015  *    written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00018  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00019  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00021  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00023  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00024  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00025  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00026  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00027  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack.
+00030  *
+00031  * $Id: httpd.h,v 1.2 2006/06/11 21:46:38 adam Exp $
+00032  *
+00033  */
+00034 
+00035 #ifndef __HTTPD_H__
+00036 #define __HTTPD_H__
+00037 
+00038 #include "psock.h"
+00039 #include "httpd-fs.h"
+00040 
+00041 struct httpd_state {
+00042   unsigned char timer;
+00043   struct psock sin, sout;
+00044   struct pt outputpt, scriptpt;
+00045   char inputbuf[50];
+00046   char filename[20];
+00047   char state;
+00048   struct httpd_fs_file file;
+00049   int len;
+00050   char *scriptptr;
+00051   int scriptlen;
+00052   
+00053   unsigned short count;
+00054 };
+00055 
+00056 void httpd_init(void);
+00057 void httpd_appcall(void);
+00058 
+00059 void httpd_log(char *msg);
+00060 void httpd_log_file(u16_t *requester, char *file);
+00061 
+00062 #endif /* __HTTPD_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00186.html b/components/net/uip/doc/html/a00186.html new file mode 100644 index 0000000000000000000000000000000000000000..b56304029cc0b0c8ca8aecc8da0e7b4fcd6c4890 --- /dev/null +++ b/components/net/uip/doc/html/a00186.html @@ -0,0 +1,129 @@ + + +uIP 1.0: lib/memb.c Source File + + + + + + +

lib/memb.c

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: memb.c,v 1.1 2006/06/12 08:21:43 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \addtogroup memb
+00038  * @{
+00039  */
+00040 
+00041  /**
+00042  * \file
+00043  * Memory block allocation routines.
+00044  * \author Adam Dunkels <adam@sics.se>
+00045  */
+00046 #include <string.h>
+00047 
+00048 #include "memb.h"
+00049 
+00050 /*---------------------------------------------------------------------------*/
+00051 void
+00052 memb_init(struct memb_blocks *m)
+00053 {
+00054   memset(m->count, 0, m->num);
+00055   memset(m->mem, 0, m->size * m->num);
+00056 }
+00057 /*---------------------------------------------------------------------------*/
+00058 void *
+00059 memb_alloc(struct memb_blocks *m)
+00060 {
+00061   int i;
+00062 
+00063   for(i = 0; i < m->num; ++i) {
+00064     if(m->count[i] == 0) {
+00065       /* If this block was unused, we increase the reference count to
+00066          indicate that it now is used and return a pointer to the
+00067          memory block. */
+00068       ++(m->count[i]);
+00069       return (void *)((char *)m->mem + (i * m->size));
+00070     }
+00071   }
+00072 
+00073   /* No free block was found, so we return NULL to indicate failure to
+00074      allocate block. */
+00075   return NULL;
+00076 }
+00077 /*---------------------------------------------------------------------------*/
+00078 char
+00079 memb_free(struct memb_blocks *m, void *ptr)
+00080 {
+00081   int i;
+00082   char *ptr2;
+00083 
+00084   /* Walk through the list of blocks and try to find the block to
+00085      which the pointer "ptr" points to. */
+00086   ptr2 = (char *)m->mem;
+00087   for(i = 0; i < m->num; ++i) {
+00088     
+00089     if(ptr2 == (char *)ptr) {
+00090       /* We've found to block to which "ptr" points so we decrease the
+00091          reference count and return the new value of it. */
+00092       if(m->count[i] > 0) {
+00093         /* Make sure that we don't deallocate free memory. */
+00094         --(m->count[i]);
+00095       }
+00096       return m->count[i];
+00097     }
+00098     ptr2 += m->size;
+00099   }
+00100   return -1;
+00101 }
+00102 /*---------------------------------------------------------------------------*/
+00103 
+00104 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00187.html b/components/net/uip/doc/html/a00187.html new file mode 100644 index 0000000000000000000000000000000000000000..cd6de306934f6183ae7d085d6ba7f1849368aa46 --- /dev/null +++ b/components/net/uip/doc/html/a00187.html @@ -0,0 +1,167 @@ + + +uIP 1.0: lib/memb.h Source File + + + + + + +

lib/memb.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: memb.h,v 1.1 2006/06/12 08:21:43 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \defgroup memb Memory block management functions
+00038  *
+00039  * The memory block allocation routines provide a simple yet powerful
+00040  * set of functions for managing a set of memory blocks of fixed
+00041  * size. A set of memory blocks is statically declared with the
+00042  * MEMB() macro. Memory blocks are allocated from the declared
+00043  * memory by the memb_alloc() function, and are deallocated with the
+00044  * memb_free() function.
+00045  *
+00046  * \note Because of namespace clashes only one MEMB() can be
+00047  * declared per C module, and the name scope of a MEMB() memory
+00048  * block is local to each C module.
+00049  *
+00050  * The following example shows how to declare and use a memory block
+00051  * called "cmem" which has 8 chunks of memory with each memory chunk
+00052  * being 20 bytes large.
+00053  *
+00054  * @{
+00055  */
+00056 
+00057 
+00058 /**
+00059  * \file
+00060  *         Memory block allocation routines.
+00061  * \author
+00062  *         Adam Dunkels <adam@sics.se>
+00063  *
+00064  */
+00065 
+00066 #ifndef __MEMB_H__
+00067 #define __MEMB_H__
+00068 
+00069 /*
+00070  * Here we define a C preprocessing macro for concatenating to
+00071  * strings. We need use two macros in order to allow concatenation of
+00072  * two #defined macros.
+00073  */
+00074 #define MEMB_CONCAT2(s1, s2) s1##s2
+00075 #define MEMB_CONCAT(s1, s2) MEMB_CONCAT2(s1, s2)
+00076 
+00077 /**
+00078  * Declare a memory block.
+00079  *
+00080  * This macro is used to staticall declare a block of memory that can
+00081  * be used by the block allocation functions. The macro statically
+00082  * declares a C array with a size that matches the specified number of
+00083  * blocks and their individual sizes.
+00084  *
+00085  * Example:
+00086  \code
+00087 MEMB(connections, sizeof(struct connection), 16);
+00088  \endcode
+00089  *
+00090  * \param name The name of the memory block (later used with
+00091  * memb_init(), memb_alloc() and memb_free()).
+00092  *
+00093  * \param size The size of each memory chunk, in bytes.
+00094  *
+00095  * \param num The total number of memory chunks in the block.
+00096  *
+00097  */
+00098 #define MEMB(name, structure, num) \
+00099         static char MEMB_CONCAT(name,_memb_count)[num]; \
+00100         static structure MEMB_CONCAT(name,_memb_mem)[num]; \
+00101         static struct memb_blocks name = {sizeof(structure), num, \
+00102                                           MEMB_CONCAT(name,_memb_count), \
+00103                                           (void *)MEMB_CONCAT(name,_memb_mem)}
+00104 
+00105 struct memb_blocks {
+00106   unsigned short size;
+00107   unsigned short num;
+00108   char *count;
+00109   void *mem;
+00110 };
+00111 
+00112 /**
+00113  * Initialize a memory block that was declared with MEMB().
+00114  *
+00115  * \param m A memory block previosly declared with MEMB().
+00116  */
+00117 void  memb_init(struct memb_blocks *m);
+00118 
+00119 /**
+00120  * Allocate a memory block from a block of memory declared with MEMB().
+00121  *
+00122  * \param m A memory block previosly declared with MEMB().
+00123  */
+00124 void *memb_alloc(struct memb_blocks *m);
+00125 
+00126 /**
+00127  * Deallocate a memory block from a memory block previously declared
+00128  * with MEMB().
+00129  *
+00130  * \param m m A memory block previosly declared with MEMB().
+00131  *
+00132  * \param ptr A pointer to the memory block that is to be deallocated.
+00133  *
+00134  * \return The new reference count for the memory block (should be 0
+00135  * if successfully deallocated) or -1 if the pointer "ptr" did not
+00136  * point to a legal memory block.
+00137  */
+00138 char  memb_free(struct memb_blocks *m, void *ptr);
+00139 
+00140 /** @} */
+00141 
+00142 #endif /* __MEMB_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00188.html b/components/net/uip/doc/html/a00188.html new file mode 100644 index 0000000000000000000000000000000000000000..383bcb3b39f5f384d1642c09c881b45a3bcb06d2 --- /dev/null +++ b/components/net/uip/doc/html/a00188.html @@ -0,0 +1,113 @@ + + +uIP 1.0: uip/clock.h Source File + + + + + + +

uip/clock.h

00001 /**
+00002  * \defgroup clock Clock interface
+00003  *
+00004  * The clock interface is the interface between the \ref timer "timer library"
+00005  * and the platform specific clock functionality. The clock
+00006  * interface must be implemented for each platform that uses the \ref
+00007  * timer "timer library".
+00008  *
+00009  * The clock interface does only one this: it measures time. The clock
+00010  * interface provides a macro, CLOCK_SECOND, which corresponds to one
+00011  * second of system time.
+00012  *
+00013  * \sa \ref timer "Timer library"
+00014  *
+00015  * @{
+00016  */
+00017 
+00018 /*
+00019  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00020  * All rights reserved.
+00021  *
+00022  * Redistribution and use in source and binary forms, with or without
+00023  * modification, are permitted provided that the following conditions
+00024  * are met:
+00025  * 1. Redistributions of source code must retain the above copyright
+00026  *    notice, this list of conditions and the following disclaimer.
+00027  * 2. Redistributions in binary form must reproduce the above copyright
+00028  *    notice, this list of conditions and the following disclaimer in the
+00029  *    documentation and/or other materials provided with the distribution.
+00030  * 3. Neither the name of the Institute nor the names of its contributors
+00031  *    may be used to endorse or promote products derived from this software
+00032  *    without specific prior written permission.
+00033  *
+00034  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00035  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00036  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00037  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00038  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00039  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00040  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00041  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00042  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00043  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00044  * SUCH DAMAGE.
+00045  *
+00046  * This file is part of the uIP TCP/IP stack
+00047  *
+00048  * Author: Adam Dunkels <adam@sics.se>
+00049  *
+00050  * $Id: clock.h,v 1.3 2006/06/11 21:46:39 adam Exp $
+00051  */
+00052 #ifndef __CLOCK_H__
+00053 #define __CLOCK_H__
+00054 
+00055 #include "clock-arch.h"
+00056 
+00057 /**
+00058  * Initialize the clock library.
+00059  *
+00060  * This function initializes the clock library and should be called
+00061  * from the main() function of the system.
+00062  *
+00063  */
+00064 void clock_init(void);
+00065 
+00066 /**
+00067  * Get the current clock time.
+00068  *
+00069  * This function returns the current system clock time.
+00070  *
+00071  * \return The current clock time, measured in system ticks.
+00072  */
+00073 clock_time_t clock_time(void);
+00074 
+00075 /**
+00076  * A second, measured in system clock time.
+00077  *
+00078  * \hideinitializer
+00079  */
+00080 #ifdef CLOCK_CONF_SECOND
+00081 #define CLOCK_SECOND CLOCK_CONF_SECOND
+00082 #else
+00083 #define CLOCK_SECOND (clock_time_t)32
+00084 #endif
+00085 
+00086 #endif /* __CLOCK_H__ */
+00087 
+00088 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00189.html b/components/net/uip/doc/html/a00189.html new file mode 100644 index 0000000000000000000000000000000000000000..16727d29753a47258e555a342e5e292eca653d8e --- /dev/null +++ b/components/net/uip/doc/html/a00189.html @@ -0,0 +1,108 @@ + + +uIP 1.0: uip/lc-addrlabels.h Source File + + + + + + +

uip/lc-addrlabels.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004-2005, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: lc-addrlabels.h,v 1.3 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \addtogroup lc
+00038  * @{
+00039  */
+00040 
+00041 /**
+00042  * \file
+00043  * Implementation of local continuations based on the "Labels as
+00044  * values" feature of gcc
+00045  * \author
+00046  * Adam Dunkels <adam@sics.se>
+00047  *
+00048  * This implementation of local continuations is based on a special
+00049  * feature of the GCC C compiler called "labels as values". This
+00050  * feature allows assigning pointers with the address of the code
+00051  * corresponding to a particular C label.
+00052  *
+00053  * For more information, see the GCC documentation:
+00054  * http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
+00055  *
+00056  * Thanks to dividuum for finding the nice local scope label
+00057  * implementation.
+00058  */
+00059 
+00060 #ifndef __LC_ADDRLABELS_H__
+00061 #define __LC_ADDRLABELS_H__
+00062 
+00063 /** \hideinitializer */
+00064 typedef void * lc_t;
+00065 
+00066 #define LC_INIT(s) s = NULL
+00067 
+00068 
+00069 #define LC_RESUME(s)                            \
+00070   do {                                          \
+00071     if(s != NULL) {                             \
+00072       goto *s;                                  \
+00073     }                                           \
+00074   } while(0)
+00075 
+00076 #define LC_SET(s)                               \
+00077   do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0)
+00078 
+00079 #define LC_END(s)
+00080 
+00081 #endif /* __LC_ADDRLABELS_H__ */
+00082 
+00083 /**  @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00190.html b/components/net/uip/doc/html/a00190.html new file mode 100644 index 0000000000000000000000000000000000000000..5ce94dfad7b723a7fd756f3b76ae08ff4a187265 --- /dev/null +++ b/components/net/uip/doc/html/a00190.html @@ -0,0 +1,101 @@ + + +uIP 1.0: uip/lc-switch.h Source File + + + + + + +

uip/lc-switch.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004-2005, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: lc-switch.h,v 1.2 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \addtogroup lc
+00038  * @{
+00039  */
+00040 
+00041 /**
+00042  * \file
+00043  * Implementation of local continuations based on switch() statment
+00044  * \author Adam Dunkels <adam@sics.se>
+00045  *
+00046  * This implementation of local continuations uses the C switch()
+00047  * statement to resume execution of a function somewhere inside the
+00048  * function's body. The implementation is based on the fact that
+00049  * switch() statements are able to jump directly into the bodies of
+00050  * control structures such as if() or while() statmenets.
+00051  *
+00052  * This implementation borrows heavily from Simon Tatham's coroutines
+00053  * implementation in C:
+00054  * http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
+00055  */
+00056 
+00057 #ifndef __LC_SWITCH_H__
+00058 #define __LC_SWTICH_H__
+00059 
+00060 /* WARNING! lc implementation using switch() does not work if an
+00061    LC_SET() is done within another switch() statement! */
+00062 
+00063 /** \hideinitializer */
+00064 typedef unsigned short lc_t;
+00065 
+00066 #define LC_INIT(s) s = 0;
+00067 
+00068 #define LC_RESUME(s) switch(s) { case 0:
+00069 
+00070 #define LC_SET(s) s = __LINE__; case __LINE__:
+00071 
+00072 #define LC_END(s) }
+00073 
+00074 #endif /* __LC_SWITCH_H__ */
+00075 
+00076 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00191.html b/components/net/uip/doc/html/a00191.html new file mode 100644 index 0000000000000000000000000000000000000000..9b0f67671083a4a759139e6e688adf21c7d10b8a --- /dev/null +++ b/components/net/uip/doc/html/a00191.html @@ -0,0 +1,156 @@ + + +uIP 1.0: uip/lc.h Source File + + + + + + +

uip/lc.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004-2005, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: lc.h,v 1.2 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \addtogroup pt
+00038  * @{
+00039  */
+00040 
+00041 /**
+00042  * \defgroup lc Local continuations
+00043  * @{
+00044  *
+00045  * Local continuations form the basis for implementing protothreads. A
+00046  * local continuation can be <i>set</i> in a specific function to
+00047  * capture the state of the function. After a local continuation has
+00048  * been set can be <i>resumed</i> in order to restore the state of the
+00049  * function at the point where the local continuation was set.
+00050  *
+00051  *
+00052  */
+00053 
+00054 /**
+00055  * \file lc.h
+00056  * Local continuations
+00057  * \author
+00058  * Adam Dunkels <adam@sics.se>
+00059  *
+00060  */
+00061 
+00062 #ifdef DOXYGEN
+00063 /**
+00064  * Initialize a local continuation.
+00065  *
+00066  * This operation initializes the local continuation, thereby
+00067  * unsetting any previously set continuation state.
+00068  *
+00069  * \hideinitializer
+00070  */
+00071 #define LC_INIT(lc)
+00072 
+00073 /**
+00074  * Set a local continuation.
+00075  *
+00076  * The set operation saves the state of the function at the point
+00077  * where the operation is executed. As far as the set operation is
+00078  * concerned, the state of the function does <b>not</b> include the
+00079  * call-stack or local (automatic) variables, but only the program
+00080  * counter and such CPU registers that needs to be saved.
+00081  *
+00082  * \hideinitializer
+00083  */
+00084 #define LC_SET(lc)
+00085 
+00086 /**
+00087  * Resume a local continuation.
+00088  *
+00089  * The resume operation resumes a previously set local continuation, thus
+00090  * restoring the state in which the function was when the local
+00091  * continuation was set. If the local continuation has not been
+00092  * previously set, the resume operation does nothing.
+00093  *
+00094  * \hideinitializer
+00095  */
+00096 #define LC_RESUME(lc)
+00097 
+00098 /**
+00099  * Mark the end of local continuation usage.
+00100  *
+00101  * The end operation signifies that local continuations should not be
+00102  * used any more in the function. This operation is not needed for
+00103  * most implementations of local continuation, but is required by a
+00104  * few implementations.
+00105  *
+00106  * \hideinitializer
+00107  */
+00108 #define LC_END(lc)
+00109 
+00110 /**
+00111  * \var typedef lc_t;
+00112  *
+00113  * The local continuation type.
+00114  *
+00115  * \hideinitializer
+00116  */
+00117 #endif /* DOXYGEN */
+00118 
+00119 #ifndef __LC_H__
+00120 #define __LC_H__
+00121 
+00122 #ifdef LC_CONF_INCLUDE
+00123 #include LC_CONF_INCLUDE
+00124 #else
+00125 #include "lc-switch.h"
+00126 #endif /* LC_CONF_INCLUDE */
+00127 
+00128 #endif /* __LC_H__ */
+00129 
+00130 /** @} */
+00131 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00192.html b/components/net/uip/doc/html/a00192.html new file mode 100644 index 0000000000000000000000000000000000000000..13543d50bdccfb00a780e64b1bd083f1c12d3f31 --- /dev/null +++ b/components/net/uip/doc/html/a00192.html @@ -0,0 +1,363 @@ + + +uIP 1.0: uip/psock.c Source File + + + + + + +

uip/psock.c

00001 /*
+00002  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: psock.c,v 1.2 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 #include <stdio.h>
+00037 #include <string.h>
+00038 
+00039 #include "uipopt.h"
+00040 #include "psock.h"
+00041 #include "uip.h"
+00042 
+00043 #define STATE_NONE 0
+00044 #define STATE_ACKED 1
+00045 #define STATE_READ 2
+00046 #define STATE_BLOCKED_NEWDATA 3
+00047 #define STATE_BLOCKED_CLOSE 4
+00048 #define STATE_BLOCKED_SEND 5
+00049 #define STATE_DATA_SENT 6
+00050 
+00051 /*
+00052  * Return value of the buffering functions that indicates that a
+00053  * buffer was not filled by incoming data.
+00054  *
+00055  */
+00056 #define BUF_NOT_FULL 0
+00057 #define BUF_NOT_FOUND 0
+00058 
+00059 /*
+00060  * Return value of the buffering functions that indicates that a
+00061  * buffer was completely filled by incoming data.
+00062  *
+00063  */
+00064 #define BUF_FULL 1
+00065 
+00066 /*
+00067  * Return value of the buffering functions that indicates that an
+00068  * end-marker byte was found.
+00069  *
+00070  */
+00071 #define BUF_FOUND 2
+00072 
+00073 /*---------------------------------------------------------------------------*/
+00074 static void
+00075 buf_setup(struct psock_buf *buf,
+00076           u8_t *bufptr, u16_t bufsize)
+00077 {
+00078   buf->ptr = bufptr;
+00079   buf->left = bufsize;
+00080 }
+00081 /*---------------------------------------------------------------------------*/
+00082 static u8_t
+00083 buf_bufdata(struct psock_buf *buf, u16_t len,
+00084             u8_t **dataptr, u16_t *datalen)
+00085 {
+00086   if(*datalen < buf->left) {
+00087     memcpy(buf->ptr, *dataptr, *datalen);
+00088     buf->ptr += *datalen;
+00089     buf->left -= *datalen;
+00090     *dataptr += *datalen;
+00091     *datalen = 0;
+00092     return BUF_NOT_FULL;
+00093   } else if(*datalen == buf->left) {
+00094     memcpy(buf->ptr, *dataptr, *datalen);
+00095     buf->ptr += *datalen;
+00096     buf->left = 0;
+00097     *dataptr += *datalen;
+00098     *datalen = 0;
+00099     return BUF_FULL;
+00100   } else {
+00101     memcpy(buf->ptr, *dataptr, buf->left);
+00102     buf->ptr += buf->left;
+00103     *datalen -= buf->left;
+00104     *dataptr += buf->left;
+00105     buf->left = 0;
+00106     return BUF_FULL;
+00107   }
+00108 }
+00109 /*---------------------------------------------------------------------------*/
+00110 static u8_t
+00111 buf_bufto(register struct psock_buf *buf, u8_t endmarker,
+00112           register u8_t **dataptr, register u16_t *datalen)
+00113 {
+00114   u8_t c;
+00115   while(buf->left > 0 && *datalen > 0) {
+00116     c = *buf->ptr = **dataptr;
+00117     ++*dataptr;
+00118     ++buf->ptr;
+00119     --*datalen;
+00120     --buf->left;
+00121     
+00122     if(c == endmarker) {
+00123       return BUF_FOUND;
+00124     }
+00125   }
+00126 
+00127   if(*datalen == 0) {
+00128     return BUF_NOT_FOUND;
+00129   }
+00130 
+00131   while(*datalen > 0) {
+00132     c = **dataptr;
+00133     --*datalen;
+00134     ++*dataptr;
+00135     
+00136     if(c == endmarker) {
+00137       return BUF_FOUND | BUF_FULL;
+00138     }
+00139   }
+00140   
+00141   return BUF_FULL;
+00142 }
+00143 /*---------------------------------------------------------------------------*/
+00144 static char
+00145 send_data(register struct psock *s)
+00146 {
+00147   if(s->state != STATE_DATA_SENT || uip_rexmit()) {
+00148     if(s->sendlen > uip_mss()) {
+00149       uip_send(s->sendptr, uip_mss());
+00150     } else {
+00151       uip_send(s->sendptr, s->sendlen);
+00152     }
+00153     s->state = STATE_DATA_SENT;
+00154     return 1;
+00155   }
+00156   return 0;
+00157 }
+00158 /*---------------------------------------------------------------------------*/
+00159 static char
+00160 data_acked(register struct psock *s)
+00161 {
+00162   if(s->state == STATE_DATA_SENT && uip_acked()) {
+00163     if(s->sendlen > uip_mss()) {
+00164       s->sendlen -= uip_mss();
+00165       s->sendptr += uip_mss();
+00166     } else {
+00167       s->sendptr += s->sendlen;
+00168       s->sendlen = 0;
+00169     }
+00170     s->state = STATE_ACKED;
+00171     return 1;
+00172   }
+00173   return 0;
+00174 }
+00175 /*---------------------------------------------------------------------------*/
+00176 PT_THREAD(psock_send(register struct psock *s, const char *buf,
+00177                      unsigned int len))
+00178 {
+00179   PT_BEGIN(&s->psockpt);
+00180 
+00181   /* If there is no data to send, we exit immediately. */
+00182   if(len == 0) {
+00183     PT_EXIT(&s->psockpt);
+00184   }
+00185 
+00186   /* Save the length of and a pointer to the data that is to be
+00187      sent. */
+00188   s->sendptr = buf;
+00189   s->sendlen = len;
+00190 
+00191   s->state = STATE_NONE;
+00192 
+00193   /* We loop here until all data is sent. The s->sendlen variable is
+00194      updated by the data_sent() function. */
+00195   while(s->sendlen > 0) {
+00196 
+00197     /*
+00198      * The condition for this PT_WAIT_UNTIL is a little tricky: the
+00199      * protothread will wait here until all data has been acknowledged
+00200      * (data_acked() returns true) and until all data has been sent
+00201      * (send_data() returns true). The two functions data_acked() and
+00202      * send_data() must be called in succession to ensure that all
+00203      * data is sent. Therefore the & operator is used instead of the
+00204      * && operator, which would cause only the data_acked() function
+00205      * to be called when it returns false.
+00206      */
+00207     PT_WAIT_UNTIL(&s->psockpt, data_acked(s) & send_data(s));
+00208   }
+00209 
+00210   s->state = STATE_NONE;
+00211   
+00212   PT_END(&s->psockpt);
+00213 }
+00214 /*---------------------------------------------------------------------------*/
+00215 PT_THREAD(psock_generator_send(register struct psock *s,
+00216                                unsigned short (*generate)(void *), void *arg))
+00217 {
+00218   PT_BEGIN(&s->psockpt);
+00219 
+00220   /* Ensure that there is a generator function to call. */
+00221   if(generate == NULL) {
+00222     PT_EXIT(&s->psockpt);
+00223   }
+00224 
+00225   /* Call the generator function to generate the data in the
+00226      uip_appdata buffer. */
+00227   s->sendlen = generate(arg);
+00228   s->sendptr = uip_appdata;
+00229 
+00230   s->state = STATE_NONE;  
+00231   do {
+00232     /* Call the generator function again if we are called to perform a
+00233        retransmission. */
+00234     if(uip_rexmit()) {
+00235       generate(arg);
+00236     }
+00237     /* Wait until all data is sent and acknowledged. */
+00238     PT_WAIT_UNTIL(&s->psockpt, data_acked(s) & send_data(s));
+00239   } while(s->sendlen > 0);
+00240   
+00241   s->state = STATE_NONE;
+00242   
+00243   PT_END(&s->psockpt);
+00244 }
+00245 /*---------------------------------------------------------------------------*/
+00246 u16_t
+00247 psock_datalen(struct psock *psock)
+00248 {
+00249   return psock->bufsize - psock->buf.left;
+00250 }
+00251 /*---------------------------------------------------------------------------*/
+00252 char
+00253 psock_newdata(struct psock *s)
+00254 {
+00255   if(s->readlen > 0) {
+00256     /* There is data in the uip_appdata buffer that has not yet been
+00257        read with the PSOCK_READ functions. */
+00258     return 1;
+00259   } else if(s->state == STATE_READ) {
+00260     /* All data in uip_appdata buffer already consumed. */
+00261     s->state = STATE_BLOCKED_NEWDATA;
+00262     return 0;
+00263   } else if(uip_newdata()) {
+00264     /* There is new data that has not been consumed. */
+00265     return 1;
+00266   } else {
+00267     /* There is no new data. */
+00268     return 0;
+00269   }
+00270 }
+00271 /*---------------------------------------------------------------------------*/
+00272 PT_THREAD(psock_readto(register struct psock *psock, unsigned char c))
+00273 {
+00274   PT_BEGIN(&psock->psockpt);
+00275 
+00276   buf_setup(&psock->buf, psock->bufptr, psock->bufsize);
+00277   
+00278   /* XXX: Should add buf_checkmarker() before do{} loop, if
+00279      incoming data has been handled while waiting for a write. */
+00280 
+00281   do {
+00282     if(psock->readlen == 0) {
+00283       PT_WAIT_UNTIL(&psock->psockpt, psock_newdata(psock));
+00284       psock->state = STATE_READ;
+00285       psock->readptr = (u8_t *)uip_appdata;
+00286       psock->readlen = uip_datalen();
+00287     }
+00288   } while((buf_bufto(&psock->buf, c,
+00289                      &psock->readptr,
+00290                      &psock->readlen) & BUF_FOUND) == 0);
+00291   
+00292   if(psock_datalen(psock) == 0) {
+00293     psock->state = STATE_NONE;
+00294     PT_RESTART(&psock->psockpt);
+00295   }
+00296   PT_END(&psock->psockpt);
+00297 }
+00298 /*---------------------------------------------------------------------------*/
+00299 PT_THREAD(psock_readbuf(register struct psock *psock))
+00300 {
+00301   PT_BEGIN(&psock->psockpt);
+00302 
+00303   buf_setup(&psock->buf, psock->bufptr, psock->bufsize);
+00304   
+00305   /* XXX: Should add buf_checkmarker() before do{} loop, if
+00306      incoming data has been handled while waiting for a write. */
+00307 
+00308   do {
+00309     if(psock->readlen == 0) {
+00310       PT_WAIT_UNTIL(&psock->psockpt, psock_newdata(psock));
+00311       printf("Waited for newdata\n");
+00312       psock->state = STATE_READ;
+00313       psock->readptr = (u8_t *)uip_appdata;
+00314       psock->readlen = uip_datalen();
+00315     }
+00316   } while(buf_bufdata(&psock->buf, psock->bufsize,
+00317                          &psock->readptr,
+00318                          &psock->readlen) != BUF_FULL);
+00319 
+00320   if(psock_datalen(psock) == 0) {
+00321     psock->state = STATE_NONE;
+00322     PT_RESTART(&psock->psockpt);
+00323   }
+00324   PT_END(&psock->psockpt);
+00325 }
+00326 /*---------------------------------------------------------------------------*/
+00327 void
+00328 psock_init(register struct psock *psock, char *buffer, unsigned int buffersize)
+00329 {
+00330   psock->state = STATE_NONE;
+00331   psock->readlen = 0;
+00332   psock->bufptr = buffer;
+00333   psock->bufsize = buffersize;
+00334   buf_setup(&psock->buf, buffer, buffersize);
+00335   PT_INIT(&psock->pt);
+00336   PT_INIT(&psock->psockpt);
+00337 }
+00338 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00193.html b/components/net/uip/doc/html/a00193.html new file mode 100644 index 0000000000000000000000000000000000000000..b0ea40f91d34192f2ab6b97f8588369181aabcc8 --- /dev/null +++ b/components/net/uip/doc/html/a00193.html @@ -0,0 +1,405 @@ + + +uIP 1.0: uip/psock.h Source File + + + + + + +

uip/psock.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: psock.h,v 1.3 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \defgroup psock Protosockets library
+00038  * @{
+00039  *
+00040  * The protosocket library provides an interface to the uIP stack that is
+00041  * similar to the traditional BSD socket interface. Unlike programs
+00042  * written for the ordinary uIP event-driven interface, programs
+00043  * written with the protosocket library are executed in a sequential
+00044  * fashion and does not have to be implemented as explicit state
+00045  * machines.
+00046  *
+00047  * Protosockets only work with TCP connections.
+00048  *
+00049  * The protosocket library uses \ref pt protothreads to provide
+00050  * sequential control flow. This makes the protosockets lightweight in
+00051  * terms of memory, but also means that protosockets inherits the
+00052  * functional limitations of protothreads. Each protosocket lives only
+00053  * within a single function. Automatic variables (stack variables) are
+00054  * not retained across a protosocket library function call.
+00055  *
+00056  * \note Because the protosocket library uses protothreads, local
+00057  * variables will not always be saved across a call to a protosocket
+00058  * library function. It is therefore advised that local variables are
+00059  * used with extreme care.
+00060  *
+00061  * The protosocket library provides functions for sending data without
+00062  * having to deal with retransmissions and acknowledgements, as well
+00063  * as functions for reading data without having to deal with data
+00064  * being split across more than one TCP segment.
+00065  *
+00066  * Because each protosocket runs as a protothread, the protosocket has to be
+00067  * started with a call to PSOCK_BEGIN() at the start of the function
+00068  * in which the protosocket is used. Similarly, the protosocket protothread can
+00069  * be terminated by a call to PSOCK_EXIT().
+00070  *
+00071  */
+00072 
+00073 /**
+00074  * \file
+00075  * Protosocket library header file
+00076  * \author
+00077  * Adam Dunkels <adam@sics.se>
+00078  *
+00079  */
+00080 
+00081 #ifndef __PSOCK_H__
+00082 #define __PSOCK_H__
+00083 
+00084 #include "uipopt.h"
+00085 #include "pt.h"
+00086 
+00087  /*
+00088  * The structure that holds the state of a buffer.
+00089  *
+00090  * This structure holds the state of a uIP buffer. The structure has
+00091  * no user-visible elements, but is used through the functions
+00092  * provided by the library.
+00093  *
+00094  */
+00095 struct psock_buf {
+00096   u8_t *ptr;
+00097   unsigned short left;
+00098 };
+00099 
+00100 /**
+00101  * The representation of a protosocket.
+00102  *
+00103  * The protosocket structrure is an opaque structure with no user-visible
+00104  * elements.
+00105  */
+00106 struct psock {
+00107   struct pt pt, psockpt; /* Protothreads - one that's using the psock
+00108                             functions, and one that runs inside the
+00109                             psock functions. */
+00110   const u8_t *sendptr;   /* Pointer to the next data to be sent. */
+00111   u8_t *readptr;         /* Pointer to the next data to be read. */
+00112   
+00113   char *bufptr;          /* Pointer to the buffer used for buffering
+00114                             incoming data. */
+00115   
+00116   u16_t sendlen;         /* The number of bytes left to be sent. */
+00117   u16_t readlen;         /* The number of bytes left to be read. */
+00118 
+00119   struct psock_buf buf;  /* The structure holding the state of the
+00120                             input buffer. */
+00121   unsigned int bufsize;  /* The size of the input buffer. */
+00122   
+00123   unsigned char state;   /* The state of the protosocket. */
+00124 };
+00125 
+00126 void psock_init(struct psock *psock, char *buffer, unsigned int buffersize);
+00127 /**
+00128  * Initialize a protosocket.
+00129  *
+00130  * This macro initializes a protosocket and must be called before the
+00131  * protosocket is used. The initialization also specifies the input buffer
+00132  * for the protosocket.
+00133  *
+00134  * \param psock (struct psock *) A pointer to the protosocket to be
+00135  * initialized
+00136  *
+00137  * \param buffer (char *) A pointer to the input buffer for the
+00138  * protosocket.
+00139  *
+00140  * \param buffersize (unsigned int) The size of the input buffer.
+00141  *
+00142  * \hideinitializer
+00143  */
+00144 #define PSOCK_INIT(psock, buffer, buffersize) \
+00145   psock_init(psock, buffer, buffersize)
+00146 
+00147 /**
+00148  * Start the protosocket protothread in a function.
+00149  *
+00150  * This macro starts the protothread associated with the protosocket and
+00151  * must come before other protosocket calls in the function it is used.
+00152  *
+00153  * \param psock (struct psock *) A pointer to the protosocket to be
+00154  * started.
+00155  *
+00156  * \hideinitializer
+00157  */
+00158 #define PSOCK_BEGIN(psock) PT_BEGIN(&((psock)->pt))
+00159 
+00160 PT_THREAD(psock_send(struct psock *psock, const char *buf, unsigned int len));
+00161 /**
+00162  * Send data.
+00163  *
+00164  * This macro sends data over a protosocket. The protosocket protothread blocks
+00165  * until all data has been sent and is known to have been received by
+00166  * the remote end of the TCP connection.
+00167  *
+00168  * \param psock (struct psock *) A pointer to the protosocket over which
+00169  * data is to be sent.
+00170  *
+00171  * \param data (char *) A pointer to the data that is to be sent.
+00172  *
+00173  * \param datalen (unsigned int) The length of the data that is to be
+00174  * sent.
+00175  *
+00176  * \hideinitializer
+00177  */
+00178 #define PSOCK_SEND(psock, data, datalen)                \
+00179     PT_WAIT_THREAD(&((psock)->pt), psock_send(psock, data, datalen))
+00180 
+00181 /**
+00182  * \brief      Send a null-terminated string.
+00183  * \param psock Pointer to the protosocket.
+00184  * \param str  The string to be sent.
+00185  *
+00186  *             This function sends a null-terminated string over the
+00187  *             protosocket.
+00188  *
+00189  * \hideinitializer
+00190  */
+00191 #define PSOCK_SEND_STR(psock, str)                      \
+00192     PT_WAIT_THREAD(&((psock)->pt), psock_send(psock, str, strlen(str)))
+00193 
+00194 PT_THREAD(psock_generator_send(struct psock *psock,
+00195                                 unsigned short (*f)(void *), void *arg));
+00196 
+00197 /**
+00198  * \brief      Generate data with a function and send it
+00199  * \param psock Pointer to the protosocket.
+00200  * \param generator Pointer to the generator function
+00201  * \param arg   Argument to the generator function
+00202  *
+00203  *             This function generates data and sends it over the
+00204  *             protosocket. This can be used to dynamically generate
+00205  *             data for a transmission, instead of generating the data
+00206  *             in a buffer beforehand. This function reduces the need for
+00207  *             buffer memory. The generator function is implemented by
+00208  *             the application, and a pointer to the function is given
+00209  *             as an argument with the call to PSOCK_GENERATOR_SEND().
+00210  *
+00211  *             The generator function should place the generated data
+00212  *             directly in the uip_appdata buffer, and return the
+00213  *             length of the generated data. The generator function is
+00214  *             called by the protosocket layer when the data first is
+00215  *             sent, and once for every retransmission that is needed.
+00216  *
+00217  * \hideinitializer
+00218  */
+00219 #define PSOCK_GENERATOR_SEND(psock, generator, arg)     \
+00220     PT_WAIT_THREAD(&((psock)->pt),                                      \
+00221                    psock_generator_send(psock, generator, arg))
+00222 
+00223 
+00224 /**
+00225  * Close a protosocket.
+00226  *
+00227  * This macro closes a protosocket and can only be called from within the
+00228  * protothread in which the protosocket lives.
+00229  *
+00230  * \param psock (struct psock *) A pointer to the protosocket that is to
+00231  * be closed.
+00232  *
+00233  * \hideinitializer
+00234  */
+00235 #define PSOCK_CLOSE(psock) uip_close()
+00236 
+00237 PT_THREAD(psock_readbuf(struct psock *psock));
+00238 /**
+00239  * Read data until the buffer is full.
+00240  *
+00241  * This macro will block waiting for data and read the data into the
+00242  * input buffer specified with the call to PSOCK_INIT(). Data is read
+00243  * until the buffer is full..
+00244  *
+00245  * \param psock (struct psock *) A pointer to the protosocket from which
+00246  * data should be read.
+00247  *
+00248  * \hideinitializer
+00249  */
+00250 #define PSOCK_READBUF(psock)                            \
+00251   PT_WAIT_THREAD(&((psock)->pt), psock_readbuf(psock))
+00252 
+00253 PT_THREAD(psock_readto(struct psock *psock, unsigned char c));
+00254 /**
+00255  * Read data up to a specified character.
+00256  *
+00257  * This macro will block waiting for data and read the data into the
+00258  * input buffer specified with the call to PSOCK_INIT(). Data is only
+00259  * read until the specifieed character appears in the data stream.
+00260  *
+00261  * \param psock (struct psock *) A pointer to the protosocket from which
+00262  * data should be read.
+00263  *
+00264  * \param c (char) The character at which to stop reading.
+00265  *
+00266  * \hideinitializer
+00267  */
+00268 #define PSOCK_READTO(psock, c)                          \
+00269   PT_WAIT_THREAD(&((psock)->pt), psock_readto(psock, c))
+00270 
+00271 /**
+00272  * The length of the data that was previously read.
+00273  *
+00274  * This macro returns the length of the data that was previously read
+00275  * using PSOCK_READTO() or PSOCK_READ().
+00276  *
+00277  * \param psock (struct psock *) A pointer to the protosocket holding the data.
+00278  *
+00279  * \hideinitializer
+00280  */
+00281 #define PSOCK_DATALEN(psock) psock_datalen(psock)
+00282 
+00283 u16_t psock_datalen(struct psock *psock);
+00284 
+00285 /**
+00286  * Exit the protosocket's protothread.
+00287  *
+00288  * This macro terminates the protothread of the protosocket and should
+00289  * almost always be used in conjunction with PSOCK_CLOSE().
+00290  *
+00291  * \sa PSOCK_CLOSE_EXIT()
+00292  *
+00293  * \param psock (struct psock *) A pointer to the protosocket.
+00294  *
+00295  * \hideinitializer
+00296  */
+00297 #define PSOCK_EXIT(psock) PT_EXIT(&((psock)->pt))
+00298 
+00299 /**
+00300  * Close a protosocket and exit the protosocket's protothread.
+00301  *
+00302  * This macro closes a protosocket and exits the protosocket's protothread.
+00303  *
+00304  * \param psock (struct psock *) A pointer to the protosocket.
+00305  *
+00306  * \hideinitializer
+00307  */
+00308 #define PSOCK_CLOSE_EXIT(psock)         \
+00309   do {                                          \
+00310     PSOCK_CLOSE(psock);                 \
+00311     PSOCK_EXIT(psock);                  \
+00312   } while(0)
+00313 
+00314 /**
+00315  * Declare the end of a protosocket's protothread.
+00316  *
+00317  * This macro is used for declaring that the protosocket's protothread
+00318  * ends. It must always be used together with a matching PSOCK_BEGIN()
+00319  * macro.
+00320  *
+00321  * \param psock (struct psock *) A pointer to the protosocket.
+00322  *
+00323  * \hideinitializer
+00324  */
+00325 #define PSOCK_END(psock) PT_END(&((psock)->pt))
+00326 
+00327 char psock_newdata(struct psock *s);
+00328 
+00329 /**
+00330  * Check if new data has arrived on a protosocket.
+00331  *
+00332  * This macro is used in conjunction with the PSOCK_WAIT_UNTIL()
+00333  * macro to check if data has arrived on a protosocket.
+00334  *
+00335  * \param psock (struct psock *) A pointer to the protosocket.
+00336  *
+00337  * \hideinitializer
+00338  */
+00339 #define PSOCK_NEWDATA(psock) psock_newdata(psock)
+00340 
+00341 /**
+00342  * Wait until a condition is true.
+00343  *
+00344  * This macro blocks the protothread until the specified condition is
+00345  * true. The macro PSOCK_NEWDATA() can be used to check if new data
+00346  * arrives when the protosocket is waiting.
+00347  *
+00348  * Typically, this macro is used as follows:
+00349  *
+00350  \code
+00351  PT_THREAD(thread(struct psock *s, struct timer *t))
+00352  {
+00353    PSOCK_BEGIN(s);
+00354 
+00355    PSOCK_WAIT_UNTIL(s, PSOCK_NEWADATA(s) || timer_expired(t));
+00356    
+00357    if(PSOCK_NEWDATA(s)) {
+00358      PSOCK_READTO(s, '\n');
+00359    } else {
+00360      handle_timed_out(s);
+00361    }
+00362    
+00363    PSOCK_END(s);
+00364  }
+00365  \endcode
+00366  *
+00367  * \param psock (struct psock *) A pointer to the protosocket.
+00368  * \param condition The condition to wait for.
+00369  *
+00370  * \hideinitializer
+00371  */
+00372 #define PSOCK_WAIT_UNTIL(psock, condition)    \
+00373   PT_WAIT_UNTIL(&((psock)->pt), (condition));
+00374 
+00375 #define PSOCK_WAIT_THREAD(psock, condition)   \
+00376   PT_WAIT_THREAD(&((psock)->pt), (condition))
+00377 
+00378 #endif /* __PSOCK_H__ */
+00379 
+00380 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00194.html b/components/net/uip/doc/html/a00194.html new file mode 100644 index 0000000000000000000000000000000000000000..5e303b897e9464f9cfc3498fab0297ab7080ddb7 --- /dev/null +++ b/components/net/uip/doc/html/a00194.html @@ -0,0 +1,348 @@ + + +uIP 1.0: uip/pt.h Source File + + + + + + +

uip/pt.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004-2005, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: pt.h,v 1.2 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \addtogroup pt
+00038  * @{
+00039  */
+00040 
+00041 /**
+00042  * \file
+00043  * Protothreads implementation.
+00044  * \author
+00045  * Adam Dunkels <adam@sics.se>
+00046  *
+00047  */
+00048 
+00049 #ifndef __PT_H__
+00050 #define __PT_H__
+00051 
+00052 #include "lc.h"
+00053 
+00054 struct pt {
+00055   lc_t lc;
+00056 };
+00057 
+00058 #define PT_WAITING 0
+00059 #define PT_EXITED  1
+00060 #define PT_ENDED   2
+00061 #define PT_YIELDED 3
+00062 
+00063 /**
+00064  * \name Initialization
+00065  * @{
+00066  */
+00067 
+00068 /**
+00069  * Initialize a protothread.
+00070  *
+00071  * Initializes a protothread. Initialization must be done prior to
+00072  * starting to execute the protothread.
+00073  *
+00074  * \param pt A pointer to the protothread control structure.
+00075  *
+00076  * \sa PT_SPAWN()
+00077  *
+00078  * \hideinitializer
+00079  */
+00080 #define PT_INIT(pt)   LC_INIT((pt)->lc)
+00081 
+00082 /** @} */
+00083 
+00084 /**
+00085  * \name Declaration and definition
+00086  * @{
+00087  */
+00088 
+00089 /**
+00090  * Declaration of a protothread.
+00091  *
+00092  * This macro is used to declare a protothread. All protothreads must
+00093  * be declared with this macro.
+00094  *
+00095  * \param name_args The name and arguments of the C function
+00096  * implementing the protothread.
+00097  *
+00098  * \hideinitializer
+00099  */
+00100 #define PT_THREAD(name_args) char name_args
+00101 
+00102 /**
+00103  * Declare the start of a protothread inside the C function
+00104  * implementing the protothread.
+00105  *
+00106  * This macro is used to declare the starting point of a
+00107  * protothread. It should be placed at the start of the function in
+00108  * which the protothread runs. All C statements above the PT_BEGIN()
+00109  * invokation will be executed each time the protothread is scheduled.
+00110  *
+00111  * \param pt A pointer to the protothread control structure.
+00112  *
+00113  * \hideinitializer
+00114  */
+00115 #define PT_BEGIN(pt) { char PT_YIELD_FLAG = 1; LC_RESUME((pt)->lc)
+00116 
+00117 /**
+00118  * Declare the end of a protothread.
+00119  *
+00120  * This macro is used for declaring that a protothread ends. It must
+00121  * always be used together with a matching PT_BEGIN() macro.
+00122  *
+00123  * \param pt A pointer to the protothread control structure.
+00124  *
+00125  * \hideinitializer
+00126  */
+00127 #define PT_END(pt) LC_END((pt)->lc); PT_YIELD_FLAG = 0; \
+00128                    PT_INIT(pt); return PT_ENDED; }
+00129 
+00130 /** @} */
+00131 
+00132 /**
+00133  * \name Blocked wait
+00134  * @{
+00135  */
+00136 
+00137 /**
+00138  * Block and wait until condition is true.
+00139  *
+00140  * This macro blocks the protothread until the specified condition is
+00141  * true.
+00142  *
+00143  * \param pt A pointer to the protothread control structure.
+00144  * \param condition The condition.
+00145  *
+00146  * \hideinitializer
+00147  */
+00148 #define PT_WAIT_UNTIL(pt, condition)            \
+00149   do {                                          \
+00150     LC_SET((pt)->lc);                           \
+00151     if(!(condition)) {                          \
+00152       return PT_WAITING;                        \
+00153     }                                           \
+00154   } while(0)
+00155 
+00156 /**
+00157  * Block and wait while condition is true.
+00158  *
+00159  * This function blocks and waits while condition is true. See
+00160  * PT_WAIT_UNTIL().
+00161  *
+00162  * \param pt A pointer to the protothread control structure.
+00163  * \param cond The condition.
+00164  *
+00165  * \hideinitializer
+00166  */
+00167 #define PT_WAIT_WHILE(pt, cond)  PT_WAIT_UNTIL((pt), !(cond))
+00168 
+00169 /** @} */
+00170 
+00171 /**
+00172  * \name Hierarchical protothreads
+00173  * @{
+00174  */
+00175 
+00176 /**
+00177  * Block and wait until a child protothread completes.
+00178  *
+00179  * This macro schedules a child protothread. The current protothread
+00180  * will block until the child protothread completes.
+00181  *
+00182  * \note The child protothread must be manually initialized with the
+00183  * PT_INIT() function before this function is used.
+00184  *
+00185  * \param pt A pointer to the protothread control structure.
+00186  * \param thread The child protothread with arguments
+00187  *
+00188  * \sa PT_SPAWN()
+00189  *
+00190  * \hideinitializer
+00191  */
+00192 #define PT_WAIT_THREAD(pt, thread) PT_WAIT_WHILE((pt), PT_SCHEDULE(thread))
+00193 
+00194 /**
+00195  * Spawn a child protothread and wait until it exits.
+00196  *
+00197  * This macro spawns a child protothread and waits until it exits. The
+00198  * macro can only be used within a protothread.
+00199  *
+00200  * \param pt A pointer to the protothread control structure.
+00201  * \param child A pointer to the child protothread's control structure.
+00202  * \param thread The child protothread with arguments
+00203  *
+00204  * \hideinitializer
+00205  */
+00206 #define PT_SPAWN(pt, child, thread)             \
+00207   do {                                          \
+00208     PT_INIT((child));                           \
+00209     PT_WAIT_THREAD((pt), (thread));             \
+00210   } while(0)
+00211 
+00212 /** @} */
+00213 
+00214 /**
+00215  * \name Exiting and restarting
+00216  * @{
+00217  */
+00218 
+00219 /**
+00220  * Restart the protothread.
+00221  *
+00222  * This macro will block and cause the running protothread to restart
+00223  * its execution at the place of the PT_BEGIN() call.
+00224  *
+00225  * \param pt A pointer to the protothread control structure.
+00226  *
+00227  * \hideinitializer
+00228  */
+00229 #define PT_RESTART(pt)                          \
+00230   do {                                          \
+00231     PT_INIT(pt);                                \
+00232     return PT_WAITING;                  \
+00233   } while(0)
+00234 
+00235 /**
+00236  * Exit the protothread.
+00237  *
+00238  * This macro causes the protothread to exit. If the protothread was
+00239  * spawned by another protothread, the parent protothread will become
+00240  * unblocked and can continue to run.
+00241  *
+00242  * \param pt A pointer to the protothread control structure.
+00243  *
+00244  * \hideinitializer
+00245  */
+00246 #define PT_EXIT(pt)                             \
+00247   do {                                          \
+00248     PT_INIT(pt);                                \
+00249     return PT_EXITED;                   \
+00250   } while(0)
+00251 
+00252 /** @} */
+00253 
+00254 /**
+00255  * \name Calling a protothread
+00256  * @{
+00257  */
+00258 
+00259 /**
+00260  * Schedule a protothread.
+00261  *
+00262  * This function shedules a protothread. The return value of the
+00263  * function is non-zero if the protothread is running or zero if the
+00264  * protothread has exited.
+00265  *
+00266  * \param f The call to the C function implementing the protothread to
+00267  * be scheduled
+00268  *
+00269  * \hideinitializer
+00270  */
+00271 #define PT_SCHEDULE(f) ((f) == PT_WAITING)
+00272 
+00273 /** @} */
+00274 
+00275 /**
+00276  * \name Yielding from a protothread
+00277  * @{
+00278  */
+00279 
+00280 /**
+00281  * Yield from the current protothread.
+00282  *
+00283  * This function will yield the protothread, thereby allowing other
+00284  * processing to take place in the system.
+00285  *
+00286  * \param pt A pointer to the protothread control structure.
+00287  *
+00288  * \hideinitializer
+00289  */
+00290 #define PT_YIELD(pt)                            \
+00291   do {                                          \
+00292     PT_YIELD_FLAG = 0;                          \
+00293     LC_SET((pt)->lc);                           \
+00294     if(PT_YIELD_FLAG == 0) {                    \
+00295       return PT_YIELDED;                        \
+00296     }                                           \
+00297   } while(0)
+00298 
+00299 /**
+00300  * \brief      Yield from the protothread until a condition occurs.
+00301  * \param pt   A pointer to the protothread control structure.
+00302  * \param cond The condition.
+00303  *
+00304  *             This function will yield the protothread, until the
+00305  *             specified condition evaluates to true.
+00306  *
+00307  *
+00308  * \hideinitializer
+00309  */
+00310 #define PT_YIELD_UNTIL(pt, cond)                \
+00311   do {                                          \
+00312     PT_YIELD_FLAG = 0;                          \
+00313     LC_SET((pt)->lc);                           \
+00314     if((PT_YIELD_FLAG == 0) || !(cond)) {       \
+00315       return PT_YIELDED;                        \
+00316     }                                           \
+00317   } while(0)
+00318 
+00319 /** @} */
+00320 
+00321 #endif /* __PT_H__ */
+00322 
+00323 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00195.html b/components/net/uip/doc/html/a00195.html new file mode 100644 index 0000000000000000000000000000000000000000..fa2e608e8a1cadeab2d8ec49fe4047dddfd627fd --- /dev/null +++ b/components/net/uip/doc/html/a00195.html @@ -0,0 +1,152 @@ + + +uIP 1.0: uip/timer.c Source File + + + + + + +

uip/timer.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup timer
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  * Timer library implementation.
+00009  * \author
+00010  * Adam Dunkels <adam@sics.se>
+00011  */
+00012 
+00013 /*
+00014  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00015  * All rights reserved.
+00016  *
+00017  * Redistribution and use in source and binary forms, with or without
+00018  * modification, are permitted provided that the following conditions
+00019  * are met:
+00020  * 1. Redistributions of source code must retain the above copyright
+00021  *    notice, this list of conditions and the following disclaimer.
+00022  * 2. Redistributions in binary form must reproduce the above copyright
+00023  *    notice, this list of conditions and the following disclaimer in the
+00024  *    documentation and/or other materials provided with the distribution.
+00025  * 3. Neither the name of the Institute nor the names of its contributors
+00026  *    may be used to endorse or promote products derived from this software
+00027  *    without specific prior written permission.
+00028  *
+00029  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00030  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00031  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00032  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00033  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00034  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00035  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00036  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00037  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00038  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00039  * SUCH DAMAGE.
+00040  *
+00041  * This file is part of the uIP TCP/IP stack
+00042  *
+00043  * Author: Adam Dunkels <adam@sics.se>
+00044  *
+00045  * $Id: timer.c,v 1.2 2006/06/12 08:00:30 adam Exp $
+00046  */
+00047 
+00048 #include "clock.h"
+00049 #include "timer.h"
+00050 
+00051 /*---------------------------------------------------------------------------*/
+00052 /**
+00053  * Set a timer.
+00054  *
+00055  * This function is used to set a timer for a time sometime in the
+00056  * future. The function timer_expired() will evaluate to true after
+00057  * the timer has expired.
+00058  *
+00059  * \param t A pointer to the timer
+00060  * \param interval The interval before the timer expires.
+00061  *
+00062  */
+00063 void
+00064 timer_set(struct timer *t, clock_time_t interval)
+00065 {
+00066   t->interval = interval;
+00067   t->start = clock_time();
+00068 }
+00069 /*---------------------------------------------------------------------------*/
+00070 /**
+00071  * Reset the timer with the same interval.
+00072  *
+00073  * This function resets the timer with the same interval that was
+00074  * given to the timer_set() function. The start point of the interval
+00075  * is the exact time that the timer last expired. Therefore, this
+00076  * function will cause the timer to be stable over time, unlike the
+00077  * timer_rester() function.
+00078  *
+00079  * \param t A pointer to the timer.
+00080  *
+00081  * \sa timer_restart()
+00082  */
+00083 void
+00084 timer_reset(struct timer *t)
+00085 {
+00086   t->start += t->interval;
+00087 }
+00088 /*---------------------------------------------------------------------------*/
+00089 /**
+00090  * Restart the timer from the current point in time
+00091  *
+00092  * This function restarts a timer with the same interval that was
+00093  * given to the timer_set() function. The timer will start at the
+00094  * current time.
+00095  *
+00096  * \note A periodic timer will drift if this function is used to reset
+00097  * it. For preioric timers, use the timer_reset() function instead.
+00098  *
+00099  * \param t A pointer to the timer.
+00100  *
+00101  * \sa timer_reset()
+00102  */
+00103 void
+00104 timer_restart(struct timer *t)
+00105 {
+00106   t->start = clock_time();
+00107 }
+00108 /*---------------------------------------------------------------------------*/
+00109 /**
+00110  * Check if a timer has expired.
+00111  *
+00112  * This function tests if a timer has expired and returns true or
+00113  * false depending on its status.
+00114  *
+00115  * \param t A pointer to the timer
+00116  *
+00117  * \return Non-zero if the timer has expired, zero otherwise.
+00118  *
+00119  */
+00120 int
+00121 timer_expired(struct timer *t)
+00122 {
+00123   return (clock_time_t)(clock_time() - t->start) >= (clock_time_t)t->interval;
+00124 }
+00125 /*---------------------------------------------------------------------------*/
+00126 
+00127 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00196.html b/components/net/uip/doc/html/a00196.html new file mode 100644 index 0000000000000000000000000000000000000000..c72141b7253ba38eac1288c287db01e899cbdaf0 --- /dev/null +++ b/components/net/uip/doc/html/a00196.html @@ -0,0 +1,111 @@ + + +uIP 1.0: uip/timer.h Source File + + + + + + +

uip/timer.h

Go to the documentation of this file.
00001 /**
+00002  * \defgroup timer Timer library
+00003  *
+00004  * The timer library provides functions for setting, resetting and
+00005  * restarting timers, and for checking if a timer has expired. An
+00006  * application must "manually" check if its timers have expired; this
+00007  * is not done automatically.
+00008  *
+00009  * A timer is declared as a \c struct \c timer and all access to the
+00010  * timer is made by a pointer to the declared timer.
+00011  *
+00012  * \note The timer library uses the \ref clock "Clock library" to
+00013  * measure time. Intervals should be specified in the format used by
+00014  * the clock library.
+00015  *
+00016  * @{
+00017  */
+00018 
+00019 
+00020 /**
+00021  * \file
+00022  * Timer library header file.
+00023  * \author
+00024  * Adam Dunkels <adam@sics.se>
+00025  */
+00026 
+00027 /*
+00028  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00029  * All rights reserved.
+00030  *
+00031  * Redistribution and use in source and binary forms, with or without
+00032  * modification, are permitted provided that the following conditions
+00033  * are met:
+00034  * 1. Redistributions of source code must retain the above copyright
+00035  *    notice, this list of conditions and the following disclaimer.
+00036  * 2. Redistributions in binary form must reproduce the above copyright
+00037  *    notice, this list of conditions and the following disclaimer in the
+00038  *    documentation and/or other materials provided with the distribution.
+00039  * 3. Neither the name of the Institute nor the names of its contributors
+00040  *    may be used to endorse or promote products derived from this software
+00041  *    without specific prior written permission.
+00042  *
+00043  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00044  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00045  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00046  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00047  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00048  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00049  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00050  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00051  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00052  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00053  * SUCH DAMAGE.
+00054  *
+00055  * This file is part of the uIP TCP/IP stack
+00056  *
+00057  * Author: Adam Dunkels <adam@sics.se>
+00058  *
+00059  * $Id: timer.h,v 1.3 2006/06/11 21:46:39 adam Exp $
+00060  */
+00061 #ifndef __TIMER_H__
+00062 #define __TIMER_H__
+00063 
+00064 #include "clock.h"
+00065 
+00066 /**
+00067  * A timer.
+00068  *
+00069  * This structure is used for declaring a timer. The timer must be set
+00070  * with timer_set() before it can be used.
+00071  *
+00072  * \hideinitializer
+00073  */
+00074 struct timer {
+00075   clock_time_t start;
+00076   clock_time_t interval;
+00077 };
+00078 
+00079 void timer_set(struct timer *t, clock_time_t interval);
+00080 void timer_reset(struct timer *t);
+00081 void timer_restart(struct timer *t);
+00082 int timer_expired(struct timer *t);
+00083 
+00084 #endif /* __TIMER_H__ */
+00085 
+00086 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00197.html b/components/net/uip/doc/html/a00197.html new file mode 100644 index 0000000000000000000000000000000000000000..d8f85aa30fc55c34dae54e618941dca6939f3d8c --- /dev/null +++ b/components/net/uip/doc/html/a00197.html @@ -0,0 +1,183 @@ + + +uIP 1.0: uip/uip-neighbor.c Source File + + + + + + +

uip/uip-neighbor.c

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2006, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * $Id: uip-neighbor.c,v 1.2 2006/06/12 08:00:30 adam Exp $
+00032  */
+00033 
+00034 /**
+00035  * \file
+00036  *         Database of link-local neighbors, used by IPv6 code and
+00037  *         to be used by a future ARP code rewrite.
+00038  * \author
+00039  *         Adam Dunkels <adam@sics.se>
+00040  */
+00041 
+00042 #include "uip-neighbor.h"
+00043 
+00044 #include <string.h>
+00045 
+00046 #define MAX_TIME 128
+00047 
+00048 #ifdef UIP_NEIGHBOR_CONF_ENTRIES
+00049 #define ENTRIES UIP_NEIGHBOR_CONF_ENTRIES
+00050 #else /* UIP_NEIGHBOR_CONF_ENTRIES */
+00051 #define ENTRIES 8
+00052 #endif /* UIP_NEIGHBOR_CONF_ENTRIES */
+00053 
+00054 struct neighbor_entry {
+00055   uip_ipaddr_t ipaddr;
+00056   struct uip_neighbor_addr addr;
+00057   u8_t time;
+00058 };
+00059 static struct neighbor_entry entries[ENTRIES];
+00060 
+00061 /*---------------------------------------------------------------------------*/
+00062 void
+00063 uip_neighbor_init(void)
+00064 {
+00065   int i;
+00066 
+00067   for(i = 0; i < ENTRIES; ++i) {
+00068     entries[i].time = MAX_TIME;
+00069   }
+00070 }
+00071 /*---------------------------------------------------------------------------*/
+00072 void
+00073 uip_neighbor_periodic(void)
+00074 {
+00075   int i;
+00076 
+00077   for(i = 0; i < ENTRIES; ++i) {
+00078     if(entries[i].time < MAX_TIME) {
+00079       entries[i].time++;
+00080     }
+00081   }
+00082 }
+00083 /*---------------------------------------------------------------------------*/
+00084 void
+00085 uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr)
+00086 {
+00087   int i, oldest;
+00088   u8_t oldest_time;
+00089 
+00090   printf("Adding neighbor with link address %02x:%02x:%02x:%02x:%02x:%02x\n",
+00091          addr->addr.addr[0], addr->addr.addr[1], addr->addr.addr[2], addr->addr.addr[3],
+00092          addr->addr.addr[4], addr->addr.addr[5]);
+00093   
+00094   /* Find the first unused entry or the oldest used entry. */
+00095   oldest_time = 0;
+00096   oldest = 0;
+00097   for(i = 0; i < ENTRIES; ++i) {
+00098     if(entries[i].time == MAX_TIME) {
+00099       oldest = i;
+00100       break;
+00101     }
+00102     if(uip_ipaddr_cmp(entries[i].ipaddr, addr)) {
+00103       oldest = i;
+00104       break;
+00105     }
+00106     if(entries[i].time > oldest_time) {
+00107       oldest = i;
+00108       oldest_time = entries[i].time;
+00109     }
+00110   }
+00111 
+00112   /* Use the oldest or first free entry (either pointed to by the
+00113      "oldest" variable). */
+00114   entries[oldest].time = 0;
+00115   uip_ipaddr_copy(entries[oldest].ipaddr, ipaddr);
+00116   memcpy(&entries[oldest].addr, addr, sizeof(struct uip_neighbor_addr));
+00117 }
+00118 /*---------------------------------------------------------------------------*/
+00119 static struct neighbor_entry *
+00120 find_entry(uip_ipaddr_t ipaddr)
+00121 {
+00122   int i;
+00123   
+00124   for(i = 0; i < ENTRIES; ++i) {
+00125     if(uip_ipaddr_cmp(entries[i].ipaddr, ipaddr)) {
+00126       return &entries[i];
+00127     }
+00128   }
+00129   return NULL;
+00130 }
+00131 /*---------------------------------------------------------------------------*/
+00132 void
+00133 uip_neighbor_update(uip_ipaddr_t ipaddr)
+00134 {
+00135   struct neighbor_entry *e;
+00136 
+00137   e = find_entry(ipaddr);
+00138   if(e != NULL) {
+00139     e->time = 0;
+00140   }
+00141 }
+00142 /*---------------------------------------------------------------------------*/
+00143 struct uip_neighbor_addr *
+00144 uip_neighbor_lookup(uip_ipaddr_t ipaddr)
+00145 {
+00146   struct neighbor_entry *e;
+00147 
+00148   e = find_entry(ipaddr);
+00149   if(e != NULL) {
+00150     /*    printf("Lookup neighbor with link address %02x:%02x:%02x:%02x:%02x:%02x\n",
+00151            e->addr.addr.addr[0], e->addr.addr.addr[1], e->addr.addr.addr[2], e->addr.addr.addr[3],
+00152            e->addr.addr.addr[4], e->addr.addr.addr[5]);*/
+00153 
+00154     return &e->addr;
+00155   }
+00156   return NULL;
+00157 }
+00158 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00198.html b/components/net/uip/doc/html/a00198.html new file mode 100644 index 0000000000000000000000000000000000000000..ce7cb56de73f6838a1628e9d05ddeabacdfbe516 --- /dev/null +++ b/components/net/uip/doc/html/a00198.html @@ -0,0 +1,86 @@ + + +uIP 1.0: uip/uip-neighbor.h Source File + + + + + + +

uip/uip-neighbor.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2006, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * $Id: uip-neighbor.h,v 1.2 2006/06/12 08:00:30 adam Exp $
+00032  */
+00033 
+00034 /**
+00035  * \file
+00036  *         Header file for database of link-local neighbors, used by
+00037  *         IPv6 code and to be used by future ARP code.
+00038  * \author
+00039  *         Adam Dunkels <adam@sics.se>
+00040  */
+00041 
+00042 #ifndef __UIP_NEIGHBOR_H__
+00043 #define __UIP_NEIGHBOR_H__
+00044 
+00045 #include "uip.h"
+00046 
+00047 struct uip_neighbor_addr {
+00048 #if UIP_NEIGHBOR_CONF_ADDRTYPE
+00049   UIP_NEIGHBOR_CONF_ADDRTYPE addr;
+00050 #else
+00051   struct uip_eth_addr addr;
+00052 #endif
+00053 };
+00054 
+00055 void uip_neighbor_init(void);
+00056 void uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr);
+00057 void uip_neighbor_update(uip_ipaddr_t ipaddr);
+00058 struct uip_neighbor_addr *uip_neighbor_lookup(uip_ipaddr_t ipaddr);
+00059 void uip_neighbor_periodic(void);
+00060 
+00061 #endif /* __UIP-NEIGHBOR_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00199.html b/components/net/uip/doc/html/a00199.html new file mode 100644 index 0000000000000000000000000000000000000000..f33889b58238b69fa71996ca143b10a2f26d08f4 --- /dev/null +++ b/components/net/uip/doc/html/a00199.html @@ -0,0 +1,161 @@ + + +uIP 1.0: uip/uip-split.c Source File + + + + + + +

uip/uip-split.c

00001 /*
+00002  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: uip-split.c,v 1.2 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 #include <string.h>
+00037 
+00038 #include "uip-split.h"
+00039 #include "uip.h"
+00040 #include "uip-fw.h"
+00041 #include "uip_arch.h"
+00042 
+00043 
+00044 
+00045 #define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
+00046 
+00047 /*-----------------------------------------------------------------------------*/
+00048 void
+00049 uip_split_output(void)
+00050 {
+00051   u16_t tcplen, len1, len2;
+00052 
+00053   /* We only try to split maximum sized TCP segments. */
+00054   if(BUF->proto == UIP_PROTO_TCP &&
+00055      uip_len == UIP_BUFSIZE - UIP_LLH_LEN) {
+00056 
+00057     tcplen = uip_len - UIP_TCPIP_HLEN;
+00058     /* Split the segment in two. If the original packet length was
+00059        odd, we make the second packet one byte larger. */
+00060     len1 = len2 = tcplen / 2;
+00061     if(len1 + len2 < tcplen) {
+00062       ++len2;
+00063     }
+00064 
+00065     /* Create the first packet. This is done by altering the length
+00066        field of the IP header and updating the checksums. */
+00067     uip_len = len1 + UIP_TCPIP_HLEN;
+00068 #if UIP_CONF_IPV6
+00069     /* For IPv6, the IP length field does not include the IPv6 IP header
+00070        length. */
+00071     BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8);
+00072     BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff);
+00073 #else /* UIP_CONF_IPV6 */
+00074     BUF->len[0] = uip_len >> 8;
+00075     BUF->len[1] = uip_len & 0xff;
+00076 #endif /* UIP_CONF_IPV6 */
+00077     
+00078     /* Recalculate the TCP checksum. */
+00079     BUF->tcpchksum = 0;
+00080     BUF->tcpchksum = ~(uip_tcpchksum());
+00081 
+00082 #if !UIP_CONF_IPV6
+00083     /* Recalculate the IP checksum. */
+00084     BUF->ipchksum = 0;
+00085     BUF->ipchksum = ~(uip_ipchksum());
+00086 #endif /* UIP_CONF_IPV6 */
+00087     
+00088     /* Transmit the first packet. */
+00089     /*    uip_fw_output();*/
+00090     tcpip_output();
+00091 
+00092     /* Now, create the second packet. To do this, it is not enough to
+00093        just alter the length field, but we must also update the TCP
+00094        sequence number and point the uip_appdata to a new place in
+00095        memory. This place is detemined by the length of the first
+00096        packet (len1). */
+00097     uip_len = len2 + UIP_TCPIP_HLEN;
+00098 #if UIP_CONF_IPV6
+00099     /* For IPv6, the IP length field does not include the IPv6 IP header
+00100        length. */
+00101     BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8);
+00102     BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff);
+00103 #else /* UIP_CONF_IPV6 */
+00104     BUF->len[0] = uip_len >> 8;
+00105     BUF->len[1] = uip_len & 0xff;
+00106 #endif /* UIP_CONF_IPV6 */
+00107     
+00108     /*    uip_appdata += len1;*/
+00109     memcpy(uip_appdata, (u8_t *)uip_appdata + len1, len2);
+00110 
+00111     uip_add32(BUF->seqno, len1);
+00112     BUF->seqno[0] = uip_acc32[0];
+00113     BUF->seqno[1] = uip_acc32[1];
+00114     BUF->seqno[2] = uip_acc32[2];
+00115     BUF->seqno[3] = uip_acc32[3];
+00116     
+00117     /* Recalculate the TCP checksum. */
+00118     BUF->tcpchksum = 0;
+00119     BUF->tcpchksum = ~(uip_tcpchksum());
+00120 
+00121 #if !UIP_CONF_IPV6
+00122     /* Recalculate the IP checksum. */
+00123     BUF->ipchksum = 0;
+00124     BUF->ipchksum = ~(uip_ipchksum());
+00125 #endif /* UIP_CONF_IPV6 */
+00126 
+00127     /* Transmit the second packet. */
+00128     /*    uip_fw_output();*/
+00129     tcpip_output();
+00130   } else {
+00131     /*    uip_fw_output();*/
+00132     tcpip_output();
+00133   }
+00134      
+00135 }
+00136 /*-----------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00200.html b/components/net/uip/doc/html/a00200.html new file mode 100644 index 0000000000000000000000000000000000000000..9371423f38f6cfe019aad9ed3507434ea9b0f23a --- /dev/null +++ b/components/net/uip/doc/html/a00200.html @@ -0,0 +1,121 @@ + + +uIP 1.0: uip/uip-split.h Source File + + + + + + +

uip/uip-split.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: uip-split.h,v 1.2 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 /**
+00036  * \addtogroup uip
+00037  * @{
+00038  */
+00039 
+00040 /**
+00041  * \defgroup uipsplit uIP TCP throughput booster hack
+00042  * @{
+00043  *
+00044  * The basic uIP TCP implementation only allows each TCP connection to
+00045  * have a single TCP segment in flight at any given time. Because of
+00046  * the delayed ACK algorithm employed by most TCP receivers, uIP's
+00047  * limit on the amount of in-flight TCP segments seriously reduces the
+00048  * maximum achievable throughput for sending data from uIP.
+00049  *
+00050  * The uip-split module is a hack which tries to remedy this
+00051  * situation. By splitting maximum sized outgoing TCP segments into
+00052  * two, the delayed ACK algorithm is not invoked at TCP
+00053  * receivers. This improves the throughput when sending data from uIP
+00054  * by orders of magnitude.
+00055  *
+00056  * The uip-split module uses the uip-fw module (uIP IP packet
+00057  * forwarding) for sending packets. Therefore, the uip-fw module must
+00058  * be set up with the appropriate network interfaces for this module
+00059  * to work.
+00060  */
+00061 
+00062 
+00063 /**
+00064  * \file
+00065  * Module for splitting outbound TCP segments in two to avoid the
+00066  * delayed ACK throughput degradation.
+00067  * \author
+00068  * Adam Dunkels <adam@sics.se>
+00069  *
+00070  */
+00071 
+00072 #ifndef __UIP_SPLIT_H__
+00073 #define __UIP_SPLIT_H__
+00074 
+00075 /**
+00076  * Handle outgoing packets.
+00077  *
+00078  * This function inspects an outgoing packet in the uip_buf buffer and
+00079  * sends it out using the uip_fw_output() function. If the packet is a
+00080  * full-sized TCP segment it will be split into two segments and
+00081  * transmitted separately. This function should be called instead of
+00082  * the actual device driver output function, or the uip_fw_output()
+00083  * function.
+00084  *
+00085  * The headers of the outgoing packet is assumed to be in the uip_buf
+00086  * buffer and the payload is assumed to be wherever uip_appdata
+00087  * points. The length of the outgoing packet is assumed to be in the
+00088  * uip_len variable.
+00089  *
+00090  */
+00091 void uip_split_output(void);
+00092 
+00093 #endif /* __UIP_SPLIT_H__ */
+00094 
+00095 /** @} */
+00096 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00201.html b/components/net/uip/doc/html/a00201.html new file mode 100644 index 0000000000000000000000000000000000000000..bf6878fb74f40f778d5578f6810919db24f8e970 --- /dev/null +++ b/components/net/uip/doc/html/a00201.html @@ -0,0 +1,1922 @@ + + +uIP 1.0: uip/uip.c Source File + + + + + + +

uip/uip.c

Go to the documentation of this file.
00001 #define DEBUG_PRINTF(...) /*printf(__VA_ARGS__)*/
+00002 
+00003 /**
+00004  * \defgroup uip The uIP TCP/IP stack
+00005  * @{
+00006  *
+00007  * uIP is an implementation of the TCP/IP protocol stack intended for
+00008  * small 8-bit and 16-bit microcontrollers.
+00009  *
+00010  * uIP provides the necessary protocols for Internet communication,
+00011  * with a very small code footprint and RAM requirements - the uIP
+00012  * code size is on the order of a few kilobytes and RAM usage is on
+00013  * the order of a few hundred bytes.
+00014  */
+00015 
+00016 /**
+00017  * \file
+00018  * The uIP TCP/IP stack code.
+00019  * \author Adam Dunkels <adam@dunkels.com>
+00020  */
+00021 
+00022 /*
+00023  * Copyright (c) 2001-2003, Adam Dunkels.
+00024  * All rights reserved.
+00025  *
+00026  * Redistribution and use in source and binary forms, with or without
+00027  * modification, are permitted provided that the following conditions
+00028  * are met:
+00029  * 1. Redistributions of source code must retain the above copyright
+00030  *    notice, this list of conditions and the following disclaimer.
+00031  * 2. Redistributions in binary form must reproduce the above copyright
+00032  *    notice, this list of conditions and the following disclaimer in the
+00033  *    documentation and/or other materials provided with the distribution.
+00034  * 3. The name of the author may not be used to endorse or promote
+00035  *    products derived from this software without specific prior
+00036  *    written permission.
+00037  *
+00038  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00039  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00040  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00041  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00042  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00043  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00044  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00045  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00046  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00047  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00048  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00049  *
+00050  * This file is part of the uIP TCP/IP stack.
+00051  *
+00052  * $Id: uip.c,v 1.65 2006/06/11 21:46:39 adam Exp $
+00053  *
+00054  */
+00055 
+00056 /*
+00057  * uIP is a small implementation of the IP, UDP and TCP protocols (as
+00058  * well as some basic ICMP stuff). The implementation couples the IP,
+00059  * UDP, TCP and the application layers very tightly. To keep the size
+00060  * of the compiled code down, this code frequently uses the goto
+00061  * statement. While it would be possible to break the uip_process()
+00062  * function into many smaller functions, this would increase the code
+00063  * size because of the overhead of parameter passing and the fact that
+00064  * the optimier would not be as efficient.
+00065  *
+00066  * The principle is that we have a small buffer, called the uip_buf,
+00067  * in which the device driver puts an incoming packet. The TCP/IP
+00068  * stack parses the headers in the packet, and calls the
+00069  * application. If the remote host has sent data to the application,
+00070  * this data is present in the uip_buf and the application read the
+00071  * data from there. It is up to the application to put this data into
+00072  * a byte stream if needed. The application will not be fed with data
+00073  * that is out of sequence.
+00074  *
+00075  * If the application whishes to send data to the peer, it should put
+00076  * its data into the uip_buf. The uip_appdata pointer points to the
+00077  * first available byte. The TCP/IP stack will calculate the
+00078  * checksums, and fill in the necessary header fields and finally send
+00079  * the packet back to the peer.
+00080 */
+00081 
+00082 #include "uip.h"
+00083 #include "uipopt.h"
+00084 #include "uip_arch.h"
+00085 
+00086 #if UIP_CONF_IPV6
+00087 #include "uip-neighbor.h"
+00088 #endif /* UIP_CONF_IPV6 */
+00089 
+00090 #include <string.h>
+00091 
+00092 /*---------------------------------------------------------------------------*/
+00093 /* Variable definitions. */
+00094 
+00095 
+00096 /* The IP address of this host. If it is defined to be fixed (by
+00097    setting UIP_FIXEDADDR to 1 in uipopt.h), the address is set
+00098    here. Otherwise, the address */
+00099 #if UIP_FIXEDADDR > 0
+00100 const uip_ipaddr_t uip_hostaddr =
+00101   {HTONS((UIP_IPADDR0 << 8) | UIP_IPADDR1),
+00102    HTONS((UIP_IPADDR2 << 8) | UIP_IPADDR3)};
+00103 const uip_ipaddr_t uip_draddr =
+00104   {HTONS((UIP_DRIPADDR0 << 8) | UIP_DRIPADDR1),
+00105    HTONS((UIP_DRIPADDR2 << 8) | UIP_DRIPADDR3)};
+00106 const uip_ipaddr_t uip_netmask =
+00107   {HTONS((UIP_NETMASK0 << 8) | UIP_NETMASK1),
+00108    HTONS((UIP_NETMASK2 << 8) | UIP_NETMASK3)};
+00109 #else
+00110 uip_ipaddr_t uip_hostaddr, uip_draddr, uip_netmask;
+00111 #endif /* UIP_FIXEDADDR */
+00112 
+00113 static const uip_ipaddr_t all_ones_addr =
+00114 #if UIP_CONF_IPV6
+00115   {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff};
+00116 #else /* UIP_CONF_IPV6 */
+00117   {0xffff,0xffff};
+00118 #endif /* UIP_CONF_IPV6 */
+00119 static const uip_ipaddr_t all_zeroes_addr =
+00120 #if UIP_CONF_IPV6
+00121   {0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000};
+00122 #else /* UIP_CONF_IPV6 */
+00123   {0x0000,0x0000};
+00124 #endif /* UIP_CONF_IPV6 */
+00125 
+00126 
+00127 #if UIP_FIXEDETHADDR
+00128 const struct uip_eth_addr uip_ethaddr = {{UIP_ETHADDR0,
+00129                                           UIP_ETHADDR1,
+00130                                           UIP_ETHADDR2,
+00131                                           UIP_ETHADDR3,
+00132                                           UIP_ETHADDR4,
+00133                                           UIP_ETHADDR5}};
+00134 #else
+00135 struct uip_eth_addr uip_ethaddr = {{0,0,0,0,0,0}};
+00136 #endif
+00137 
+00138 #ifndef UIP_CONF_EXTERNAL_BUFFER
+00139 u8_t uip_buf[UIP_BUFSIZE + 2];   /* The packet buffer that contains
+00140                                     incoming packets. */
+00141 #endif /* UIP_CONF_EXTERNAL_BUFFER */
+00142 
+00143 void *uip_appdata;               /* The uip_appdata pointer points to
+00144                                     application data. */
+00145 void *uip_sappdata;              /* The uip_appdata pointer points to
+00146                                     the application data which is to
+00147                                     be sent. */
+00148 #if UIP_URGDATA > 0
+00149 void *uip_urgdata;               /* The uip_urgdata pointer points to
+00150                                     urgent data (out-of-band data), if
+00151                                     present. */
+00152 u16_t uip_urglen, uip_surglen;
+00153 #endif /* UIP_URGDATA > 0 */
+00154 
+00155 u16_t uip_len, uip_slen;
+00156                              /* The uip_len is either 8 or 16 bits,
+00157                                 depending on the maximum packet
+00158                                 size. */
+00159 
+00160 u8_t uip_flags;     /* The uip_flags variable is used for
+00161                                 communication between the TCP/IP stack
+00162                                 and the application program. */
+00163 struct uip_conn *uip_conn;   /* uip_conn always points to the current
+00164                                 connection. */
+00165 
+00166 struct uip_conn uip_conns[UIP_CONNS];
+00167                              /* The uip_conns array holds all TCP
+00168                                 connections. */
+00169 u16_t uip_listenports[UIP_LISTENPORTS];
+00170                              /* The uip_listenports list all currently
+00171                                 listning ports. */
+00172 #if UIP_UDP
+00173 struct uip_udp_conn *uip_udp_conn;
+00174 struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS];
+00175 #endif /* UIP_UDP */
+00176 
+00177 static u16_t ipid;           /* Ths ipid variable is an increasing
+00178                                 number that is used for the IP ID
+00179                                 field. */
+00180 
+00181 void uip_setipid(u16_t id) { ipid = id; }
+00182 
+00183 static u8_t iss[4];          /* The iss variable is used for the TCP
+00184                                 initial sequence number. */
+00185 
+00186 #if UIP_ACTIVE_OPEN
+00187 static u16_t lastport;       /* Keeps track of the last port used for
+00188                                 a new connection. */
+00189 #endif /* UIP_ACTIVE_OPEN */
+00190 
+00191 /* Temporary variables. */
+00192 u8_t uip_acc32[4];
+00193 static u8_t c, opt;
+00194 static u16_t tmp16;
+00195 
+00196 /* Structures and definitions. */
+00197 #define TCP_FIN 0x01
+00198 #define TCP_SYN 0x02
+00199 #define TCP_RST 0x04
+00200 #define TCP_PSH 0x08
+00201 #define TCP_ACK 0x10
+00202 #define TCP_URG 0x20
+00203 #define TCP_CTL 0x3f
+00204 
+00205 #define TCP_OPT_END     0   /* End of TCP options list */
+00206 #define TCP_OPT_NOOP    1   /* "No-operation" TCP option */
+00207 #define TCP_OPT_MSS     2   /* Maximum segment size TCP option */
+00208 
+00209 #define TCP_OPT_MSS_LEN 4   /* Length of TCP MSS option. */
+00210 
+00211 #define ICMP_ECHO_REPLY 0
+00212 #define ICMP_ECHO       8
+00213 
+00214 #define ICMP6_ECHO_REPLY             129
+00215 #define ICMP6_ECHO                   128
+00216 #define ICMP6_NEIGHBOR_SOLICITATION  135
+00217 #define ICMP6_NEIGHBOR_ADVERTISEMENT 136
+00218 
+00219 #define ICMP6_FLAG_S (1 << 6)
+00220 
+00221 #define ICMP6_OPTION_SOURCE_LINK_ADDRESS 1
+00222 #define ICMP6_OPTION_TARGET_LINK_ADDRESS 2
+00223 
+00224 
+00225 /* Macros. */
+00226 #define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
+00227 #define FBUF ((struct uip_tcpip_hdr *)&uip_reassbuf[0])
+00228 #define ICMPBUF ((struct uip_icmpip_hdr *)&uip_buf[UIP_LLH_LEN])
+00229 #define UDPBUF ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN])
+00230 
+00231 
+00232 #if UIP_STATISTICS == 1
+00233 struct uip_stats uip_stat;
+00234 #define UIP_STAT(s) s
+00235 #else
+00236 #define UIP_STAT(s)
+00237 #endif /* UIP_STATISTICS == 1 */
+00238 
+00239 #if UIP_LOGGING == 1
+00240 #include <stdio.h>
+00241 void uip_log(char *msg);
+00242 #define UIP_LOG(m) uip_log(m)
+00243 #else
+00244 #define UIP_LOG(m)
+00245 #endif /* UIP_LOGGING == 1 */
+00246 
+00247 #if ! UIP_ARCH_ADD32
+00248 void
+00249 uip_add32(u8_t *op32, u16_t op16)
+00250 {
+00251   uip_acc32[3] = op32[3] + (op16 & 0xff);
+00252   uip_acc32[2] = op32[2] + (op16 >> 8);
+00253   uip_acc32[1] = op32[1];
+00254   uip_acc32[0] = op32[0];
+00255   
+00256   if(uip_acc32[2] < (op16 >> 8)) {
+00257     ++uip_acc32[1];
+00258     if(uip_acc32[1] == 0) {
+00259       ++uip_acc32[0];
+00260     }
+00261   }
+00262   
+00263   
+00264   if(uip_acc32[3] < (op16 & 0xff)) {
+00265     ++uip_acc32[2];
+00266     if(uip_acc32[2] == 0) {
+00267       ++uip_acc32[1];
+00268       if(uip_acc32[1] == 0) {
+00269         ++uip_acc32[0];
+00270       }
+00271     }
+00272   }
+00273 }
+00274 
+00275 #endif /* UIP_ARCH_ADD32 */
+00276 
+00277 #if ! UIP_ARCH_CHKSUM
+00278 /*---------------------------------------------------------------------------*/
+00279 static u16_t
+00280 chksum(u16_t sum, const u8_t *data, u16_t len)
+00281 {
+00282   u16_t t;
+00283   const u8_t *dataptr;
+00284   const u8_t *last_byte;
+00285 
+00286   dataptr = data;
+00287   last_byte = data + len - 1;
+00288   
+00289   while(dataptr < last_byte) {  /* At least two more bytes */
+00290     t = (dataptr[0] << 8) + dataptr[1];
+00291     sum += t;
+00292     if(sum < t) {
+00293       sum++;            /* carry */
+00294     }
+00295     dataptr += 2;
+00296   }
+00297   
+00298   if(dataptr == last_byte) {
+00299     t = (dataptr[0] << 8) + 0;
+00300     sum += t;
+00301     if(sum < t) {
+00302       sum++;            /* carry */
+00303     }
+00304   }
+00305 
+00306   /* Return sum in host byte order. */
+00307   return sum;
+00308 }
+00309 /*---------------------------------------------------------------------------*/
+00310 u16_t
+00311 uip_chksum(u16_t *data, u16_t len)
+00312 {
+00313   return htons(chksum(0, (u8_t *)data, len));
+00314 }
+00315 /*---------------------------------------------------------------------------*/
+00316 #ifndef UIP_ARCH_IPCHKSUM
+00317 u16_t
+00318 uip_ipchksum(void)
+00319 {
+00320   u16_t sum;
+00321 
+00322   sum = chksum(0, &uip_buf[UIP_LLH_LEN], UIP_IPH_LEN);
+00323   DEBUG_PRINTF("uip_ipchksum: sum 0x%04x\n", sum);
+00324   return (sum == 0) ? 0xffff : htons(sum);
+00325 }
+00326 #endif
+00327 /*---------------------------------------------------------------------------*/
+00328 static u16_t
+00329 upper_layer_chksum(u8_t proto)
+00330 {
+00331   u16_t upper_layer_len;
+00332   u16_t sum;
+00333   
+00334 #if UIP_CONF_IPV6
+00335   upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]);
+00336 #else /* UIP_CONF_IPV6 */
+00337   upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - UIP_IPH_LEN;
+00338 #endif /* UIP_CONF_IPV6 */
+00339   
+00340   /* First sum pseudoheader. */
+00341   
+00342   /* IP protocol and length fields. This addition cannot carry. */
+00343   sum = upper_layer_len + proto;
+00344   /* Sum IP source and destination addresses. */
+00345   sum = chksum(sum, (u8_t *)&BUF->srcipaddr[0], 2 * sizeof(uip_ipaddr_t));
+00346 
+00347   /* Sum TCP header and data. */
+00348   sum = chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN],
+00349                upper_layer_len);
+00350     
+00351   return (sum == 0) ? 0xffff : htons(sum);
+00352 }
+00353 /*---------------------------------------------------------------------------*/
+00354 #if UIP_CONF_IPV6
+00355 u16_t
+00356 uip_icmp6chksum(void)
+00357 {
+00358   return upper_layer_chksum(UIP_PROTO_ICMP6);
+00359   
+00360 }
+00361 #endif /* UIP_CONF_IPV6 */
+00362 /*---------------------------------------------------------------------------*/
+00363 u16_t
+00364 uip_tcpchksum(void)
+00365 {
+00366   return upper_layer_chksum(UIP_PROTO_TCP);
+00367 }
+00368 /*---------------------------------------------------------------------------*/
+00369 #if UIP_UDP_CHECKSUMS
+00370 u16_t
+00371 uip_udpchksum(void)
+00372 {
+00373   return upper_layer_chksum(UIP_PROTO_UDP);
+00374 }
+00375 #endif /* UIP_UDP_CHECKSUMS */
+00376 #endif /* UIP_ARCH_CHKSUM */
+00377 /*---------------------------------------------------------------------------*/
+00378 void
+00379 uip_init(void)
+00380 {
+00381   for(c = 0; c < UIP_LISTENPORTS; ++c) {
+00382     uip_listenports[c] = 0;
+00383   }
+00384   for(c = 0; c < UIP_CONNS; ++c) {
+00385     uip_conns[c].tcpstateflags = UIP_CLOSED;
+00386   }
+00387 #if UIP_ACTIVE_OPEN
+00388   lastport = 1024;
+00389 #endif /* UIP_ACTIVE_OPEN */
+00390 
+00391 #if UIP_UDP
+00392   for(c = 0; c < UIP_UDP_CONNS; ++c) {
+00393     uip_udp_conns[c].lport = 0;
+00394   }
+00395 #endif /* UIP_UDP */
+00396   
+00397 
+00398   /* IPv4 initialization. */
+00399 #if UIP_FIXEDADDR == 0
+00400   /*  uip_hostaddr[0] = uip_hostaddr[1] = 0;*/
+00401 #endif /* UIP_FIXEDADDR */
+00402 
+00403 }
+00404 /*---------------------------------------------------------------------------*/
+00405 #if UIP_ACTIVE_OPEN
+00406 struct uip_conn *
+00407 uip_connect(uip_ipaddr_t *ripaddr, u16_t rport)
+00408 {
+00409   register struct uip_conn *conn, *cconn;
+00410   
+00411   /* Find an unused local port. */
+00412  again:
+00413   ++lastport;
+00414 
+00415   if(lastport >= 32000) {
+00416     lastport = 4096;
+00417   }
+00418 
+00419   /* Check if this port is already in use, and if so try to find
+00420      another one. */
+00421   for(c = 0; c < UIP_CONNS; ++c) {
+00422     conn = &uip_conns[c];
+00423     if(conn->tcpstateflags != UIP_CLOSED &&
+00424        conn->lport == htons(lastport)) {
+00425       goto again;
+00426     }
+00427   }
+00428 
+00429   conn = 0;
+00430   for(c = 0; c < UIP_CONNS; ++c) {
+00431     cconn = &uip_conns[c];
+00432     if(cconn->tcpstateflags == UIP_CLOSED) {
+00433       conn = cconn;
+00434       break;
+00435     }
+00436     if(cconn->tcpstateflags == UIP_TIME_WAIT) {
+00437       if(conn == 0 ||
+00438          cconn->timer > conn->timer) {
+00439         conn = cconn;
+00440       }
+00441     }
+00442   }
+00443 
+00444   if(conn == 0) {
+00445     return 0;
+00446   }
+00447   
+00448   conn->tcpstateflags = UIP_SYN_SENT;
+00449 
+00450   conn->snd_nxt[0] = iss[0];
+00451   conn->snd_nxt[1] = iss[1];
+00452   conn->snd_nxt[2] = iss[2];
+00453   conn->snd_nxt[3] = iss[3];
+00454 
+00455   conn->initialmss = conn->mss = UIP_TCP_MSS;
+00456   
+00457   conn->len = 1;   /* TCP length of the SYN is one. */
+00458   conn->nrtx = 0;
+00459   conn->timer = 1; /* Send the SYN next time around. */
+00460   conn->rto = UIP_RTO;
+00461   conn->sa = 0;
+00462   conn->sv = 16;   /* Initial value of the RTT variance. */
+00463   conn->lport = htons(lastport);
+00464   conn->rport = rport;
+00465   uip_ipaddr_copy(&conn->ripaddr, ripaddr);
+00466   
+00467   return conn;
+00468 }
+00469 #endif /* UIP_ACTIVE_OPEN */
+00470 /*---------------------------------------------------------------------------*/
+00471 #if UIP_UDP
+00472 struct uip_udp_conn *
+00473 uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport)
+00474 {
+00475   register struct uip_udp_conn *conn;
+00476   
+00477   /* Find an unused local port. */
+00478  again:
+00479   ++lastport;
+00480 
+00481   if(lastport >= 32000) {
+00482     lastport = 4096;
+00483   }
+00484   
+00485   for(c = 0; c < UIP_UDP_CONNS; ++c) {
+00486     if(uip_udp_conns[c].lport == htons(lastport)) {
+00487       goto again;
+00488     }
+00489   }
+00490 
+00491 
+00492   conn = 0;
+00493   for(c = 0; c < UIP_UDP_CONNS; ++c) {
+00494     if(uip_udp_conns[c].lport == 0) {
+00495       conn = &uip_udp_conns[c];
+00496       break;
+00497     }
+00498   }
+00499 
+00500   if(conn == 0) {
+00501     return 0;
+00502   }
+00503   
+00504   conn->lport = HTONS(lastport);
+00505   conn->rport = rport;
+00506   if(ripaddr == NULL) {
+00507     memset(conn->ripaddr, 0, sizeof(uip_ipaddr_t));
+00508   } else {
+00509     uip_ipaddr_copy(&conn->ripaddr, ripaddr);
+00510   }
+00511   conn->ttl = UIP_TTL;
+00512   
+00513   return conn;
+00514 }
+00515 #endif /* UIP_UDP */
+00516 /*---------------------------------------------------------------------------*/
+00517 void
+00518 uip_unlisten(u16_t port)
+00519 {
+00520   for(c = 0; c < UIP_LISTENPORTS; ++c) {
+00521     if(uip_listenports[c] == port) {
+00522       uip_listenports[c] = 0;
+00523       return;
+00524     }
+00525   }
+00526 }
+00527 /*---------------------------------------------------------------------------*/
+00528 void
+00529 uip_listen(u16_t port)
+00530 {
+00531   for(c = 0; c < UIP_LISTENPORTS; ++c) {
+00532     if(uip_listenports[c] == 0) {
+00533       uip_listenports[c] = port;
+00534       return;
+00535     }
+00536   }
+00537 }
+00538 /*---------------------------------------------------------------------------*/
+00539 /* XXX: IP fragment reassembly: not well-tested. */
+00540 
+00541 #if UIP_REASSEMBLY && !UIP_CONF_IPV6
+00542 #define UIP_REASS_BUFSIZE (UIP_BUFSIZE - UIP_LLH_LEN)
+00543 static u8_t uip_reassbuf[UIP_REASS_BUFSIZE];
+00544 static u8_t uip_reassbitmap[UIP_REASS_BUFSIZE / (8 * 8)];
+00545 static const u8_t bitmap_bits[8] = {0xff, 0x7f, 0x3f, 0x1f,
+00546                                     0x0f, 0x07, 0x03, 0x01};
+00547 static u16_t uip_reasslen;
+00548 static u8_t uip_reassflags;
+00549 #define UIP_REASS_FLAG_LASTFRAG 0x01
+00550 static u8_t uip_reasstmr;
+00551 
+00552 #define IP_MF   0x20
+00553 
+00554 static u8_t
+00555 uip_reass(void)
+00556 {
+00557   u16_t offset, len;
+00558   u16_t i;
+00559 
+00560   /* If ip_reasstmr is zero, no packet is present in the buffer, so we
+00561      write the IP header of the fragment into the reassembly
+00562      buffer. The timer is updated with the maximum age. */
+00563   if(uip_reasstmr == 0) {
+00564     memcpy(uip_reassbuf, &BUF->vhl, UIP_IPH_LEN);
+00565     uip_reasstmr = UIP_REASS_MAXAGE;
+00566     uip_reassflags = 0;
+00567     /* Clear the bitmap. */
+00568     memset(uip_reassbitmap, 0, sizeof(uip_reassbitmap));
+00569   }
+00570 
+00571   /* Check if the incoming fragment matches the one currently present
+00572      in the reasembly buffer. If so, we proceed with copying the
+00573      fragment into the buffer. */
+00574   if(BUF->srcipaddr[0] == FBUF->srcipaddr[0] &&
+00575      BUF->srcipaddr[1] == FBUF->srcipaddr[1] &&
+00576      BUF->destipaddr[0] == FBUF->destipaddr[0] &&
+00577      BUF->destipaddr[1] == FBUF->destipaddr[1] &&
+00578      BUF->ipid[0] == FBUF->ipid[0] &&
+00579      BUF->ipid[1] == FBUF->ipid[1]) {
+00580 
+00581     len = (BUF->len[0] << 8) + BUF->len[1] - (BUF->vhl & 0x0f) * 4;
+00582     offset = (((BUF->ipoffset[0] & 0x3f) << 8) + BUF->ipoffset[1]) * 8;
+00583 
+00584     /* If the offset or the offset + fragment length overflows the
+00585        reassembly buffer, we discard the entire packet. */
+00586     if(offset > UIP_REASS_BUFSIZE ||
+00587        offset + len > UIP_REASS_BUFSIZE) {
+00588       uip_reasstmr = 0;
+00589       goto nullreturn;
+00590     }
+00591 
+00592     /* Copy the fragment into the reassembly buffer, at the right
+00593        offset. */
+00594     memcpy(&uip_reassbuf[UIP_IPH_LEN + offset],
+00595            (char *)BUF + (int)((BUF->vhl & 0x0f) * 4),
+00596            len);
+00597       
+00598     /* Update the bitmap. */
+00599     if(offset / (8 * 8) == (offset + len) / (8 * 8)) {
+00600       /* If the two endpoints are in the same byte, we only update
+00601          that byte. */
+00602              
+00603       uip_reassbitmap[offset / (8 * 8)] |=
+00604              bitmap_bits[(offset / 8 ) & 7] &
+00605              ~bitmap_bits[((offset + len) / 8 ) & 7];
+00606     } else {
+00607       /* If the two endpoints are in different bytes, we update the
+00608          bytes in the endpoints and fill the stuff inbetween with
+00609          0xff. */
+00610       uip_reassbitmap[offset / (8 * 8)] |=
+00611         bitmap_bits[(offset / 8 ) & 7];
+00612       for(i = 1 + offset / (8 * 8); i < (offset + len) / (8 * 8); ++i) {
+00613         uip_reassbitmap[i] = 0xff;
+00614       }
+00615       uip_reassbitmap[(offset + len) / (8 * 8)] |=
+00616         ~bitmap_bits[((offset + len) / 8 ) & 7];
+00617     }
+00618     
+00619     /* If this fragment has the More Fragments flag set to zero, we
+00620        know that this is the last fragment, so we can calculate the
+00621        size of the entire packet. We also set the
+00622        IP_REASS_FLAG_LASTFRAG flag to indicate that we have received
+00623        the final fragment. */
+00624 
+00625     if((BUF->ipoffset[0] & IP_MF) == 0) {
+00626       uip_reassflags |= UIP_REASS_FLAG_LASTFRAG;
+00627       uip_reasslen = offset + len;
+00628     }
+00629     
+00630     /* Finally, we check if we have a full packet in the buffer. We do
+00631        this by checking if we have the last fragment and if all bits
+00632        in the bitmap are set. */
+00633     if(uip_reassflags & UIP_REASS_FLAG_LASTFRAG) {
+00634       /* Check all bytes up to and including all but the last byte in
+00635          the bitmap. */
+00636       for(i = 0; i < uip_reasslen / (8 * 8) - 1; ++i) {
+00637         if(uip_reassbitmap[i] != 0xff) {
+00638           goto nullreturn;
+00639         }
+00640       }
+00641       /* Check the last byte in the bitmap. It should contain just the
+00642          right amount of bits. */
+00643       if(uip_reassbitmap[uip_reasslen / (8 * 8)] !=
+00644          (u8_t)~bitmap_bits[uip_reasslen / 8 & 7]) {
+00645         goto nullreturn;
+00646       }
+00647 
+00648       /* If we have come this far, we have a full packet in the
+00649          buffer, so we allocate a pbuf and copy the packet into it. We
+00650          also reset the timer. */
+00651       uip_reasstmr = 0;
+00652       memcpy(BUF, FBUF, uip_reasslen);
+00653 
+00654       /* Pretend to be a "normal" (i.e., not fragmented) IP packet
+00655          from now on. */
+00656       BUF->ipoffset[0] = BUF->ipoffset[1] = 0;
+00657       BUF->len[0] = uip_reasslen >> 8;
+00658       BUF->len[1] = uip_reasslen & 0xff;
+00659       BUF->ipchksum = 0;
+00660       BUF->ipchksum = ~(uip_ipchksum());
+00661 
+00662       return uip_reasslen;
+00663     }
+00664   }
+00665 
+00666  nullreturn:
+00667   return 0;
+00668 }
+00669 #endif /* UIP_REASSEMBLY */
+00670 /*---------------------------------------------------------------------------*/
+00671 static void
+00672 uip_add_rcv_nxt(u16_t n)
+00673 {
+00674   uip_add32(uip_conn->rcv_nxt, n);
+00675   uip_conn->rcv_nxt[0] = uip_acc32[0];
+00676   uip_conn->rcv_nxt[1] = uip_acc32[1];
+00677   uip_conn->rcv_nxt[2] = uip_acc32[2];
+00678   uip_conn->rcv_nxt[3] = uip_acc32[3];
+00679 }
+00680 /*---------------------------------------------------------------------------*/
+00681 void
+00682 uip_process(u8_t flag)
+00683 {
+00684   register struct uip_conn *uip_connr = uip_conn;
+00685 
+00686 #if UIP_UDP
+00687   if(flag == UIP_UDP_SEND_CONN) {
+00688     goto udp_send;
+00689   }
+00690 #endif /* UIP_UDP */
+00691   
+00692   uip_sappdata = uip_appdata = &uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN];
+00693 
+00694   /* Check if we were invoked because of a poll request for a
+00695      particular connection. */
+00696   if(flag == UIP_POLL_REQUEST) {
+00697     if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED &&
+00698        !uip_outstanding(uip_connr)) {
+00699         uip_flags = UIP_POLL;
+00700         UIP_APPCALL();
+00701         goto appsend;
+00702     }
+00703     goto drop;
+00704     
+00705     /* Check if we were invoked because of the perodic timer fireing. */
+00706   } else if(flag == UIP_TIMER) {
+00707 #if UIP_REASSEMBLY
+00708     if(uip_reasstmr != 0) {
+00709       --uip_reasstmr;
+00710     }
+00711 #endif /* UIP_REASSEMBLY */
+00712     /* Increase the initial sequence number. */
+00713     if(++iss[3] == 0) {
+00714       if(++iss[2] == 0) {
+00715         if(++iss[1] == 0) {
+00716           ++iss[0];
+00717         }
+00718       }
+00719     }
+00720 
+00721     /* Reset the length variables. */
+00722     uip_len = 0;
+00723     uip_slen = 0;
+00724 
+00725     /* Check if the connection is in a state in which we simply wait
+00726        for the connection to time out. If so, we increase the
+00727        connection's timer and remove the connection if it times
+00728        out. */
+00729     if(uip_connr->tcpstateflags == UIP_TIME_WAIT ||
+00730        uip_connr->tcpstateflags == UIP_FIN_WAIT_2) {
+00731       ++(uip_connr->timer);
+00732       if(uip_connr->timer == UIP_TIME_WAIT_TIMEOUT) {
+00733         uip_connr->tcpstateflags = UIP_CLOSED;
+00734       }
+00735     } else if(uip_connr->tcpstateflags != UIP_CLOSED) {
+00736       /* If the connection has outstanding data, we increase the
+00737          connection's timer and see if it has reached the RTO value
+00738          in which case we retransmit. */
+00739       if(uip_outstanding(uip_connr)) {
+00740         if(uip_connr->timer-- == 0) {
+00741           if(uip_connr->nrtx == UIP_MAXRTX ||
+00742              ((uip_connr->tcpstateflags == UIP_SYN_SENT ||
+00743                uip_connr->tcpstateflags == UIP_SYN_RCVD) &&
+00744               uip_connr->nrtx == UIP_MAXSYNRTX)) {
+00745             uip_connr->tcpstateflags = UIP_CLOSED;
+00746 
+00747             /* We call UIP_APPCALL() with uip_flags set to
+00748                UIP_TIMEDOUT to inform the application that the
+00749                connection has timed out. */
+00750             uip_flags = UIP_TIMEDOUT;
+00751             UIP_APPCALL();
+00752 
+00753             /* We also send a reset packet to the remote host. */
+00754             BUF->flags = TCP_RST | TCP_ACK;
+00755             goto tcp_send_nodata;
+00756           }
+00757 
+00758           /* Exponential backoff. */
+00759           uip_connr->timer = UIP_RTO << (uip_connr->nrtx > 4?
+00760                                          4:
+00761                                          uip_connr->nrtx);
+00762           ++(uip_connr->nrtx);
+00763           
+00764           /* Ok, so we need to retransmit. We do this differently
+00765              depending on which state we are in. In ESTABLISHED, we
+00766              call upon the application so that it may prepare the
+00767              data for the retransmit. In SYN_RCVD, we resend the
+00768              SYNACK that we sent earlier and in LAST_ACK we have to
+00769              retransmit our FINACK. */
+00770           UIP_STAT(++uip_stat.tcp.rexmit);
+00771           switch(uip_connr->tcpstateflags & UIP_TS_MASK) {
+00772           case UIP_SYN_RCVD:
+00773             /* In the SYN_RCVD state, we should retransmit our
+00774                SYNACK. */
+00775             goto tcp_send_synack;
+00776             
+00777 #if UIP_ACTIVE_OPEN
+00778           case UIP_SYN_SENT:
+00779             /* In the SYN_SENT state, we retransmit out SYN. */
+00780             BUF->flags = 0;
+00781             goto tcp_send_syn;
+00782 #endif /* UIP_ACTIVE_OPEN */
+00783             
+00784           case UIP_ESTABLISHED:
+00785             /* In the ESTABLISHED state, we call upon the application
+00786                to do the actual retransmit after which we jump into
+00787                the code for sending out the packet (the apprexmit
+00788                label). */
+00789             uip_flags = UIP_REXMIT;
+00790             UIP_APPCALL();
+00791             goto apprexmit;
+00792             
+00793           case UIP_FIN_WAIT_1:
+00794           case UIP_CLOSING:
+00795           case UIP_LAST_ACK:
+00796             /* In all these states we should retransmit a FINACK. */
+00797             goto tcp_send_finack;
+00798             
+00799           }
+00800         }
+00801       } else if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED) {
+00802         /* If there was no need for a retransmission, we poll the
+00803            application for new data. */
+00804         uip_flags = UIP_POLL;
+00805         UIP_APPCALL();
+00806         goto appsend;
+00807       }
+00808     }
+00809     goto drop;
+00810   }
+00811 #if UIP_UDP
+00812   if(flag == UIP_UDP_TIMER) {
+00813     if(uip_udp_conn->lport != 0) {
+00814       uip_conn = NULL;
+00815       uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN];
+00816       uip_len = uip_slen = 0;
+00817       uip_flags = UIP_POLL;
+00818       UIP_UDP_APPCALL();
+00819       goto udp_send;
+00820     } else {
+00821       goto drop;
+00822     }
+00823   }
+00824 #endif
+00825 
+00826   /* This is where the input processing starts. */
+00827   UIP_STAT(++uip_stat.ip.recv);
+00828 
+00829   /* Start of IP input header processing code. */
+00830   
+00831 #if UIP_CONF_IPV6
+00832   /* Check validity of the IP header. */
+00833   if((BUF->vtc & 0xf0) != 0x60)  { /* IP version and header length. */
+00834     UIP_STAT(++uip_stat.ip.drop);
+00835     UIP_STAT(++uip_stat.ip.vhlerr);
+00836     UIP_LOG("ipv6: invalid version.");
+00837     goto drop;
+00838   }
+00839 #else /* UIP_CONF_IPV6 */
+00840   /* Check validity of the IP header. */
+00841   if(BUF->vhl != 0x45)  { /* IP version and header length. */
+00842     UIP_STAT(++uip_stat.ip.drop);
+00843     UIP_STAT(++uip_stat.ip.vhlerr);
+00844     UIP_LOG("ip: invalid version or header length.");
+00845     goto drop;
+00846   }
+00847 #endif /* UIP_CONF_IPV6 */
+00848   
+00849   /* Check the size of the packet. If the size reported to us in
+00850      uip_len is smaller the size reported in the IP header, we assume
+00851      that the packet has been corrupted in transit. If the size of
+00852      uip_len is larger than the size reported in the IP packet header,
+00853      the packet has been padded and we set uip_len to the correct
+00854      value.. */
+00855 
+00856   if((BUF->len[0] << 8) + BUF->len[1] <= uip_len) {
+00857     uip_len = (BUF->len[0] << 8) + BUF->len[1];
+00858 #if UIP_CONF_IPV6
+00859     uip_len += 40; /* The length reported in the IPv6 header is the
+00860                       length of the payload that follows the
+00861                       header. However, uIP uses the uip_len variable
+00862                       for holding the size of the entire packet,
+00863                       including the IP header. For IPv4 this is not a
+00864                       problem as the length field in the IPv4 header
+00865                       contains the length of the entire packet. But
+00866                       for IPv6 we need to add the size of the IPv6
+00867                       header (40 bytes). */
+00868 #endif /* UIP_CONF_IPV6 */
+00869   } else {
+00870     UIP_LOG("ip: packet shorter than reported in IP header.");
+00871     goto drop;
+00872   }
+00873 
+00874 #if !UIP_CONF_IPV6
+00875   /* Check the fragment flag. */
+00876   if((BUF->ipoffset[0] & 0x3f) != 0 ||
+00877      BUF->ipoffset[1] != 0) {
+00878 #if UIP_REASSEMBLY
+00879     uip_len = uip_reass();
+00880     if(uip_len == 0) {
+00881       goto drop;
+00882     }
+00883 #else /* UIP_REASSEMBLY */
+00884     UIP_STAT(++uip_stat.ip.drop);
+00885     UIP_STAT(++uip_stat.ip.fragerr);
+00886     UIP_LOG("ip: fragment dropped.");
+00887     goto drop;
+00888 #endif /* UIP_REASSEMBLY */
+00889   }
+00890 #endif /* UIP_CONF_IPV6 */
+00891 
+00892   if(uip_ipaddr_cmp(uip_hostaddr, all_zeroes_addr)) {
+00893     /* If we are configured to use ping IP address configuration and
+00894        hasn't been assigned an IP address yet, we accept all ICMP
+00895        packets. */
+00896 #if UIP_PINGADDRCONF && !UIP_CONF_IPV6
+00897     if(BUF->proto == UIP_PROTO_ICMP) {
+00898       UIP_LOG("ip: possible ping config packet received.");
+00899       goto icmp_input;
+00900     } else {
+00901       UIP_LOG("ip: packet dropped since no address assigned.");
+00902       goto drop;
+00903     }
+00904 #endif /* UIP_PINGADDRCONF */
+00905 
+00906   } else {
+00907     /* If IP broadcast support is configured, we check for a broadcast
+00908        UDP packet, which may be destined to us. */
+00909 #if UIP_BROADCAST
+00910     DEBUG_PRINTF("UDP IP checksum 0x%04x\n", uip_ipchksum());
+00911     if(BUF->proto == UIP_PROTO_UDP &&
+00912        uip_ipaddr_cmp(BUF->destipaddr, all_ones_addr)
+00913        /*&&
+00914          uip_ipchksum() == 0xffff*/) {
+00915       goto udp_input;
+00916     }
+00917 #endif /* UIP_BROADCAST */
+00918     
+00919     /* Check if the packet is destined for our IP address. */
+00920 #if !UIP_CONF_IPV6
+00921     if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr)) {
+00922       UIP_STAT(++uip_stat.ip.drop);
+00923       goto drop;
+00924     }
+00925 #else /* UIP_CONF_IPV6 */
+00926     /* For IPv6, packet reception is a little trickier as we need to
+00927        make sure that we listen to certain multicast addresses (all
+00928        hosts multicast address, and the solicited-node multicast
+00929        address) as well. However, we will cheat here and accept all
+00930        multicast packets that are sent to the ff02::/16 addresses. */
+00931     if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr) &&
+00932        BUF->destipaddr[0] != HTONS(0xff02)) {
+00933       UIP_STAT(++uip_stat.ip.drop);
+00934       goto drop;
+00935     }
+00936 #endif /* UIP_CONF_IPV6 */
+00937   }
+00938 
+00939 #if !UIP_CONF_IPV6
+00940   if(uip_ipchksum() != 0xffff) { /* Compute and check the IP header
+00941                                     checksum. */
+00942     UIP_STAT(++uip_stat.ip.drop);
+00943     UIP_STAT(++uip_stat.ip.chkerr);
+00944     UIP_LOG("ip: bad checksum.");
+00945     goto drop;
+00946   }
+00947 #endif /* UIP_CONF_IPV6 */
+00948 
+00949   if(BUF->proto == UIP_PROTO_TCP) { /* Check for TCP packet. If so,
+00950                                        proceed with TCP input
+00951                                        processing. */
+00952     goto tcp_input;
+00953   }
+00954 
+00955 #if UIP_UDP
+00956   if(BUF->proto == UIP_PROTO_UDP) {
+00957     goto udp_input;
+00958   }
+00959 #endif /* UIP_UDP */
+00960 
+00961 #if !UIP_CONF_IPV6
+00962   /* ICMPv4 processing code follows. */
+00963   if(BUF->proto != UIP_PROTO_ICMP) { /* We only allow ICMP packets from
+00964                                         here. */
+00965     UIP_STAT(++uip_stat.ip.drop);
+00966     UIP_STAT(++uip_stat.ip.protoerr);
+00967     UIP_LOG("ip: neither tcp nor icmp.");
+00968     goto drop;
+00969   }
+00970 
+00971 #if UIP_PINGADDRCONF
+00972  icmp_input:
+00973 #endif /* UIP_PINGADDRCONF */
+00974   UIP_STAT(++uip_stat.icmp.recv);
+00975 
+00976   /* ICMP echo (i.e., ping) processing. This is simple, we only change
+00977      the ICMP type from ECHO to ECHO_REPLY and adjust the ICMP
+00978      checksum before we return the packet. */
+00979   if(ICMPBUF->type != ICMP_ECHO) {
+00980     UIP_STAT(++uip_stat.icmp.drop);
+00981     UIP_STAT(++uip_stat.icmp.typeerr);
+00982     UIP_LOG("icmp: not icmp echo.");
+00983     goto drop;
+00984   }
+00985 
+00986   /* If we are configured to use ping IP address assignment, we use
+00987      the destination IP address of this ping packet and assign it to
+00988      ourself. */
+00989 #if UIP_PINGADDRCONF
+00990   if((uip_hostaddr[0] | uip_hostaddr[1]) == 0) {
+00991     uip_hostaddr[0] = BUF->destipaddr[0];
+00992     uip_hostaddr[1] = BUF->destipaddr[1];
+00993   }
+00994 #endif /* UIP_PINGADDRCONF */
+00995 
+00996   ICMPBUF->type = ICMP_ECHO_REPLY;
+00997 
+00998   if(ICMPBUF->icmpchksum >= HTONS(0xffff - (ICMP_ECHO << 8))) {
+00999     ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8) + 1;
+01000   } else {
+01001     ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8);
+01002   }
+01003 
+01004   /* Swap IP addresses. */
+01005   uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr);
+01006   uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+01007 
+01008   UIP_STAT(++uip_stat.icmp.sent);
+01009   goto send;
+01010 
+01011   /* End of IPv4 input header processing code. */
+01012 #else /* !UIP_CONF_IPV6 */
+01013 
+01014   /* This is IPv6 ICMPv6 processing code. */
+01015   DEBUG_PRINTF("icmp6_input: length %d\n", uip_len);
+01016 
+01017   if(BUF->proto != UIP_PROTO_ICMP6) { /* We only allow ICMPv6 packets from
+01018                                          here. */
+01019     UIP_STAT(++uip_stat.ip.drop);
+01020     UIP_STAT(++uip_stat.ip.protoerr);
+01021     UIP_LOG("ip: neither tcp nor icmp6.");
+01022     goto drop;
+01023   }
+01024 
+01025   UIP_STAT(++uip_stat.icmp.recv);
+01026 
+01027   /* If we get a neighbor solicitation for our address we should send
+01028      a neighbor advertisement message back. */
+01029   if(ICMPBUF->type == ICMP6_NEIGHBOR_SOLICITATION) {
+01030     if(uip_ipaddr_cmp(ICMPBUF->icmp6data, uip_hostaddr)) {
+01031 
+01032       if(ICMPBUF->options[0] == ICMP6_OPTION_SOURCE_LINK_ADDRESS) {
+01033         /* Save the sender's address in our neighbor list. */
+01034         uip_neighbor_add(ICMPBUF->srcipaddr, &(ICMPBUF->options[2]));
+01035       }
+01036       
+01037       /* We should now send a neighbor advertisement back to where the
+01038          neighbor solicication came from. */
+01039       ICMPBUF->type = ICMP6_NEIGHBOR_ADVERTISEMENT;
+01040       ICMPBUF->flags = ICMP6_FLAG_S; /* Solicited flag. */
+01041       
+01042       ICMPBUF->reserved1 = ICMPBUF->reserved2 = ICMPBUF->reserved3 = 0;
+01043       
+01044       uip_ipaddr_copy(ICMPBUF->destipaddr, ICMPBUF->srcipaddr);
+01045       uip_ipaddr_copy(ICMPBUF->srcipaddr, uip_hostaddr);
+01046       ICMPBUF->options[0] = ICMP6_OPTION_TARGET_LINK_ADDRESS;
+01047       ICMPBUF->options[1] = 1;  /* Options length, 1 = 8 bytes. */
+01048       memcpy(&(ICMPBUF->options[2]), &uip_ethaddr, sizeof(uip_ethaddr));
+01049       ICMPBUF->icmpchksum = 0;
+01050       ICMPBUF->icmpchksum = ~uip_icmp6chksum();
+01051       goto send;
+01052       
+01053     }
+01054     goto drop;
+01055   } else if(ICMPBUF->type == ICMP6_ECHO) {
+01056     /* ICMP echo (i.e., ping) processing. This is simple, we only
+01057        change the ICMP type from ECHO to ECHO_REPLY and update the
+01058        ICMP checksum before we return the packet. */
+01059 
+01060     ICMPBUF->type = ICMP6_ECHO_REPLY;
+01061     
+01062     uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr);
+01063     uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+01064     ICMPBUF->icmpchksum = 0;
+01065     ICMPBUF->icmpchksum = ~uip_icmp6chksum();
+01066     
+01067     UIP_STAT(++uip_stat.icmp.sent);
+01068     goto send;
+01069   } else {
+01070     DEBUG_PRINTF("Unknown icmp6 message type %d\n", ICMPBUF->type);
+01071     UIP_STAT(++uip_stat.icmp.drop);
+01072     UIP_STAT(++uip_stat.icmp.typeerr);
+01073     UIP_LOG("icmp: unknown ICMP message.");
+01074     goto drop;
+01075   }
+01076 
+01077   /* End of IPv6 ICMP processing. */
+01078   
+01079 #endif /* !UIP_CONF_IPV6 */
+01080 
+01081 #if UIP_UDP
+01082   /* UDP input processing. */
+01083  udp_input:
+01084   /* UDP processing is really just a hack. We don't do anything to the
+01085      UDP/IP headers, but let the UDP application do all the hard
+01086      work. If the application sets uip_slen, it has a packet to
+01087      send. */
+01088 #if UIP_UDP_CHECKSUMS
+01089   uip_len = uip_len - UIP_IPUDPH_LEN;
+01090   uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN];
+01091   if(UDPBUF->udpchksum != 0 && uip_udpchksum() != 0xffff) {
+01092     UIP_STAT(++uip_stat.udp.drop);
+01093     UIP_STAT(++uip_stat.udp.chkerr);
+01094     UIP_LOG("udp: bad checksum.");
+01095     goto drop;
+01096   }
+01097 #else /* UIP_UDP_CHECKSUMS */
+01098   uip_len = uip_len - UIP_IPUDPH_LEN;
+01099 #endif /* UIP_UDP_CHECKSUMS */
+01100 
+01101   /* Demultiplex this UDP packet between the UDP "connections". */
+01102   for(uip_udp_conn = &uip_udp_conns[0];
+01103       uip_udp_conn < &uip_udp_conns[UIP_UDP_CONNS];
+01104       ++uip_udp_conn) {
+01105     /* If the local UDP port is non-zero, the connection is considered
+01106        to be used. If so, the local port number is checked against the
+01107        destination port number in the received packet. If the two port
+01108        numbers match, the remote port number is checked if the
+01109        connection is bound to a remote port. Finally, if the
+01110        connection is bound to a remote IP address, the source IP
+01111        address of the packet is checked. */
+01112     if(uip_udp_conn->lport != 0 &&
+01113        UDPBUF->destport == uip_udp_conn->lport &&
+01114        (uip_udp_conn->rport == 0 ||
+01115         UDPBUF->srcport == uip_udp_conn->rport) &&
+01116        (uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_zeroes_addr) ||
+01117         uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_ones_addr) ||
+01118         uip_ipaddr_cmp(BUF->srcipaddr, uip_udp_conn->ripaddr))) {
+01119       goto udp_found;
+01120     }
+01121   }
+01122   UIP_LOG("udp: no matching connection found");
+01123   goto drop;
+01124   
+01125  udp_found:
+01126   uip_conn = NULL;
+01127   uip_flags = UIP_NEWDATA;
+01128   uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN];
+01129   uip_slen = 0;
+01130   UIP_UDP_APPCALL();
+01131  udp_send:
+01132   if(uip_slen == 0) {
+01133     goto drop;
+01134   }
+01135   uip_len = uip_slen + UIP_IPUDPH_LEN;
+01136 
+01137 #if UIP_CONF_IPV6
+01138   /* For IPv6, the IP length field does not include the IPv6 IP header
+01139      length. */
+01140   BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8);
+01141   BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff);
+01142 #else /* UIP_CONF_IPV6 */
+01143   BUF->len[0] = (uip_len >> 8);
+01144   BUF->len[1] = (uip_len & 0xff);
+01145 #endif /* UIP_CONF_IPV6 */
+01146 
+01147   BUF->ttl = uip_udp_conn->ttl;
+01148   BUF->proto = UIP_PROTO_UDP;
+01149 
+01150   UDPBUF->udplen = HTONS(uip_slen + UIP_UDPH_LEN);
+01151   UDPBUF->udpchksum = 0;
+01152 
+01153   BUF->srcport  = uip_udp_conn->lport;
+01154   BUF->destport = uip_udp_conn->rport;
+01155 
+01156   uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+01157   uip_ipaddr_copy(BUF->destipaddr, uip_udp_conn->ripaddr);
+01158    
+01159   uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPTCPH_LEN];
+01160 
+01161 #if UIP_UDP_CHECKSUMS
+01162   /* Calculate UDP checksum. */
+01163   UDPBUF->udpchksum = ~(uip_udpchksum());
+01164   if(UDPBUF->udpchksum == 0) {
+01165     UDPBUF->udpchksum = 0xffff;
+01166   }
+01167 #endif /* UIP_UDP_CHECKSUMS */
+01168   
+01169   goto ip_send_nolen;
+01170 #endif /* UIP_UDP */
+01171   
+01172   /* TCP input processing. */
+01173  tcp_input:
+01174   UIP_STAT(++uip_stat.tcp.recv);
+01175 
+01176   /* Start of TCP input header processing code. */
+01177   
+01178   if(uip_tcpchksum() != 0xffff) {   /* Compute and check the TCP
+01179                                        checksum. */
+01180     UIP_STAT(++uip_stat.tcp.drop);
+01181     UIP_STAT(++uip_stat.tcp.chkerr);
+01182     UIP_LOG("tcp: bad checksum.");
+01183     goto drop;
+01184   }
+01185   
+01186   
+01187   /* Demultiplex this segment. */
+01188   /* First check any active connections. */
+01189   for(uip_connr = &uip_conns[0]; uip_connr <= &uip_conns[UIP_CONNS - 1];
+01190       ++uip_connr) {
+01191     if(uip_connr->tcpstateflags != UIP_CLOSED &&
+01192        BUF->destport == uip_connr->lport &&
+01193        BUF->srcport == uip_connr->rport &&
+01194        uip_ipaddr_cmp(BUF->srcipaddr, uip_connr->ripaddr)) {
+01195       goto found;
+01196     }
+01197   }
+01198 
+01199   /* If we didn't find and active connection that expected the packet,
+01200      either this packet is an old duplicate, or this is a SYN packet
+01201      destined for a connection in LISTEN. If the SYN flag isn't set,
+01202      it is an old packet and we send a RST. */
+01203   if((BUF->flags & TCP_CTL) != TCP_SYN) {
+01204     goto reset;
+01205   }
+01206   
+01207   tmp16 = BUF->destport;
+01208   /* Next, check listening connections. */
+01209   for(c = 0; c < UIP_LISTENPORTS; ++c) {
+01210     if(tmp16 == uip_listenports[c])
+01211       goto found_listen;
+01212   }
+01213   
+01214   /* No matching connection found, so we send a RST packet. */
+01215   UIP_STAT(++uip_stat.tcp.synrst);
+01216  reset:
+01217 
+01218   /* We do not send resets in response to resets. */
+01219   if(BUF->flags & TCP_RST) {
+01220     goto drop;
+01221   }
+01222 
+01223   UIP_STAT(++uip_stat.tcp.rst);
+01224   
+01225   BUF->flags = TCP_RST | TCP_ACK;
+01226   uip_len = UIP_IPTCPH_LEN;
+01227   BUF->tcpoffset = 5 << 4;
+01228 
+01229   /* Flip the seqno and ackno fields in the TCP header. */
+01230   c = BUF->seqno[3];
+01231   BUF->seqno[3] = BUF->ackno[3];
+01232   BUF->ackno[3] = c;
+01233   
+01234   c = BUF->seqno[2];
+01235   BUF->seqno[2] = BUF->ackno[2];
+01236   BUF->ackno[2] = c;
+01237   
+01238   c = BUF->seqno[1];
+01239   BUF->seqno[1] = BUF->ackno[1];
+01240   BUF->ackno[1] = c;
+01241   
+01242   c = BUF->seqno[0];
+01243   BUF->seqno[0] = BUF->ackno[0];
+01244   BUF->ackno[0] = c;
+01245 
+01246   /* We also have to increase the sequence number we are
+01247      acknowledging. If the least significant byte overflowed, we need
+01248      to propagate the carry to the other bytes as well. */
+01249   if(++BUF->ackno[3] == 0) {
+01250     if(++BUF->ackno[2] == 0) {
+01251       if(++BUF->ackno[1] == 0) {
+01252         ++BUF->ackno[0];
+01253       }
+01254     }
+01255   }
+01256  
+01257   /* Swap port numbers. */
+01258   tmp16 = BUF->srcport;
+01259   BUF->srcport = BUF->destport;
+01260   BUF->destport = tmp16;
+01261   
+01262   /* Swap IP addresses. */
+01263   uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr);
+01264   uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+01265   
+01266   /* And send out the RST packet! */
+01267   goto tcp_send_noconn;
+01268 
+01269   /* This label will be jumped to if we matched the incoming packet
+01270      with a connection in LISTEN. In that case, we should create a new
+01271      connection and send a SYNACK in return. */
+01272  found_listen:
+01273   /* First we check if there are any connections avaliable. Unused
+01274      connections are kept in the same table as used connections, but
+01275      unused ones have the tcpstate set to CLOSED. Also, connections in
+01276      TIME_WAIT are kept track of and we'll use the oldest one if no
+01277      CLOSED connections are found. Thanks to Eddie C. Dost for a very
+01278      nice algorithm for the TIME_WAIT search. */
+01279   uip_connr = 0;
+01280   for(c = 0; c < UIP_CONNS; ++c) {
+01281     if(uip_conns[c].tcpstateflags == UIP_CLOSED) {
+01282       uip_connr = &uip_conns[c];
+01283       break;
+01284     }
+01285     if(uip_conns[c].tcpstateflags == UIP_TIME_WAIT) {
+01286       if(uip_connr == 0 ||
+01287          uip_conns[c].timer > uip_connr->timer) {
+01288         uip_connr = &uip_conns[c];
+01289       }
+01290     }
+01291   }
+01292 
+01293   if(uip_connr == 0) {
+01294     /* All connections are used already, we drop packet and hope that
+01295        the remote end will retransmit the packet at a time when we
+01296        have more spare connections. */
+01297     UIP_STAT(++uip_stat.tcp.syndrop);
+01298     UIP_LOG("tcp: found no unused connections.");
+01299     goto drop;
+01300   }
+01301   uip_conn = uip_connr;
+01302   
+01303   /* Fill in the necessary fields for the new connection. */
+01304   uip_connr->rto = uip_connr->timer = UIP_RTO;
+01305   uip_connr->sa = 0;
+01306   uip_connr->sv = 4;
+01307   uip_connr->nrtx = 0;
+01308   uip_connr->lport = BUF->destport;
+01309   uip_connr->rport = BUF->srcport;
+01310   uip_ipaddr_copy(uip_connr->ripaddr, BUF->srcipaddr);
+01311   uip_connr->tcpstateflags = UIP_SYN_RCVD;
+01312 
+01313   uip_connr->snd_nxt[0] = iss[0];
+01314   uip_connr->snd_nxt[1] = iss[1];
+01315   uip_connr->snd_nxt[2] = iss[2];
+01316   uip_connr->snd_nxt[3] = iss[3];
+01317   uip_connr->len = 1;
+01318 
+01319   /* rcv_nxt should be the seqno from the incoming packet + 1. */
+01320   uip_connr->rcv_nxt[3] = BUF->seqno[3];
+01321   uip_connr->rcv_nxt[2] = BUF->seqno[2];
+01322   uip_connr->rcv_nxt[1] = BUF->seqno[1];
+01323   uip_connr->rcv_nxt[0] = BUF->seqno[0];
+01324   uip_add_rcv_nxt(1);
+01325 
+01326   /* Parse the TCP MSS option, if present. */
+01327   if((BUF->tcpoffset & 0xf0) > 0x50) {
+01328     for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) {
+01329       opt = uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + c];
+01330       if(opt == TCP_OPT_END) {
+01331         /* End of options. */
+01332         break;
+01333       } else if(opt == TCP_OPT_NOOP) {
+01334         ++c;
+01335         /* NOP option. */
+01336       } else if(opt == TCP_OPT_MSS &&
+01337                 uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) {
+01338         /* An MSS option with the right option length. */
+01339         tmp16 = ((u16_t)uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) |
+01340           (u16_t)uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + 3 + c];
+01341         uip_connr->initialmss = uip_connr->mss =
+01342           tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16;
+01343         
+01344         /* And we are done processing options. */
+01345         break;
+01346       } else {
+01347         /* All other options have a length field, so that we easily
+01348            can skip past them. */
+01349         if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) {
+01350           /* If the length field is zero, the options are malformed
+01351              and we don't process them further. */
+01352           break;
+01353         }
+01354         c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c];
+01355       }
+01356     }
+01357   }
+01358   
+01359   /* Our response will be a SYNACK. */
+01360 #if UIP_ACTIVE_OPEN
+01361  tcp_send_synack:
+01362   BUF->flags = TCP_ACK;
+01363   
+01364  tcp_send_syn:
+01365   BUF->flags |= TCP_SYN;
+01366 #else /* UIP_ACTIVE_OPEN */
+01367  tcp_send_synack:
+01368   BUF->flags = TCP_SYN | TCP_ACK;
+01369 #endif /* UIP_ACTIVE_OPEN */
+01370   
+01371   /* We send out the TCP Maximum Segment Size option with our
+01372      SYNACK. */
+01373   BUF->optdata[0] = TCP_OPT_MSS;
+01374   BUF->optdata[1] = TCP_OPT_MSS_LEN;
+01375   BUF->optdata[2] = (UIP_TCP_MSS) / 256;
+01376   BUF->optdata[3] = (UIP_TCP_MSS) & 255;
+01377   uip_len = UIP_IPTCPH_LEN + TCP_OPT_MSS_LEN;
+01378   BUF->tcpoffset = ((UIP_TCPH_LEN + TCP_OPT_MSS_LEN) / 4) << 4;
+01379   goto tcp_send;
+01380 
+01381   /* This label will be jumped to if we found an active connection. */
+01382  found:
+01383   uip_conn = uip_connr;
+01384   uip_flags = 0;
+01385   /* We do a very naive form of TCP reset processing; we just accept
+01386      any RST and kill our connection. We should in fact check if the
+01387      sequence number of this reset is wihtin our advertised window
+01388      before we accept the reset. */
+01389   if(BUF->flags & TCP_RST) {
+01390     uip_connr->tcpstateflags = UIP_CLOSED;
+01391     UIP_LOG("tcp: got reset, aborting connection.");
+01392     uip_flags = UIP_ABORT;
+01393     UIP_APPCALL();
+01394     goto drop;
+01395   }
+01396   /* Calculated the length of the data, if the application has sent
+01397      any data to us. */
+01398   c = (BUF->tcpoffset >> 4) << 2;
+01399   /* uip_len will contain the length of the actual TCP data. This is
+01400      calculated by subtracing the length of the TCP header (in
+01401      c) and the length of the IP header (20 bytes). */
+01402   uip_len = uip_len - c - UIP_IPH_LEN;
+01403 
+01404   /* First, check if the sequence number of the incoming packet is
+01405      what we're expecting next. If not, we send out an ACK with the
+01406      correct numbers in. */
+01407   if(!(((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_SYN_SENT) &&
+01408        ((BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)))) {
+01409     if((uip_len > 0 || ((BUF->flags & (TCP_SYN | TCP_FIN)) != 0)) &&
+01410        (BUF->seqno[0] != uip_connr->rcv_nxt[0] ||
+01411         BUF->seqno[1] != uip_connr->rcv_nxt[1] ||
+01412         BUF->seqno[2] != uip_connr->rcv_nxt[2] ||
+01413         BUF->seqno[3] != uip_connr->rcv_nxt[3])) {
+01414       goto tcp_send_ack;
+01415     }
+01416   }
+01417 
+01418   /* Next, check if the incoming segment acknowledges any outstanding
+01419      data. If so, we update the sequence number, reset the length of
+01420      the outstanding data, calculate RTT estimations, and reset the
+01421      retransmission timer. */
+01422   if((BUF->flags & TCP_ACK) && uip_outstanding(uip_connr)) {
+01423     uip_add32(uip_connr->snd_nxt, uip_connr->len);
+01424 
+01425     if(BUF->ackno[0] == uip_acc32[0] &&
+01426        BUF->ackno[1] == uip_acc32[1] &&
+01427        BUF->ackno[2] == uip_acc32[2] &&
+01428        BUF->ackno[3] == uip_acc32[3]) {
+01429       /* Update sequence number. */
+01430       uip_connr->snd_nxt[0] = uip_acc32[0];
+01431       uip_connr->snd_nxt[1] = uip_acc32[1];
+01432       uip_connr->snd_nxt[2] = uip_acc32[2];
+01433       uip_connr->snd_nxt[3] = uip_acc32[3];
+01434         
+01435 
+01436       /* Do RTT estimation, unless we have done retransmissions. */
+01437       if(uip_connr->nrtx == 0) {
+01438         signed char m;
+01439         m = uip_connr->rto - uip_connr->timer;
+01440         /* This is taken directly from VJs original code in his paper */
+01441         m = m - (uip_connr->sa >> 3);
+01442         uip_connr->sa += m;
+01443         if(m < 0) {
+01444           m = -m;
+01445         }
+01446         m = m - (uip_connr->sv >> 2);
+01447         uip_connr->sv += m;
+01448         uip_connr->rto = (uip_connr->sa >> 3) + uip_connr->sv;
+01449 
+01450       }
+01451       /* Set the acknowledged flag. */
+01452       uip_flags = UIP_ACKDATA;
+01453       /* Reset the retransmission timer. */
+01454       uip_connr->timer = uip_connr->rto;
+01455 
+01456       /* Reset length of outstanding data. */
+01457       uip_connr->len = 0;
+01458     }
+01459     
+01460   }
+01461 
+01462   /* Do different things depending on in what state the connection is. */
+01463   switch(uip_connr->tcpstateflags & UIP_TS_MASK) {
+01464     /* CLOSED and LISTEN are not handled here. CLOSE_WAIT is not
+01465         implemented, since we force the application to close when the
+01466         peer sends a FIN (hence the application goes directly from
+01467         ESTABLISHED to LAST_ACK). */
+01468   case UIP_SYN_RCVD:
+01469     /* In SYN_RCVD we have sent out a SYNACK in response to a SYN, and
+01470        we are waiting for an ACK that acknowledges the data we sent
+01471        out the last time. Therefore, we want to have the UIP_ACKDATA
+01472        flag set. If so, we enter the ESTABLISHED state. */
+01473     if(uip_flags & UIP_ACKDATA) {
+01474       uip_connr->tcpstateflags = UIP_ESTABLISHED;
+01475       uip_flags = UIP_CONNECTED;
+01476       uip_connr->len = 0;
+01477       if(uip_len > 0) {
+01478         uip_flags |= UIP_NEWDATA;
+01479         uip_add_rcv_nxt(uip_len);
+01480       }
+01481       uip_slen = 0;
+01482       UIP_APPCALL();
+01483       goto appsend;
+01484     }
+01485     goto drop;
+01486 #if UIP_ACTIVE_OPEN
+01487   case UIP_SYN_SENT:
+01488     /* In SYN_SENT, we wait for a SYNACK that is sent in response to
+01489        our SYN. The rcv_nxt is set to sequence number in the SYNACK
+01490        plus one, and we send an ACK. We move into the ESTABLISHED
+01491        state. */
+01492     if((uip_flags & UIP_ACKDATA) &&
+01493        (BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)) {
+01494 
+01495       /* Parse the TCP MSS option, if present. */
+01496       if((BUF->tcpoffset & 0xf0) > 0x50) {
+01497         for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) {
+01498           opt = uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + c];
+01499           if(opt == TCP_OPT_END) {
+01500             /* End of options. */
+01501             break;
+01502           } else if(opt == TCP_OPT_NOOP) {
+01503             ++c;
+01504             /* NOP option. */
+01505           } else if(opt == TCP_OPT_MSS &&
+01506                     uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) {
+01507             /* An MSS option with the right option length. */
+01508             tmp16 = (uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) |
+01509               uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 3 + c];
+01510             uip_connr->initialmss =
+01511               uip_connr->mss = tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16;
+01512 
+01513             /* And we are done processing options. */
+01514             break;
+01515           } else {
+01516             /* All other options have a length field, so that we easily
+01517                can skip past them. */
+01518             if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) {
+01519               /* If the length field is zero, the options are malformed
+01520                  and we don't process them further. */
+01521               break;
+01522             }
+01523             c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c];
+01524           }
+01525         }
+01526       }
+01527       uip_connr->tcpstateflags = UIP_ESTABLISHED;
+01528       uip_connr->rcv_nxt[0] = BUF->seqno[0];
+01529       uip_connr->rcv_nxt[1] = BUF->seqno[1];
+01530       uip_connr->rcv_nxt[2] = BUF->seqno[2];
+01531       uip_connr->rcv_nxt[3] = BUF->seqno[3];
+01532       uip_add_rcv_nxt(1);
+01533       uip_flags = UIP_CONNECTED | UIP_NEWDATA;
+01534       uip_connr->len = 0;
+01535       uip_len = 0;
+01536       uip_slen = 0;
+01537       UIP_APPCALL();
+01538       goto appsend;
+01539     }
+01540     /* Inform the application that the connection failed */
+01541     uip_flags = UIP_ABORT;
+01542     UIP_APPCALL();
+01543     /* The connection is closed after we send the RST */
+01544     uip_conn->tcpstateflags = UIP_CLOSED;
+01545     goto reset;
+01546 #endif /* UIP_ACTIVE_OPEN */
+01547     
+01548   case UIP_ESTABLISHED:
+01549     /* In the ESTABLISHED state, we call upon the application to feed
+01550     data into the uip_buf. If the UIP_ACKDATA flag is set, the
+01551     application should put new data into the buffer, otherwise we are
+01552     retransmitting an old segment, and the application should put that
+01553     data into the buffer.
+01554 
+01555     If the incoming packet is a FIN, we should close the connection on
+01556     this side as well, and we send out a FIN and enter the LAST_ACK
+01557     state. We require that there is no outstanding data; otherwise the
+01558     sequence numbers will be screwed up. */
+01559 
+01560     if(BUF->flags & TCP_FIN && !(uip_connr->tcpstateflags & UIP_STOPPED)) {
+01561       if(uip_outstanding(uip_connr)) {
+01562         goto drop;
+01563       }
+01564       uip_add_rcv_nxt(1 + uip_len);
+01565       uip_flags |= UIP_CLOSE;
+01566       if(uip_len > 0) {
+01567         uip_flags |= UIP_NEWDATA;
+01568       }
+01569       UIP_APPCALL();
+01570       uip_connr->len = 1;
+01571       uip_connr->tcpstateflags = UIP_LAST_ACK;
+01572       uip_connr->nrtx = 0;
+01573     tcp_send_finack:
+01574       BUF->flags = TCP_FIN | TCP_ACK;
+01575       goto tcp_send_nodata;
+01576     }
+01577 
+01578     /* Check the URG flag. If this is set, the segment carries urgent
+01579        data that we must pass to the application. */
+01580     if((BUF->flags & TCP_URG) != 0) {
+01581 #if UIP_URGDATA > 0
+01582       uip_urglen = (BUF->urgp[0] << 8) | BUF->urgp[1];
+01583       if(uip_urglen > uip_len) {
+01584         /* There is more urgent data in the next segment to come. */
+01585         uip_urglen = uip_len;
+01586       }
+01587       uip_add_rcv_nxt(uip_urglen);
+01588       uip_len -= uip_urglen;
+01589       uip_urgdata = uip_appdata;
+01590       uip_appdata += uip_urglen;
+01591     } else {
+01592       uip_urglen = 0;
+01593 #else /* UIP_URGDATA > 0 */
+01594       uip_appdata = ((char *)uip_appdata) + ((BUF->urgp[0] << 8) | BUF->urgp[1]);
+01595       uip_len -= (BUF->urgp[0] << 8) | BUF->urgp[1];
+01596 #endif /* UIP_URGDATA > 0 */
+01597     }
+01598 
+01599     /* If uip_len > 0 we have TCP data in the packet, and we flag this
+01600        by setting the UIP_NEWDATA flag and update the sequence number
+01601        we acknowledge. If the application has stopped the dataflow
+01602        using uip_stop(), we must not accept any data packets from the
+01603        remote host. */
+01604     if(uip_len > 0 && !(uip_connr->tcpstateflags & UIP_STOPPED)) {
+01605       uip_flags |= UIP_NEWDATA;
+01606       uip_add_rcv_nxt(uip_len);
+01607     }
+01608 
+01609     /* Check if the available buffer space advertised by the other end
+01610        is smaller than the initial MSS for this connection. If so, we
+01611        set the current MSS to the window size to ensure that the
+01612        application does not send more data than the other end can
+01613        handle.
+01614 
+01615        If the remote host advertises a zero window, we set the MSS to
+01616        the initial MSS so that the application will send an entire MSS
+01617        of data. This data will not be acknowledged by the receiver,
+01618        and the application will retransmit it. This is called the
+01619        "persistent timer" and uses the retransmission mechanim.
+01620     */
+01621     tmp16 = ((u16_t)BUF->wnd[0] << 8) + (u16_t)BUF->wnd[1];
+01622     if(tmp16 > uip_connr->initialmss ||
+01623        tmp16 == 0) {
+01624       tmp16 = uip_connr->initialmss;
+01625     }
+01626     uip_connr->mss = tmp16;
+01627 
+01628     /* If this packet constitutes an ACK for outstanding data (flagged
+01629        by the UIP_ACKDATA flag, we should call the application since it
+01630        might want to send more data. If the incoming packet had data
+01631        from the peer (as flagged by the UIP_NEWDATA flag), the
+01632        application must also be notified.
+01633 
+01634        When the application is called, the global variable uip_len
+01635        contains the length of the incoming data. The application can
+01636        access the incoming data through the global pointer
+01637        uip_appdata, which usually points UIP_IPTCPH_LEN + UIP_LLH_LEN
+01638        bytes into the uip_buf array.
+01639 
+01640        If the application wishes to send any data, this data should be
+01641        put into the uip_appdata and the length of the data should be
+01642        put into uip_len. If the application don't have any data to
+01643        send, uip_len must be set to 0. */
+01644     if(uip_flags & (UIP_NEWDATA | UIP_ACKDATA)) {
+01645       uip_slen = 0;
+01646       UIP_APPCALL();
+01647 
+01648     appsend:
+01649       
+01650       if(uip_flags & UIP_ABORT) {
+01651         uip_slen = 0;
+01652         uip_connr->tcpstateflags = UIP_CLOSED;
+01653         BUF->flags = TCP_RST | TCP_ACK;
+01654         goto tcp_send_nodata;
+01655       }
+01656 
+01657       if(uip_flags & UIP_CLOSE) {
+01658         uip_slen = 0;
+01659         uip_connr->len = 1;
+01660         uip_connr->tcpstateflags = UIP_FIN_WAIT_1;
+01661         uip_connr->nrtx = 0;
+01662         BUF->flags = TCP_FIN | TCP_ACK;
+01663         goto tcp_send_nodata;
+01664       }
+01665 
+01666       /* If uip_slen > 0, the application has data to be sent. */
+01667       if(uip_slen > 0) {
+01668 
+01669         /* If the connection has acknowledged data, the contents of
+01670            the ->len variable should be discarded. */
+01671         if((uip_flags & UIP_ACKDATA) != 0) {
+01672           uip_connr->len = 0;
+01673         }
+01674 
+01675         /* If the ->len variable is non-zero the connection has
+01676            already data in transit and cannot send anymore right
+01677            now. */
+01678         if(uip_connr->len == 0) {
+01679 
+01680           /* The application cannot send more than what is allowed by
+01681              the mss (the minumum of the MSS and the available
+01682              window). */
+01683           if(uip_slen > uip_connr->mss) {
+01684             uip_slen = uip_connr->mss;
+01685           }
+01686 
+01687           /* Remember how much data we send out now so that we know
+01688              when everything has been acknowledged. */
+01689           uip_connr->len = uip_slen;
+01690         } else {
+01691 
+01692           /* If the application already had unacknowledged data, we
+01693              make sure that the application does not send (i.e.,
+01694              retransmit) out more than it previously sent out. */
+01695           uip_slen = uip_connr->len;
+01696         }
+01697       }
+01698       uip_connr->nrtx = 0;
+01699     apprexmit:
+01700       uip_appdata = uip_sappdata;
+01701       
+01702       /* If the application has data to be sent, or if the incoming
+01703          packet had new data in it, we must send out a packet. */
+01704       if(uip_slen > 0 && uip_connr->len > 0) {
+01705         /* Add the length of the IP and TCP headers. */
+01706         uip_len = uip_connr->len + UIP_TCPIP_HLEN;
+01707         /* We always set the ACK flag in response packets. */
+01708         BUF->flags = TCP_ACK | TCP_PSH;
+01709         /* Send the packet. */
+01710         goto tcp_send_noopts;
+01711       }
+01712       /* If there is no data to send, just send out a pure ACK if
+01713          there is newdata. */
+01714       if(uip_flags & UIP_NEWDATA) {
+01715         uip_len = UIP_TCPIP_HLEN;
+01716         BUF->flags = TCP_ACK;
+01717         goto tcp_send_noopts;
+01718       }
+01719     }
+01720     goto drop;
+01721   case UIP_LAST_ACK:
+01722     /* We can close this connection if the peer has acknowledged our
+01723        FIN. This is indicated by the UIP_ACKDATA flag. */
+01724     if(uip_flags & UIP_ACKDATA) {
+01725       uip_connr->tcpstateflags = UIP_CLOSED;
+01726       uip_flags = UIP_CLOSE;
+01727       UIP_APPCALL();
+01728     }
+01729     break;
+01730     
+01731   case UIP_FIN_WAIT_1:
+01732     /* The application has closed the connection, but the remote host
+01733        hasn't closed its end yet. Thus we do nothing but wait for a
+01734        FIN from the other side. */
+01735     if(uip_len > 0) {
+01736       uip_add_rcv_nxt(uip_len);
+01737     }
+01738     if(BUF->flags & TCP_FIN) {
+01739       if(uip_flags & UIP_ACKDATA) {
+01740         uip_connr->tcpstateflags = UIP_TIME_WAIT;
+01741         uip_connr->timer = 0;
+01742         uip_connr->len = 0;
+01743       } else {
+01744         uip_connr->tcpstateflags = UIP_CLOSING;
+01745       }
+01746       uip_add_rcv_nxt(1);
+01747       uip_flags = UIP_CLOSE;
+01748       UIP_APPCALL();
+01749       goto tcp_send_ack;
+01750     } else if(uip_flags & UIP_ACKDATA) {
+01751       uip_connr->tcpstateflags = UIP_FIN_WAIT_2;
+01752       uip_connr->len = 0;
+01753       goto drop;
+01754     }
+01755     if(uip_len > 0) {
+01756       goto tcp_send_ack;
+01757     }
+01758     goto drop;
+01759       
+01760   case UIP_FIN_WAIT_2:
+01761     if(uip_len > 0) {
+01762       uip_add_rcv_nxt(uip_len);
+01763     }
+01764     if(BUF->flags & TCP_FIN) {
+01765       uip_connr->tcpstateflags = UIP_TIME_WAIT;
+01766       uip_connr->timer = 0;
+01767       uip_add_rcv_nxt(1);
+01768       uip_flags = UIP_CLOSE;
+01769       UIP_APPCALL();
+01770       goto tcp_send_ack;
+01771     }
+01772     if(uip_len > 0) {
+01773       goto tcp_send_ack;
+01774     }
+01775     goto drop;
+01776 
+01777   case UIP_TIME_WAIT:
+01778     goto tcp_send_ack;
+01779     
+01780   case UIP_CLOSING:
+01781     if(uip_flags & UIP_ACKDATA) {
+01782       uip_connr->tcpstateflags = UIP_TIME_WAIT;
+01783       uip_connr->timer = 0;
+01784     }
+01785   }
+01786   goto drop;
+01787   
+01788 
+01789   /* We jump here when we are ready to send the packet, and just want
+01790      to set the appropriate TCP sequence numbers in the TCP header. */
+01791  tcp_send_ack:
+01792   BUF->flags = TCP_ACK;
+01793  tcp_send_nodata:
+01794   uip_len = UIP_IPTCPH_LEN;
+01795  tcp_send_noopts:
+01796   BUF->tcpoffset = (UIP_TCPH_LEN / 4) << 4;
+01797  tcp_send:
+01798   /* We're done with the input processing. We are now ready to send a
+01799      reply. Our job is to fill in all the fields of the TCP and IP
+01800      headers before calculating the checksum and finally send the
+01801      packet. */
+01802   BUF->ackno[0] = uip_connr->rcv_nxt[0];
+01803   BUF->ackno[1] = uip_connr->rcv_nxt[1];
+01804   BUF->ackno[2] = uip_connr->rcv_nxt[2];
+01805   BUF->ackno[3] = uip_connr->rcv_nxt[3];
+01806   
+01807   BUF->seqno[0] = uip_connr->snd_nxt[0];
+01808   BUF->seqno[1] = uip_connr->snd_nxt[1];
+01809   BUF->seqno[2] = uip_connr->snd_nxt[2];
+01810   BUF->seqno[3] = uip_connr->snd_nxt[3];
+01811 
+01812   BUF->proto = UIP_PROTO_TCP;
+01813   
+01814   BUF->srcport  = uip_connr->lport;
+01815   BUF->destport = uip_connr->rport;
+01816 
+01817   uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+01818   uip_ipaddr_copy(BUF->destipaddr, uip_connr->ripaddr);
+01819 
+01820   if(uip_connr->tcpstateflags & UIP_STOPPED) {
+01821     /* If the connection has issued uip_stop(), we advertise a zero
+01822        window so that the remote host will stop sending data. */
+01823     BUF->wnd[0] = BUF->wnd[1] = 0;
+01824   } else {
+01825     BUF->wnd[0] = ((UIP_RECEIVE_WINDOW) >> 8);
+01826     BUF->wnd[1] = ((UIP_RECEIVE_WINDOW) & 0xff);
+01827   }
+01828 
+01829  tcp_send_noconn:
+01830   BUF->ttl = UIP_TTL;
+01831 #if UIP_CONF_IPV6
+01832   /* For IPv6, the IP length field does not include the IPv6 IP header
+01833      length. */
+01834   BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8);
+01835   BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff);
+01836 #else /* UIP_CONF_IPV6 */
+01837   BUF->len[0] = (uip_len >> 8);
+01838   BUF->len[1] = (uip_len & 0xff);
+01839 #endif /* UIP_CONF_IPV6 */
+01840 
+01841   BUF->urgp[0] = BUF->urgp[1] = 0;
+01842   
+01843   /* Calculate TCP checksum. */
+01844   BUF->tcpchksum = 0;
+01845   BUF->tcpchksum = ~(uip_tcpchksum());
+01846   
+01847  ip_send_nolen:
+01848 
+01849 #if UIP_CONF_IPV6
+01850   BUF->vtc = 0x60;
+01851   BUF->tcflow = 0x00;
+01852   BUF->flow = 0x00;
+01853 #else /* UIP_CONF_IPV6 */
+01854   BUF->vhl = 0x45;
+01855   BUF->tos = 0;
+01856   BUF->ipoffset[0] = BUF->ipoffset[1] = 0;
+01857   ++ipid;
+01858   BUF->ipid[0] = ipid >> 8;
+01859   BUF->ipid[1] = ipid & 0xff;
+01860   /* Calculate IP checksum. */
+01861   BUF->ipchksum = 0;
+01862   BUF->ipchksum = ~(uip_ipchksum());
+01863   DEBUG_PRINTF("uip ip_send_nolen: chkecum 0x%04x\n", uip_ipchksum());
+01864 #endif /* UIP_CONF_IPV6 */
+01865    
+01866   UIP_STAT(++uip_stat.tcp.sent);
+01867  send:
+01868   DEBUG_PRINTF("Sending packet with length %d (%d)\n", uip_len,
+01869                (BUF->len[0] << 8) | BUF->len[1]);
+01870   
+01871   UIP_STAT(++uip_stat.ip.sent);
+01872   /* Return and let the caller do the actual transmission. */
+01873   uip_flags = 0;
+01874   return;
+01875  drop:
+01876   uip_len = 0;
+01877   uip_flags = 0;
+01878   return;
+01879 }
+01880 /*---------------------------------------------------------------------------*/
+01881 u16_t
+01882 htons(u16_t val)
+01883 {
+01884   return HTONS(val);
+01885 }
+01886 /*---------------------------------------------------------------------------*/
+01887 void
+01888 uip_send(const void *data, int len)
+01889 {
+01890   if(len > 0) {
+01891     uip_slen = len;
+01892     if(data != uip_sappdata) {
+01893       memcpy(uip_sappdata, (data), uip_slen);
+01894     }
+01895   }
+01896 }
+01897 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00202.html b/components/net/uip/doc/html/a00202.html new file mode 100644 index 0000000000000000000000000000000000000000..ff2306c0bc6b378645b8001d33aafa7c1fda85ea --- /dev/null +++ b/components/net/uip/doc/html/a00202.html @@ -0,0 +1,1626 @@ + + +uIP 1.0: uip/uip.h Source File + + + + + + +

uip/uip.h

Go to the documentation of this file.
00001 
+00002 /**
+00003  * \addtogroup uip
+00004  * @{
+00005  */
+00006 
+00007 /**
+00008  * \file
+00009  * Header file for the uIP TCP/IP stack.
+00010  * \author Adam Dunkels <adam@dunkels.com>
+00011  *
+00012  * The uIP TCP/IP stack header file contains definitions for a number
+00013  * of C macros that are used by uIP programs as well as internal uIP
+00014  * structures, TCP/IP header structures and function declarations.
+00015  *
+00016  */
+00017 
+00018 
+00019 /*
+00020  * Copyright (c) 2001-2003, Adam Dunkels.
+00021  * All rights reserved.
+00022  *
+00023  * Redistribution and use in source and binary forms, with or without
+00024  * modification, are permitted provided that the following conditions
+00025  * are met:
+00026  * 1. Redistributions of source code must retain the above copyright
+00027  *    notice, this list of conditions and the following disclaimer.
+00028  * 2. Redistributions in binary form must reproduce the above copyright
+00029  *    notice, this list of conditions and the following disclaimer in the
+00030  *    documentation and/or other materials provided with the distribution.
+00031  * 3. The name of the author may not be used to endorse or promote
+00032  *    products derived from this software without specific prior
+00033  *    written permission.
+00034  *
+00035  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00036  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00037  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00038  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00039  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00040  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00041  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00042  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00043  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00044  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00045  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00046  *
+00047  * This file is part of the uIP TCP/IP stack.
+00048  *
+00049  * $Id: uip.h,v 1.40 2006/06/08 07:12:07 adam Exp $
+00050  *
+00051  */
+00052 
+00053 #ifndef __UIP_H__
+00054 #define __UIP_H__
+00055 
+00056 #include "uipopt.h"
+00057 
+00058 /**
+00059  * Repressentation of an IP address.
+00060  *
+00061  */
+00062 typedef u16_t uip_ip4addr_t[2];
+00063 typedef u16_t uip_ip6addr_t[8];
+00064 #if UIP_CONF_IPV6
+00065 typedef uip_ip6addr_t uip_ipaddr_t;
+00066 #else /* UIP_CONF_IPV6 */
+00067 typedef uip_ip4addr_t uip_ipaddr_t;
+00068 #endif /* UIP_CONF_IPV6 */
+00069 
+00070 /*---------------------------------------------------------------------------*/
+00071 /* First, the functions that should be called from the
+00072  * system. Initialization, the periodic timer and incoming packets are
+00073  * handled by the following three functions.
+00074  */
+00075 
+00076 /**
+00077  * \defgroup uipconffunc uIP configuration functions
+00078  * @{
+00079  *
+00080  * The uIP configuration functions are used for setting run-time
+00081  * parameters in uIP such as IP addresses.
+00082  */
+00083 
+00084 /**
+00085  * Set the IP address of this host.
+00086  *
+00087  * The IP address is represented as a 4-byte array where the first
+00088  * octet of the IP address is put in the first member of the 4-byte
+00089  * array.
+00090  *
+00091  * Example:
+00092  \code
+00093 
+00094  uip_ipaddr_t addr;
+00095 
+00096  uip_ipaddr(&addr, 192,168,1,2);
+00097  uip_sethostaddr(&addr);
+00098  
+00099  \endcode
+00100  * \param addr A pointer to an IP address of type uip_ipaddr_t;
+00101  *
+00102  * \sa uip_ipaddr()
+00103  *
+00104  * \hideinitializer
+00105  */
+00106 #define uip_sethostaddr(addr) uip_ipaddr_copy(uip_hostaddr, (addr))
+00107 
+00108 /**
+00109  * Get the IP address of this host.
+00110  *
+00111  * The IP address is represented as a 4-byte array where the first
+00112  * octet of the IP address is put in the first member of the 4-byte
+00113  * array.
+00114  *
+00115  * Example:
+00116  \code
+00117  uip_ipaddr_t hostaddr;
+00118 
+00119  uip_gethostaddr(&hostaddr);
+00120  \endcode
+00121  * \param addr A pointer to a uip_ipaddr_t variable that will be
+00122  * filled in with the currently configured IP address.
+00123  *
+00124  * \hideinitializer
+00125  */
+00126 #define uip_gethostaddr(addr) uip_ipaddr_copy((addr), uip_hostaddr)
+00127 
+00128 /**
+00129  * Set the default router's IP address.
+00130  *
+00131  * \param addr A pointer to a uip_ipaddr_t variable containing the IP
+00132  * address of the default router.
+00133  *
+00134  * \sa uip_ipaddr()
+00135  *
+00136  * \hideinitializer
+00137  */
+00138 #define uip_setdraddr(addr) uip_ipaddr_copy(uip_draddr, (addr))
+00139 
+00140 /**
+00141  * Set the netmask.
+00142  *
+00143  * \param addr A pointer to a uip_ipaddr_t variable containing the IP
+00144  * address of the netmask.
+00145  *
+00146  * \sa uip_ipaddr()
+00147  *
+00148  * \hideinitializer
+00149  */
+00150 #define uip_setnetmask(addr) uip_ipaddr_copy(uip_netmask, (addr))
+00151 
+00152 
+00153 /**
+00154  * Get the default router's IP address.
+00155  *
+00156  * \param addr A pointer to a uip_ipaddr_t variable that will be
+00157  * filled in with the IP address of the default router.
+00158  *
+00159  * \hideinitializer
+00160  */
+00161 #define uip_getdraddr(addr) uip_ipaddr_copy((addr), uip_draddr)
+00162 
+00163 /**
+00164  * Get the netmask.
+00165  *
+00166  * \param addr A pointer to a uip_ipaddr_t variable that will be
+00167  * filled in with the value of the netmask.
+00168  *
+00169  * \hideinitializer
+00170  */
+00171 #define uip_getnetmask(addr) uip_ipaddr_copy((addr), uip_netmask)
+00172 
+00173 /** @} */
+00174 
+00175 /**
+00176  * \defgroup uipinit uIP initialization functions
+00177  * @{
+00178  *
+00179  * The uIP initialization functions are used for booting uIP.
+00180  */
+00181 
+00182 /**
+00183  * uIP initialization function.
+00184  *
+00185  * This function should be called at boot up to initilize the uIP
+00186  * TCP/IP stack.
+00187  */
+00188 void uip_init(void);
+00189 
+00190 /**
+00191  * uIP initialization function.
+00192  *
+00193  * This function may be used at boot time to set the initial ip_id.
+00194  */
+00195 void uip_setipid(u16_t id);
+00196 
+00197 /** @} */
+00198 
+00199 /**
+00200  * \defgroup uipdevfunc uIP device driver functions
+00201  * @{
+00202  *
+00203  * These functions are used by a network device driver for interacting
+00204  * with uIP.
+00205  */
+00206 
+00207 /**
+00208  * Process an incoming packet.
+00209  *
+00210  * This function should be called when the device driver has received
+00211  * a packet from the network. The packet from the device driver must
+00212  * be present in the uip_buf buffer, and the length of the packet
+00213  * should be placed in the uip_len variable.
+00214  *
+00215  * When the function returns, there may be an outbound packet placed
+00216  * in the uip_buf packet buffer. If so, the uip_len variable is set to
+00217  * the length of the packet. If no packet is to be sent out, the
+00218  * uip_len variable is set to 0.
+00219  *
+00220  * The usual way of calling the function is presented by the source
+00221  * code below.
+00222  \code
+00223   uip_len = devicedriver_poll();
+00224   if(uip_len > 0) {
+00225     uip_input();
+00226     if(uip_len > 0) {
+00227       devicedriver_send();
+00228     }
+00229   }
+00230  \endcode
+00231  *
+00232  * \note If you are writing a uIP device driver that needs ARP
+00233  * (Address Resolution Protocol), e.g., when running uIP over
+00234  * Ethernet, you will need to call the uIP ARP code before calling
+00235  * this function:
+00236  \code
+00237   #define BUF ((struct uip_eth_hdr *)&uip_buf[0])
+00238   uip_len = ethernet_devicedrver_poll();
+00239   if(uip_len > 0) {
+00240     if(BUF->type == HTONS(UIP_ETHTYPE_IP)) {
+00241       uip_arp_ipin();
+00242       uip_input();
+00243       if(uip_len > 0) {
+00244         uip_arp_out();
+00245         ethernet_devicedriver_send();
+00246       }
+00247     } else if(BUF->type == HTONS(UIP_ETHTYPE_ARP)) {
+00248       uip_arp_arpin();
+00249       if(uip_len > 0) {
+00250         ethernet_devicedriver_send();
+00251       }
+00252     }
+00253  \endcode
+00254  *
+00255  * \hideinitializer
+00256  */
+00257 #define uip_input()        uip_process(UIP_DATA)
+00258 
+00259 /**
+00260  * Periodic processing for a connection identified by its number.
+00261  *
+00262  * This function does the necessary periodic processing (timers,
+00263  * polling) for a uIP TCP conneciton, and should be called when the
+00264  * periodic uIP timer goes off. It should be called for every
+00265  * connection, regardless of whether they are open of closed.
+00266  *
+00267  * When the function returns, it may have an outbound packet waiting
+00268  * for service in the uIP packet buffer, and if so the uip_len
+00269  * variable is set to a value larger than zero. The device driver
+00270  * should be called to send out the packet.
+00271  *
+00272  * The ususal way of calling the function is through a for() loop like
+00273  * this:
+00274  \code
+00275   for(i = 0; i < UIP_CONNS; ++i) {
+00276     uip_periodic(i);
+00277     if(uip_len > 0) {
+00278       devicedriver_send();
+00279     }
+00280   }
+00281  \endcode
+00282  *
+00283  * \note If you are writing a uIP device driver that needs ARP
+00284  * (Address Resolution Protocol), e.g., when running uIP over
+00285  * Ethernet, you will need to call the uip_arp_out() function before
+00286  * calling the device driver:
+00287  \code
+00288   for(i = 0; i < UIP_CONNS; ++i) {
+00289     uip_periodic(i);
+00290     if(uip_len > 0) {
+00291       uip_arp_out();
+00292       ethernet_devicedriver_send();
+00293     }
+00294   }
+00295  \endcode
+00296  *
+00297  * \param conn The number of the connection which is to be periodically polled.
+00298  *
+00299  * \hideinitializer
+00300  */
+00301 #define uip_periodic(conn) do { uip_conn = &uip_conns[conn]; \
+00302                                 uip_process(UIP_TIMER); } while (0)
+00303 
+00304 /**
+00305  *
+00306  *
+00307  */
+00308 #define uip_conn_active(conn) (uip_conns[conn].tcpstateflags != UIP_CLOSED)
+00309 
+00310 /**
+00311  * Perform periodic processing for a connection identified by a pointer
+00312  * to its structure.
+00313  *
+00314  * Same as uip_periodic() but takes a pointer to the actual uip_conn
+00315  * struct instead of an integer as its argument. This function can be
+00316  * used to force periodic processing of a specific connection.
+00317  *
+00318  * \param conn A pointer to the uip_conn struct for the connection to
+00319  * be processed.
+00320  *
+00321  * \hideinitializer
+00322  */
+00323 #define uip_periodic_conn(conn) do { uip_conn = conn; \
+00324                                      uip_process(UIP_TIMER); } while (0)
+00325 
+00326 /**
+00327  * Reuqest that a particular connection should be polled.
+00328  *
+00329  * Similar to uip_periodic_conn() but does not perform any timer
+00330  * processing. The application is polled for new data.
+00331  *
+00332  * \param conn A pointer to the uip_conn struct for the connection to
+00333  * be processed.
+00334  *
+00335  * \hideinitializer
+00336  */
+00337 #define uip_poll_conn(conn) do { uip_conn = conn; \
+00338                                  uip_process(UIP_POLL_REQUEST); } while (0)
+00339 
+00340 
+00341 #if UIP_UDP
+00342 /**
+00343  * Periodic processing for a UDP connection identified by its number.
+00344  *
+00345  * This function is essentially the same as uip_periodic(), but for
+00346  * UDP connections. It is called in a similar fashion as the
+00347  * uip_periodic() function:
+00348  \code
+00349   for(i = 0; i < UIP_UDP_CONNS; i++) {
+00350     uip_udp_periodic(i);
+00351     if(uip_len > 0) {
+00352       devicedriver_send();
+00353     }
+00354   }
+00355  \endcode
+00356  *
+00357  * \note As for the uip_periodic() function, special care has to be
+00358  * taken when using uIP together with ARP and Ethernet:
+00359  \code
+00360   for(i = 0; i < UIP_UDP_CONNS; i++) {
+00361     uip_udp_periodic(i);
+00362     if(uip_len > 0) {
+00363       uip_arp_out();
+00364       ethernet_devicedriver_send();
+00365     }
+00366   }
+00367  \endcode
+00368  *
+00369  * \param conn The number of the UDP connection to be processed.
+00370  *
+00371  * \hideinitializer
+00372  */
+00373 #define uip_udp_periodic(conn) do { uip_udp_conn = &uip_udp_conns[conn]; \
+00374                                 uip_process(UIP_UDP_TIMER); } while (0)
+00375 
+00376 /**
+00377  * Periodic processing for a UDP connection identified by a pointer to
+00378  * its structure.
+00379  *
+00380  * Same as uip_udp_periodic() but takes a pointer to the actual
+00381  * uip_conn struct instead of an integer as its argument. This
+00382  * function can be used to force periodic processing of a specific
+00383  * connection.
+00384  *
+00385  * \param conn A pointer to the uip_udp_conn struct for the connection
+00386  * to be processed.
+00387  *
+00388  * \hideinitializer
+00389  */
+00390 #define uip_udp_periodic_conn(conn) do { uip_udp_conn = conn; \
+00391                                          uip_process(UIP_UDP_TIMER); } while (0)
+00392 
+00393 
+00394 #endif /* UIP_UDP */
+00395 
+00396 /**
+00397  * The uIP packet buffer.
+00398  *
+00399  * The uip_buf array is used to hold incoming and outgoing
+00400  * packets. The device driver should place incoming data into this
+00401  * buffer. When sending data, the device driver should read the link
+00402  * level headers and the TCP/IP headers from this buffer. The size of
+00403  * the link level headers is configured by the UIP_LLH_LEN define.
+00404  *
+00405  * \note The application data need not be placed in this buffer, so
+00406  * the device driver must read it from the place pointed to by the
+00407  * uip_appdata pointer as illustrated by the following example:
+00408  \code
+00409  void
+00410  devicedriver_send(void)
+00411  {
+00412     hwsend(&uip_buf[0], UIP_LLH_LEN);
+00413     if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) {
+00414       hwsend(&uip_buf[UIP_LLH_LEN], uip_len - UIP_LLH_LEN);
+00415     } else {
+00416       hwsend(&uip_buf[UIP_LLH_LEN], UIP_TCPIP_HLEN);
+00417       hwsend(uip_appdata, uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN);
+00418     }
+00419  }
+00420  \endcode
+00421  */
+00422 extern u8_t uip_buf[UIP_BUFSIZE+2];
+00423 
+00424 /** @} */
+00425 
+00426 /*---------------------------------------------------------------------------*/
+00427 /* Functions that are used by the uIP application program. Opening and
+00428  * closing connections, sending and receiving data, etc. is all
+00429  * handled by the functions below.
+00430 */
+00431 /**
+00432  * \defgroup uipappfunc uIP application functions
+00433  * @{
+00434  *
+00435  * Functions used by an application running of top of uIP.
+00436  */
+00437 
+00438 /**
+00439  * Start listening to the specified port.
+00440  *
+00441  * \note Since this function expects the port number in network byte
+00442  * order, a conversion using HTONS() or htons() is necessary.
+00443  *
+00444  \code
+00445  uip_listen(HTONS(80));
+00446  \endcode
+00447  *
+00448  * \param port A 16-bit port number in network byte order.
+00449  */
+00450 void uip_listen(u16_t port);
+00451 
+00452 /**
+00453  * Stop listening to the specified port.
+00454  *
+00455  * \note Since this function expects the port number in network byte
+00456  * order, a conversion using HTONS() or htons() is necessary.
+00457  *
+00458  \code
+00459  uip_unlisten(HTONS(80));
+00460  \endcode
+00461  *
+00462  * \param port A 16-bit port number in network byte order.
+00463  */
+00464 void uip_unlisten(u16_t port);
+00465 
+00466 /**
+00467  * Connect to a remote host using TCP.
+00468  *
+00469  * This function is used to start a new connection to the specified
+00470  * port on the specied host. It allocates a new connection identifier,
+00471  * sets the connection to the SYN_SENT state and sets the
+00472  * retransmission timer to 0. This will cause a TCP SYN segment to be
+00473  * sent out the next time this connection is periodically processed,
+00474  * which usually is done within 0.5 seconds after the call to
+00475  * uip_connect().
+00476  *
+00477  * \note This function is avaliable only if support for active open
+00478  * has been configured by defining UIP_ACTIVE_OPEN to 1 in uipopt.h.
+00479  *
+00480  * \note Since this function requires the port number to be in network
+00481  * byte order, a conversion using HTONS() or htons() is necessary.
+00482  *
+00483  \code
+00484  uip_ipaddr_t ipaddr;
+00485 
+00486  uip_ipaddr(&ipaddr, 192,168,1,2);
+00487  uip_connect(&ipaddr, HTONS(80));
+00488  \endcode
+00489  *
+00490  * \param ripaddr The IP address of the remote hot.
+00491  *
+00492  * \param port A 16-bit port number in network byte order.
+00493  *
+00494  * \return A pointer to the uIP connection identifier for the new connection,
+00495  * or NULL if no connection could be allocated.
+00496  *
+00497  */
+00498 struct uip_conn *uip_connect(uip_ipaddr_t *ripaddr, u16_t port);
+00499 
+00500 
+00501 
+00502 /**
+00503  * \internal
+00504  *
+00505  * Check if a connection has outstanding (i.e., unacknowledged) data.
+00506  *
+00507  * \param conn A pointer to the uip_conn structure for the connection.
+00508  *
+00509  * \hideinitializer
+00510  */
+00511 #define uip_outstanding(conn) ((conn)->len)
+00512 
+00513 /**
+00514  * Send data on the current connection.
+00515  *
+00516  * This function is used to send out a single segment of TCP
+00517  * data. Only applications that have been invoked by uIP for event
+00518  * processing can send data.
+00519  *
+00520  * The amount of data that actually is sent out after a call to this
+00521  * funcion is determined by the maximum amount of data TCP allows. uIP
+00522  * will automatically crop the data so that only the appropriate
+00523  * amount of data is sent. The function uip_mss() can be used to query
+00524  * uIP for the amount of data that actually will be sent.
+00525  *
+00526  * \note This function does not guarantee that the sent data will
+00527  * arrive at the destination. If the data is lost in the network, the
+00528  * application will be invoked with the uip_rexmit() event being
+00529  * set. The application will then have to resend the data using this
+00530  * function.
+00531  *
+00532  * \param data A pointer to the data which is to be sent.
+00533  *
+00534  * \param len The maximum amount of data bytes to be sent.
+00535  *
+00536  * \hideinitializer
+00537  */
+00538 void uip_send(const void *data, int len);
+00539 
+00540 /**
+00541  * The length of any incoming data that is currently avaliable (if avaliable)
+00542  * in the uip_appdata buffer.
+00543  *
+00544  * The test function uip_data() must first be used to check if there
+00545  * is any data available at all.
+00546  *
+00547  * \hideinitializer
+00548  */
+00549 /*void uip_datalen(void);*/
+00550 #define uip_datalen()       uip_len
+00551 
+00552 /**
+00553  * The length of any out-of-band data (urgent data) that has arrived
+00554  * on the connection.
+00555  *
+00556  * \note The configuration parameter UIP_URGDATA must be set for this
+00557  * function to be enabled.
+00558  *
+00559  * \hideinitializer
+00560  */
+00561 #define uip_urgdatalen()    uip_urglen
+00562 
+00563 /**
+00564  * Close the current connection.
+00565  *
+00566  * This function will close the current connection in a nice way.
+00567  *
+00568  * \hideinitializer
+00569  */
+00570 #define uip_close()         (uip_flags = UIP_CLOSE)
+00571 
+00572 /**
+00573  * Abort the current connection.
+00574  *
+00575  * This function will abort (reset) the current connection, and is
+00576  * usually used when an error has occured that prevents using the
+00577  * uip_close() function.
+00578  *
+00579  * \hideinitializer
+00580  */
+00581 #define uip_abort()         (uip_flags = UIP_ABORT)
+00582 
+00583 /**
+00584  * Tell the sending host to stop sending data.
+00585  *
+00586  * This function will close our receiver's window so that we stop
+00587  * receiving data for the current connection.
+00588  *
+00589  * \hideinitializer
+00590  */
+00591 #define uip_stop()          (uip_conn->tcpstateflags |= UIP_STOPPED)
+00592 
+00593 /**
+00594  * Find out if the current connection has been previously stopped with
+00595  * uip_stop().
+00596  *
+00597  * \hideinitializer
+00598  */
+00599 #define uip_stopped(conn)   ((conn)->tcpstateflags & UIP_STOPPED)
+00600 
+00601 /**
+00602  * Restart the current connection, if is has previously been stopped
+00603  * with uip_stop().
+00604  *
+00605  * This function will open the receiver's window again so that we
+00606  * start receiving data for the current connection.
+00607  *
+00608  * \hideinitializer
+00609  */
+00610 #define uip_restart()         do { uip_flags |= UIP_NEWDATA; \
+00611                                    uip_conn->tcpstateflags &= ~UIP_STOPPED; \
+00612                               } while(0)
+00613 
+00614 
+00615 /* uIP tests that can be made to determine in what state the current
+00616    connection is, and what the application function should do. */
+00617 
+00618 /**
+00619  * Is the current connection a UDP connection?
+00620  *
+00621  * This function checks whether the current connection is a UDP connection.
+00622  *
+00623  * \hideinitializer
+00624  *
+00625  */
+00626 #define uip_udpconnection() (uip_conn == NULL)
+00627 
+00628 /**
+00629  * Is new incoming data available?
+00630  *
+00631  * Will reduce to non-zero if there is new data for the application
+00632  * present at the uip_appdata pointer. The size of the data is
+00633  * avaliable through the uip_len variable.
+00634  *
+00635  * \hideinitializer
+00636  */
+00637 #define uip_newdata()   (uip_flags & UIP_NEWDATA)
+00638 
+00639 /**
+00640  * Has previously sent data been acknowledged?
+00641  *
+00642  * Will reduce to non-zero if the previously sent data has been
+00643  * acknowledged by the remote host. This means that the application
+00644  * can send new data.
+00645  *
+00646  * \hideinitializer
+00647  */
+00648 #define uip_acked()   (uip_flags & UIP_ACKDATA)
+00649 
+00650 /**
+00651  * Has the connection just been connected?
+00652  *
+00653  * Reduces to non-zero if the current connection has been connected to
+00654  * a remote host. This will happen both if the connection has been
+00655  * actively opened (with uip_connect()) or passively opened (with
+00656  * uip_listen()).
+00657  *
+00658  * \hideinitializer
+00659  */
+00660 #define uip_connected() (uip_flags & UIP_CONNECTED)
+00661 
+00662 /**
+00663  * Has the connection been closed by the other end?
+00664  *
+00665  * Is non-zero if the connection has been closed by the remote
+00666  * host. The application may then do the necessary clean-ups.
+00667  *
+00668  * \hideinitializer
+00669  */
+00670 #define uip_closed()    (uip_flags & UIP_CLOSE)
+00671 
+00672 /**
+00673  * Has the connection been aborted by the other end?
+00674  *
+00675  * Non-zero if the current connection has been aborted (reset) by the
+00676  * remote host.
+00677  *
+00678  * \hideinitializer
+00679  */
+00680 #define uip_aborted()    (uip_flags & UIP_ABORT)
+00681 
+00682 /**
+00683  * Has the connection timed out?
+00684  *
+00685  * Non-zero if the current connection has been aborted due to too many
+00686  * retransmissions.
+00687  *
+00688  * \hideinitializer
+00689  */
+00690 #define uip_timedout()    (uip_flags & UIP_TIMEDOUT)
+00691 
+00692 /**
+00693  * Do we need to retransmit previously data?
+00694  *
+00695  * Reduces to non-zero if the previously sent data has been lost in
+00696  * the network, and the application should retransmit it. The
+00697  * application should send the exact same data as it did the last
+00698  * time, using the uip_send() function.
+00699  *
+00700  * \hideinitializer
+00701  */
+00702 #define uip_rexmit()     (uip_flags & UIP_REXMIT)
+00703 
+00704 /**
+00705  * Is the connection being polled by uIP?
+00706  *
+00707  * Is non-zero if the reason the application is invoked is that the
+00708  * current connection has been idle for a while and should be
+00709  * polled.
+00710  *
+00711  * The polling event can be used for sending data without having to
+00712  * wait for the remote host to send data.
+00713  *
+00714  * \hideinitializer
+00715  */
+00716 #define uip_poll()       (uip_flags & UIP_POLL)
+00717 
+00718 /**
+00719  * Get the initial maxium segment size (MSS) of the current
+00720  * connection.
+00721  *
+00722  * \hideinitializer
+00723  */
+00724 #define uip_initialmss()             (uip_conn->initialmss)
+00725 
+00726 /**
+00727  * Get the current maxium segment size that can be sent on the current
+00728  * connection.
+00729  *
+00730  * The current maxiumum segment size that can be sent on the
+00731  * connection is computed from the receiver's window and the MSS of
+00732  * the connection (which also is available by calling
+00733  * uip_initialmss()).
+00734  *
+00735  * \hideinitializer
+00736  */
+00737 #define uip_mss()             (uip_conn->mss)
+00738 
+00739 /**
+00740  * Set up a new UDP connection.
+00741  *
+00742  * This function sets up a new UDP connection. The function will
+00743  * automatically allocate an unused local port for the new
+00744  * connection. However, another port can be chosen by using the
+00745  * uip_udp_bind() call, after the uip_udp_new() function has been
+00746  * called.
+00747  *
+00748  * Example:
+00749  \code
+00750  uip_ipaddr_t addr;
+00751  struct uip_udp_conn *c;
+00752  
+00753  uip_ipaddr(&addr, 192,168,2,1);
+00754  c = uip_udp_new(&addr, HTONS(12345));
+00755  if(c != NULL) {
+00756    uip_udp_bind(c, HTONS(12344));
+00757  }
+00758  \endcode
+00759  * \param ripaddr The IP address of the remote host.
+00760  *
+00761  * \param rport The remote port number in network byte order.
+00762  *
+00763  * \return The uip_udp_conn structure for the new connection or NULL
+00764  * if no connection could be allocated.
+00765  */
+00766 struct uip_udp_conn *uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport);
+00767 
+00768 /**
+00769  * Removed a UDP connection.
+00770  *
+00771  * \param conn A pointer to the uip_udp_conn structure for the connection.
+00772  *
+00773  * \hideinitializer
+00774  */
+00775 #define uip_udp_remove(conn) (conn)->lport = 0
+00776 
+00777 /**
+00778  * Bind a UDP connection to a local port.
+00779  *
+00780  * \param conn A pointer to the uip_udp_conn structure for the
+00781  * connection.
+00782  *
+00783  * \param port The local port number, in network byte order.
+00784  *
+00785  * \hideinitializer
+00786  */
+00787 #define uip_udp_bind(conn, port) (conn)->lport = port
+00788 
+00789 /**
+00790  * Send a UDP datagram of length len on the current connection.
+00791  *
+00792  * This function can only be called in response to a UDP event (poll
+00793  * or newdata). The data must be present in the uip_buf buffer, at the
+00794  * place pointed to by the uip_appdata pointer.
+00795  *
+00796  * \param len The length of the data in the uip_buf buffer.
+00797  *
+00798  * \hideinitializer
+00799  */
+00800 #define uip_udp_send(len) uip_send((char *)uip_appdata, len)
+00801 
+00802 /** @} */
+00803 
+00804 /* uIP convenience and converting functions. */
+00805 
+00806 /**
+00807  * \defgroup uipconvfunc uIP conversion functions
+00808  * @{
+00809  *
+00810  * These functions can be used for converting between different data
+00811  * formats used by uIP.
+00812  */
+00813  
+00814 /**
+00815  * Construct an IP address from four bytes.
+00816  *
+00817  * This function constructs an IP address of the type that uIP handles
+00818  * internally from four bytes. The function is handy for specifying IP
+00819  * addresses to use with e.g. the uip_connect() function.
+00820  *
+00821  * Example:
+00822  \code
+00823  uip_ipaddr_t ipaddr;
+00824  struct uip_conn *c;
+00825  
+00826  uip_ipaddr(&ipaddr, 192,168,1,2);
+00827  c = uip_connect(&ipaddr, HTONS(80));
+00828  \endcode
+00829  *
+00830  * \param addr A pointer to a uip_ipaddr_t variable that will be
+00831  * filled in with the IP address.
+00832  *
+00833  * \param addr0 The first octet of the IP address.
+00834  * \param addr1 The second octet of the IP address.
+00835  * \param addr2 The third octet of the IP address.
+00836  * \param addr3 The forth octet of the IP address.
+00837  *
+00838  * \hideinitializer
+00839  */
+00840 #define uip_ipaddr(addr, addr0,addr1,addr2,addr3) do { \
+00841                      ((u16_t *)(addr))[0] = HTONS(((addr0) << 8) | (addr1)); \
+00842                      ((u16_t *)(addr))[1] = HTONS(((addr2) << 8) | (addr3)); \
+00843                   } while(0)
+00844 
+00845 /**
+00846  * Construct an IPv6 address from eight 16-bit words.
+00847  *
+00848  * This function constructs an IPv6 address.
+00849  *
+00850  * \hideinitializer
+00851  */
+00852 #define uip_ip6addr(addr, addr0,addr1,addr2,addr3,addr4,addr5,addr6,addr7) do { \
+00853                      ((u16_t *)(addr))[0] = HTONS((addr0)); \
+00854                      ((u16_t *)(addr))[1] = HTONS((addr1)); \
+00855                      ((u16_t *)(addr))[2] = HTONS((addr2)); \
+00856                      ((u16_t *)(addr))[3] = HTONS((addr3)); \
+00857                      ((u16_t *)(addr))[4] = HTONS((addr4)); \
+00858                      ((u16_t *)(addr))[5] = HTONS((addr5)); \
+00859                      ((u16_t *)(addr))[6] = HTONS((addr6)); \
+00860                      ((u16_t *)(addr))[7] = HTONS((addr7)); \
+00861                   } while(0)
+00862 
+00863 /**
+00864  * Copy an IP address to another IP address.
+00865  *
+00866  * Copies an IP address from one place to another.
+00867  *
+00868  * Example:
+00869  \code
+00870  uip_ipaddr_t ipaddr1, ipaddr2;
+00871 
+00872  uip_ipaddr(&ipaddr1, 192,16,1,2);
+00873  uip_ipaddr_copy(&ipaddr2, &ipaddr1);
+00874  \endcode
+00875  *
+00876  * \param dest The destination for the copy.
+00877  * \param src The source from where to copy.
+00878  *
+00879  * \hideinitializer
+00880  */
+00881 #if !UIP_CONF_IPV6
+00882 #define uip_ipaddr_copy(dest, src) do { \
+00883                      ((u16_t *)dest)[0] = ((u16_t *)src)[0]; \
+00884                      ((u16_t *)dest)[1] = ((u16_t *)src)[1]; \
+00885                   } while(0)
+00886 #else /* !UIP_CONF_IPV6 */
+00887 #define uip_ipaddr_copy(dest, src) memcpy(dest, src, sizeof(uip_ip6addr_t))
+00888 #endif /* !UIP_CONF_IPV6 */
+00889 
+00890 /**
+00891  * Compare two IP addresses
+00892  *
+00893  * Compares two IP addresses.
+00894  *
+00895  * Example:
+00896  \code
+00897  uip_ipaddr_t ipaddr1, ipaddr2;
+00898 
+00899  uip_ipaddr(&ipaddr1, 192,16,1,2);
+00900  if(uip_ipaddr_cmp(&ipaddr2, &ipaddr1)) {
+00901     printf("They are the same");
+00902  }
+00903  \endcode
+00904  *
+00905  * \param addr1 The first IP address.
+00906  * \param addr2 The second IP address.
+00907  *
+00908  * \hideinitializer
+00909  */
+00910 #if !UIP_CONF_IPV6
+00911 #define uip_ipaddr_cmp(addr1, addr2) (((u16_t *)addr1)[0] == ((u16_t *)addr2)[0] && \
+00912                                       ((u16_t *)addr1)[1] == ((u16_t *)addr2)[1])
+00913 #else /* !UIP_CONF_IPV6 */
+00914 #define uip_ipaddr_cmp(addr1, addr2) (memcmp(addr1, addr2, sizeof(uip_ip6addr_t)) == 0)
+00915 #endif /* !UIP_CONF_IPV6 */
+00916 
+00917 /**
+00918  * Compare two IP addresses with netmasks
+00919  *
+00920  * Compares two IP addresses with netmasks. The masks are used to mask
+00921  * out the bits that are to be compared.
+00922  *
+00923  * Example:
+00924  \code
+00925  uip_ipaddr_t ipaddr1, ipaddr2, mask;
+00926 
+00927  uip_ipaddr(&mask, 255,255,255,0);
+00928  uip_ipaddr(&ipaddr1, 192,16,1,2);
+00929  uip_ipaddr(&ipaddr2, 192,16,1,3);
+00930  if(uip_ipaddr_maskcmp(&ipaddr1, &ipaddr2, &mask)) {
+00931     printf("They are the same");
+00932  }
+00933  \endcode
+00934  *
+00935  * \param addr1 The first IP address.
+00936  * \param addr2 The second IP address.
+00937  * \param mask The netmask.
+00938  *
+00939  * \hideinitializer
+00940  */
+00941 #define uip_ipaddr_maskcmp(addr1, addr2, mask) \
+00942                           (((((u16_t *)addr1)[0] & ((u16_t *)mask)[0]) == \
+00943                             (((u16_t *)addr2)[0] & ((u16_t *)mask)[0])) && \
+00944                            ((((u16_t *)addr1)[1] & ((u16_t *)mask)[1]) == \
+00945                             (((u16_t *)addr2)[1] & ((u16_t *)mask)[1])))
+00946 
+00947 
+00948 /**
+00949  * Mask out the network part of an IP address.
+00950  *
+00951  * Masks out the network part of an IP address, given the address and
+00952  * the netmask.
+00953  *
+00954  * Example:
+00955  \code
+00956  uip_ipaddr_t ipaddr1, ipaddr2, netmask;
+00957 
+00958  uip_ipaddr(&ipaddr1, 192,16,1,2);
+00959  uip_ipaddr(&netmask, 255,255,255,0);
+00960  uip_ipaddr_mask(&ipaddr2, &ipaddr1, &netmask);
+00961  \endcode
+00962  *
+00963  * In the example above, the variable "ipaddr2" will contain the IP
+00964  * address 192.168.1.0.
+00965  *
+00966  * \param dest Where the result is to be placed.
+00967  * \param src The IP address.
+00968  * \param mask The netmask.
+00969  *
+00970  * \hideinitializer
+00971  */
+00972 #define uip_ipaddr_mask(dest, src, mask) do { \
+00973                      ((u16_t *)dest)[0] = ((u16_t *)src)[0] & ((u16_t *)mask)[0]; \
+00974                      ((u16_t *)dest)[1] = ((u16_t *)src)[1] & ((u16_t *)mask)[1]; \
+00975                   } while(0)
+00976 
+00977 /**
+00978  * Pick the first octet of an IP address.
+00979  *
+00980  * Picks out the first octet of an IP address.
+00981  *
+00982  * Example:
+00983  \code
+00984  uip_ipaddr_t ipaddr;
+00985  u8_t octet;
+00986 
+00987  uip_ipaddr(&ipaddr, 1,2,3,4);
+00988  octet = uip_ipaddr1(&ipaddr);
+00989  \endcode
+00990  *
+00991  * In the example above, the variable "octet" will contain the value 1.
+00992  *
+00993  * \hideinitializer
+00994  */
+00995 #define uip_ipaddr1(addr) (htons(((u16_t *)(addr))[0]) >> 8)
+00996 
+00997 /**
+00998  * Pick the second octet of an IP address.
+00999  *
+01000  * Picks out the second octet of an IP address.
+01001  *
+01002  * Example:
+01003  \code
+01004  uip_ipaddr_t ipaddr;
+01005  u8_t octet;
+01006 
+01007  uip_ipaddr(&ipaddr, 1,2,3,4);
+01008  octet = uip_ipaddr2(&ipaddr);
+01009  \endcode
+01010  *
+01011  * In the example above, the variable "octet" will contain the value 2.
+01012  *
+01013  * \hideinitializer
+01014  */
+01015 #define uip_ipaddr2(addr) (htons(((u16_t *)(addr))[0]) & 0xff)
+01016 
+01017 /**
+01018  * Pick the third octet of an IP address.
+01019  *
+01020  * Picks out the third octet of an IP address.
+01021  *
+01022  * Example:
+01023  \code
+01024  uip_ipaddr_t ipaddr;
+01025  u8_t octet;
+01026 
+01027  uip_ipaddr(&ipaddr, 1,2,3,4);
+01028  octet = uip_ipaddr3(&ipaddr);
+01029  \endcode
+01030  *
+01031  * In the example above, the variable "octet" will contain the value 3.
+01032  *
+01033  * \hideinitializer
+01034  */
+01035 #define uip_ipaddr3(addr) (htons(((u16_t *)(addr))[1]) >> 8)
+01036 
+01037 /**
+01038  * Pick the fourth octet of an IP address.
+01039  *
+01040  * Picks out the fourth octet of an IP address.
+01041  *
+01042  * Example:
+01043  \code
+01044  uip_ipaddr_t ipaddr;
+01045  u8_t octet;
+01046 
+01047  uip_ipaddr(&ipaddr, 1,2,3,4);
+01048  octet = uip_ipaddr4(&ipaddr);
+01049  \endcode
+01050  *
+01051  * In the example above, the variable "octet" will contain the value 4.
+01052  *
+01053  * \hideinitializer
+01054  */
+01055 #define uip_ipaddr4(addr) (htons(((u16_t *)(addr))[1]) & 0xff)
+01056 
+01057 /**
+01058  * Convert 16-bit quantity from host byte order to network byte order.
+01059  *
+01060  * This macro is primarily used for converting constants from host
+01061  * byte order to network byte order. For converting variables to
+01062  * network byte order, use the htons() function instead.
+01063  *
+01064  * \hideinitializer
+01065  */
+01066 #ifndef HTONS
+01067 #   if UIP_BYTE_ORDER == UIP_BIG_ENDIAN
+01068 #      define HTONS(n) (n)
+01069 #   else /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */
+01070 #      define HTONS(n) (u16_t)((((u16_t) (n)) << 8) | (((u16_t) (n)) >> 8))
+01071 #   endif /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */
+01072 #else
+01073 #error "HTONS already defined!"
+01074 #endif /* HTONS */
+01075 
+01076 /**
+01077  * Convert 16-bit quantity from host byte order to network byte order.
+01078  *
+01079  * This function is primarily used for converting variables from host
+01080  * byte order to network byte order. For converting constants to
+01081  * network byte order, use the HTONS() macro instead.
+01082  */
+01083 #ifndef htons
+01084 u16_t htons(u16_t val);
+01085 #endif /* htons */
+01086 #ifndef ntohs
+01087 #define ntohs htons
+01088 #endif
+01089 
+01090 /** @} */
+01091 
+01092 /**
+01093  * Pointer to the application data in the packet buffer.
+01094  *
+01095  * This pointer points to the application data when the application is
+01096  * called. If the application wishes to send data, the application may
+01097  * use this space to write the data into before calling uip_send().
+01098  */
+01099 extern void *uip_appdata;
+01100 
+01101 #if UIP_URGDATA > 0
+01102 /* u8_t *uip_urgdata:
+01103  *
+01104  * This pointer points to any urgent data that has been received. Only
+01105  * present if compiled with support for urgent data (UIP_URGDATA).
+01106  */
+01107 extern void *uip_urgdata;
+01108 #endif /* UIP_URGDATA > 0 */
+01109 
+01110 
+01111 /**
+01112  * \defgroup uipdrivervars Variables used in uIP device drivers
+01113  * @{
+01114  *
+01115  * uIP has a few global variables that are used in device drivers for
+01116  * uIP.
+01117  */
+01118 
+01119 /**
+01120  * The length of the packet in the uip_buf buffer.
+01121  *
+01122  * The global variable uip_len holds the length of the packet in the
+01123  * uip_buf buffer.
+01124  *
+01125  * When the network device driver calls the uIP input function,
+01126  * uip_len should be set to the length of the packet in the uip_buf
+01127  * buffer.
+01128  *
+01129  * When sending packets, the device driver should use the contents of
+01130  * the uip_len variable to determine the length of the outgoing
+01131  * packet.
+01132  *
+01133  */
+01134 extern u16_t uip_len;
+01135 
+01136 /** @} */
+01137 
+01138 #if UIP_URGDATA > 0
+01139 extern u16_t uip_urglen, uip_surglen;
+01140 #endif /* UIP_URGDATA > 0 */
+01141 
+01142 
+01143 /**
+01144  * Representation of a uIP TCP connection.
+01145  *
+01146  * The uip_conn structure is used for identifying a connection. All
+01147  * but one field in the structure are to be considered read-only by an
+01148  * application. The only exception is the appstate field whos purpose
+01149  * is to let the application store application-specific state (e.g.,
+01150  * file pointers) for the connection. The type of this field is
+01151  * configured in the "uipopt.h" header file.
+01152  */
+01153 struct uip_conn {
+01154   uip_ipaddr_t ripaddr;   /**< The IP address of the remote host. */
+01155   
+01156   u16_t lport;        /**< The local TCP port, in network byte order. */
+01157   u16_t rport;        /**< The local remote TCP port, in network byte
+01158                          order. */
+01159   
+01160   u8_t rcv_nxt[4];    /**< The sequence number that we expect to
+01161                          receive next. */
+01162   u8_t snd_nxt[4];    /**< The sequence number that was last sent by
+01163                          us. */
+01164   u16_t len;          /**< Length of the data that was previously sent. */
+01165   u16_t mss;          /**< Current maximum segment size for the
+01166                          connection. */
+01167   u16_t initialmss;   /**< Initial maximum segment size for the
+01168                          connection. */
+01169   u8_t sa;            /**< Retransmission time-out calculation state
+01170                          variable. */
+01171   u8_t sv;            /**< Retransmission time-out calculation state
+01172                          variable. */
+01173   u8_t rto;           /**< Retransmission time-out. */
+01174   u8_t tcpstateflags; /**< TCP state and flags. */
+01175   u8_t timer;         /**< The retransmission timer. */
+01176   u8_t nrtx;          /**< The number of retransmissions for the last
+01177                          segment sent. */
+01178 
+01179   /** The application state. */
+01180   uip_tcp_appstate_t appstate;
+01181 };
+01182 
+01183 
+01184 /**
+01185  * Pointer to the current TCP connection.
+01186  *
+01187  * The uip_conn pointer can be used to access the current TCP
+01188  * connection.
+01189  */
+01190 extern struct uip_conn *uip_conn;
+01191 /* The array containing all uIP connections. */
+01192 extern struct uip_conn uip_conns[UIP_CONNS];
+01193 /**
+01194  * \addtogroup uiparch
+01195  * @{
+01196  */
+01197 
+01198 /**
+01199  * 4-byte array used for the 32-bit sequence number calculations.
+01200  */
+01201 extern u8_t uip_acc32[4];
+01202 
+01203 /** @} */
+01204 
+01205 
+01206 #if UIP_UDP
+01207 /**
+01208  * Representation of a uIP UDP connection.
+01209  */
+01210 struct uip_udp_conn {
+01211   uip_ipaddr_t ripaddr;   /**< The IP address of the remote peer. */
+01212   u16_t lport;        /**< The local port number in network byte order. */
+01213   u16_t rport;        /**< The remote port number in network byte order. */
+01214   u8_t  ttl;          /**< Default time-to-live. */
+01215 
+01216   /** The application state. */
+01217   uip_udp_appstate_t appstate;
+01218 };
+01219 
+01220 /**
+01221  * The current UDP connection.
+01222  */
+01223 extern struct uip_udp_conn *uip_udp_conn;
+01224 extern struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS];
+01225 #endif /* UIP_UDP */
+01226 
+01227 /**
+01228  * The structure holding the TCP/IP statistics that are gathered if
+01229  * UIP_STATISTICS is set to 1.
+01230  *
+01231  */
+01232 struct uip_stats {
+01233   struct {
+01234     uip_stats_t drop;     /**< Number of dropped packets at the IP
+01235                              layer. */
+01236     uip_stats_t recv;     /**< Number of received packets at the IP
+01237                              layer. */
+01238     uip_stats_t sent;     /**< Number of sent packets at the IP
+01239                              layer. */
+01240     uip_stats_t vhlerr;   /**< Number of packets dropped due to wrong
+01241                              IP version or header length. */
+01242     uip_stats_t hblenerr; /**< Number of packets dropped due to wrong
+01243                              IP length, high byte. */
+01244     uip_stats_t lblenerr; /**< Number of packets dropped due to wrong
+01245                              IP length, low byte. */
+01246     uip_stats_t fragerr;  /**< Number of packets dropped since they
+01247                              were IP fragments. */
+01248     uip_stats_t chkerr;   /**< Number of packets dropped due to IP
+01249                              checksum errors. */
+01250     uip_stats_t protoerr; /**< Number of packets dropped since they
+01251                              were neither ICMP, UDP nor TCP. */
+01252   } ip;                   /**< IP statistics. */
+01253   struct {
+01254     uip_stats_t drop;     /**< Number of dropped ICMP packets. */
+01255     uip_stats_t recv;     /**< Number of received ICMP packets. */
+01256     uip_stats_t sent;     /**< Number of sent ICMP packets. */
+01257     uip_stats_t typeerr;  /**< Number of ICMP packets with a wrong
+01258                              type. */
+01259   } icmp;                 /**< ICMP statistics. */
+01260   struct {
+01261     uip_stats_t drop;     /**< Number of dropped TCP segments. */
+01262     uip_stats_t recv;     /**< Number of recived TCP segments. */
+01263     uip_stats_t sent;     /**< Number of sent TCP segments. */
+01264     uip_stats_t chkerr;   /**< Number of TCP segments with a bad
+01265                              checksum. */
+01266     uip_stats_t ackerr;   /**< Number of TCP segments with a bad ACK
+01267                              number. */
+01268     uip_stats_t rst;      /**< Number of recevied TCP RST (reset) segments. */
+01269     uip_stats_t rexmit;   /**< Number of retransmitted TCP segments. */
+01270     uip_stats_t syndrop;  /**< Number of dropped SYNs due to too few
+01271                              connections was avaliable. */
+01272     uip_stats_t synrst;   /**< Number of SYNs for closed ports,
+01273                              triggering a RST. */
+01274   } tcp;                  /**< TCP statistics. */
+01275 #if UIP_UDP
+01276   struct {
+01277     uip_stats_t drop;     /**< Number of dropped UDP segments. */
+01278     uip_stats_t recv;     /**< Number of recived UDP segments. */
+01279     uip_stats_t sent;     /**< Number of sent UDP segments. */
+01280     uip_stats_t chkerr;   /**< Number of UDP segments with a bad
+01281                              checksum. */
+01282   } udp;                  /**< UDP statistics. */
+01283 #endif /* UIP_UDP */
+01284 };
+01285 
+01286 /**
+01287  * The uIP TCP/IP statistics.
+01288  *
+01289  * This is the variable in which the uIP TCP/IP statistics are gathered.
+01290  */
+01291 extern struct uip_stats uip_stat;
+01292 
+01293 
+01294 /*---------------------------------------------------------------------------*/
+01295 /* All the stuff below this point is internal to uIP and should not be
+01296  * used directly by an application or by a device driver.
+01297  */
+01298 /*---------------------------------------------------------------------------*/
+01299 /* u8_t uip_flags:
+01300  *
+01301  * When the application is called, uip_flags will contain the flags
+01302  * that are defined in this file. Please read below for more
+01303  * infomation.
+01304  */
+01305 extern u8_t uip_flags;
+01306 
+01307 /* The following flags may be set in the global variable uip_flags
+01308    before calling the application callback. The UIP_ACKDATA,
+01309    UIP_NEWDATA, and UIP_CLOSE flags may both be set at the same time,
+01310    whereas the others are mutualy exclusive. Note that these flags
+01311    should *NOT* be accessed directly, but only through the uIP
+01312    functions/macros. */
+01313 
+01314 #define UIP_ACKDATA   1     /* Signifies that the outstanding data was
+01315                                acked and the application should send
+01316                                out new data instead of retransmitting
+01317                                the last data. */
+01318 #define UIP_NEWDATA   2     /* Flags the fact that the peer has sent
+01319                                us new data. */
+01320 #define UIP_REXMIT    4     /* Tells the application to retransmit the
+01321                                data that was last sent. */
+01322 #define UIP_POLL      8     /* Used for polling the application, to
+01323                                check if the application has data that
+01324                                it wants to send. */
+01325 #define UIP_CLOSE     16    /* The remote host has closed the
+01326                                connection, thus the connection has
+01327                                gone away. Or the application signals
+01328                                that it wants to close the
+01329                                connection. */
+01330 #define UIP_ABORT     32    /* The remote host has aborted the
+01331                                connection, thus the connection has
+01332                                gone away. Or the application signals
+01333                                that it wants to abort the
+01334                                connection. */
+01335 #define UIP_CONNECTED 64    /* We have got a connection from a remote
+01336                                host and have set up a new connection
+01337                                for it, or an active connection has
+01338                                been successfully established. */
+01339 
+01340 #define UIP_TIMEDOUT  128   /* The connection has been aborted due to
+01341                                too many retransmissions. */
+01342 
+01343 /* uip_process(flag):
+01344  *
+01345  * The actual uIP function which does all the work.
+01346  */
+01347 void uip_process(u8_t flag);
+01348 
+01349 /* The following flags are passed as an argument to the uip_process()
+01350    function. They are used to distinguish between the two cases where
+01351    uip_process() is called. It can be called either because we have
+01352    incoming data that should be processed, or because the periodic
+01353    timer has fired. These values are never used directly, but only in
+01354    the macrose defined in this file. */
+01355  
+01356 #define UIP_DATA          1     /* Tells uIP that there is incoming
+01357                                    data in the uip_buf buffer. The
+01358                                    length of the data is stored in the
+01359                                    global variable uip_len. */
+01360 #define UIP_TIMER         2     /* Tells uIP that the periodic timer
+01361                                    has fired. */
+01362 #define UIP_POLL_REQUEST  3     /* Tells uIP that a connection should
+01363                                    be polled. */
+01364 #define UIP_UDP_SEND_CONN 4     /* Tells uIP that a UDP datagram
+01365                                    should be constructed in the
+01366                                    uip_buf buffer. */
+01367 #if UIP_UDP
+01368 #define UIP_UDP_TIMER     5
+01369 #endif /* UIP_UDP */
+01370 
+01371 /* The TCP states used in the uip_conn->tcpstateflags. */
+01372 #define UIP_CLOSED      0
+01373 #define UIP_SYN_RCVD    1
+01374 #define UIP_SYN_SENT    2
+01375 #define UIP_ESTABLISHED 3
+01376 #define UIP_FIN_WAIT_1  4
+01377 #define UIP_FIN_WAIT_2  5
+01378 #define UIP_CLOSING     6
+01379 #define UIP_TIME_WAIT   7
+01380 #define UIP_LAST_ACK    8
+01381 #define UIP_TS_MASK     15
+01382   
+01383 #define UIP_STOPPED      16
+01384 
+01385 /* The TCP and IP headers. */
+01386 struct uip_tcpip_hdr {
+01387 #if UIP_CONF_IPV6
+01388   /* IPv6 header. */
+01389   u8_t vtc,
+01390     tcflow;
+01391   u16_t flow;
+01392   u8_t len[2];
+01393   u8_t proto, ttl;
+01394   uip_ip6addr_t srcipaddr, destipaddr;
+01395 #else /* UIP_CONF_IPV6 */
+01396   /* IPv4 header. */
+01397   u8_t vhl,
+01398     tos,
+01399     len[2],
+01400     ipid[2],
+01401     ipoffset[2],
+01402     ttl,
+01403     proto;
+01404   u16_t ipchksum;
+01405   u16_t srcipaddr[2],
+01406     destipaddr[2];
+01407 #endif /* UIP_CONF_IPV6 */
+01408   
+01409   /* TCP header. */
+01410   u16_t srcport,
+01411     destport;
+01412   u8_t seqno[4],
+01413     ackno[4],
+01414     tcpoffset,
+01415     flags,
+01416     wnd[2];
+01417   u16_t tcpchksum;
+01418   u8_t urgp[2];
+01419   u8_t optdata[4];
+01420 };
+01421 
+01422 /* The ICMP and IP headers. */
+01423 struct uip_icmpip_hdr {
+01424 #if UIP_CONF_IPV6
+01425   /* IPv6 header. */
+01426   u8_t vtc,
+01427     tcf;
+01428   u16_t flow;
+01429   u8_t len[2];
+01430   u8_t proto, ttl;
+01431   uip_ip6addr_t srcipaddr, destipaddr;
+01432 #else /* UIP_CONF_IPV6 */
+01433   /* IPv4 header. */
+01434   u8_t vhl,
+01435     tos,
+01436     len[2],
+01437     ipid[2],
+01438     ipoffset[2],
+01439     ttl,
+01440     proto;
+01441   u16_t ipchksum;
+01442   u16_t srcipaddr[2],
+01443     destipaddr[2];
+01444 #endif /* UIP_CONF_IPV6 */
+01445   
+01446   /* ICMP (echo) header. */
+01447   u8_t type, icode;
+01448   u16_t icmpchksum;
+01449 #if !UIP_CONF_IPV6
+01450   u16_t id, seqno;
+01451 #else /* !UIP_CONF_IPV6 */
+01452   u8_t flags, reserved1, reserved2, reserved3;
+01453   u8_t icmp6data[16];
+01454   u8_t options[1];
+01455 #endif /* !UIP_CONF_IPV6 */
+01456 };
+01457 
+01458 
+01459 /* The UDP and IP headers. */
+01460 struct uip_udpip_hdr {
+01461 #if UIP_CONF_IPV6
+01462   /* IPv6 header. */
+01463   u8_t vtc,
+01464     tcf;
+01465   u16_t flow;
+01466   u8_t len[2];
+01467   u8_t proto, ttl;
+01468   uip_ip6addr_t srcipaddr, destipaddr;
+01469 #else /* UIP_CONF_IPV6 */
+01470   /* IP header. */
+01471   u8_t vhl,
+01472     tos,
+01473     len[2],
+01474     ipid[2],
+01475     ipoffset[2],
+01476     ttl,
+01477     proto;
+01478   u16_t ipchksum;
+01479   u16_t srcipaddr[2],
+01480     destipaddr[2];
+01481 #endif /* UIP_CONF_IPV6 */
+01482   
+01483   /* UDP header. */
+01484   u16_t srcport,
+01485     destport;
+01486   u16_t udplen;
+01487   u16_t udpchksum;
+01488 };
+01489 
+01490 
+01491 
+01492 /**
+01493  * The buffer size available for user data in the \ref uip_buf buffer.
+01494  *
+01495  * This macro holds the available size for user data in the \ref
+01496  * uip_buf buffer. The macro is intended to be used for checking
+01497  * bounds of available user data.
+01498  *
+01499  * Example:
+01500  \code
+01501  snprintf(uip_appdata, UIP_APPDATA_SIZE, "%u\n", i);
+01502  \endcode
+01503  *
+01504  * \hideinitializer
+01505  */
+01506 #define UIP_APPDATA_SIZE (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
+01507 
+01508 
+01509 #define UIP_PROTO_ICMP  1
+01510 #define UIP_PROTO_TCP   6
+01511 #define UIP_PROTO_UDP   17
+01512 #define UIP_PROTO_ICMP6 58
+01513 
+01514 /* Header sizes. */
+01515 #if UIP_CONF_IPV6
+01516 #define UIP_IPH_LEN    40
+01517 #else /* UIP_CONF_IPV6 */
+01518 #define UIP_IPH_LEN    20    /* Size of IP header */
+01519 #endif /* UIP_CONF_IPV6 */
+01520 #define UIP_UDPH_LEN    8    /* Size of UDP header */
+01521 #define UIP_TCPH_LEN   20    /* Size of TCP header */
+01522 #define UIP_IPUDPH_LEN (UIP_UDPH_LEN + UIP_IPH_LEN)    /* Size of IP +
+01523                                                           UDP
+01524                                                           header */
+01525 #define UIP_IPTCPH_LEN (UIP_TCPH_LEN + UIP_IPH_LEN)    /* Size of IP +
+01526                                                           TCP
+01527                                                           header */
+01528 #define UIP_TCPIP_HLEN UIP_IPTCPH_LEN
+01529 
+01530 
+01531 #if UIP_FIXEDADDR
+01532 extern const uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr;
+01533 #else /* UIP_FIXEDADDR */
+01534 extern uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr;
+01535 #endif /* UIP_FIXEDADDR */
+01536 
+01537 
+01538 
+01539 /**
+01540  * Representation of a 48-bit Ethernet address.
+01541  */
+01542 struct uip_eth_addr {
+01543   u8_t addr[6];
+01544 };
+01545 
+01546 /**
+01547  * Calculate the Internet checksum over a buffer.
+01548  *
+01549  * The Internet checksum is the one's complement of the one's
+01550  * complement sum of all 16-bit words in the buffer.
+01551  *
+01552  * See RFC1071.
+01553  *
+01554  * \param buf A pointer to the buffer over which the checksum is to be
+01555  * computed.
+01556  *
+01557  * \param len The length of the buffer over which the checksum is to
+01558  * be computed.
+01559  *
+01560  * \return The Internet checksum of the buffer.
+01561  */
+01562 u16_t uip_chksum(u16_t *buf, u16_t len);
+01563 
+01564 /**
+01565  * Calculate the IP header checksum of the packet header in uip_buf.
+01566  *
+01567  * The IP header checksum is the Internet checksum of the 20 bytes of
+01568  * the IP header.
+01569  *
+01570  * \return The IP header checksum of the IP header in the uip_buf
+01571  * buffer.
+01572  */
+01573 u16_t uip_ipchksum(void);
+01574 
+01575 /**
+01576  * Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
+01577  *
+01578  * The TCP checksum is the Internet checksum of data contents of the
+01579  * TCP segment, and a pseudo-header as defined in RFC793.
+01580  *
+01581  * \return The TCP checksum of the TCP segment in uip_buf and pointed
+01582  * to by uip_appdata.
+01583  */
+01584 u16_t uip_tcpchksum(void);
+01585 
+01586 /**
+01587  * Calculate the UDP checksum of the packet in uip_buf and uip_appdata.
+01588  *
+01589  * The UDP checksum is the Internet checksum of data contents of the
+01590  * UDP segment, and a pseudo-header as defined in RFC768.
+01591  *
+01592  * \return The UDP checksum of the UDP segment in uip_buf and pointed
+01593  * to by uip_appdata.
+01594  */
+01595 u16_t uip_udpchksum(void);
+01596 
+01597 
+01598 #endif /* __UIP_H__ */
+01599 
+01600 
+01601 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00203.html b/components/net/uip/doc/html/a00203.html new file mode 100644 index 0000000000000000000000000000000000000000..acdd37f1dea94eed2befad3c8c77f45e2b9bffb2 --- /dev/null +++ b/components/net/uip/doc/html/a00203.html @@ -0,0 +1,163 @@ + + +uIP 1.0: uip/uip_arch.h Source File + + + + + + +

uip/uip_arch.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup uip
+00003  * {@
+00004  */
+00005 
+00006 /**
+00007  * \defgroup uiparch Architecture specific uIP functions
+00008  * @{
+00009  *
+00010  * The functions in the architecture specific module implement the IP
+00011  * check sum and 32-bit additions.
+00012  *
+00013  * The IP checksum calculation is the most computationally expensive
+00014  * operation in the TCP/IP stack and it therefore pays off to
+00015  * implement this in efficient assembler. The purpose of the uip-arch
+00016  * module is to let the checksum functions to be implemented in
+00017  * architecture specific assembler.
+00018  *
+00019  */
+00020 
+00021 /**
+00022  * \file
+00023  * Declarations of architecture specific functions.
+00024  * \author Adam Dunkels <adam@dunkels.com>
+00025  */
+00026 
+00027 /*
+00028  * Copyright (c) 2001, Adam Dunkels.
+00029  * All rights reserved.
+00030  *
+00031  * Redistribution and use in source and binary forms, with or without
+00032  * modification, are permitted provided that the following conditions
+00033  * are met:
+00034  * 1. Redistributions of source code must retain the above copyright
+00035  *    notice, this list of conditions and the following disclaimer.
+00036  * 2. Redistributions in binary form must reproduce the above copyright
+00037  *    notice, this list of conditions and the following disclaimer in the
+00038  *    documentation and/or other materials provided with the distribution.
+00039  * 3. The name of the author may not be used to endorse or promote
+00040  *    products derived from this software without specific prior
+00041  *    written permission.
+00042  *
+00043  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00044  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00045  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00046  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00047  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00048  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00049  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00050  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00051  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00052  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00053  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00054  *
+00055  * This file is part of the uIP TCP/IP stack.
+00056  *
+00057  * $Id: uip_arch.h,v 1.2 2006/06/07 09:15:19 adam Exp $
+00058  *
+00059  */
+00060 
+00061 #ifndef __UIP_ARCH_H__
+00062 #define __UIP_ARCH_H__
+00063 
+00064 #include "uip.h"
+00065 
+00066 /**
+00067  * Carry out a 32-bit addition.
+00068  *
+00069  * Because not all architectures for which uIP is intended has native
+00070  * 32-bit arithmetic, uIP uses an external C function for doing the
+00071  * required 32-bit additions in the TCP protocol processing. This
+00072  * function should add the two arguments and place the result in the
+00073  * global variable uip_acc32.
+00074  *
+00075  * \note The 32-bit integer pointed to by the op32 parameter and the
+00076  * result in the uip_acc32 variable are in network byte order (big
+00077  * endian).
+00078  *
+00079  * \param op32 A pointer to a 4-byte array representing a 32-bit
+00080  * integer in network byte order (big endian).
+00081  *
+00082  * \param op16 A 16-bit integer in host byte order.
+00083  */
+00084 void uip_add32(u8_t *op32, u16_t op16);
+00085 
+00086 /**
+00087  * Calculate the Internet checksum over a buffer.
+00088  *
+00089  * The Internet checksum is the one's complement of the one's
+00090  * complement sum of all 16-bit words in the buffer.
+00091  *
+00092  * See RFC1071.
+00093  *
+00094  * \note This function is not called in the current version of uIP,
+00095  * but future versions might make use of it.
+00096  *
+00097  * \param buf A pointer to the buffer over which the checksum is to be
+00098  * computed.
+00099  *
+00100  * \param len The length of the buffer over which the checksum is to
+00101  * be computed.
+00102  *
+00103  * \return The Internet checksum of the buffer.
+00104  */
+00105 u16_t uip_chksum(u16_t *buf, u16_t len);
+00106 
+00107 /**
+00108  * Calculate the IP header checksum of the packet header in uip_buf.
+00109  *
+00110  * The IP header checksum is the Internet checksum of the 20 bytes of
+00111  * the IP header.
+00112  *
+00113  * \return The IP header checksum of the IP header in the uip_buf
+00114  * buffer.
+00115  */
+00116 u16_t uip_ipchksum(void);
+00117 
+00118 /**
+00119  * Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
+00120  *
+00121  * The TCP checksum is the Internet checksum of data contents of the
+00122  * TCP segment, and a pseudo-header as defined in RFC793.
+00123  *
+00124  * \note The uip_appdata pointer that points to the packet data may
+00125  * point anywhere in memory, so it is not possible to simply calculate
+00126  * the Internet checksum of the contents of the uip_buf buffer.
+00127  *
+00128  * \return The TCP checksum of the TCP segment in uip_buf and pointed
+00129  * to by uip_appdata.
+00130  */
+00131 u16_t uip_tcpchksum(void);
+00132 
+00133 u16_t uip_udpchksum(void);
+00134 
+00135 /** @} */
+00136 /** @} */
+00137 
+00138 #endif /* __UIP_ARCH_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00204.html b/components/net/uip/doc/html/a00204.html new file mode 100644 index 0000000000000000000000000000000000000000..def45e93bbd1d4dfd9adf37a036949bd03357e5d --- /dev/null +++ b/components/net/uip/doc/html/a00204.html @@ -0,0 +1,448 @@ + + +uIP 1.0: uip/uip_arp.c Source File + + + + + + +

uip/uip_arp.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup uip
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup uiparp uIP Address Resolution Protocol
+00008  * @{
+00009  *
+00010  * The Address Resolution Protocol ARP is used for mapping between IP
+00011  * addresses and link level addresses such as the Ethernet MAC
+00012  * addresses. ARP uses broadcast queries to ask for the link level
+00013  * address of a known IP address and the host which is configured with
+00014  * the IP address for which the query was meant, will respond with its
+00015  * link level address.
+00016  *
+00017  * \note This ARP implementation only supports Ethernet.
+00018  */
+00019  
+00020 /**
+00021  * \file
+00022  * Implementation of the ARP Address Resolution Protocol.
+00023  * \author Adam Dunkels <adam@dunkels.com>
+00024  *
+00025  */
+00026 
+00027 /*
+00028  * Copyright (c) 2001-2003, Adam Dunkels.
+00029  * All rights reserved.
+00030  *
+00031  * Redistribution and use in source and binary forms, with or without
+00032  * modification, are permitted provided that the following conditions
+00033  * are met:
+00034  * 1. Redistributions of source code must retain the above copyright
+00035  *    notice, this list of conditions and the following disclaimer.
+00036  * 2. Redistributions in binary form must reproduce the above copyright
+00037  *    notice, this list of conditions and the following disclaimer in the
+00038  *    documentation and/or other materials provided with the distribution.
+00039  * 3. The name of the author may not be used to endorse or promote
+00040  *    products derived from this software without specific prior
+00041  *    written permission.
+00042  *
+00043  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00044  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00045  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00046  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00047  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00048  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00049  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00050  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00051  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00052  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00053  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00054  *
+00055  * This file is part of the uIP TCP/IP stack.
+00056  *
+00057  * $Id: uip_arp.c,v 1.8 2006/06/02 23:36:21 adam Exp $
+00058  *
+00059  */
+00060 
+00061 
+00062 #include "uip_arp.h"
+00063 
+00064 #include <string.h>
+00065 
+00066 struct arp_hdr {
+00067   struct uip_eth_hdr ethhdr;
+00068   u16_t hwtype;
+00069   u16_t protocol;
+00070   u8_t hwlen;
+00071   u8_t protolen;
+00072   u16_t opcode;
+00073   struct uip_eth_addr shwaddr;
+00074   u16_t sipaddr[2];
+00075   struct uip_eth_addr dhwaddr;
+00076   u16_t dipaddr[2];
+00077 };
+00078 
+00079 struct ethip_hdr {
+00080   struct uip_eth_hdr ethhdr;
+00081   /* IP header. */
+00082   u8_t vhl,
+00083     tos,
+00084     len[2],
+00085     ipid[2],
+00086     ipoffset[2],
+00087     ttl,
+00088     proto;
+00089   u16_t ipchksum;
+00090   u16_t srcipaddr[2],
+00091     destipaddr[2];
+00092 };
+00093 
+00094 #define ARP_REQUEST 1
+00095 #define ARP_REPLY   2
+00096 
+00097 #define ARP_HWTYPE_ETH 1
+00098 
+00099 struct arp_entry {
+00100   u16_t ipaddr[2];
+00101   struct uip_eth_addr ethaddr;
+00102   u8_t time;
+00103 };
+00104 
+00105 static const struct uip_eth_addr broadcast_ethaddr =
+00106   {{0xff,0xff,0xff,0xff,0xff,0xff}};
+00107 static const u16_t broadcast_ipaddr[2] = {0xffff,0xffff};
+00108 
+00109 static struct arp_entry arp_table[UIP_ARPTAB_SIZE];
+00110 static u16_t ipaddr[2];
+00111 static u8_t i, c;
+00112 
+00113 static u8_t arptime;
+00114 static u8_t tmpage;
+00115 
+00116 #define BUF   ((struct arp_hdr *)&uip_buf[0])
+00117 #define IPBUF ((struct ethip_hdr *)&uip_buf[0])
+00118 /*-----------------------------------------------------------------------------------*/
+00119 /**
+00120  * Initialize the ARP module.
+00121  *
+00122  */
+00123 /*-----------------------------------------------------------------------------------*/
+00124 void
+00125 uip_arp_init(void)
+00126 {
+00127   for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
+00128     memset(arp_table[i].ipaddr, 0, 4);
+00129   }
+00130 }
+00131 /*-----------------------------------------------------------------------------------*/
+00132 /**
+00133  * Periodic ARP processing function.
+00134  *
+00135  * This function performs periodic timer processing in the ARP module
+00136  * and should be called at regular intervals. The recommended interval
+00137  * is 10 seconds between the calls.
+00138  *
+00139  */
+00140 /*-----------------------------------------------------------------------------------*/
+00141 void
+00142 uip_arp_timer(void)
+00143 {
+00144   struct arp_entry *tabptr;
+00145   
+00146   ++arptime;
+00147   for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
+00148     tabptr = &arp_table[i];
+00149     if((tabptr->ipaddr[0] | tabptr->ipaddr[1]) != 0 &&
+00150        arptime - tabptr->time >= UIP_ARP_MAXAGE) {
+00151       memset(tabptr->ipaddr, 0, 4);
+00152     }
+00153   }
+00154 
+00155 }
+00156 /*-----------------------------------------------------------------------------------*/
+00157 static void
+00158 uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr)
+00159 {
+00160   register struct arp_entry *tabptr;
+00161   /* Walk through the ARP mapping table and try to find an entry to
+00162      update. If none is found, the IP -> MAC address mapping is
+00163      inserted in the ARP table. */
+00164   for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
+00165 
+00166     tabptr = &arp_table[i];
+00167     /* Only check those entries that are actually in use. */
+00168     if(tabptr->ipaddr[0] != 0 &&
+00169        tabptr->ipaddr[1] != 0) {
+00170 
+00171       /* Check if the source IP address of the incoming packet matches
+00172          the IP address in this ARP table entry. */
+00173       if(ipaddr[0] == tabptr->ipaddr[0] &&
+00174          ipaddr[1] == tabptr->ipaddr[1]) {
+00175          
+00176         /* An old entry found, update this and return. */
+00177         memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6);
+00178         tabptr->time = arptime;
+00179 
+00180         return;
+00181       }
+00182     }
+00183   }
+00184 
+00185   /* If we get here, no existing ARP table entry was found, so we
+00186      create one. */
+00187 
+00188   /* First, we try to find an unused entry in the ARP table. */
+00189   for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
+00190     tabptr = &arp_table[i];
+00191     if(tabptr->ipaddr[0] == 0 &&
+00192        tabptr->ipaddr[1] == 0) {
+00193       break;
+00194     }
+00195   }
+00196 
+00197   /* If no unused entry is found, we try to find the oldest entry and
+00198      throw it away. */
+00199   if(i == UIP_ARPTAB_SIZE) {
+00200     tmpage = 0;
+00201     c = 0;
+00202     for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
+00203       tabptr = &arp_table[i];
+00204       if(arptime - tabptr->time > tmpage) {
+00205         tmpage = arptime - tabptr->time;
+00206         c = i;
+00207       }
+00208     }
+00209     i = c;
+00210     tabptr = &arp_table[i];
+00211   }
+00212 
+00213   /* Now, i is the ARP table entry which we will fill with the new
+00214      information. */
+00215   memcpy(tabptr->ipaddr, ipaddr, 4);
+00216   memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6);
+00217   tabptr->time = arptime;
+00218 }
+00219 /*-----------------------------------------------------------------------------------*/
+00220 /**
+00221  * ARP processing for incoming IP packets
+00222  *
+00223  * This function should be called by the device driver when an IP
+00224  * packet has been received. The function will check if the address is
+00225  * in the ARP cache, and if so the ARP cache entry will be
+00226  * refreshed. If no ARP cache entry was found, a new one is created.
+00227  *
+00228  * This function expects an IP packet with a prepended Ethernet header
+00229  * in the uip_buf[] buffer, and the length of the packet in the global
+00230  * variable uip_len.
+00231  */
+00232 /*-----------------------------------------------------------------------------------*/
+00233 #if 0
+00234 void
+00235 uip_arp_ipin(void)
+00236 {
+00237   uip_len -= sizeof(struct uip_eth_hdr);
+00238         
+00239   /* Only insert/update an entry if the source IP address of the
+00240      incoming IP packet comes from a host on the local network. */
+00241   if((IPBUF->srcipaddr[0] & uip_netmask[0]) !=
+00242      (uip_hostaddr[0] & uip_netmask[0])) {
+00243     return;
+00244   }
+00245   if((IPBUF->srcipaddr[1] & uip_netmask[1]) !=
+00246      (uip_hostaddr[1] & uip_netmask[1])) {
+00247     return;
+00248   }
+00249   uip_arp_update(IPBUF->srcipaddr, &(IPBUF->ethhdr.src));
+00250   
+00251   return;
+00252 }
+00253 #endif /* 0 */
+00254 /*-----------------------------------------------------------------------------------*/
+00255 /**
+00256  * ARP processing for incoming ARP packets.
+00257  *
+00258  * This function should be called by the device driver when an ARP
+00259  * packet has been received. The function will act differently
+00260  * depending on the ARP packet type: if it is a reply for a request
+00261  * that we previously sent out, the ARP cache will be filled in with
+00262  * the values from the ARP reply. If the incoming ARP packet is an ARP
+00263  * request for our IP address, an ARP reply packet is created and put
+00264  * into the uip_buf[] buffer.
+00265  *
+00266  * When the function returns, the value of the global variable uip_len
+00267  * indicates whether the device driver should send out a packet or
+00268  * not. If uip_len is zero, no packet should be sent. If uip_len is
+00269  * non-zero, it contains the length of the outbound packet that is
+00270  * present in the uip_buf[] buffer.
+00271  *
+00272  * This function expects an ARP packet with a prepended Ethernet
+00273  * header in the uip_buf[] buffer, and the length of the packet in the
+00274  * global variable uip_len.
+00275  */
+00276 /*-----------------------------------------------------------------------------------*/
+00277 void
+00278 uip_arp_arpin(void)
+00279 {
+00280   
+00281   if(uip_len < sizeof(struct arp_hdr)) {
+00282     uip_len = 0;
+00283     return;
+00284   }
+00285   uip_len = 0;
+00286   
+00287   switch(BUF->opcode) {
+00288   case HTONS(ARP_REQUEST):
+00289     /* ARP request. If it asked for our address, we send out a
+00290        reply. */
+00291     if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) {
+00292       /* First, we register the one who made the request in our ARP
+00293          table, since it is likely that we will do more communication
+00294          with this host in the future. */
+00295       uip_arp_update(BUF->sipaddr, &BUF->shwaddr);
+00296       
+00297       /* The reply opcode is 2. */
+00298       BUF->opcode = HTONS(2);
+00299 
+00300       memcpy(BUF->dhwaddr.addr, BUF->shwaddr.addr, 6);
+00301       memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6);
+00302       memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6);
+00303       memcpy(BUF->ethhdr.dest.addr, BUF->dhwaddr.addr, 6);
+00304       
+00305       BUF->dipaddr[0] = BUF->sipaddr[0];
+00306       BUF->dipaddr[1] = BUF->sipaddr[1];
+00307       BUF->sipaddr[0] = uip_hostaddr[0];
+00308       BUF->sipaddr[1] = uip_hostaddr[1];
+00309 
+00310       BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP);
+00311       uip_len = sizeof(struct arp_hdr);
+00312     }
+00313     break;
+00314   case HTONS(ARP_REPLY):
+00315     /* ARP reply. We insert or update the ARP table if it was meant
+00316        for us. */
+00317     if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) {
+00318       uip_arp_update(BUF->sipaddr, &BUF->shwaddr);
+00319     }
+00320     break;
+00321   }
+00322 
+00323   return;
+00324 }
+00325 /*-----------------------------------------------------------------------------------*/
+00326 /**
+00327  * Prepend Ethernet header to an outbound IP packet and see if we need
+00328  * to send out an ARP request.
+00329  *
+00330  * This function should be called before sending out an IP packet. The
+00331  * function checks the destination IP address of the IP packet to see
+00332  * what Ethernet MAC address that should be used as a destination MAC
+00333  * address on the Ethernet.
+00334  *
+00335  * If the destination IP address is in the local network (determined
+00336  * by logical ANDing of netmask and our IP address), the function
+00337  * checks the ARP cache to see if an entry for the destination IP
+00338  * address is found. If so, an Ethernet header is prepended and the
+00339  * function returns. If no ARP cache entry is found for the
+00340  * destination IP address, the packet in the uip_buf[] is replaced by
+00341  * an ARP request packet for the IP address. The IP packet is dropped
+00342  * and it is assumed that they higher level protocols (e.g., TCP)
+00343  * eventually will retransmit the dropped packet.
+00344  *
+00345  * If the destination IP address is not on the local network, the IP
+00346  * address of the default router is used instead.
+00347  *
+00348  * When the function returns, a packet is present in the uip_buf[]
+00349  * buffer, and the length of the packet is in the global variable
+00350  * uip_len.
+00351  */
+00352 /*-----------------------------------------------------------------------------------*/
+00353 void
+00354 uip_arp_out(void)
+00355 {
+00356   struct arp_entry *tabptr;
+00357   
+00358   /* Find the destination IP address in the ARP table and construct
+00359      the Ethernet header. If the destination IP addres isn't on the
+00360      local network, we use the default router's IP address instead.
+00361 
+00362      If not ARP table entry is found, we overwrite the original IP
+00363      packet with an ARP request for the IP address. */
+00364 
+00365   /* First check if destination is a local broadcast. */
+00366   if(uip_ipaddr_cmp(IPBUF->destipaddr, broadcast_ipaddr)) {
+00367     memcpy(IPBUF->ethhdr.dest.addr, broadcast_ethaddr.addr, 6);
+00368   } else {
+00369     /* Check if the destination address is on the local network. */
+00370     if(!uip_ipaddr_maskcmp(IPBUF->destipaddr, uip_hostaddr, uip_netmask)) {
+00371       /* Destination address was not on the local network, so we need to
+00372          use the default router's IP address instead of the destination
+00373          address when determining the MAC address. */
+00374       uip_ipaddr_copy(ipaddr, uip_draddr);
+00375     } else {
+00376       /* Else, we use the destination IP address. */
+00377       uip_ipaddr_copy(ipaddr, IPBUF->destipaddr);
+00378     }
+00379       
+00380     for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
+00381       tabptr = &arp_table[i];
+00382       if(uip_ipaddr_cmp(ipaddr, tabptr->ipaddr)) {
+00383         break;
+00384       }
+00385     }
+00386 
+00387     if(i == UIP_ARPTAB_SIZE) {
+00388       /* The destination address was not in our ARP table, so we
+00389          overwrite the IP packet with an ARP request. */
+00390 
+00391       memset(BUF->ethhdr.dest.addr, 0xff, 6);
+00392       memset(BUF->dhwaddr.addr, 0x00, 6);
+00393       memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6);
+00394       memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6);
+00395     
+00396       uip_ipaddr_copy(BUF->dipaddr, ipaddr);
+00397       uip_ipaddr_copy(BUF->sipaddr, uip_hostaddr);
+00398       BUF->opcode = HTONS(ARP_REQUEST); /* ARP request. */
+00399       BUF->hwtype = HTONS(ARP_HWTYPE_ETH);
+00400       BUF->protocol = HTONS(UIP_ETHTYPE_IP);
+00401       BUF->hwlen = 6;
+00402       BUF->protolen = 4;
+00403       BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP);
+00404 
+00405       uip_appdata = &uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN];
+00406     
+00407       uip_len = sizeof(struct arp_hdr);
+00408       return;
+00409     }
+00410 
+00411     /* Build an ethernet header. */
+00412     memcpy(IPBUF->ethhdr.dest.addr, tabptr->ethaddr.addr, 6);
+00413   }
+00414   memcpy(IPBUF->ethhdr.src.addr, uip_ethaddr.addr, 6);
+00415   
+00416   IPBUF->ethhdr.type = HTONS(UIP_ETHTYPE_IP);
+00417 
+00418   uip_len += sizeof(struct uip_eth_hdr);
+00419 }
+00420 /*-----------------------------------------------------------------------------------*/
+00421 
+00422 /** @} */
+00423 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00205.html b/components/net/uip/doc/html/a00205.html new file mode 100644 index 0000000000000000000000000000000000000000..9d4feea8fc10eb57e704a61db7688950064e1880 --- /dev/null +++ b/components/net/uip/doc/html/a00205.html @@ -0,0 +1,169 @@ + + +uIP 1.0: uip/uip_arp.h Source File + + + + + + +

uip/uip_arp.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup uip
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \addtogroup uiparp
+00008  * @{
+00009  */
+00010  
+00011 /**
+00012  * \file
+00013  * Macros and definitions for the ARP module.
+00014  * \author Adam Dunkels <adam@dunkels.com>
+00015  */
+00016   
+00017 
+00018 /*
+00019  * Copyright (c) 2001-2003, Adam Dunkels.
+00020  * All rights reserved.
+00021  *
+00022  * Redistribution and use in source and binary forms, with or without
+00023  * modification, are permitted provided that the following conditions
+00024  * are met:
+00025  * 1. Redistributions of source code must retain the above copyright
+00026  *    notice, this list of conditions and the following disclaimer.
+00027  * 2. Redistributions in binary form must reproduce the above copyright
+00028  *    notice, this list of conditions and the following disclaimer in the
+00029  *    documentation and/or other materials provided with the distribution.
+00030  * 3. The name of the author may not be used to endorse or promote
+00031  *    products derived from this software without specific prior
+00032  *    written permission.
+00033  *
+00034  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00035  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00036  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00037  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00038  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00039  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00040  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00041  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00042  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00043  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00044  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00045  *
+00046  * This file is part of the uIP TCP/IP stack.
+00047  *
+00048  * $Id: uip_arp.h,v 1.5 2006/06/11 21:46:39 adam Exp $
+00049  *
+00050  */
+00051 
+00052 #ifndef __UIP_ARP_H__
+00053 #define __UIP_ARP_H__
+00054 
+00055 #include "uip.h"
+00056 
+00057 
+00058 extern struct uip_eth_addr uip_ethaddr;
+00059 
+00060 /**
+00061  * The Ethernet header.
+00062  */
+00063 struct uip_eth_hdr {
+00064   struct uip_eth_addr dest;
+00065   struct uip_eth_addr src;
+00066   u16_t type;
+00067 };
+00068 
+00069 #define UIP_ETHTYPE_ARP 0x0806
+00070 #define UIP_ETHTYPE_IP  0x0800
+00071 #define UIP_ETHTYPE_IP6 0x86dd
+00072 
+00073 
+00074 /* The uip_arp_init() function must be called before any of the other
+00075    ARP functions. */
+00076 void uip_arp_init(void);
+00077 
+00078 /* The uip_arp_ipin() function should be called whenever an IP packet
+00079    arrives from the Ethernet. This function refreshes the ARP table or
+00080    inserts a new mapping if none exists. The function assumes that an
+00081    IP packet with an Ethernet header is present in the uip_buf buffer
+00082    and that the length of the packet is in the uip_len variable. */
+00083 /*void uip_arp_ipin(void);*/
+00084 #define uip_arp_ipin()
+00085 
+00086 /* The uip_arp_arpin() should be called when an ARP packet is received
+00087    by the Ethernet driver. This function also assumes that the
+00088    Ethernet frame is present in the uip_buf buffer. When the
+00089    uip_arp_arpin() function returns, the contents of the uip_buf
+00090    buffer should be sent out on the Ethernet if the uip_len variable
+00091    is > 0. */
+00092 void uip_arp_arpin(void);
+00093 
+00094 /* The uip_arp_out() function should be called when an IP packet
+00095    should be sent out on the Ethernet. This function creates an
+00096    Ethernet header before the IP header in the uip_buf buffer. The
+00097    Ethernet header will have the correct Ethernet MAC destination
+00098    address filled in if an ARP table entry for the destination IP
+00099    address (or the IP address of the default router) is present. If no
+00100    such table entry is found, the IP packet is overwritten with an ARP
+00101    request and we rely on TCP to retransmit the packet that was
+00102    overwritten. In any case, the uip_len variable holds the length of
+00103    the Ethernet frame that should be transmitted. */
+00104 void uip_arp_out(void);
+00105 
+00106 /* The uip_arp_timer() function should be called every ten seconds. It
+00107    is responsible for flushing old entries in the ARP table. */
+00108 void uip_arp_timer(void);
+00109 
+00110 /** @} */
+00111 
+00112 /**
+00113  * \addtogroup uipconffunc
+00114  * @{
+00115  */
+00116 
+00117 
+00118 /**
+00119  * Specifiy the Ethernet MAC address.
+00120  *
+00121  * The ARP code needs to know the MAC address of the Ethernet card in
+00122  * order to be able to respond to ARP queries and to generate working
+00123  * Ethernet headers.
+00124  *
+00125  * \note This macro only specifies the Ethernet MAC address to the ARP
+00126  * code. It cannot be used to change the MAC address of the Ethernet
+00127  * card.
+00128  *
+00129  * \param eaddr A pointer to a struct uip_eth_addr containing the
+00130  * Ethernet MAC address of the Ethernet card.
+00131  *
+00132  * \hideinitializer
+00133  */
+00134 #define uip_setethaddr(eaddr) do {uip_ethaddr.addr[0] = eaddr.addr[0]; \
+00135                               uip_ethaddr.addr[1] = eaddr.addr[1];\
+00136                               uip_ethaddr.addr[2] = eaddr.addr[2];\
+00137                               uip_ethaddr.addr[3] = eaddr.addr[3];\
+00138                               uip_ethaddr.addr[4] = eaddr.addr[4];\
+00139                               uip_ethaddr.addr[5] = eaddr.addr[5];} while(0)
+00140 
+00141 /** @} */
+00142 /** @} */
+00143 
+00144 #endif /* __UIP_ARP_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00206.html b/components/net/uip/doc/html/a00206.html new file mode 100644 index 0000000000000000000000000000000000000000..3272565d245631402112f1fb3bcafdcf882202fb --- /dev/null +++ b/components/net/uip/doc/html/a00206.html @@ -0,0 +1,564 @@ + + +uIP 1.0: uip/uipopt.h Source File + + + + + + +

uip/uipopt.h

Go to the documentation of this file.
00001 /**
+00002  * \defgroup uipopt Configuration options for uIP
+00003  * @{
+00004  *
+00005  * uIP is configured using the per-project configuration file
+00006  * uipopt.h. This file contains all compile-time options for uIP and
+00007  * should be tweaked to match each specific project. The uIP
+00008  * distribution contains a documented example "uipopt.h" that can be
+00009  * copied and modified for each project.
+00010  *
+00011  * \note Most of the configuration options in the uipopt.h should not
+00012  * be changed, but rather the per-project uip-conf.h file.
+00013  */
+00014 
+00015 /**
+00016  * \file
+00017  * Configuration options for uIP.
+00018  * \author Adam Dunkels <adam@dunkels.com>
+00019  *
+00020  * This file is used for tweaking various configuration options for
+00021  * uIP. You should make a copy of this file into one of your project's
+00022  * directories instead of editing this example "uipopt.h" file that
+00023  * comes with the uIP distribution.
+00024  */
+00025 
+00026 /*
+00027  * Copyright (c) 2001-2003, Adam Dunkels.
+00028  * All rights reserved.
+00029  *
+00030  * Redistribution and use in source and binary forms, with or without
+00031  * modification, are permitted provided that the following conditions
+00032  * are met:
+00033  * 1. Redistributions of source code must retain the above copyright
+00034  *    notice, this list of conditions and the following disclaimer.
+00035  * 2. Redistributions in binary form must reproduce the above copyright
+00036  *    notice, this list of conditions and the following disclaimer in the
+00037  *    documentation and/or other materials provided with the distribution.
+00038  * 3. The name of the author may not be used to endorse or promote
+00039  *    products derived from this software without specific prior
+00040  *    written permission.
+00041  *
+00042  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00043  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00044  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00045  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00046  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00047  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00048  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00049  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00050  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00051  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00052  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00053  *
+00054  * This file is part of the uIP TCP/IP stack.
+00055  *
+00056  * $Id: uipopt.h,v 1.4 2006/06/12 08:00:31 adam Exp $
+00057  *
+00058  */
+00059 
+00060 #ifndef __UIPOPT_H__
+00061 #define __UIPOPT_H__
+00062 
+00063 #ifndef UIP_LITTLE_ENDIAN
+00064 #define UIP_LITTLE_ENDIAN  3412
+00065 #endif /* UIP_LITTLE_ENDIAN */
+00066 #ifndef UIP_BIG_ENDIAN
+00067 #define UIP_BIG_ENDIAN     1234
+00068 #endif /* UIP_BIG_ENDIAN */
+00069 
+00070 #include "uip-conf.h"
+00071 
+00072 /*------------------------------------------------------------------------------*/
+00073 
+00074 /**
+00075  * \name Static configuration options
+00076  * @{
+00077  *
+00078  * These configuration options can be used for setting the IP address
+00079  * settings statically, but only if UIP_FIXEDADDR is set to 1. The
+00080  * configuration options for a specific node includes IP address,
+00081  * netmask and default router as well as the Ethernet address. The
+00082  * netmask, default router and Ethernet address are appliciable only
+00083  * if uIP should be run over Ethernet.
+00084  *
+00085  * All of these should be changed to suit your project.
+00086 */
+00087 
+00088 /**
+00089  * Determines if uIP should use a fixed IP address or not.
+00090  *
+00091  * If uIP should use a fixed IP address, the settings are set in the
+00092  * uipopt.h file. If not, the macros uip_sethostaddr(),
+00093  * uip_setdraddr() and uip_setnetmask() should be used instead.
+00094  *
+00095  * \hideinitializer
+00096  */
+00097 #define UIP_FIXEDADDR    0
+00098 
+00099 /**
+00100  * Ping IP address asignment.
+00101  *
+00102  * uIP uses a "ping" packets for setting its own IP address if this
+00103  * option is set. If so, uIP will start with an empty IP address and
+00104  * the destination IP address of the first incoming "ping" (ICMP echo)
+00105  * packet will be used for setting the hosts IP address.
+00106  *
+00107  * \note This works only if UIP_FIXEDADDR is 0.
+00108  *
+00109  * \hideinitializer
+00110  */
+00111 #ifdef UIP_CONF_PINGADDRCONF
+00112 #define UIP_PINGADDRCONF UIP_CONF_PINGADDRCONF
+00113 #else /* UIP_CONF_PINGADDRCONF */
+00114 #define UIP_PINGADDRCONF 0
+00115 #endif /* UIP_CONF_PINGADDRCONF */
+00116 
+00117 
+00118 /**
+00119  * Specifies if the uIP ARP module should be compiled with a fixed
+00120  * Ethernet MAC address or not.
+00121  *
+00122  * If this configuration option is 0, the macro uip_setethaddr() can
+00123  * be used to specify the Ethernet address at run-time.
+00124  *
+00125  * \hideinitializer
+00126  */
+00127 #define UIP_FIXEDETHADDR 0
+00128 
+00129 /** @} */
+00130 /*------------------------------------------------------------------------------*/
+00131 /**
+00132  * \name IP configuration options
+00133  * @{
+00134  *
+00135  */
+00136 /**
+00137  * The IP TTL (time to live) of IP packets sent by uIP.
+00138  *
+00139  * This should normally not be changed.
+00140  */
+00141 #define UIP_TTL         64
+00142 
+00143 /**
+00144  * Turn on support for IP packet reassembly.
+00145  *
+00146  * uIP supports reassembly of fragmented IP packets. This features
+00147  * requires an additonal amount of RAM to hold the reassembly buffer
+00148  * and the reassembly code size is approximately 700 bytes.  The
+00149  * reassembly buffer is of the same size as the uip_buf buffer
+00150  * (configured by UIP_BUFSIZE).
+00151  *
+00152  * \note IP packet reassembly is not heavily tested.
+00153  *
+00154  * \hideinitializer
+00155  */
+00156 #define UIP_REASSEMBLY 0
+00157 
+00158 /**
+00159  * The maximum time an IP fragment should wait in the reassembly
+00160  * buffer before it is dropped.
+00161  *
+00162  */
+00163 #define UIP_REASS_MAXAGE 40
+00164 
+00165 /** @} */
+00166 
+00167 /*------------------------------------------------------------------------------*/
+00168 /**
+00169  * \name UDP configuration options
+00170  * @{
+00171  */
+00172 
+00173 /**
+00174  * Toggles wether UDP support should be compiled in or not.
+00175  *
+00176  * \hideinitializer
+00177  */
+00178 #ifdef UIP_CONF_UDP
+00179 #define UIP_UDP UIP_CONF_UDP
+00180 #else /* UIP_CONF_UDP */
+00181 #define UIP_UDP           0
+00182 #endif /* UIP_CONF_UDP */
+00183 
+00184 /**
+00185  * Toggles if UDP checksums should be used or not.
+00186  *
+00187  * \note Support for UDP checksums is currently not included in uIP,
+00188  * so this option has no function.
+00189  *
+00190  * \hideinitializer
+00191  */
+00192 #ifdef UIP_CONF_UDP_CHECKSUMS
+00193 #define UIP_UDP_CHECKSUMS UIP_CONF_UDP_CHECKSUMS
+00194 #else
+00195 #define UIP_UDP_CHECKSUMS 0
+00196 #endif
+00197 
+00198 /**
+00199  * The maximum amount of concurrent UDP connections.
+00200  *
+00201  * \hideinitializer
+00202  */
+00203 #ifdef UIP_CONF_UDP_CONNS
+00204 #define UIP_UDP_CONNS UIP_CONF_UDP_CONNS
+00205 #else /* UIP_CONF_UDP_CONNS */
+00206 #define UIP_UDP_CONNS    10
+00207 #endif /* UIP_CONF_UDP_CONNS */
+00208 
+00209 /**
+00210  * The name of the function that should be called when UDP datagrams arrive.
+00211  *
+00212  * \hideinitializer
+00213  */
+00214 
+00215 
+00216 /** @} */
+00217 /*------------------------------------------------------------------------------*/
+00218 /**
+00219  * \name TCP configuration options
+00220  * @{
+00221  */
+00222 
+00223 /**
+00224  * Determines if support for opening connections from uIP should be
+00225  * compiled in.
+00226  *
+00227  * If the applications that are running on top of uIP for this project
+00228  * do not need to open outgoing TCP connections, this configration
+00229  * option can be turned off to reduce the code size of uIP.
+00230  *
+00231  * \hideinitializer
+00232  */
+00233 #define UIP_ACTIVE_OPEN 1
+00234 
+00235 /**
+00236  * The maximum number of simultaneously open TCP connections.
+00237  *
+00238  * Since the TCP connections are statically allocated, turning this
+00239  * configuration knob down results in less RAM used. Each TCP
+00240  * connection requires approximatly 30 bytes of memory.
+00241  *
+00242  * \hideinitializer
+00243  */
+00244 #ifndef UIP_CONF_MAX_CONNECTIONS
+00245 #define UIP_CONNS       10
+00246 #else /* UIP_CONF_MAX_CONNECTIONS */
+00247 #define UIP_CONNS UIP_CONF_MAX_CONNECTIONS
+00248 #endif /* UIP_CONF_MAX_CONNECTIONS */
+00249 
+00250 
+00251 /**
+00252  * The maximum number of simultaneously listening TCP ports.
+00253  *
+00254  * Each listening TCP port requires 2 bytes of memory.
+00255  *
+00256  * \hideinitializer
+00257  */
+00258 #ifndef UIP_CONF_MAX_LISTENPORTS
+00259 #define UIP_LISTENPORTS 20
+00260 #else /* UIP_CONF_MAX_LISTENPORTS */
+00261 #define UIP_LISTENPORTS UIP_CONF_MAX_LISTENPORTS
+00262 #endif /* UIP_CONF_MAX_LISTENPORTS */
+00263 
+00264 /**
+00265  * Determines if support for TCP urgent data notification should be
+00266  * compiled in.
+00267  *
+00268  * Urgent data (out-of-band data) is a rarely used TCP feature that
+00269  * very seldom would be required.
+00270  *
+00271  * \hideinitializer
+00272  */
+00273 #define UIP_URGDATA      0
+00274 
+00275 /**
+00276  * The initial retransmission timeout counted in timer pulses.
+00277  *
+00278  * This should not be changed.
+00279  */
+00280 #define UIP_RTO         3
+00281 
+00282 /**
+00283  * The maximum number of times a segment should be retransmitted
+00284  * before the connection should be aborted.
+00285  *
+00286  * This should not be changed.
+00287  */
+00288 #define UIP_MAXRTX      8
+00289 
+00290 /**
+00291  * The maximum number of times a SYN segment should be retransmitted
+00292  * before a connection request should be deemed to have been
+00293  * unsuccessful.
+00294  *
+00295  * This should not need to be changed.
+00296  */
+00297 #define UIP_MAXSYNRTX      5
+00298 
+00299 /**
+00300  * The TCP maximum segment size.
+00301  *
+00302  * This is should not be to set to more than
+00303  * UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN.
+00304  */
+00305 #define UIP_TCP_MSS     (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
+00306 
+00307 /**
+00308  * The size of the advertised receiver's window.
+00309  *
+00310  * Should be set low (i.e., to the size of the uip_buf buffer) is the
+00311  * application is slow to process incoming data, or high (32768 bytes)
+00312  * if the application processes data quickly.
+00313  *
+00314  * \hideinitializer
+00315  */
+00316 #ifndef UIP_CONF_RECEIVE_WINDOW
+00317 #define UIP_RECEIVE_WINDOW UIP_TCP_MSS
+00318 #else
+00319 #define UIP_RECEIVE_WINDOW UIP_CONF_RECEIVE_WINDOW
+00320 #endif
+00321 
+00322 /**
+00323  * How long a connection should stay in the TIME_WAIT state.
+00324  *
+00325  * This configiration option has no real implication, and it should be
+00326  * left untouched.
+00327  */
+00328 #define UIP_TIME_WAIT_TIMEOUT 120
+00329 
+00330 
+00331 /** @} */
+00332 /*------------------------------------------------------------------------------*/
+00333 /**
+00334  * \name ARP configuration options
+00335  * @{
+00336  */
+00337 
+00338 /**
+00339  * The size of the ARP table.
+00340  *
+00341  * This option should be set to a larger value if this uIP node will
+00342  * have many connections from the local network.
+00343  *
+00344  * \hideinitializer
+00345  */
+00346 #ifdef UIP_CONF_ARPTAB_SIZE
+00347 #define UIP_ARPTAB_SIZE UIP_CONF_ARPTAB_SIZE
+00348 #else
+00349 #define UIP_ARPTAB_SIZE 8
+00350 #endif
+00351 
+00352 /**
+00353  * The maxium age of ARP table entries measured in 10ths of seconds.
+00354  *
+00355  * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD
+00356  * default).
+00357  */
+00358 #define UIP_ARP_MAXAGE 120
+00359 
+00360 /** @} */
+00361 
+00362 /*------------------------------------------------------------------------------*/
+00363 
+00364 /**
+00365  * \name General configuration options
+00366  * @{
+00367  */
+00368 
+00369 /**
+00370  * The size of the uIP packet buffer.
+00371  *
+00372  * The uIP packet buffer should not be smaller than 60 bytes, and does
+00373  * not need to be larger than 1500 bytes. Lower size results in lower
+00374  * TCP throughput, larger size results in higher TCP throughput.
+00375  *
+00376  * \hideinitializer
+00377  */
+00378 #ifndef UIP_CONF_BUFFER_SIZE
+00379 #define UIP_BUFSIZE     400
+00380 #else /* UIP_CONF_BUFFER_SIZE */
+00381 #define UIP_BUFSIZE UIP_CONF_BUFFER_SIZE
+00382 #endif /* UIP_CONF_BUFFER_SIZE */
+00383 
+00384 
+00385 /**
+00386  * Determines if statistics support should be compiled in.
+00387  *
+00388  * The statistics is useful for debugging and to show the user.
+00389  *
+00390  * \hideinitializer
+00391  */
+00392 #ifndef UIP_CONF_STATISTICS
+00393 #define UIP_STATISTICS  0
+00394 #else /* UIP_CONF_STATISTICS */
+00395 #define UIP_STATISTICS UIP_CONF_STATISTICS
+00396 #endif /* UIP_CONF_STATISTICS */
+00397 
+00398 /**
+00399  * Determines if logging of certain events should be compiled in.
+00400  *
+00401  * This is useful mostly for debugging. The function uip_log()
+00402  * must be implemented to suit the architecture of the project, if
+00403  * logging is turned on.
+00404  *
+00405  * \hideinitializer
+00406  */
+00407 #ifndef UIP_CONF_LOGGING
+00408 #define UIP_LOGGING     0
+00409 #else /* UIP_CONF_LOGGING */
+00410 #define UIP_LOGGING     UIP_CONF_LOGGING
+00411 #endif /* UIP_CONF_LOGGING */
+00412 
+00413 /**
+00414  * Broadcast support.
+00415  *
+00416  * This flag configures IP broadcast support. This is useful only
+00417  * together with UDP.
+00418  *
+00419  * \hideinitializer
+00420  *
+00421  */
+00422 #ifndef UIP_CONF_BROADCAST
+00423 #define UIP_BROADCAST 0
+00424 #else /* UIP_CONF_BROADCAST */
+00425 #define UIP_BROADCAST UIP_CONF_BROADCAST
+00426 #endif /* UIP_CONF_BROADCAST */
+00427 
+00428 /**
+00429  * Print out a uIP log message.
+00430  *
+00431  * This function must be implemented by the module that uses uIP, and
+00432  * is called by uIP whenever a log message is generated.
+00433  */
+00434 void uip_log(char *msg);
+00435 
+00436 /**
+00437  * The link level header length.
+00438  *
+00439  * This is the offset into the uip_buf where the IP header can be
+00440  * found. For Ethernet, this should be set to 14. For SLIP, this
+00441  * should be set to 0.
+00442  *
+00443  * \hideinitializer
+00444  */
+00445 #ifdef UIP_CONF_LLH_LEN
+00446 #define UIP_LLH_LEN UIP_CONF_LLH_LEN
+00447 #else /* UIP_CONF_LLH_LEN */
+00448 #define UIP_LLH_LEN     14
+00449 #endif /* UIP_CONF_LLH_LEN */
+00450 
+00451 /** @} */
+00452 /*------------------------------------------------------------------------------*/
+00453 /**
+00454  * \name CPU architecture configuration
+00455  * @{
+00456  *
+00457  * The CPU architecture configuration is where the endianess of the
+00458  * CPU on which uIP is to be run is specified. Most CPUs today are
+00459  * little endian, and the most notable exception are the Motorolas
+00460  * which are big endian. The BYTE_ORDER macro should be changed to
+00461  * reflect the CPU architecture on which uIP is to be run.
+00462  */
+00463 
+00464 /**
+00465  * The byte order of the CPU architecture on which uIP is to be run.
+00466  *
+00467  * This option can be either BIG_ENDIAN (Motorola byte order) or
+00468  * LITTLE_ENDIAN (Intel byte order).
+00469  *
+00470  * \hideinitializer
+00471  */
+00472 #ifdef UIP_CONF_BYTE_ORDER
+00473 #define UIP_BYTE_ORDER     UIP_CONF_BYTE_ORDER
+00474 #else /* UIP_CONF_BYTE_ORDER */
+00475 #define UIP_BYTE_ORDER     UIP_LITTLE_ENDIAN
+00476 #endif /* UIP_CONF_BYTE_ORDER */
+00477 
+00478 /** @} */
+00479 /*------------------------------------------------------------------------------*/
+00480 
+00481 /**
+00482  * \name Appication specific configurations
+00483  * @{
+00484  *
+00485  * An uIP application is implemented using a single application
+00486  * function that is called by uIP whenever a TCP/IP event occurs. The
+00487  * name of this function must be registered with uIP at compile time
+00488  * using the UIP_APPCALL definition.
+00489  *
+00490  * uIP applications can store the application state within the
+00491  * uip_conn structure by specifying the type of the application
+00492  * structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.
+00493  *
+00494  * The file containing the definitions must be included in the
+00495  * uipopt.h file.
+00496  *
+00497  * The following example illustrates how this can look.
+00498  \code
+00499 
+00500 void httpd_appcall(void);
+00501 #define UIP_APPCALL     httpd_appcall
+00502 
+00503 struct httpd_state {
+00504   u8_t state;
+00505   u16_t count;
+00506   char *dataptr;
+00507   char *script;
+00508 };
+00509 typedef struct httpd_state uip_tcp_appstate_t
+00510  \endcode
+00511  */
+00512 
+00513 /**
+00514  * \var #define UIP_APPCALL
+00515  *
+00516  * The name of the application function that uIP should call in
+00517  * response to TCP/IP events.
+00518  *
+00519  */
+00520 
+00521 /**
+00522  * \var typedef uip_tcp_appstate_t
+00523  *
+00524  * The type of the application state that is to be stored in the
+00525  * uip_conn structure. This usually is typedef:ed to a struct holding
+00526  * application state information.
+00527  */
+00528 
+00529 /**
+00530  * \var typedef uip_udp_appstate_t
+00531  *
+00532  * The type of the application state that is to be stored in the
+00533  * uip_conn structure. This usually is typedef:ed to a struct holding
+00534  * application state information.
+00535  */
+00536 /** @} */
+00537 /** @} */
+00538 
+00539 #endif /* __UIPOPT_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00207.html b/components/net/uip/doc/html/a00207.html new file mode 100644 index 0000000000000000000000000000000000000000..937d9a6de387d22c10997be85c08ccce46a11d5c --- /dev/null +++ b/components/net/uip/doc/html/a00207.html @@ -0,0 +1,182 @@ + + +uIP 1.0: unix/uip-conf.h Source File + + + + + + +

unix/uip-conf.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup uipopt
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \name Project-specific configuration options
+00008  * @{
+00009  *
+00010  * uIP has a number of configuration options that can be overridden
+00011  * for each project. These are kept in a project-specific uip-conf.h
+00012  * file and all configuration names have the prefix UIP_CONF.
+00013  */
+00014 
+00015 /*
+00016  * Copyright (c) 2006, Swedish Institute of Computer Science.
+00017  * All rights reserved.
+00018  *
+00019  * Redistribution and use in source and binary forms, with or without
+00020  * modification, are permitted provided that the following conditions
+00021  * are met:
+00022  * 1. Redistributions of source code must retain the above copyright
+00023  *    notice, this list of conditions and the following disclaimer.
+00024  * 2. Redistributions in binary form must reproduce the above copyright
+00025  *    notice, this list of conditions and the following disclaimer in the
+00026  *    documentation and/or other materials provided with the distribution.
+00027  * 3. Neither the name of the Institute nor the names of its contributors
+00028  *    may be used to endorse or promote products derived from this software
+00029  *    without specific prior written permission.
+00030  *
+00031  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00032  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00033  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00034  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00035  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00036  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00037  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00038  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00039  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00040  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00041  * SUCH DAMAGE.
+00042  *
+00043  * This file is part of the uIP TCP/IP stack
+00044  *
+00045  * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $
+00046  */
+00047 
+00048 /**
+00049  * \file
+00050  *         An example uIP configuration file
+00051  * \author
+00052  *         Adam Dunkels <adam@sics.se>
+00053  */
+00054 
+00055 #ifndef __UIP_CONF_H__
+00056 #define __UIP_CONF_H__
+00057 
+00058 #include <inttypes.h>
+00059 
+00060 /**
+00061  * 8 bit datatype
+00062  *
+00063  * This typedef defines the 8-bit type used throughout uIP.
+00064  *
+00065  * \hideinitializer
+00066  */
+00067 typedef uint8_t u8_t;
+00068 
+00069 /**
+00070  * 16 bit datatype
+00071  *
+00072  * This typedef defines the 16-bit type used throughout uIP.
+00073  *
+00074  * \hideinitializer
+00075  */
+00076 typedef uint16_t u16_t;
+00077 
+00078 /**
+00079  * Statistics datatype
+00080  *
+00081  * This typedef defines the dataype used for keeping statistics in
+00082  * uIP.
+00083  *
+00084  * \hideinitializer
+00085  */
+00086 typedef unsigned short uip_stats_t;
+00087 
+00088 /**
+00089  * Maximum number of TCP connections.
+00090  *
+00091  * \hideinitializer
+00092  */
+00093 #define UIP_CONF_MAX_CONNECTIONS 40
+00094 
+00095 /**
+00096  * Maximum number of listening TCP ports.
+00097  *
+00098  * \hideinitializer
+00099  */
+00100 #define UIP_CONF_MAX_LISTENPORTS 40
+00101 
+00102 /**
+00103  * uIP buffer size.
+00104  *
+00105  * \hideinitializer
+00106  */
+00107 #define UIP_CONF_BUFFER_SIZE     420
+00108 
+00109 /**
+00110  * CPU byte order.
+00111  *
+00112  * \hideinitializer
+00113  */
+00114 #define UIP_CONF_BYTE_ORDER      LITTLE_ENDIAN
+00115 
+00116 /**
+00117  * Logging on or off
+00118  *
+00119  * \hideinitializer
+00120  */
+00121 #define UIP_CONF_LOGGING         1
+00122 
+00123 /**
+00124  * UDP support on or off
+00125  *
+00126  * \hideinitializer
+00127  */
+00128 #define UIP_CONF_UDP             0
+00129 
+00130 /**
+00131  * UDP checksums on or off
+00132  *
+00133  * \hideinitializer
+00134  */
+00135 #define UIP_CONF_UDP_CHECKSUMS   1
+00136 
+00137 /**
+00138  * uIP statistics on or off
+00139  *
+00140  * \hideinitializer
+00141  */
+00142 #define UIP_CONF_STATISTICS      1
+00143 
+00144 /* Here we include the header file for the application(s) we use in
+00145    our project. */
+00146 /*#include "smtp.h"*/
+00147 /*#include "hello-world.h"*/
+00148 /*#include "telnetd.h"*/
+00149 #include "webserver.h"
+00150 /*#include "dhcpc.h"*/
+00151 /*#include "resolv.h"*/
+00152 /*#include "webclient.h"*/
+00153 
+00154 #endif /* __UIP_CONF_H__ */
+00155 
+00156 /** @} */
+00157 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/annotated.html b/components/net/uip/doc/html/annotated.html new file mode 100644 index 0000000000000000000000000000000000000000..e64936120cf4864532654adfdef700bdbf846690 --- /dev/null +++ b/components/net/uip/doc/html/annotated.html @@ -0,0 +1,50 @@ + + +uIP 1.0: Data Structures + + + + + + +

uIP 1.0 Data Structures

Here are the data structures with brief descriptions: + + + + + + + + + + + + + + + + + + + + + +
dhcpc_state
hello_world_state
httpd_cgi_call
httpd_state
memb_blocks
psockThe representation of a protosocket
psock_buf
pt
smtp_state
telnetd_state
timerA timer
uip_connRepresentation of a uIP TCP connection
uip_eth_addrRepresentation of a 48-bit Ethernet address
uip_eth_hdrThe Ethernet header
uip_icmpip_hdr
uip_neighbor_addr
uip_statsThe structure holding the TCP/IP statistics that are gathered if UIP_STATISTICS is set to 1
uip_tcpip_hdr
uip_udp_connRepresentation of a uIP UDP connection
uip_udpip_hdr
webclient_state
+
Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/classes.html b/components/net/uip/doc/html/classes.html new file mode 100644 index 0000000000000000000000000000000000000000..7a937cb61a5686f7086023e11154eeec9785c167 --- /dev/null +++ b/components/net/uip/doc/html/classes.html @@ -0,0 +1,38 @@ + + +uIP 1.0: Alphabetical List + + + + + + +

uIP 1.0 Data Structure Index

D | H | M | P | S | T | U | W

+ +
  D  
+
  M  
+
  S  
+
uip_conn   uip_tcpip_hdr   
dhcpc_state   memb_blocks   smtp_state   uip_eth_addr   uip_udp_conn   
  H  
+
  P  
+
  T  
+
uip_eth_hdr   uip_udpip_hdr   
hello_world_state   psock   telnetd_state   uip_icmpip_hdr   
  W  
+
httpd_cgi_call   psock_buf   timer   uip_neighbor_addr   webclient_state   
httpd_state   pt   
  U  
+
uip_stats   

D | H | M | P | S | T | U | W

+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/doxygen.css b/components/net/uip/doc/html/doxygen.css new file mode 100644 index 0000000000000000000000000000000000000000..05615b2e61db5e7101503448aeb4f95bbd8d6a22 --- /dev/null +++ b/components/net/uip/doc/html/doxygen.css @@ -0,0 +1,310 @@ +BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +BODY,TD { + font-size: 90%; +} +H1 { + text-align: center; + font-size: 160%; +} +H2 { + font-size: 120%; +} +H3 { + font-size: 100%; +} +CAPTION { font-weight: bold } +DIV.qindex { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.nav { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navtab { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +TD.navtab { + font-size: 70%; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; +} +A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} +A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} +A.codeRef:link { font-weight: normal; color: #0000FF} +A.codeRef:visited { font-weight: normal; color: #0000FF} +A:hover { text-decoration: none; background-color: #f2f2ff } +DL.el { margin-left: -1cm } +.fragment { + font-family: Fixed, monospace; + font-size: 95%; +} +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } +TD.md { background-color: #F4F4FB; font-weight: bold; } +TD.mdPrefix { + background-color: #F4F4FB; + color: #606060; + font-size: 80%; +} +TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; } +TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; } +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} +DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #e8eef2; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #e8eef2; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { text-align: center; } +IMG.formulaDsp { } +IMG.formulaInl { vertical-align: middle; } +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +.mdTable { + border: 1px solid #868686; + background-color: #F4F4FB; +} +.mdRow { + padding: 8px 10px; +} +.mdescLeft { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplParams { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + color: #606060; + background-color: #FAFAFA; + font-size: 80%; +} +.search { color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +TD.tiny { font-size: 75%; +} +a { + color: #1A41A8; +} +a:visited { + color: #2A3798; +} +.dirtab { padding: 4px; + border-collapse: collapse; + border: 1px solid #84b0c7; +} +TH.dirtab { background: #e8eef2; + font-weight: bold; +} +HR { height: 1px; + border: none; + border-top: 1px solid black; +} + diff --git a/components/net/uip/doc/html/doxygen.png b/components/net/uip/doc/html/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a274bbaffdd67f6d784c894d9cf28729db0e14 Binary files /dev/null and b/components/net/uip/doc/html/doxygen.png differ diff --git a/components/net/uip/doc/html/examples.html b/components/net/uip/doc/html/examples.html new file mode 100644 index 0000000000000000000000000000000000000000..d51b0415380676062abf63521e38ce8b840482e0 --- /dev/null +++ b/components/net/uip/doc/html/examples.html @@ -0,0 +1,38 @@ + + +uIP 1.0: Examples + + + + + +

uIP 1.0 Examples

Here is a list of all examples: +
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/files.html b/components/net/uip/doc/html/files.html new file mode 100644 index 0000000000000000000000000000000000000000..45982f989bec5250c8c389fafb439ef2e3c4f88d --- /dev/null +++ b/components/net/uip/doc/html/files.html @@ -0,0 +1,67 @@ + + +uIP 1.0: File Index + + + + + + +

uIP 1.0 File List

Here is a list of all documented files with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
apps/dhcpc/dhcpc.c [code]
apps/dhcpc/dhcpc.h [code]
apps/hello-world/hello-world.c [code]An example of how to write uIP applications with protosockets
apps/hello-world/hello-world.h [code]Header file for an example of how to write uIP applications with protosockets
apps/resolv/resolv.c [code]DNS host name to IP address resolver
apps/resolv/resolv.h [code]DNS resolver code header file
apps/smtp/smtp.c [code]SMTP example implementation
apps/smtp/smtp.h [code]SMTP header file
apps/telnetd/shell.c [code]
apps/telnetd/shell.h [code]Interface for the Contiki shell
apps/telnetd/telnetd.c [code]
apps/telnetd/telnetd.h [code]
apps/webclient/webclient.c [code]Implementation of the HTTP client
apps/webclient/webclient.h [code]Header file for the HTTP client
apps/webserver/httpd-cgi.c [code]Web server script interface
apps/webserver/httpd-cgi.h [code]Web server script interface header file
apps/webserver/httpd.c [code]Web server
apps/webserver/httpd.h [code]
lib/memb.c [code]Memory block allocation routines
lib/memb.h [code]Memory block allocation routines
uip/clock.h [code]
uip/lc-addrlabels.h [code]Implementation of local continuations based on the "Labels as values" feature of gcc
uip/lc-switch.h [code]Implementation of local continuations based on switch() statment
uip/lc.h [code]Local continuations
uip/psock.c [code]
uip/psock.h [code]Protosocket library header file
uip/pt.h [code]Protothreads implementation
uip/timer.c [code]Timer library implementation
uip/timer.h [code]Timer library header file
uip/uip-neighbor.c [code]Database of link-local neighbors, used by IPv6 code and to be used by a future ARP code rewrite
uip/uip-neighbor.h [code]Header file for database of link-local neighbors, used by IPv6 code and to be used by future ARP code
uip/uip-split.c [code]
uip/uip-split.h [code]Module for splitting outbound TCP segments in two to avoid the delayed ACK throughput degradation
uip/uip.c [code]The uIP TCP/IP stack code
uip/uip.h [code]Header file for the uIP TCP/IP stack
uip/uip_arch.h [code]Declarations of architecture specific functions
uip/uip_arp.c [code]Implementation of the ARP Address Resolution Protocol
uip/uip_arp.h [code]Macros and definitions for the ARP module
uip/uipopt.h [code]Configuration options for uIP
unix/uip-conf.h [code]An example uIP configuration file
+
Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/ftv2blank.png b/components/net/uip/doc/html/ftv2blank.png new file mode 100644 index 0000000000000000000000000000000000000000..493c3c0b615ade5b22027bde773faf2c0e076d66 Binary files /dev/null and b/components/net/uip/doc/html/ftv2blank.png differ diff --git a/components/net/uip/doc/html/ftv2doc.png b/components/net/uip/doc/html/ftv2doc.png new file mode 100644 index 0000000000000000000000000000000000000000..f72999f92172cca6edaa2538286b3e369bec9f49 Binary files /dev/null and b/components/net/uip/doc/html/ftv2doc.png differ diff --git a/components/net/uip/doc/html/ftv2folderclosed.png b/components/net/uip/doc/html/ftv2folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..d6d063440cbf13c4128dacd96661b6fce58abf26 Binary files /dev/null and b/components/net/uip/doc/html/ftv2folderclosed.png differ diff --git a/components/net/uip/doc/html/ftv2folderopen.png b/components/net/uip/doc/html/ftv2folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..bbe2c913cf493ee37ad8e3a5132382138d93ac92 Binary files /dev/null and b/components/net/uip/doc/html/ftv2folderopen.png differ diff --git a/components/net/uip/doc/html/ftv2lastnode.png b/components/net/uip/doc/html/ftv2lastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b9ba90cb0cf71c8ce662956bfee7d64cf60fa6 Binary files /dev/null and b/components/net/uip/doc/html/ftv2lastnode.png differ diff --git a/components/net/uip/doc/html/ftv2link.png b/components/net/uip/doc/html/ftv2link.png new file mode 100644 index 0000000000000000000000000000000000000000..14f3fed003659b11214ac7a1ca0efa2b9145ce9e Binary files /dev/null and b/components/net/uip/doc/html/ftv2link.png differ diff --git a/components/net/uip/doc/html/ftv2mlastnode.png b/components/net/uip/doc/html/ftv2mlastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..09ceb6adb01054ce799ad20c0e818ab9272f2df2 Binary files /dev/null and b/components/net/uip/doc/html/ftv2mlastnode.png differ diff --git a/components/net/uip/doc/html/ftv2mnode.png b/components/net/uip/doc/html/ftv2mnode.png new file mode 100644 index 0000000000000000000000000000000000000000..3254c05112199fbc80aad313611c58a5b388792d Binary files /dev/null and b/components/net/uip/doc/html/ftv2mnode.png differ diff --git a/components/net/uip/doc/html/ftv2node.png b/components/net/uip/doc/html/ftv2node.png new file mode 100644 index 0000000000000000000000000000000000000000..c9f06a57f4cfe0f9851cc1aacd7245f741b53ad1 Binary files /dev/null and b/components/net/uip/doc/html/ftv2node.png differ diff --git a/components/net/uip/doc/html/ftv2plastnode.png b/components/net/uip/doc/html/ftv2plastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b07e00913d8069ebbb51bd7fd6d70d8bba88f75 Binary files /dev/null and b/components/net/uip/doc/html/ftv2plastnode.png differ diff --git a/components/net/uip/doc/html/ftv2pnode.png b/components/net/uip/doc/html/ftv2pnode.png new file mode 100644 index 0000000000000000000000000000000000000000..2001b797ba2b98a4127f1d3efca64aef08bf6d51 Binary files /dev/null and b/components/net/uip/doc/html/ftv2pnode.png differ diff --git a/components/net/uip/doc/html/ftv2vertline.png b/components/net/uip/doc/html/ftv2vertline.png new file mode 100644 index 0000000000000000000000000000000000000000..b330f3a33c0085c183ff39fc56b1b274160c1da0 Binary files /dev/null and b/components/net/uip/doc/html/ftv2vertline.png differ diff --git a/components/net/uip/doc/html/functions.html b/components/net/uip/doc/html/functions.html new file mode 100644 index 0000000000000000000000000000000000000000..ab3e8e7a4d741ba252e9bb5c0595a0b1c47e63b7 --- /dev/null +++ b/components/net/uip/doc/html/functions.html @@ -0,0 +1,217 @@ + + +uIP 1.0: Data Fields + + + + + + +
+ +
+
+ +
+ +

+Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: +

+

- a -

+

- b -

+

- c -

+

- d -

+

- f -

+

- g -

+

- h -

+

- i -

+

- l -

+

- m -

+

- n -

+

- o -

+

- p -

+

- r -

+

- s -

+

- t -

+

- u -

+

- v -

+

- w -

+
Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/functions_vars.html b/components/net/uip/doc/html/functions_vars.html new file mode 100644 index 0000000000000000000000000000000000000000..466d78ad724886ef9f2696511d998c1ef2318c6b --- /dev/null +++ b/components/net/uip/doc/html/functions_vars.html @@ -0,0 +1,217 @@ + + +uIP 1.0: Data Fields - Variables + + + + + + +
+ +
+
+ +
+ +

+  +

+

- a -

+

- b -

+

- c -

+

- d -

+

- f -

+

- g -

+

- h -

+

- i -

+

- l -

+

- m -

+

- n -

+

- o -

+

- p -

+

- r -

+

- s -

+

- t -

+

- u -

+

- v -

+

- w -

+
Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals.html b/components/net/uip/doc/html/globals.html new file mode 100644 index 0000000000000000000000000000000000000000..31796bf32751b050d5dd3da82f17432e86344e07 --- /dev/null +++ b/components/net/uip/doc/html/globals.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- _ -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x61.html b/components/net/uip/doc/html/globals_0x61.html new file mode 100644 index 0000000000000000000000000000000000000000..15a80fa9d4449ebc9c9f5d152d28ec589baefa80 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x61.html @@ -0,0 +1,64 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- a -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x62.html b/components/net/uip/doc/html/globals_0x62.html new file mode 100644 index 0000000000000000000000000000000000000000..a5c87983043f25f7ffa62893280e738f88b8c666 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x62.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- b -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x64.html b/components/net/uip/doc/html/globals_0x64.html new file mode 100644 index 0000000000000000000000000000000000000000..b676eee78b446c650884b7d5433d87e00939baf0 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x64.html @@ -0,0 +1,73 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- d -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x65.html b/components/net/uip/doc/html/globals_0x65.html new file mode 100644 index 0000000000000000000000000000000000000000..c47f60d475b1c361e1c07cf8a8ffdc4134b5b3c4 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x65.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- e -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x66.html b/components/net/uip/doc/html/globals_0x66.html new file mode 100644 index 0000000000000000000000000000000000000000..cc2bf8abe6e125c03725d907313817de36fce59b --- /dev/null +++ b/components/net/uip/doc/html/globals_0x66.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- f -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x68.html b/components/net/uip/doc/html/globals_0x68.html new file mode 100644 index 0000000000000000000000000000000000000000..d01ae961aad8a5c37d4b28be3f91493982bfb659 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x68.html @@ -0,0 +1,73 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- h -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x69.html b/components/net/uip/doc/html/globals_0x69.html new file mode 100644 index 0000000000000000000000000000000000000000..fe4560810ea645275aa6063efacd6e0c3ea8f237 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x69.html @@ -0,0 +1,84 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- i -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x6c.html b/components/net/uip/doc/html/globals_0x6c.html new file mode 100644 index 0000000000000000000000000000000000000000..eaeb84dda490e10441093662916deefff4852050 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x6c.html @@ -0,0 +1,66 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- l -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x6d.html b/components/net/uip/doc/html/globals_0x6d.html new file mode 100644 index 0000000000000000000000000000000000000000..c3f3c121e06a660e2f910b16a7d21670b1c18cc1 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x6d.html @@ -0,0 +1,69 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- m -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x6e.html b/components/net/uip/doc/html/globals_0x6e.html new file mode 100644 index 0000000000000000000000000000000000000000..324dbb39d1475ee1b74f91956be6411e1ae0c75c --- /dev/null +++ b/components/net/uip/doc/html/globals_0x6e.html @@ -0,0 +1,63 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- n -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x70.html b/components/net/uip/doc/html/globals_0x70.html new file mode 100644 index 0000000000000000000000000000000000000000..cf5972cffd480dc1684c4f22c18c3b82add32cf5 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x70.html @@ -0,0 +1,95 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- p -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x72.html b/components/net/uip/doc/html/globals_0x72.html new file mode 100644 index 0000000000000000000000000000000000000000..ba708eb70ca77392bed2f44817ce5bb4267d0344 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x72.html @@ -0,0 +1,69 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- r -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x73.html b/components/net/uip/doc/html/globals_0x73.html new file mode 100644 index 0000000000000000000000000000000000000000..19f8c41be5537fb97fe3870e7a360939b551be43 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x73.html @@ -0,0 +1,81 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- s -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x74.html b/components/net/uip/doc/html/globals_0x74.html new file mode 100644 index 0000000000000000000000000000000000000000..af197ed9c880736a0edb0b04cbe2352edf0d482a --- /dev/null +++ b/components/net/uip/doc/html/globals_0x74.html @@ -0,0 +1,76 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- t -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x75.html b/components/net/uip/doc/html/globals_0x75.html new file mode 100644 index 0000000000000000000000000000000000000000..1f487bc9ddd1cb71b1643513a48c5916a4b838c7 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x75.html @@ -0,0 +1,237 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- u -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x77.html b/components/net/uip/doc/html/globals_0x77.html new file mode 100644 index 0000000000000000000000000000000000000000..8b56378734db45da0fe7512ce67cdacc89846553 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x77.html @@ -0,0 +1,80 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- w -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs.html b/components/net/uip/doc/html/globals_defs.html new file mode 100644 index 0000000000000000000000000000000000000000..8bcd1937b196a0b62cb6df5c90ee5d8fe3dbce2c --- /dev/null +++ b/components/net/uip/doc/html/globals_defs.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- _ -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x61.html b/components/net/uip/doc/html/globals_defs_0x61.html new file mode 100644 index 0000000000000000000000000000000000000000..82c84b8eacf100ec24e967193c10fb223dee3d11 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x61.html @@ -0,0 +1,64 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- a -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x62.html b/components/net/uip/doc/html/globals_defs_0x62.html new file mode 100644 index 0000000000000000000000000000000000000000..c41b24b12f3b3df89d5af865c1d4394a3e74c2f6 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x62.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- b -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x64.html b/components/net/uip/doc/html/globals_defs_0x64.html new file mode 100644 index 0000000000000000000000000000000000000000..ff1fcbdb0471210f36d9e3092324a5422741c759 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x64.html @@ -0,0 +1,73 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- d -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x65.html b/components/net/uip/doc/html/globals_defs_0x65.html new file mode 100644 index 0000000000000000000000000000000000000000..b08aab45476fbf02b8265a672571209f8394b710 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x65.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- e -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x66.html b/components/net/uip/doc/html/globals_defs_0x66.html new file mode 100644 index 0000000000000000000000000000000000000000..1bd4a6e1c699052870db5ab168444c24332ec027 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x66.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- f -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x68.html b/components/net/uip/doc/html/globals_defs_0x68.html new file mode 100644 index 0000000000000000000000000000000000000000..8c1a772d9344c40381ed5764dfc2071385c89fcc --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x68.html @@ -0,0 +1,67 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- h -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x69.html b/components/net/uip/doc/html/globals_defs_0x69.html new file mode 100644 index 0000000000000000000000000000000000000000..7478ca0f784d06e62b0bea5f763317906d1b36dd --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x69.html @@ -0,0 +1,84 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- i -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x6c.html b/components/net/uip/doc/html/globals_defs_0x6c.html new file mode 100644 index 0000000000000000000000000000000000000000..14730df9b443b8432470aad0d9e3ad0301a48e85 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x6c.html @@ -0,0 +1,65 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- l -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x6d.html b/components/net/uip/doc/html/globals_defs_0x6d.html new file mode 100644 index 0000000000000000000000000000000000000000..ccb19695442648e8b851881b630f77eb205a83f5 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x6d.html @@ -0,0 +1,66 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- m -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x6e.html b/components/net/uip/doc/html/globals_defs_0x6e.html new file mode 100644 index 0000000000000000000000000000000000000000..5244c1d62f0dd9aac562541c6e2b28da310cb8d4 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x6e.html @@ -0,0 +1,63 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- n -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x70.html b/components/net/uip/doc/html/globals_defs_0x70.html new file mode 100644 index 0000000000000000000000000000000000000000..abd98a950ed7b0822123a44fd77972176c6533d0 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x70.html @@ -0,0 +1,93 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- p -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x72.html b/components/net/uip/doc/html/globals_defs_0x72.html new file mode 100644 index 0000000000000000000000000000000000000000..a80c5cb376e7b8653b653fa1239a3ce40db93cf3 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x72.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- r -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x73.html b/components/net/uip/doc/html/globals_defs_0x73.html new file mode 100644 index 0000000000000000000000000000000000000000..f334e9ebfe65f38543edffdb11719c198ee41c39 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x73.html @@ -0,0 +1,70 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- s -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x74.html b/components/net/uip/doc/html/globals_defs_0x74.html new file mode 100644 index 0000000000000000000000000000000000000000..8224ebfffbcd22c1f0da861f341a4ce749dbd924 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x74.html @@ -0,0 +1,72 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- t -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x75.html b/components/net/uip/doc/html/globals_defs_0x75.html new file mode 100644 index 0000000000000000000000000000000000000000..8f0ec88a4ef30847ad9db4b15ca67ec207059512 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x75.html @@ -0,0 +1,188 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- u -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x77.html b/components/net/uip/doc/html/globals_defs_0x77.html new file mode 100644 index 0000000000000000000000000000000000000000..9f19416bb3045624cea312610bb2c43e8712fcea --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x77.html @@ -0,0 +1,67 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- w -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_func.html b/components/net/uip/doc/html/globals_func.html new file mode 100644 index 0000000000000000000000000000000000000000..49f1393d89e24d2a6259a39553ec19938eaa72ee --- /dev/null +++ b/components/net/uip/doc/html/globals_func.html @@ -0,0 +1,136 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- h -

+

- m -

+

- p -

+

- r -

+

- s -

+

- t -

+

- u -

+

- w -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_type.html b/components/net/uip/doc/html/globals_type.html new file mode 100644 index 0000000000000000000000000000000000000000..084f32df4f8565f4017dd0be2d29a250537b3627 --- /dev/null +++ b/components/net/uip/doc/html/globals_type.html @@ -0,0 +1,47 @@ + + +uIP 1.0: Data Fields + + + + + + + +  +

+

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_vars.html b/components/net/uip/doc/html/globals_vars.html new file mode 100644 index 0000000000000000000000000000000000000000..beddb5089899213ace3af697c6c49912218fc04e --- /dev/null +++ b/components/net/uip/doc/html/globals_vars.html @@ -0,0 +1,55 @@ + + +uIP 1.0: Data Fields + + + + + + + +  +

+

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/hierarchy.html b/components/net/uip/doc/html/hierarchy.html new file mode 100644 index 0000000000000000000000000000000000000000..4b3ba986bdee362e9725f1d505c606df5d7a4e4c --- /dev/null +++ b/components/net/uip/doc/html/hierarchy.html @@ -0,0 +1,50 @@ + + +uIP 1.0: Hierarchical Index + + + + + + +

uIP 1.0 Class Hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically: +
Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/index.hhc b/components/net/uip/doc/html/index.hhc new file mode 100644 index 0000000000000000000000000000000000000000..be5830e6498cfbe687d8a97b8a714a4d8c26df47 --- /dev/null +++ b/components/net/uip/doc/html/index.hhc @@ -0,0 +1,192 @@ + + + + + +
    +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
      +
    • +
        +
      • +
          +
        +
      +
    • +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      +
    • +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      +
    • +
        +
      +
    • +
        +
      +
    • +
        +
      +
    • +
        +
      +
    • +
        +
      +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
diff --git a/components/net/uip/doc/html/index.hhk b/components/net/uip/doc/html/index.hhk new file mode 100644 index 0000000000000000000000000000000000000000..ac1b196f93e0b921b02ca94b96704aafc9dedac0 --- /dev/null +++ b/components/net/uip/doc/html/index.hhk @@ -0,0 +1,450 @@ + + + + + +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
diff --git a/components/net/uip/doc/html/index.hhp b/components/net/uip/doc/html/index.hhp new file mode 100644 index 0000000000000000000000000000000000000000..d7d07254a79ed127a79d7c347fa03b857f5f8b61 --- /dev/null +++ b/components/net/uip/doc/html/index.hhp @@ -0,0 +1,197 @@ +[OPTIONS] +Compatibility=1.1 +Full-text search=Yes +Contents file=index.hhc +Default Window=main +Default topic=main.html +Index file=index.hhk +Language=0x409 English (United States) +Binary TOC=YES +Create CHI file=YES +Title=uIP 1.0 + +[WINDOWS] +main="uIP 1.0","index.hhc","index.hhk","main.html","main.html",,,,,0x23520,,0x387e,,,,,,,,0 + +[FILES] +main.html +files.html +a00048.html +a00049.html +a00042.html +a00043.html +a00036.html +a00037.html +a00046.html +a00047.html +a00038.html +a00039.html +a00044.html +a00045.html +a00051.html +a00050.html +a00040.html +a00041.html +a00168.html +a00169.html +a00170.html +a00171.html +a00172.html +a00173.html +a00174.html +a00175.html +a00176.html +a00177.html +a00178.html +a00179.html +a00180.html +a00181.html +a00182.html +a00183.html +a00184.html +a00185.html +a00186.html +a00187.html +a00188.html +a00189.html +a00190.html +a00191.html +a00192.html +a00193.html +a00194.html +a00195.html +a00196.html +a00197.html +a00198.html +a00199.html +a00200.html +a00201.html +a00202.html +a00203.html +a00204.html +a00205.html +a00206.html +a00207.html +a00100.html +a00101.html +a00102.html +a00103.html +a00104.html +a00105.html +a00107.html +a00110.html +a00111.html +a00112.html +a00113.html +a00114.html +a00120.html +a00121.html +a00123.html +a00124.html +a00125.html +a00127.html +a00128.html +a00129.html +a00130.html +a00131.html +a00132.html +a00134.html +a00135.html +a00136.html +a00137.html +a00138.html +a00139.html +a00140.html +a00141.html +annotated.html +classes.html +hierarchy.html +functions.html +functions_vars.html +a00077.html +a00078.html +a00079.html +a00080.html +a00081.html +a00082.html +a00083.html +a00084.html +a00085.html +a00086.html +a00087.html +a00088.html +a00089.html +a00090.html +a00091.html +a00092.html +a00093.html +a00094.html +a00095.html +a00096.html +a00097.html +a00142.html +a00143.html +a00144.html +a00145.html +a00146.html +a00147.html +a00148.html +a00149.html +a00150.html +a00151.html +a00152.html +a00153.html +a00154.html +a00155.html +a00156.html +a00157.html +a00158.html +a00159.html +a00160.html +a00161.html +a00162.html +a00163.html +a00164.html +modules.html +examples.html +globals.html +globals_0x61.html +globals_0x62.html +globals_0x64.html +globals_0x65.html +globals_0x66.html +globals_0x68.html +globals_0x69.html +globals_0x6c.html +globals_0x6d.html +globals_0x6e.html +globals_0x70.html +globals_0x72.html +globals_0x73.html +globals_0x74.html +globals_0x75.html +globals_0x77.html +globals_func.html +globals_vars.html +globals_type.html +globals_defs.html +globals_defs_0x61.html +globals_defs_0x62.html +globals_defs_0x64.html +globals_defs_0x65.html +globals_defs_0x66.html +globals_defs_0x68.html +globals_defs_0x69.html +globals_defs_0x6c.html +globals_defs_0x6d.html +globals_defs_0x6e.html +globals_defs_0x70.html +globals_defs_0x72.html +globals_defs_0x73.html +globals_defs_0x74.html +globals_defs_0x75.html +globals_defs_0x77.html +tabs.css +tab_b.gif +tab_l.gif +tab_r.gif diff --git a/components/net/uip/doc/html/index.html b/components/net/uip/doc/html/index.html new file mode 100644 index 0000000000000000000000000000000000000000..b4bd6701de4bc61851fd5491c35fb77cb46ad404 --- /dev/null +++ b/components/net/uip/doc/html/index.html @@ -0,0 +1,8 @@ + + +uIP 1.0 + + + + + diff --git a/components/net/uip/doc/html/main.html b/components/net/uip/doc/html/main.html new file mode 100644 index 0000000000000000000000000000000000000000..ab1b46ae6310ba99b883c43d267303c66474eac6 --- /dev/null +++ b/components/net/uip/doc/html/main.html @@ -0,0 +1,421 @@ + + +uIP 1.0: The uIP TCP/IP stack + + + + + +

The uIP TCP/IP stack

+

+

Author:
Adam Dunkels, http://www.sics.se/~adam/
+The uIP TCP/IP stack is intended to make it possible to communicate using the TCP/IP protocol suite even on small 8-bit micro-controllers. Despite being small and simple, uIP do not require their peers to have complex, full-size stacks, but can communicate with peers running a similarly light-weight stack. The code size is on the order of a few kilobytes and RAM usage can be configured to be as low as a few hundred bytes.

+uIP can be found at the uIP web page: http://www.sics.se/~adam/uip/

+

See also:
Application programs

+Compile-time configuration options

+Run-time configuration functions

+Initialization functions

+Device driver interface and variables used by device drivers

+uIP functions called from application programs (see below) and the protosockets API and their underlying protothreads

+

+Introduction

+With the success of the Internet, the TCP/IP protocol suite has become a global standard for communication. TCP/IP is the underlying protocol used for web page transfers, e-mail transmissions, file transfers, and peer-to-peer networking over the Internet. For embedded systems, being able to run native TCP/IP makes it possible to connect the system directly to an intranet or even the global Internet. Embedded devices with full TCP/IP support will be first-class network citizens, thus being able to fully communicate with other hosts in the network.

+Traditional TCP/IP implementations have required far too much resources both in terms of code size and memory usage to be useful in small 8 or 16-bit systems. Code size of a few hundred kilobytes and RAM requirements of several hundreds of kilobytes have made it impossible to fit the full TCP/IP stack into systems with a few tens of kilobytes of RAM and room for less than 100 kilobytes of code.

+The uIP implementation is designed to have only the absolute minimal set of features needed for a full TCP/IP stack. It can only handle a single network interface and contains the IP, ICMP, UDP and TCP protocols. uIP is written in the C programming language.

+Many other TCP/IP implementations for small systems assume that the embedded device always will communicate with a full-scale TCP/IP implementation running on a workstation-class machine. Under this assumption, it is possible to remove certain TCP/IP mechanisms that are very rarely used in such situations. Many of those mechanisms are essential, however, if the embedded device is to communicate with another equally limited device, e.g., when running distributed peer-to-peer services and protocols. uIP is designed to be RFC compliant in order to let the embedded devices to act as first-class network citizens. The uIP TCP/IP implementation that is not tailored for any specific application.

+TCP/IP Communication

+The full TCP/IP suite consists of numerous protocols, ranging from low level protocols such as ARP which translates IP addresses to MAC addresses, to application level protocols such as SMTP that is used to transfer e-mail. The uIP is mostly concerned with the TCP and IP protocols and upper layer protocols will be referred to as "the application". Lower layer protocols are often implemented in hardware or firmware and will be referred to as "the network device" that are controlled by the network device driver.

+TCP provides a reliable byte stream to the upper layer protocols. It breaks the byte stream into appropriately sized segments and each segment is sent in its own IP packet. The IP packets are sent out on the network by the network device driver. If the destination is not on the physically connected network, the IP packet is forwarded onto another network by a router that is situated between the two networks. If the maximum packet size of the other network is smaller than the size of the IP packet, the packet is fragmented into smaller packets by the router. If possible, the size of the TCP segments are chosen so that fragmentation is minimized. The final recipient of the packet will have to reassemble any fragmented IP packets before they can be passed to higher layers.

+The formal requirements for the protocols in the TCP/IP stack is specified in a number of RFC documents published by the Internet Engineering Task Force, IETF. Each of the protocols in the stack is defined in one more RFC documents and RFC1122 collects all requirements and updates the previous RFCs.

+The RFC1122 requirements can be divided into two categories; those that deal with the host to host communication and those that deal with communication between the application and the networking stack. An example of the first kind is "A TCP MUST be able to receive a TCP option in any segment" and an example of the second kind is "There MUST be a mechanism for reporting soft TCP error conditions to the application." A TCP/IP implementation that violates requirements of the first kind may not be able to communicate with other TCP/IP implementations and may even lead to network failures. Violation of the second kind of requirements will only affect the communication within the system and will not affect host-to-host communication.

+In uIP, all RFC requirements that affect host-to-host communication are implemented. However, in order to reduce code size, we have removed certain mechanisms in the interface between the application and the stack, such as the soft error reporting mechanism and dynamically configurable type-of-service bits for TCP connections. Since there are only very few applications that make use of those features they can be removed without loss of generality.

+Main Control Loop

+The uIP stack can be run either as a task in a multitasking system, or as the main program in a singletasking system. In both cases, the main control loop does two things repeatedly:

+

    +
  • Check if a packet has arrived from the network.
  • Check if a periodic timeout has occurred.
+

+If a packet has arrived, the input handler function, uip_input(), should be invoked by the main control loop. The input handler function will never block, but will return at once. When it returns, the stack or the application for which the incoming packet was intended may have produced one or more reply packets which should be sent out. If so, the network device driver should be called to send out these packets.

+Periodic timeouts are used to drive TCP mechanisms that depend on timers, such as delayed acknowledgments, retransmissions and round-trip time estimations. When the main control loop infers that the periodic timer should fire, it should invoke the timer handler function uip_periodic(). Because the TCP/IP stack may perform retransmissions when dealing with a timer event, the network device driver should called to send out the packets that may have been produced.

+Architecture Specific Functions

+uIP requires a few functions to be implemented specifically for the architecture on which uIP is intended to run. These functions should be hand-tuned for the particular architecture, but generic C implementations are given as part of the uIP distribution.

+Checksum Calculation

+The TCP and IP protocols implement a checksum that covers the data and header portions of the TCP and IP packets. Since the calculation of this checksum is made over all bytes in every packet being sent and received it is important that the function that calculates the checksum is efficient. Most often, this means that the checksum calculation must be fine-tuned for the particular architecture on which the uIP stack runs.

+While uIP includes a generic checksum function, it also leaves it open for an architecture specific implementation of the two functions uip_ipchksum() and uip_tcpchksum(). The checksum calculations in those functions can be written in highly optimized assembler rather than generic C code.

+32-bit Arithmetic

+The TCP protocol uses 32-bit sequence numbers, and a TCP implementation will have to do a number of 32-bit additions as part of the normal protocol processing. Since 32-bit arithmetic is not natively available on many of the platforms for which uIP is intended, uIP leaves the 32-bit additions to be implemented by the architecture specific module and does not make use of any 32-bit arithmetic in the main code base.

+While uIP implements a generic 32-bit addition, there is support for having an architecture specific implementation of the uip_add32() function.

+Memory Management

+In the architectures for which uIP is intended, RAM is the most scarce resource. With only a few kilobytes of RAM available for the TCP/IP stack to use, mechanisms used in traditional TCP/IP cannot be directly applied.

+The uIP stack does not use explicit dynamic memory allocation. Instead, it uses a single global buffer for holding packets and has a fixed table for holding connection state. The global packet buffer is large enough to contain one packet of maximum size. When a packet arrives from the network, the device driver places it in the global buffer and calls the TCP/IP stack. If the packet contains data, the TCP/IP stack will notify the corresponding application. Because the data in the buffer will be overwritten by the next incoming packet, the application will either have to act immediately on the data or copy the data into a secondary buffer for later processing. The packet buffer will not be overwritten by new packets before the application has processed the data. Packets that arrive when the application is processing the data must be queued, either by the network device or by the device driver. Most single-chip Ethernet controllers have on-chip buffers that are large enough to contain at least 4 maximum sized Ethernet frames. Devices that are handled by the processor, such as RS-232 ports, can copy incoming bytes to a separate buffer during application processing. If the buffers are full, the incoming packet is dropped. This will cause performance degradation, but only when multiple connections are running in parallel. This is because uIP advertises a very small receiver window, which means that only a single TCP segment will be in the network per connection.

+In uIP, the same global packet buffer that is used for incoming packets is also used for the TCP/IP headers of outgoing data. If the application sends dynamic data, it may use the parts of the global packet buffer that are not used for headers as a temporary storage buffer. To send the data, the application passes a pointer to the data as well as the length of the data to the stack. The TCP/IP headers are written into the global buffer and once the headers have been produced, the device driver sends the headers and the application data out on the network. The data is not queued for retransmissions. Instead, the application will have to reproduce the data if a retransmission is necessary.

+The total amount of memory usage for uIP depends heavily on the applications of the particular device in which the implementations are to be run. The memory configuration determines both the amount of traffic the system should be able to handle and the maximum amount of simultaneous connections. A device that will be sending large e-mails while at the same time running a web server with highly dynamic web pages and multiple simultaneous clients, will require more RAM than a simple Telnet server. It is possible to run the uIP implementation with as little as 200 bytes of RAM, but such a configuration will provide extremely low throughput and will only allow a small number of simultaneous connections.

+Application Program Interface (API)

+The Application Program Interface (API) defines the way the application program interacts with the TCP/IP stack. The most commonly used API for TCP/IP is the BSD socket API which is used in most Unix systems and has heavily influenced the Microsoft Windows WinSock API. Because the socket API uses stop-and-wait semantics, it requires support from an underlying multitasking operating system. Since the overhead of task management, context switching and allocation of stack space for the tasks might be too high in the intended uIP target architectures, the BSD socket interface is not suitable for our purposes.

+uIP provides two APIs to programmers: protosockets, a BSD socket-like API without the overhead of full multi-threading, and a "raw" event-based API that is nore low-level than protosockets but uses less memory.

+

See also:
Protosockets library

+Protothreads

+

+The uIP raw API

+The "raw" uIP API uses an event driven interface where the application is invoked in response to certain events. An application running on top of uIP is implemented as a C function that is called by uIP in response to certain events. uIP calls the application when data is received, when data has been successfully delivered to the other end of the connection, when a new connection has been set up, or when data has to be retransmitted. The application is also periodically polled for new data. The application program provides only one callback function; it is up to the application to deal with mapping different network services to different ports and connections. Because the application is able to act on incoming data and connection requests as soon as the TCP/IP stack receives the packet, low response times can be achieved even in low-end systems.

+uIP is different from other TCP/IP stacks in that it requires help from the application when doing retransmissions. Other TCP/IP stacks buffer the transmitted data in memory until the data is known to be successfully delivered to the remote end of the connection. If the data needs to be retransmitted, the stack takes care of the retransmission without notifying the application. With this approach, the data has to be buffered in memory while waiting for an acknowledgment even if the application might be able to quickly regenerate the data if a retransmission has to be made.

+In order to reduce memory usage, uIP utilizes the fact that the application may be able to regenerate sent data and lets the application take part in retransmissions. uIP does not keep track of packet contents after they have been sent by the device driver, and uIP requires that the application takes an active part in performing the retransmission. When uIP decides that a segment should be retransmitted, it calls the application with a flag set indicating that a retransmission is required. The application checks the retransmission flag and produces the same data that was previously sent. From the application's standpoint, performing a retransmission is not different from how the data originally was sent. Therefore the application can be written in such a way that the same code is used both for sending data and retransmitting data. Also, it is important to note that even though the actual retransmission operation is carried out by the application, it is the responsibility of the stack to know when the retransmission should be made. Thus the complexity of the application does not necessarily increase because it takes an active part in doing retransmissions.

+Application Events

+The application must be implemented as a C function, UIP_APPCALL(), that uIP calls whenever an event occurs. Each event has a corresponding test function that is used to distinguish between different events. The functions are implemented as C macros that will evaluate to either zero or non-zero. Note that certain events can happen in conjunction with each other (i.e., new data can arrive at the same time as data is acknowledged).

+The Connection Pointer

+When the application is called by uIP, the global variable uip_conn is set to point to the uip_conn structure for the connection that currently is handled, and is called the "current connection". The fields in the uip_conn structure for the current connection can be used, e.g., to distinguish between different services, or to check to which IP address the connection is connected. One typical use would be to inspect the uip_conn->lport (the local TCP port number) to decide which service the connection should provide. For instance, an application might decide to act as an HTTP server if the value of uip_conn->lport is equal to 80 and act as a TELNET server if the value is 23.

+Receiving Data

+If the uIP test function uip_newdata() is non-zero, the remote host of the connection has sent new data. The uip_appdata pointer point to the actual data. The size of the data is obtained through the uIP function uip_datalen(). The data is not buffered by uIP, but will be overwritten after the application function returns, and the application will therefor have to either act directly on the incoming data, or by itself copy the incoming data into a buffer for later processing.

+Sending Data

+When sending data, uIP adjusts the length of the data sent by the application according to the available buffer space and the current TCP window advertised by the receiver. The amount of buffer space is dictated by the memory configuration. It is therefore possible that all data sent from the application does not arrive at the receiver, and the application may use the uip_mss() function to see how much data that actually will be sent by the stack.

+The application sends data by using the uIP function uip_send(). The uip_send() function takes two arguments; a pointer to the data to be sent and the length of the data. If the application needs RAM space for producing the actual data that should be sent, the packet buffer (pointed to by the uip_appdata pointer) can be used for this purpose.

+The application can send only one chunk of data at a time on a connection and it is not possible to call uip_send() more than once per application invocation; only the data from the last call will be sent.

+Retransmitting Data

+Retransmissions are driven by the periodic TCP timer. Every time the periodic timer is invoked, the retransmission timer for each connection is decremented. If the timer reaches zero, a retransmission should be made. As uIP does not keep track of packet contents after they have been sent by the device driver, uIP requires that the application takes an active part in performing the retransmission. When uIP decides that a segment should be retransmitted, the application function is called with the uip_rexmit() flag set, indicating that a retransmission is required.

+The application must check the uip_rexmit() flag and produce the same data that was previously sent. From the application's standpoint, performing a retransmission is not different from how the data originally was sent. Therefor, the application can be written in such a way that the same code is used both for sending data and retransmitting data. Also, it is important to note that even though the actual retransmission operation is carried out by the application, it is the responsibility of the stack to know when the retransmission should be made. Thus the complexity of the application does not necessarily increase because it takes an active part in doing retransmissions.

+Closing Connections

+The application closes the current connection by calling the uip_close() during an application call. This will cause the connection to be cleanly closed. In order to indicate a fatal error, the application might want to abort the connection and does so by calling the uip_abort() function.

+If the connection has been closed by the remote end, the test function uip_closed() is true. The application may then do any necessary cleanups.

+Reporting Errors

+There are two fatal errors that can happen to a connection, either that the connection was aborted by the remote host, or that the connection retransmitted the last data too many times and has been aborted. uIP reports this by calling the application function. The application can use the two test functions uip_aborted() and uip_timedout() to test for those error conditions.

+Polling

+When a connection is idle, uIP polls the application every time the periodic timer fires. The application uses the test function uip_poll() to check if it is being polled by uIP.

+The polling event has two purposes. The first is to let the application periodically know that a connection is idle, which allows the application to close connections that have been idle for too long. The other purpose is to let the application send new data that has been produced. The application can only send data when invoked by uIP, and therefore the poll event is the only way to send data on an otherwise idle connection.

+Listening Ports

+uIP maintains a list of listening TCP ports. A new port is opened for listening with the uip_listen() function. When a connection request arrives on a listening port, uIP creates a new connection and calls the application function. The test function uip_connected() is true if the application was invoked because a new connection was created.

+The application can check the lport field in the uip_conn structure to check to which port the new connection was connected.

+Opening Connections

+New connections can be opened from within uIP by the function uip_connect(). This function allocates a new connection and sets a flag in the connection state which will open a TCP connection to the specified IP address and port the next time the connection is polled by uIP. The uip_connect() function returns a pointer to the uip_conn structure for the new connection. If there are no free connection slots, the function returns NULL.

+The function uip_ipaddr() may be used to pack an IP address into the two element 16-bit array used by uIP to represent IP addresses.

+Two examples of usage are shown below. The first example shows how to open a connection to TCP port 8080 of the remote end of the current connection. If there are not enough TCP connection slots to allow a new connection to be opened, the uip_connect() function returns NULL and the current connection is aborted by uip_abort().

+

void connect_example1_app(void) {
+   if(uip_connect(uip_conn->ripaddr, HTONS(8080)) == NULL) {
+      uip_abort();
+   }
+}   
+

+The second example shows how to open a new connection to a specific IP address. No error checks are made in this example.

+

void connect_example2(void) {
+   u16_t ipaddr[2];
+
+   uip_ipaddr(ipaddr, 192,168,0,1);
+   uip_connect(ipaddr, HTONS(8080));
+}
+

+Examples

+This section presents a number of very simple uIP applications. The uIP code distribution contains several more complex applications.

+A Very Simple Application

+This first example shows a very simple application. The application listens for incoming connections on port 1234. When a connection has been established, the application replies to all data sent to it by saying "ok"

+The implementation of this application is shown below. The application is initialized with the function called example1_init() and the uIP callback function is called example1_app(). For this application, the configuration variable UIP_APPCALL should be defined to be example1_app().

+

void example1_init(void) {
+   uip_listen(HTONS(1234));
+}
+
+void example1_app(void) {
+   if(uip_newdata() || uip_rexmit()) {
+      uip_send("ok\n", 3);
+   }
+}
+

+The initialization function calls the uIP function uip_listen() to register a listening port. The actual application function example1_app() uses the test functions uip_newdata() and uip_rexmit() to determine why it was called. If the application was called because the remote end has sent it data, it responds with an "ok". If the application function was called because data was lost in the network and has to be retransmitted, it also sends an "ok". Note that this example actually shows a complete uIP application. It is not required for an application to deal with all types of events such as uip_connected() or uip_timedout().

+A More Advanced Application

+This second example is slightly more advanced than the previous one, and shows how the application state field in the uip_conn structure is used.

+This application is similar to the first application in that it listens to a port for incoming connections and responds to data sent to it with a single "ok". The big difference is that this application prints out a welcoming "Welcome!" message when the connection has been established.

+This seemingly small change of operation makes a big difference in how the application is implemented. The reason for the increase in complexity is that if data should be lost in the network, the application must know what data to retransmit. If the "Welcome!" message was lost, the application must retransmit the welcome and if one of the "ok" messages is lost, the application must send a new "ok".

+The application knows that as long as the "Welcome!" message has not been acknowledged by the remote host, it might have been dropped in the network. But once the remote host has sent an acknowledgment back, the application can be sure that the welcome has been received and knows that any lost data must be an "ok" message. Thus the application can be in either of two states: either in the WELCOME-SENT state where the "Welcome!" has been sent but not acknowledged, or in the WELCOME-ACKED state where the "Welcome!" has been acknowledged.

+When a remote host connects to the application, the application sends the "Welcome!" message and sets it's state to WELCOME-SENT. When the welcome message is acknowledged, the application moves to the WELCOME-ACKED state. If the application receives any new data from the remote host, it responds by sending an "ok" back.

+If the application is requested to retransmit the last message, it looks at in which state the application is. If the application is in the WELCOME-SENT state, it sends a "Welcome!" message since it knows that the previous welcome message hasn't been acknowledged. If the application is in the WELCOME-ACKED state, it knows that the last message was an "ok" message and sends such a message.

+The implementation of this application is seen below. This configuration settings for the application is follows after its implementation.

+

struct example2_state {
+   enum {WELCOME_SENT, WELCOME_ACKED} state;
+};
+
+void example2_init(void) {
+   uip_listen(HTONS(2345));
+}
+
+void example2_app(void) {
+   struct example2_state *s;
+
+   s = (struct example2_state *)uip_conn->appstate;
+   
+   if(uip_connected()) {
+      s->state = WELCOME_SENT;
+      uip_send("Welcome!\n", 9);
+      return;
+   } 
+
+   if(uip_acked() && s->state == WELCOME_SENT) {
+      s->state = WELCOME_ACKED;
+   }
+
+   if(uip_newdata()) {
+      uip_send("ok\n", 3);
+   }
+
+   if(uip_rexmit()) {
+      switch(s->state) {
+      case WELCOME_SENT:
+         uip_send("Welcome!\n", 9);
+         break;
+      case WELCOME_ACKED:
+         uip_send("ok\n", 3);
+         break;
+      }
+   }
+}
+

+The configuration for the application:

+

#define UIP_APPCALL       example2_app
+#define UIP_APPSTATE_SIZE sizeof(struct example2_state)
+

+Differentiating Between Applications

+If the system should run multiple applications, one technique to differentiate between them is to use the TCP port number of either the remote end or the local end of the connection. The example below shows how the two examples above can be combined into one application.

+

void example3_init(void) {
+   example1_init();
+   example2_init();   
+}
+
+void example3_app(void) {
+   switch(uip_conn->lport) {
+   case HTONS(1234):
+      example1_app();
+      break;
+   case HTONS(2345):
+      example2_app();
+      break;
+   }
+}
+

+Utilizing TCP Flow Control

+This example shows a simple application that connects to a host, sends an HTTP request for a file and downloads it to a slow device such a disk drive. This shows how to use the flow control functions of uIP.

+

void example4_init(void) {
+   u16_t ipaddr[2];
+   uip_ipaddr(ipaddr, 192,168,0,1);
+   uip_connect(ipaddr, HTONS(80));
+}
+
+void example4_app(void) {
+   if(uip_connected() || uip_rexmit()) {
+      uip_send("GET /file HTTP/1.0\r\nServer:192.186.0.1\r\n\r\n",
+               48);
+      return;
+   }
+
+   if(uip_newdata()) {
+      device_enqueue(uip_appdata, uip_datalen());
+      if(device_queue_full()) {
+         uip_stop();
+      }
+   }
+
+   if(uip_poll() && uip_stopped()) {
+      if(!device_queue_full()) {
+         uip_restart();
+      }
+   }
+}
+

+When the connection has been established, an HTTP request is sent to the server. Since this is the only data that is sent, the application knows that if it needs to retransmit any data, it is that request that should be retransmitted. It is therefore possible to combine these two events as is done in the example.

+When the application receives new data from the remote host, it sends this data to the device by using the function device_enqueue(). It is important to note that this example assumes that this function copies the data into its own buffers. The data in the uip_appdata buffer will be overwritten by the next incoming packet.

+If the device's queue is full, the application stops the data from the remote host by calling the uIP function uip_stop(). The application can then be sure that it will not receive any new data until uip_restart() is called. The application polling event is used to check if the device's queue is no longer full and if so, the data flow is restarted with uip_restart().

+A Simple Web Server

+This example shows a very simple file server application that listens to two ports and uses the port number to determine which file to send. If the files are properly formatted, this simple application can be used as a web server with static pages. The implementation follows.

+

struct example5_state {
+   char *dataptr;
+   unsigned int dataleft;
+};
+
+void example5_init(void) {
+   uip_listen(HTONS(80));
+   uip_listen(HTONS(81));
+}
+
+void example5_app(void) {
+   struct example5_state *s;
+   s = (struct example5_state)uip_conn->appstate;
+   
+   if(uip_connected()) {
+      switch(uip_conn->lport) {
+      case HTONS(80):
+         s->dataptr = data_port_80;
+         s->dataleft = datalen_port_80;
+         break;
+      case HTONS(81):
+         s->dataptr = data_port_81;
+         s->dataleft = datalen_port_81;
+         break;
+      }
+      uip_send(s->dataptr, s->dataleft);
+      return;      
+   }
+
+   if(uip_acked()) {
+      if(s->dataleft < uip_mss()) {
+         uip_close();
+         return;
+      }
+      s->dataptr += uip_conn->len;
+      s->dataleft -= uip_conn->len;
+      uip_send(s->dataptr, s->dataleft);      
+   }
+}
+

+The application state consists of a pointer to the data that should be sent and the size of the data that is left to send. When a remote host connects to the application, the local port number is used to determine which file to send. The first chunk of data is sent using uip_send(). uIP makes sure that no more than MSS bytes of data is actually sent, even though s->dataleft may be larger than the MSS.

+The application is driven by incoming acknowledgments. When data has been acknowledged, new data can be sent. If there is no more data to send, the connection is closed using uip_close().

+Structured Application Program Design

+When writing larger programs using uIP it is useful to be able to utilize the uIP API in a structured way. The following example provides a structured design that has showed itself to be useful for writing larger protocol implementations than the previous examples showed here. The program is divided into an uIP event handler function that calls seven application handler functions that process new data, act on acknowledged data, send new data, deal with connection establishment or closure events and handle errors. The functions are called newdata(), acked(), senddata(), connected(), closed(), aborted(), and timedout(), and needs to be written specifically for the protocol that is being implemented.

+The uIP event handler function is shown below.

+

void example6_app(void) {
+  if(uip_aborted()) {
+    aborted();
+  }
+  if(uip_timedout()) {
+    timedout();
+  }
+  if(uip_closed()) {
+    closed();
+  }
+  if(uip_connected()) {
+    connected();
+  }
+  if(uip_acked()) {
+    acked();
+  }
+  if(uip_newdata()) {
+    newdata();
+  }
+  if(uip_rexmit() ||
+     uip_newdata() ||
+     uip_acked() ||
+     uip_connected() ||
+     uip_poll()) {
+    senddata();
+  }
+}
+

+The function starts with dealing with any error conditions that might have happened by checking if uip_aborted() or uip_timedout() are true. If so, the appropriate error function is called. Also, if the connection has been closed, the closed() function is called to the it deal with the event.

+Next, the function checks if the connection has just been established by checking if uip_connected() is true. The connected() function is called and is supposed to do whatever needs to be done when the connection is established, such as intializing the application state for the connection. Since it may be the case that data should be sent out, the senddata() function is called to deal with the outgoing data.

+The following very simple application serves as an example of how the application handler functions might look. This application simply waits for any data to arrive on the connection, and responds to the data by sending out the message "Hello world!". To illustrate how to develop an application state machine, this message is sent in two parts, first the "Hello" part and then the "world!" part.

+

#define STATE_WAITING 0
+#define STATE_HELLO   1
+#define STATE_WORLD   2
+
+struct example6_state {
+  u8_t state;
+  char *textptr;
+  int  textlen;
+};
+
+static void aborted(void) {}
+static void timedout(void) {}
+static void closed(void) {}
+
+static void connected(void) {
+  struct example6_state *s = (struct example6_state *)uip_conn->appstate;
+
+  s->state   = STATE_WAITING;
+  s->textlen = 0;
+}
+
+static void newdata(void) {
+  struct example6_state *s = (struct example6_state *)uip_conn->appstate;
+
+  if(s->state == STATE_WAITING) {
+    s->state   = STATE_HELLO;
+    s->textptr = "Hello ";
+    s->textlen = 6;
+  }
+}
+
+static void acked(void) {
+  struct example6_state *s = (struct example6_state *)uip_conn->appstate;
+  
+  s->textlen -= uip_conn->len;
+  s->textptr += uip_conn->len;
+  if(s->textlen == 0) {
+    switch(s->state) {
+    case STATE_HELLO:
+      s->state   = STATE_WORLD;
+      s->textptr = "world!\n";
+      s->textlen = 7;
+      break;
+    case STATE_WORLD:
+      uip_close();
+      break;
+    }
+  }
+}
+
+static void senddata(void) {
+  struct example6_state *s = (struct example6_state *)uip_conn->appstate;
+
+  if(s->textlen > 0) {
+    uip_send(s->textptr, s->textlen);
+  }
+}
+

+The application state consists of a "state" variable, a "textptr" pointer to a text message and the "textlen" length of the text message. The "state" variable can be either "STATE_WAITING", meaning that the application is waiting for data to arrive from the network, "STATE_HELLO", in which the application is sending the "Hello" part of the message, or "STATE_WORLD", in which the application is sending the "world!" message.

+The application does not handle errors or connection closing events, and therefore the aborted(), timedout() and closed() functions are implemented as empty functions.

+The connected() function will be called when a connection has been established, and in this case sets the "state" variable to be "STATE_WAITING" and the "textlen" variable to be zero, indicating that there is no message to be sent out.

+When new data arrives from the network, the newdata() function will be called by the event handler function. The newdata() function will check if the connection is in the "STATE_WAITING" state, and if so switches to the "STATE_HELLO" state and registers a 6 byte long "Hello " message with the connection. This message will later be sent out by the senddata() function.

+The acked() function is called whenever data that previously was sent has been acknowleged by the receiving host. This acked() function first reduces the amount of data that is left to send, by subtracting the length of the previously sent data (obtained from "uip_conn->len") from the "textlen" variable, and also adjusts the "textptr" pointer accordingly. It then checks if the "textlen" variable now is zero, which indicates that all data now has been successfully received, and if so changes application state. If the application was in the "STATE_HELLO" state, it switches state to "STATE_WORLD" and sets up a 7 byte "world!\n" message to be sent. If the application was in the "STATE_WORLD" state, it closes the connection.

+Finally, the senddata() function takes care of actually sending the data that is to be sent. It is called by the event handler function when new data has been received, when data has been acknowledged, when a new connection has been established, when the connection is polled because of inactivity, or when a retransmission should be made. The purpose of the senddata() function is to optionally format the data that is to be sent, and to call the uip_send() function to actually send out the data. In this particular example, the function simply calls uip_send() with the appropriate arguments if data is to be sent, after checking if data should be sent out or not as indicated by the "textlen" variable.

+It is important to note that the senddata() function never should affect the application state; this should only be done in the acked() and newdata() functions.

+Protocol Implementations

+The protocols in the TCP/IP protocol suite are designed in a layered fashion where each protocol performs a specific function and the interactions between the protocol layers are strictly defined. While the layered approach is a good way to design protocols, it is not always the best way to implement them. In uIP, the protocol implementations are tightly coupled in order to save code space.

+This section gives detailed information on the specific protocol implementations in uIP.

+IP --- Internet Protocol

+When incoming packets are processed by uIP, the IP layer is the first protocol that examines the packet. The IP layer does a few simple checks such as if the destination IP address of the incoming packet matches any of the local IP address and verifies the IP header checksum. Since there are no IP options that are strictly required and because they are very uncommon, any IP options in received packets are dropped.

+IP Fragment Reassembly

+IP fragment reassembly is implemented using a separate buffer that holds the packet to be reassembled. An incoming fragment is copied into the right place in the buffer and a bit map is used to keep track of which fragments have been received. Because the first byte of an IP fragment is aligned on an 8-byte boundary, the bit map requires a small amount of memory. When all fragments have been reassembled, the resulting IP packet is passed to the transport layer. If all fragments have not been received within a specified time frame, the packet is dropped.

+The current implementation only has a single buffer for holding packets to be reassembled, and therefore does not support simultaneous reassembly of more than one packet. Since fragmented packets are uncommon, this ought to be a reasonable decision. Extending the implementation to support multiple buffers would be straightforward, however.

+Broadcasts and Multicasts

+IP has the ability to broadcast and multicast packets on the local network. Such packets are addressed to special broadcast and multicast addresses. Broadcast is used heavily in many UDP based protocols such as the Microsoft Windows file-sharing SMB protocol. Multicast is primarily used in protocols used for multimedia distribution such as RTP. TCP is a point-to-point protocol and does not use broadcast or multicast packets. uIP current supports broadcast packets as well as sending multicast packets. Joining multicast groups (IGMP) and receiving non-local multicast packets is not currently supported.

+ICMP --- Internet Control Message Protocol

+The ICMP protocol is used for reporting soft error conditions and for querying host parameters. Its main use is, however, the echo mechanism which is used by the "ping" program.

+The ICMP implementation in uIP is very simple as itis restricted to only implement ICMP echo messages. Replies to echo messages are constructed by simply swapping the source and destination IP addresses of incoming echo requests and rewriting the ICMP header with the Echo-Reply message type. The ICMP checksum is adjusted using standard techniques (see RFC1624).

+Since only the ICMP echo message is implemented, there is no support for Path MTU discovery or ICMP redirect messages. Neither of these is strictly required for interoperability; they are performance enhancement mechanisms.

+TCP --- Transmission Control Protocol

+The TCP implementation in uIP is driven by incoming packets and timer events. Incoming packets are parsed by TCP and if the packet contains data that is to be delivered to the application, the application is invoked by the means of the application function call. If the incoming packet acknowledges previously sent data, the connection state is updated and the application is informed, allowing it to send out new data.

+Listening Connections

+TCP allows a connection to listen for incoming connection requests. In uIP, a listening connection is identified by the 16-bit port number and incoming connection requests are checked against the list of listening connections. This list of listening connections is dynamic and can be altered by the applications in the system.

+Sliding Window

+Most TCP implementations use a sliding window mechanism for sending data. Multiple data segments are sent in succession without waiting for an acknowledgment for each segment.

+The sliding window algorithm uses a lot of 32-bit operations and because 32-bit arithmetic is fairly expensive on most 8-bit CPUs, uIP does not implement it. Also, uIP does not buffer sent packets and a sliding window implementation that does not buffer sent packets will have to be supported by a complex application layer. Instead, uIP allows only a single TCP segment per connection to be unacknowledged at any given time.

+It is important to note that even though most TCP implementations use the sliding window algorithm, it is not required by the TCP specifications. Removing the sliding window mechanism does not affect interoperability in any way.

+Round-Trip Time Estimation

+TCP continuously estimates the current Round-Trip Time (RTT) of every active connection in order to find a suitable value for the retransmission time-out.

+The RTT estimation in uIP is implemented using TCP's periodic timer. Each time the periodic timer fires, it increments a counter for each connection that has unacknowledged data in the network. When an acknowledgment is received, the current value of the counter is used as a sample of the RTT. The sample is used together with Van Jacobson's standard TCP RTT estimation function to calculate an estimate of the RTT. Karn's algorithm is used to ensure that retransmissions do not skew the estimates.

+Retransmissions

+Retransmissions are driven by the periodic TCP timer. Every time the periodic timer is invoked, the retransmission timer for each connection is decremented. If the timer reaches zero, a retransmission should be made.

+As uIP does not keep track of packet contents after they have been sent by the device driver, uIP requires that the application takes an active part in performing the retransmission. When uIP decides that a segment should be retransmitted, it calls the application with a flag set indicating that a retransmission is required. The application checks the retransmission flag and produces the same data that was previously sent. From the application's standpoint, performing a retransmission is not different from how the data originally was sent. Therefore the application can be written in such a way that the same code is used both for sending data and retransmitting data. Also, it is important to note that even though the actual retransmission operation is carried out by the application, it is the responsibility of the stack to know when the retransmission should be made. Thus the complexity of the application does not necessarily increase because it takes an active part in doing retransmissions.

+Flow Control

+The purpose of TCP's flow control mechanisms is to allow communication between hosts with wildly varying memory dimensions. In each TCP segment, the sender of the segment indicates its available buffer space. A TCP sender must not send more data than the buffer space indicated by the receiver.

+In uIP, the application cannot send more data than the receiving host can buffer. And application cannot send more data than the amount of bytes it is allowed to send by the receiving host. If the remote host cannot accept any data at all, the stack initiates the zero window probing mechanism.

+Congestion Control

+The congestion control mechanisms limit the number of simultaneous TCP segments in the network. The algorithms used for congestion control are designed to be simple to implement and require only a few lines of code.

+Since uIP only handles one in-flight TCP segment per connection, the amount of simultaneous segments cannot be further limited, thus the congestion control mechanisms are not needed.

+Urgent Data

+TCP's urgent data mechanism provides an application-to-application notification mechanism, which can be used by an application to mark parts of the data stream as being more urgent than the normal stream. It is up to the receiving application to interpret the meaning of the urgent data.

+In many TCP implementations, including the BSD implementation, the urgent data feature increases the complexity of the implementation because it requires an asynchronous notification mechanism in an otherwise synchronous API. As uIP already use an asynchronous event based API, the implementation of the urgent data feature does not lead to increased complexity.

+Performance

+In TCP/IP implementations for high-end systems, processing time is dominated by the checksum calculation loop, the operation of copying packet data and context switching. Operating systems for high-end systems often have multiple protection domains for protecting kernel data from user processes and user processes from each other. Because the TCP/IP stack is run in the kernel, data has to be copied between the kernel space and the address space of the user processes and a context switch has to be performed once the data has been copied. Performance can be enhanced by combining the copy operation with the checksum calculation. Because high-end systems usually have numerous active connections, packet demultiplexing is also an expensive operation.

+A small embedded device does not have the necessary processing power to have multiple protection domains and the power to run a multitasking operating system. Therefore there is no need to copy data between the TCP/IP stack and the application program. With an event based API there is no context switch between the TCP/IP stack and the applications.

+In such limited systems, the TCP/IP processing overhead is dominated by the copying of packet data from the network device to host memory, and checksum calculation. Apart from the checksum calculation and copying, the TCP processing done for an incoming packet involves only updating a few counters and flags before handing the data over to the application. Thus an estimate of the CPU overhead of our TCP/IP implementations can be obtained by calculating the amount of CPU cycles needed for the checksum calculation and copying of a maximum sized packet.

+The Impact of Delayed Acknowledgments

+Most TCP receivers implement the delayed acknowledgment algorithm for reducing the number of pure acknowledgment packets sent. A TCP receiver using this algorithm will only send acknowledgments for every other received segment. If no segment is received within a specific time-frame, an acknowledgment is sent. The time-frame can be as high as 500 ms but typically is 200 ms.

+A TCP sender such as uIP that only handles a single outstanding TCP segment will interact poorly with the delayed acknowledgment algorithm. Because the receiver only receives a single segment at a time, it will wait as much as 500 ms before an acknowledgment is sent. This means that the maximum possible throughput is severely limited by the 500 ms idle time.

+Thus the maximum throughput equation when sending data from uIP will be $p = s / (t + t_d)$ where $s$ is the segment size and $t_d$ is the delayed acknowledgment timeout, which typically is between 200 and 500 ms. With a segment size of 1000 bytes, a round-trip time of 40 ms and a delayed acknowledgment timeout of 200 ms, the maximum throughput will be 4166 bytes per second. With the delayed acknowledgment algorithm disabled at the receiver, the maximum throughput would be 25000 bytes per second.

+It should be noted, however, that since small systems running uIP are not very likely to have large amounts of data to send, the delayed acknowledgmen t throughput degradation of uIP need not be very severe. Small amounts of data sent by such a system will not span more than a single TCP segment, and would therefore not be affected by the throughput degradation anyway.

+The maximum throughput when uIP acts as a receiver is not affected by the delayed acknowledgment throughput degradation.


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/modules.html b/components/net/uip/doc/html/modules.html new file mode 100644 index 0000000000000000000000000000000000000000..254612a4d52dbd83e7f7fd4e1103d2665b89ff3e --- /dev/null +++ b/components/net/uip/doc/html/modules.html @@ -0,0 +1,51 @@ + + +uIP 1.0: Module Index + + + + + +

uIP 1.0 Modules

Here is a list of all modules: +
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/tab_b.gif b/components/net/uip/doc/html/tab_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..0d623483ffdf5f9f96900108042a7ab0643fe2a3 Binary files /dev/null and b/components/net/uip/doc/html/tab_b.gif differ diff --git a/components/net/uip/doc/html/tab_l.gif b/components/net/uip/doc/html/tab_l.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b1e6337c9299a700401a2a78a2c6ffced475216 Binary files /dev/null and b/components/net/uip/doc/html/tab_l.gif differ diff --git a/components/net/uip/doc/html/tab_r.gif b/components/net/uip/doc/html/tab_r.gif new file mode 100644 index 0000000000000000000000000000000000000000..ce9dd9f533cb5486d6941844f442b59d4a9e9175 Binary files /dev/null and b/components/net/uip/doc/html/tab_r.gif differ diff --git a/components/net/uip/doc/html/tabs.css b/components/net/uip/doc/html/tabs.css new file mode 100644 index 0000000000000000000000000000000000000000..a61552a67ad217c0d67da13e4d3f24c9d2c87119 --- /dev/null +++ b/components/net/uip/doc/html/tabs.css @@ -0,0 +1,102 @@ +/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ + +DIV.tabs +{ + float : left; + width : 100%; + background : url("tab_b.gif") repeat-x bottom; + margin-bottom : 4px; +} + +DIV.tabs UL +{ + margin : 0px; + padding-left : 10px; + list-style : none; +} + +DIV.tabs LI, DIV.tabs FORM +{ + display : inline; + margin : 0px; + padding : 0px; +} + +DIV.tabs FORM +{ + float : right; +} + +DIV.tabs A +{ + float : left; + background : url("tab_r.gif") no-repeat right top; + border-bottom : 1px solid #84B0C7; + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + +DIV.tabs A:hover +{ + background-position: 100% -150px; +} + +DIV.tabs A:link, DIV.tabs A:visited, +DIV.tabs A:active, DIV.tabs A:hover +{ + color: #1A419D; +} + +DIV.tabs SPAN +{ + float : left; + display : block; + background : url("tab_l.gif") no-repeat left top; + padding : 5px 9px; + white-space : nowrap; +} + +DIV.tabs INPUT +{ + float : right; + display : inline; + font-size : 1em; +} + +DIV.tabs TD +{ + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + + + +/* Commented Backslash Hack hides rule from IE5-Mac \*/ +DIV.tabs SPAN {float : none;} +/* End IE5-Mac hack */ + +DIV.tabs A:hover SPAN +{ + background-position: 0% -150px; +} + +DIV.tabs LI#current A +{ + background-position: 100% -150px; + border-width : 0px; +} + +DIV.tabs LI#current SPAN +{ + background-position: 0% -150px; + padding-bottom : 6px; +} + +DIV.nav +{ + background : none; + border : none; + border-bottom : 1px solid #84B0C7; +} diff --git a/components/net/uip/doc/html/tree.html b/components/net/uip/doc/html/tree.html new file mode 100644 index 0000000000000000000000000000000000000000..ba4787fc695ca72679f0a651250059c35d9086de --- /dev/null +++ b/components/net/uip/doc/html/tree.html @@ -0,0 +1,223 @@ + + + + + + + TreeView + + + + + +
+

uIP 1.0

+
+

o*The uIP TCP/IP stack

+

o+File List

+ +

o+Data Structures

+ +

o+Class Hierarchy

+ +

o*Data Fields

+

o+Modules

+ +

o+Examples

+ +

\*Globals

+
+
+ + diff --git a/components/net/uip/doc/mobisys2003.pdf b/components/net/uip/doc/mobisys2003.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f5e7425d191f6b717669bbc7a44e2343f02e70d1 Binary files /dev/null and b/components/net/uip/doc/mobisys2003.pdf differ diff --git a/components/net/uip/doc/pt-doc.txt b/components/net/uip/doc/pt-doc.txt new file mode 100644 index 0000000000000000000000000000000000000000..b26c651cfaf9130c03ce489bb5f0b246e15bf1d8 --- /dev/null +++ b/components/net/uip/doc/pt-doc.txt @@ -0,0 +1,173 @@ +/** +\defgroup pt Protothreads + +Protothreads are a type of lightweight stackless threads designed for +severly memory constrained systems such as deeply embedded systems or +sensor network nodes. Protothreads provides linear code execution for +event-driven systems implemented in C. Protothreads can be used with +or without an RTOS. + +Protothreads are a extremely lightweight, stackless type of threads +that provides a blocking context on top of an event-driven system, +without the overhead of per-thread stacks. The purpose of protothreads +is to implement sequential flow of control without complex state +machines or full multi-threading. Protothreads provides conditional +blocking inside C functions. + +The advantage of protothreads over a purely event-driven approach is +that protothreads provides a sequential code structure that allows for +blocking functions. In purely event-driven systems, blocking must be +implemented by manually breaking the function into two pieces - one +for the piece of code before the blocking call and one for the code +after the blocking call. This makes it hard to use control structures +such as if() conditionals and while() loops. + +The advantage of protothreads over ordinary threads is that a +protothread do not require a separate stack. In memory constrained +systems, the overhead of allocating multiple stacks can consume large +amounts of the available memory. In contrast, each protothread only +requires between two and twelve bytes of state, depending on the +architecture. + +\note Because protothreads do not save the stack context across a +blocking call, local variables are not preserved when the +protothread blocks. This means that local variables should be used +with utmost care - if in doubt, do not use local variables inside a +protothread! + + +Main features: + + - No machine specific code - the protothreads library is pure C + + - Does not use error-prone functions such as longjmp() + + - Very small RAM overhead - only two bytes per protothread + + - Can be used with or without an OS + + - Provides blocking wait without full multi-threading or + stack-switching + +Examples applications: + + - Memory constrained systems + + - Event-driven protocol stacks + + - Deeply embedded systems + + - Sensor network nodes + +The protothreads API consists of four basic operations: +initialization: PT_INIT(), execution: PT_BEGIN(), conditional +blocking: PT_WAIT_UNTIL() and exit: PT_END(). On top of these, two +convenience functions are built: reversed condition blocking: +PT_WAIT_WHILE() and protothread blocking: PT_WAIT_THREAD(). + +\sa \ref pt "Protothreads API documentation" + +The protothreads library is released under a BSD-style license that +allows for both non-commercial and commercial usage. The only +requirement is that credit is given. + +\section authors Authors + +The protothreads library was written by Adam Dunkels +with support from Oliver Schmidt . + +\section pt-desc Protothreads + +Protothreads are a extremely lightweight, stackless threads that +provides a blocking context on top of an event-driven system, without +the overhead of per-thread stacks. The purpose of protothreads is to +implement sequential flow of control without using complex state +machines or full multi-threading. Protothreads provides conditional +blocking inside a C function. + +In memory constrained systems, such as deeply embedded systems, +traditional multi-threading may have a too large memory overhead. In +traditional multi-threading, each thread requires its own stack, that +typically is over-provisioned. The stacks may use large parts of the +available memory. + +The main advantage of protothreads over ordinary threads is that +protothreads are very lightweight: a protothread does not require its +own stack. Rather, all protothreads run on the same stack and context +switching is done by stack rewinding. This is advantageous in memory +constrained systems, where a stack for a thread might use a large part +of the available memory. A protothread only requires only two bytes of +memory per protothread. Moreover, protothreads are implemented in pure +C and do not require any machine-specific assembler code. + +A protothread runs within a single C function and cannot span over +other functions. A protothread may call normal C functions, but cannot +block inside a called function. Blocking inside nested function calls +is instead made by spawning a separate protothread for each +potentially blocking function. The advantage of this approach is that +blocking is explicit: the programmer knows exactly which functions +that block that which functions the never blocks. + +Protothreads are similar to asymmetric co-routines. The main +difference is that co-routines uses a separate stack for each +co-routine, whereas protothreads are stackless. The most similar +mechanism to protothreads are Python generators. These are also +stackless constructs, but have a different purpose. Protothreads +provides blocking contexts inside a C function, whereas Python +generators provide multiple exit points from a generator function. + +\section pt-autovars Local variables + +\note +Because protothreads do not save the stack context across a blocking +call, local variables are not preserved when the protothread +blocks. This means that local variables should be used with utmost +care - if in doubt, do not use local variables inside a protothread! + +\section pt-scheduling Scheduling + +A protothread is driven by repeated calls to the function in which the +protothread is running. Each time the function is called, the +protothread will run until it blocks or exits. Thus the scheduling of +protothreads is done by the application that uses protothreads. + +\section pt-impl Implementation + +Protothreads are implemented using \ref lc "local continuations". A +local continuation represents the current state of execution at a +particular place in the program, but does not provide any call history +or local variables. A local continuation can be set in a specific +function to capture the state of the function. After a local +continuation has been set can be resumed in order to restore the state +of the function at the point where the local continuation was set. + + +Local continuations can be implemented in a variety of ways: + + -# by using machine specific assembler code, + -# by using standard C constructs, or + -# by using compiler extensions. + +The first way works by saving and restoring the processor state, +except for stack pointers, and requires between 16 and 32 bytes of +memory per protothread. The exact amount of memory required depends on +the architecture. + +The standard C implementation requires only two bytes of state per +protothread and utilizes the C switch() statement in a non-obvious way +that is similar to Duff's device. This implementation does, however, +impose a slight restriction to the code that uses protothreads in that +the code cannot use switch() statements itself. + +Certain compilers has C extensions that can be used to implement +protothreads. GCC supports label pointers that can be used for this +purpose. With this implementation, protothreads require 4 bytes of RAM +per protothread. + +@{ + + +*/ + +/** @} */ + diff --git a/components/net/uip/doc/sicslogo.pdf b/components/net/uip/doc/sicslogo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..239a1bff685276ed63e7f9cf03b2ea3a2f29ed1e Binary files /dev/null and b/components/net/uip/doc/sicslogo.pdf differ diff --git a/components/net/uip/doc/uip-code-style.c b/components/net/uip/doc/uip-code-style.c new file mode 100644 index 0000000000000000000000000000000000000000..b62c5b10086048d56dfa73a45c19835f4a7cf7a6 --- /dev/null +++ b/components/net/uip/doc/uip-code-style.c @@ -0,0 +1,118 @@ +/* This is the official code style of uIP. */ + +/** + * \defgroup codestyle Coding style + * + * This is how a Doxygen module is documented - start with a \defgroup + * Doxygen keyword at the beginning of the file to define a module, + * and use the \addtogroup Doxygen keyword in all other files that + * belong to the same module. Typically, the \defgroup is placed in + * the .h file and \addtogroup in the .c file. + * + * @{ + */ + +/** + * \file + * A brief description of what this file is. + * \author + * Adam Dunkels + * + * Every file that is part of a documented module has to have + * a \file block, else it will not show up in the Doxygen + * "Modules" * section. + */ + +/* Single line comments look like this. */ + +/* + * Multi-line comments look like this. Comments should prefferably be + * full sentences, filled to look like real paragraphs. + */ + +#include "uip.h" + +/* + * Make sure that non-global variables are all maked with the static + * keyword. This keeps the size of the symbol table down. + */ +static int flag; + +/* + * All variables and functions that are visible outside of the file + * should have the module name prepended to them. This makes it easy + * to know where to look for function and variable definitions. + * + * Put dividers (a single-line comment consisting only of dashes) + * between functions. + */ +/*---------------------------------------------------------------------------*/ +/** + * \brief Use Doxygen documentation for functions. + * \param c Briefly describe all parameters. + * \return Briefly describe the return value. + * \retval 0 Functions that return a few specified values + * \retval 1 can use the \retval keyword instead of \return. + * + * Put a longer description of what the function does + * after the preamble of Doxygen keywords. + * + * This template should always be used to document + * functions. The text following the introduction is used + * as the function's documentation. + * + * Function prototypes have the return type on one line, + * the name and arguments on one line (with no space + * between the name and the first parenthesis), followed + * by a single curly bracket on its own line. + */ +void +code_style_example_function(void) +{ + /* + * Local variables should always be declared at the start of the + * function. + */ + int i; /* Use short variable names for loop + counters. */ + + /* + * There should be no space between keywords and the first + * parenthesis. There should be spaces around binary operators, no + * spaces between a unary operator and its operand. + * + * Curly brackets following for(), if(), do, and case() statements + * should follow the statement on the same line. + */ + for(i = 0; i < 10; ++i) { + /* + * Always use full blocks (curly brackets) after if(), for(), and + * while() statements, even though the statement is a single line + * of code. This makes the code easier to read and modifications + * are less error prone. + */ + if(i == c) { + return c; /* No parentesis around return values. */ + } else { /* The else keyword is placed inbetween + curly brackers, always on its own line. */ + c++; + } + } +} +/*---------------------------------------------------------------------------*/ +/* + * Static (non-global) functions do not need Doxygen comments. The + * name should not be prepended with the module name - doing so would + * create confusion. + */ +static void +an_example_function(void) +{ + +} +/*---------------------------------------------------------------------------*/ + +/* The following stuff ends the \defgroup block at the beginning of + the file: */ + +/** @} */ diff --git a/components/net/uip/doc/uip-code-style.txt b/components/net/uip/doc/uip-code-style.txt new file mode 100644 index 0000000000000000000000000000000000000000..db6a632273c5dbe8193ee25107214ff679435be7 --- /dev/null +++ b/components/net/uip/doc/uip-code-style.txt @@ -0,0 +1,3 @@ +/** + \example uip-code-style.c + */ diff --git a/components/net/uip/doc/uip-doc.txt b/components/net/uip/doc/uip-doc.txt new file mode 100644 index 0000000000000000000000000000000000000000..894b1bc13a5e96bba7d802bffa179b4460d3fb28 --- /dev/null +++ b/components/net/uip/doc/uip-doc.txt @@ -0,0 +1,1180 @@ + + +/** +\mainpage The uIP TCP/IP stack +\author Adam Dunkels, http://www.sics.se/~adam/ + +The uIP TCP/IP stack is intended to make it possible to communicate +using the TCP/IP protocol suite even on small 8-bit +micro-controllers. Despite being small and simple, uIP do not require +their peers to have complex, full-size stacks, but can communicate +with peers running a similarly light-weight stack. The code size is on +the order of a few kilobytes and RAM usage can be configured to be as +low as a few hundred bytes. + +uIP can be found at the uIP web page: http://www.sics.se/~adam/uip/ + +\sa \ref apps "Application programs" +\sa \ref uipopt "Compile-time configuration options" +\sa \ref uipconffunc "Run-time configuration functions" +\sa \ref uipinit "Initialization functions" +\sa \ref uipdevfunc "Device driver interface" and + \ref uipdrivervars "variables used by device drivers" +\sa \ref uipappfunc "uIP functions called from application programs" +(see below) and the \ref psock "protosockets API" and their underlying +\ref pt "protothreads" + +\section uIPIntroduction Introduction + +With the success of the Internet, the TCP/IP protocol suite has become +a global standard for communication. TCP/IP is the underlying protocol +used for web page transfers, e-mail transmissions, file transfers, and +peer-to-peer networking over the Internet. For embedded systems, being +able to run native TCP/IP makes it possible to connect the system +directly to an intranet or even the global Internet. Embedded devices +with full TCP/IP support will be first-class network citizens, thus +being able to fully communicate with other hosts in the network. + +Traditional TCP/IP implementations have required far too much +resources both in terms of code size and memory usage to be useful in +small 8 or 16-bit systems. Code size of a few hundred kilobytes and +RAM requirements of several hundreds of kilobytes have made it +impossible to fit the full TCP/IP stack into systems with a few tens +of kilobytes of RAM and room for less than 100 kilobytes of +code. + +The uIP implementation is designed to have only the absolute minimal +set of features needed for a full TCP/IP stack. It can only handle a +single network interface and contains the IP, ICMP, UDP and TCP +protocols. uIP is written in the C programming language. + +Many other TCP/IP implementations for small systems assume that the +embedded device always will communicate with a full-scale TCP/IP +implementation running on a workstation-class machine. Under this +assumption, it is possible to remove certain TCP/IP mechanisms that +are very rarely used in such situations. Many of those mechanisms are +essential, however, if the embedded device is to communicate with +another equally limited device, e.g., when running distributed +peer-to-peer services and protocols. uIP is designed to be RFC +compliant in order to let the embedded devices to act as first-class +network citizens. The uIP TCP/IP implementation that is not tailored +for any specific application. + + +\section tcpip TCP/IP Communication + +The full TCP/IP suite consists of numerous protocols, ranging from low +level protocols such as ARP which translates IP addresses to MAC +addresses, to application level protocols such as SMTP that is used to +transfer e-mail. The uIP is mostly concerned with the TCP and IP +protocols and upper layer protocols will be referred to as "the +application". Lower layer protocols are often implemented in hardware +or firmware and will be referred to as "the network device" that are +controlled by the network device driver. + +TCP provides a reliable byte stream to the upper layer protocols. It +breaks the byte stream into appropriately sized segments and each +segment is sent in its own IP packet. The IP packets are sent out on +the network by the network device driver. If the destination is not on +the physically connected network, the IP packet is forwarded onto +another network by a router that is situated between the two +networks. If the maximum packet size of the other network is smaller +than the size of the IP packet, the packet is fragmented into smaller +packets by the router. If possible, the size of the TCP segments are +chosen so that fragmentation is minimized. The final recipient of the +packet will have to reassemble any fragmented IP packets before they +can be passed to higher layers. + +The formal requirements for the protocols in the TCP/IP stack is +specified in a number of RFC documents published by the Internet +Engineering Task Force, IETF. Each of the protocols in the stack is +defined in one more RFC documents and RFC1122 collects +all requirements and updates the previous RFCs. + +The RFC1122 requirements can be divided into two categories; those +that deal with the host to host communication and those that deal with +communication between the application and the networking stack. An +example of the first kind is "A TCP MUST be able to receive a TCP +option in any segment" and an example of the second kind is "There +MUST be a mechanism for reporting soft TCP error conditions to the +application." A TCP/IP implementation that violates requirements of +the first kind may not be able to communicate with other TCP/IP +implementations and may even lead to network failures. Violation of +the second kind of requirements will only affect the communication +within the system and will not affect host-to-host communication. + +In uIP, all RFC requirements that affect host-to-host communication +are implemented. However, in order to reduce code size, we have +removed certain mechanisms in the interface between the application +and the stack, such as the soft error reporting mechanism and +dynamically configurable type-of-service bits for TCP +connections. Since there are only very few applications that make use +of those features they can be removed without loss of generality. + +\section mainloop Main Control Loop + +The uIP stack can be run either as a task in a multitasking system, or +as the main program in a singletasking system. In both cases, the main +control loop does two things repeatedly: + + - Check if a packet has arrived from the network. + - Check if a periodic timeout has occurred. + +If a packet has arrived, the input handler function, uip_input(), +should be invoked by the main control loop. The input handler function +will never block, but will return at once. When it returns, the stack +or the application for which the incoming packet was intended may have +produced one or more reply packets which should be sent out. If so, +the network device driver should be called to send out these packets. + +Periodic timeouts are used to drive TCP mechanisms that depend on +timers, such as delayed acknowledgments, retransmissions and +round-trip time estimations. When the main control loop infers that +the periodic timer should fire, it should invoke the timer handler +function uip_periodic(). Because the TCP/IP stack may perform +retransmissions when dealing with a timer event, the network device +driver should called to send out the packets that may have been produced. + +\section arch Architecture Specific Functions + +uIP requires a few functions to be implemented specifically for the +architecture on which uIP is intended to run. These functions should +be hand-tuned for the particular architecture, but generic C +implementations are given as part of the uIP distribution. + +\subsection checksums Checksum Calculation + +The TCP and IP protocols implement a checksum that covers the data and +header portions of the TCP and IP packets. Since the calculation of +this checksum is made over all bytes in every packet being sent and +received it is important that the function that calculates the +checksum is efficient. Most often, this means that the checksum +calculation must be fine-tuned for the particular architecture on +which the uIP stack runs. + +While uIP includes a generic checksum function, it also leaves it open +for an architecture specific implementation of the two functions +uip_ipchksum() and uip_tcpchksum(). The checksum calculations in those +functions can be written in highly optimized assembler rather than +generic C code. + +\subsection longarith 32-bit Arithmetic + +The TCP protocol uses 32-bit sequence numbers, and a TCP +implementation will have to do a number of 32-bit additions as part of +the normal protocol processing. Since 32-bit arithmetic is not +natively available on many of the platforms for which uIP is intended, +uIP leaves the 32-bit additions to be implemented by the architecture +specific module and does not make use of any 32-bit arithmetic in the +main code base. + +While uIP implements a generic 32-bit addition, there is support for +having an architecture specific implementation of the uip_add32() +function. + + +\section memory Memory Management + +In the architectures for which uIP is intended, RAM is the most +scarce resource. With only a few kilobytes of RAM available for the +TCP/IP stack to use, mechanisms used in traditional TCP/IP cannot be +directly applied. + + +The uIP stack does not use explicit dynamic memory +allocation. Instead, it uses a single global buffer for holding +packets and has a fixed table for holding connection state. The global +packet buffer is large enough to contain one packet of maximum +size. When a packet arrives from the network, the device driver places +it in the global buffer and calls the TCP/IP stack. If the packet +contains data, the TCP/IP stack will notify the corresponding +application. Because the data in the buffer will be overwritten by the +next incoming packet, the application will either have to act +immediately on the data or copy the data into a secondary buffer for +later processing. The packet buffer will not be overwritten by new +packets before the application has processed the data. Packets that +arrive when the application is processing the data must be queued, +either by the network device or by the device driver. Most single-chip +Ethernet controllers have on-chip buffers that are large enough to +contain at least 4 maximum sized Ethernet frames. Devices that are +handled by the processor, such as RS-232 ports, can copy incoming +bytes to a separate buffer during application processing. If the +buffers are full, the incoming packet is dropped. This will cause +performance degradation, but only when multiple connections are +running in parallel. This is because uIP advertises a very small +receiver window, which means that only a single TCP segment will be in +the network per connection. + +In uIP, the same global packet buffer that is used for incoming +packets is also used for the TCP/IP headers of outgoing data. If the +application sends dynamic data, it may use the parts of the global +packet buffer that are not used for headers as a temporary storage +buffer. To send the data, the application passes a pointer to the data +as well as the length of the data to the stack. The TCP/IP headers are +written into the global buffer and once the headers have been +produced, the device driver sends the headers and the application data +out on the network. The data is not queued for +retransmissions. Instead, the application will have to reproduce the +data if a retransmission is necessary. + +The total amount of memory usage for uIP depends heavily on the +applications of the particular device in which the implementations are +to be run. The memory configuration determines both the amount of +traffic the system should be able to handle and the maximum amount of +simultaneous connections. A device that will be sending large e-mails +while at the same time running a web server with highly dynamic web +pages and multiple simultaneous clients, will require more RAM than a +simple Telnet server. It is possible to run the uIP implementation +with as little as 200 bytes of RAM, but such a configuration will +provide extremely low throughput and will only allow a small number of +simultaneous connections. + +\section api Application Program Interface (API) + + +The Application Program Interface (API) defines the way the +application program interacts with the TCP/IP stack. The most commonly +used API for TCP/IP is the BSD socket API which is used in most Unix +systems and has heavily influenced the Microsoft Windows WinSock +API. Because the socket API uses stop-and-wait semantics, it requires +support from an underlying multitasking operating system. Since the +overhead of task management, context switching and allocation of stack +space for the tasks might be too high in the intended uIP target +architectures, the BSD socket interface is not suitable for our +purposes. + +uIP provides two APIs to programmers: protosockets, a BSD socket-like +API without the overhead of full multi-threading, and a "raw" +event-based API that is nore low-level than protosockets but uses less +memory. + +\sa \ref psock +\sa \ref pt + + +\subsection rawapi The uIP raw API + +The "raw" uIP API uses an event driven interface where the application is +invoked in response to certain events. An application running on top +of uIP is implemented as a C function that is called by uIP in +response to certain events. uIP calls the application when data is +received, when data has been successfully delivered to the other end +of the connection, when a new connection has been set up, or when data +has to be retransmitted. The application is also periodically polled +for new data. The application program provides only one callback +function; it is up to the application to deal with mapping different +network services to different ports and connections. Because the +application is able to act on incoming data and connection requests as +soon as the TCP/IP stack receives the packet, low response times can +be achieved even in low-end systems. + +uIP is different from other TCP/IP stacks in that it requires help +from the application when doing retransmissions. Other TCP/IP stacks +buffer the transmitted data in memory until the data is known to be +successfully delivered to the remote end of the connection. If the +data needs to be retransmitted, the stack takes care of the +retransmission without notifying the application. With this approach, +the data has to be buffered in memory while waiting for an +acknowledgment even if the application might be able to quickly +regenerate the data if a retransmission has to be made. + +In order to reduce memory usage, uIP utilizes the fact that the +application may be able to regenerate sent data and lets the +application take part in retransmissions. uIP does not keep track of +packet contents after they have been sent by the device driver, and +uIP requires that the application takes an active part in performing +the retransmission. When uIP decides that a segment should be +retransmitted, it calls the application with a flag set indicating +that a retransmission is required. The application checks the +retransmission flag and produces the same data that was previously +sent. From the application's standpoint, performing a retransmission +is not different from how the data originally was sent. Therefore the +application can be written in such a way that the same code is used +both for sending data and retransmitting data. Also, it is important +to note that even though the actual retransmission operation is +carried out by the application, it is the responsibility of the stack +to know when the retransmission should be made. Thus the complexity of +the application does not necessarily increase because it takes an +active part in doing retransmissions. + +\subsubsection appevents Application Events + +The application must be implemented as a C function, UIP_APPCALL(), +that uIP calls whenever an event occurs. Each event has a corresponding +test function that is used to distinguish between different +events. The functions are implemented as C macros that will evaluate +to either zero or non-zero. Note that certain events can happen in +conjunction with each other (i.e., new data can arrive at the same +time as data is acknowledged). + +\subsubsection connstate The Connection Pointer + +When the application is called by uIP, the global variable uip_conn is +set to point to the uip_conn structure for the connection that +currently is handled, and is called the "current connection". The +fields in the uip_conn structure for the current connection can be +used, e.g., to distinguish between different services, or to check to +which IP address the connection is connected. One typical use would be +to inspect the uip_conn->lport (the local TCP port number) to decide +which service the connection should provide. For instance, an +application might decide to act as an HTTP server if the value of +uip_conn->lport is equal to 80 and act as a TELNET server if the value +is 23. + +\subsubsection recvdata Receiving Data + +If the uIP test function uip_newdata() is non-zero, the remote host of +the connection has sent new data. The uip_appdata pointer point to the +actual data. The size of the data is obtained through the uIP function +uip_datalen(). The data is not buffered by uIP, but will be +overwritten after the application function returns, and the +application will therefor have to either act directly on the incoming +data, or by itself copy the incoming data into a buffer for later +processing. + +\subsubsection senddata Sending Data + +When sending data, uIP adjusts the length of the data sent by the +application according to the available buffer space and the current +TCP window advertised by the receiver. The amount of buffer space is +dictated by the memory configuration. It is therefore possible that +all data sent from the application does not arrive at the receiver, +and the application may use the uip_mss() function to see how much +data that actually will be sent by the stack. + +The application sends data by using the uIP function uip_send(). The +uip_send() function takes two arguments; a pointer to the data to be +sent and the length of the data. If the application needs RAM space +for producing the actual data that should be sent, the packet buffer +(pointed to by the uip_appdata pointer) can be used for this purpose. + +The application can send only one chunk of data at a time on a +connection and it is not possible to call uip_send() more than once +per application invocation; only the data from the last call will be +sent. + +\subsubsection rexmitdata Retransmitting Data + +Retransmissions are driven by the periodic TCP timer. Every time the +periodic timer is invoked, the retransmission timer for each +connection is decremented. If the timer reaches zero, a retransmission +should be made. As uIP does not keep track of packet contents after they have +been sent by the device driver, uIP requires that the +application takes an active part in performing the +retransmission. When uIP decides that a segment should be +retransmitted, the application function is called with the +uip_rexmit() flag set, indicating that a retransmission is +required. + +The application must check the uip_rexmit() flag and produce the same +data that was previously sent. From the application's standpoint, +performing a retransmission is not different from how the data +originally was sent. Therefor, the application can be written in such +a way that the same code is used both for sending data and +retransmitting data. Also, it is important to note that even though +the actual retransmission operation is carried out by the application, +it is the responsibility of the stack to know when the retransmission +should be made. Thus the complexity of the application does not +necessarily increase because it takes an active part in doing +retransmissions. + +\subsubsection closing Closing Connections + +The application closes the current connection by calling the +uip_close() during an application call. This will cause the connection +to be cleanly closed. In order to indicate a fatal error, the +application might want to abort the connection and does so by calling +the uip_abort() function. + +If the connection has been closed by the remote end, the test function +uip_closed() is true. The application may then do any necessary +cleanups. + +\subsubsection errors Reporting Errors + +There are two fatal errors that can happen to a connection, either +that the connection was aborted by the remote host, or that the +connection retransmitted the last data too many times and has been +aborted. uIP reports this by calling the application function. The +application can use the two test functions uip_aborted() and +uip_timedout() to test for those error conditions. + +\subsubsection polling Polling + +When a connection is idle, uIP polls the application every time the +periodic timer fires. The application uses the test function +uip_poll() to check if it is being polled by uIP. + +The polling event has two purposes. The first is to let the +application periodically know that a connection is idle, which allows +the application to close connections that have been idle for too +long. The other purpose is to let the application send new data that +has been produced. The application can only send data when invoked by +uIP, and therefore the poll event is the only way to send data on an +otherwise idle connection. + +\subsubsection listen Listening Ports + +uIP maintains a list of listening TCP ports. A new port is opened for +listening with the uip_listen() function. When a connection request +arrives on a listening port, uIP creates a new connection and calls +the application function. The test function uip_connected() is true if +the application was invoked because a new connection was created. + +The application can check the lport field in the uip_conn structure to +check to which port the new connection was connected. + +\subsubsection connect Opening Connections + +New connections can be opened from within +uIP by the function uip_connect(). This function +allocates a new connection and sets a flag in the connection state +which will open a TCP connection to the specified IP address and port +the next time the connection is polled by uIP. The uip_connect() +function returns +a pointer to the uip_conn structure for the new +connection. If there are no free connection slots, the function +returns NULL. + +The function uip_ipaddr() may be used to pack an IP address into the +two element 16-bit array used by uIP to represent IP addresses. + +Two examples of usage are shown below. The first example shows how to +open a connection to TCP port 8080 of the remote end of the current +connection. If there are not enough TCP connection slots to allow a +new connection to be opened, the uip_connect() function returns NULL +and the current connection is aborted by uip_abort(). + +\code +void connect_example1_app(void) { + if(uip_connect(uip_conn->ripaddr, HTONS(8080)) == NULL) { + uip_abort(); + } +} +\endcode + +The second example shows how to open a new connection to a specific IP +address. No error checks are made in this example. + +\code +void connect_example2(void) { + u16_t ipaddr[2]; + + uip_ipaddr(ipaddr, 192,168,0,1); + uip_connect(ipaddr, HTONS(8080)); +} +\endcode + +\section examples Examples + +This section presents a number of very simple uIP applications. The +uIP code distribution contains several more complex applications. + +\subsection example1 A Very Simple Application + +This first example shows a very simple application. The application +listens for incoming connections on port 1234. When a connection has +been established, the application replies to all data sent to it by +saying "ok" + +The implementation of this application is shown below. The application +is initialized with the function called example1_init() and the uIP +callback function is called example1_app(). For this application, the +configuration variable UIP_APPCALL should be defined to be +example1_app(). + +\code +void example1_init(void) { + uip_listen(HTONS(1234)); +} + +void example1_app(void) { + if(uip_newdata() || uip_rexmit()) { + uip_send("ok\n", 3); + } +} +\endcode + +The initialization function calls the uIP function uip_listen() to +register a listening port. The actual application function +example1_app() uses the test functions uip_newdata() and uip_rexmit() +to determine why it was called. If the application was called because +the remote end has sent it data, it responds with an "ok". If the +application function was called because data was lost in the network +and has to be retransmitted, it also sends an "ok". Note that this +example actually shows a complete uIP application. It is not required +for an application to deal with all types of events such as +uip_connected() or uip_timedout(). + +\subsection example2 A More Advanced Application + +This second example is slightly more advanced than the previous one, +and shows how the application state field in the uip_conn structure is +used. + +This application is similar to the first application in that it +listens to a port for incoming connections and responds to data sent +to it with a single "ok". The big difference is that this application +prints out a welcoming "Welcome!" message when the connection has been +established. + +This seemingly small change of operation makes a big difference in how +the application is implemented. The reason for the increase in +complexity is that if data should be lost in the network, the +application must know what data to retransmit. If the "Welcome!" +message was lost, the application must retransmit the welcome and if +one of the "ok" messages is lost, the application must send a new +"ok". + +The application knows that as long as the "Welcome!" message has not +been acknowledged by the remote host, it might have been dropped in +the network. But once the remote host has sent an acknowledgment +back, the application can be sure that the welcome has been received +and knows that any lost data must be an "ok" message. Thus the +application can be in either of two states: either in the WELCOME-SENT +state where the "Welcome!" has been sent but not acknowledged, or in +the WELCOME-ACKED state where the "Welcome!" has been acknowledged. + +When a remote host connects to the application, the application sends +the "Welcome!" message and sets it's state to WELCOME-SENT. When the +welcome message is acknowledged, the application moves to the +WELCOME-ACKED state. If the application receives any new data from the +remote host, it responds by sending an "ok" back. + +If the application is requested to retransmit the last message, it +looks at in which state the application is. If the application is in +the WELCOME-SENT state, it sends a "Welcome!" message since it +knows that the previous welcome message hasn't been acknowledged. If +the application is in the WELCOME-ACKED state, it knows that the last +message was an "ok" message and sends such a message. + +The implementation of this application is seen below. This +configuration settings for the application is follows after its +implementation. + +\code +struct example2_state { + enum {WELCOME_SENT, WELCOME_ACKED} state; +}; + +void example2_init(void) { + uip_listen(HTONS(2345)); +} + +void example2_app(void) { + struct example2_state *s; + + s = (struct example2_state *)uip_conn->appstate; + + if(uip_connected()) { + s->state = WELCOME_SENT; + uip_send("Welcome!\n", 9); + return; + } + + if(uip_acked() && s->state == WELCOME_SENT) { + s->state = WELCOME_ACKED; + } + + if(uip_newdata()) { + uip_send("ok\n", 3); + } + + if(uip_rexmit()) { + switch(s->state) { + case WELCOME_SENT: + uip_send("Welcome!\n", 9); + break; + case WELCOME_ACKED: + uip_send("ok\n", 3); + break; + } + } +} +\endcode + +The configuration for the application: + +\code +#define UIP_APPCALL example2_app +#define UIP_APPSTATE_SIZE sizeof(struct example2_state) +\endcode + +\subsection example3 Differentiating Between Applications + +If the system should run multiple applications, one technique to +differentiate between them is to use the TCP port number of either the +remote end or the local end of the connection. The example below shows +how the two examples above can be combined into one application. + +\code +void example3_init(void) { + example1_init(); + example2_init(); +} + +void example3_app(void) { + switch(uip_conn->lport) { + case HTONS(1234): + example1_app(); + break; + case HTONS(2345): + example2_app(); + break; + } +} +\endcode + +\subsection example4 Utilizing TCP Flow Control + +This example shows a simple application that connects to a host, sends +an HTTP request for a file and downloads it to a slow device such a +disk drive. This shows how to use the flow control functions of uIP. + +\code +void example4_init(void) { + u16_t ipaddr[2]; + uip_ipaddr(ipaddr, 192,168,0,1); + uip_connect(ipaddr, HTONS(80)); +} + +void example4_app(void) { + if(uip_connected() || uip_rexmit()) { + uip_send("GET /file HTTP/1.0\r\nServer:192.186.0.1\r\n\r\n", + 48); + return; + } + + if(uip_newdata()) { + device_enqueue(uip_appdata, uip_datalen()); + if(device_queue_full()) { + uip_stop(); + } + } + + if(uip_poll() && uip_stopped()) { + if(!device_queue_full()) { + uip_restart(); + } + } +} +\endcode + +When the connection has been established, an HTTP request is sent to +the server. Since this is the only data that is sent, the application +knows that if it needs to retransmit any data, it is that request that +should be retransmitted. It is therefore possible to combine these two +events as is done in the example. + +When the application receives new data from the remote host, it sends +this data to the device by using the function device_enqueue(). It is +important to note that this example assumes that this function copies +the data into its own buffers. The data in the uip_appdata buffer will +be overwritten by the next incoming packet. + +If the device's queue is full, the application stops the data from the +remote host by calling the uIP function uip_stop(). The application +can then be sure that it will not receive any new data until +uip_restart() is called. The application polling event is used to +check if the device's queue is no longer full and if so, the data flow +is restarted with uip_restart(). + +\subsection example5 A Simple Web Server + +This example shows a very simple file server application that listens +to two ports and uses the port number to determine which file to +send. If the files are properly formatted, this simple application can +be used as a web server with static pages. The implementation follows. + +\code +struct example5_state { + char *dataptr; + unsigned int dataleft; +}; + +void example5_init(void) { + uip_listen(HTONS(80)); + uip_listen(HTONS(81)); +} + +void example5_app(void) { + struct example5_state *s; + s = (struct example5_state)uip_conn->appstate; + + if(uip_connected()) { + switch(uip_conn->lport) { + case HTONS(80): + s->dataptr = data_port_80; + s->dataleft = datalen_port_80; + break; + case HTONS(81): + s->dataptr = data_port_81; + s->dataleft = datalen_port_81; + break; + } + uip_send(s->dataptr, s->dataleft); + return; + } + + if(uip_acked()) { + if(s->dataleft < uip_mss()) { + uip_close(); + return; + } + s->dataptr += uip_conn->len; + s->dataleft -= uip_conn->len; + uip_send(s->dataptr, s->dataleft); + } +} +\endcode + +The application state consists of a pointer to the data that should be +sent and the size of the data that is left to send. When a remote host +connects to the application, the local port number is used to +determine which file to send. The first chunk of data is sent using +uip_send(). uIP makes sure that no more than MSS bytes of data is +actually sent, even though s->dataleft may be larger than the MSS. + +The application is driven by incoming acknowledgments. When data has +been acknowledged, new data can be sent. If there is no more data to +send, the connection is closed using uip_close(). + +\subsection example6 Structured Application Program Design + +When writing larger programs using uIP it is useful to be able to +utilize the uIP API in a structured way. The following example +provides a structured design that has showed itself to be useful for +writing larger protocol implementations than the previous examples +showed here. The program is divided into an uIP event handler function +that calls seven application handler functions that process new data, +act on acknowledged data, send new data, deal with connection +establishment or closure events and handle errors. The functions are +called newdata(), acked(), senddata(), connected(), closed(), +aborted(), and timedout(), and needs to be written specifically for +the protocol that is being implemented. + +The uIP event handler function is shown below. + +\code +void example6_app(void) { + if(uip_aborted()) { + aborted(); + } + if(uip_timedout()) { + timedout(); + } + if(uip_closed()) { + closed(); + } + if(uip_connected()) { + connected(); + } + if(uip_acked()) { + acked(); + } + if(uip_newdata()) { + newdata(); + } + if(uip_rexmit() || + uip_newdata() || + uip_acked() || + uip_connected() || + uip_poll()) { + senddata(); + } +} +\endcode + +The function starts with dealing with any error conditions that might +have happened by checking if uip_aborted() or uip_timedout() are +true. If so, the appropriate error function is called. Also, if the +connection has been closed, the closed() function is called to the it +deal with the event. + +Next, the function checks if the connection has just been established +by checking if uip_connected() is true. The connected() function is +called and is supposed to do whatever needs to be done when the +connection is established, such as intializing the application state +for the connection. Since it may be the case that data should be sent +out, the senddata() function is called to deal with the outgoing data. + +The following very simple application serves as an example of how the +application handler functions might look. This application simply +waits for any data to arrive on the connection, and responds to the +data by sending out the message "Hello world!". To illustrate how to +develop an application state machine, this message is sent in two +parts, first the "Hello" part and then the "world!" part. + +\code +#define STATE_WAITING 0 +#define STATE_HELLO 1 +#define STATE_WORLD 2 + +struct example6_state { + u8_t state; + char *textptr; + int textlen; +}; + +static void aborted(void) {} +static void timedout(void) {} +static void closed(void) {} + +static void connected(void) { + struct example6_state *s = (struct example6_state *)uip_conn->appstate; + + s->state = STATE_WAITING; + s->textlen = 0; +} + +static void newdata(void) { + struct example6_state *s = (struct example6_state *)uip_conn->appstate; + + if(s->state == STATE_WAITING) { + s->state = STATE_HELLO; + s->textptr = "Hello "; + s->textlen = 6; + } +} + +static void acked(void) { + struct example6_state *s = (struct example6_state *)uip_conn->appstate; + + s->textlen -= uip_conn->len; + s->textptr += uip_conn->len; + if(s->textlen == 0) { + switch(s->state) { + case STATE_HELLO: + s->state = STATE_WORLD; + s->textptr = "world!\n"; + s->textlen = 7; + break; + case STATE_WORLD: + uip_close(); + break; + } + } +} + +static void senddata(void) { + struct example6_state *s = (struct example6_state *)uip_conn->appstate; + + if(s->textlen > 0) { + uip_send(s->textptr, s->textlen); + } +} +\endcode + +The application state consists of a "state" variable, a "textptr" +pointer to a text message and the "textlen" length of the text +message. The "state" variable can be either "STATE_WAITING", meaning +that the application is waiting for data to arrive from the network, +"STATE_HELLO", in which the application is sending the "Hello" part of +the message, or "STATE_WORLD", in which the application is sending the +"world!" message. + +The application does not handle errors or connection closing events, +and therefore the aborted(), timedout() and closed() functions are +implemented as empty functions. + +The connected() function will be called when a connection has been +established, and in this case sets the "state" variable to be +"STATE_WAITING" and the "textlen" variable to be zero, indicating that +there is no message to be sent out. + +When new data arrives from the network, the newdata() function will be +called by the event handler function. The newdata() function will +check if the connection is in the "STATE_WAITING" state, and if so +switches to the "STATE_HELLO" state and registers a 6 byte long "Hello +" message with the connection. This message will later be sent out by +the senddata() function. + +The acked() function is called whenever data that previously was sent +has been acknowleged by the receiving host. This acked() function +first reduces the amount of data that is left to send, by subtracting +the length of the previously sent data (obtained from "uip_conn->len") +from the "textlen" variable, and also adjusts the "textptr" pointer +accordingly. It then checks if the "textlen" variable now is zero, +which indicates that all data now has been successfully received, and +if so changes application state. If the application was in the +"STATE_HELLO" state, it switches state to "STATE_WORLD" and sets up a +7 byte "world!\n" message to be sent. If the application was in the +"STATE_WORLD" state, it closes the connection. + +Finally, the senddata() function takes care of actually sending the +data that is to be sent. It is called by the event handler function +when new data has been received, when data has been acknowledged, when +a new connection has been established, when the connection is polled +because of inactivity, or when a retransmission should be made. The +purpose of the senddata() function is to optionally format the data +that is to be sent, and to call the uip_send() function to actually +send out the data. In this particular example, the function simply +calls uip_send() with the appropriate arguments if data is to be sent, +after checking if data should be sent out or not as indicated by the +"textlen" variable. + +It is important to note that the senddata() function never should +affect the application state; this should only be done in the acked() +and newdata() functions. + +\section protoimpl Protocol Implementations + +The protocols in the TCP/IP protocol suite are designed in a layered +fashion where each protocol performs a specific function and the +interactions between the protocol layers are strictly defined. While +the layered approach is a good way to design protocols, it is not +always the best way to implement them. In uIP, the protocol +implementations are tightly coupled in order to save code space. + +This section gives detailed information on the specific protocol +implementations in uIP. + +\subsection ip IP --- Internet Protocol + +When incoming packets are processed by uIP, the IP layer is the first +protocol that examines the packet. The IP layer does a few simple +checks such as if the destination IP address of the incoming packet +matches any of the local IP address and verifies the IP header +checksum. Since there are no IP options that are strictly required and +because they are very uncommon, any IP options in received packets are +dropped. + +\subsubsection ipreass IP Fragment Reassembly + +IP fragment reassembly is implemented using a separate buffer that +holds the packet to be reassembled. An incoming fragment is copied +into the right place in the buffer and a bit map is used to keep track +of which fragments have been received. Because the first byte of an IP +fragment is aligned on an 8-byte boundary, the bit map requires a +small amount of memory. When all fragments have been reassembled, the +resulting IP packet is passed to the transport layer. If all fragments +have not been received within a specified time frame, the packet is +dropped. + +The current implementation only has a single buffer for holding +packets to be reassembled, and therefore does not support simultaneous +reassembly of more than one packet. Since fragmented packets are +uncommon, this ought to be a reasonable decision. Extending the +implementation to support multiple buffers would be straightforward, +however. + +\subsubsection ipbroadcast Broadcasts and Multicasts + +IP has the ability to broadcast and multicast packets on the local +network. Such packets are addressed to special broadcast and multicast +addresses. Broadcast is used heavily in many UDP based protocols such +as the Microsoft Windows file-sharing SMB protocol. Multicast is +primarily used in protocols used for multimedia distribution such as +RTP. TCP is a point-to-point protocol and does not use broadcast or +multicast packets. uIP current supports broadcast packets as well as +sending multicast packets. Joining multicast groups (IGMP) and +receiving non-local multicast packets is not currently supported. + +\subsection icmp ICMP --- Internet Control Message Protocol + +The ICMP protocol is used for reporting soft error conditions and for +querying host parameters. Its main use is, however, the echo mechanism +which is used by the "ping" program. + +The ICMP implementation in uIP is very simple as itis restricted to +only implement ICMP echo messages. Replies to echo messages are +constructed by simply swapping the source and destination IP addresses +of incoming echo requests and rewriting the ICMP header with the +Echo-Reply message type. The ICMP checksum is adjusted using standard +techniques (see RFC1624). + +Since only the ICMP echo message is implemented, there is no support +for Path MTU discovery or ICMP redirect messages. Neither of these is +strictly required for interoperability; they are performance +enhancement mechanisms. + +\subsection tcp TCP --- Transmission Control Protocol + +The TCP implementation in uIP is driven by incoming packets and timer +events. Incoming packets are parsed by TCP and if the packet contains +data that is to be delivered to the application, the application is +invoked by the means of the application function call. If the incoming +packet acknowledges previously sent data, the connection state is +updated and the application is informed, allowing it to send out new +data. + +\subsubsection listeb Listening Connections + +TCP allows a connection to listen for incoming connection requests. In +uIP, a listening connection is identified by the 16-bit port number +and incoming connection requests are checked against the list of +listening connections. This list of listening connections is dynamic +and can be altered by the applications in the system. + +\subsubsection slidingwindow Sliding Window + +Most TCP implementations use a sliding window mechanism for sending +data. Multiple data segments are sent in succession without waiting +for an acknowledgment for each segment. + +The sliding window algorithm uses a lot of 32-bit operations and +because 32-bit arithmetic is fairly expensive on most 8-bit CPUs, uIP +does not implement it. Also, uIP does not buffer sent packets and a +sliding window implementation that does not buffer sent packets will have +to be supported by a complex application layer. Instead, uIP allows +only a single TCP segment per connection to be unacknowledged at any +given time. + +It is important to note that even though most TCP implementations use +the sliding window algorithm, it is not required by the TCP +specifications. Removing the sliding window mechanism does not affect +interoperability in any way. + +\subsubsection rttest Round-Trip Time Estimation + +TCP continuously estimates the current Round-Trip Time (RTT) of every +active connection in order to find a suitable value for the +retransmission time-out. + +The RTT estimation in uIP is implemented using TCP's periodic +timer. Each time the periodic timer fires, it increments a counter for +each connection that has unacknowledged data in the network. When an +acknowledgment is received, the current value of the counter is used +as a sample of the RTT. The sample is used together with Van +Jacobson's standard TCP RTT estimation function to calculate an +estimate of the RTT. Karn's algorithm is used to ensure that +retransmissions do not skew the estimates. + +\subsubsection rexmit Retransmissions + +Retransmissions are driven by the periodic TCP timer. Every time the +periodic timer is invoked, the retransmission timer for each +connection is decremented. If the timer reaches zero, a retransmission +should be made. + +As uIP does not keep track of packet contents after they have +been sent by the device driver, uIP requires that the +application takes an active part in performing the +retransmission. When uIP decides that a segment should be +retransmitted, it calls the application with a flag set indicating +that a retransmission is required. The application checks the +retransmission flag and produces the same data that was previously +sent. From the application's standpoint, performing a retransmission +is not different from how the data originally was sent. Therefore the +application can be written in such a way that the same code is used +both for sending data and retransmitting data. Also, it is important +to note that even though the actual retransmission operation is +carried out by the application, it is the responsibility of the stack +to know when the retransmission should be made. Thus the complexity of +the application does not necessarily increase because it takes an +active part in doing retransmissions. + +\subsubsection flowcontrol Flow Control + +The purpose of TCP's flow control mechanisms is to allow communication +between hosts with wildly varying memory dimensions. In each TCP +segment, the sender of the segment indicates its available buffer +space. A TCP sender must not send more data than the buffer space +indicated by the receiver. + +In uIP, the application cannot send more data than the receiving host +can buffer. And application cannot send more data than the amount of +bytes it is allowed to send by the receiving host. If the remote host +cannot accept any data at all, the stack initiates the zero window +probing mechanism. + +\subsubsection congestioncontrol Congestion Control + +The congestion control mechanisms limit the number of simultaneous TCP +segments in the network. The algorithms used for congestion control +are designed to be simple to implement and require only a few lines of +code. + +Since uIP only handles one in-flight TCP segment per connection, +the amount of simultaneous segments cannot be further limited, thus +the congestion control mechanisms are not needed. + +\subsubsection urgdata Urgent Data + +TCP's urgent data mechanism provides an application-to-application +notification mechanism, which can be used by an application to mark +parts of the data stream as being more urgent than the normal +stream. It is up to the receiving application to interpret the meaning +of the urgent data. + +In many TCP implementations, including the BSD implementation, the +urgent data feature increases the complexity of the implementation +because it requires an asynchronous notification mechanism in an +otherwise synchronous API. As uIP already use an asynchronous event +based API, the implementation of the urgent data feature does not lead +to increased complexity. + +\section performance Performance + +In TCP/IP implementations for high-end systems, processing time is +dominated by the checksum calculation loop, the operation of copying +packet data and context switching. Operating systems for high-end +systems often have multiple protection domains for protecting kernel +data from user processes and user processes from each other. Because +the TCP/IP stack is run in the kernel, data has to be copied between +the kernel space and the address space of the user processes and a +context switch has to be performed once the data has been +copied. Performance can be enhanced by combining the copy operation +with the checksum calculation. Because high-end systems usually have +numerous active connections, packet demultiplexing is also an +expensive operation. + +A small embedded device does not have the necessary processing power +to have multiple protection domains and the power to run a +multitasking operating system. Therefore there is no need to copy +data between the TCP/IP stack and the application program. With an +event based API there is no context switch between the TCP/IP stack +and the applications. + +In such limited systems, the TCP/IP processing overhead is dominated +by the copying of packet data from the network device to host memory, +and checksum calculation. Apart from the checksum calculation and +copying, the TCP processing done for an incoming packet involves only +updating a few counters and flags before handing the data over to the +application. Thus an estimate of the CPU overhead of our TCP/IP +implementations can be obtained by calculating the amount of CPU +cycles needed for the checksum calculation and copying of a maximum +sized packet. + +\subsection delack The Impact of Delayed Acknowledgments + +Most TCP receivers implement the delayed acknowledgment algorithm for +reducing the number of pure acknowledgment packets sent. A TCP +receiver using this algorithm will only send acknowledgments for every +other received segment. If no segment is received within a specific +time-frame, an acknowledgment is sent. The time-frame can be as high +as 500 ms but typically is 200 ms. + +A TCP sender such as uIP that only handles a single outstanding TCP +segment will interact poorly with the delayed acknowledgment +algorithm. Because the receiver only receives a single segment at a +time, it will wait as much as 500 ms before an acknowledgment is +sent. This means that the maximum possible throughput is severely +limited by the 500 ms idle time. + +Thus the maximum throughput equation when sending data from uIP will +be $p = s / (t + t_d)$ where $s$ is the segment size and $t_d$ is the +delayed acknowledgment timeout, which typically is between 200 and +500 ms. With a segment size of 1000 bytes, a round-trip time of 40 ms +and a delayed acknowledgment timeout of 200 ms, the maximum +throughput will be 4166 bytes per second. With the delayed acknowledgment +algorithm disabled at the receiver, the maximum throughput would be +25000 bytes per second. + +It should be noted, however, that since small systems running uIP are +not very likely to have large amounts of data to send, the delayed +acknowledgmen t throughput degradation of uIP need not be very +severe. Small amounts of data sent by such a system will not span more +than a single TCP segment, and would therefore not be affected by the +throughput degradation anyway. + +The maximum throughput when uIP acts as a receiver is not affected by +the delayed acknowledgment throughput degradation. + + + +*/ + + +/** @} */ + diff --git a/components/net/uip/doc/uip-refman.pdf b/components/net/uip/doc/uip-refman.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8dc800598638ce3cd7997a8e9a700c38d3782d78 --- /dev/null +++ b/components/net/uip/doc/uip-refman.pdf @@ -0,0 +1,39280 @@ +%PDF-1.4 +5 0 obj +<< /S /GoTo /D (chapter.1) >> +endobj +8 0 obj +(The uIP TCP/IP stack ) +endobj +9 0 obj +<< /S /GoTo /D (section.1.1) >> +endobj +12 0 obj +(Introduction) +endobj +13 0 obj +<< /S /GoTo /D (section.1.2) >> +endobj +16 0 obj +(TCP/IP Communication) +endobj +17 0 obj +<< /S /GoTo /D (section.1.3) >> +endobj +20 0 obj +(Main Control Loop) +endobj +21 0 obj +<< /S /GoTo /D (section.1.4) >> +endobj +24 0 obj +(Architecture Specific Functions) +endobj +25 0 obj +<< /S /GoTo /D (section.1.5) >> +endobj +28 0 obj +(Memory Management) +endobj +29 0 obj +<< /S /GoTo /D (section.1.6) >> +endobj +32 0 obj +(Application Program Interface \(API\)) +endobj +33 0 obj +<< /S /GoTo /D (section.1.7) >> +endobj +36 0 obj +(Examples) +endobj +37 0 obj +<< /S /GoTo /D (section.1.8) >> +endobj +40 0 obj +(Protocol Implementations) +endobj +41 0 obj +<< /S /GoTo /D (section.1.9) >> +endobj +44 0 obj +(Performance) +endobj +45 0 obj +<< /S /GoTo /D (chapter.2) >> +endobj +48 0 obj +(uIP 1.0 Module Index) +endobj +49 0 obj +<< /S /GoTo /D (section.2.1) >> +endobj +52 0 obj +(uIP 1.0 Modules) +endobj +53 0 obj +<< /S /GoTo /D (chapter.3) >> +endobj +56 0 obj +(uIP 1.0 Hierarchical Index) +endobj +57 0 obj +<< /S /GoTo /D (section.3.1) >> +endobj +60 0 obj +(uIP 1.0 Class Hierarchy) +endobj +61 0 obj +<< /S /GoTo /D (chapter.4) >> +endobj +64 0 obj +(uIP 1.0 Data Structure Index) +endobj +65 0 obj +<< /S /GoTo /D (section.4.1) >> +endobj +68 0 obj +(uIP 1.0 Data Structures) +endobj +69 0 obj +<< /S /GoTo /D (chapter.5) >> +endobj +72 0 obj +(uIP 1.0 File Index) +endobj +73 0 obj +<< /S /GoTo /D (section.5.1) >> +endobj +76 0 obj +(uIP 1.0 File List) +endobj +77 0 obj +<< /S /GoTo /D (chapter.6) >> +endobj +80 0 obj +(uIP 1.0 Module Documentation) +endobj +81 0 obj +<< /S /GoTo /D (section.6.1) >> +endobj +84 0 obj +(Protothreads) +endobj +85 0 obj +<< /S /GoTo /D (section.6.2) >> +endobj +88 0 obj +(Applications) +endobj +89 0 obj +<< /S /GoTo /D (section.6.3) >> +endobj +92 0 obj +(uIP configuration functions) +endobj +93 0 obj +<< /S /GoTo /D (section.6.4) >> +endobj +96 0 obj +(uIP initialization functions) +endobj +97 0 obj +<< /S /GoTo /D (section.6.5) >> +endobj +100 0 obj +(uIP device driver functions) +endobj +101 0 obj +<< /S /GoTo /D (section.6.6) >> +endobj +104 0 obj +(uIP application functions) +endobj +105 0 obj +<< /S /GoTo /D (section.6.7) >> +endobj +108 0 obj +(uIP conversion functions) +endobj +109 0 obj +<< /S /GoTo /D (section.6.8) >> +endobj +112 0 obj +(Variables used in uIP device drivers) +endobj +113 0 obj +<< /S /GoTo /D (section.6.9) >> +endobj +116 0 obj +(The uIP TCP/IP stack) +endobj +117 0 obj +<< /S /GoTo /D (section.6.10) >> +endobj +120 0 obj +(Architecture specific uIP functions) +endobj +121 0 obj +<< /S /GoTo /D (section.6.11) >> +endobj +124 0 obj +(uIP Address Resolution Protocol) +endobj +125 0 obj +<< /S /GoTo /D (section.6.12) >> +endobj +128 0 obj +(Configuration options for uIP) +endobj +129 0 obj +<< /S /GoTo /D (section.6.13) >> +endobj +132 0 obj +(uIP TCP throughput booster hack) +endobj +133 0 obj +<< /S /GoTo /D (section.6.14) >> +endobj +136 0 obj +(Local continuations) +endobj +137 0 obj +<< /S /GoTo /D (section.6.15) >> +endobj +140 0 obj +(Timer library) +endobj +141 0 obj +<< /S /GoTo /D (section.6.16) >> +endobj +144 0 obj +(Clock interface) +endobj +145 0 obj +<< /S /GoTo /D (section.6.17) >> +endobj +148 0 obj +(Protosockets library) +endobj +149 0 obj +<< /S /GoTo /D (section.6.18) >> +endobj +152 0 obj +(Memory block management functions) +endobj +153 0 obj +<< /S /GoTo /D (section.6.19) >> +endobj +156 0 obj +(DNS resolver) +endobj +157 0 obj +<< /S /GoTo /D (section.6.20) >> +endobj +160 0 obj +(SMTP E-mail sender) +endobj +161 0 obj +<< /S /GoTo /D (section.6.21) >> +endobj +164 0 obj +(Telnet server) +endobj +165 0 obj +<< /S /GoTo /D (section.6.22) >> +endobj +168 0 obj +(Hello, world) +endobj +169 0 obj +<< /S /GoTo /D (section.6.23) >> +endobj +172 0 obj +(Web client) +endobj +173 0 obj +<< /S /GoTo /D (section.6.24) >> +endobj +176 0 obj +(Web server) +endobj +177 0 obj +<< /S /GoTo /D (chapter.7) >> +endobj +180 0 obj +(uIP 1.0 Data Structure Documentation) +endobj +181 0 obj +<< /S /GoTo /D (section.7.1) >> +endobj +184 0 obj +(dhcpc\137state Struct Reference) +endobj +185 0 obj +<< /S /GoTo /D (section.7.2) >> +endobj +188 0 obj +(hello\137world\137state Struct Reference) +endobj +189 0 obj +<< /S /GoTo /D (section.7.3) >> +endobj +192 0 obj +(httpd\137cgi\137call Struct Reference) +endobj +193 0 obj +<< /S /GoTo /D (section.7.4) >> +endobj +196 0 obj +(httpd\137state Struct Reference) +endobj +197 0 obj +<< /S /GoTo /D (section.7.5) >> +endobj +200 0 obj +(memb\137blocks Struct Reference) +endobj +201 0 obj +<< /S /GoTo /D (section.7.6) >> +endobj +204 0 obj +(psock Struct Reference) +endobj +205 0 obj +<< /S /GoTo /D (section.7.7) >> +endobj +208 0 obj +(psock\137buf Struct Reference) +endobj +209 0 obj +<< /S /GoTo /D (section.7.8) >> +endobj +212 0 obj +(pt Struct Reference) +endobj +213 0 obj +<< /S /GoTo /D (section.7.9) >> +endobj +216 0 obj +(smtp\137state Struct Reference) +endobj +217 0 obj +<< /S /GoTo /D (section.7.10) >> +endobj +220 0 obj +(telnetd\137state Struct Reference) +endobj +221 0 obj +<< /S /GoTo /D (section.7.11) >> +endobj +224 0 obj +(timer Struct Reference) +endobj +225 0 obj +<< /S /GoTo /D (section.7.12) >> +endobj +228 0 obj +(uip\137conn Struct Reference) +endobj +229 0 obj +<< /S /GoTo /D (section.7.13) >> +endobj +232 0 obj +(uip\137eth\137addr Struct Reference) +endobj +233 0 obj +<< /S /GoTo /D (section.7.14) >> +endobj +236 0 obj +(uip\137eth\137hdr Struct Reference) +endobj +237 0 obj +<< /S /GoTo /D (section.7.15) >> +endobj +240 0 obj +(uip\137icmpip\137hdr Struct Reference) +endobj +241 0 obj +<< /S /GoTo /D (section.7.16) >> +endobj +244 0 obj +(uip\137neighbor\137addr Struct Reference) +endobj +245 0 obj +<< /S /GoTo /D (section.7.17) >> +endobj +248 0 obj +(uip\137stats Struct Reference) +endobj +249 0 obj +<< /S /GoTo /D (section.7.18) >> +endobj +252 0 obj +(uip\137tcpip\137hdr Struct Reference) +endobj +253 0 obj +<< /S /GoTo /D (section.7.19) >> +endobj +256 0 obj +(uip\137udp\137conn Struct Reference) +endobj +257 0 obj +<< /S /GoTo /D (section.7.20) >> +endobj +260 0 obj +(uip\137udpip\137hdr Struct Reference) +endobj +261 0 obj +<< /S /GoTo /D (section.7.21) >> +endobj +264 0 obj +(webclient\137state Struct Reference) +endobj +265 0 obj +<< /S /GoTo /D (chapter.8) >> +endobj +268 0 obj +(uIP 1.0 File Documentation) +endobj +269 0 obj +<< /S /GoTo /D (section.8.1) >> +endobj +272 0 obj +(apps/hello-world/hello-world.c File Reference) +endobj +273 0 obj +<< /S /GoTo /D (section.8.2) >> +endobj +276 0 obj +(apps/hello-world/hello-world.h File Reference) +endobj +277 0 obj +<< /S /GoTo /D (section.8.3) >> +endobj +280 0 obj +(apps/resolv/resolv.c File Reference) +endobj +281 0 obj +<< /S /GoTo /D (section.8.4) >> +endobj +284 0 obj +(apps/resolv/resolv.h File Reference) +endobj +285 0 obj +<< /S /GoTo /D (section.8.5) >> +endobj +288 0 obj +(apps/smtp/smtp.c File Reference) +endobj +289 0 obj +<< /S /GoTo /D (section.8.6) >> +endobj +292 0 obj +(apps/smtp/smtp.h File Reference) +endobj +293 0 obj +<< /S /GoTo /D (section.8.7) >> +endobj +296 0 obj +(apps/telnetd/shell.c File Reference) +endobj +297 0 obj +<< /S /GoTo /D (section.8.8) >> +endobj +300 0 obj +(apps/telnetd/shell.h File Reference) +endobj +301 0 obj +<< /S /GoTo /D (section.8.9) >> +endobj +304 0 obj +(apps/telnetd/telnetd.c File Reference) +endobj +305 0 obj +<< /S /GoTo /D (section.8.10) >> +endobj +308 0 obj +(apps/telnetd/telnetd.h File Reference) +endobj +309 0 obj +<< /S /GoTo /D (section.8.11) >> +endobj +312 0 obj +(apps/webclient/webclient.c File Reference) +endobj +313 0 obj +<< /S /GoTo /D (section.8.12) >> +endobj +316 0 obj +(apps/webclient/webclient.h File Reference) +endobj +317 0 obj +<< /S /GoTo /D (section.8.13) >> +endobj +320 0 obj +(apps/webserver/httpd-cgi.c File Reference) +endobj +321 0 obj +<< /S /GoTo /D (section.8.14) >> +endobj +324 0 obj +(apps/webserver/httpd-cgi.h File Reference) +endobj +325 0 obj +<< /S /GoTo /D (section.8.15) >> +endobj +328 0 obj +(apps/webserver/httpd.c File Reference) +endobj +329 0 obj +<< /S /GoTo /D (section.8.16) >> +endobj +332 0 obj +(lib/memb.c File Reference) +endobj +333 0 obj +<< /S /GoTo /D (section.8.17) >> +endobj +336 0 obj +(lib/memb.h File Reference) +endobj +337 0 obj +<< /S /GoTo /D (section.8.18) >> +endobj +340 0 obj +(uip/lc-addrlabels.h File Reference) +endobj +341 0 obj +<< /S /GoTo /D (section.8.19) >> +endobj +344 0 obj +(uip/lc-switch.h File Reference) +endobj +345 0 obj +<< /S /GoTo /D (section.8.20) >> +endobj +348 0 obj +(uip/lc.h File Reference) +endobj +349 0 obj +<< /S /GoTo /D (section.8.21) >> +endobj +352 0 obj +(uip/psock.h File Reference) +endobj +353 0 obj +<< /S /GoTo /D (section.8.22) >> +endobj +356 0 obj +(uip/pt.h File Reference) +endobj +357 0 obj +<< /S /GoTo /D (section.8.23) >> +endobj +360 0 obj +(uip/timer.c File Reference) +endobj +361 0 obj +<< /S /GoTo /D (section.8.24) >> +endobj +364 0 obj +(uip/timer.h File Reference) +endobj +365 0 obj +<< /S /GoTo /D (section.8.25) >> +endobj +368 0 obj +(uip/uip-neighbor.c File Reference) +endobj +369 0 obj +<< /S /GoTo /D (section.8.26) >> +endobj +372 0 obj +(uip/uip-neighbor.h File Reference) +endobj +373 0 obj +<< /S /GoTo /D (section.8.27) >> +endobj +376 0 obj +(uip/uip-split.h File Reference) +endobj +377 0 obj +<< /S /GoTo /D (section.8.28) >> +endobj +380 0 obj +(uip/uip.c File Reference) +endobj +381 0 obj +<< /S /GoTo /D (section.8.29) >> +endobj +384 0 obj +(uip/uip.h File Reference) +endobj +385 0 obj +<< /S /GoTo /D (section.8.30) >> +endobj +388 0 obj +(uip/uip\137arch.h File Reference) +endobj +389 0 obj +<< /S /GoTo /D (section.8.31) >> +endobj +392 0 obj +(uip/uip\137arp.c File Reference) +endobj +393 0 obj +<< /S /GoTo /D (section.8.32) >> +endobj +396 0 obj +(uip/uip\137arp.h File Reference) +endobj +397 0 obj +<< /S /GoTo /D (section.8.33) >> +endobj +400 0 obj +(uip/uipopt.h File Reference) +endobj +401 0 obj +<< /S /GoTo /D (section.8.34) >> +endobj +404 0 obj +(unix/uip-conf.h File Reference) +endobj +405 0 obj +<< /S /GoTo /D (chapter.9) >> +endobj +408 0 obj +(uIP 1.0 Example Documentation) +endobj +409 0 obj +<< /S /GoTo /D (section.9.1) >> +endobj +412 0 obj +(dhcpc.c) +endobj +413 0 obj +<< /S /GoTo /D (section.9.2) >> +endobj +416 0 obj +(dhcpc.h) +endobj +417 0 obj +<< /S /GoTo /D (section.9.3) >> +endobj +420 0 obj +(example-mainloop-with-arp.c) +endobj +421 0 obj +<< /S /GoTo /D (section.9.4) >> +endobj +424 0 obj +(example-mainloop-without-arp.c) +endobj +425 0 obj +<< /S /GoTo /D (section.9.5) >> +endobj +428 0 obj +(hello-world.c) +endobj +429 0 obj +<< /S /GoTo /D (section.9.6) >> +endobj +432 0 obj +(hello-world.h) +endobj +433 0 obj +<< /S /GoTo /D (section.9.7) >> +endobj +436 0 obj +(resolv.c) +endobj +437 0 obj +<< /S /GoTo /D (section.9.8) >> +endobj +440 0 obj +(resolv.h) +endobj +441 0 obj +<< /S /GoTo /D (section.9.9) >> +endobj +444 0 obj +(smtp.c) +endobj +445 0 obj +<< /S /GoTo /D (section.9.10) >> +endobj +448 0 obj +(smtp.h) +endobj +449 0 obj +<< /S /GoTo /D (section.9.11) >> +endobj +452 0 obj +(telnetd.c) +endobj +453 0 obj +<< /S /GoTo /D (section.9.12) >> +endobj +456 0 obj +(telnetd.h) +endobj +457 0 obj +<< /S /GoTo /D (section.9.13) >> +endobj +460 0 obj +(uip-code-style.c) +endobj +461 0 obj +<< /S /GoTo /D (section.9.14) >> +endobj +464 0 obj +(uip-conf.h) +endobj +465 0 obj +<< /S /GoTo /D (section.9.15) >> +endobj +468 0 obj +(webclient.c) +endobj +469 0 obj +<< /S /GoTo /D (section.9.16) >> +endobj +472 0 obj +(webclient.h) +endobj +473 0 obj +<< /S /GoTo /D [474 0 R /Fit ] >> +endobj +477 0 obj << +/Length 382 +/Filter /FlateDecode +>> +stream +x趰RMO蹳 界W{堊鰘郀@獷%7訡毺$[菷潀癉擩芻亏企< C p芶P贐誨?S鶮苨Y婮匼y紖\H!嬜K豞p杸乆Cn孎OV"踻NW團CV╈帕 W憎!畇1搓7Sp拯坲腴T\躭^+w遣z\/瓽iv(l m 潳5"f)w%墩 鳽秨Λ1y&儺砲I9葍叝鹶& +h賃q駽丌禿A鼻纅0!5H釭"L电sNl 缅!煌圉湾搇拘}5y驯廕<赿騳]6S藯}fZ脓n~癩襰徻踑獙翗iDeb焨.~鋨鹷龓蹙{槷荻輖鞆硄囕確歘)2彿趶Cy玷饝Yw醅賓ndstream +endobj +474 0 obj << +/Type /Page +/Contents 477 0 R +/Resources 476 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 486 0 R +>> endobj +475 0 obj << +/Type /XObject +/Subtype /Form +/FormType 1 +/PTEX.FileName (../sicslogo.pdf) +/PTEX.PageNumber 1 +/PTEX.InfoDict 487 0 R +/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] +/BBox [0.00000000 0.00000000 242.00000000 58.00000000] +/Resources << +/ProcSet [ /PDF ] +/ExtGState << +/R4 488 0 R +>>>> +/Length 489 0 R +/Filter /FlateDecode +>> +stream +x渳ZY3蛵|)t倸軛c豔h 羞=L苍R描嘨涫錇铁3]鶛鴚齳?o峡憻鱄蛀?|酏慘NW順擣ms実.i<讱龑甯决暻钞|妃鼉哣痀-+昰顈\}=[nW橄0|鼁6蛘巛徺絘v筳XW綎 ? e^肎莢T癟l8勽ra ⅲ\:渎\鞭)q菧7箰胴譆o]W岩А鋣往|:p^6 /dK瀈 螦綰嚇V赭R4c鰜%)}餳邹う拰=f Xg挎!N 璶擔l8'oqm嫗揶 焔涏fJ竴7 秵#韔(A%夢4痎%% S敀0}洸啋l饍l蜺J)Uc$骷襳坢'嶸F鬙[頽<4Xv>T瀱 +b3椄vn朸!嗭69铪)袬㎎"祦17詠Y&c妋粉 + j腹葩陛j +'愿謦篁w貾@ F╜摟Υ烀抙 蘫熿ZやZOg~量b! +睌>n+.%鏺m封 +"骋1|粉奒.洩龢- +vV f钮Lp~; ;3贚醖%藙軖K阢 + Уf% 瀯f\d9"5V櫃偄~0&9泐匎晍O56豯绔.穉嘺棉pl袱 姀戁慘0w镥aV匕壎6 /6 蘈W_&Dz巬凁贴燾萬Aj俎%嘯ャv噶)澊哯终萉M顩|i'p欲W眵魛黩辮蹲靬鲀/a绡愿d樖峩8&荖0贳F+ll荲[l"p{<寝/桦1v錳紈-. {袄NMn襈aJ 缢亰壼a柺 hdK1$村$牱D/,橏\$鸤1 =滑曕鄉 樜佪0u/灹+赉繧k!W  1#鐜\孀j.7f胿'鉞Sa隶戱掑AF鱢8c" dR炴0孍q氼1a藚3淝I鄜轱貑6 +:陘66鬉 4 剹佘"鷔助怅鼬ULY畬$葶_彜C.笸P[h(塰CA 趺賮 +xo甘q葶遯謆+nZ a陝槾O韉斁cR歶柾葉e肐e1%Y9侰m4ダ墤oC捠K1 2`g*踪P莥贉渣飪e皿 慡dc偆)'{X丠 龣chf鎎膥r莨~牌п麔q粷&Od3K恫y簻燬徇婁e.'桀煐慒綸"lc眀緶\@鱮裛n.' + 黢s彛 l8sf羮h‐&鷜w楲沁E;<4t&枨鉧笲Odn 蝳喯妙思磅俴TBy紷铞⒘黕N芍2=_4聳Esy7l]0狳DK畐?o_她鄴雟 レ[嫅淢+S4棱u譏谢<>qLH3會l犅钭) M渌 1 h腑犝JnV溬#ㄅ尃S篻庍!归S癏C驂E+8遯魪唏<)$9o艹叮~Fo  947l"au宒4$䦷Tt]綻,L垦祝stv妤時Y挋莵妪霩.櫡羈z:<杸Ib@[摶鉔w澰\镯墿妪!d駖860榅&祿﹍Eく爋冉劰衭)餄"籅w鷯`鍪醚!沣甛 5s D=M撵B.]蓓2趲^麮*U杚!7朌~H擈圕,!</V垴w`讏%煦旺粋鶁镓莾"肄jCi竛龂靿{k+2帩虣n?ps+&}`'喻{7佾HWj-';RY丿錎 +鳵J6Vt"鵮︹G?S $Do=肬倷'b)C1眗2y鳍3<rt褝漩扈 )_VA0F侼礫愔睧u昢\nh莏\2>[ :镀鯬e栦帱钠a駖藥B 衷+も廿捐S'庱笺}@椆秭巓豜棤g8扑値 +>繫搛 V契{陶L=i薇煃e犨癝锎俱4H :锔)@i樫8C!檨-*蚶?Tz堎陉~4{槚鮷u僇﹍w?觑開虧w揓鸻i齈:eZ6趍f1G?蘪j2K '1L/钯1n锃漼0kp宰'裚= 尊d牙藥g)滖帣弱  K%浛4竚脾 $霜>鏊 菃P摟╬醸,%铲 媅踑?KWN|K淐盤;qVc鵍3嗟蕋;:u雲菤 ?唷9J =悺枘堧1^彖t觲 肦媔裀碾o=_I睄牞槕侈@脗!L钿tV9U4 +桦q牻駌KTKsd墔D淌W蚆馅#W亴粥O/嘎O[2氕鉄A妐溤 畚旿L藊.F(|衍 朚t馸>闰挱捙A刑be肊烺pf!肨砢n !7^鰥唥*90.}嬚 +鲤g.憊欼齫.]飫粵髪坘Oh簕椛}i崛灠幜4滝弓u厛疪B僚d2a駲O%壥弰t7G<_靠犰d-(O9;0台Y誂廤馋锁w态.Z糃懅鶰棈笺遫# 潠>m錎',0榞+#雐嶁b轢_p魲唏RI涖曊>q麸弑x8ぺa'娀蚼zTW軱羟X+'飃pkq渲庳S>1冃襪搛鍦N?\繒3媮縆莇浟*J蚳皹肯披R鄯勹犰*$E视庉t脡硿蘋扂qTvR|lGo矱/榮>俲淛鲼踻⑨x)雜驚\爰 唥D"4库鵫p搱) *Tj袓岉縜穻 !屽o雽蝒ndstream +endobj +487 0 obj +<< +/Producer (GNU Ghostscript 7.07) +/Creator (GNU Ghostscript 707 \(epswrite\)) +/CreationDate (2005/02/23 12:39:03) +>> +endobj +488 0 obj +<< +/Type /ExtGState +/Name /R4 +/TR /Identity +/OPM 1 +/SM 0.02 +>> +endobj +489 0 obj +3714 +endobj +478 0 obj << +/D [474 0 R /XYZ 90 757.9346 null] +>> endobj +479 0 obj << +/D [474 0 R /XYZ 90 739.9346 null] +>> endobj +476 0 obj << +/Font << /F23 482 0 R /F26 485 0 R >> +/XObject << /Im1 475 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +492 0 obj << +/Length 59 +/Filter /FlateDecode +>> +stream +x3T0BCKsSs=Kc3呬\.卼牥;!T谀Hc懶设歒橀橻 ^endstream +endobj +491 0 obj << +/Type /Page +/Contents 492 0 R +/Resources 490 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 486 0 R +>> endobj +493 0 obj << +/D [491 0 R /XYZ 90 757.9346 null] +>> endobj +490 0 obj << +/ProcSet [ /PDF ] +>> endobj +496 0 obj << +/Length 1823 +/Filter /FlateDecode +>> +stream +x陧[Ms6禁W(勦:I隢2鉯}kz嗳姯%yh⿹糇 +$绤剔jN姯巛缗{. 0窹B!酶,只+\<豲|E诜9e5衿JV铌'j +蕬見w運p9挊肉铪徟鮝莒/?飤晋x8$b\&楙f跣钧[愓"W!'5菻*蹨厘$/7xq汗m⺳w}錢尧 崓e &Z 虘峒B#!T  +馦r$彚止Q]哽徴狺>n麍怰 D4ED勓碶 籉笏厮`M蝂傊e$帠T<槒8B:1-@_琝帒&廽擪[鍐&>靨v]L砭WE.6矴eXQ*懷V6 +h,t蚒& 鍥狹J:摐6=&k爹ボ罱2|聩px5>)聞塆M嬍稷"17RH琍眰u彛崑7U琕陌淴=+o批綵?n彌躐T祶绎蠜貊+苩輡疮劏}#蘕:)^徥黏B"?>逊(I$羓蒲\5YR扨緣掍Z!嶦F獞ゐfw▇4恹R钏囃蜰扂圖RqR劰b鮵T% Bi熡糶 +,P膏q碤亗 +T$Inl關岪ミ3煙焲籝:嫻迭忊厲&/4q44*)^(逿2圻褴ㄔ耜V紇<謣B簈Bv销2輔2偘2S苳e楺鍲~鸗镼{笫d禮W .q囀8嶸瘇z_N暒m F獞︸掖馛+黯!峧TE q4冖r<h徣紀NR.囎e$嶸婥& %t)+猐J/搞`墩斩姐 Cs茄]m貪鳔颎7# 厴枹3雳 蔽=z膶]r0朮]j?nU爪讳玁1唽1b@/狪嬍辈得6=Z硊/~伀p~莲GK+L鳽#s;. +!茘d;鰩鶙恙*%褘酰9KS#9t鶣瑽d閻(椒d!-暭匾按G誙,}齌炯%[?.赔G|D瓂駩nt寓2,齧P忓焘緥. GK嫳v1旔. .)uqh 芢<栱狷:钩v鏷棂LIatRH礒e榲蹼癀l烫T)wj/5s7s嚜9.W跶V专@-*C;笹qvr仙`∠N GK+9L鳽's儴4t苌帏圦'诼m灯H 5窅暋u.VH帄Q2偢&鬮x蓝UW绊6煼/歉沪阮m毳r-5ei}鼗蟂=湭3逨?V$襔"H漻诖 猼忈,F牥÷F眏I7M 跿Q2番檘蹆Q颉(符韖[>m筁搗^Ш'$賎`vgE艮T左X(V}蕚搳睲U$眿2Ч(R y縔R兵{?5u_m雘,塜lBb嗛"`拹h 債5瀢M牥廉 6奤k4y e洦Q泾*3禈Fㄐr縬9赼3鹻湏&Ook 痊麥J@m*洯(顈讋;孴1賆 ;a/鷆_遦endstream +endobj +495 0 obj << +/Type /Page +/Contents 496 0 R +/Resources 494 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 486 0 R +/Annots [ 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R ] +>> endobj +501 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 575.2302 202.806 584.2064] +/Subtype /Link +/A << /S /GoTo /D (chapter.1) >> +>> endobj +502 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 557.4621 178.1091 566.3087] +/Subtype /Link +/A << /S /GoTo /D (section.1.1) >> +>> endobj +503 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 539.6741 225.451 548.5207] +/Subtype /Link +/A << /S /GoTo /D (section.1.2) >> +>> endobj +504 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 519.8288 206.3431 530.7327] +/Subtype /Link +/A << /S /GoTo /D (section.1.3) >> +>> endobj +505 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 502.0408 255.0296 512.9447] +/Subtype /Link +/A << /S /GoTo /D (section.1.4) >> +>> endobj +506 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 484.2528 217.6704 495.1567] +/Subtype /Link +/A << /S /GoTo /D (section.1.5) >> +>> endobj +507 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 466.4648 275.6622 477.3687] +/Subtype /Link +/A << /S /GoTo /D (section.1.6) >> +>> endobj +508 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 448.6768 168.1465 459.5807] +/Subtype /Link +/A << /S /GoTo /D (section.1.7) >> +>> endobj +509 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 430.8888 232.0759 441.7927] +/Subtype /Link +/A << /S /GoTo /D (section.1.8) >> +>> endobj +510 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 415.0385 179.7529 424.0048] +/Subtype /Link +/A << /S /GoTo /D (section.1.9) >> +>> endobj +511 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 386.733 198.3827 395.7092] +/Subtype /Link +/A << /S /GoTo /D (chapter.2) >> +>> endobj +512 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 368.8453 194.9958 377.8116] +/Subtype /Link +/A << /S /GoTo /D (section.2.1) >> +>> endobj +513 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 340.5398 219.2242 349.516] +/Subtype /Link +/A << /S /GoTo /D (chapter.3) >> +>> endobj +514 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 320.7145 223.9867 331.6184] +/Subtype /Link +/A << /S /GoTo /D (section.3.1) >> +>> endobj +515 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 294.3466 229.456 303.3229] +/Subtype /Link +/A << /S /GoTo /D (chapter.4) >> +>> endobj +516 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 276.5786 221.8247 285.4252] +/Subtype /Link +/A << /S /GoTo /D (section.4.1) >> +>> endobj +517 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 248.1535 181.7751 257.1297] +/Subtype /Link +/A << /S /GoTo /D (chapter.5) >> +>> endobj +518 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 230.3854 193.6207 239.2321] +/Subtype /Link +/A << /S /GoTo /D (section.5.1) >> +>> endobj +519 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 201.9603 239.3289 210.9365] +/Subtype /Link +/A << /S /GoTo /D (chapter.6) >> +>> endobj +520 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 184.1922 179.2149 193.0389] +/Subtype /Link +/A << /S /GoTo /D (section.6.1) >> +>> endobj +521 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 164.347 179.7727 175.2509] +/Subtype /Link +/A << /S /GoTo /D (section.6.2) >> +>> endobj +522 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 146.559 237.8845 157.4629] +/Subtype /Link +/A << /S /GoTo /D (section.6.3) >> +>> endobj +523 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 130.8282 235.1242 139.6749] +/Subtype /Link +/A << /S /GoTo /D (section.6.4) >> +>> endobj +524 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 113.0402 236.3901 121.8869] +/Subtype /Link +/A << /S /GoTo /D (section.6.5) >> +>> endobj +525 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 93.195 229.0275 104.0989] +/Subtype /Link +/A << /S /GoTo /D (section.6.6) >> +>> endobj +500 0 obj << +/D [495 0 R /XYZ 90 604.4538 null] +>> endobj +494 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +528 0 obj << +/Length 2844 +/Filter /FlateDecode +>> +stream +x陧淜s廴秋8奤犰{圬&q知浒賀Q$$盉 + 町縸樍`鲌貨梢AWwqCM +R\)a\V帅+\=?xEs<骊豢PSd$曊蛚gA$(≌完珉鮶鏊望奍崍懼J7鴛箢阃琏+w7辆w/$] 甐6岟W1鯖}儹%C+NYfs貔隉翈麪麌躋p矚S邂頓鞧)虘彳9登╄p,:館諎阢擧挽 |}з溭溯v岂醑3"齛m遶?n棈}wxJ%2T*驗Q1R聦侱彻励|~饺 a樳 傮涁j+D鈷擂烡!e太$朴炡泫!鋤盻/6趿y<+鱦 卓畻縚w餚'+尐皅D"82坖EF-兩连湹腣w鶬L累L齤2メ葄'0欰遑4炌浨~7o>}卓>4嬪鄨皣媃;N夒U咗(1HJ瀃質玚X釀е:"hW嗅腂*旸B梳J巴驀q菰随各炿妃?渝 幙>鍷壐挷#IU厐"HA嶱"咙ブ邳)炁r8箌 +崝拝塯Py夈1婿胘弹~p>6&L??韜蚽观$$禙厺X1$霆B═趮36庻&檂嘫&溒訸ぬ 9 $莢騔歫zU: 哽秏1|8籫W]]茼嘕H.冖7向鐴骕暳籋4r轾畝罍Fp侷M璾p,湊蒙pRf'昂gp找1輯鎞;><>齄n;417鶖钠薓冀//>)%斊h 訕Zk莹骉B'S墔潷^牪Wy*梗蝻诲b鰪汋龈认盌姃萅絕U娳 骓**庩甲= + +=獱`轘km 尾 +9湼Z!諣颞 +囮蛯夒鮏_ 7牖齜錯鐳勐弖d%P旴I术8 ě 瀸乛鴇ぶ:z硔M犆⿻VH償]痦U_'妖骘g_/杣 +癋阼萅`*e缕GQ]X}< > ┑庈:t8橽A愌T萿狜畆鋠+鳦K%秐`谾F +)薕糺藔壜( 癙#`良е:`橱汙嚀乪蚃丽*瑅纞v朙法暑觔粁阭S$U斠Tq欅J^U杍;)趯}惰闫漟0a建惎腣.偝{舭咯墭妾罏S鰧c镯窍幃}觑[7鹀%8#w +据-忢螚k孖 + 釾*%覹郩厛<幝&4寅珤i#涞WzT]-揩清篁鯼驪枪闧最雧組锷P雾!a"证7全 +!嗘燪実{韨9 .溡闹W榢痌剡尼嘔F薁rPR錭 k玉1E懝~姜lhE{$BH硹豶$f'B翱iKRf'W-孬埇眎濿匪圂韗辟淏牥踩p緳撰 +QR!慥D屆<檬%s蘣b笋樰憜齅瓕v/4M拸<}钙H低啾锾p鞺囜:庱|噆(擿J[蔿9靜*斬肈-斅C鵗?葺v鲿'旽 Q獖}gJBJd%s蘣b搜ú4傼 僭P;!兪(=屜囆唣: )FTbY臹3啁霆Bp莘5'汨.{1[鸯 ;剡膫I稴UUh} *迁浇決|}?匲fW,旉*鰹糙 +ARN悺J彛<{:≡t倷Ml9:砡亐齅,爒0L椸霼牺贤)DZ[JjU.3輱^U,t7嶣混碆ih碁仃he賫^剡訸j 朾πT嚙纟3H稘蟊隠!酹B刟A4 +駖檮r:0 4卞樚~7眰邬炨竸d{昃mzq,bJ*鰹YU!劝"Ey8Bps欂r8f[paSK$f坧Rhc *希k/壗嶤b冧ZV弊L+朌qt梐|(旇丵0蠅-莌鰱靜" 8-4昰7紫匪輛{ 6vV; 鈄U/瑔F;榒j榩f[天 剡幢淗g%.{曠 \滞沩b:﹦)082式c蔊A!峆2羂&嵸璿剡2iO衡夹TG>岂馜睬R女砄riE胋g狴H(抈J[伸~;靜b乨v桡dD妬弱蜷冼:J墤l7卋鳈& *D2 +鬁@劜8&1卞@填諪耺+瑀z戠Pn膈勉輓騢(翼}骐璣G灇圌m$m寿KK混v9鑜"uF谝 龘N訡柃]灀顊38,-^3D罀%婍,@R婸N_亻H滟璸萐尊,霹甡霅H!袚谆^im吥璑权vZ{_1j慘Z)襘3n钻莦[M篱镗f赢位啉{示Ь壁桇O h烢?Bp軄}鳐o二C酵?賲eYpendstream +endobj +527 0 obj << +/Type /Page +/Contents 528 0 R +/Resources 526 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 486 0 R +/Annots [ 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R ] +>> endobj +529 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 728.8762 227.9221 737.7228] +/Subtype /Link +/A << /S /GoTo /D (section.6.7) >> +>> endobj +530 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 711.0772 271.2488 719.9239] +/Subtype /Link +/A << /S /GoTo /D (section.6.8) >> +>> endobj +531 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 693.1587 216.0265 702.1249] +/Subtype /Link +/A << /S /GoTo /D (section.6.9) >> +>> endobj +532 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 673.422 267.4728 684.326] +/Subtype /Link +/A << /S /GoTo /D (section.6.10) >> +>> endobj +533 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 657.6804 259.752 666.527] +/Subtype /Link +/A << /S /GoTo /D (section.6.11) >> +>> endobj +534 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 637.8241 246.4723 648.7281] +/Subtype /Link +/A << /S /GoTo /D (section.6.12) >> +>> endobj +535 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 620.0252 262.7911 630.9292] +/Subtype /Link +/A << /S /GoTo /D (section.6.13) >> +>> endobj +536 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 604.164 207.7177 613.1302] +/Subtype /Link +/A << /S /GoTo /D (section.6.14) >> +>> endobj +537 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 584.4273 181.9047 595.3313] +/Subtype /Link +/A << /S /GoTo /D (section.6.15) >> +>> endobj +538 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 568.5661 189.8946 577.5323] +/Subtype /Link +/A << /S /GoTo /D (section.6.16) >> +>> endobj +539 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 548.8294 208.7238 559.7334] +/Subtype /Link +/A << /S /GoTo /D (section.6.17) >> +>> endobj +540 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 531.0305 280.7632 541.9344] +/Subtype /Link +/A << /S /GoTo /D (section.6.18) >> +>> endobj +541 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 515.1692 183.21 524.1355] +/Subtype /Link +/A << /S /GoTo /D (section.6.19) >> +>> endobj +542 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 497.4899 212.9779 506.3366] +/Subtype /Link +/A << /S /GoTo /D (section.6.20) >> +>> endobj +543 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 479.691 180.2909 488.5376] +/Subtype /Link +/A << /S /GoTo /D (section.6.21) >> +>> endobj +544 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 460.552 179.1154 470.7387] +/Subtype /Link +/A << /S /GoTo /D (section.6.22) >> +>> endobj +545 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 444.0931 171.4939 452.9397] +/Subtype /Link +/A << /S /GoTo /D (section.6.23) >> +>> endobj +546 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 426.2941 173.5465 435.1408] +/Subtype /Link +/A << /S /GoTo /D (section.6.24) >> +>> endobj +547 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 397.8143 270.4022 406.7905] +/Subtype /Link +/A << /S /GoTo /D (chapter.7) >> +>> endobj +548 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 377.978 245.0472 388.882] +/Subtype /Link +/A << /S /GoTo /D (section.7.1) >> +>> endobj +549 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 361.1553 269.3059 371.083] +/Subtype /Link +/A << /S /GoTo /D (section.7.2) >> +>> endobj +550 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 342.3801 255.0196 353.2841] +/Subtype /Link +/A << /S /GoTo /D (section.7.3) >> +>> endobj +551 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 324.5812 241.7395 335.4851] +/Subtype /Link +/A << /S /GoTo /D (section.7.4) >> +>> endobj +552 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 307.7585 253.914 317.6862] +/Subtype /Link +/A << /S /GoTo /D (section.7.5) >> +>> endobj +553 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 288.9833 221.2568 299.8872] +/Subtype /Link +/A << /S /GoTo /D (section.7.6) >> +>> endobj +554 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 271.1844 239.3191 282.0883] +/Subtype /Link +/A << /S /GoTo /D (section.7.7) >> +>> endobj +555 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 253.3854 205.765 264.2894] +/Subtype /Link +/A << /S /GoTo /D (section.7.8) >> +>> endobj +556 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 235.5865 240.6335 246.4904] +/Subtype /Link +/A << /S /GoTo /D (section.7.9) >> +>> endobj +557 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 218.7638 248.3744 228.6915] +/Subtype /Link +/A << /S /GoTo /D (section.7.10) >> +>> endobj +558 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 202.0459 219.0448 210.8925] +/Subtype /Link +/A << /S /GoTo /D (section.7.11) >> +>> endobj +559 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 182.1897 235.0949 193.0936] +/Subtype /Link +/A << /S /GoTo /D (section.7.12) >> +>> endobj +560 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 164.3907 250.5866 175.2947] +/Subtype /Link +/A << /S /GoTo /D (section.7.13) >> +>> endobj +561 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 146.5918 246.1633 157.4957] +/Subtype /Link +/A << /S /GoTo /D (section.7.14) >> +>> endobj +562 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 128.7928 261.6649 139.6968] +/Subtype /Link +/A << /S /GoTo /D (section.7.15) >> +>> endobj +563 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 110.9939 273.8294 121.8978] +/Subtype /Link +/A << /S /GoTo /D (section.7.16) >> +>> endobj +564 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 93.195 233.4407 104.0989] +/Subtype /Link +/A << /S /GoTo /D (section.7.17) >> +>> endobj +526 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +567 0 obj << +/Length 2549 +/Filter /FlateDecode +>> +stream +x陧淽s愣嗭+xi_器G.&欘L6牖Lf菛+Me藭鋖箫  +饋蒦跑儋祃絳潍l惼郌 悴Y?^徭孆馩W?讲席R流wW?Rd$曂葭緜$HPB浕童蟱?鼃黢娣 'IC-=粉砗_齪:x侷艺险醘c峾嘎-毌寛1磞尖 哽>^+詑O◆:8 佻╮蝱Q髟駤捜 嫒pn_;弹T养襓蛞 阇D攥劺/荤O珲除w9蕃亚篑e}vi?非鰅較&BE($匠D癈*$沂鏌ZD骑蛩E斳高:斾爜兗錒8絣(儧 厰1oPD玃鐴濨)|<Z灋&Aμ4I刕&!恉 +虿拑!剼 詏帢081 +$祾M诮@ULRi熷實].B0臔!bV藂菿慢鎹哛I$敤q8<嚹q}X飛碛閨n'懆1\4i塣U遍I拣$#塦圷-G(龀eWT#.v+b5"D蠾W腁搽A俶/C 踸zX$废幪@(攛倷d礮々?羱s$鰲'堚暶峃羗; 7%汇41U沫WU糋躌b軤P"n`&Y-嚊.鰶夫v5T6栆vlO圐稔藣3*鈿&祽儶鈻*倀7岇.aH動薺9M塂高虂O劐!FTPTE8潃捅jR姜6赸奝|E0浆V彚 E羱3Ea「F鉅r$姅挠泫g蔪h铣圴掀zU舉8賊匈榖 1@,頞笼鎺墱 F壃8壊L鈜墛嫟餶$霆娝癈5补$#塦圷-Gbq +7桪蕫爒撹T*%褴顭隗骣詽廘Z$ +f眡yf霆U*僨嬖"0勨傞e啿!豲.哫 EY 肁0辕c笣劇5﹨"喗4b榋]哖|C0浆柮案I鳑!资䴕箚1 *嚒)a杩NCR冥&rU+UQ仂&-菛誶鱩鄜驨Q嘎v)j*)磉,8a$T贂iR姜5槡}B笶霖瞆棱v 躱(╙eJS!pPyIB`x2>2 {鈴塱R#9厓梐稄G嗊 pPD80‖V溎E嗬~s乧墚'k#^/R7Z醡篓gT鱢獛-始y*旳讥嗊 oPD70‖栥瓁躱.oD趨cm|"鉽j徔qo风篌f叠矝8c墪讒`改窕 '舠Y闪V躛浲d嵸銎䦅`貍视七@踲m`S3E躾U舠鄊dF垉蔶9鎶楘例鏉B0M靲Ej *蠝櫅2篿l a嶄 獖_;.72>览"}`^Y-G_q'7w葥 1F+D*彑tw窂磴 菗7` q唘6蠎T彅{^劁; 黰pB袴8羋砕吴躱嫘秇呁A遒T6窊4Z&m^d砏U@戹-@闡{脼讶7FG孊9GF翗砕幯鉃躱頗J竇絍Nx懣 !8 J墑半澶uar"豟溮囁4鍄Y┃褦鐄ㄙL嵈 X]怪覊%嫇鎢N怭8,撹5(@L-朇 蛝!鍱aq趩:醴坆\|蹎D +輢嚎+狀頾艶鬏硈ш柵6伽;P躥諳鞸{?G媪邲黠脙輊/䴖顂9齏e逹驚麄豉唺雰揩j~椓?唟 /鞸鵹蔽Z捪Sqendstream +endobj +566 0 obj << +/Type /Page +/Contents 567 0 R +/Resources 565 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 486 0 R +/Annots [ 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R ] +>> endobj +569 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 726.8189 253.9141 737.7228] +/Subtype /Link +/A << /S /GoTo /D (section.7.18) >> +>> endobj +570 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 709.0199 255.0202 719.9239] +/Subtype /Link +/A << /S /GoTo /D (section.7.19) >> +>> endobj +571 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 691.221 256.6839 702.1249] +/Subtype /Link +/A << /S /GoTo /D (section.7.20) >> +>> endobj +572 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 674.3983 259.9907 684.326] +/Subtype /Link +/A << /S /GoTo /D (section.7.21) >> +>> endobj +573 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 646.9995 222.7212 655.9757] +/Subtype /Link +/A << /S /GoTo /D (chapter.8) >> +>> endobj +574 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 627.1632 313.2008 638.0671] +/Subtype /Link +/A << /S /GoTo /D (section.8.1) >> +>> endobj +575 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 609.3643 313.7588 620.2682] +/Subtype /Link +/A << /S /GoTo /D (section.8.2) >> +>> endobj +576 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 591.5653 268.479 602.4693] +/Subtype /Link +/A << /S /GoTo /D (section.8.3) >> +>> endobj +577 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 573.7664 269.0369 584.6703] +/Subtype /Link +/A << /S /GoTo /D (section.8.4) >> +>> endobj +578 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 555.9674 259.1837 566.8714] +/Subtype /Link +/A << /S /GoTo /D (section.8.5) >> +>> endobj +579 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 538.1685 259.7417 549.0724] +/Subtype /Link +/A << /S /GoTo /D (section.8.6) >> +>> endobj +580 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 520.3696 266.3666 531.2735] +/Subtype /Link +/A << /S /GoTo /D (section.8.7) >> +>> endobj +581 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 502.5706 266.9246 513.4746] +/Subtype /Link +/A << /S /GoTo /D (section.8.8) >> +>> endobj +582 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 484.7717 274.6654 495.6756] +/Subtype /Link +/A << /S /GoTo /D (section.8.9) >> +>> endobj +583 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 466.9727 275.2234 477.8767] +/Subtype /Link +/A << /S /GoTo /D (section.8.10) >> +>> endobj +584 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 449.1738 297.8981 460.0777] +/Subtype /Link +/A << /S /GoTo /D (section.8.11) >> +>> endobj +585 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 431.3749 298.4561 442.2788] +/Subtype /Link +/A << /S /GoTo /D (section.8.12) >> +>> endobj +586 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 413.5759 297.1911 424.4798] +/Subtype /Link +/A << /S /GoTo /D (section.8.13) >> +>> endobj +587 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 395.777 297.7491 406.6809] +/Subtype /Link +/A << /S /GoTo /D (section.8.14) >> +>> endobj +588 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 377.978 281.6994 388.882] +/Subtype /Link +/A << /S /GoTo /D (section.8.15) >> +>> endobj +589 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 362.2364 234.4271 371.083] +/Subtype /Link +/A << /S /GoTo /D (section.8.16) >> +>> endobj +590 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 344.4374 234.985 353.2841] +/Subtype /Link +/A << /S /GoTo /D (section.8.17) >> +>> endobj +591 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 324.5812 264.1452 335.4851] +/Subtype /Link +/A << /S /GoTo /D (section.8.18) >> +>> endobj +592 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 306.7823 249.2113 317.6862] +/Subtype /Link +/A << /S /GoTo /D (section.8.19) >> +>> endobj +593 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 288.9833 219.8818 299.8872] +/Subtype /Link +/A << /S /GoTo /D (section.8.20) >> +>> endobj +594 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 271.1844 235.9316 282.0883] +/Subtype /Link +/A << /S /GoTo /D (section.8.21) >> +>> endobj +595 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 253.3854 220.4398 264.2894] +/Subtype /Link +/A << /S /GoTo /D (section.8.22) >> +>> endobj +596 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 235.5865 232.6138 246.4904] +/Subtype /Link +/A << /S /GoTo /D (section.8.23) >> +>> endobj +597 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 217.7875 233.1718 228.6915] +/Subtype /Link +/A << /S /GoTo /D (section.8.24) >> +>> endobj +598 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 199.9886 263.0497 210.8925] +/Subtype /Link +/A << /S /GoTo /D (section.8.25) >> +>> endobj +599 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 182.1897 263.6077 193.0936] +/Subtype /Link +/A << /S /GoTo /D (section.8.26) >> +>> endobj +600 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 164.3907 245.9038 175.2947] +/Subtype /Link +/A << /S /GoTo /D (section.8.27) >> +>> endobj +601 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 146.5918 224.8631 157.4957] +/Subtype /Link +/A << /S /GoTo /D (section.8.28) >> +>> endobj +602 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 128.7928 225.4211 139.6968] +/Subtype /Link +/A << /S /GoTo /D (section.8.29) >> +>> endobj +603 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 110.9939 247.5479 121.8978] +/Subtype /Link +/A << /S /GoTo /D (section.8.30) >> +>> endobj +604 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 93.195 242.5666 104.0989] +/Subtype /Link +/A << /S /GoTo /D (section.8.31) >> +>> endobj +568 0 obj << +/D [566 0 R /XYZ 90 757.9346 null] +>> endobj +565 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +607 0 obj << +/Length 1649 +/Filter /FlateDecode +>> +stream +x陧沒o6嗭+x_樸7臹nkX返+!u斱c{~I擨&歸A`;~u+濭鼝妶ぅ茊 w>?繛叙跆~??'?絙lSh~跠PKF氝|竄M)国:8兏05蔉r_芹敷黝藋#X怽Q椺熒噺軽+o&sSI鬬?0t7尫謸鲹亢8䦆鎬軝Ra"1斫7"髡⺳屑嬩l劙g响筳譄<廚綰"w鎙:搾\莜v?龠刊;紲螛忽镛辗蹙,赉鯼俛*帰躺賢"贫-Al[w匋/G-*/=誀n香H9゛ %叓妆H5V舔骕)肻hU盪鶂祈铕蛊TjgNa ?&(6LWC?>(愆[6夊逛Y.羭#罷F`蛒霻L儡92g嬳骣)lJ硹X=叧UL2﹑ォ簗~<倣亳積梭╮<蛮lX7`薐Pt?;9Q螐橺~mK雩峛膺键v}穔覃u桓揩7囯胘籌莏9(螠ㄠ痥簇$58gw5俦]RZ=嶔5讵&略5抦厸錬防嬆嫭癟L9jNU騚蠝;榵6{YC/k>I65榦8甜G#)*- *0 糒稊3<僷P鐔髰XJ/<禹T`68韺肂h冣剝8秖A,C!霌膉 尜Mmp颈s{5;罎*@茱j-7蹯酸蝨茊邗ㄖ(螔曹狫f屍(5ts!粞糂E鑩k惸蚣鎔 `颈2吠4 珗imv%}も E3]n*f234rs$碢Izj翃$<&-榦do+i籓臿p;UW儧v付$v.冣p儶洌w`8p翏t嗦Ib5鄪l 鐂[8遑橖p氰^j60W麅6谕蒾罚5蓯5l]o挲酢抉洉鷞嵺>竻_驤^0䝼呡螌暹軳櫦陬龂t[臾镯庤o?讻?xkQ+ 6 +endstream +endobj +606 0 obj << +/Type /Page +/Contents 607 0 R +/Resources 605 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 486 0 R +/Annots [ 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R ] +>> endobj +609 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 726.8189 243.1246 737.7228] +/Subtype /Link +/A << /S /GoTo /D (section.8.32) >> +>> endobj +610 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 709.1945 238.1532 720.0984] +/Subtype /Link +/A << /S /GoTo /D (section.8.33) >> +>> endobj +611 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 691.5701 251.4234 702.4741] +/Subtype /Link +/A << /S /GoTo /D (section.8.34) >> +>> endobj +612 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 664.1176 244.3102 674.9967] +/Subtype /Link +/A << /S /GoTo /D (chapter.9) >> +>> endobj +613 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 646.3587 159.559 657.2627] +/Subtype /Link +/A << /S /GoTo /D (section.9.1) >> +>> endobj +614 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 628.7344 160.117 639.6383] +/Subtype /Link +/A << /S /GoTo /D (section.9.2) >> +>> endobj +615 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 611.11 247.3986 622.0139] +/Subtype /Link +/A << /S /GoTo /D (section.9.3) >> +>> endobj +616 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 593.4856 260.1307 604.3896] +/Subtype /Link +/A << /S /GoTo /D (section.9.4) >> +>> endobj +617 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 577.799 182.1539 586.7652] +/Subtype /Link +/A << /S /GoTo /D (section.9.5) >> +>> endobj +618 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 560.1746 182.7119 569.1408] +/Subtype /Link +/A << /S /GoTo /D (section.9.6) >> +>> endobj +619 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 542.5502 159.4692 551.5165] +/Subtype /Link +/A << /S /GoTo /D (section.9.7) >> +>> endobj +620 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 524.9258 160.0272 533.8921] +/Subtype /Link +/A << /S /GoTo /D (section.9.8) >> +>> endobj +621 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 505.3638 155.1453 516.2677] +/Subtype /Link +/A << /S /GoTo /D (section.9.9) >> +>> endobj +622 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 487.7394 155.7033 498.6434] +/Subtype /Link +/A << /S /GoTo /D (section.9.10) >> +>> endobj +623 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 472.0527 162.8862 481.019] +/Subtype /Link +/A << /S /GoTo /D (section.9.11) >> +>> endobj +624 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 454.4284 163.4442 463.3946] +/Subtype /Link +/A << /S /GoTo /D (section.9.12) >> +>> endobj +625 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 434.8663 192.7639 445.7703] +/Subtype /Link +/A << /S /GoTo /D (section.9.13) >> +>> endobj +626 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 417.242 170.0795 428.1459] +/Subtype /Link +/A << /S /GoTo /D (section.9.14) >> +>> endobj +627 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 401.5553 174.5026 410.5215] +/Subtype /Link +/A << /S /GoTo /D (section.9.15) >> +>> endobj +628 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 383.9309 175.0605 392.8971] +/Subtype /Link +/A << /S /GoTo /D (section.9.16) >> +>> endobj +608 0 obj << +/D [606 0 R /XYZ 90 757.9346 null] +>> endobj +605 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +631 0 obj << +/Length 2360 +/Filter /FlateDecode +>> +stream +x诘]徾格=柯6i%壓4+意 茛Md壎呎+J份涐P瞝i譇"@L 圀歪,07)$Q艣紐6G髹JH鴀".7咙鑏=&覎`a媓髕@獗J肏送c耧砬Sv頜 D亩|鳠强&:醲(TZ(w囫dy<宬踘Ry麟$棊B苪矇U湦廐k? 覺(峃C$蠷,DC燞v(Nj籣nYs&翫 +6 k吂1, . 5蔷萰隐有<8蹥示_H拡0杋t# m?m普遟R'V鏡-(Ь?蝠瘘2贰5鋆g !O<魨I鎐`碫律@輫[恧悺帢|畚;C尓T嘮閥蘄閏N奒恇蝸KK牪镸S槀爙K:#飜湠v檄靛掘P奂)蟋Y鄄9z邘9wm哝mE霵巊蚇D?v<跉-噖婓0"狒knO漊pZ騮珒= +埿禾6熔︼讵2 wp佑'c蠋"韻螿檃d瀗瘴x幚5yNCS 樶磽劚P攜7=j勊邁駌<=-螤"w 兗¥ 撽n茰N#藢工蓸z1囼既殜А┚佯6kJj蝢旴踣铵Le樐qX&镹餀黼o铚颌( S v騯 B海啁z跻tE陶梫Bs/睐\a*([m恞廬V蹍) +7Et騒圞办殻G=貵4WhA2,+鬳韻}鼓3嵹3 +罺馲n娆梪B_茵kC$F@嶧#j魎h頸s殀]("6s綤u$#Y榪~O 争軘}橴鬻憻Cy"楬6sN R≦u3Β0U呀2tBC?Q昋孓!EW^_郼]蕆肠揻,萏/2bR0姅壪躮(p 譖动Zi驴'纻. +$胧 *>霟#k麷瘭{訑媊@,錹跰$擨3 廋毑鋇0殲=蘆">偤衖媅][4皇鮖^i2! 砋UG琡幎!%2u-71$do|P顓m键XO躾"裛d蒾鋥杖I梩QRW镗6М⒎$謬/锛倵&b鈓矼Xw凲芯='Zu贫CG兠N~fsD8穀Q哇14姃瓭荪=墰灂%B嵂fE决&"訷醀nh8SZ@ b沲=萂骘k?Vu8緬伡Y0氯崡\44蟉:土n▽螅甿雚ㄤ麡姙Wwq粕坚o苮脊R抽睺~.厠;訑鎪 +{[7vS~璌]矏-AP斗m5酤.洸v~媺;酗羋9廗|碙1瞭Fp潼7zo%.句訉3喆艄' a%夭爛:瀯凥 ~揋p軳:1#爟厍邆D{躐鳙~嶼珽轝r鄷v靡q幯貢}o歐察谦馫MO5芔?醡拑JQ%??.+坻endstream +endobj +630 0 obj << +/Type /Page +/Contents 631 0 R +/Resources 629 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 648 0 R +/Annots [ 633 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R ] +>> endobj +633 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [171.6432 525.9374 324.8465 548.2835] +/Subtype/Link/A<> +>> endobj +637 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [243.7125 430.2503 420.8261 441.1542] +/Subtype/Link/A<> +>> endobj +638 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 390.6135 195.8719 413.5822] +/Subtype /Link +/A << /S /GoTo /D (a00143) >> +>> endobj +639 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 378.6583 251.5126 389.5623] +/Subtype /Link +/A << /S /GoTo /D (a00153) >> +>> endobj +640 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 366.7032 241.5402 377.6071] +/Subtype /Link +/A << /S /GoTo /D (a00144) >> +>> endobj +641 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 356.8053 199.199 365.6519] +/Subtype /Link +/A << /S /GoTo /D (a00145) >> +>> endobj +642 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 342.7928 199.7971 353.6968] +/Subtype /Link +/A << /S /GoTo /D (a00146) >> +>> endobj +643 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [217.1719 342.7928 346.0872 353.6968] +/Subtype /Link +/A << /S /GoTo /D (a00149) >> +>> endobj +644 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 330.8377 297.0202 341.7416] +/Subtype /Link +/A << /S /GoTo /D (a00147) >> +>> endobj +645 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [377.3768 330.8377 448.1464 341.7416] +/Subtype /Link +/A << /S /GoTo /D (a00158) >> +>> endobj +646 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.6908 318.8825 181.4861 329.7864] +/Subtype /Link +/A << /S /GoTo /D (a00142) >> +>> endobj +6 0 obj << +/D [630 0 R /XYZ 90 739.9346 null] +>> endobj +632 0 obj << +/D [630 0 R /XYZ 90 553.9527 null] +>> endobj +647 0 obj << +/D [630 0 R /XYZ 90 307.8837 null] +>> endobj +10 0 obj << +/D [630 0 R /XYZ 90 301.139 null] +>> endobj +629 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +660 0 obj << +/Length 3153 +/Filter /FlateDecode +>> +stream +x讠ZY徾F~焈1饟D +o戀':o<贄$5藽&8晨~:殫轳喭觋觋(廾焬鲊下(/;稔飢E飥進 p鼾 幌鯵$g鎼8饍麌觨沗 L6齿狈菇}/儑W锟w惝蠇徾?~簕0,б腶庥b燁~?A獰罴}槬颀g紉{?藗. +B鱎迃耕桌G飉SwBpn敳苍酳讻獡Yy纵*#堽掲n S烷dNB|2 撄i 沛逯6熼_+~秐潰﹙靭琨,巈7窄禘迌Ge狅/2叔q緯瀹+騌 il服f禡贩憾酰8牪c闅鯿'vE- 媼~籏济孀鶧j%D陛氫+冰◇炋 O鈭-_洰矴芯慻k獑物O鷊劜0m熪Z-Q欌捵`垵*W9"蘙.']痱I0穾N媴R钶-_湁;c搧""?歓[o3=#裻F@ND!燲*B槷昧丶剒,躙矖蟗5"66實02Q鞃8岞3{講J6!貥畍&僊横.婿瞝S谑黾0銁t景荏羞|緲Zk)峨[{p4'踈 d7;3igZb萆[^;舛闆)Y齫 +6x2潁尳@L #賲n~y驤P偷磞菟+濵+FR74J脟@凂埼)翺珂呂;yyA埘-mmzwU4圹2C|辪叟'榸-聉蚰a+*積域┼M|!S$笟聮貐"[咙Y@7~磭5C迗渫B栕#怿7楏誤$欪w0 襺敜賒覣谰OF鱭乵),畵7緵x謕醡s雱|0穣( +涔m*橳叔詶U 6*^刋 +y{|矩b踮鮔+q;䥺}:>漐 +fkK8衊+D|d諦t圢ia厊x鳡ⅷo寎8 闌Em晏:3賃9]峳/C7J*甮QhJb !z7/棵靄F<糬漃e$/9:痋;禸񳟵xc?{8葔泯厛囇^形嵛Vg呤'埀2熊V4鐬}*喢艝%x鈷'I0哬蕰]M5郪骄迀虸0:獁欖3垅化D鱅甦昙0唸K#b禹郐,#6W}o4f"*屛虬O(緼F釩餍0'鯠w <販?!Ho帬e騄拼{~^〇DC=E<峉A喫 >v n稈Z盁豆wb ;6q擌鯤盅 D摮S 纕!gR86b +咫呯 + +=賣氷峖獯f筕sS1e;.映_盰稌匝叚3O姃U[貳>逓g琱f综趨昔狔T3Ui/[DW]2&`莸)洧五慵.'陈@2*lm,D楼奮fh戫厫c,U,+崹廝 鞵$陣佸$X魔┼e %n4K薲9昌0 E涤 U䲢璶諝%Ov [秾(|覵/i8蠚B-1h:r +猾<栰裴7湠宥q6R,eu嫗埸褃g喿氡q庲=a Oy'9(5(揭TH>/'孺h詼$`蛙]d>翣财1`寥mrH赩-鯸U_碄=D*!┪K慦^瓁勽爑T:^飑]僒J1強W-騷lOふH螷]pR┩夀妃ビ厫 靐p萏j%x1撿溉難嗉嫲y睆r71鎬循G+ !蒴姷匮m;-潦@缅<滮鴪'檞爫!箖丄.d螱_3闤(湚&颅孽v,mw戹堏w-Y^/嘧攩診&籑)瑛(7﹀3餐圩o坄/寞%詠P瞺g2鮄7瞄$PTY抄婁猂泎&6o-㎞侊並勦 妬%a3烲縘OR.舔1OjY9#;A裷E@陌AwT鷵DQ+羚鄴B嵮'鲡`氈氼o.^Js0鈎厝狱<@槧d}硠|&k-L嗈 链濱B]炐赽瑯榨犔V6* d褐刣·鳀ē/墢弞塼鱓N榫8Ji-ykZ鬃P葖楎dO僿縹x愌Q9H滤Ly汭枻d聏`診u[}朸&戝匔簳[l肿秃V 滱:u犤珫線5sX稭_堻崜Wv焺n偷i{9Z 諙 t>才V坿J闚V,鄗樗b茄琁B獉)蚺[窈l貏馺⒗釨活囿KJxVW箄脡m甘膲,A嶯P2叺(譎: f被獢a笌a<尶lㄍ糥$≠摝D-ㄒ銳熺9靛5 將涂穳穉5I譃qG鰇gち`R4袶R2N缬 U鱛G溗@@]K#;覨桅桢}Xf酛D撼鮽N6(3慺簰硡VvG螒憨$9禠謃i徒)L6䴘糐Jc峞,鳎賶鮨馬4韶煷5腹o|K\E6碲)揅嬋n厬Es2ヴ楻鍯@+0h濳试樽垞>GD楝縊w5愖埍 +萌攑F碵鮑 S 鐳;帯鰺B;S懨螌@昝h8qxD3駤T缯P袉軐#框xk%p餔OW砶;碣颂B吨紐蹀畱軬(質5成k折鋘伛{銡碄M促筊[r<掋 瀛3儻PBIP;浖'3霘顡軠佽岗Ptす7綍e觟&櫞穣4礽笠鯫跠踃遧﹪赗椲5噪据R愔蜱島?觧,.芇6>标1f垠鵶"=z勺1蝉 Q菔V 悥"螱燅89pt諰Ss 欬cK莶:0.峓afO珆璺畁k8瀜)'汪Yf] 枝;FhW簏!瞏f!:椢_ 5T失V鲸麀篛0鼾)翖_聖/貵a峾hA糪索0 %垠+T遉鰴yI2_髡诓礿吖珛'<漳畻湻誉滬%_a疽薤1Kp]爷*qD?%焂kT叱+:錗V|Fu(墰撜飋江锑N-6Eq龤j? 佫鰚'紫9X)a0J蚕aJ L$g鍰 葞痺G>W緎儫 nk澎{?'o佺%j0dB铥屦i赃{/ h䏝偯]*墌q并鑴媏ndstream +endobj +659 0 obj << +/Type /Page +/Contents 660 0 R +/Resources 658 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 648 0 R +>> endobj +661 0 obj << +/D [659 0 R /XYZ 406.9776 658.2409 null] +>> endobj +14 0 obj << +/D [659 0 R /XYZ 90 637.7268 null] +>> endobj +662 0 obj << +/D [659 0 R /XYZ 230.4521 230.3912 null] +>> endobj +18 0 obj << +/D [659 0 R /XYZ 90 209.8771 null] +>> endobj +658 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +665 0 obj << +/Length 3063 +/Filter /FlateDecode +>> +stream +x讠]彜6騷~E?24岢伡%{梙#瓟KF蔆pO車醘鐍椓刑Ntдr筡U.娻惀檁纳镻uw玲?迏瞸匁瘕爿7?D拧饗St:<瀴)粲(忰颺'髑( 硷嘂0鳘K3猨渉遄? 獂訵c,H#/篑Щ?蝲沬| +憢蔟p▉轃?.螋摾":twI跧{麟?f:粿訾M脁O躼#n訉x?僻揥蛳惮>邍仹F済蕙4> 蛚攝SO-Ro(^n4蝠R鰑灉E3[吥A鋰9萭!qpex擾羏簦+ Uqj$䥽7$DA舵eZ洞褨硅┉Y1O荇鱅ZO虫-+*頙昆Qq-妐|叀_)熦j}躏"飸6鳌j?^U9W{U岦掖-脅弟粻>岛鷮B农鲃琌Bp5(x2B珨U軼J橔恝d 啫&"5蛨I榸 墐丹%¦^痬S,伟/棪吼P把`+󾭏僝厂8A忧I訌馸p謺<笖(9隕 簽*嫧{3p亃葼膂d硸.$,豚d帏I慟#=>)Mk鷣,3 z5抈z毌订啉瘀盪俣J`YゞV鎯嶌p聂g93% 声]7鐿酫宍㎝恆@I殐羋鑌|!+瀥轳孟贾 +L1潙=4E讠/@蒦餞8r@顧夢巊随Z靛+狸sP捏q0;⑵=斀c$L匴A z觌84W^@Fx 屔m迁8擅!,篤匚A1]彋 1波`賍xW#潬 醔pE魝穘峲鳳,刧/g/歹燕NNi洄Y樈0,莅惘o柃恆镇f匀O~旀蓡匕X锺qC 鶢K霞颱UNf忘洀?嬵費G喡磙(幈C+O琞聅sL/le0猆俨浱bp镢吜%-膲鼿徣,=l\y唹V7厽兢廰黲#觲 菺愊2v輝NC齥jex嗺迿扎掳硴暵斣夸烽B'Ez3s蕕紁7Of墑鵒X北 +3棈懨尸燔0鮜颕L) Y{畡(SH4*签'旮厁.忑鋃cSMm9疖 \茗瑉x#酂Y]鍇S[8J羮>;,&Tk妰嵷鐛暡0 7倎p9fgOc矯#L kv~(嗺幄f陿趪睧循S1/ L鎽櫛1餛F]闁J:T s蹺窮ト37vU维吮\ +I*k蜠郹=XK俳鈞'!q惌S慶捗s刣P"鐫 维5Z馏mG媽噶B;`Xv82い8冷~T傔}7藒輗*yb\饽廻;罙U-谸59'埕k浞Ctyyf)废=蠞獉陵G櫷珂仮=H潙r. 皫姀飺6BN熈?杊圭xu}杠MFv<d炽9KY9X8?腊舡髎Y歯凬n$襬棪%w>]禨M*哬?鞙 dW.璺Y讝孳.竀蚤[筥斿~樺駣桵7銃潈<3t颏W`*E扅E-鲎忁写聫;仪г蜐&龑骍稊$鐛阖FCIs鱝6蘪糷H8笸灬憨饼邯}歲瘩簯逰髚i%E訵葁厥4FuO-攪 z橌K倏婂d]#夐qt|jF蹣<糞#條%燙.吾6~ +戍箦H.U_芍~隇2蝝lp!嘉 !$可:悬[=>嵡*v 唳'+(%+眎諲炐C鮏峨\f濽 + 鞊=B*.瘞]畝 c BJX/[fG桵[傢%*ZJl6縭誄rd壄゜ ++9)儇cc&`HF灬醫暳瞺軆肏V陃J'A]葛鷙熜:猔iSuPy踲榡嬀睅涆 楯劬揗U﹄反救遢,JwE灜x屢ㄝ6 猢 鈏磋酿B?巆庘Y:璺bK悠(PR潈摕Q告d-易垈/(_q`#蒼?'[6}乀\'臻AL馭贄蟎>絒+坢W%^椻喿猊[" 葉`王I椠蜉P楞¥F娩X8LO凋* ;}姳@.fw豄K`煕Vs沓追9s跬艓筏鮩}飔耟撏 iM ( 峒绊銪=J~~"6!e`3w癤嘡klw}拹堆6哏2㏕ q:W c嘆:徯宐圔O縰4睺况e嚠;.\zS斧S榾 *j訤杫虰ZN+`缐磖3彳挔R瞵v科休x#葜\瑽澐昕*yrBo5q.閶璛>蚪阙>鞪鹘甡8襑8pb 痬"X#\a驵dU綖炆365< 0} y湏デ+t斮秮虙濼j淈1黪v 7諧8}讎嶓Xu`鉲蹃輭恜Tl(N瘦嬙~喠b.榄f7l2毻fpLv覩jqu嘓屨.舭弰&瀲_!絯v%錻往暻-沇批鋦tD 姤W口虱-懫堀-la銲败f襖ㄐ坟-=;坬O厘玤G鴠3 XY}K嶃2K2请!楷F4]ш$0霹梽lク戎霙来0篻‵=%秦釬摤皡%CN!QB鱃Uhfb *$--ざ眺瘡勆~摣脤%s鎻莍睏y徇t剘榙坏x)ExJO炐忆%#黠hN~懪过a/酖蘯搜6黡?2&檮扅逨穹Q莱(N<"=隺'}A|抣阰+湔[踵_澎桤=顋!endstream +endobj +664 0 obj << +/Type /Page +/Contents 665 0 R +/Resources 663 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 648 0 R +/Annots [ 666 0 R 667 0 R 671 0 R 672 0 R 675 0 R ] +>> endobj +666 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.193 726.8189 348.017 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00146_ga4360412ee9350fba725f98a137169fe) >> +>> endobj +667 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [328.2665 649.4187 387.2547 660.3226] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +671 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [214.0892 410.0069 279.1746 420.9108] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2addf34c7d457c1a7899a7e2171ef1e9) >> +>> endobj +672 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [296.7031 410.0069 366.2118 420.9108] +/Subtype /Link +/A << /S /GoTo /D (a00150_g85b65e38aa74eba18979156f97a94a87) >> +>> endobj +675 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [156.7987 273.8799 207.4884 284.7838] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6832e4d2d046536b6472f7ac92340f68) >> +>> endobj +668 0 obj << +/D [664 0 R /XYZ 271.0497 628.6614 null] +>> endobj +22 0 obj << +/D [664 0 R /XYZ 90 610.6547 null] +>> endobj +669 0 obj << +/D [664 0 R /XYZ 247.6771 537.3319 null] +>> endobj +670 0 obj << +/D [664 0 R /XYZ 90 520.446 null] +>> endobj +673 0 obj << +/D [664 0 R /XYZ 418.9827 401.2048 null] +>> endobj +674 0 obj << +/D [664 0 R /XYZ 90 384.319 null] +>> endobj +676 0 obj << +/D [664 0 R /XYZ 244.6786 277.033 null] +>> endobj +26 0 obj << +/D [664 0 R /XYZ 90 259.0263 null] +>> endobj +663 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +684 0 obj << +/Length 3355 +/Filter /FlateDecode +>> +stream +x讠郛6螨|呇'圲Qwe煉l蝁霤Y!掕枰撚筈[IX鳤鋚8螎ふ蝺熩e.7 聏W4揞 郷 `Dx疸?齦椆Y烨户Q垥=暱9狺鴡;O?鴳鐚?r汩?趘?渑琮O>4-'蹹A琾/魁犴J嚓 4=C莝U桖绘!郓5厌毎%T-﹤﹟&,T~街U昳扆坦=7疂)t唠罕 ,t鏀鶒粻 q>頤桎臹9燋蕇粜[軀`浼氇9頤佺嫋禈&L搞3Q电 醾6c/54qP释%2闝棷c9 +唇9攫梙^浯zxF9L鳈GJM糤 榦蚛#履ピ>蠿$兲敥謬釸]y蜗袄脜i囄缘顉句{叱z哟9"顇BNB!擼 vE3ㄎ唤J澇tuk企E "#y2 <濛 縑拓0﨎沉鍾9uy覅r轒J[2M睄2锠-k2,揗皢橫z矸雉cqa醇顼2胻C/楨2Ba甴/孯祬i赛p禅2 8历狐轷5矧AXY霟1时C:[范~?^X=:氱;颫8悎瑎q妨$=!趇琸叔G诶t12(俭谋#kp壬衣<摃<擶麈4勛p懝#纰漣c 9`陿q8瘼tJn<4絬6-{欦益MU藾萗}凿/WKg瞏鄡Pp3怸A3o虉 踕耩m tc熔;鲮胄dM! ゾ十C6痡橨<鈧简j葵酡僥bU孹墒 + 藘>$ 軮雒蒩h犼纜:f6Z'}↑皝hB猍~<亰牔嵧"< 馣m 莦橞T莘-+騲hTV幣`&JR卧愜j9繶橈yR救羕Q鰻萛{N鍗:|#邳箇FXiRLb▍?玆槯寅胄影6ZKQO=\:<6_i嵓蓲=)閕癪蜁@- 娝csd擉鹃e挹藔A汉R劚彿<纎杌i榪(Wn?(Np聃m嬬|$2pT撠K^H嫾7呙G蒪%X薕8尦9m,q,桻Y +巳8蔏`&p| 釘穽%v噵 Ry妥%腐v皆*0/∨龇/貑U踷拖B夦x鉇W9>撫8胰\jeh,尷y S@/螰(h紏{~琼,树%)浉倄郲出锒*)5暨{鳁d窓献哩\I罊蟆*:記永飑8昪o>y\n降褧鼘蠉戨{D条6;Y潷宻M轇旲S"痻!腃4  +惐吺磣醸慔蟒矦抢q滔"捌1蕐蔔靻G繶鴑织爭剠皶@Nn!籤87E稟"泠`芘E[b鉗L眊v鹍⑼7戬怍=+坫栶 `獝-1 蔂獫塴z%璧脊Ol挿!yx#熘+v%:絵|'ari4懬.?嚇U鮧a彾!驇腋$@輔^0縷 D.惲胉l 8爰枦 f杸}N櫲/e<=$(矙q腹a砍5& Q0懿>柴$8鰟<){.髽9O9?t9~䜩粃>榈冕楰x騧S鰵g + +鰞*hIz< 25#KmH肥怦 H9 =,h胰鮐氺8v0 6焀,襛塽p攆.K爼Q*活碗坼曠籌喃锂篩狟hB撼 }Zp┘腗,涣2oOx蝙馸道t]>鐤4q捥M,=?茚潧dw黐磯敦䦷(u$-檗qk6V:= 0Kl嶅*┎頮籠*>t傢 ++Go|4X竀FMS9=D磳硆?yzX蘧3荕p臋m_Z死=#C`褚\伟瓟0!R_<邛工='m鉿x尅({冊襕>抣q龔讍剴@'奥Ra;Y驂軹迏` 珙O;峬!kヶ=摝 v伅 Bkm7雰辝 >╯糦fBTX砡娟b伈彨胁鲝妰,|o(鑺*7%LW}袀Sa<暫^揆憊個7>惇F^`芳庙 +i>哙d櫮?瓥c濢>6榼l豸 k學!i剫4薿 loQ)x;] =毰'鯹V&# 兴稜`琇Y嵛膱aEr讕峐V枞C鳁睪 值JM痯PJ歏39:RU坄 BP鶎郕鎻Wv銩7lax>!lvh棔胶 闼谦 竺 yJ唹|o猷嶙 J鄧\ l}i褆,!ji#yV屼b i跁屺蓫 u~IF曝-囩NEg軸>哵.咿豵 戠p55M*.芪氝峖q酁+h胮R肇z帊錚/耏鵺遃霷nHU姕^莪(W吷鏌|<劝*庘/7鬙Θu)籝&馀媏咞E穢碐{镇6~E笹(_巨k?x韠荏=/杝 濵B箓x斔骐薡贩Jmh榭驭2endstream +endobj +683 0 obj << +/Type /Page +/Contents 684 0 R +/Resources 682 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 648 0 R +/Annots [ 686 0 R 687 0 R ] +>> endobj +686 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 263.5952 188.5792 286.564] +/Subtype /Link +/A << /S /GoTo /D (a00158) >> +>> endobj +687 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 253.6974 159.0703 262.544] +/Subtype /Link +/A << /S /GoTo /D (a00142) >> +>> endobj +685 0 obj << +/D [683 0 R /XYZ 412.7165 467.575 null] +>> endobj +30 0 obj << +/D [683 0 R /XYZ 90 446.1709 null] +>> endobj +688 0 obj << +/D [683 0 R /XYZ 90 242.3602 null] +>> endobj +689 0 obj << +/D [683 0 R /XYZ 90 236.5671 null] +>> endobj +682 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +692 0 obj << +/Length 3453 +/Filter /FlateDecode +>> +stream +x讠k忋恶 +*"憐鍯侂鍜n惁勰E> K\[9Yr羧f箅;/蕭]8嗵3浼)懔?搝8屳T&?遹#烤骵z蠡)逻鱳ヒM軎憡6鸊鵱▅蒂?9mw*魷w[:桲U鎅_65诃8捅臀 腐{>f贯?雲藁噞DA鄤蹮鬟軁貜L 稀巪d榉粺~6瘙蜐珀4 7O饑琥i6缁@i鸊u髅菘G:!<氈=俁绫m<亵'域ps欢氤/k^詿瞊 蜊氝啿5倃2誩I 涋濶FMY-3埦髛7 C﹐澈;梋;w 晇%+8孏芶|*髣!殅o +Y燅嗊973弴/+YiILV葞w{}#寴5┖!螹=U洦(r +S暩:p]儜 8h伇^痞q仌7umr澢隄幹>眞Ul +S%OgGw*奛-eB$矮m1t娀0奨ry吽>yO<. P碬Vkx跆璈d櫰觛振 Il/僘O`衑gb4I#鲰潵  唗Z梽)治W]墖S侢 CG6嚚ZH媧奨蒚-cbK0JL糎匵$抣 癗<2i)椙参*.欿?J釁6 Jsy&|畤郄:N9势 '哾 `.&[ 続錗ax4 CGA 嚘瀋騆0蘇苊mkY211A銛6崪wU谞%!市瓑Y/M WN盚KXQxgF 2#H0h嗐赦pZCV1翸\嗼鎮鼡NP!KkK:d厦齿蒖縙#匽錥袺"貙4(誡 :埻3OR丐4)%凫馐a舵FF漛 筶K瘴iT蜴|┤服!霶4\ s6蕱%GZ懮牙`殶%8誽k参財(鸊)k﹂s鐸屏堥Z$蒸nfQ:僪:偸4巐屐.越剧絇>鴿x肻砷99簙惼Dno飤~RC左斀 燿rC糶桡P绗{嫆\{睕鴄 b"V1W8琨Im=怙 n 靃(~y黟瘙莘遙縺K嗏詬0Z0(馟馗l|茋".N墦]%\o沬瞿'+2+l薫闁7y>礃_A鄚热пb=8鲊昘XW琐/>fz 步S伋0皑猝q撷煨ewb詢闊(╀資樆a眘+k忟慁A: +|8玉膡滃m# FOeU窦e 禃9-恭伆?M+蠪 uS婠 凤8:勓d\@)WS灩糌%鷨xU ャaN6醑悭 S?簐兕 J赘槺$久忽4%儤n墤f朧#_0廛 (翦" 骔氹Au^S眢皖O夳踇?~欹HL蠤黈}$鴣 眶咼b%ф忐^鳨嬾}烳軻?V蛠<Y┶挭鹰7 絛#鍐^皙_带婚噒C楘忓l=輕唍 +垫倠3碭&I<邲OQI%鴴A(噿9弎羈7 +祣階嶘0{K鱏摹肜鬉峏'爥練镙蹴9b薸7鯺ifBG6晭釯K袾愲Dt弟蓪"|俤箳丁捥9掫閅m縩8Z-倿/襜攢e2U![a抁j +侲)鑽鐔A絭硞緵獐顠W.'df豸蕽鸮觋( U X襟k7E籩索曤亝\┩餃iy汇甠5ynC曹玵. 佸箴L薼x巒$詸=潗檏$夋'夊?:銨bh坿W蔍Dy黤E塆求捁s0妧嶭qjY?_纈W%9霍ぶiqJ祷8唩>轻明玑c殨黰%履n篌÷K3~箳:蛍獑卯p>榁薷駤甾渺i&灲铃-践)&揘蘛 凂B5W)+鼪n6羓郭/X$毲p陭-凇J莄嘯GWv$R垷$: 齝`3&0C蚻mkU@癥歛8暕絠篝R箹7n/寶吒n昨犇Y葃妕斓!䝼KXd瓒.m噊葵扮馤鐸,g慵怰檽柼閧(zK4屵荶鬕特^M栬慗賂 _奕抡苆a镋蠀((暫亰俉键埧.X瘰7t瓱4撗棅@>L-\麍 ++*餦缊娆p鉚5:Q_蟨|0淪们╔ы&f \)%=z峺=俶矺2eRJ?gJ塯V,M49!c 旗LK稌',\ $ 黃Fl⒘u閡76iXp鯀舖6軸翄奻憔騝猶踔lbr61b%汙!+S郡}>豓郋馞y遅孒 謯,i狺t6)鱼麪J逍m# +歘}pvZ 槓e*曠 埛Z貦]勰=奪/2~x觱儮琛;y$A?祟熟]燮嚊嘩=F勿4R%?R碤([癇J茉嬋T謞c邧 8O(暰3暷範7~~壷婳曑X达X~Y0y睁*- R靰o 奇麤C踪撵b麮NH嘕竦u瑷b熺pvt&岄t:) 髨^,峅鹹觀y/Bf X30鞏-?輬覿鴖%?懱谰#錃攕?>晆16荫 闗n槲擳K亅7勪斟o$劓懶x穭0纍yN~4爩)镍tc葊憚<覃貙慐踎弇m埝z籴Z鵿諐W=J頲秕>泝蘀鸝M繗嬡4謮齬L樌簋Z綻(罔l焩 J2緬_ タP瀌姙'扪蚚椑盷A<萚葪螱s`癯窌簌﹞騟ndstream +endobj +691 0 obj << +/Type /Page +/Contents 692 0 R +/Resources 690 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 648 0 R +/Annots [ 696 0 R 699 0 R 700 0 R 701 0 R 702 0 R 708 0 R 709 0 R 710 0 R ] +>> endobj +696 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [306.8197 468.5196 380.7619 479.4236] +/Subtype /Link +/A << /S /GoTo /D (a00153_g41aa744caa46913b3b3aedb2a4e78546) >> +>> endobj +699 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [317.8545 359.3516 356.9278 370.2556] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +700 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [437.6571 359.3516 476.7304 370.2556] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +701 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [490.9727 347.3965 513.9963 358.3004] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +702 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 335.4413 110.3636 346.3452] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +708 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.7312 226.2733 239.0183 237.1772] +/Subtype /Link +/A << /S /GoTo /D (a00147_g26a14b8dae3f861830af9e7cf1e03725) >> +>> endobj +709 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [490.9727 214.3181 513.9963 225.2221] +/Subtype /Link +/A << /S /GoTo /D (a00147_g1a1bc437c09ddef238abab41d77c3177) >> +>> endobj +710 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 202.3629 126.403 213.2669] +/Subtype /Link +/A << /S /GoTo /D (a00147_g1a1bc437c09ddef238abab41d77c3177) >> +>> endobj +693 0 obj << +/D [691 0 R /XYZ 90 757.9346 null] +>> endobj +694 0 obj << +/D [691 0 R /XYZ 489.8655 533.0201 null] +>> endobj +695 0 obj << +/D [691 0 R /XYZ 90 512.29 null] +>> endobj +697 0 obj << +/D [691 0 R /XYZ 153.1029 423.8521 null] +>> endobj +698 0 obj << +/D [691 0 R /XYZ 90 403.122 null] +>> endobj +706 0 obj << +/D [691 0 R /XYZ 243.1544 290.7737 null] +>> endobj +707 0 obj << +/D [691 0 R /XYZ 90 272.1009 null] +>> endobj +711 0 obj << +/D [691 0 R /XYZ 239.7767 181.6057 null] +>> endobj +712 0 obj << +/D [691 0 R /XYZ 90 160.8756 null] +>> endobj +690 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +719 0 obj << +/Length 3312 +/Filter /FlateDecode +>> +stream +x讠Z輔6蟔岱S凳墥讧^-禓伣^{h媰b)卑朵Jr郁,媴)r83Fo汱m8 3雇顇6闲潠-宱|耕搈0s苖瀳冇al促<額k嵄.x貤鱗37钧鼤ow}钧rOw嗗D氊:崑齫麟飆ST?荸衒i紋,3涖]d8荦_ k泭礭蹠]焓纆聸蕒斱=锷m+珄揠8(埯Hx(瘚 蛴镻眚緅j&9姣S&},藲<`t}X@ K2╦'粰Y貥'ご-村绐谠%j曑榑b皵\!蜯V婢S +籎ɡ$:巪Е颂螩灌?鸕骜壚r`0Uq)n緁轺谟ku虑竝邠惚乛(5罠殻S^*B!谢抎4 覮e涁&=齰:aL^瘐、%刍 +)m +扌鑵LKH椹nHE*4NI~S舒蟫%ac( +R.闱X嫖,詆[*恱pq1瞭~屘箈#匷;帚欌塅xQ覅謓5I纋a縌枂i猲&葿緷爷$蒏?<汊0稇YH8紒陽 磿fsA瞥渼 +c碵帄%褯nA.!秫阍娿j舿$^oM?`'P 4?忐;a"虈 廆&]刯fs變S賮^ZS*謹xE鍋秞鈊@%榇^悓抷械瓰 褹+轝4`亐倍%FRq崞嘍紧:c鑼岹i褵Ig%2爼 I蚴}|'葃 +閏煑譴劂鴔"TV4|倹枦ec2樵$擔屚*|{(衃CGI=灇Z)輥_87斨 } x5D冪給椳5砨0迉y懦 +乬椃mE闕L袦{np=F{d3+葬䲣匃# 徧H +p瞶U/|pL壐壬} ~銊/O鐚棙绍繪V汆w巃S銻0誷驱韰fOv`$2%elH荄媄%0饴!N驺徊腧:棯袠w参c顾蠞皤dば2聖RVv(悈ND!+玔-$6沝N矈M70鹡妮同倱f几3}崤柎Ko北;缝ㄨc氹 7萭$専耗*謪*i瑑H瀭t7皧нN'琡 >苎^畺S违Y呰i(K"鐅 9JH腚`fF齛*︸鞟.<3*IM┆5橙崷E?~(s螐tD箳J僌5w6m酜@~瞏+a!E'蝼=棧"1緦郸x_犮X=铳钅1宬-+l=6 )鹟桯S藓f^,3Z偀4 $圬( +阚/B綕惎@Oo洿カ秈PaAa&梢6=眼X泟*觙&丱;B辈Hhf饢2(虎r鴬!砊bN;+罖dH b/}骊#\/"笑qX=r穃埀逳'鑲锾吋Q=OC鍊|.螮鮘╪H 7s)*裶邽┈犝4箈横で +梱<c圕 U5腇c蠻淥飶L蒔顱 5\稄-U鰶鯹猍惍s橩%#鯪~捰閯幮鰎鞼a鋞⑹ 嘰hseRm*i)7a%豣Q銾擖儀鈣F饲 +塲蓉/k$|I鞗 +雛梍趯癴敬碶四栐眖癷竡N浐坔勏>驹4苳#t朶~磍 +O溊减h哐鱦籐<炷1A鐺}喗B(姇7)玉I ?丞LXw8N罞踭A轼栥璺 +鼯傦贴_w+?梕/轣襽磲(\讉蜪 /芾&鐜5駮覊\瑳届+鄍`掾汶 豝2>疳 蝏簐'4RT緗w'.( 鲏92阖々烠~|垁辨譶Z%勧M满 楀痈^膩.E秦軃/ H2椝$# +搘髻抒bTFZ圬錽夂X皆:藚Bo堪5ㄇG浔畨阃\,煐莇T綫挆是T*\+B f=汸郠磱嗶g)L阎L,+魒n01rf香遣芺?抠焳'早Y>磻_醯盻臺F)'!O繥茚o,uㄦG鼄笞雜Y疉-'endstream +endobj +718 0 obj << +/Type /Page +/Contents 719 0 R +/Resources 717 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 648 0 R +/Annots [ 721 0 R 722 0 R 723 0 R 724 0 R 727 0 R 728 0 R 731 0 R 732 0 R 733 0 R 736 0 R 737 0 R 740 0 R ] +>> endobj +721 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [278.2206 726.8189 320.0632 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00147_gb5fecbc62edd128012cea0f47b57ab9f) >> +>> endobj +722 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [302.4389 697.2393 347.0412 708.1433] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +723 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.3885 697.2393 413.9909 708.1433] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +724 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 631.7943 133.6061 642.6982] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +727 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.8947 525.3067 439.0984 536.2106] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +728 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [214.3267 495.7271 266.5304 506.6311] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +731 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [335.0564 365.3292 381.8703 376.2332] +/Subtype /Link +/A << /S /GoTo /D (a00147_g61db1dcb7c760e4dd5d60bf4e5576dca) >> +>> endobj +732 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [288.7827 341.4189 335.5968 352.3228] +/Subtype /Link +/A << /S /GoTo /D (a00147_g88d2ccf7cd821f89d9a8df7e3948b56c) >> +>> endobj +733 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [367.2687 323.7945 419.0639 334.6984] +/Subtype /Link +/A << /S /GoTo /D (a00147_gef6c4140c632b6a406779342cf3b6eb6) >> +>> endobj +736 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [457.7775 229.2621 513.9963 240.166] +/Subtype /Link +/A << /S /GoTo /D (a00147_gfbd5fc486dfdf6bf6fc9db52b1f418c4) >> +>> endobj +737 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [105.8804 217.3069 167.6481 228.2108] +/Subtype /Link +/A << /S /GoTo /D (a00147_g7b2ac4b18bd2ac3912fe67b3b17158c3) >> +>> endobj +740 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [175.3388 146.6848 217.1815 157.5888] +/Subtype /Link +/A << /S /GoTo /D (a00147_g58bb90796c1cdad3aac2ecf44d87b20e) >> +>> endobj +720 0 obj << +/D [718 0 R /XYZ 90 757.9346 null] +>> endobj +725 0 obj << +/D [718 0 R /XYZ 479.8239 634.9474 null] +>> endobj +726 0 obj << +/D [718 0 R /XYZ 90 616.451 null] +>> endobj +729 0 obj << +/D [718 0 R /XYZ 207.8864 427.1492 null] +>> endobj +730 0 obj << +/D [718 0 R /XYZ 90 408.6528 null] +>> endobj +734 0 obj << +/D [718 0 R /XYZ 237.0374 314.9924 null] +>> endobj +735 0 obj << +/D [718 0 R /XYZ 90 296.496 null] +>> endobj +738 0 obj << +/D [718 0 R /XYZ 299.1932 220.46 null] +>> endobj +739 0 obj << +/D [718 0 R /XYZ 90 201.9636 null] +>> endobj +741 0 obj << +/D [718 0 R /XYZ 507.9991 96.348 null] +>> endobj +717 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +753 0 obj << +/Length 2416 +/Filter /FlateDecode +>> +stream +x讠Ym忋柯'X珅誎)惁i毭鍜鲕雒錺汹诘p跺HrE{g8C墥惦-娕B鋚8<襯!郞.r盚m缵$嬐酕,嶄尟B?璷/8OT瞂; 墝瓛j鞭緩d.W蕣棼吓岽/坼圂雲慪,d杺TdJ憍簖篲堳:懜蘯7?埮魕}#b漡v挑L蟢雔詹i3┖g姺Zhlg记郈:瘞K# \>針;0螽缰嫛蟨颉8VΜ"籗:i綎bi鱺O鉊氿!*#aS|&D{ +@H鸘U罘冤阍/⿰m +񶏲6茋'佉蟑 3>簮Be獏y淴'ZL嘌s]Y[兺瓍6Zdl簊脰黻K;2閝囜{常轥游{%8矧迈J耜a奞蔖娏伓靂&聙.堜4蛴寴]h⿵諂OD哪H:F3掟$K佽S供\LbM<3豱洸u[三畆_Vi徨録肉;陁諄槟犈D覂摰邨,緢d)%z М/¥秔挙 k盚莀C.蟑 s葷蕔)r%&*4叜绾*N葱c5瑐憵b缪粏,u.啳b!鐞`gS彅皹2 kT齈鯻)Q榼蛳(S┫ 慍揘t槝辩憾4X蟗:Z;;h癊\c86-↖~硷俳埪7巐茺姛9H砭钰凵殎o$}朦橉&F箜?藜y篟Q:y5畢r7@5/3*錈1鮐ru蛟睉箚双&贚巩)戂谺kq(緪E\*6偮qKwr*颁@奒悔匔犄:p竫B绛芄:偐寰<斍嶧d埠:珟WbX蹺;T嘋/虂hB狻/+X扼hXf"闡LUDa氝#泡贬{n媷挌刧h椿#u锸=鯒塽4Mo0埳窢2cI(鳕颖n溛RS5#9h窪4摱2 肌 |蒩衕蔆輖籺 m巏sn25v`,boxB呛舐塍脦冥餒鮙,`a5K趝#6F`胔瓏サ赡A刜;嶴G[3{阈!! GIぷ=*0s愀慃耚竒I2Uhz7鮘自+蔡覊C糆S豕韰犬鄎&荼-{\ uj鴬尖笖昂牺4jgJ& cR槫e峡 +'棠 罐 N's +W;UD漣`鯸讛笎F砒d烟矣≦瞠銍貗=*洇瑨 +莎=.鷞]裧鰪%)铞h鋚&q\v>6豨浤旋岛G 瀩w跚2-夰膪绶飷CJV"頭差咃^q鷺猃蠒+j*K哯BK计罏对卾-0淬x诒鉨戶7.0D09经 硓撖>>黵陜爈E藉ナα缁V 鬖8蹝帳粛Y家T*祠I˙E[i驐A5錇卝橡,T映L>v腄坾>缄M慉m炏k#鹗\菔$穜罌ep 甤誹d纨~歅魔亿崆2 !!挝&GWV<娬噥L~>軙 慭4z玭景槉 鉥_p鲳B埿"射 雬-摱蹽;|嬀ls?谉<Wk黁u>僰~vendstream +endobj +752 0 obj << +/Type /Page +/Contents 753 0 R +/Resources 751 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 770 0 R +/Annots [ 756 0 R 757 0 R 758 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R ] +>> endobj +756 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [428.3065 701.7853 476.2361 712.6892] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +757 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [196.5367 677.8749 263.2659 688.7789] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdb971fb1525d0c5002f52125b05f3218) >> +>> endobj +758 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [271.5773 648.2954 310.6506 659.1993] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +761 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [351.7077 575.6896 409.0322 586.5935] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +762 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.0182 551.7792 411.3428 562.6832] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +763 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9277 539.8241 153.001 550.728] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +764 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.3947 510.2445 194.1901 521.1485] +/Subtype /Link +/A << /S /GoTo /D (a00148_g87f0b54ade0d159fba495089128a4932) >> +>> endobj +765 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [237.5384 456.7547 294.863 467.6586] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +766 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.8254 444.7995 180.6394 455.7034] +/Subtype /Link +/A << /S /GoTo /D (a00147_g88d2ccf7cd821f89d9a8df7e3948b56c) >> +>> endobj +754 0 obj << +/D [752 0 R /XYZ 90 757.9346 null] +>> endobj +755 0 obj << +/D [752 0 R /XYZ 90 739.9346 null] +>> endobj +759 0 obj << +/D [752 0 R /XYZ 150.7616 639.4933 null] +>> endobj +760 0 obj << +/D [752 0 R /XYZ 90 621.4011 null] +>> endobj +767 0 obj << +/D [752 0 R /XYZ 90 253.0714 null] +>> endobj +34 0 obj << +/D [752 0 R /XYZ 90 246.2021 null] +>> endobj +768 0 obj << +/D [752 0 R /XYZ 200.2554 182.9016 null] +>> endobj +769 0 obj << +/D [752 0 R /XYZ 90 162.752 null] +>> endobj +751 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +777 0 obj << +/Length 2990 +/Filter /FlateDecode +>> +stream +x讠]s6蜉緽棗J3K$Hn汌扠臆7yh:Z,N$%8緆b$R眊n<嬢舃堪$!鼔E.$ r鎥.n呧5尟].9y惈H-畍唭A塰q谍m櫗2姢Z^眭j%狎趄5疄葵薅郛貄^齸蹶馀U?K揌%p?.~=\lA猈a ,Y蹵' D濭嬨EI9\伎鴊蠂 淋!鏥%経E蠱iQf-2査騲{蠫]uEW陵}粆賀=贷z%;_鮓*Y玼掑肨g檾U贂拧鼜喈祧V&逎獚 芒譈y捫b6裴`Haf沈k伀煇袂0 醎衟Q11唵1&6愃5谛酊鵏螲)繷墺滾'冨俟p2Y䦟胾c'$&壂嚙父3樊胡喲桐aァ焳AMY\荮藈餅_緙彤腐O-弹i珣U苷汜+<:K侾d锽e"Y箕8馣嫾v鄙75 鹒弨膻R +A,邟8D帜瓑8窂 秲X艍aq*o?识R曜凤!"#9`堊s踔葌捗O彆┸!6JV榛m僰"釤8割c荜 + 熢? +WO晐詒y)桢賽J" 浦[Gaq埖造,%S阵(0沊$id光紟C 泓藂L3鈹镌q屾=yd"<炿鱔H!e$ O蠭c怛錳R袊D,贽諱IG哹0G遍N艁蹟r謉(9G賳蛿e爓.5鄅<岛%<(6t蹗2P盶$ +)&佃kF>Wk蠮汳is綝*勢3U濰綰-諧(d!l#Qp篑*>Z!&|.去荇馑KDi[=捘2D'cI寖儑l5x霰u铞玠yO濽v洵癆儜忿璂,絮斾 螚/w$T^﹛帠谧zSC{魨>穟浓{KI罚V蒧t厂豅{P[酆2 7F磰緪睙s%Y\闩x翚:K儭~i枂Z Y.秮[2粇贘w祅>3轠jk襨&itU 5SХ⊕<砯碜)(4-捛鮥嚖憊 に穌 v抄 淭EC魈殝諙塰S#緀K婃筥騶v丢f@8晬4魐P裢X侧鷐l@踛摥∨䜩u鞣&螧玸*賎-_p培<譃6杛&缙A"D&]芲sY诅kS 辕曓橄',H3<&I棻$艑爲 d峲螎 7婌褗傍?醟褧G江O3n,侺踷璞恈 笒絎頯m夊 i:剆AD$zzX 樲弼婭掌(.诪/甭棈G楢罳L餌~薳弔(oE瞈隖A饱Kb帉7lほ唫ガO坍4#8{Q"s幉屃=b罍┼<{x勉柖О移:鬨 BnC阚挢惘]偐La9" 酙醳`忰熊i缐.陷v 騫>Tr蝹]iK{:c2(P`荙d瑗N$鲵X妴極妥滒杊pg涐!宨絗敀縏c.W砳` nj韏灧琡'19鈗3/ML艧狂 晛蘨/m胸ⅡB鎦?f膬/_扏刷落6劓-3M豼y密N7聠筞 H ac潄(稭i劥f墏;}癦A[?蔪鏐橚u7w{韯奿 殼>骖骡聛8s憝'卻.⊿4&忎紾赼adi肏懹玛[輄紷鱔|片g6b*j詩齘+, 宖\2鯋Pr洑:N((檣1绠蓂:鏏桔琚岛1螆繼{鄷埨窮鳵蚦rm佥;駂HMa厫A竆勚鋐 `\5,鏝U#杪嶰]冥:炡n螇>WVuRB鮊*%3摺婺+8(~6&器@=邪1vpmxG(!觫蒓- 鋽箭琯儌uD麖6謜z:1℅1訋3)K;W2嬟N]XsY迳糮拵)釤轓-嵆#){ 營H垡Hg橫2缼I69@o鵓瀛 7vv8蜍衼N,絠,7c=:妜葨G,9ü/VQ日6Ahj<繺D璷眜婻o 6椞頔xh溕鍙'灑靊蹞牔-,%5 堶03 i城躌駯埒壨C塤$槔"鶌R'镘蚕.倖阋鰈 P洝佳錺`僖8y巃K矤跮#mF榰g#畿悪欅1:|1%〈Gl殓%櫛*`抹B蝰禶s102鮉佖>觅b噣s0o饵疴躞_呒X聆省澩 琅\){憵N#0葨遅@]@鼲BG懧O77崾80 #zc樞򸑫絾僆䜣♂Xp4陴枊诲 +樹(2A +閯晥湴f秒拵筕慽 +[莥JeIF鴒鍌8Pr壳溒諏-{OH普Z:e飻霮3Zg<媵#芫旱F_R(輕澃袿~0驝S/$^Mj萙dS攲劜w X龈o頧覷柧 缕苣3^传噾趮=秘z~丛砄養$#颾>流胅丸;Y巅押:嘳3?E[%z阓3l旷<芟jD 鈚鲰5\鋪P夲縹qc~(墣扄;!*摍诡崁e耽牞胯 + 飙=t奖峎窼澑#"䥺", +叀庥<:J輝?:#贛瑙龒瀄獒弬f呆?檀+endstream +endobj +776 0 obj << +/Type /Page +/Contents 777 0 R +/Resources 775 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 770 0 R +/Annots [ 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 786 0 R ] +>> endobj +779 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [281.2378 575.7435 329.1674 586.6474] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +780 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [302.6467 563.7883 361.9339 574.6922] +/Subtype /Link +/A << /S /GoTo /D (a00147_g26a14b8dae3f861830af9e7cf1e03725) >> +>> endobj +781 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [380.0705 563.7883 432.2742 574.6922] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +782 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [303.0487 515.9676 369.7779 526.8716] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdb971fb1525d0c5002f52125b05f3218) >> +>> endobj +783 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [381.0655 515.9676 442.8332 526.8716] +/Subtype /Link +/A << /S /GoTo /D (a00147_g7b2ac4b18bd2ac3912fe67b3b17158c3) >> +>> endobj +786 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1141 445.5872 173.1874 456.4911] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +778 0 obj << +/D [776 0 R /XYZ 90 757.9346 null] +>> endobj +784 0 obj << +/D [776 0 R /XYZ 444.3276 519.1207 null] +>> endobj +785 0 obj << +/D [776 0 R /XYZ 90 502.5047 null] +>> endobj +775 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +789 0 obj << +/Length 1132 +/Filter /FlateDecode +>> +stream +x诃W{o6邿B雬B.fQ+&^,m=腃5E 藅,DW:Y扬荆H俨v2庿;摭頔1]F僚E穏循袀r麇x0嗮:鹓↘AHg彈*x礊A8[fC耎N蔟隑'пl&.qM!樮(D邐b)|啸躙C?? *弓j钨c腣拑zk蟠對j湑膃T刞嫐5欳2F4褅鍵N脵T蘍﹁鞩m圴G鏇躤.譛PF渖梆,s慺q3)銐仍j:Sk"~溅檲覤h俤96└5M牡貑(眅Y:S$O梡S厓Z槇(晙,(綒鍥謶屎鶌矙U挪K皺狪C~畵n捠祇騙澁編樕* 匂T吐ば*gne.z(s)T:頰欅蛙A-}u詫d砒P5莨滯稪v舡r蒸謼睭F酢給u9&p;朙衕熯韛n鎨=|_'踾#D,﹩涆蟴>U=XMTx嚬躞H+!晐'沓N潞嬀2並=!Tq煵>舑M讨絎姾杇#M4徜^}O踊ê[鹑穄 >?屈endstream +endobj +788 0 obj << +/Type /Page +/Contents 789 0 R +/Resources 787 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 770 0 R +>> endobj +790 0 obj << +/D [788 0 R /XYZ 90 757.9346 null] +>> endobj +791 0 obj << +/D [788 0 R /XYZ 90 329.3658 null] +>> endobj +792 0 obj << +/D [788 0 R /XYZ 90 323.8457 null] +>> endobj +793 0 obj << +/D [788 0 R /XYZ 90 84.5604 null] +>> endobj +787 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +796 0 obj << +/Length 2120 +/Filter /FlateDecode +>> +stream +x诃賿否漘柳&S儡騍熵睺旸梢I5$%JC =嚚MO7構弛];礥;@Q杌 3髷豌0鯮?堟挥屚黬祈肿}勶6?妕瀦i$Ⅸ鎌(D 笸偝遐绫-6G筡嫄-氉oi谤 7l鱭鵤骹雒=喜怯~澖鎨`胪寉~殑 L樓覶蘋矦鴑捪nfl樾傎0%U三i8饕0N.b芕,/鰝鍤3?*WV晩?媾挸艆f.憭繌*va泪灟^!卶D:丶}=鰹鸄魨,?沈%柚鉏銩揠趾裌+sf鄘蘋⒘橝矣B)毽韵Tu(-/螢侥芯睰#!0Zu +苅.u燈擲/枿!y{h螯賳⿱驰蟥6~嚔蜤耋踝潿x蠖/3鮄 ^B娤竖!K0馜纁凃薗b6 憷 6硦[閜戯m\c5*a偣.劻DYb +c +馔話r啇妥锈,n斵I囪埜o坏轩 +RvF7"0[瀜d +TB湰p垓0,靘UG繥軺!晝.*'凢 轀$U烼豘&kY炡昔rT鏅 +VZA\嬚7FE岎]譠Z韫,尾蘭鶅.鶖a+絩涆W.瞯旨TBFk&钐)9/%秔柁sk党蛖v' 5 茸 2撱荋捽缇炅2 /L予i蟚}焐绮濯瓴僬儣%憦]梬菍5RE顉餰=il?黶皲 r徛&`毢秔_暨#?A飥; +p瑺,杄諺绻s7崫pa快ヰ_ +F3蔸;鷝Q巭釣Et_嬒鱳颡艧-&呆?苟懀endstream +endobj +795 0 obj << +/Type /Page +/Contents 796 0 R +/Resources 794 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 770 0 R +/Annots [ 799 0 R 800 0 R 801 0 R ] +>> endobj +799 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 292.733 131.9523 303.6369] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +800 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [425.6978 292.733 476.9349 303.6369] +/Subtype /Link +/A << /S /GoTo /D (a00147_g81ac47cee1c18f6aa479044069db7ca3) >> +>> endobj +801 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [155.1347 268.8226 206.3718 279.7266] +/Subtype /Link +/A << /S /GoTo /D (a00147_g81ac47cee1c18f6aa479044069db7ca3) >> +>> endobj +797 0 obj << +/D [795 0 R /XYZ 90 757.9346 null] +>> endobj +798 0 obj << +/D [795 0 R /XYZ 90 739.9346 null] +>> endobj +802 0 obj << +/D [795 0 R /XYZ 207.8662 271.9757 null] +>> endobj +803 0 obj << +/D [795 0 R /XYZ 90 254.2666 null] +>> endobj +794 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +808 0 obj << +/Length 1875 +/Filter /FlateDecode +>> +stream +x讠賻6疠_筣$e]I矦姢i ! 睤勐蕭#沵 嚁%Y{$D珂\&3+鬋7鯲仌腾傠c螡!/棆焴籷 雛8荃謊鲛鎛竧勏鞐煋愅蜚k=梱 +*$幮潘薧扸镊巖痊 z砢G緐骝8謣炠媼艧=:Ps鲽軟3(2n `_H鰘Q鷥x淦`9>Uy秚苐IF鶺舍饋 O嗨轸?E薟.郘wT湫磚椂M洿扝橈 +纣 lY厞颏F俒x骉8渷諵hA>拰g鬉崐w*9糸 r22m%Z蛺笼謐6 Y8缗—)1懃I#轸匪?~緻鶫蓔r$襲-搆s#3量F餺1馑 ^e#KG嵪H鍬磚Nf-郛.#t6擊倫HO滛3}愬緄締澧j!>+ 曉#薌厐骕石客{j7h&爟姵B管I%軉ZT鋓益UI*昷 f4y6传6詝leM浂襙0牑諟wUWd碸k

M蔿|+嚔`焝=諘榵鎛禧詎寧鑬w閤\铯禯s2诛%Et%n畎u嗦硥 E&咇W-积8帞啫id6f烮痤>/祼沒烆嫣(R棉Doe.:Tx5Y匍+痠I {桭ZЖ繘此隧t4L:CK鯛lū応鵮0 豇螑a驖f*m<篰0裡2銸9錖项^#嘴撾%&o<照谒&#滑4j58+ 鲻鈧脎V弎庰H9篬殧3w铭xI叶K娾Vg +茉-錜%鱩 +mb玭挥s_笧CM愮3#t肬j刢軨桘D+61熢K賉 +q譀蛶i龌簗蘣*tT'O汴縔潖 E佞俊潡i登%5\噢2垲罶 堞顴:7錩\-`-008赱鵹<}3`0摐񝜄oJf哭鬪╁鴙)vX;h珵Sv6瘾.T簴迿橨3撍^锑F[烇笰r骨w3箃聎稘O誝y倦姳:搕畋P鈹4厃l侗餱 蠒啵y沽@嚲PC~茗9喡笐2麧B┒u' 黉垓庌宮<Μ譣)鞗:oU 鉬擶?詩wC;篤XJ,o醴菓洰牭 +8犂刼.澍髠:0椥鹾k-@霙效.R預3癡B|蝥4K℅疟僵妭RMC= R)蟃.嶯#14P錸抵eV*羜訄抎畜稇臚鬩k櫰q(fS\N<紲A缍J+溧A螱cーiHU扸X<TT腆Hgh刃 +躢-硫骐螐0(Z&台~5%Ls5娻=弻○vt扩eVǜ勍+M 聏0  -汭衳綃g3e +顶惭l麙瑯XE勍抈嗺牑;s鳐遪e9uN}3&騟ndstream +endobj +807 0 obj << +/Type /Page +/Contents 808 0 R +/Resources 806 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 770 0 R +/Annots [ 810 0 R 811 0 R ] +>> endobj +810 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [283.7538 392.0799 328.3562 402.9838] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +811 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [389.5337 350.5452 436.3476 361.4491] +/Subtype /Link +/A << /S /GoTo /D (a00147_g61db1dcb7c760e4dd5d60bf4e5576dca) >> +>> endobj +809 0 obj << +/D [807 0 R /XYZ 90 757.9346 null] +>> endobj +812 0 obj << +/D [807 0 R /XYZ 437.842 353.6982 null] +>> endobj +813 0 obj << +/D [807 0 R /XYZ 90 337.096 null] +>> endobj +806 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R /F11 705 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +816 0 obj << +/Length 1829 +/Filter /FlateDecode +>> +stream +x谂]s6瘕~匥_|l鬭鶅 绦朆 +n`绗.巬祡$i颙+呱>_. 澨崶疹j颠R–鄰: q" Bgy>#熗╕鯼莩~^'駬悈吴Ts/e"R68峹.r9鳂 铤 考y袕.]~Z紭=]l3R帝_焾搧X/f溺I, & s蝕泯經醿 歚闠傭ヽ@"B醣_u"G嶐h砰G"群X}^諹%棟~T^H堺:摚柘翤h#嶉M狛玏遁魐珝鴚荽Y讠坟vDq讔yy^t=荏7MB7d6!雬嗢`詓w菃餡uY頢鳴<緯Uv漼艻wV罊  +卝 8tO渍+闖蛣娙q澧鑢刦2-嬯l荽歋醊!巐毢A8h(+椇<韕寮8送0O鐚竉塰y篫蒍f竳re樺rl.'崎"H(1q勦>塂屃甐3凃 +莩1鬽m韕憝脝耊 镮葚~1挃残擡∣櫸,螰蹠怋RH禔S" 苹N峸莴 齱*陫s櫿雗  +弱z璞攘髢8姂6失吕須掉 "ō铽A n⿷ ~自H;C整2 Y"2-K芆J2R瞟 霠O鴬侖JQ趤咪i嬽餌 +G瞬nev']_D和; +f 陈pB y=bSt鳸a#6挏3a鲁挈>费Y赖丿届敂,04%倷庍荶=4蔻Z暄s 㘎帉NJBr:)6SKW"p搎姞壪IZ?rD忥Ib囷1)|@1i珻偰∠H ).1贷衲 酦6漇wS% +撠7^愦覂`池甒+瀹驭敇顴崊逝T!m%e NdOXID喝e枴鄛槕狴碊\朑 2堑脏UW@丙 赅zEY,S惘\椝维濌屃8喽P*Q峋+Y!如N虃虘.0R}琉h6e昼覽C剽R8憣泴郐択3靪V ̄*l3J佸u4蜁e蛥夅匿濇 +-蜽璴5:I)~s'&#呕黶p霷説褥來虅菚u帺橠#謮9/鏀竔/槩7羆踓罝踎笠哖薓Sl5聑鰔&l窬簵 +5砳蟭C仫玊;鍂郌趂?榏 8+裙l埕L"艮s┨鬭毽虀Z満媦 \-#KQn 仚U熓z厠舒鷎kZa8誃ニ绩ひD繞V拔7③懓 ┞腍'辽J滴&>職E赅GhD$柈秚災':嚠 n彳.';e鰈靿/俨S:1摟匤玛n馾耵篼'菋鉝D&.@4蠠緗鵽钛 鬴$颻縸!as舿怼鯟(qP4吥X?洀瞌脣:4鲅8<=得笩P榔>OW%-紦椵猭梯嵟~01架*W倊昲躌VG鹢sG揋鱚㈧_"脩uQ@牒9u翞鎍凤wf岔T鞅8x朅32獠k橡#枨"狚”a辞o懲#(!qW72*拀躮骊,}h=唡e鶡 荶LKI辌阊: M勧旣檘傲q妊鯊7矏跗r>龉>凭>翊};_V也MY蟜踪Zk, ig牁绢犟-<$蜹龐踍蟖w坙D6絘h彑供O僪蝙儉h(嘛z/1怭戊圎J<廢夌 阵i/:3YI諁櫐た^ékm&戛_蒀23╧」S6M7出?╫究謼Wg+I=襉h?{沞ndstream +endobj +815 0 obj << +/Type /Page +/Contents 816 0 R +/Resources 814 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 770 0 R +/Annots [ 818 0 R 819 0 R 820 0 R 821 0 R ] +>> endobj +818 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [490.9727 549.9227 513.9963 560.8266] +/Subtype /Link +/A << /S /GoTo /D (a00147_gfbd5fc486dfdf6bf6fc9db52b1f418c4) >> +>> endobj +819 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 537.9675 127.509 548.8715] +/Subtype /Link +/A << /S /GoTo /D (a00147_gfbd5fc486dfdf6bf6fc9db52b1f418c4) >> +>> endobj +820 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0815 537.9675 200.8491 548.8715] +/Subtype /Link +/A << /S /GoTo /D (a00147_g7b2ac4b18bd2ac3912fe67b3b17158c3) >> +>> endobj +821 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [418.3117 508.388 485.0409 519.2919] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdb971fb1525d0c5002f52125b05f3218) >> +>> endobj +817 0 obj << +/D [815 0 R /XYZ 90 757.9346 null] +>> endobj +814 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +824 0 obj << +/Length 2698 +/Filter /FlateDecode +>> +stream +x讠k撣恶 +E煥謆 Oww8鐀6諰>徛漍SP>_3菖.镬IG,鰠啪塙?笔俇%~βxU瘋__ ^蘼鷙岎份誣緱*蟪X偏莪 ?払畍鸰<'洯镎琰x冱簕 +咈晞勒")刕节鯍X慔妩珀梍冋zs*KU=L_d橽疊┸ずzw醑-X偉鼶B-m(^$ 勢P鍳q(V (昋a硙验蟏ル6o-}襄镃言貊,n,桖aFc耂翢繓凹}D羂罘L愧犪o栘*-Б锼80渝潪M%寡代n鱮麝君聩繻7fyn"E牌?埏酒L稻o趈蛖÷z輅$K7?衣vA稆.忣S4澋慀鹔E>翰DbD阦o`畈 ?5鍨FF}掊 Bcvt]{.:Bヱ:LA渌 夾8R榋?Q鸌*舑7蔽2髤埐歉彊鉤咢蒓'藛--C濮︰s把r约燗qh鹬gl霝镟 +嗄!屺Q匰V`qQ?H凖Veg拊鄕!X臄34kn+紲嫺ι尲-鬀J6擯=0慻7热Е;菀X26蛶跇麼耻z8N鳛7豭蓰拆硤w 鸹葯$踽K8D翆E鶝m"6嘳耫糑yML鹡飞旝r#勷0 l 紬谆糬儠B檧丶.; JN#靱&%池+ ~飤#绖egY崧m右p幸邵赌峾马kFo#崿y街濆诖馜凈b?6u痽眃嶎eq槺暾逘`怚;k蠻宅ir售嶧鯰莤|帹U勈3蹂Q驿5#Ⅹ埲闛XNChu黕h喊5*蠚Z栟v馇恌啺"潩4鰨64獩垐婑u6-#兀/&4]8墖% ;V愯b笂N噒?e祅凹痿迺*剩7缥仐LA芰吨v{獑儵:j&CO菝寁f觩d,p鰳Hj気桿EG朩帿蛒鶆gO~瓣Yj嚛!呠T9椠3蝩5+;斊 3,骤胃张d效&吃$=鎚牧淤圥鴢2>飜瀉縍u蹱[6阜^l.8帽垨耥掎[7K^幼\`襚|[X 旽?T╀"(舫T袣w +妘w$~(.軁”耂m)+属癋酾7 鷵f妭瘤H軑nf苃﹢:斤:(恁.r7竝"t扎`ト)#篵栎 +鑉蜉/Q┚)畯/*ⅶ鈥& E]螾])1澍g&塧:詗8mft罳 銊諉喲F<(鈗*Q#V:u陨坺\△wS辚<筈瘞揑qVK佈鞄旿 煉贉抖eY鋑鲣逼贘疟 r渳^堚懓|榘Z 展6且顨刧凸谟|忶蕈 t-橉N琏炟 呶.4w鱣傷3A!诇p 侌7#5d#蕻[渌KM撫~Y横$鬺{誐躑w繟瀲f先 瓺橓㎎2鷚W;F鵬?婥邘耖繓qN监:倁U履W∈f禾楸兢B2蒚囻嗣`!习-#n駠w5耗偪f讕闪 +緫暸故["镁? bV2橙t釫03:ヒ灐Ld$壵JOS檦狃z樴襱梶筷鳷鐶i,g谔徬a}A *M錞俱斊9A覨毾v#R镱/X唒l?旜駮r劍茚R徕HB+斶R P跦R4缻3d楘:.<}}l鴨I弻迅琒G錃y褘O_+鲺洚鈁_觱够褏G.嗠_p訰斻襫坍袥栿[\菊艛w8ktP3ds&GB{^,哉肦]s&7祣Z篸F琉j狐蕋顸9縖噌"庘氙p} +$B神1璊鳜Z獾畊;8掚!o饦<捒羢藔f2b:毮煂S/pG 秦> endobj +826 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [203.7378 146.6848 248.3401 157.5888] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +827 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [190.9801 134.7297 235.5824 145.6336] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +825 0 obj << +/D [823 0 R /XYZ 90 757.9346 null] +>> endobj +828 0 obj << +/D [823 0 R /XYZ 279.4381 96.348 null] +>> endobj +822 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +832 0 obj << +/Length 2726 +/Filter /FlateDecode +>> +stream +x讠藪6>_褧摵瘦邀憸謳W椭=)g氹(婻企 燸#;甅魽倭螄_+黓杁"娪]Y_@拷 +x髧9了猾熯勁8i橆铑-48&a铑?  婻镱,鲊0窠狷w痭vc計蝮粀W讫X$J茼苏 +膠w"Ov(耛}噾.W3颉 籤K$埗 +#`Bjf1喵桔n錇顄/なu較d-沕鬔7n烟H`0?y怺fd8糈庿O5勵i> 6% 猤"1稪跣葕 <'鑣O玻槔贿'$浅t尋(螪弟磿萁頹!"I顟艦ie>鶁X|?4eO{$殜! T铀N攄89绳Q蔲E7 訐u擤部<TI琿藽镢Y]鋳3菳:o崖巇つ綂* 鄡!輐9義/@ ?馮Ox{峟劯 +媲$h6177f莈5h鸣]侫x/&J蠈 n璙nm慸m絷酟犜蠽籍’*1辨齄'菔奊<巄e4#呕闇 f企曥厷 傓*钲熐=g +纈,z鋚囦,i=J巕%.yN.} +脤j讶0碀M鈉R皓}佪笍虧b0贖m}T齓1厾礳4姭j 棴鍕U敌?醁Ye施g簬=/Y鮗斐嵧l0::漇j蘥*毹魚D埞媟K2{蝁+绗+w(赴ZR瑔纕嘲q捀fh鶊P5鴴h榥懞嵝局TllhF望啴Z銣s猙珊姽 l:抁wQ暵屚冸knP 汎%=萰0'uQc5}O锷4LB曹刜 J 町蛣!蹽葞輌<葼>卅y鯂8牔t鸝m磐 牪a直[<?-X_垙x鎚P_.梇噮UTm + 0踽D=5踿穂B-忘氽蘁橉怼H桷4㈧瀤7囱=1n\憢1=孥<槼(9恋蚄歵{踇|< *悒T 玬悰|甴杔虒`鉖l燾持甧0全峨n∝7`#i堫婂澔郓籛4PL#l5鬾嘵靲q觰1t h狮8鏻珒樄 +l5w笭蚛o:IN85枴(奬145)Z=蘙滥DZ=菭弿i嗫樹Y琔監Z.燑目~{s 違昽\ P峮鈇獐>击竍5蛍杛8墩麭酏g'痏蔹繡+蒴擯Y垀 焔9R穟><5京#樼"C蹹d6L犬s4硋7L 舛!u\2锼鱑f払1痑輱黻 锖g礟涽ヱrwd漸&3?耪025乼MY9绥訆蚈-峪f沐尉(g捂q蓩3~魑鴱倶矺>@鉙P嬻 +儅[顢;纒壌砱襵榒&2洀P飁{Q义{~戾祤qk.t黺 ~ ,虦8_[u%譖;叶\ wU2=t%"潋i +t墽 +Ih)縶萜iE櫧岻C-鏒l阎:諒k╙┢. _.脆恋媎K踉JL俌D.3r轍咁礿楝Ⅹ颼z绨畋凗g论)O魻l)y蒦瞳\殒第╋渏李攷Af.]饛欓u妻9#饕6样觥 坑5逨4?Z躡h43蚣果澬P睰峉承Ay粰袮褔j褤0S仡R4G穚+癕B)哔@撤=XnG凡6鯳D骔驹]T`$仞3踳楍]mLn入僣gx鶳?4I芽忲_Q8w1=Y攃i夿X4:QP矐W-q僿h爜 浏K吘熞绒巘氟68岨淊 浀戰 +f1endstream +endobj +831 0 obj << +/Type /Page +/Contents 832 0 R +/Resources 830 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 829 0 R +>> endobj +833 0 obj << +/D [831 0 R /XYZ 90 757.9346 null] +>> endobj +38 0 obj << +/D [831 0 R /XYZ 90 739.9346 null] +>> endobj +834 0 obj << +/D [831 0 R /XYZ 437.7219 648.3003 null] +>> endobj +835 0 obj << +/D [831 0 R /XYZ 90 630.343 null] +>> endobj +836 0 obj << +/D [831 0 R /XYZ 498.8037 552.4222 null] +>> endobj +837 0 obj << +/D [831 0 R /XYZ 90 534.4648 null] +>> endobj +838 0 obj << +/D [831 0 R /XYZ 231.09 381.1364 null] +>> endobj +839 0 obj << +/D [831 0 R /XYZ 90 363.179 null] +>> endobj +840 0 obj << +/D [831 0 R /XYZ 464.8599 263.3404 null] +>> endobj +841 0 obj << +/D [831 0 R /XYZ 90 245.383 null] +>> endobj +842 0 obj << +/D [831 0 R /XYZ 164.1609 96.348 null] +>> endobj +830 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +845 0 obj << +/Length 2718 +/Filter /FlateDecode +>> +stream +x讠YK撱鞠瘶[í態俹邷挖5沴說 IH檹+> j桴Vウjt岶{<<纩cЩ<寬氢蜞?瀫C -鸱顎宽兪骫灗鋛$ I皨U麇/^八6[噉d^;碋[3妁r4閬榚y矜粐符iY*釛_磠鬣锫<_犮飩飒抖|錮'鰊 朽`#鷄|+L$幻D>r燦栔u鎁捅.%a悻>韾坁t柛侗论q郔 眍e'睒/c1T8蕼4&枪旆ZTg蘗4霂V蟗O笄5脥 溅56`+S;筵hz +4 X檶H侘碭窞鲃儢测?r→潲婞@濣眷堯肾噦韐跧/Bh3阡懟淈n7蟹粦I澣/桅# 9 \4r le3T:耄C抹3!餢0V櫜 ?毾;辜5鶵躠咔岷r闍 7䌷 w帎~ c Jh7蓄蛲恼rr魺1}UM佗絖<兘o蒐  +玏娈辮C鬆~Zh/礌D,/8毽/<朾橛$k煸{?諧嬑 ;労,闡篫爝嬄8夻技爍t5LVc 玟籃菟$~htq枙f%w搉.QQ8*揂ga℃詖犮吇`頭[B蛺♀犈v{5輙X8R)4熫 Mk檨|鷷<瞖胡苶谯颳觢W皖,* P2Y坥>乾恎\ +!籰 W沕邮屔榐乊窇J硷刖]N夕楣潪y啼5;"~!碂- + d杯沂v3 1填k 検宫禜5d瞢哃V 筃渂贙U<瞵q驳5-2鏯D襵E&  h_芷勉d>劣v 槮瑸區璷爄{x~ +0JSr蟷{"Sb縨葍2舊 罸8i鐒s畖`岵>亼T+潗鷆sW暍8色呇iYsC }峿疲I9<4 隖萾饏6B徙嚒fYOgns|`媼 柦刔銻痱d妹&A曷#SE濾.s_鯧h`蕻(慳'懠VTJHV烪略鹔.-n 珞訷踴&帮 \O芔LK脄闂帮P照p[f膺6 :7鎃{欬貛M瑰鹀u捣II躱{ 歰+.U栌莰jF.鄩bX !Zh9v嘓L趧県6衏m狑蓮龔0鑯蛝墧6p 鏡%薺埑幊rs鼌bTX巾J +QT所 +0t鍇碝耪地 .ル衍%冤 +晏痍殠簠艚 団O6e)礽罈p狊%\n烎祋钦)岃ダ+颻黡(竄諙3q呒S笓渐捓rx芵u[浐涛P枻試_磣[ec*覉46d6U&佥!f迎8g-捴q苑5X&'熧w唚硜ⅸ>SN紵螰閒謯)q*:噗櫬8H%砏M嘞燢~)g発宦葟槑z'-A;'Q,竖䦷){藪yk燚褯%圅d@f莟,D欮衡Q 魒篽}踃p+oJ輹Ac妥0澲禒肨唹宭扳瀢伻鼑頵曢?妆艬kX@7鹺X ~橽.Q窷插硧唦鍯# 體K)掃O賮\z晍4尸盛TP蚶哾Yb2秂K-鄀歄 B9 r= 啶LgV孅;4Nc+泴:訧棌冂;u鈺F@虜;~皒><1/w(2!t i㱮嶽b縑珖.总 蝢彦z濛絽C甮^貃咃闭蘒@⒚j潥3闱O嬞 昿縍粎=柒┙辐嗦p)匧Z鳾噰-ID*o鯐H"0碄 +嶅濑A篥z7騷U>(|>q秔舋A过;,O"決BI(堙*碲澈?頜b5萂嫖厗ARN }3凉s.響闪蹬)!y圍$蝖D约49YyZ8_q濯<.蘷kg粕(N4婼~p霗9豎猟8断\@紇m9f9?艛'挙8 &w"v螩颺@O#4棍C譤譂萮C樎xOsz8#^[閥9_鶸谭x朽鮢3蒃㎝#pCU\辸R飯<轿拈瑱:d十:U 9k耷[Wy俫P霹V疅萚/o嶐}樾Q匵煞 uQ寬{嶩вq讘C赳沓緬蛌睂8qz簝Ya#R[嵑嫔阗と蔕灹.堃者a}($N_C榍 鞮vyf銮NQ-iPk[T賩襸踴噁(擤;錽O鶁"w04そ1噔铦 <盹窊i钔?债冂V黣ndstream +endobj +844 0 obj << +/Type /Page +/Contents 845 0 R +/Resources 843 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 829 0 R +>> endobj +846 0 obj << +/D [844 0 R /XYZ 90 757.9346 null] +>> endobj +847 0 obj << +/D [844 0 R /XYZ 90 739.9346 null] +>> endobj +848 0 obj << +/D [844 0 R /XYZ 513 669.6866 null] +>> endobj +849 0 obj << +/D [844 0 R /XYZ 90 652.6059 null] +>> endobj +850 0 obj << +/D [844 0 R /XYZ 145.0727 576.8531 null] +>> endobj +851 0 obj << +/D [844 0 R /XYZ 90 559.7724 null] +>> endobj +852 0 obj << +/D [844 0 R /XYZ 199.2294 400.9501 null] +>> endobj +853 0 obj << +/D [844 0 R /XYZ 90 383.8694 null] +>> endobj +854 0 obj << +/D [844 0 R /XYZ 437.8115 266.5818 null] +>> endobj +855 0 obj << +/D [844 0 R /XYZ 90 249.5011 null] +>> endobj +843 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +858 0 obj << +/Length 2680 +/Filter /FlateDecode +>> +stream +x讠YK撱鞠-T誋&>D遞奖k*昅恧rp|燞虉5$!蟊c鄈副+)4 犙齯7靯辉%QrLu矧呓籃0~3|x蝴頖曨襝玿黥L忄〡頌姛 t愯貃簶鼳E7<~嫫熆s懋向/O燁4'蹓t鄇哭嬁+`[燁NO杨 :1HS但顱Ш鹯鲝Q袆璖E佫:朸KA7酳錣蹡'食C蠉 縼子I亹]疷檊}i泏$^)琫沁懙5菡6]y.9鰕拍Jb氬飇c*蜣x欺4鱩謙u賣 憇盋U牰A 8;,韐^V樸'负z魦痄毒VfD辭磂+󴡩覤锯短 痀鄢蓵  [6/躙*;晛8:舕咔観}!饈啕辈斧7桍僲鷙<[ ぢcE) "餍缮碚襮羄H烜W>娂幓鰙眍9溭錀)籞楰舌xVU斯u=4閘7cf控 oeq踆7爏|E裏{c漥郓m{鉽Q枝章}呣c&/軅搑#觶 =:弾摩i)L薽r冦<&擬仹CS/峫瘄賜Ye鏙鏌<<#0☆氬a2򧋅h證'︻唀卸倗E謌荜/Y鉠2岗 刘 筚D(!衸z 5sm8)9* 長忎@ 乻=vO螐摰'亶8餓N匱>而T,#94i[d&葏f6J嫫觎歹CxR/w抅!V箥澻6LS秹6邵在m 堉夹Bj;!<豌F杽$"蚡廄驯,C勇xA%謿14锺{m{3駇櫑,贤盏磥圳27\U+雚駟 Kq9孙Φ躾[c舣=徖:b覠喸X @襞t|╞`嚏R 巰墐s滥联9N螧y3詆蚩1.^W諧誫嵄兲d馈 刣垻$1ㄗ縜鞍+bI裯73玘l 菿塾卑`▃-怯筱羆F@嵚t錕&S猿猛捖9衍&$紑逇_嚥晧订n瀺3嵤l纇6紤歔36 )e9躕Q桂o4實逅6a W糔l $M,yq?f6ju+奢Y苕yha羢7S屴7瑵,_t絪讙Y檵+恽1)%鈟l<_A蘂剬?v筜ΒN轅臼B/xi<p乯黌F<z{XF",嵋誅;M埋JC萕.%&8勧e鵩"鏬Q,򨏚&撬%瓠出昚0轨樔籏孎蒸愝"T叵F23僪|5頌Mhd[榢00騦瞺牞匟佉馲n6﹗仱RN#鹚闔谜~xp瑇癈緜O 閕べ輾趩爱=i3w#﹏ 埝r2泳暣襾:Q=|~<蛐C莀╉SZ牋&T'佂7]oF虜a闇+褺鱈d紸C羝j0u抨剗鉚[6(漓畽+C楋孹Z俩謂蓝P8l^\z,6ou+A08偅缉狀gLzMKY/6评mU4箠毅媻Vj藹巀 D8-rw雤SB1潇D累C掌|旈グu賞賮d蔶曮6/&韱毶yV迕Ucz暤W +纁 + =c亷歯R<剙9?糗w臛) 0f虻<医昤3}~)XW$△w^蜪璸5驠蚼U 嵒愆唵鍱jMz +&%錥*[80g!Lge#qh #rqz|甓1鱙9SZ[s 集椓5"晆8掇J&~肥"塄旊@硵苝i利0B棾_证≒ +h勑菵yf脉tD剙1匑鯧&乸9` >aΜL膜踡怔搃虚]晤 +劭蛊'贱A:亽揭+焮树c)8U_淈G *幍掟锨 -腐 鋏ndstream +endobj +857 0 obj << +/Type /Page +/Contents 858 0 R +/Resources 856 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 829 0 R +>> endobj +859 0 obj << +/D [857 0 R /XYZ 90 757.9346 null] +>> endobj +860 0 obj << +/D [857 0 R /XYZ 207.8864 706.0616 null] +>> endobj +861 0 obj << +/D [857 0 R /XYZ 90 687.3006 null] +>> endobj +862 0 obj << +/D [857 0 R /XYZ 429.0947 581.6321 null] +>> endobj +863 0 obj << +/D [857 0 R /XYZ 90 562.871 null] +>> endobj +864 0 obj << +/D [857 0 R /XYZ 416.2232 469.1577 null] +>> endobj +865 0 obj << +/D [857 0 R /XYZ 90 450.3967 null] +>> endobj +866 0 obj << +/D [857 0 R /XYZ 318.9393 332.7731 null] +>> endobj +42 0 obj << +/D [857 0 R /XYZ 90 312.8912 null] +>> endobj +856 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +869 0 obj << +/Length 1859 +/Filter /FlateDecode +>> +stream +x讠XY徾6~鳢餋d4珗:W鷲 6@佗IPm 厌枞讫鯘: +燲,8 g>幀m阭(q 尫Y雕禛`抠(Y緛鯖估他统啐t浐i烨埯i垥咿濡?驕;遱L{伫懹磿3雏|v鮽$$ w筵齢T|妭X∩瘺彑絤窘輝n愞F榵甁S[mB?皳r骯笄▏h肸h +謆 産骯歱h何w7A9Ys)瞎躐轭&鬰?^鯙塻踕﹄@缡蓻ZDM藙畒┄肠A亘/ㄝ桬^6祷兠縰頞儤裻}Q閊v4+苌铚蛲挟E 7箪.GST缫T︻蔁帣簛霓鹭靮]&钆婍擲fC)'怯y濼0鰣靸訫9H杢I0>&w5qc? 勺锜o逶 渘萅陶徝輠^闛篻<%@!Bu恇伞嵇9槍N; +|{P疖45圇笘dTe~闛晪擋2騡瑸 v^歀(淡諓?V吅^顳=坁+属 YH焕冟W覭莾闐蠩3$+径2'餜d/4 +2產 賑皴6刲短疏篶輶炁N\礝N 4Y 怯&骉A76匪*z,靺氽 +{T&E^螉o +浮餟"j槥;馕鼉郭:'f'#V*L干A晷6(= 珸砼鄵3徔*烋鹕<饼嫺魒L鮠t〉z:軿鯤梡涁6鄾蜬 閪攦綬#獃8z涰歲m蕏祾矡W椮奫‐[潖篻馭厨  蹑gA尥哓涅@墙枹rP懕旝鋋Lo 箬貯=度"t}L 葒8壦gj鴢U <葓z┟ @s&s{* 3"覥z肸~郬顟=7滛;肆d?~R+腭褔$}Or貯齼$ gb%<└-'vB賾嚽j(D堚%镋溔8俑=綗链8w'*濯0Y虄/YG妦z粎-*痃考舗扶)qcxcj璞请o1&蕳褅蟷o垯抇韝洛娨汰淄魉铠陎皈禃簌輑辝ndstream +endobj +868 0 obj << +/Type /Page +/Contents 869 0 R +/Resources 867 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 829 0 R +>> endobj +870 0 obj << +/D [868 0 R /XYZ 90 757.9346 null] +>> endobj +871 0 obj << +/D [868 0 R /XYZ 299.5322 694.1065 null] +>> endobj +872 0 obj << +/D [868 0 R /XYZ 90 677.3793 null] +>> endobj +867 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +875 0 obj << +/Length 280 +/Filter /FlateDecode +>> +stream +x讠Q=o0蔟+<&C岋焟苸狣Uo垇扏D_'N"勜悋{鐆燂损;蓫6漏滧z$邌優煗躽6yB菨p勀獲 4r_.癷(J麲昮╡r|濭囡鐡V胂t 鲨莮8Z摧举b)y*蔣#8噟莚T凅呸仉X']碌璟:#K耎s-@嘄垂i哊;R@﹕镠8+澛悩r牯沀u礯2试匝 燞A'寝飙湤殺JImR訧晨8>瘕鞢體赩蹂54╭3會}竫jendstream +endobj +874 0 obj << +/Type /Page +/Contents 875 0 R +/Resources 873 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 829 0 R +>> endobj +876 0 obj << +/D [874 0 R /XYZ 90 757.9346 null] +>> endobj +873 0 obj << +/Font << /F29 499 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +879 0 obj << +/Length 1608 +/Filter /FlateDecode +>> +stream +x陧汳徾6嗭+|磥氠鰱洟)壯床v-T挐6%醯9挰F攘=O鎪v裠佂?残x!匘汃`盹疴杉?鏀橶鄡 l眝o齠s麝; 燽眣次畱Pl辟| 煆q綵S仐t跚媲帳捘迉峗伕⒓坚纛2&W锍)崼雡噈黽雲pd〉梹!.hPzc荛桨匜:胺昇蠅噬q^mRT痑鯍&疟菏掖贺W慰掇镛n谲"&k\ 剷r箅骞5^;諹p 鎴HF[6棼<;f荾嘯4鏱塚ka1盔/\氘.!$凊鵖m龐in隬殷^2, 粖&拕檕% i.e?m#ib嶻nD?7緃蚻?eQXe嘽r8吳$;鰟3ff0QN:G!艊潋齕4C袱J い笘哬狶 CE1砤緙~N摠!)=4ms4W苲鹏齕1Y20U% Q熙P%k蘬樳豹cy\d椐K籶憐.c冊]杷礏噩m@>匣U廯RF蠱AZz-e寴+-(k蘬遫檑>L曛Y膄ak`S8樄=@9T疪烑 +(F0(;踇罖5f6瓮J鈋鈉僐拗.其\8G扱孽J閥/#疴 宍%bε 讟U4途猦鹝E.8O&峛辦~i縯[瘖烑 +6F0lv)暗f6蝊W蕯穱z嚈&窳9.g!螘d q齊z+8D罝 )唜犐q崣G溮Mi0&⑽慹u絩z轐(豑&歺癅#A 榵磃2nW蠚蹃蹑妄8喲3^脦)嚝猫)G縺+`@A卫&歳0!悙lh贇=_壊蔑缨S^庂7O嚚邐`阎#T7眩F待 +藂8鲊C榡a +C 5fg %囦槃i虘b戽猅'GN炃q+愶 +尼0G尃 `C怹3幎駣婂$6O7阱9WGe漒9y荱痐+r02瀐$86fg\/蠏<-鎦KN痹+掞縟 |40U嵚5J嫡鍜i舚S +佰葩剰悌O(匣J弨里&jv圧K5@Skf|eEY唝>豤H咋瘓吠j阞剡妄Z熔鑢n睪懺瘨锟芪乚a.GC娪№\kvV沕o穣\8}癘癘/<e﹊x\ 供嘚&珘耇uH诶礷g鑜拊荾灊瀡惜鶴釩磲蚞9乥稔稚彄遯 +沱仿( 0?盆歇5+蟞逖.9蒲裨-炪(盋ヨ筩%9Nf菓+夛楷<8剦f輸 :葑殨嚶⊙c鯸R撳B滙y磢>趘>j摧瘲锟 +.H`軽]S恀2 S=5玁0盠鯩肑搰辡╮/鳵弼!|婘錓2傓9&Y#彵8穟焍q <\~鲎渒B%枬?鼽"攔(endstream +endobj +878 0 obj << +/Type /Page +/Contents 879 0 R +/Resources 877 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 905 0 R +/Annots [ 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 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R ] +>> endobj +881 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 483.9922 513.9963 492.8388] +/Subtype /Link +/A << /S /GoTo /D (section.6.1) >> +>> endobj +882 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 469.9249 513.9963 478.8911] +/Subtype /Link +/A << /S /GoTo /D (section.6.14) >> +>> endobj +883 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 456.0968 513.9963 464.9434] +/Subtype /Link +/A << /S /GoTo /D (section.6.2) >> +>> endobj +884 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 442.1491 513.9963 450.9957] +/Subtype /Link +/A << /S /GoTo /D (section.6.19) >> +>> endobj +885 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 430.1939 513.9963 439.0406] +/Subtype /Link +/A << /S /GoTo /D (section.6.20) >> +>> endobj +886 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 418.2388 513.9963 427.0854] +/Subtype /Link +/A << /S /GoTo /D (section.6.21) >> +>> endobj +887 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 406.2836 513.9963 415.1302] +/Subtype /Link +/A << /S /GoTo /D (section.6.22) >> +>> endobj +888 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 394.428 513.9963 403.1751] +/Subtype /Link +/A << /S /GoTo /D (section.6.23) >> +>> endobj +889 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 382.3733 513.9963 391.2199] +/Subtype /Link +/A << /S /GoTo /D (section.6.24) >> +>> endobj +890 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 368.4256 513.9963 377.2722] +/Subtype /Link +/A << /S /GoTo /D (section.6.9) >> +>> endobj +891 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 354.4779 513.9963 363.3245] +/Subtype /Link +/A << /S /GoTo /D (section.6.3) >> +>> endobj +892 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 342.5227 513.9963 351.3693] +/Subtype /Link +/A << /S /GoTo /D (section.6.4) >> +>> endobj +893 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 330.6671 513.9963 339.4142] +/Subtype /Link +/A << /S /GoTo /D (section.6.5) >> +>> endobj +894 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 318.6124 513.9963 327.459] +/Subtype /Link +/A << /S /GoTo /D (section.6.6) >> +>> endobj +895 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 306.6572 513.9963 315.5038] +/Subtype /Link +/A << /S /GoTo /D (section.6.7) >> +>> endobj +896 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 294.702 513.9963 303.5487] +/Subtype /Link +/A << /S /GoTo /D (section.6.8) >> +>> endobj +897 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 282.7469 513.9963 291.5935] +/Subtype /Link +/A << /S /GoTo /D (section.6.11) >> +>> endobj +898 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 270.6721 513.9963 279.6383] +/Subtype /Link +/A << /S /GoTo /D (section.6.13) >> +>> endobj +899 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 258.8365 513.9963 267.6832] +/Subtype /Link +/A << /S /GoTo /D (section.6.10) >> +>> endobj +900 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 244.7692 513.9963 253.7355] +/Subtype /Link +/A << /S /GoTo /D (section.6.12) >> +>> endobj +901 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 232.8141 513.9963 241.7803] +/Subtype /Link +/A << /S /GoTo /D (section.6.15) >> +>> endobj +902 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 220.8589 513.9963 229.8251] +/Subtype /Link +/A << /S /GoTo /D (section.6.16) >> +>> endobj +903 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 208.9037 513.9963 217.87] +/Subtype /Link +/A << /S /GoTo /D (section.6.17) >> +>> endobj +904 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 197.0682 513.9963 205.9148] +/Subtype /Link +/A << /S /GoTo /D (section.6.18) >> +>> endobj +880 0 obj << +/D [878 0 R /XYZ 90 757.9346 null] +>> endobj +46 0 obj << +/D [878 0 R /XYZ 90 739.9346 null] +>> endobj +50 0 obj << +/D [878 0 R /XYZ 90 553.9527 null] +>> endobj +877 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +908 0 obj << +/Length 276 +/Filter /FlateDecode +>> +stream +x讠Q=O0蔟+<&C梯9垁獞怈d:鈜iQ瑶{溫"鑶<;葵|翪顎e創ユG|緱 ]緲茏祛w耰壹迧4 +EH糿A^HB Y縵 R悺灮?鴪Wm阆c=鮇(﹒桷芍郙玝 こ:GJ扺缋挢隩'c颅盒V c铜V鎋3屭賽俁违勇i$吥R7K啁遇7QΞ絁桜暎竖 % J2巋棑屎St泯鞢w眷} +4贚k苮dendstream +endobj +907 0 obj << +/Type /Page +/Contents 908 0 R +/Resources 906 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 905 0 R +>> endobj +909 0 obj << +/D [907 0 R /XYZ 90 757.9346 null] +>> endobj +906 0 obj << +/Font << /F29 499 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +912 0 obj << +/Length 1260 +/Filter /FlateDecode +>> +stream +x陧汳彨6嗺+ R泮鄹薧蹉vUU賃U顎J>0簼_;=V=we岶 r黵鄛9?磹p!扨鲸Op瘳6騽啛)&j轼aY?疅唨s/Z淪 XI臊熕O亡茏梑\掆oH7JZbzk痱鵺4+慷鮡{)P宫毝趘f腌憔褻〝馉 鬀╔!鵖方^;)[襠!佷Z毽岝3<n凇q{l闗踥廢m6t淼~BK_锿趄躷g孙號]乁~C撱iX㎞噑W黪B份官铌^焿铛濇覱肷#@X笴K`Y>吸渹WV瘩>n)@傕IS┪真趏{u藼%(VL濆紭/▅篝<谿e {=py"皘[鵰|灾."LS鵾!拋R011詣蔘↘掄 kc楴畅活殆Z <]糊4-,筅7S7怮'd RQ茟釮e&L竖逿享F鳝挈2s暒;Os,lV;l秹3'l R力nx0V?仄;lCGF8蔿}w1Q躽 潻罡;g└#`.H埢1L鐈煌;U;SN騷[",+骦8S7 'i R憜 i& 唑<_d臞"懇J^狂糖騡刁餲麏p殇蠙A*剦~C訢咂謃TOs!茌崏挛珑6丯:>s,T前u疥蜹}k -8魖鈵鞎s蹏(碳 f畏<?Z!AAI幕緩e_癳ndstream +endobj +911 0 obj << +/Type /Page +/Contents 912 0 R +/Resources 910 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 905 0 R +/Annots [ 914 0 R 915 0 R 916 0 R 917 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R ] +>> endobj +914 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 483.9922 513.9963 492.8388] +/Subtype /Link +/A << /S /GoTo /D (section.7.1) >> +>> endobj +915 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 472.1366 513.9963 480.8837] +/Subtype /Link +/A << /S /GoTo /D (section.7.2) >> +>> endobj +916 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 460.0819 513.9963 468.9285] +/Subtype /Link +/A << /S /GoTo /D (section.7.3) >> +>> endobj +917 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 448.1267 513.9963 456.9733] +/Subtype /Link +/A << /S /GoTo /D (section.7.4) >> +>> endobj +918 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 436.1715 513.9963 445.0182] +/Subtype /Link +/A << /S /GoTo /D (section.7.5) >> +>> endobj +919 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 424.2163 513.9963 433.063] +/Subtype /Link +/A << /S /GoTo /D (section.7.6) >> +>> endobj +920 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 412.1416 513.9963 421.1078] +/Subtype /Link +/A << /S /GoTo /D (section.7.7) >> +>> endobj +921 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 400.306 513.9963 409.1527] +/Subtype /Link +/A << /S /GoTo /D (section.7.8) >> +>> endobj +922 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 388.3508 513.9963 397.1975] +/Subtype /Link +/A << /S /GoTo /D (section.7.9) >> +>> endobj +923 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 376.3957 513.9963 385.2423] +/Subtype /Link +/A << /S /GoTo /D (section.7.10) >> +>> endobj +924 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 364.4405 513.9963 373.2872] +/Subtype /Link +/A << /S /GoTo /D (section.7.11) >> +>> endobj +925 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 352.4853 513.9963 361.332] +/Subtype /Link +/A << /S /GoTo /D (section.7.12) >> +>> endobj +926 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 340.5302 513.9963 349.3768] +/Subtype /Link +/A << /S /GoTo /D (section.7.13) >> +>> endobj +927 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 328.575 513.9963 337.4217] +/Subtype /Link +/A << /S /GoTo /D (section.7.14) >> +>> endobj +928 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 316.6198 513.9963 325.4665] +/Subtype /Link +/A << /S /GoTo /D (section.7.15) >> +>> endobj +929 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 304.5451 513.9963 313.5113] +/Subtype /Link +/A << /S /GoTo /D (section.7.16) >> +>> endobj +930 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 292.7095 513.9963 301.5561] +/Subtype /Link +/A << /S /GoTo /D (section.7.17) >> +>> endobj +931 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 280.8539 513.9963 289.601] +/Subtype /Link +/A << /S /GoTo /D (section.7.18) >> +>> endobj +932 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 268.7992 513.9963 277.6458] +/Subtype /Link +/A << /S /GoTo /D (section.7.19) >> +>> endobj +933 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 256.9435 513.9963 265.6906] +/Subtype /Link +/A << /S /GoTo /D (section.7.20) >> +>> endobj +934 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 244.8888 513.9963 253.7355] +/Subtype /Link +/A << /S /GoTo /D (section.7.21) >> +>> endobj +913 0 obj << +/D [911 0 R /XYZ 90 757.9346 null] +>> endobj +54 0 obj << +/D [911 0 R /XYZ 90 739.9346 null] +>> endobj +58 0 obj << +/D [911 0 R /XYZ 90 553.9527 null] +>> endobj +910 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +937 0 obj << +/Length 287 +/Filter /FlateDecode +>> +stream +x讠QMO0 界W湄lc晲@60趎L赯Q1饼{姚*梳#稛煈pp2占80郲3覊'9粄"菨p𰋳}岯纤eD'磊韪xR`<铼v萜hbsW!酣岁=驺鋪槖还_l^z!漊; 9枓8{鑫奁>!苴疜'趈a〞嘵E隟P施圸8#m'$_榡=+9痡/譿U櫄:嗨湃bT裶p &&5mp/髊溛郦䓖 卹6Q旌{~endstream +endobj +936 0 obj << +/Type /Page +/Contents 937 0 R +/Resources 935 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 905 0 R +>> endobj +938 0 obj << +/D [936 0 R /XYZ 90 757.9346 null] +>> endobj +935 0 obj << +/Font << /F29 499 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +941 0 obj << +/Length 1873 +/Filter /FlateDecode +>> +stream +x陧\Ms6禁W(勦4I[鲾墪S垩mq*K墳翮$H +4V潹湨邃 Z||讳 *$瘤I N擯0.撜 N碜?邜4~'f偘d鎋蚈$#)〩逛 蛼飞煌驉閷 +<嵊?婵 8RZ戔ly鈿蝌傜蹚Lv飾蒎晴U䙡=I軼坊u鶺CK8矠褗V2%-Gd:#泾N-K 2侧)Yiq炳+?桋A京 氅b祵暹_瞸銕顝Y鶳劣雨騦;齈X均0o廂|_:k+i罹$膉描佺逰貪 貪5(l袃MbB舤]Y/瞌O玛飘U>_7(b]膷h囮 翽鮆劗亟鋠i`4豃 揾儳啎y悋=X隲褉褙B*P&%Hb%6G_醿;5H鍪嵨靍v0 f枇篱链A溗X▉鱯z梀)ci両努+鄸鮍閃 8跎傤. , 孜e媟Cb崰V躉瀗wi~$8寜膅6*T虂z躵`怎U2P 鑼X李2z0< 厱鮻X賁z WQ蘈3Va籞枂硕醔趒/}饢祾弞颷(]J r絉3籏 pg鯼钄 Mb崱V纠nFQ▼(f3惧"'>B 0體誂醤:_嘁(馷庢荔%菸';閭{话C3VI咃錠╖竔綴,纂pH禴鐅镅礚"硙=邓蹯>珃騇z苷吐媵tj7兵穔5|毥ぺ鮴_r;[O狔Xj怲8譁i`綬7怭)b詒R+T碳5am氕|[剾t筺"贪q臓椌;;厓跭CK(れ搙 %灜R筎▁蘥鯳(f_1dm鹀嶞m;榐曙 U李? ]刞仈难 珪縆城妄"蔙h-xB艤i罽蹓Q郫<媈傦 N李4 <許脨"諧i`掂b 3H5t睩艑sj呂L踴S0?T(䲠撏~晃v忣\京镜7 +襗`K鮏灜N5h;则Xq>N興YI橼澤軌戏w螬瓘轓 !擓磔轁;檿#檃;u词絿黑树9鼈+=vv套%1漳J縵殪_w9T櫮=x症 mb揤崻S8_],质鬈蜽t 礮o莥3漗陲 +譑np 4?綮U夏肘 瑬鶥顺|蜜澳'攫k媻贄 IiL埝k洖熯w6=6咔zそ糈鶎v癈{0磀拱e>彮'貹5-搙33犢 +s燸\囜o﹣若拁gv'}懊{0t櫬84^г扳~兢鳙mfG ,仳傪b裴q獐P1覃.屖6戦%P霳锒`^hO(〾轷 I阅endstream +endobj +940 0 obj << +/Type /Page +/Contents 941 0 R +/Resources 939 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 905 0 R +/Annots [ 943 0 R 944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 984 0 R ] +>> endobj +943 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 481.9349 152.2025 492.8388] +/Subtype /Link +/A << /S /GoTo /D (a00077) >> +>> endobj +944 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 483.9922 513.9963 492.8388] +/Subtype /Link +/A << /S /GoTo /D (section.7.1) >> +>> endobj +945 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 470.956 176.4612 480.8837] +/Subtype /Link +/A << /S /GoTo /D (a00078) >> +>> endobj +946 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 472.1366 513.9963 480.8837] +/Subtype /Link +/A << /S /GoTo /D (section.7.2) >> +>> endobj +947 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 458.0246 162.175 468.9285] +/Subtype /Link +/A << /S /GoTo /D (a00079) >> +>> endobj +948 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 460.0819 513.9963 468.9285] +/Subtype /Link +/A << /S /GoTo /D (section.7.3) >> +>> endobj +949 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 446.0694 148.8948 456.9733] +/Subtype /Link +/A << /S /GoTo /D (a00080) >> +>> endobj +950 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 448.1267 513.9963 456.9733] +/Subtype /Link +/A << /S /GoTo /D (section.7.4) >> +>> endobj +951 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 435.0905 161.0693 445.0182] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +952 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 436.1715 513.9963 445.0182] +/Subtype /Link +/A << /S /GoTo /D (section.7.5) >> +>> endobj +953 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 422.1591 128.4121 433.063] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +954 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 424.2163 513.9963 433.063] +/Subtype /Link +/A << /S /GoTo /D (section.7.6) >> +>> endobj +955 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 410.2039 146.4744 421.1078] +/Subtype /Link +/A << /S /GoTo /D (a00083) >> +>> endobj +956 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 412.1416 513.9963 421.1078] +/Subtype /Link +/A << /S /GoTo /D (section.7.7) >> +>> endobj +957 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 398.2487 112.9203 409.1527] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +958 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 400.306 513.9963 409.1527] +/Subtype /Link +/A << /S /GoTo /D (section.7.8) >> +>> endobj +959 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 386.2936 147.7889 397.1975] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +960 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 388.3508 513.9963 397.1975] +/Subtype /Link +/A << /S /GoTo /D (section.7.9) >> +>> endobj +961 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 375.3146 155.5297 385.2423] +/Subtype /Link +/A << /S /GoTo /D (a00086) >> +>> endobj +962 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 376.3957 513.9963 385.2423] +/Subtype /Link +/A << /S /GoTo /D (section.7.10) >> +>> endobj +963 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 362.7568 126.2002 373.2872] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +964 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 364.4405 513.9963 373.2872] +/Subtype /Link +/A << /S /GoTo /D (section.7.11) >> +>> endobj +965 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 350.4281 142.2503 361.332] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +966 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 352.4853 513.9963 361.332] +/Subtype /Link +/A << /S /GoTo /D (section.7.12) >> +>> endobj +967 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 338.4729 157.7419 349.3768] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +968 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 340.5302 513.9963 349.3768] +/Subtype /Link +/A << /S /GoTo /D (section.7.13) >> +>> endobj +969 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 326.5177 153.3186 337.4217] +/Subtype /Link +/A << /S /GoTo /D (a00090) >> +>> endobj +970 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 328.575 513.9963 337.4217] +/Subtype /Link +/A << /S /GoTo /D (section.7.14) >> +>> endobj +971 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 314.5625 168.8202 325.4665] +/Subtype /Link +/A << /S /GoTo /D (a00091) >> +>> endobj +972 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 316.6198 513.9963 325.4665] +/Subtype /Link +/A << /S /GoTo /D (section.7.15) >> +>> endobj +973 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 302.6074 180.9847 313.5113] +/Subtype /Link +/A << /S /GoTo /D (a00092) >> +>> endobj +974 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 304.5451 513.9963 313.5113] +/Subtype /Link +/A << /S /GoTo /D (section.7.16) >> +>> endobj +975 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 290.6522 140.596 301.5561] +/Subtype /Link +/A << /S /GoTo /D (a00093) >> +>> endobj +976 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 280.7543 513.9963 289.601] +/Subtype /Link +/A << /S /GoTo /D (section.7.17) >> +>> endobj +977 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 266.7419 161.0694 277.6458] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +978 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 268.8987 513.9963 277.6458] +/Subtype /Link +/A << /S /GoTo /D (section.7.18) >> +>> endobj +979 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 254.7867 162.1755 265.6906] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +980 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 256.844 513.9963 265.6906] +/Subtype /Link +/A << /S /GoTo /D (section.7.19) >> +>> endobj +981 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 242.8315 163.8392 253.7355] +/Subtype /Link +/A << /S /GoTo /D (a00096) >> +>> endobj +982 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 244.9884 513.9963 253.7355] +/Subtype /Link +/A << /S /GoTo /D (section.7.20) >> +>> endobj +983 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 231.8526 167.1461 241.7803] +/Subtype /Link +/A << /S /GoTo /D (a00097) >> +>> endobj +984 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 232.9337 513.9963 241.7803] +/Subtype /Link +/A << /S /GoTo /D (section.7.21) >> +>> endobj +942 0 obj << +/D [940 0 R /XYZ 90 757.9346 null] +>> endobj +62 0 obj << +/D [940 0 R /XYZ 90 739.9346 null] +>> endobj +66 0 obj << +/D [940 0 R /XYZ 90 553.9527 null] +>> endobj +939 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1007 0 obj << +/Length 287 +/Filter /FlateDecode +>> +stream +x讠Q=o0蔟+<&C芑s|( ,%Q_祃晣{鏖w颬Bx(=Hk:g; +悋 覻萭弲xx!/津L,孆0丵B扙筃(O3蚶橍嫹 $ 偋m穽h盏脎]R判.玈)栤箻岦宖紎%恊喙牬wF~zO(r襑鏢4'&唵{k^;V仲{F6鯻1]hA璷礵瀛v-5吰淚Z 烛 杓v踀e敥}絺e&镚i0#=w鄨)櫎is鰼珩P烷|咦0'j7*斺} endstream +endobj +1006 0 obj << +/Type /Page +/Contents 1007 0 R +/Resources 1005 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 905 0 R +>> endobj +1008 0 obj << +/D [1006 0 R /XYZ 90 757.9346 null] +>> endobj +1005 0 obj << +/Font << /F29 499 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1011 0 obj << +/Length 3129 +/Filter /FlateDecode +>> +stream +x陧\K7钧W9枉c/A鰬温H孛f﹎ 袶Ic'~&慌&k葹I秅 *V}]H汳f佝#3僩J(d棾逋 <{oo ?s熟_鄧 l6彌昱Q尋v跷)椳 ≠靔踹嬁阀鎝9_埶]7郒iE\l +5錷兓護0A豞6鮪拯蛛 Y4钀 qAe獵 r9'恽7涖)(c3儗t璠]T#臝Us鉀火懂u{~豱j考籭v 苩蹌7У亢>l毿t棁晚i尺0进荱飗B":渒f僋塌炃饩b$佝=ku徎附=綷瓧匪椊熛m窧8KN磿BK纼#! r鑢.lO|齭䲟t袄 a亓g騯R@瞧潝ks金輜橴R1葘@Z k怭D%膱窼"蹈肽w氙q7a蹺=V娀琧岣;鰹+|t 4w漍w雈惠?^浰壅,+;腋-鵁飪蘋1)与 %h|啀酨獝Z%p眶R攁D羔C縛伩啭俩$忖放蚼7pv込I排G熡>宱囃)弱儻躜v砛疵[: +雩齫奎=ps:vC 閟s|霣ot*~却;7T聵 c涰&茲#򬘺.屗2絇0謭8Y +芢 鉝蚥誑@)31w-.揄猛盼乒窖乒<枪劫乒殴紧qnE8wR.雾兿鎆#N寁=崒_!B裧4@qc6x鮸e翹皱儞凉Y!! +4 + 骃 h!I靹 :>氥~!O"F嶵珒\Jq憦_DS粈&翍骸摢欁v馠趙钇﹏┒[4冕+90牱闋[箊J*>9\獉/G駹柢L籫"槉 +6kr +澵h*DzGQ#諝Pa漇!;饕 帉 +A猣轗羑!嗹T#{筥J伈/Y谋o;_亿\辣Q魌錏>emy"榟踩孉學k<絏蠇阃6g厺;1佸,V['_脩閡8`tP6峱抌H=蠭,+i輎o ,;J阏踸7w +x鞮.&泮 \鐆 +yt .未{.0 0倝⒏Zw昱苧!R; e欈 kh臚孖1d\R5藮 亦C.斍%濫]瑥h离xR靻L荤 "槉/J 醪^拴兕P`V>5gUA%盂R芔犝F歳憖圈TA猣贜綐澲 M窚贉JL)阵+'鱽 8~m=慽鞔 m@SM工]橋j}{m"豌hS啋=X4 垖6A猣谝F+F啨A趞;f噌D?9~艗€3頌%`F0锗"l偱娫X覊=%戞q,)C婶:(4麆%02qC怢m49(擎敘鬵P婜>4臹却{襽鮚罷C 親*Z+b Mi蔖21iiH覬諏隩E绦(吱=/粡5譍宝 檝6 #榡ā 滇^琯颓鎧馆4籗)懧J蟗%辴50橿η祯[W0玟巘4U孲聭鍾 ;藜 +^&ifb";▼I;喃Q醊鬪 w壛pL疃9禬昿锬顟顀醊撻嘂 +鱲X螺廞E銛肜崁d髥 p(歩 @SM0ET醞》p,蠬I蘤炳" 倈 PΨ}?鎡篯蜅7P曳n 糚鸥K鷦54頧馃K/歬x轰_G!籗sx甾PY,嘯傗K艊3頌p!D0V\ +0鷨c7(餫杼pT燲%8Q U;>Hd续錍e隲怬龕燮D賾檝妦罷询,Lk踟^炝齟@欈>鷣j搼晜H}袸誏.揬-WCS勿?趵箎u婟恑髟2`-%ù恧i{u捗#嵛w(毫# 房菷鯋F躖匔y焸4} +(|t )苆%蝆塘踤甠B団笣蚰鶭9堊歆Z濝涙纡抍鐼V畱">{獧1宀Bl踖洓鱬fp隵飵顥Q伶翱;mv宛r聼N.<*轂i鞴0L晪9A聵Z#7e1騻?7報鰷o"cF惇吩0屔□?H .粲噱Q(=宇n嬃Β祋"E賸登7沸紕; *7.d纘 3垰疓I湁L詽L蛛餌&铛{&2%儚炄+艸賸臕9套I磐,VXL谹締 盂斯;椴]\7#袈!bF0 A郅牬B7湆NF_冈锦窎麧哇w齺:{雤ql?玚粏綵o/緔>u|pg刍骧嵖癞Y听hh娳啨NM噢3宍ⅰ(焭眏幨欈7у!) K瑜j妤獿櫮|m斯黹p蠹\冃?孲)谵硽o-;&檔A觘_e谯榁3宍獦秈涏jUt\Ldz}L撂w孞轎侦24脇h譋輿b绬M箪g}1?蓬纱{䜣g騚 ]呥╦壂絓箄_ +扛魎跪-W忸,,W騘+僞嚄+E儚N曷%痡y'鮄岣F愰=G|炞FL憖H緭獧i崜噖y痼輫弋嫯鑄搌e?8~T +/鯠 #罷)渟 +[::["呫豏F愰m賠偋@( 璗. y衝O曈鷃鵳瑵6D=弝囹Q$)鯝|F0諓(猌肱$#IAΨlnl鄧i窧X匍H秌孑WP%錍髱+W桳\0ダ**Ow忊I檝- 罷<q;$R8'e欈!OO$u岁'璗图潶Y 64_鉏錍?5T鞓L'5#榡65b楿嫭漍滰懧q*#若骫硑烤捱7(e楓J&x草 UC醞F!婗隣嬘耈M輦腤Y"朜籣纭躁顆X忂^喂鹴v[fu縗頪紐鸄;Q頹盵語狃C诇勬蠲佥 態 w]掭濛]閙鷌*麚泫英a}盘3豟箛鬎";泛燄A朴茴噇'a刖"o +Q岡ǒ蔟w}endstream +endobj +1010 0 obj << +/Type /Page +/Contents 1011 0 R +/Resources 1009 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1063 0 R +/Annots [ 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R ] +>> endobj +1013 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.3629 456.6823 228.655 467.5862] +/Subtype /Link +/A << /S /GoTo /D (a00100) >> +>> endobj +1014 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 458.7396 513.9963 467.5862] +/Subtype /Link +/A << /S /GoTo /D (section.8.1) >> +>> endobj +1015 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.3629 444.5481 229.2129 455.4521] +/Subtype /Link +/A << /S /GoTo /D (a00101) >> +>> endobj +1016 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 434.6502 513.9963 443.4969] +/Subtype /Link +/A << /S /GoTo /D (section.8.2) >> +>> endobj +1017 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [151.3257 420.4588 183.9331 431.3628] +/Subtype /Link +/A << /S /GoTo /D (a00102) >> +>> endobj +1018 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 422.3965 513.9963 431.3628] +/Subtype /Link +/A << /S /GoTo /D (section.8.3) >> +>> endobj +1019 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [151.3257 408.3247 184.4911 419.2286] +/Subtype /Link +/A << /S /GoTo /D (a00103) >> +>> endobj +1020 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 410.382 513.9963 419.2286] +/Subtype /Link +/A << /S /GoTo /D (section.8.4) >> +>> endobj +1021 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.3543 396.1905 174.6379 407.0945] +/Subtype /Link +/A << /S /GoTo /D (a00104) >> +>> endobj +1022 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 398.2478 513.9963 407.0945] +/Subtype /Link +/A << /S /GoTo /D (section.8.5) >> +>> endobj +1023 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.3543 384.0564 175.1958 394.9603] +/Subtype /Link +/A << /S /GoTo /D (a00105) >> +>> endobj +1024 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 386.1137 513.9963 394.9603] +/Subtype /Link +/A << /S /GoTo /D (section.8.6) >> +>> endobj +1025 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.0952 371.9223 181.8208 382.8262] +/Subtype /Link +/A << /S /GoTo /D (a00106) >> +>> endobj +1026 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 373.9795 513.9963 382.8262] +/Subtype /Link +/A << /S /GoTo /D (section.8.7) >> +>> endobj +1027 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.0952 359.7881 182.3787 370.692] +/Subtype /Link +/A << /S /GoTo /D (a00107) >> +>> endobj +1028 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 361.8454 513.9963 370.692] +/Subtype /Link +/A << /S /GoTo /D (section.8.8) >> +>> endobj +1029 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.0952 347.654 190.1196 358.5579] +/Subtype /Link +/A << /S /GoTo /D (a00108) >> +>> endobj +1030 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 349.7113 513.9963 358.5579] +/Subtype /Link +/A << /S /GoTo /D (section.8.9) >> +>> endobj +1031 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.0952 335.5198 190.6776 346.4238] +/Subtype /Link +/A << /S /GoTo /D (a00109) >> +>> endobj +1032 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 337.4575 513.9963 346.4238] +/Subtype /Link +/A << /S /GoTo /D (section.8.10) >> +>> endobj +1033 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.7115 323.3857 213.3523 334.2896] +/Subtype /Link +/A << /S /GoTo /D (a00110) >> +>> endobj +1034 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 325.443 513.9963 334.2896] +/Subtype /Link +/A << /S /GoTo /D (section.8.11) >> +>> endobj +1035 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.7115 311.2516 213.9103 322.1555] +/Subtype /Link +/A << /S /GoTo /D (a00111) >> +>> endobj +1036 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 313.3088 513.9963 322.1555] +/Subtype /Link +/A << /S /GoTo /D (section.8.12) >> +>> endobj +1037 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.7641 299.1174 212.6453 310.0213] +/Subtype /Link +/A << /S /GoTo /D (a00112) >> +>> endobj +1038 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 301.1747 513.9963 310.0213] +/Subtype /Link +/A << /S /GoTo /D (section.8.13) >> +>> endobj +1039 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.7641 286.9833 213.2032 297.8872] +/Subtype /Link +/A << /S /GoTo /D (a00113) >> +>> endobj +1040 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 289.0405 513.9963 297.8872] +/Subtype /Link +/A << /S /GoTo /D (section.8.14) >> +>> endobj +1041 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.7641 274.8491 197.1536 285.7531] +/Subtype /Link +/A << /S /GoTo /D (a00114) >> +>> endobj +1042 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 276.9064 513.9963 285.7531] +/Subtype /Link +/A << /S /GoTo /D (section.8.15) >> +>> endobj +1043 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [116.4668 250.5808 149.8812 261.4848] +/Subtype /Link +/A << /S /GoTo /D (a00120) >> +>> endobj +1044 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 252.6381 513.9963 261.4848] +/Subtype /Link +/A << /S /GoTo /D (section.8.16) >> +>> endobj +1045 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [116.4668 238.4467 150.4392 249.3506] +/Subtype /Link +/A << /S /GoTo /D (a00121) >> +>> endobj +1046 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 240.504 513.9963 249.3506] +/Subtype /Link +/A << /S /GoTo /D (section.8.17) >> +>> endobj +1047 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 214.1784 179.5994 225.0823] +/Subtype /Link +/A << /S /GoTo /D (a00123) >> +>> endobj +1048 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 204.1609 513.9963 213.1272] +/Subtype /Link +/A << /S /GoTo /D (section.8.18) >> +>> endobj +1049 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 190.0891 164.6655 200.993] +/Subtype /Link +/A << /S /GoTo /D (a00124) >> +>> endobj +1050 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 192.1464 513.9963 200.993] +/Subtype /Link +/A << /S /GoTo /D (section.8.19) >> +>> endobj +1051 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 177.955 135.336 188.8589] +/Subtype /Link +/A << /S /GoTo /D (a00125) >> +>> endobj +1052 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 180.0123 513.9963 188.8589] +/Subtype /Link +/A << /S /GoTo /D (section.8.20) >> +>> endobj +1053 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 153.6867 151.3858 164.5906] +/Subtype /Link +/A << /S /GoTo /D (a00127) >> +>> endobj +1054 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 155.744 513.9963 164.5906] +/Subtype /Link +/A << /S /GoTo /D (section.8.21) >> +>> endobj +1055 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 141.5526 135.8939 152.4565] +/Subtype /Link +/A << /S /GoTo /D (a00128) >> +>> endobj +1056 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 143.6098 513.9963 152.4565] +/Subtype /Link +/A << /S /GoTo /D (section.8.22) >> +>> endobj +1057 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 129.4184 148.068 140.3223] +/Subtype /Link +/A << /S /GoTo /D (a00129) >> +>> endobj +1058 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 131.4757 513.9963 140.3223] +/Subtype /Link +/A << /S /GoTo /D (section.8.23) >> +>> endobj +1059 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 117.2843 148.6259 128.1882] +/Subtype /Link +/A << /S /GoTo /D (a00130) >> +>> endobj +1060 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 119.3415 513.9963 128.1882] +/Subtype /Link +/A << /S /GoTo /D (section.8.24) >> +>> endobj +1061 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 105.1501 178.5039 116.0541] +/Subtype /Link +/A << /S /GoTo /D (a00131) >> +>> endobj +1062 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 95.2522 513.9963 104.0989] +/Subtype /Link +/A << /S /GoTo /D (section.8.25) >> +>> endobj +1012 0 obj << +/D [1010 0 R /XYZ 90 757.9346 null] +>> endobj +70 0 obj << +/D [1010 0 R /XYZ 90 739.9346 null] +>> endobj +74 0 obj << +/D [1010 0 R /XYZ 90 553.9527 null] +>> endobj +1009 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1091 0 obj << +/Length 1559 +/Filter /FlateDecode +>> +stream +x阱Z]o6}鳢校 ,%酯纫礙Y绶Y眳:抔薽蝻G姢B墝óA譮婶褰嚄玷挃Q奟,)<蕂f0趫孀3た^婏椂料砏8峈恟蹋誹雭#0卵j齸廀饷闙Dh g覒l=]\.枠9P菁*w吅花峙4鹐誆掷酘讫{鳋屩鄾$MX鬥|)巒f骯7鹀鰗鏕}裿饙彜 $1#莏H枙c崘Ρ 堮}J垥)@1翍眏3P顭 塒 +xL尤rЬ9l瓷籢xm?舄/躭脗9:`@蝬0(!亐貒'd鹱"[1$!n9@掶u譟揮eG輁_]Y}\铌<郓蟜$菬膅 +绉c盫=斉佩'甖騴]ǘ琙珱χ艵苏%ICR.3 R苩茢OA兄Ц^煔覣擌鞚&磛/钅b 2%凁墙4}杌ih* 9兡瘠/檒-韣.飏^PQ0D@馉芡LO;鋫鰣圁n蘬灄Ql瀷B柷l@甿m菍L镍曧徫猳uIL"{澒瞵/溩炎l佱鼡黈椱U-T噓彼 +輟咫7U0"织C亡P6埤㏎ef瓙2Q*撕瞜O悃"//A<I賫a 阐=\:%效w?偳襺,追j5<c纸錺氼8~5U賨H +F脩kX夽備用+蹙陉uY拂b~f顝M舣(Ju眂秅&閒t^颙7全/偳 K"!嘲n,囉t3幚駅t初&墖<簯F“媧*<桨-Z+紼摶焃76S叆淠 ~:Z馾~扸F缏癞碆絑"hM +', i艠叺b9湨晀巁嵿恛}KK dC我R[參s +h*V斀鑂2/媩阱豎Q=W壂l婞喔/騌*7 +UnuTq邠肐M藉~阓_yGM鮳疟逎罨]軎坞-剶騩EoO&褅4q巜Eo2葖啾鑽E綇Y鹭罉呴m9淔飍巁涋[結傎唶蕲U(8:胦 颤Pk惊沣v.熯Ui=遁臦蛆}頯:菗蜪*童鉣{U郋餢 艕凾`搪*NS8钳FP飣'g 爌D牠Bⅳ[娻籍$7龕啕柽m 蘓?誡'鍝2:巜%# &P蜝漎K营紆晜)鄬[钳9f坞贲塇D邡8湱 +E鐗xH 侹iu磄捶橽 剳d锍時鴍u鴴> endobj +1093 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 726.8189 179.0619 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00132) >> +>> endobj +1094 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 716.8014 513.9963 725.7676] +/Subtype /Link +/A << /S /GoTo /D (section.8.26) >> +>> endobj +1095 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 690.9534 161.358 701.8573] +/Subtype /Link +/A << /S /GoTo /D (a00134) >> +>> endobj +1096 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 681.0555 513.9963 689.9021] +/Subtype /Link +/A << /S /GoTo /D (section.8.27) >> +>> endobj +1097 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 667.043 140.3173 677.947] +/Subtype /Link +/A << /S /GoTo /D (a00135) >> +>> endobj +1098 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 669.1003 513.9963 677.947] +/Subtype /Link +/A << /S /GoTo /D (section.8.28) >> +>> endobj +1099 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 655.0879 140.8753 665.9918] +/Subtype /Link +/A << /S /GoTo /D (a00136) >> +>> endobj +1100 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 657.1451 513.9963 665.9918] +/Subtype /Link +/A << /S /GoTo /D (section.8.29) >> +>> endobj +1101 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 643.1327 163.0021 654.0366] +/Subtype /Link +/A << /S /GoTo /D (a00137) >> +>> endobj +1102 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 645.0704 513.9963 654.0366] +/Subtype /Link +/A << /S /GoTo /D (section.8.30) >> +>> endobj +1103 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 631.1775 158.0208 642.0815] +/Subtype /Link +/A << /S /GoTo /D (a00138) >> +>> endobj +1104 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 633.1152 513.9963 642.0815] +/Subtype /Link +/A << /S /GoTo /D (section.8.31) >> +>> endobj +1105 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 619.2223 158.5788 630.1263] +/Subtype /Link +/A << /S /GoTo /D (a00139) >> +>> endobj +1106 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 621.16 513.9963 630.1263] +/Subtype /Link +/A << /S /GoTo /D (section.8.32) >> +>> endobj +1107 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 607.2672 153.6074 618.1711] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +1108 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 609.2049 513.9963 618.1711] +/Subtype /Link +/A << /S /GoTo /D (section.8.33) >> +>> endobj +1109 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.6599 595.312 166.8776 606.2159] +/Subtype /Link +/A << /S /GoTo /D (a00141) >> +>> endobj +1110 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 597.2497 513.9963 606.2159] +/Subtype /Link +/A << /S /GoTo /D (section.8.34) >> +>> endobj +1092 0 obj << +/D [1090 0 R /XYZ 90 757.9346 null] +>> endobj +1089 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1122 0 obj << +/Length 1862 +/Filter /FlateDecode +>> +stream +x趰XK撣6钧WhoT暸鄘o墲le珳竩塻Hh臉"$枭t$%羊査C犙鐵$v2阱i杚掜沨 紲 嘥幕脄Oo钧I;匶&虞 単I納逎Uo醢?4 +昌O I估 萂盲悏0憳E燕儵峪僵瞵矋閒i" 酅挜eq槫2s也P"姠嚆E`g7要",釉 恊X蔅z硤髭5E徴恤珒;貥儳*髊 蚇階鍽4)+Esk-赐筚緃麷 甄V,a痰涚螡 朜f-z/余薧赪"^"3鸫2輍仗磺籽陭C順;譬:擓j璾肵_幒=@^寷v丵ww诰畗f3耏of27馣倊0h諚 %:Z瑻4r&wY幪帕 +犖辍Y蛪u&庭o5z 剮浼 i~襃u[P佶а鲆伢5ZH1揺;g烢++-刭p@` 輂宾斗鑂最栨轆佌9(|疶爻4汗橢氡5甄笣錽柏%欮/ +!寺羳咔tq`M滀 敻b蠚tR +3冊|V誄鈷Qp CY(NzH$x"9y蠴CoF/詏亢4f#fBL这\煝(6h k:9槚垕抢2(辣箩祴0#-8阨jY衑jm脰脻伭qt爿&苻剿.u僸缣纶 "煴9扪4un匚r檴@誣 培恈鄳簿g&f=Н签u ZQ +6q焪-坯癰狠坱灞籃&v77L暆M T蹝S尨.,8;*斲"#.o?騶# +1ひ銳-蓙迢然1菖帹6儘獩缞Wx,(P侅螼肠" D]!谈p 掗囁Zゃ&殝X 1辺 舨c#!9乼$P谢欻N7Rㄘ$渨惵 H闐y*Q"/Hv醀傮;釫}F脻S翈V醱g>M$赔N,握鯈K骍9}娨䦆花鰊甍*v闅57KEs n = t釬>Y迏甛4饦R時}M)W濠鋁uD獲QDX%zmh񅙲@6脇NGu圣イn啓桃噔,归穈q*檡騷m螺.+h儩蒎刖褰T熲C燽铻i*;榿I]淘賾56"E憭o营c薲鰞&qB茥(簱VS 2堐 +优奱+@c\$T 麻>p褡4~琿纡朸憚e攅讂a韫晴梬豺%紴稆:圯v眕c蛁牶哪~嫫}P '噣*+咷z秓鶫 +星zg@讂餄鬓瑖列3p骮享6c鞒Ik虹?/'Xfa_卭Y~3}j舭4w涶B2䝼颀.戴-吴徿 爂邚\匮齝n軭#檵P$鱗邕?endstream +endobj +1121 0 obj << +/Type /Page +/Contents 1122 0 R +/Resources 1120 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1063 0 R +>> endobj +1123 0 obj << +/D [1121 0 R /XYZ 90 757.9346 null] +>> endobj +78 0 obj << +/D [1121 0 R /XYZ 90 739.9346 null] +>> endobj +657 0 obj << +/D [1121 0 R /XYZ 90 553.9527 null] +>> endobj +82 0 obj << +/D [1121 0 R /XYZ 90 553.9527 null] +>> endobj +1124 0 obj << +/D [1121 0 R /XYZ 90 520.1647 null] +>> endobj +1120 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1127 0 obj << +/Length 2807 +/Filter /FlateDecode +>> +stream +x讠賻跢騷綛 漩擅X,鈉6o|E 郟⿶T瞥_縐]軹髳d`a屬飚嬧+*e玐莂*U词wWl?]q纙稼\"]塰倒7"j僚j除m-掚@$,f朊鞧j舵!A籪{ +縤蛎/淂哇珱虭撞膽隉W魁蜼[`镯 e氳及惂懋攼睽胡|躏- K錊膖枔p豖O/接s匤&j鍫P_勑q隑藭噉Fn篅敨0eQ4":獻皐V绹诣╈i源菣嫘計埒狍yⅤi駒玟憷. EOB玳"蜷~l沰曐⒊陋汓kY?X盶sG/辋PU4 度睹N'禺向疉[驡\凜倕Y^性$"^n緀粆屮撒虓/t/(尭8鄬皨j8K瘿 tFt沪}鏿嗑褪k鬈跖甗O落專z腌$`. 9稂g趋堔鼌6/囟宓s:m&o*蠝杁2=m>i `舚栤Q:亴杈)妢e怼剌垌ec袘 戉审紫連]>r掎晤齖詽u褯源_鞤僸阾75莐b麈徾鞣/L3SfKB!觴绿4; ,瘫! ?XX.衉嫆Q: +煽W0SS琕,痭~簘J.毘P砊灄u亝96拫盦%蚊Tk狵%J)脴S頛j7,锾鰲洆试2LX扤鴼j覣]郌B怰﹫擒恲僼糒ee|J\ +砫}犯 务文e鞤(洘?菁<\芇譎筊iF/ (馉庵y苿b釀'1 釵虙E(稹鎤$ 搥+V!氅-Q靺2f瘁~K料覈% +:冣咾侥娓|硃樈躽E2l l硝凩B)繷 Px冓SIBq)5椁F脵k3I懍K;U憴貍o噝[4钫7A?W吤慍i_繳誤瑉阧讅c避5 +繯菰A揿vE洍槡6pS4}6M酖0,d刪 q诇宪kW路艧嚥-P4QZ}嬷踨产郷唽笹禓*墧a+ +y(爐e^^#_p_o;挥W +3碽┃%*仚份或詵}彈4|箋︾薽#7圍+暐瞎%娧悂肯B0T鮅aI IPゅ+7鷹庉幚連x嗁刢帑GLg蕥 6駭梚:pPs撓!,籼礚瑘╡2鹽遇魊6V*蟎Z啊#序葄?鐝籸/j貥殍擵笖∫Jd +竨]允#鸱痰2菍 4U劐?>w醰4侗L償儦坫 )瑻燯𒗛鱈2郆`{;缭僺J霚踜灛勺pd礂&锽<椞ff@獣{ 5{p*球PHjEgq趢蒐t:峜郀蛛-U毨` +誏苒眭R$ +去\漏鉧J勰隌翵o"m瓑S2麲*れ焢壡5,Dj贖XTk晓蓄洰榣gQ37,眒,澪F|:x!您 攼h軵'食5.x9v:戥 梟壖犪.>⒙&覫乊郜捧q鉩剨琌<九莈-撹褛鯈鲄8寗 v婮gM鑪`荇d1%LN竒h05衊舗;痺 +X烑矐浱豺槨%懃Y侹j 33铨P须p*Om6$[21c竪蛳玲3sr茑贫掼璀;G硗@瘛 "1T"堣y_鍼.=/賮+M|顛s 吓vZ 俣-}.葹囷14鹋攥漿W( 禿墒*籹呶琩#絕4+*ph鼐%,P?谽ーiR%C0M Z犅=`M叓4眛!頳@j駒n:崴53J滲9o偞"i昴懒`鴅殜d逮攣圼黗9膧丳鎍=X峿 .n毇.黒盽[莖D愼8<穈O4"S(鎝5 炇z坋1(踡u蠎疀僛9x%屒盕1?\( #薒F鈋AGt拎冥Mx羿oNc鸷C有噶﹟o繷鸇TF灌 风 乫 +刬d6埿躊pt堶8?磼疱罟/亥佛2獂*泥^#齙1芈ヰfQ樒pS5譳亘"1皞"C汒嗁灶/v%|/\'{! a(#媗龍抪_缈ü{v喀黀泽?rIJ⒃ndstream +endobj +1126 0 obj << +/Type /Page +/Contents 1127 0 R +/Resources 1125 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1063 0 R +/Annots [ 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1139 0 R 1140 0 R ] +>> endobj +1129 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [364.0856 532.3134 409.2359 543.2173] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge6bae7dc0225468c8a5ac269df549892) >> +>> endobj +1130 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [455.8347 532.3134 511.5056 543.2173] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +1131 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [178.2535 520.3582 263.1547 531.2622] +/Subtype /Link +/A << /S /GoTo /D (a00142_g99e43010ec61327164466aa2d902de45) >> +>> endobj +1132 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [302.7829 520.3582 348.4913 531.2622] +/Subtype /Link +/A << /S /GoTo /D (a00142_g7b04a0035bef29d905496c23bae066d2) >> +>> endobj +1133 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [267.6923 508.4031 354.8052 519.307] +/Subtype /Link +/A << /S /GoTo /D (a00142_gad14bbbf092b90aa0a5a4f9169504a8d) >> +>> endobj +1134 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [462.2904 508.4031 513.9963 519.307] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2f8f70c30b9ee08a103fbd69a4365c4c) >> +>> endobj +1135 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 496.8215 138.0296 507.3518] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2f8f70c30b9ee08a103fbd69a4365c4c) >> +>> endobj +1136 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 461.075 239.3186 481.9864] +/Subtype /Link +/A << /S /GoTo /D (a00142) >> +>> endobj +1139 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [326.8799 360.3806 400.6034 371.2846] +/Subtype/Link/A<> +>> endobj +1140 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [132.4581 350.1928 206.1817 359.3294] +/Subtype/Link/A<> +>> endobj +1128 0 obj << +/D [1126 0 R /XYZ 90 757.9346 null] +>> endobj +1137 0 obj << +/D [1126 0 R /XYZ 341.7132 422.4291 null] +>> endobj +1138 0 obj << +/D [1126 0 R /XYZ 90 405.4028 null] +>> endobj +1141 0 obj << +/D [1126 0 R /XYZ 215.4248 351.5786 null] +>> endobj +1142 0 obj << +/D [1126 0 R /XYZ 90 336.3195 null] +>> endobj +1125 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1151 0 obj << +/Length 2493 +/Filter /FlateDecode +>> +stream +x讠藪6>_褅Zu昜+抸瓮$-o2U{坰蠬靑曊RG<檤╓k趪-譞$ 賐?彼俔%~βxW滐傒3? F|鱴鳢e端,栺铖h9穆彜惢球w/雠 @鞥甑5';襶亠x 咈晞  ?<嶳Y〩e⺻鼷廉>臼襤摾Y&w缁P*7╋~畸先v林"《6洆0Mho鎀觖 +R/縗6/N4sPs 崬甓鳵58薋嫁嬋RWEe铟嘝瓢D=w;i诮尲椗壹0+^N毬Tm訐磿3招鷓燘鳼褨 貙 N璮8h4*@d齄0馽問岌帋鰽唹梬}u迹塱劭娄MW4/贑4鸱鹹<聱s^54*#阾詽n +芕V;+ 瀣懢鋆n粢2耼79O;定磦#G心<@櫦'靍iXIF攅[霝v耦qn{C磽瑡S轙龣p謑k 鏹濠Dx焇桐mp,絞輍豱邸8 Qx 7.入%┖hK济tCaz豼H飅/o0打斻厵b~\L{篕踜獹磘殟堇n戨转T"繾z螟仒屁E榶4sn䦷T q1`<嫋蟭 傮P涥R髮腤唂椂jL垮V钱=S弭,P椡担!幦K)?V2t怪侘s[5眬頬?仧瓝k鶃H揮斊>鼌洨鎀坠?忘2.蔙? +El曻wk酏Z()n6湮硬?*毟∴飔譂砲)[6-濹z]E8湽颌k{鏅3鈯籍1<旔j:剘匳wzRi与!:;RJa 骇HXW懳wJ棞崩A勠 :B寀 +FNA蜡lj囑q誅v篢鍰A劁滇=p} 蟹O鏉s亮聛=M詓鏭↖(謌A53? K桋牜x8瀪+Nj訲臔m/un[@貶珧壔*笺&叩`H[吨/亪抙/+绷+M0剦 +4! 孏Ce鄌%佧宬p4畢<磅窘64," ]T焹@4209粙:fE%1岡lOa仜C攅摞17.冷s72攀S鬱捁 槽A愝ㄤ嶁|j8坭 9{]i颰!鐊s <駄迴--p充 `糊邛惩顒挢洮耶 踃r鈨澁.斷~捩阔,榤9.赚3葪鮚N享qk狂|剘つ沷s偔鷄ぴ7&秩H輺7R}K,堛W(熪陃濯遘靶-y3 輺:Zh.u肂-M檞霶7N梂隝輪ad鵤渾ofNp0#6蘉y揳!f!u0E{綯鸾FC 恶箽1+DAH椇G>延恨葏 a欷砭魷達墕oY|U,蹟劆<7虑 酹衹遶熃;} }a窘l;,〇N噮/ 诅 8竔MH0北 達B8屼韜)鮹蚯j銇jl脻7}O璀菵(娉斞涻鲉旇j颸"T蒢_蒚/ /d緔﹐K_翊曥0騏$怒鼺L臈A百捓酅sSX"敎,莮枿札&|&詞|7rwEp鲬_茑#弃!躃u/毩哹~a 霝蹏>1,焷緊z}滞趷mfQJ濌endstream +endobj +1150 0 obj << +/Type /Page +/Contents 1151 0 R +/Resources 1149 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1063 0 R +/Annots [ 1159 0 R 1164 0 R ] +>> endobj +1159 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [236.6531 419.6496 314.5786 430.5536] +/Subtype /Link +/A << /S /GoTo /D (a00155) >> +>> endobj +1164 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 93.195 146.3484 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00128) >> +>> endobj +1152 0 obj << +/D [1150 0 R /XYZ 90 757.9346 null] +>> endobj +1153 0 obj << +/D [1150 0 R /XYZ 194.5769 652.5717 null] +>> endobj +1154 0 obj << +/D [1150 0 R /XYZ 90 636.3994 null] +>> endobj +1155 0 obj << +/D [1150 0 R /XYZ 90 553.639 null] +>> endobj +1156 0 obj << +/D [1150 0 R /XYZ 90 546.5037 null] +>> endobj +1157 0 obj << +/D [1150 0 R /XYZ 275.1139 480.7842 null] +>> endobj +1158 0 obj << +/D [1150 0 R /XYZ 90 464.6119 null] +>> endobj +1160 0 obj << +/D [1150 0 R /XYZ 90 346.02 null] +>> endobj +1161 0 obj << +/D [1150 0 R /XYZ 90 327.3277 null] +>> endobj +1162 0 obj << +/D [1150 0 R /XYZ 90 308.6354 null] +>> endobj +1163 0 obj << +/D [1150 0 R /XYZ 90 111.5284 null] +>> endobj +1149 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1168 0 obj << +/Length 1828 +/Filter /FlateDecode +>> +stream +x诃ZMo7诫W鐴栠送-┹腁bけ P$*K倱蝵愨.E>x7<顾袱鉈R#:締痏孹w 炏F魁了qIJ王x龅睜Q滖駆鵤"梏 7礌撁臶窽tm/揿枃酮>-帆m5豁粲煺鑭鎥;窋鞋f齡翎/两W#JDi曾>P率拸oG 鸻3齑7潳a芆x褞`F 4噚p}羃8杣8埭EiU卿韣*誨W愍淉T撜|y逨a}{穀0恆,g晾*,覣m'1R*呕覨翯镖Y?1Zs"筪言-擆R僎M0騢Е + 库J$羍胉>踸7钪;? Tk;嬰y鱶窐o诠Y於誾{hf&+)妕剬&欱v憽J錗灃烟h$,閠笳纵姜n衡2縚Rq浇n抗;懚F"s:挗闯r6璒W政皑)3摀9 "毘> 懗嗘l捬0^泹=摞f(AA氟恬姲x虈纍砻]骨,悜[ 轴d+ ウ濎嬳篫7cK冣侶SRSla)N蠛)鰕Y>R史0蕷 +燨焑嬊6K造笈迮,p耬Y"(:爸D*騤〔o瘿C粦/%.2n嬄Xk莞YLM5D氱┅廚肢瞡I楪5?*,H +戠>R X%地眺n楉EW0雸:H鉌D樟$粤罰uH2岬晷闩铡O灐佪Nf/邼?;毫)碅B皌  +!璝}匚oW熺酮}*5湜虦粜壜q癱bN櫄x晒*b-蚀菨脤n舠活謴[炠Gs┠N捄荐H3亿g紊辘C玗N??qqy撼2=x B垏盯#5E;n 氰VO/v準zl#v4e` [閯乪A骖巪t+睾 蹱鹙警r 港%m镒恕澾画詀8JB笩rQ@<螑Xc靈ˊ +侌Z夎疋' 膷纍'鐥gb﹩愧0胬Z/啓鍶f忀釷唙銄)46叡諴祼%7-N﹨叆誦e必妙歱Z蔐=糸朰蹷薅澤笸n聍攣髐u鎲 絍T&|@B& 晧$鉗&^+=^\&2伕仨d恺攓:yv1族焘u笆罗廟j伊p(膵衂L2x菁譀咸88<炅衝せ扨]2d叡謏謃葆绮$刱 嫟,驤蠫'$牧lN!l\況ll>w]Cw,[珃U1赙\B2I乵 痺蟕蛹}迣z飸缭{趰纍P镲_^>隢kj:厁Z嬜!$Al}洷J讋沍搾#(36d憙Z缣"餍"钒"竃蹏潖.r╜^樚*>鷗恍啦疱z祇廡7k楫雈陣,醭拾嘸m束Hh妰抎于a縕誮髆]臙∥i$U)=9;t\荡蹡G空砧妬0笼^G譯H⑧>渹]泅b祬啩矅#{c/^=t稔缨\<遢 l0,轁鮊9劵{u&|禹藈麞鄯镒15缀鍱?)pendstream +endobj +1167 0 obj << +/Type /Page +/Contents 1168 0 R +/Resources 1166 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1063 0 R +/Annots [ 1174 0 R 1176 0 R 1178 0 R 1179 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R ] +>> endobj +1174 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 661.3282 194.7663 670.1749] +/Subtype /Link +/A << /S /GoTo /D (a00155) >> +>> endobj +1176 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 576.9176 148.2809 586.6957] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1178 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 520.3286 184.2462 531.2325] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge6bae7dc0225468c8a5ac269df549892) >> +>> endobj +1179 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [185.5712 520.3286 195.3146 531.2325] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1181 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 437.9752 204.7293 448.8791] +/Subtype /Link +/A << /S /GoTo /D (a00142_g3d4c8bd4aada659eb34f5d2ffd3e7901) >> +>> endobj +1182 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 399.3979 194.7667 410.3018] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +1183 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [196.0917 399.3979 205.835 410.3018] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1184 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 360.8206 184.8042 371.7245] +/Subtype /Link +/A << /S /GoTo /D (a00142_g7b04a0035bef29d905496c23bae066d2) >> +>> endobj +1185 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [186.1292 360.8206 195.8725 371.7245] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1187 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 278.4673 223.997 289.3712] +/Subtype /Link +/A << /S /GoTo /D (a00142_g99e43010ec61327164466aa2d902de45) >> +>> endobj +1188 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [225.322 278.4673 235.0654 289.3712] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1189 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 239.89 226.2087 250.7939] +/Subtype /Link +/A << /S /GoTo /D (a00142_gad14bbbf092b90aa0a5a4f9169504a8d) >> +>> endobj +1190 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [227.5337 239.89 237.2771 250.7939] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1192 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 157.5366 234.5175 168.4405] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2f8f70c30b9ee08a103fbd69a4365c4c) >> +>> endobj +1193 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [235.8425 157.5366 245.5859 168.4405] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1194 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 118.9593 197.387 129.8632] +/Subtype /Link +/A << /S /GoTo /D (a00142_g9e97a0b4d5cc7764d8e19758f5da53ae) >> +>> endobj +1195 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.712 118.9593 208.4553 129.8632] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1169 0 obj << +/D [1167 0 R /XYZ 90 757.9346 null] +>> endobj +1173 0 obj << +/D [1167 0 R /XYZ 90 678.0824 null] +>> endobj +1175 0 obj << +/D [1167 0 R /XYZ 90 595.729 null] +>> endobj +1177 0 obj << +/D [1167 0 R /XYZ 90 539.14 null] +>> endobj +1180 0 obj << +/D [1167 0 R /XYZ 90 456.7866 null] +>> endobj +1186 0 obj << +/D [1167 0 R /XYZ 90 297.2787 null] +>> endobj +1191 0 obj << +/D [1167 0 R /XYZ 90 174.0645 null] +>> endobj +1166 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1200 0 obj << +/Length 2058 +/Filter /FlateDecode +>> +stream +x诃Zk6_a`控罋朔葇Ks劫6qm(肭]?汈遷(4%J@\:3冕))d覍碎0劣橡跛 狈p綴MoiI錿酴 斝閖笥L"2_P乬o蟬щ楹猺s瞶5鍎! + F谭撳食Z撃p蛴/x鏭M0bZ夐鴢褮NN欫盁紵踚n襞&.: +Mp睡浑铠 舵拭VSM澬妵薤鏒潭真动簱r碽勦F狖#圔\B譶<帮扑鍿脽)唾爤B@BDQ採. Q7/6e軋靂竱/4 罭Mf喞軕盗VK叵狁;|謨仦=UXс雳 kl-防r7邈%谩=贾)囄偦緷洸q件駔楼BL +蚍t蔒,繾J裪^恮劉[鋍漹#*woV彲yM +&拢2闹骱 4;燇 ;爇梏$稢eY恢 ?瓃N荕R怵0l朑JNI堍芀糋淹嵺窈鄯g项;洀5攪9脸藀 iA"#C 旋-Ii銂*霍tL聙▉c) 読^熽恮D猍鋍R漹#,{篈/Z1p 9w凭飔焣l羔瞌RlQ '鑲'I}~ 櫱d7镃转隧泧驹3 E伊;P&灏EL +%煓>権愂瑑錝沚 r涙跎 yGd稥>&絠7"籥ж紤鄽锳皎 )裐蔽3C赸刋,T$翠钔*0奸-N脎ve輓8媤n#iO`j;-bm闉嗘昝7藯弌z決豽p&贁耝呅"裴+呜頏3J)Jx赐5昪崿厸蘊鯼清瓪憚絠覶骞4壛藫缨蝸M:qw检6葭_魐\啕禽醝_$#)鮒朕忆v姃騠猬痘 术鵧.商}u籘涙陑j⺪|PkH郲t谡沑脯Cdi飫,娉G 糽O方妃h?硭点/-甅汆掄渽謎偟#!满/瀩兕舟娅鎞軲9邘袠镁佄烇 鐴s 芨#i.?炋筷n3Yɡ\壮[撿瓮q夗*鎒鄯塨澳0舎菦巘<* 咮倍0冒@蟵鷂y厦棟袕v*3t_腭[弋U}h 炷Z爹l猆U稚3髛w▎g綰膳Jp锲-J L`%Q紈 h⑩倨 l眰倨遧蚴syó争,^Z)*%,{=\ T鹄^伕,綠跄遉Q)F 賔}nscJDu;2坼膣磜魘[_o鏹8}P哢1皤歿T"}L"Eua_σ棤咶G笏汱蒜艺!隡珒7埘#2IH;葛ud蚉7胨;兴*Ex測攙茱\{30欸躘槯+冖緹Dx弶/龓﹏<媩8S$S頶J 樗闤澦keМ 鱗w袷敹淉@嫙Q鰧怄臱趀~N澎dur{|k讶?z集縸畮葆1?碴熯螻Oendstream +endobj +1199 0 obj << +/Type /Page +/Contents 1200 0 R +/Resources 1198 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1231 0 R +/Annots [ 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1208 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R 1216 0 R 1218 0 R 1220 0 R 1222 0 R 1225 0 R 1226 0 R 1230 0 R ] +>> endobj +1203 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 703.2457 207.0905 714.1497] +/Subtype /Link +/A << /S /GoTo /D (a00142_gcd3ac045f0a4ae63412e3b3d8780e8ab) >> +>> endobj +1204 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [208.4154 703.2457 218.1588 714.1497] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1205 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 663.1387 187.0159 674.0427] +/Subtype /Link +/A << /S /GoTo /D (a00142_g905451249dca72ce0385bf2a9ff178ee) >> +>> endobj +1206 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.3408 663.1387 198.0842 674.0427] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1208 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 577.8136 216.3557 588.3439] +/Subtype /Link +/A << /S /GoTo /D (a00142_gfa82b860a64b67d25ab3abc21811896f) >> +>> endobj +1210 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 491.7412 194.2089 502.6451] +/Subtype /Link +/A << /S /GoTo /D (a00142_g155cba6121323726d02c00284428fed6) >> +>> endobj +1211 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [195.5338 491.7412 205.2772 502.6451] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1212 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 451.6342 229.068 462.5382] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge3c821e3a388615528efda9d23c7d115) >> +>> endobj +1213 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [230.393 451.6342 240.1363 462.5382] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1216 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 366.9117 206.8414 376.8394] +/Subtype /Link +/A << /S /GoTo /D (a00142_g7b5319b5b65761a845fcd1500fde4cdc) >> +>> endobj +1218 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 353.3339 200.296 363.2616] +/Subtype /Link +/A << /S /GoTo /D (a00142_gcfae9053e5c107a1aed6b228c917d2ea) >> +>> endobj +1220 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 339.7562 198.0843 349.6838] +/Subtype /Link +/A << /S /GoTo /D (a00142_g9ff1e8936a8a26bff54c05f8a989b93b) >> +>> endobj +1222 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 326.1784 207.489 336.1061] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge469332907e0617d72d5e2dd4297119d) >> +>> endobj +1225 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.44 265.1092 223.2892 275.9883] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1226 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [344.7086 210.7642 400.3795 221.6682] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +1230 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 121.7215 139.4144 144.6902] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1201 0 obj << +/D [1199 0 R /XYZ 90 757.9346 null] +>> endobj +1202 0 obj << +/D [1199 0 R /XYZ 90 720.5385 null] +>> endobj +1207 0 obj << +/D [1199 0 R /XYZ 90 594.7328 null] +>> endobj +1209 0 obj << +/D [1199 0 R /XYZ 90 509.034 null] +>> endobj +1214 0 obj << +/D [1199 0 R /XYZ 90 385.5117 null] +>> endobj +1215 0 obj << +/D [1199 0 R /XYZ 90 385.5117 null] +>> endobj +1217 0 obj << +/D [1199 0 R /XYZ 90 370.8968 null] +>> endobj +1219 0 obj << +/D [1199 0 R /XYZ 90 357.319 null] +>> endobj +1221 0 obj << +/D [1199 0 R /XYZ 90 343.7412 null] +>> endobj +1223 0 obj << +/D [1199 0 R /XYZ 90 311.1951 null] +>> endobj +1144 0 obj << +/D [1199 0 R /XYZ 90 285.6088 null] +>> endobj +1224 0 obj << +/D [1199 0 R /XYZ 90 285.6088 null] +>> endobj +1146 0 obj << +/D [1199 0 R /XYZ 221.1768 96.348 null] +>> endobj +1198 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1240 0 obj << +/Length 1617 +/Filter /FlateDecode +>> +stream +x诮Ymo6_!`_l`怿獥~k懍pYb`冖Pd&6&K濴#M龓"镱Z "<摄筌赡灭G{Q蘹啷←韨豠苶W嗤f褊4鯾46晢 A 6蹚KFW>峱垪珲 4^凪銄=g掖瘖魘惞J跃萕7讻飘uK皜h,>~妻躿防埮戰炧#窃;,8e鮇陡[1談≌ .Y呑鞋.@朒0扑_厄4稫嘿|哈p 躚1慒W鍗)W#;騷遺Z祰G3NGm銤環刦Lvui摪b,sd}Bk潝#AhTI_4KJ籩jg2邭F馺瀴y薆jW蔰嫶 鹬'! +(g暥蚽蓘/IZ)杣座$乏鮌攆h[Y哏彟_eZw鞕~p靹V>l苟驣$[紎抔k鬪秿嫢*%,4齇{祂<$*輎忷 娐8湁}K]Qsn茘67護t爸晴&湣 孹莾N4R3 噞膍B]脩@楧虇Q騗﹡癋1聵. 繘臧输 ,O痾 ;2J鑟@-蓣DPwp圔履嬛岖J園<袨\~#5剥侄S8A坳k{眾}樤装鑌泅5幋萓Yd驽なs=>侽煘#4qx81 襖M荓N蹌a庘坧hN_︽#踋zLQ隗鰺揾;毐壅ロh魕瓉聐3,轛弹x諤2蟣_3}鯏毄 +韾舧鲃t儯ぁC峫Zo喒Q 倕XY勩Yn粹#?膷璫棠u芨苳躧協LvuMscpch銂ob笴L垰u3M}lw 蘧诱垥+"朻h.燽箏槢h详?=)梫酤<摷0_緽OD*貂z鄪 a r5侭OB薪L媰茛s~檫)i:滺擖丽鵜<纾苼礑抜sテQ寢Rd{#/!&(ㄧ05b34裹 +戬悅ZV:Y; }? (舡?孉E1懬 8ヤ偤爳鬏 脜A[飜e員t曉溦灦光纇up+肾咪匲風;嵪\籉2y +浵W╞炢"o_t"簸扲 +麻5 婶  蕚 :4筊鉿胉wp屌w嵬x芋do紮\ 摁?7-K蔏LN+5~|4孭蘭 +q'胨悵婑記荸o咄淋5遢*Π1^9^[\C绱蔷迊楢毲繴8SR#娿筣蔖]XJ窲|C{oh-vI51鍫SN虡頸/( H蝶-鏥>HH:売墹~顢:n$莄歞YU硬ュ垭粛兆+帡 MG#<"4癭6切导颪嗍炥唂v蘷 +唾礻殼gnu红|++铥o +!M匓ㄍ鋟莴*k讅U齜鶯}惇腙辷IJ-ku鏭滾o洔浙夑8fIj黻拳2=C悈#G坅69窇鬏 刈ka辗7z渹i;瀻嘵 3憿栺_剢50 +i愈>ⅰo鱻硘1$~璩~趿3)劦維潉,肄2h銑v鳝蘣櫒^j魖_7揲9珲'({E-濹宮桂皞R筃 ?u载uU|}~斀8/霍/^拮vendstream +endobj +1239 0 obj << +/Type /Page +/Contents 1240 0 R +/Resources 1238 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1231 0 R +/Annots [ 1243 0 R 1244 0 R 1245 0 R 1247 0 R 1249 0 R 1250 0 R 1251 0 R 1253 0 R 1254 0 R 1255 0 R ] +>> endobj +1243 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.3618 726.9533 212.211 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1244 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 673.1002 144.6746 683.6305] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +1245 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 596.8009 139.4144 619.7697] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1247 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.6892 535.7904 215.5384 546.6695] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1249 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.9195 382.4035 212.7687 393.2826] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1250 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 264.2062 165.0084 286.8014] +/Subtype /Link +/A << /S /GoTo /D (a00142_g9e97a0b4d5cc7764d8e19758f5da53ae) >> +>> endobj +1251 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 226.0566 139.4144 249.0253] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1253 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [226.089 147.4217 236.9382 158.3008] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1254 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [492.0786 105.1501 513.9963 116.0541] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +1255 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 93.5686 128.067 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +1241 0 obj << +/D [1239 0 R /XYZ 90 757.9346 null] +>> endobj +1242 0 obj << +/D [1239 0 R /XYZ 90 739.9346 null] +>> endobj +1233 0 obj << +/D [1239 0 R /XYZ 221.1768 571.8217 null] +>> endobj +1246 0 obj << +/D [1239 0 R /XYZ 90 554.2766 null] +>> endobj +1143 0 obj << +/D [1239 0 R /XYZ 221.1768 418.4348 null] +>> endobj +1248 0 obj << +/D [1239 0 R /XYZ 90 400.8896 null] +>> endobj +1232 0 obj << +/D [1239 0 R /XYZ 213.6651 183.453 null] +>> endobj +1252 0 obj << +/D [1239 0 R /XYZ 90 165.9078 null] +>> endobj +1238 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1258 0 obj << +/Length 1484 +/Filter /FlateDecode +>> +stream +x诘XY徾6~鳢袊蔃舔筼垤6i勰E Pdlyk9;IY分mV49汏驵7I釓憟恌\蒩唭 L繕芳鮁]嗲屐嚐4覓蔪.5H%4X戼 +>滄D吳釾l薗瀚08X0/0ffg魉湿%$奇_撤飍p痜1璂~`D处羇)?龀7尺+=v∠7N/EX癭)瘮A(A垇s妤ks偯"=7m? (bu@H%軪 #&.Z 斍%g街/V絋琻昩墓怣徎 "`G鬈鮠 +腘$乾8黯G^溛Iq>エ韤蠈T`Z01灳涸pc7栾磕嚽}:82j殯2E^畽櫽-絥ふカ!隟k%f 蒫倰@'j啖挌2菅fL楖]鋟0$嘊1kw;宨+v翘1.靤克\)誺p\郄ye飇垡@+O杠瑧聭'!9(b~凡f潕囧7蟔捱她;,5UR仺鷽d洰G)Q6糄0鍁/坊| 诅,盺3吂斟謆;貾Z秒:闄會4"岟g穌 /[$Ck? +砪而;=蒽谖簵ds瘷昡^鵆倲䴗蝁端6.?n鉠礷碵Om醡溮A:'"+艺帼Ih阚&4納請C7簜|I燍!%]毳 巙梮 ?2攴楅貥DBx`猲o閾捘>窂K 昚5dwH尝庶p~狡廚 w籪eI:\I!"邎Rx楪Za87C QbAGa-嘩驄 :黻韔蛿rDㄤ-─Μv\憀w3焠P燡辒2c乘?g ,5擮湽羚r擃\湣鯸生)颋:<腎Iz0=穌hWUx蘈岺弡2C頳#≡难.5虨LJ$8揥眊 殓螶l忤:掰彖邗亏柃苞]/鈷-碕h,dV菮OL钍jo洢 +@F絃踠際h>sT蓐諳 +呦AdDL虐&6E/fx燱澱崵c觳莞)K硝襗曟F> 8减G挿r螊鎍嫂欷県"$}"'N蘵゛'慒kv轺賩$齵3P\al╒鉗àz滦貇豊q4^m?儮ubi畹F~嬨鮬裔L5濊魎⿷っ絾'農寵菌枺嫲鳀{-莌l.;趈莇據秛5汳朊!痱S8:z 廃P<鯠@翍MFS餜S;趈<陔付xBCiDL侖竷1態騜[+5.t溜)@O_ +M菗秝鱓?xe> 晤∞蕁(鰸辗值冠褡*鐭4r口巛袼譓毜#雼?鷦韊ndstream +endobj +1257 0 obj << +/Type /Page +/Contents 1258 0 R +/Resources 1256 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1231 0 R +/Annots [ 1260 0 R 1263 0 R 1265 0 R 1266 0 R ] +>> endobj +1260 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 677.3005 139.4144 700.2692] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1263 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [214.2734 447.0773 225.1226 457.9564] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1265 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 123.8393 139.4144 146.8081] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1266 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.2799 123.8393 187.5634 146.8081] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1259 0 obj << +/D [1257 0 R /XYZ 90 757.9346 null] +>> endobj +1234 0 obj << +/D [1257 0 R /XYZ 221.1768 649.8092 null] +>> endobj +1261 0 obj << +/D [1257 0 R /XYZ 90 628.496 null] +>> endobj +1197 0 obj << +/D [1257 0 R /XYZ 221.1768 486.8766 null] +>> endobj +1262 0 obj << +/D [1257 0 R /XYZ 90 465.5635 null] +>> endobj +1196 0 obj << +/D [1257 0 R /XYZ 221.1768 287.9871 null] +>> endobj +1264 0 obj << +/D [1257 0 R /XYZ 90 266.674 null] +>> endobj +1148 0 obj << +/D [1257 0 R /XYZ 221.1768 96.348 null] +>> endobj +1256 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1270 0 obj << +/Length 1720 +/Filter /FlateDecode +>> +stream +x诮Y[o6~鳢08^%猳-挼)籂k=E[幁腂e+揹べ.憞幸求)2丘G1濭"B1汜|碂狴<~9#鎢飪&嗯j銮4炃(i8_葜B%t沮~Z0 ^翽AX非,雁媩s'噅]a鵨鮶v箁糉-罛潁鷤鏪P秕 #K18龑Sfd橱晨炧[ )耍3耀 A_c鉴m泑茦虙蕻緙X席V_W]>盔. +8枒\w虍· |_褳Tヮ}#9ⅰ鄊驇]h偛+KQmQ韸%憢dLf嵣, 鍒馲O戝沷Z您罢儑%乢iU匎焚佫y7饸w>KDJX稷恟V抄vi 齴S鋤Xnv夠愈 Q$戛!Q Z< '1╟QS鱬C歟zt╀涻ě%s+ (B郢骄鍺K0Y0眞-(hⅩ;-%f K@,cBj觌糐瀠Y (b攲:攪烽$G("L湦閉S抢LK藏A,.R.:V,銮惨痭骴}8霶?Mi暜臭磕LxH珴~6こ@!棟啹肙,/W-R收跽JG-e"涭PS*(&mn弴M潱k圮$穣慩毹鑁O0hY{*咹(B氡趍巈tVSD幤澋qV林恥)謠垥v[#钲乱憔鍻蕜擂噽揊楋P烏穫哹9樈批$<=L捨m睳隅*r搉霜8n猚憼a驟!鈧眽╫缕蘤aj豣fPEd雃定>s踭帏P誨泍e3VhL襊U┊|wuwS::0q1晻洦aG嚾傇a豺(晃蕓南G9%0蟣n8Z|袦鄆銁rZG!$腽w{G嫐b鞩kt彁v鄂 6彙e淹#9縴t鷊]蔜.,嶪鋶^QAL唘WNe曶&UN恖煢/媝"?浅H5淓8a圗\濽.} +屼秊&颼錼tr賍糠\禭M筪癎6a#fs0}0邦%鏟诼( 法>y踷p飞O觠1杪L`駚儴s&j貐Y肨W硭飇u4q1瓿k`_Co t0モv饭郀M咖戉坮\晾ˇ▄礜q悾 聜1yzQ潋gE騽Ⅷ嵴諞Ke +E∈4&($毤M1鵂9罻灪r囶S簤6顱艩{:Eq2淯牐M~6N潚豤-希 LSm鬈 *8 獁壈満Cs鵂9羢钌5=5C骙{MK瘞78詣6}i.r}檾B菕篑L贒 gRJ螸-|j3郤`お4馱5沨Fj6-謃 8BLF紷5b4嫴滰彅B$3帗ZP彺S` U8nt帱|~ Uq鑐霹xui㎡奨皱6BL<'w犖"8鍁u脾{隸qaVj掣|\ +盚{!r[潲ND杆餘x淯N魸=炄|A><$Er骽顯瞸I9鏠镙躆R栴晪桴7曫,C掇榓z铻*#咦+徏 ΝoE涿V齛N!鴼[ 11㎏L!u(#縇I碑鞈于/;x$N&嗵料({F7<妐h鯥Y67旗斐{p糑z蹴蚦剉endstream +endobj +1269 0 obj << +/Type /Page +/Contents 1270 0 R +/Resources 1268 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1231 0 R +/Annots [ 1273 0 R 1274 0 R 1275 0 R 1277 0 R 1278 0 R 1280 0 R 1281 0 R 1283 0 R ] +>> endobj +1273 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [254.4125 726.9533 265.2617 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1274 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [344.4185 635.8929 389.5689 658.8616] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge6bae7dc0225468c8a5ac269df549892) >> +>> endobj +1275 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 536.6764 165.0084 559.2716] +/Subtype /Link +/A << /S /GoTo /D (a00142_g9e97a0b4d5cc7764d8e19758f5da53ae) >> +>> endobj +1277 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [248.3253 477.3718 259.1745 488.2509] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1278 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 347.5941 139.4144 370.5628] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1280 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [251.6528 288.663 262.502 299.5422] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1281 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.5441 246.9287 410.4453 257.459] +/Subtype /Link +/A << /S /GoTo /D (a00142_g99e43010ec61327164466aa2d902de45) >> +>> endobj +1283 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [216.8635 135.3029 227.7127 146.182] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1271 0 obj << +/D [1269 0 R /XYZ 90 757.9346 null] +>> endobj +1272 0 obj << +/D [1269 0 R /XYZ 90 739.9346 null] +>> endobj +1145 0 obj << +/D [1269 0 R /XYZ 221.1768 512.4758 null] +>> endobj +1276 0 obj << +/D [1269 0 R /XYZ 90 495.858 null] +>> endobj +1147 0 obj << +/D [1269 0 R /XYZ 221.1768 323.7671 null] +>> endobj +1279 0 obj << +/D [1269 0 R /XYZ 90 307.1492 null] +>> endobj +1235 0 obj << +/D [1269 0 R /XYZ 221.1768 170.4069 null] +>> endobj +1282 0 obj << +/D [1269 0 R /XYZ 90 153.7891 null] +>> endobj +1268 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1286 0 obj << +/Length 879 +/Filter /FlateDecode +>> +stream +x诘V逴0~蟔i/璂=&糾!浐-{@P㎝4疬镘8i毟-4!a;>猾璃~H}-5 筆~拣劅/<佰# >F摞O,鬋*鑡s"0?氜佱圛:Cy櫁惩,橪W名枋 錤 9昆滸 猽Jr髼w{O):w錛旅@笭聬 O0^/孓w飇sO当9鄪M0+顝"劼iHB!蠬 櫅 $凃5青4浶艭爟I1Y$eR琋籷eDs泣稣=G刖'8輟T \no5,:H"斷N-jm鍒煼Q%BH祴J卐瀎菮(s;籟TI R}報,騳礨暸:.譋B允█ 4<,_踛縷*4醔锵_&嬪<+&筁抩鎏椻蒼}蹜帐屦惢dm虒嬘Y紝I躶D@p亓Qcu 簑泚掼乁T邅$慼硊栜Q什碙蟋RqRV<同,ふ$現sd^If淃;2a7 K]韬M慐J铴d=躙瀇=]^逹I41)=0+茐f!;c?j鑗S^w 2 !t;25V荘{該ΖXR垓嶡 6s餱( M娑(媩q琾譟欄矟la[i惽窈X憝d?$Z肃p%翻鯳材4嚳杳嗄咦嚵釄7fG凌穧境餇>讥OHp閪I磆k63<赆b荙n1眿珍4塡=k輓{,]賐Yg6霟庸%駏[O.贠ze訶瓥I湚顤L潟 6&篚V憢u%渋0!捃9讥Uw_p 讴 E贏UB鉵4  +最妱跛:a"紿菠@f,u笩肷$R_-賾2~蔿鼘Re6L缍捴梒kM献j<薩^煉琄從G?q寶jendstream +endobj +1285 0 obj << +/Type /Page +/Contents 1286 0 R +/Resources 1284 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1231 0 R +/Annots [ 1288 0 R 1290 0 R ] +>> endobj +1288 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 680.3578 139.4144 703.3265] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1290 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [253.3962 620.7106 264.2454 631.5897] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1287 0 obj << +/D [1285 0 R /XYZ 90 757.9346 null] +>> endobj +1236 0 obj << +/D [1285 0 R /XYZ 221.1768 655.9239 null] +>> endobj +1289 0 obj << +/D [1285 0 R /XYZ 90 639.1968 null] +>> endobj +1284 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1293 0 obj << +/Length 1738 +/Filter /FlateDecode +>> +stream +x诃YKs6倦W(蚑(鷸莆k75!蓌h懖9棨遷A鈶G掄b耥罘媴H~d溹q蘡敯H呙疔1痝饉 +1&%倞駖賙qJ鑨瀩01漄塩鶛K8u黻G簢3ZS ̄鏓鱜5"X'+殀颜蛽Y摧:+@孴fi_戅C^io攜赥Eu療篫_砛y?5/隚=竾F桚R\髲2A'""D 玣f{剣 $e蘊+狔銌幚蹐蒱獹-鲘R究翃)測W孭"伌X縎#徒y跖罞 "埼薯牷季l蚨.得"ATP?軝耤 Y"W鍬栢HO N踒鎥,硤z虗Q8N鋢坻w謯)斜$7蘕吤楾K橓I嘶伯-蒴濉n*])ief琑#Vt*4冉稏"M程`l!+碨改鷲 灀$e箰c璗惏幒躇陣f臷h7熸茝W擳}哝Uv劥 p嘺陜<ZI!392 Q諬 宔2炣吼O阯> 箺V鞷1W崀n熢]建嵻7瘫r\I[}万o覬裏==殡7%54 鍄J焨Jdzp摎﹋縋W遘<魉U踛迤嘉>旘軌Pm妢g3鱹斟M晈Db3^$圖擛LI`怕Y(彾L +M\║膸w麥%ぞ励R-v裿怕*趏}引枰2r燒恳伆槪 堵?N劭&x,"惓B稧O +g訠ベ(4q &蒊bA{W隯~瞵粁H扇"āT瞽{:C瑋羴撖嘁鳛賛 淙/.魺j藑LXN覃b + LX紜潆沲拯蝣鯚護n?究菌xu0鲟觰1缞郲補輥詈~飕+ #8衶忀, +饎DwP#躰(c$敡V*$G葙{s…屙a7(4豐嚒18,C鞋 m/勒zi(-帣l洗^(\巄姰 囎Qx~|昏鰻{~堼鑶昏鰝躝玿俬L黨罧F +9旂c2嗬Z滜氮 a郉7(墮鞆o&DL鄇 }沇y芿珆7T嫹6剼+緺靷sca:o鯈琵偛镱蓗禁鵷|稴,4荎呹A歟ndstream +endobj +1292 0 obj << +/Type /Page +/Contents 1293 0 R +/Resources 1291 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1231 0 R +/Annots [ 1297 0 R 1298 0 R 1299 0 R 1300 0 R 1301 0 R 1302 0 R 1303 0 R 1306 0 R 1308 0 R 1310 0 R 1311 0 R 1313 0 R 1314 0 R ] +>> endobj +1297 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 605.7915 170.2586 614.6381] +/Subtype /Link +/A << /S /GoTo /D (a00160) >> +>> endobj +1298 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 566.9372 200.0265 575.7838] +/Subtype /Link +/A << /S /GoTo /D (a00161) >> +>> endobj +1299 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 517.124 167.3395 525.9706] +/Subtype /Link +/A << /S /GoTo /D (a00162) >> +>> endobj +1300 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 476.9297 166.1639 487.1163] +/Subtype /Link +/A << /S /GoTo /D (a00163) >> +>> endobj +1301 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [332.9003 461.5917 379.5448 471.4969] +/Subtype /Link +/A << /S /GoTo /D (a00158) >> +>> endobj +1302 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 439.4154 158.5425 448.262] +/Subtype /Link +/A << /S /GoTo /D (a00164) >> +>> endobj +1303 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 400.5611 160.595 409.4077] +/Subtype /Link +/A << /S /GoTo /D (a00165) >> +>> endobj +1306 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 316.3067 204.5193 326.6527] +/Subtype /Link +/A << /S /GoTo /D (a00143_g54a466311575a727830a92a6c3621cb2) >> +>> endobj +1308 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 302.7973 215.5877 313.7013] +/Subtype /Link +/A << /S /GoTo /D (a00143_g5eced097547fd3fac4ba2a255493d921) >> +>> endobj +1310 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 290.8222 133.6164 300.7498] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +1311 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 290.8222 225.7693 300.7498] +/Subtype /Link +/A << /S /GoTo /D (a00143_gd85fc90c30d1fc37c63c4844be5fe09d) >> +>> endobj +1313 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 277.8707 133.6164 287.7984] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +1314 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 277.8707 210.2674 287.7984] +/Subtype /Link +/A << /S /GoTo /D (a00143_g41bf109b6a45328d5744c0a76563fb6c) >> +>> endobj +1294 0 obj << +/D [1292 0 R /XYZ 90 757.9346 null] +>> endobj +649 0 obj << +/D [1292 0 R /XYZ 90 739.9346 null] +>> endobj +86 0 obj << +/D [1292 0 R /XYZ 90 739.9346 null] +>> endobj +1295 0 obj << +/D [1292 0 R /XYZ 90 716.7484 null] +>> endobj +1296 0 obj << +/D [1292 0 R /XYZ 90 622.6841 null] +>> endobj +1304 0 obj << +/D [1292 0 R /XYZ 90 334.6987 null] +>> endobj +1305 0 obj << +/D [1292 0 R /XYZ 90 334.6987 null] +>> endobj +1307 0 obj << +/D [1292 0 R /XYZ 90 320.2917 null] +>> endobj +1309 0 obj << +/D [1292 0 R /XYZ 90 306.7824 null] +>> endobj +1312 0 obj << +/D [1292 0 R /XYZ 90 294.8072 null] +>> endobj +1291 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1324 0 obj << +/Length 1594 +/Filter /FlateDecode +>> +stream +x诘橫徾6嗭z▆0"鳀v稟H浗%A牭够B齍Yn綜憯)K&誦 ,R痜喢I 脧d +g/恇谷V螢狕韺港K缚 ?呦~鷷狶!%ㄈ[ N 皖谉迸抮蝵镬cM鋭嵎戜j╫$6A 朴 M6 R湻6! 噢貲腨秸MYm糈Z拐荱]Z持 fh幐6贷g齩挪鯫阶莭m/幒i-鸳莶┒N}(雛];3疹瞒翊zv溎)纂Z忷埉鍐#)ou玀 v8倛 摣鴨鄣a喕L鎔;漆gJ/傖)蔣躢鲊祂槔y.PA r彳塥煖鎻0 疧1発8U嚡许消cc2 +m擠蓌&:U"劇刀0瞧7鼡aO0nh&0FJI+^嗞6 +3 Q埣M o\(继D馫7灼珢+胬碍?ze錴L地孤3赔被 兡舻=膟!/;Q锍躋砝c煨\佤H?E&卮L芞遡⑽/-M厵肒擿Iα#0w2袍f/瞈炎仚 $ +8{Y枥` 楦晷瑊围c`7槸柞鴏 3BH<*佬赿)A斎墊熍1紳j|猑肭虼q吊"珞 *?.rX榎!噥M"y疇 ;Y蛐`騽_y蟧蚓 ' 唛f[R.QA槍'%"Z汮y. b碢0;8.%W赏 佝:鄏仱R┡F'K寔髹鷿n嚣p鉧 K弅3E Bp隩喼&s韫b怍猚躾嬴蜚'队9 肿+戔芩覝c溓齰渿~'p辳>咉x鏦'h吠&饧i孏06t硛蓩b"鑱:簵崈灇l箶騏萫夆 r;Y捾衊勡刜On蟧氒倔 & =煝9bR饃":U"偂5O甆∷`7'`[9 軵A窊祂媰^U^.緝珃缌~f琉鼦镾3 r鉅 蛰a禊p g劵砓wrJ粨S菗=9莜N[絢枢霻]?;m u嚢g6頇f繙h疂蓲雘佋澾~钔蛆|鼱t怹&# +)r譳杹hx/汤辑%a6m|䎬鱢乇 7鈤漻th85f淹;&幈Iˊ淨m{'67!0碂虸祥H=-鎳}祪譀倶7{[Y?僀u0複ml瓦 !cU杨戠逸鸙m6鲫凛3hm?远绛畒禬繓[h蟝Z赩魜 + 斸%羌Om;桾耭`:(悰蕛O +怠烥zF鉉1母; 癈婩嚃?洓:歌凷)'Z"糪腕'玅c赛w哃>@%L.[暬Q诳|8Ce]/鲵蹋駘L.阠c 鸘}邈0嗅30嵹鱩鮏)磚壕L慘傹Bd > endobj +1328 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 613.307 210.8161 624.211] +/Subtype /Link +/A << /S /GoTo /D (a00144_g12b467f314489259dd718228d0827a51) >> +>> endobj +1329 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 573.4169 211.922 584.3208] +/Subtype /Link +/A << /S /GoTo /D (a00144_g20bc87e5c063c3f4b01547be6e5a0148) >> +>> endobj +1330 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 533.5268 202.5074 544.4307] +/Subtype /Link +/A << /S /GoTo /D (a00144_g41d37ea1e3bd24f7b51e9409aceaaa80) >> +>> endobj +1331 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 493.6367 209.7101 504.5406] +/Subtype /Link +/A << /S /GoTo /D (a00144_geb79c914cf137e6d27fd7583e5a66679) >> +>> endobj +1332 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 453.7466 203.6134 464.6505] +/Subtype /Link +/A << /S /GoTo /D (a00144_gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c) >> +>> endobj +1333 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 413.8565 210.8161 424.7604] +/Subtype /Link +/A << /S /GoTo /D (a00144_g5323320b7316647042016f17c4e881be) >> +>> endobj +1334 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 373.9664 206.3828 384.8703] +/Subtype /Link +/A << /S /GoTo /D (a00144_g30e827f33eacff55ecb4d8fb5a11d5d1) >> +>> endobj +1325 0 obj << +/D [1323 0 R /XYZ 90 757.9346 null] +>> endobj +651 0 obj << +/D [1323 0 R /XYZ 90 739.9346 null] +>> endobj +90 0 obj << +/D [1323 0 R /XYZ 90 739.9346 null] +>> endobj +1326 0 obj << +/D [1323 0 R /XYZ 90 716.5154 null] +>> endobj +1327 0 obj << +/D [1323 0 R /XYZ 90 632.7749 null] +>> endobj +1335 0 obj << +/D [1323 0 R /XYZ 90 334.9631 null] +>> endobj +1336 0 obj << +/D [1323 0 R /XYZ 90 308.245 null] +>> endobj +1337 0 obj << +/D [1323 0 R /XYZ 90 308.245 null] +>> endobj +1338 0 obj << +/D [1323 0 R /XYZ 226.1581 201.4941 null] +>> endobj +1339 0 obj << +/D [1323 0 R /XYZ 90 183.6017 null] +>> endobj +1322 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1348 0 obj << +/Length 1499 +/Filter /FlateDecode +>> +stream +x诃X[o6~鳢0`恬.﹠手甴]浄d媞勞+KK箫wx揺轀,E垟9}<4I釓 "ql l狨q焀饈5z覃_4 擧*冸[鉇$(×u9d駌Ec岚ya踴_f蚇裒玶屿UQ^睡罪鄹.-$裃/>臕榻[`膾X餍翀$ N欙磣3`lv溌蘠聜昻 u直@樐Ba=!ab疣() 紤皮7!筒軎^$漆]y瑄9竉%蕺跊|陂悧}磡b2嶪2:6誴9a汤梟皥槍>, *莴ZUS1JG$襔3磽 ': >旲衂 篮q皺pr +X嫇餚`@.硭>蜽Yp擞% 姿 w蠵n餧Z踧鼯ng[k黜 苩稴檥蕻倔c晑礽 +4磠p莶蠧稭e苽燦睷#2t[q7(喌03|ヴ"7z45 聅N磤敺鰅2ua蜠鑡 + 楩X2H"(b%鼟俑''汓叒鏖駴婢Ыs涛 O,M(棸 歊寪 1:瘲撏碯D$}抁喠g匆薭\)舞fRI蓿镈疾悷"淏4揘嬠Q堣(d鞾鋞- h璘噈V兴 ogt裖w雟专s稁蜮9r埲s銨;r嘤r8:珅%xO5d曛P迟/U倮R"<7綿w鲖1醦 ! 议ZM媷脬a麵K`F>僉詺]斝,' 曆Y軣$$(uy表褷菲 嬫4+GRF+:V3 % -梋V轭X螑b&>'=l块7罩}鷛FG厬4(e假鵄Ok针,W}%P g眏.d鏳E 鐝叽 lZbv觽#珿B=緢:∕=ZU7调WK幟?嚮9LG@傻躐F謻䲟V`邐R+榫|,軇p簓抪揤絩UVY_站緐猔i嘋淐Yd珂z&~%聺;7昁+讵BUi睃遦m椪穠w8G 哆I 鵁讁莌Z4&圧n锊V雨 z陂QGU氕,Cr K聖憨J, s╢qx魟T问44:楢顳杢(瓴7蠷%唺h筨X唎潧MZ^冩h<趨s倒K嫮:∶,6敐^y*彵赴珯礸q&'骅邢d拣穎:5Zl%橤牭佮简 敯XW挺'GI塝/股*宗_Hs枳W9剀o芵F2榴> endobj +1352 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 411.5145 158.5126 434.4833] +/Subtype /Link +/A << /S /GoTo /D (a00148_g87f0b54ade0d159fba495089128a4932) >> +>> endobj +1354 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [217.1221 221.3274 271.6871 244.2962] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +1349 0 obj << +/D [1347 0 R /XYZ 90 757.9346 null] +>> endobj +1344 0 obj << +/D [1347 0 R /XYZ 226.1581 652.2086 null] +>> endobj +1350 0 obj << +/D [1347 0 R /XYZ 90 635.97 null] +>> endobj +1342 0 obj << +/D [1347 0 R /XYZ 226.1581 538.4468 null] +>> endobj +1351 0 obj << +/D [1347 0 R /XYZ 90 522.2081 null] +>> endobj +1345 0 obj << +/D [1347 0 R /XYZ 226.1581 389.7944 null] +>> endobj +1353 0 obj << +/D [1347 0 R /XYZ 90 373.5557 null] +>> endobj +1341 0 obj << +/D [1347 0 R /XYZ 243.8616 199.6073 null] +>> endobj +1355 0 obj << +/D [1347 0 R /XYZ 90 183.3686 null] +>> endobj +1346 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1358 0 obj << +/Length 998 +/Filter /FlateDecode +>> +stream +x讠W[8~鏦DZi駔|媫狦Z┗瀛r *$,劧邕w対U<`倾檕>吓唸"C&膒、錸B5~~;銁x禈73!F1-蓘E嬚签"|3IЁw镙`Y(e胗!瞤N乓螏8諏)7诚孄蓻Ec躢揬5溷g泯n磳~鄤0咵粔`紴l'&6z苈y脴媯x蹃酹%5愔扨 猜悆刔HQnO(淚$ s树_騷篫綯砐Q:点謐T&夗J~㱮s 泝襰3\俧!B 賚>f咋x崆}鍿B紫脴胦渆K*p栜&}d}<宼{,G/\穎謣榭蜛伾G嶜V[V@0W #$*妝B7暼2垝7?虞~并ン窓%矕缠V涘~It\:.n刵仨氩v媯c6瞜窈系 踼v69u镆钾栧>W8=靽\0靯F嗔喐h劼x綨5'欱駾R 鶽儰敡j墕 /峆褸梾D螡/娆V亯,1 碲胩^7婞r貶+骺 _聙猲懙[稐2K6g 4χ"^1DR_uf {+g稶Y礙忂l%癢袒姍 \饡6^沇C}慞鸽弱諙篰{i嵯j郼 |d紒7b7x悁K20诶;v |貥輻3&懛<齔G^+L灱X魑6茳星p搐 0晘NvmV嵷3粇惇F +|*坒R?疥H鷶憣^M)%誳綇螐<峓w*兟*纔 o"梅\厄蝬鞫_滭X]q縞F黗<艮孈监譍狐螉>=鉰劅_譪N閑ndstream +endobj +1357 0 obj << +/Type /Page +/Contents 1358 0 R +/Resources 1356 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1340 0 R +/Annots [ 1360 0 R 1361 0 R 1362 0 R 1363 0 R 1365 0 R ] +>> endobj +1360 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 624.1462 158.5126 647.1149] +/Subtype /Link +/A << /S /GoTo /D (a00148_g87f0b54ade0d159fba495089128a4932) >> +>> endobj +1361 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 586.5419 139.4144 609.5106] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1362 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 586.5419 262.94 609.5106] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1363 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.8054 586.5419 416.0743 609.5106] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1365 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 429.2598 158.5126 452.2285] +/Subtype /Link +/A << /S /GoTo /D (a00148_g87f0b54ade0d159fba495089128a4932) >> +>> endobj +1359 0 obj << +/D [1357 0 R /XYZ 90 757.9346 null] +>> endobj +1343 0 obj << +/D [1357 0 R /XYZ 226.1581 562.108 null] +>> endobj +1364 0 obj << +/D [1357 0 R /XYZ 90 545.3808 null] +>> endobj +1356 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1370 0 obj << +/Length 1193 +/Filter /FlateDecode +>> +stream +x诘X遱6 ~鱛鹡b 櫱.i/箄铹殄[It-蠔踗鼲墧eQ盾踲yiA"%2! 蜄#洁G区礉M碻騢兜赉h E地氡揮[@m%?m睉矉a≧噕縉<皪0瞔>诩8櫥6 +/?"衚Q祢酰=厭(-藹荚恗牪c麃J辏kO!!叅('篠=嘠 莔 +墹慒$JTH皒hb鬪i卻矠' C04>PV8毬2涟i)軋 [釅半S頯 +>#Pz} +o2_A90槦啷喬k J藥y浥乚- D姓[詂P 揝橠焩綉0[ぶ譕棴Dr燘绑识-}爈 Tc顭嚡%輙鷠靡昤,訔欕司橾:3Q訖[姎uu耪}論w但梏X讎専}L1!芗恛抨蓥地-'7桃E3敜鍉

e褌侶芩e0楲緘缱2濤-'"亪嶁Io鎨「-Nㄚ貍C]vm*锆晶缩"踍劑臜4Ρ!N捞K>剣-辽5bb69產扑4_-奲怂8莠,` 撋@H6 '珋i絢齢h!佫摗)vet877R˙mU]f銜0I鮸r=P蔿e鳥髤慈W瓳Pm(=P?槓)痊窉锊鏻摥f櫕?畂咕焇齴軩a捷搤栤蘶M誦)v敟|n*lW蓳硤 FいC硲徾/匁=1曖!'芅挟l巷纏=0b齁猀'鷺;伡另22};わ]H辝咎篊欅`脷麾9'舚;'呕@@$絎#屵0阓Tc黄W$÷飤[ _碬妘鴆妒6i閮虢7枽vn听宊0w%偵N鹢镳钿橥哌^侧颇^e鬌endstream +endobj +1369 0 obj << +/Type /Page +/Contents 1370 0 R +/Resources 1368 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1340 0 R +/Annots [ 1374 0 R 1375 0 R 1376 0 R 1380 0 R 1381 0 R 1384 0 R ] +>> endobj +1374 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 615.6894 166.9111 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00145_gc48ed5f0d27721ef62a3ed02a5ad8d2e) >> +>> endobj +1375 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 576.8351 180.1912 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00145_g22f140b02c354dfebcc7ad481c3bcd68) >> +>> endobj +1376 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [184.0068 576.8351 208.6941 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1380 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 414.8106 227.254 437.7793] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1381 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 414.8106 380.3883 437.7793] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1384 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.8969 339.5315 225.6901 350.4107] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1371 0 obj << +/D [1369 0 R /XYZ 90 757.9346 null] +>> endobj +652 0 obj << +/D [1369 0 R /XYZ 90 739.9346 null] +>> endobj +94 0 obj << +/D [1369 0 R /XYZ 90 739.9346 null] +>> endobj +1372 0 obj << +/D [1369 0 R /XYZ 90 719.4886 null] +>> endobj +1373 0 obj << +/D [1369 0 R /XYZ 90 634.6393 null] +>> endobj +1377 0 obj << +/D [1369 0 R /XYZ 90 539.515 null] +>> endobj +1378 0 obj << +/D [1369 0 R /XYZ 90 513.03 null] +>> endobj +1379 0 obj << +/D [1369 0 R /XYZ 90 513.03 null] +>> endobj +1382 0 obj << +/D [1369 0 R /XYZ 224.9827 374.7449 null] +>> endobj +1383 0 obj << +/D [1369 0 R /XYZ 90 358.994 null] +>> endobj +1368 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1388 0 obj << +/Length 1934 +/Filter /FlateDecode +>> +stream +x诮Z[o6~鳢鸢k8^D*皸.m慴貌6輤犎J"詵RYj緾馼阞Q胍mI嚣xx>^Le寳廝虃p欘xy穇/垀|螼\缷嬇彲h紝Q襭yq踆 鈹绣沛r">瘹硈鮡摥 _}斡L_W鶜嗾g鵢V﹞稭懼yY灬R劕簿簒硏ya筯獪匘2讣滤 P~忱埮/#莟筟敊嬳廨鈝kG=h岝6辝 窩M) r篖0>CO 俠蝃w,9.袾N:煞貴Y9亡i?HCsF绦Ek璡躦鹟p窵*}抠7_#鮍d酰d_Vmi繈騿旄韇┛銭漊 x,钤嵡季? G锹"喢疙纈cZd麘a8鈎5╪Q繢p#~爺鱹 (g-淑炂8 粇窟铻!奾Dz五jNc藓4 轌c`W襤驀爰xh ) =10(燇伒6鰳c#螟G垁y,PHi浜>q-帡凙鋵孞缯:喃2亡F&匢绱苜\~H5奴彮竗t敮圥21蚖% 墭瘢商#财虛鍹f奏D2{鼩d铠's座宒鲂5牲怳y股8BXD凃X3鶞朎1櫽Px杼渧蠸9m`mN瘏,A* +*}YnS诰铬踎蛭趥吧:棧/yR4稣>赸6癁D!虉稞na~I8$1碜J迈;C鐂$1Mc`譎B淼,蛧贻's;DL&#bQ*Cku $  1夋喦鈣v蒺 T =1(燇5辄Rz綛u瘬Z K畲毒鸌}?;傀鶙咿<{﹢(8a崄鵈3逖痛_+罪 裻溝4崄輣i觕擛月`:!16粯`啫\A+&z獦楽L燴靦-鶈旹7x(叟労ㄋ^召譛撝M礷血]=AL嵸釉 挨寎登录2r N热阕权阕/.2蛐氐2*粉q 怯q(仭倒?鈩蚛c歌 Y榙6k>e鸝}Rw=╆4屛葅凈浣浭{罪尲8煋饔4vM7涖K +鼻剳镻X攪眯陟試E|f鮬裇﹐`_yz﨧$罤愷i嬪圍陚咵~}X浯>\貏>:~:煛崄1}屪噣 聕}2!26W$L槺3雰嫗墔"y忾0&3#銧韱鸻つX粫ⅥX莟昑yr f 剤徘鱾]罃. 摊 6%鹍cT閏g针瞜孽p棖QRL&貿8虺c倕棟羥賮╫&is; r岓錉Y斚}(gx肩.擾三禀濤躜zu,oaIg3笾EO(诼)L飫伂eE年諻波燩唫x&g=5 +/f.⒇=Q{簸+:z*觙瘬9|姀>祐!帧亘P槂w豗褯髎6孑Myi +wH傽D64L]&毡濼婾歭鯌沊=辡Y唠禽冒x0L憝室蘺&赉繷Y涵蔧蠙s囍'宷揜澲γ砣獝[茇=饬q沮5j}聈48敔l瘹銭夕+v誏_a櫵^=B秿瞐踤斥N B壔钇&p省禡Rij簷f戝$6觲?Kv氦宖藷z詨1@:iC`X0鹓Ti.拒塶Q6鮉侉恀飯镮=锘钆x睾s.K #陵L7貤蓃圢D;裃wZ槔缇u5W"|盋 咣阂勱-xP攠@谉r羸/4){E/# cf?勖7蒝焜K茐濸彭緬l蚬箖搗n +?7抄鰁S鞔躣f蹇-e揍葘L㖞 D?窭饐呪逿磗*M`漆楳G碴莺$d館gEV%稛& 繗/o潲а勱O鼫茬+妐–)鹡&蓝挠蝻/w賎)!1榵鱊endstream +endobj +1387 0 obj << +/Type /Page +/Contents 1388 0 R +/Resources 1386 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1340 0 R +/Annots [ 1392 0 R 1393 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R 1400 0 R 1402 0 R 1403 0 R ] +>> endobj +1392 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 611.3557 185.9198 622.2597] +/Subtype /Link +/A << /S /GoTo /D (a00146_ga4360412ee9350fba725f98a137169fe) >> +>> endobj +1393 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 570.6172 198.084 581.5212] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +1395 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 529.8787 213.1775 540.7826] +/Subtype /Link +/A << /S /GoTo /D (a00146_gfd5ebb56a1bd1da9878aa886a2075e80) >> +>> endobj +1396 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [242.9955 529.8787 285.9441 540.7826] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf703683056d2bfa5c81fa157dcb20fe2) >> +>> endobj +1397 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 515.9852 222.4327 526.8891] +/Subtype /Link +/A << /S /GoTo /D (a00146_gbaf0bb2b6a4424b4eb69e45e457c2583) >> +>> endobj +1398 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 475.2467 205.2871 486.1506] +/Subtype /Link +/A << /S /GoTo /D (a00146_gf20aaf4292cb0d2a1b10bc0a568b51fa) >> +>> endobj +1399 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 434.5082 218.0093 445.4121] +/Subtype /Link +/A << /S /GoTo /D (a00146_g2c64c8c36bc84f9336f6a2184ea51883) >> +>> endobj +1400 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 393.7697 242.358 404.6736] +/Subtype /Link +/A << /S /GoTo /D (a00146_gf5c2ad5acf3cc23b8262e9ba6a15136b) >> +>> endobj +1402 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 306.5867 133.6164 317.4907] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +1403 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 306.5867 166.9014 317.4907] +/Subtype /Link +/A << /S /GoTo /D (a00146_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +1389 0 obj << +/D [1387 0 R /XYZ 90 757.9346 null] +>> endobj +653 0 obj << +/D [1387 0 R /XYZ 90 739.9346 null] +>> endobj +98 0 obj << +/D [1387 0 R /XYZ 90 739.9346 null] +>> endobj +1390 0 obj << +/D [1387 0 R /XYZ 90 719.0647 null] +>> endobj +1391 0 obj << +/D [1387 0 R /XYZ 90 631.2478 null] +>> endobj +1394 0 obj << +/D [1387 0 R /XYZ 90 549.9141 null] +>> endobj +1401 0 obj << +/D [1387 0 R /XYZ 90 326.4788 null] +>> endobj +1404 0 obj << +/D [1387 0 R /XYZ 90 266.2048 null] +>> endobj +677 0 obj << +/D [1387 0 R /XYZ 90 239.2959 null] +>> endobj +1405 0 obj << +/D [1387 0 R /XYZ 90 239.2959 null] +>> endobj +1386 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1414 0 obj << +/Length 1818 +/Filter /FlateDecode +>> +stream +x阱X{5?"J(1~祗J+=鑅8赥嫡i搖{籥=膚g沏蒽&沑K)Bg=銠駒<b提O孋>鯹焻蜀扑懓餲]伅纾/緯8d'今|e4x偣R锐<~5q鋞&铙I}qに'俼"鞠:誅?蓷鯈为↗騦鷉t>o鞿穃 代腓>幜絞#蜹搞[L劇邔弔鬮鬰珖f佬 3 蠍 u梣 喻.嘂\榵勌1n0&u步Nu6漼淥Q敕蒖荅騐综髤rw谛鹋 +6N铗殘ɡ磲撣"⿸lm{ D覞`腎鈔:β濊俤狹T昳桪~踯j厘* ]枻夤.蟠6{\y/s蘆9頷o①歒騰-\Qg&泟`‰R蔳浼)9悍z潍.2]}N n4% +}'F 颵犻[轇B飭秐U洡$jUgK滧 偦鲾嘚&t >摼镯碽>夣*4m朝_~K勢E棘妟YQnQ]m7qa/燩<"&犚9綫鳈a9$蘡讖所)jX垣W鼚儋f +O27湮A嶝痆诋賣冲?F!(城蛰制钁蹒辄囁yqu}>: +站ci +(徾$;56o朶骨∨MK搠9l诀 :麼G"u鋚r$lgON]┿嚀$劚x㘚t矼uy>2箩拿瀊mY蟵账濷瀋瓨 5Vursv%Y氱圪mRmf捌l癸笖摦O蘘﹞\:詥.3%殊隢T=隚C邮哏莵迵}>鍑P哎8漋怠W岒[@2 夰D挎\f塃艎谠QHA理┚4v,{ 2埙c莄. 偯>袠蓍皋"摄d夳u檊Ys\鞰戙崩#0we憵m/浯>;)d橿頵毮p'I袘x,,Рx!玱`\譌憦<樾,X蠾渒跲绤#篈撷鈳>;嚣炵 T蓫.JLm箒3T =37Ns .b䦛%h禝昰Vn)!痈忎,繷錔優0&H﨏侍E +潫妷;寀#侼61@ +電A 掬ⅱ^雲?d滋 萘粀V甝I槢H[槶窞簚 ]ky岎肛!Kj>j餭菊Y?闂i^陎0 ~I卉J劃|李BWu戓b*錍v懱MtG霱44E陦2伮比k\8燧F薩q}哜Gd/篇pJ]袝{摓s& r.袕殩 鋚(iB欎;phc&eN邤硇褳阖鮁E-R68ギǎ +"i7 邆蓺; +;V躏喝!疶壙币19m!a5勺腜 +梁靅Lv﨟a4瑥I锒Z8J蜅 禳鎳怂桘郃驇俺{$濮!9灷96籖茄p +#-浃佥  唋毗o! +d┤ 翞蝃#韀 +|V"l-聂@M貒"Ω掲儡V~0(菇鈀胃陷=p瓡合 _盤鳱邖 Qi歑惦@濎!@炝]偒翱郎:z7鴨瘟i峁=d泧唸n<卤%U&皸勩芍t;濋"(􅕝淨m?劥-?撽L7{嚍=D0 |>|躱p驌坏>x襴:タ澓 endstream +endobj +1413 0 obj << +/Type /Page +/Contents 1414 0 R +/Resources 1412 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1340 0 R +/Annots [ 1416 0 R 1417 0 R 1419 0 R ] +>> endobj +1416 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 418.8948 227.254 441.8636] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1417 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 418.8948 380.3883 441.8636] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1419 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [314.29 105.1501 371.0667 116.0541] +/Subtype /Link +/A << /S /GoTo /D (a00152_g54b27e45df15e10a0eb1a3e3a91417d2) >> +>> endobj +1415 0 obj << +/D [1413 0 R /XYZ 90 757.9346 null] +>> endobj +678 0 obj << +/D [1413 0 R /XYZ 226.1581 392.748 null] +>> endobj +1418 0 obj << +/D [1413 0 R /XYZ 90 373.4515 null] +>> endobj +1412 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1423 0 obj << +/Length 1804 +/Filter /FlateDecode +>> +stream +x谕Ymo6_!`_ld怿*J6`[虎謊M-誦a朵Jr觍逹$e結r趡D/<=>=w墖釓x訾(b<鹬鰊狨泵>岥m乢?麼#/BQ@镪χ$(∞U騰 彬├她 s摠薕閆夔"]键┞蓟賕*统CN葤痴棆gW  U皜h$o遚//(=<`Dz=l棆=f牉0鰦9翀2魘*蛷lI 2J罧|"榱I%&贗凥DWVJ{&/轪佊`键蒤s祇47/.斋K;zv柭Tb瀭+唜繣m`燁畐狧$]讝魷'47zX媜Tf旫l釋殹3q被西昖s虉T懇:Q: +>┾篢Y覞鍙橒5B#0 $擽$悾嬱匋对0睹a藹($-^韪崑x*U旂}6"(c馛F贐B皠Q&Z5攗瀍4劏拇岸]憪 籛w6暢僈狳芢+7ㄑ:簖]壕3穒iess齚Цh7&遧T値查UnKM2QD檳玤熴韓&謜4GQH8苤c鶰qk嘵wV弋B6耳峏漃歏 Lз&蟱䙌Z甍悕hNi◥3>k 礽H邲E嫵d`滳逊~5嶞巵轎G峽嚿j绿产嵲 6 +!SI(!踵Sc殽噟+s荬橫咺7佐攳Fw祲^| CG嚠@#娯 +X呢=(iJ频N`屯鯦琻终M9 + m 7稕迢┤转,屿諺騀<i⒉*肇TbI狻3a棫Y迦IZYf)玝慨鰠BA (5蜬`o惷d桟鍒3z< 憸Kb'锓'$馌颴峷~ + 4=D}JwRs8Bra菄呎瘜S锖9泳钠狃鲟p-挍1闽趹囗x3H+梃 :硲燍C轿檆5憅$碸lゆls″z禡_Y81猻U;(s僓MO菲昘嚑M\琀讣輔!gk'EB[嘳!u庭8胫諁閽% +みZ潚jl謺;诞硆軴郏5歴俙借t峮K\0栉 T'6` 锬辟Nl嘚l鑱袾琧鳁 .冤賴厛嚑 8򋂍p絊=4騦/Nh2e!聜僧&蹍鎕c:鐱M +囟祭瓖l示薞伶z銰k>*+囖曌辅阴~鉔+$=汋C5澚e篗k]宲眇~`fd 郌]'锓'実MWo胯6攢柯0枇陣獡C!☆U;`毷=撲鸿昊,矾vb勯"ャ梁1*胙k/05[4=飗豍檯/乙2媏揲1-D[gL:A癚奔窡o*>术4v睦蠐\邧:熙4奝 傕Q\?`傠H乒涘鶬竳鑱Q佚RB:侂g 魹迈搤i竳趓悯甮騕q8熙籣8濐/{篝獗f飁 + -秌崲V资褒(o鮮 5{ )投 顔6*`#咠 $7l勬>08y=a$zO荻1 壜儴嚚侩pR38嗂Fhk鳓姜桼!9琣 鍋媝犏\q頢眜涵躥B喘鷓S搒yw葞8-q 芷醱H宒8_闈歼0BK涧f鉅嚚螿Nj;觻.殓 +' .賒輏 +h[zx亠鋶6@靦N页 跬N﨩:E GO梏)>l"bj鬤  W滳誫k!L! `Y鑾, 蚬蔜W巚]醤^曛po礧|N9沛塨X咀濄◣ 苠臾嘯5鈡?+悹"endstream +endobj +1422 0 obj << +/Type /Page +/Contents 1423 0 R +/Resources 1421 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1437 0 R +/Annots [ 1425 0 R 1426 0 R 1428 0 R 1429 0 R 1430 0 R 1432 0 R 1433 0 R 1435 0 R 1436 0 R ] +>> endobj +1425 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 593.8152 227.254 616.7839] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1426 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 593.8152 380.3883 616.7839] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1428 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.4376 488.8567 182.4258 499.7606] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +1429 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [305.6958 488.8567 344.7692 499.7606] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1430 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.486 438.1531 236.5593 461.1218] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1432 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [132.348 333.1946 215.6849 344.0985] +/Subtype /Link +/A << /S /GoTo /D (a00146_gbaf0bb2b6a4424b4eb69e45e457c2583) >> +>> endobj +1433 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.486 284.5483 236.5593 307.517] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1435 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [250.4549 179.5898 309.4431 190.4937] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +1436 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.1787 167.6346 205.1669 178.5385] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +1424 0 obj << +/D [1422 0 R /XYZ 90 757.9346 null] +>> endobj +1407 0 obj << +/D [1422 0 R /XYZ 226.1581 568.2372 null] +>> endobj +1427 0 obj << +/D [1422 0 R /XYZ 90 549.794 null] +>> endobj +1408 0 obj << +/D [1422 0 R /XYZ 226.1581 412.5751 null] +>> endobj +1431 0 obj << +/D [1422 0 R /XYZ 90 394.1319 null] +>> endobj +1409 0 obj << +/D [1422 0 R /XYZ 226.1581 258.9703 null] +>> endobj +1434 0 obj << +/D [1422 0 R /XYZ 90 240.5271 null] +>> endobj +1421 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1440 0 obj << +/Length 2117 +/Filter /FlateDecode +>> +stream +x诃Y{徾6邿吕塝>DJL襢&Hs{玩40礀jK$'o鴴鯛q6鈉8筱p^ど?矓xI婂龈浪A祠孀]俹_|G錜")╔揄4A.镆鰽4/o∩q@6唆|萀鸈=尝I毤,V頭-n頩g(┛.浪嘟Z`膁虠煚憭.弸𐴽,.1z乷w!厺艅-譒牁刃Ks処"(A刾闣D,,ZF!貇ǖ瘭l瞘幂LQ(]v幠禩宫#椸E勸 7%鴜 jf2貢昷腁诚F8B郟S諆⿱妊!馯埼鵬s湿糒箜蠘c#CD X壻磃Z脩DQ郧;[esOA/! 闟锻搩Q󜾊7}b財f贽N4/+們0軴{訆僺f蠿綬z鶒佲+K7{觶䲟%H奣锧6AL劙'B愪雿Z\d5"K!辆9)隁)A獽nd剦>8!E饴U+詙瀚道8|饤鎘G2焪/o7颺躰君麤7o艙'u缈zq侭蛑:蝘連r殿K鲌鬂歏KJ麏襁,,(:昑yn鷦dV鳑4麡o炒?f咋螉纯j馟g唽g'棰 姽`!↘u= 0 ^K糢鏆T1k勃緉I>4B& J-檪-婹'4喨-Z*z/墷/鱪o揘q>辦o剉3咂M傖殕倷a)J蠼穭И躥u潵桕a +宐1桹篢揋旁毾蚾神t圈巕Btú]蜋8蟽袥yZ27+s}L蜮P枾 +}kp:厊*逖屛ZHcn +襍sn6伥笔 C閃U右厢駶T "縱X$9謚K5僯蘉&X沿1J!#="cZoH=鋮本K%僪嬾Z睦!2妏虅$GX锟顓I/;l攱0l磕騡}4D,斈凙淮缏&cC邤Ijw3 O,礠狩奘S崑1.r銶muS澐凸蕫8恟 虸紖 絑3F>Fq2B楤<9鲪9'v綦忴^K渠倣!咰T蚏蚡P*婝X頦,1妐錡Z閖碪&)蜏靂櫊q啴臫z廣hK?硥1__鷆慇"岠[9汆2$倨鑼.颌n$5RT干F嚚蠰4%Hh禠5緯T+>嘸休>&镪m隣I袿︾9抯鹋磽N肼嶕<]+宪]鱦 Fc>潷籘左tH!Os}V彦0Qt崘鴭畺l惰歍昆k繹t蹁>焾嚲栓孮>る裢严耥7焤(绨"f邮iゝ銼鮶删x鐟皆W*聩塠釭'铞Zj2w7kA谔蚻撖鏙R胞<箍3.篿Z3C臈梤(G笄d?M款.;飿巟訉K工}珷(8/啊:]禺蓧葮 !!M乗稵s釭軘陹崐o锞{7OO醯朜F鱰蹕X6xJ&鉻<谹脏<餠Je=e鑱おU慟 L妬桍$藘蓩my4V唫疵睼 搵4SP佱怴PiTG=牘【w騈嘾 D积u~窑QY *'棪諛 +-煉諸蜞_5 +H;吜臡輥埌AF島伀竍鈥C灰U兞a桜 鵈耽鄲]啼!鯔幯kw磔贩_ 舳nl洳P仟<鸿 + +镱M蚢揮逛[酞5 C=袾Dc爃T鼦饒庄丶緔c茼錴 汩拢Ku金尮渳n&覤/E芚疫抲[砷t确壦:襓2磰(Zec鱲曵 +;欅咁厘鹄C/魝u镠-煘Q楔a靫tk襃q嬷ai帚ⅵ援#有弽勇J湱狫毇&+嘡礤S[^疅98 7f椳>甁<跫焭烳G柰{-Q貰鬫S鳠茯筷p藿瀆^湱雧苉馱_廣泚'梣圥栺虥b嚪勖盀貈MY觛:镅Ъ 瘞%蟣缏跸钤數S鱇!A$尲a隂?#4%匁~鷥b;b本vSX:( +犄Y憉<赨?浩+寰g!詞3蕿Q[朣寘u妃睥0諈錹?d '抬 +endstream +endobj +1439 0 obj << +/Type /Page +/Contents 1440 0 R +/Resources 1438 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1437 0 R +/Annots [ 1442 0 R 1443 0 R 1444 0 R 1446 0 R 1447 0 R 1448 0 R 1451 0 R 1452 0 R ] +>> endobj +1442 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [148.7083 717.9621 207.6966 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +1443 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 557.7163 227.254 580.685] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1444 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 557.7163 380.3883 580.685] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1446 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.0274 456.6895 204.9409 467.5935] +/Subtype /Link +/A << /S /GoTo /D (a00146_g2c64c8c36bc84f9336f6a2184ea51883) >> +>> endobj +1447 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [338.5705 456.6895 377.6438 467.5935] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1448 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.486 407.7474 256.4846 430.7161] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1451 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 322.487 147.1755 333.3661] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +1452 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [147.6736 322.487 182.6919 333.3661] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +1441 0 obj << +/D [1439 0 R /XYZ 90 757.9346 null] +>> endobj +1410 0 obj << +/D [1439 0 R /XYZ 226.1581 533.8997 null] +>> endobj +1445 0 obj << +/D [1439 0 R /XYZ 90 517.2837 null] +>> endobj +1449 0 obj << +/D [1439 0 R /XYZ 90 367.3148 null] +>> endobj +1411 0 obj << +/D [1439 0 R /XYZ 90 342.9866 null] +>> endobj +1450 0 obj << +/D [1439 0 R /XYZ 90 342.9866 null] +>> endobj +1438 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1456 0 obj << +/Length 362 +/Filter /FlateDecode +>> +stream +x讠R薾0见+|L富v靈-*R>rT涯A ♂羊鞯眱(虱姕鮴将欛"!誁S2-E 翰!=谤刘咞屲=rM5訆+殨 +欎萯V"興<⒚計&F躒1Btt?愈瞅P琨w(戱"洅囲%P旴駿f 爡<%绖J鷐0詺 I歌罋紦譑8)($绍略+9+沁玒題\Wu袑B鸐SJ!yǘ,gN0罃)$缰o4sS鴽煣K徘秏r驰虯俔鳃麭咺邴瞏鯛掙_V炃chKP痣镻1飕 +$湠墿M卉wr:繛煌訫!!聢8 +3s5硗!兛^崨熡试扶竪铖獵扳endstream +endobj +1455 0 obj << +/Type /Page +/Contents 1456 0 R +/Resources 1454 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1437 0 R +>> endobj +1457 0 obj << +/D [1455 0 R /XYZ 90 757.9346 null] +>> endobj +1454 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1460 0 obj << +/Length 2132 +/Filter /FlateDecode +>> +stream +x诃Z]o6}鳢鸢X8~嬱税-k.{j婣睍垣#e㭎?RiJ磝僬菴,溗玸(Rd幫檏>n7玭韷籧讲G{;瑤 -D薵j4釒憺窈:敍m殿T鞼煌忈aA- G湗摉婀條{;栛蟷愼D盎c]o犒顮闺毲 ;XBM 塹$0#m,渍;宨]硐\UI敼NRL-tW#5q壡 +荆T尩6竣偉= +5喰X省罘雫8棬壽痸=鍹喢CaD6屻骜x蕑m(J榜(覚( 剺X郩S祖? c 味1?QIS櫂I)9crB岝坢鍣飘虌iW敨 vUJ1pUZ谆*酝p誁<荱0"^绐uy(M郑@4C詖瀟 +拸販N]m DLg#L1 ハ\|③+佷澩4聟V'R镣圑Ne2p0靽e蓣誐絡| ;鑷蛐#鸀:顅KV,=o霘颛r)o-褞ys7TR涄Q鱴{塋??夀.9{$jqW鞱 鹟 3hi +2櫪>!瑝毈/!吷@}yX_!a⒕]W_]妇嗏窈:铎ズ(3j移idxE號Uf#ヌm>t,刻听愍够5犯qベ!凼篲l穗8烯?攠A柣萱摏'5汊7漇M>旍 JHO旽1巍r0竸耇 } 吅%4)+≌顿莂(5a葋CA[V鍢 r!0涩潽}溱覯&咂zsU 5l靉爫C聞]g銇.l恪x啀0"^g泸顿&l,8$卞貥橸偽硄圢刎胠?禖zsI"扴扰8 L8]阥竫 炪鈚痵褶D&&sE8眅櫂1沫耱L燬&v皏吃tQm#铽顟紱x4{珞诏 v2msJ憼X_歧苰渏羆)煣u较C 膕|# }㭎f幯s0葌CA[匆2a蝈鸨|陬!:awk梊樼训煖鱋╳鶀|4凯詂鲖%婳涙竪.轫劣<*寙响]E35<HA鷃孬&?5| 迟&S 1%訣坖&醓` M衭Mb 7墶xF聢x9v政P灈詉臉,,8$卞溶Bdf些醏67驰羨蛗橁 +Ь懷R鰍}8麯桉@b蕃兀捠^3阍 +!fK螒ISq欮"B)?8耇H膪阥魢亁NH聱趴鮟p7Q唸 4 倛俨懄9响:%蘁疔﨣 龤邿庄沁09 画@劯葎檍0e蠪拠乛 ^t澴喊讎^聢x澴M T,炡E踙襖槱婇\長8B臇鉻ZHd顫櫅I!:醫 漗穡哀艮Q躭磙悉З]肳榑SA慠 +趓颽7 x:<阥xz 炪閠痏瞇}l馇@U Q毳筻PP[枺Y亴?2鱩Bt恃f#殭;1阗Z共{腈i[崨醮蓓;椯hPm磝l鱻0e鞔{a鱽x庉觓D紐%挥苬涢瘷S$筻Q@1[庉塚HJ澒v靼佪蟣v蒡奚>i撝跺]h(svB +$Q墟媷佒 t澋喊祰聢x{堧s闖s$痢 鯃-俗B#罼骖K圢硫|腹擞嘟B称|趗:醱籲_\f2N楡\1h椘胉)户u捷C 膕鞛#5瀃芥圷cΤ郟恷臇鍂诰瓫筈~w/趸K宰蕻3/2w1-呆 许'矂讚娢閬"祗P6缅F溛釃虲刀懪MM輆沂#鬼^渳绬曯=髦 +w/x锉'袀﹙懸悲椿Pl/跁囻;P嚄vR鉭=}+c倏鮪駴蓍}襻畘疀?咔/毁W裣d?G啹endstream +endobj +1459 0 obj << +/Type /Page +/Contents 1460 0 R +/Resources 1458 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1437 0 R +/Annots [ 1465 0 R 1466 0 R 1467 0 R 1468 0 R 1469 0 R 1470 0 R 1472 0 R 1473 0 R 1474 0 R 1475 0 R 1476 0 R 1477 0 R 1478 0 R 1479 0 R 1480 0 R 1481 0 R 1482 0 R ] +>> endobj +1465 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 615.0435 211.932 625.9474] +/Subtype /Link +/A << /S /GoTo /D (a00147_gef14e83c046e19ab9fe9d1bbcca276c2) >> +>> endobj +1466 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 601.9516 194.2086 612.8555] +/Subtype /Link +/A << /S /GoTo /D (a00147_g1a1bc437c09ddef238abab41d77c3177) >> +>> endobj +1467 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 562.8165 207.3095 573.7204] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8411c95a4d89367ad2d9d6bde1a3d537) >> +>> endobj +1468 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 523.6814 185.9097 534.5853] +/Subtype /Link +/A << /S /GoTo /D (a00147_g61db1dcb7c760e4dd5d60bf4e5576dca) >> +>> endobj +1469 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 484.5462 185.9099 495.4502] +/Subtype /Link +/A << /S /GoTo /D (a00147_g88d2ccf7cd821f89d9a8df7e3948b56c) >> +>> endobj +1470 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 445.4111 182.0444 456.315] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +1472 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 406.276 196.4303 417.1799] +/Subtype /Link +/A << /S /GoTo /D (a00147_g64a238a5c02640a7a4aef004163aeb47) >> +>> endobj +1473 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [371.6975 391.5148 410.5505 401.4201] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +1474 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 367.1408 190.333 378.0448] +/Subtype /Link +/A << /S /GoTo /D (a00147_g81ac47cee1c18f6aa479044069db7ca3) >> +>> endobj +1475 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [377.83 352.3797 416.683 362.2849] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +1476 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 328.0057 224.0965 338.9096] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga9de254b8aa308eb4aab17efdde622d2) >> +>> endobj +1477 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 288.8706 198.383 299.7745] +/Subtype /Link +/A << /S /GoTo /D (a00147_g26a14b8dae3f861830af9e7cf1e03725) >> +>> endobj +1478 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 249.7355 188.5699 260.6394] +/Subtype /Link +/A << /S /GoTo /D (a00147_gde6634974418e3240c212b9b16864368) >> +>> endobj +1479 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 210.6003 205.825 221.5043] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdb971fb1525d0c5002f52125b05f3218) >> +>> endobj +1480 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 171.4652 190.8911 182.3691] +/Subtype /Link +/A << /S /GoTo /D (a00147_gef6c4140c632b6a406779342cf3b6eb6) >> +>> endobj +1481 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 132.3301 195.3145 143.234] +/Subtype /Link +/A << /S /GoTo /D (a00147_gfbd5fc486dfdf6bf6fc9db52b1f418c4) >> +>> endobj +1482 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 93.195 200.8635 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00147_g7b2ac4b18bd2ac3912fe67b3b17158c3) >> +>> endobj +1461 0 obj << +/D [1459 0 R /XYZ 90 757.9346 null] +>> endobj +655 0 obj << +/D [1459 0 R /XYZ 90 739.9346 null] +>> endobj +102 0 obj << +/D [1459 0 R /XYZ 90 739.9346 null] +>> endobj +1462 0 obj << +/D [1459 0 R /XYZ 90 716.6852 null] +>> endobj +1463 0 obj << +/D [1459 0 R /XYZ 90 634.1338 null] +>> endobj +1464 0 obj << +/D [1459 0 R /XYZ 90 634.1338 null] +>> endobj +1471 0 obj << +/D [1459 0 R /XYZ 90 425.5097 null] +>> endobj +1458 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1488 0 obj << +/Length 2344 +/Filter /FlateDecode +>> +stream +x诘[踤鉌}鱓 黯龗椗&辒3@賹) 幫桠暔馤緙獻v8-撯aUu駵阞叄 qB昱闽.炧nXo飋=w G滄zq钡Q滖琵/KM絷+<;╚^6雵猋飛Ov凷菍[J锄睨硗?睿>.%4髇s笏ot窠健D8痯B s/7拫p补y蟑hЩ修05愈鬻C絙j鵼籲(p媻蜞{d㎝7U~%.h$M#m.6聕w麕懐=iwu鄅觃9瑒Y滞羐ㄚ}広蟔 O臊楦}⺋5誆rk VJ_呠Z)W# %xj癅q膐 /N蟆DG氯部7, +wJ螒;6嬱L疅%(稔G>ㄗ户炢悽爟_鈊w欀铎uj舵壊篏幛>+q鸿4R:q:冄╃9.0杓蕲泆蒂忋@80萺 +">5嬔L@c怄栵]鈚~tt'坳篾错帍鮆义佣搋赭鴔䙌;敭?8质樾曽p骙<溻)'R爷5‖#瑩0T┝,緼扛0單g( #1!娋63$吂维脱2(社"TP英辱;S蛃鴁臲"啾3bQZe开肟,E攁b 0\,壛扻蕕R򡪬p>G,02籄,"拜/媺C閡R簉B" +$淬鵕詮PD酃)氦驫鎭.?.~钶|Js 橵砖c8Z b癉椴逪樵 J溝9屘nJ胼cq袘4D?窎鵐hM売襥b?P>歰}&遻{躥)?剫l梀U +4p)瑎G述訿來堖丽乢滍C3貛剳費域$57紲唸B7u眏K咳 よ窬綝r(汶鵖穼儿鳶彲刂Hiet妾k诵PR淩糭嚃薫軂高荅鎩iY8啃ta胟,4aㄆC 鼅Zqx雽豅15騷Yb廍戀 郜 ${嶄 0N桖禂P翁祚<Af?涌7S蹬0C(1pjFC铅Na黓谕Y.k KSz褀 +ea秾U怿R?:氢)4pB趉L欱58T= +楏賊I虴虊S\拴9R.0缡)[I@<B淸M + >ヽ干J9w幑Y,b爾6<*{錖]絸倕&B蝝 RtI)x0W姇簥傖簞簝I8纏 'A 8D4孍禐F鐣婊,B鄦矲#紞ㄜ7摡o%4痍1 "螳}7E偃镥<6n:zs臦ⅴaD廪0a8yメ H溘蓹 坸4偙蔌跄K貘x槰9a凜2P竩瘀)4F炼詶嗬c]~ 敉8FA-T贤V#偈韃,虰Pb滲Q榗!埌#縓q嫖樨迢*E妔匇倦E2叠薪rm鱉_灍髑x:"~莼jy盠s槉专臆鴷j 碆煃毈⑶Pw廻嫊z澭a龔l貽瑿0,G0e痯妥4洼r[ G殐Q瓙汎畧%B縳&|回膃偄f%Z梱欼%豴]鄹迴t&n=蝖瘺钺3邾Y瓦旀齌y荐{ 嬠昌]井7涱螵>珻}瑳~7 N嶷侃?塏}o`舨j'doс┶篡B蹞嚎軂培蓥侩胊.>W鹬萋簘ad 犷埴]scz,}嵫 鐥G.0爋橡摺网龌隟籥8L礉茟w悽s3馀8歀砗g勆閩?2輢e?o萶; 0罶閕鈱搬 + 糊:机P5qs|吲搡莧闛觨给営钐縈y 巡)F鑠7巛棫|鵖领1憻U6!endstream +endobj +1487 0 obj << +/Type /Page +/Contents 1488 0 R +/Resources 1486 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1437 0 R +/Annots [ 1490 0 R 1491 0 R 1493 0 R 1494 0 R 1495 0 R 1496 0 R 1497 0 R 1499 0 R 1500 0 R 1501 0 R 1502 0 R 1503 0 R 1504 0 R 1505 0 R 1506 0 R 1507 0 R 1508 0 R 1509 0 R 1510 0 R 1511 0 R 1514 0 R ] +>> endobj +1490 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 702.9069 191.2995 713.8109] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +1491 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 664.0494 180.9385 674.9534] +/Subtype /Link +/A << /S /GoTo /D (a00147_g58bb90796c1cdad3aac2ecf44d87b20e) >> +>> endobj +1493 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 625.1919 204.1906 636.0959] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga87feebc7cffd4d8300e776cf64e4fec) >> +>> endobj +1494 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 586.3344 180.9384 597.2384] +/Subtype /Link +/A << /S /GoTo /D (a00147_gb5fecbc62edd128012cea0f47b57ab9f) >> +>> endobj +1495 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 547.4769 214.9411 558.3809] +/Subtype /Link +/A << /S /GoTo /D (a00147_gf2dbaceb10c67783a115075b5b6d66df) >> +>> endobj +1496 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 508.6195 203.0756 519.5234] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga20812098a4663c8a9fc4ce8e95391b6) >> +>> endobj +1497 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 469.762 203.6235 480.6659] +/Subtype /Link +/A << /S /GoTo /D (a00147_ge5ab69d40013e6cf86ef1763c95d920e) >> +>> endobj +1499 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 386.9994 175.2098 397.9033] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +1500 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.0255 386.9994 203.7128 397.9033] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1501 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 348.1419 185.1725 359.0459] +/Subtype /Link +/A << /S /GoTo /D (a00147_gaa585784b0914cac1d37f07f85457008) >> +>> endobj +1502 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.9881 348.1419 213.6754 359.0459] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1503 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 309.2844 152.9837 320.1883] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1504 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 309.2844 211.6433 320.1883] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +1505 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.459 309.2844 268.3701 320.1883] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1506 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [307.2043 309.2844 331.8917 320.1883] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1507 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 270.4269 171.8826 281.3309] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +1508 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 231.5694 172.9089 242.4734] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1509 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 231.5694 236.859 242.4734] +/Subtype /Link +/A << /S /GoTo /D (a00147_g79c4110211247df3fb30b8cf1c4c02af) >> +>> endobj +1510 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [240.6746 231.5694 293.5858 242.4734] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1511 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [332.42 231.5694 357.1073 242.4734] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1514 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.5934 93.195 210.4073 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00147_g61db1dcb7c760e4dd5d60bf4e5576dca) >> +>> endobj +1489 0 obj << +/D [1487 0 R /XYZ 90 757.9346 null] +>> endobj +1492 0 obj << +/D [1487 0 R /XYZ 90 644.2869 null] +>> endobj +1498 0 obj << +/D [1487 0 R /XYZ 90 405.9509 null] +>> endobj +1512 0 obj << +/D [1487 0 R /XYZ 90 194.2442 null] +>> endobj +746 0 obj << +/D [1487 0 R /XYZ 90 167.7584 null] +>> endobj +1513 0 obj << +/D [1487 0 R /XYZ 90 167.7584 null] +>> endobj +1486 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1523 0 obj << +/Length 1357 +/Filter /FlateDecode +>> +stream +x诮Y遫6~鱛!`/6Ps)Ry哎隯犈谻[娔腇e沙涔轤繐H巡$KrA <辸w鋧渖拿餑{RH0顊裦喗G鑯5#vx 闼蟱犂Ьw鱌i 擯.0鏹堡 +K<呖 娄6嬿6碹,趏tZ勁:K燁尢^9\k朻>)Q瀩鴦蘽3脠Jxx翀63NY龗烃滮狒榿jB焪渹g0o蓔纚@( 仩"h T0f覔!p焀褁5躭澾=$"(鯕J坌躕囃X俪{碈,$L鬥:9'V歺绪Q矄旲Q荋,4r椁凄;贘xT倆K恐cJqR嵼陱觮]m慾讋厃&朐#id鎅N7賬紼+橦銼n娼~;滷:6掲G骪6n稱$崩餙^X鹪 +粣+ㄖ`F仾}#婅V 泫眖馾镧>:甎Z嶌\#鍒窭D榉07硧昒eiS灶诞鉭敓鎒汹櫐N銦.K闿fぶm潺魶豹 絗O轵N绾7q7Ya郢,/P{现*槫簻蠦)抹z|钬讻蔚Ti_)=壧8臽T溞l[W 嫧繷∥/籠嫃a反栘匩R]=^K`b"圇An2^;^hC)8娄篲嫃阎:逻攃8榊0'4屳颜 o"j撞矾饀焱炋辝f|b奈= 垃O■鞱/澄鰕b澩哑av5鷴f鍦C€G菹-8恱捓蝷[銄蝗3==糢|_幃琗.璩vA粟-CB玬?釛Z*耞2w崭補; +0+V鮺s琷矌掠帉略宇伌蜩p婌#啌N埩3)u鶒岚晐 BW 库旈Z貃8盿义I.豴t溤xG锫=仪瑣~9迭絚詪D胊pR#餧mM%祾*志佥譩~=$缩t纥焩9眭羊 >煊鯼夭T0羄栯u<硯飕Cy,勄/箚JHk喤04.s UP*!'r粽\拥皸k溫4屛塳F;I&湈k隨9閱3錸!F层;諏F饔K谱%&瞳︽*紽t媸 kI)R[RM煗ON璐0Hd踳~雒凪xRa烩琫Xん<.QW忓~沖蘘厥H $k汻棾杙!S硋Z貨礜lB%:歋):傑6\尀僋‵青踷дC净倀迹mbI:5&保jU:哠Y: 哒鰉 +S娤/L蹮 茶隣!r惊W +(楤刭3挬rQ厜堙螖26痶獁←赪渠m輝 b痉/勞'尽靻谂VVi=y嚎4詑客u琪AX_旫5'賝endstream +endobj +1522 0 obj << +/Type /Page +/Contents 1523 0 R +/Resources 1521 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1437 0 R +/Annots [ 1525 0 R 1527 0 R 1528 0 R 1529 0 R 1531 0 R 1532 0 R 1534 0 R 1536 0 R 1537 0 R 1538 0 R ] +>> endobj +1525 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 720.0194 154.358 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1527 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 573.2189 135.0008 596.1877] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1528 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.9895 573.2189 174.014 596.1877] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1529 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.8794 573.2189 241.5202 596.1877] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1531 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 417.2379 142.7416 439.4893] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1532 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6071 417.2379 210.2478 439.4893] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1534 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 273.8347 142.7416 294.7461] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1536 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 132.7034 135.0008 155.6721] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1537 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.9895 132.7034 174.014 155.6721] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1538 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.8794 132.7034 241.5202 155.6721] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1524 0 obj << +/D [1522 0 R /XYZ 90 757.9346 null] +>> endobj +748 0 obj << +/D [1522 0 R /XYZ 314.6454 681.6068 null] +>> endobj +1526 0 obj << +/D [1522 0 R /XYZ 90 665.7144 null] +>> endobj +1485 0 obj << +/D [1522 0 R /XYZ 379.3917 536.8636 null] +>> endobj +1530 0 obj << +/D [1522 0 R /XYZ 90 520.9713 null] +>> endobj +745 0 obj << +/D [1522 0 R /XYZ 231.9163 380.1652 null] +>> endobj +1533 0 obj << +/D [1522 0 R /XYZ 90 364.2729 null] +>> endobj +747 0 obj << +/D [1522 0 R /XYZ 226.1581 253.0464 null] +>> endobj +1535 0 obj << +/D [1522 0 R /XYZ 90 237.1541 null] +>> endobj +772 0 obj << +/D [1522 0 R /XYZ 379.3917 96.348 null] +>> endobj +1521 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1543 0 obj << +/Length 1882 +/Filter /FlateDecode +>> +stream +x诘Y蹘6}鱓鐲m爁y棓E4ど}H侤+觡5蹭Zr滀;IYwz{羈a<93Yb#/爤q筁 紎 b70緄~筟+崠$曀籡-A$(∷豁麜Dr健/邩F|2mk玙厼5匠霡泊 礡銣搎1.;%b!シ:{,蕌钏也R鶖鬣5C孌t迃 蔳臔歴 +$ 枓cb9h覨 肞!A紩抵鏮忝1S鍝緁(橴蚎往!8@ab搪禼\&頤浰歚8Z%S<0勧Y'9愊劸,m罯CE=曈px綷RY憛S委糀y畏頂0漪V'4x冠帇篛竐 R#=np(燏4~35?:!T J"3Pxze圬rm:b汧3縵Jve}碐]鏂剋 +51 荟忘/脓妤魲腨樰祡U飑整]7亏伻f%Q7+a俌+ 3漨\臲7霳9x缫橎佳駂渒⒈J螭8儁見\備&)撏Y2;1^S gi|锒H蹣& 桙j到雉l刳峯VZ)椄工冯科yu铩I蟠疧诇螻*軦2 瑍瘨现鯹c鸌u}詑韚--Gべ誛蚊pZ&崌!掟捪Z 4蚲鈻r#熗(~4 e3囈鰉魃10"N耏6 龋/k溌8儮&]嵱kvp忣驹Y褦3`圪U;怗s_SGZ枷巵\a .A募擥齈Z泲b窰尢E +.姦(W桸Z礤6T亹kP*?耢u ⒕垆B尘堈mf襳鑛菝耂澒隥浌氘玚苴莼鷸蜭1=;v8灁eB栈 糩釾 + 谩-a[揨嘔岀魀跤H黲Wc政T#礦.吠=i2&B*劋3郇闃H!騂w_鄰塻幤vK)2霙k-釷=6_峵曓P巟鋔鮬皨焖Z翴㊣8:紘笏w(燓伌皴!+儧楋館鮹贵鲏!L9况錛>旀筄d叀惙:×弱慳垜`,舾痢|亿d9!%Cy?陯'"蓲E靱橶,$x殭徟U囗> endobj +1546 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [281.2077 672.8902 338.5322 683.7941] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +1547 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [445.3859 672.8902 493.3155 683.7941] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +1548 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 638.3707 162.0093 660.6221] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +1549 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.9981 638.3707 201.0225 660.6221] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1550 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [220.8879 638.3707 268.5287 660.6221] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1552 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 485.4889 139.4144 508.4576] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1553 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 485.4889 178.4276 508.4576] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1554 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.2931 485.4889 245.9338 508.4576] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1556 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.8738 374.2304 451.9686 385.1343] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga87feebc7cffd4d8300e776cf64e4fec) >> +>> endobj +1557 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 339.7109 142.7416 361.9623] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1558 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6071 339.7109 210.2478 361.9623] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1560 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 192.4983 139.4144 215.467] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1561 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 192.4983 175.0106 215.467] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1562 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [177.9994 192.4983 214.0238 215.467] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1563 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [233.8893 192.4983 281.53 215.467] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1544 0 obj << +/D [1542 0 R /XYZ 90 757.9346 null] +>> endobj +1545 0 obj << +/D [1542 0 R /XYZ 90 739.9346 null] +>> endobj +716 0 obj << +/D [1542 0 R /XYZ 480.5514 597.9626 null] +>> endobj +1551 0 obj << +/D [1542 0 R /XYZ 90 581.3198 null] +>> endobj +742 0 obj << +/D [1542 0 R /XYZ 226.1581 463.4224 null] +>> endobj +1555 0 obj << +/D [1542 0 R /XYZ 90 446.7797 null] +>> endobj +715 0 obj << +/D [1542 0 R /XYZ 226.1581 316.9271 null] +>> endobj +1559 0 obj << +/D [1542 0 R /XYZ 90 300.2844 null] +>> endobj +750 0 obj << +/D [1542 0 R /XYZ 391.2972 152.8075 null] +>> endobj +1564 0 obj << +/D [1542 0 R /XYZ 90 136.1647 null] +>> endobj +1541 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1570 0 obj << +/Length 1722 +/Filter /FlateDecode +>> +stream +x诃Y蹘6}鱓鐲e爁yE)/姢iS%A爼璧Yru深鲭;/%Y6羈!J934Yc#(b~癗+季囅疻膖o鴘氟7#4X秭B@畐忋蜄哫`瘆'49潞癞L踈牿2i彶h&+嬐л壅珴觡题, J?燄:筠0bQ茸饌">畖熟K菌{鯒醚輤┵q娄η樱*綮拊`}zEYl昒┻步~6晫k樥迩鴗食D蟇3`Y瘪摈uC盬~焐鬜9耐X%mU 妜3)婤&g麮l七IiU眆_V,齲8d"熙斻"+V67;硦2蟚娷8犒莞]g/:櫖竁/'7斆T 鱜韚猴 h胛餎 焜Y#崨X~0枢b辶疦)崘ri5H鞪鳵蒫諊瞡.G+秃ピ⑨N 9$ 餛 (欆gVh蹢嘡!`(X缙W忨駭塌臥3 Xs獇吥噁拽綯鳓雧螥勸) 噤湗2睊u蹸扇J"FC轆NjIMiぴg堘h*拽o鍡詮p曻F鎱l覊 仒O倕筟%#4=.U礕慗壛蚇膀Kv宲.3堥 !犘峒溤傶1歊3袞p B9XG蠯cZd&1*o5 i射1A(鼹﹩豏說't8 齘頴%婦诖焽9!'q?1Kィ錔段烠廖嶢E> 梦*"B4`尳R韤髄>Wz瞡猹备朷翿_UO3譔^冭 嵁骐欓d茮]!S~塎鉚锽悤m?贇"旺訫y:Y煪?躌,r纴p [蹓o{蜚5BU覸頡鲷7徘!鈩Lln'4o桬V6蝣maK?噅炲哈^灤W#籪姖$2;揍昵 鐬亂葕碩}Z6具p(.-!P$M忀Q^梑2[欃曔5唇!&吐&壠-|K|Wt)徺-a%"m~i#^? iw~S趯裈qQ虫z(2鍧2m TT3}eTGi撰朌5 +苑篬#找嫨Z]8+宏S(帐*蓭姇H寘:踋萛p銷&剪+"鸩翋04腟莁U[:h闈(7卲xX荊觓/春)*襩捛遜G`葊殃P0偯"C僡哹)9鵰繢:岷摽栃浴枰惄S蛹f85鶒"FEв&Й魴A5b>鳐g,D轍熺T?>-湦螻l? 煶y8%#0`6詞 V~蓭饄78鮟>$涔隅馟?~銮甒!潤疧粛罏詔'r烹舯筗硵 AwX庁'2 桺Z岊箔le计d饊蒨胅般.鐘{秛D]埃.豏梕螓縔 +徣wc)鮓)-踘p斶-o?O驻:漟拤黴3 枩988 馷Y5Vg谑她讛 7T痪Z嬥p升鵽詶篰刴纏pc=歋z4秔91eb}lNS9>L晴螽qRK欸h9 HD让佉夫嬯嚫 9 V\,l '丹|劧t戙pq#芘8e鸭溤傶1谂Eyf!"= 褴E帄搊黄A m嬌b08<_C篲sBB恣E倕 厑~@)7痚!臌w恶V遄旨脙~A j僢l钭霆黑B:䥇鳃齟t/嫨成剹篸渆ndstream +endobj +1569 0 obj << +/Type /Page +/Contents 1570 0 R +/Resources 1568 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1565 0 R +/Annots [ 1572 0 R 1573 0 R 1574 0 R 1576 0 R 1578 0 R 1579 0 R 1580 0 R 1583 0 R 1584 0 R 1585 0 R ] +>> endobj +1572 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 662.2363 139.3246 684.4878] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1573 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.3134 662.2363 178.3378 684.4878] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1574 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.2033 662.2363 245.844 684.4878] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1576 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [366.5599 561.3549 409.5084 572.2589] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +1578 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [469.3939 427.7347 513.9963 438.6387] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +1579 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 382.8338 142.7416 405.0853] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1580 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6071 382.8338 210.2478 405.0853] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1583 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 136.5223 135.0008 159.4911] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1584 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.9895 136.5223 174.014 159.4911] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1585 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.8794 136.5223 241.5202 159.4911] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1571 0 obj << +/D [1569 0 R /XYZ 90 757.9346 null] +>> endobj +805 0 obj << +/D [1569 0 R /XYZ 384.3631 621.3448 null] +>> endobj +1575 0 obj << +/D [1569 0 R /XYZ 90 604.3735 null] +>> endobj +744 0 obj << +/D [1569 0 R /XYZ 226.1581 517.3041 null] +>> endobj +1577 0 obj << +/D [1569 0 R /XYZ 90 500.3329 null] +>> endobj +804 0 obj << +/D [1569 0 R /XYZ 231.9163 341.9423 null] +>> endobj +1581 0 obj << +/D [1569 0 R /XYZ 90 324.971 null] +>> endobj +749 0 obj << +/D [1569 0 R /XYZ 226.1581 249.8568 null] +>> endobj +1582 0 obj << +/D [1569 0 R /XYZ 90 232.8855 null] +>> endobj +1516 0 obj << +/D [1569 0 R /XYZ 379.3917 96.348 null] +>> endobj +1568 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1588 0 obj << +/Length 1348 +/Filter /FlateDecode +>> +stream +x诃X蹘6}鱓鑻 ,/頚裛  +麛乄ψFd蓵錶鲲3I],檼慌k雾P"?HY楙<3踫栬 啋膔紊馑贻祯6lqqm鲞侑/8緒3寴牺槄j眯8aS蜧a浊C綳岏鼦嶛1蛿=簋9~}豨浵樸$喜_鸵1/J槳N +&X鴺r枙塛百z吸黶o=┱─qd檞湟;[R炡'E"6鷓L暞=$ 醧$齗擦;1 q矺 Jz +~薢j蘴O6]#X哊鄴Wk鲉B鯩__H鲙Xbo童迴6瑑v嬱 銗n,lsW溏産A腬r漛啧?鍢l}}r綏险(揮驮0栚Y聼﹎╇J俋|I 禀t愥朣媿挃鼽 I0HR暏簮&愒笧奚$鍀NCR~麕:鎋BRu2墄8襝[B災咁9辀=唎畎=| 諭i|:彘鱁3豥∽7敌堮K]k4苘ac>ッ阯G耰趎稶吺阻炌匩猸n熀uN镄笨C煍y籋漳桙Q]{X#袈钛A馽公燀bvYN^V钮沄唤~踓#9O謾櫸臭貺=(3W⒋*添x飴侍V- f譮hc禒巭*x0ポu逃訦V5 砓%漙磀8蹲2X煮骈p>昡tGb礧疖 挏撽痰宱;W<棖踔c篘T籟o狠讠[紁[璀&锘Rx仐穑穉单畐,3$粊kx付嘾榢k1 E鐀廽1 +C锡绡薪胄Ht6w黇M:謩k 詶<薷R姲难H\[R灨釔媺L3}3rQ-6檶j豩膥O罣銞茗y汷剹O氈順是(&逓霖wY淳趍;晐+O;秼[P8#"梙 4%X梍8 "a<榺\O"借鉭貂V:滋n絃笍>暕b]搶;颻钺濇猿jew詅+咆孩關铞\ &w欕>顸仫旺遂~儿:觘ndstream +endobj +1587 0 obj << +/Type /Page +/Contents 1588 0 R +/Resources 1586 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1565 0 R +/Annots [ 1591 0 R 1592 0 R 1594 0 R 1595 0 R 1597 0 R ] +>> endobj +1591 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.486 661.9112 256.4846 684.8799] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1592 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 604.5791 139.4144 627.5478] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1594 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.486 476.2657 256.4846 499.2345] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1595 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 438.4462 139.3246 459.3576] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1597 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 220.9948 139.3246 241.9063] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1589 0 obj << +/D [1587 0 R /XYZ 90 757.9346 null] +>> endobj +1590 0 obj << +/D [1587 0 R /XYZ 90 739.9346 null] +>> endobj +1515 0 obj << +/D [1587 0 R /XYZ 226.1581 577.8727 null] +>> endobj +1593 0 obj << +/D [1587 0 R /XYZ 90 557.7368 null] +>> endobj +1517 0 obj << +/D [1587 0 R /XYZ 206.4623 392.0581 null] +>> endobj +1596 0 obj << +/D [1587 0 R /XYZ 90 371.9222 null] +>> endobj +1484 0 obj << +/D [1587 0 R /XYZ 226.1581 192.2311 null] +>> endobj +1598 0 obj << +/D [1587 0 R /XYZ 90 172.0952 null] +>> endobj +1483 0 obj << +/D [1587 0 R /XYZ 226.1581 96.348 null] +>> endobj +1586 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1601 0 obj << +/Length 2329 +/Filter /FlateDecode +>> +stream +x讠ko6騵~厑 +坹|K蘿觏]l彻嵎馈-臨l醠蓵鋐箫o^A` g嗴"檃#3単憟恇\沃+<劾魢+鈻棸緇鼂u跸煥)$暢粘 斝*齧.鑒Ic狴胥= 勴鄺2=2;~_畯h&/嬇玂W帆@妆%$氷焀魁乬)镑 +#1{寛Rt犊鈹鶑菡谜籤6対N鰱鉗鴮扉$拡ヅ抈岀H尺1;1?<馏M4.+~?态$K9挃骿霅喇M车泸冼&艂堸珱<6蓑y鶖写霩撚 捏 場磈X0_6q筵全*_P1K尤N袎僿l⑷諾Yǒ璛 L鈎&1I嵣-跴Cy +aWQndsW6費*E寬薲荻6嶱D8a(N9V謂弯!⿸}謉朂颃褊\B娅卋04c鋚謾泋.+/燔殇鵛琌剼不3+挧]E鏿W"2溈穯櫉恱斤ro瓸挳欓-粨--rv玣 %u喫硃%樆?u\駷 圢q:疀佉G楍L}┸街K掌羭m/唂7墨9吟Y埤 D唑袗2醡蕔\0(倣,B wx;y蝴}F﹫QL剎鼊竼x=K!I雨q8F@ 琚詣<ョ篟#蕢 梐墓顉p 嗱璀 5$rD1C +6!C5$ %釪v湿 伝#醖s&爜略x`{6R锷\吉=竩廕 弖^l靝躅辺R腙皅v抮罴硄棐份s?{琈4儜! +u揟崫J鳥}/v愫踠剦鷲璼%=b#/鰐`-0嘋 饹l3佰曤ど?"疸弅.1莔s 侨S瓠枦J菧k槮R嚂V魻縎煁乀烂n颲 ぴ揷h琔諸IQ矬>a西:浈澛▄谥 髼|烦趁宁h趺j @柌倩魡8".6jy俸德lW`櫋] 箱!2妥牬W7S曤 ;匏6_o5.<黢=-}~蓙  #┫蠟C妐势+4K伀崙悩Z蔛y鴈{0E忭拧v槽a(b(椩c<l殟矷)着 珩澶 u>)錊Z!#紿髷墡f靦o8d'煣奎l矤2y!.譟. m鹳莾u^椢@蛌@y苻C鎴槖椡Oc黻籼#銳#闶醴N彈cw錑砑蕲>䏝妣霎(\啔r0骆 +塜嫂云/哹鈛V^p羈D =.z*PS貍i內t偄旉 +!/众'餚=0嘰?弝e ..txq?脻芄+5紖蓺]貣纊鉆* 坮j|7诵撝挭:癱O廁f1g熓絘(!^-礋W篋䌷鱬蝐槠@棑蔽羍咬鸎拺舱RY 紗v玃K皦娖/垧#喳X5駇S豕3.QD2吟^j>X0v接bgR. 9牒橰皶w +. m鶓慂忧伮"薘B読傀躎 ┐炅j㤘囎vQ魵萨歕S-侔]!. 撦?瘻-艶3迁PCRM5Y赑玢.拏Z蒈腚;貔6评 7啶S剟K纙EZp娋"餈#"柃'C劽吆詌$! 霒/ :/3([ d"!h僝挄kWl篜M搖@C猐AQTu]〦潋)wU泲'鷙鹸"\07?D虑qP(Q%嬌e沷C澐y 薞腾鞷(.麰' 蓮F抹@ty醨|2瀛L>宏暓\惞亭k&饿烰%檣鸹o?蹜5Β!k緩辉!KI鑭e洖W(2擭96卹奌鞙仨鱠豦棿y4G*&!噹雬胵漿0蚥給h=鬽幟舉)l锭襛[U燲> mU?徘)幊.妬b╱@n椗&钡骾悩緔9茄寰桩蛭92H譓枎毁樦 !M腹賗jfyk禮LwF:揗碇ui躅髼囒鱢倓 眭/wwn資@搡]鮤-盁z顉`蠌uVろ83荕zh=偙Q=瑚縇羧佑K.瘺8唿&J &8D0 $訲膬/垧#/}琯鄣(榎枸矅翼DJ 俤抲 瓇-酨n +w焌\徳樇杙h弃陣*êo灴'☆逷vC輷6臱';e齂摒碹_楓鬻譓V孶#R?壂c宔ndstream +endobj +1600 0 obj << +/Type /Page +/Contents 1601 0 R +/Resources 1599 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1565 0 R +/Annots [ 1606 0 R 1607 0 R 1608 0 R 1609 0 R 1610 0 R 1611 0 R 1612 0 R 1613 0 R 1614 0 R 1616 0 R ] +>> endobj +1606 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7506 575.1408 195.0552 586.0299] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1607 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [257.8193 575.1408 315.7315 586.0299] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1608 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [359.1284 575.1408 384.9216 586.0299] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1609 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [317.5642 496.9047 374.8887 507.8087] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +1610 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.2809 446.4365 239.2097 457.3405] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +1611 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [472.3426 434.4814 513.9963 445.3853] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +1612 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [117.5067 422.5262 147.7231 433.4301] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +1613 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 227.0741 135.0008 250.0428] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1614 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.8662 227.0741 202.507 250.0428] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1616 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.3577 117.9412 220.1509 128.8303] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1602 0 obj << +/D [1600 0 R /XYZ 90 757.9346 null] +>> endobj +1603 0 obj << +/D [1600 0 R /XYZ 90 739.9346 null] +>> endobj +1604 0 obj << +/D [1600 0 R /XYZ 90 620.2512 null] +>> endobj +773 0 obj << +/D [1600 0 R /XYZ 90 595.6504 null] +>> endobj +1605 0 obj << +/D [1600 0 R /XYZ 90 595.6504 null] +>> endobj +771 0 obj << +/D [1600 0 R /XYZ 286.4315 154.5275 null] +>> endobj +1615 0 obj << +/D [1600 0 R /XYZ 90 136.4373 null] +>> endobj +1599 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F52 1229 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1621 0 obj << +/Length 2589 +/Filter /FlateDecode +>> +stream +x诃ZY撣~焈┦Bp拕蟠墲礭=(O籟S斈盭+慫娷顸鹴/戙J5&6簺_h4叇媂臘 -v;壶?1鱴 献m偪m铪氳圙嬐撫18銒威梕D⒄+簂>捋Az>骫Z鏴a'灇b噖刚,諯%V縨>萁罭/%"哹耕7贺儈燁(:Q媑浮刬;蓞9=荦;鸨虃弊^-abI槚"%1 aL駋$M("傂楯晴参搛邘QNb六⑼p 6P嵢-箤$fB]埂鄧钾etYrZp惙筚姪鬻s东葶V溗"9m呈>屋"珶W.岁w鸴鸕粎ejI梠郶阤j &D乊u 4椉GG;*=t餛跬褆m延相4鋴8}噩X颤蝙醀(:2"Y╢擯T挊2轚.鈲J5a 亃}%焤K剴5尼璚Z堻Xt旇{┃-"y覗>壻犎v馘扸/獺-I_{Q" 悴品礛m晧糏Y`倓+OT蠌屈RgⅠa<"1类達o&!Q1sG涥v顖&2R盦,SVC熊"lT乕賱峢N8$ U1 /烱rK黆#ypM叐幵煬嚢h酵k;稒渗嵥L8 颣63崛f&5錬鯄賹[Tv勮譁坭~==潖贁'DK堋$ _&丂f褸v<杒囕qOvU!yR('A駾s*魕o\盤N捀襪 鶞}D羺F^煶坔 +|@5#{ 悄堮L8Q<>.麜R^渥**uqp 玮妅珉O鰥K庮!7渤"牔c1壐%首)2\B躯~|丶|咫*⑺兔艉綇5{5爵|1悻|箬48Kth絸',悲> b酅M:潲楞%)%嘼 5" 轟)ICERu騠Ld>]檳<乡峅]7yD'炦1+曝欎床踳嫌 !<,吊磭傃扎宻+S鈆譚`] 4:擗+lL吷c蕺0裎6$0狵{u唨Q僭v惡'PPa砒韉魼'{蔹搎袋R_щ壝)PR轻惍腐D硖6思寒J傭wt坙蚬R>镨釀骉簘([q鍃{湮U夣 止稍}琗V脼暈!J:俞寎9C帆涺0酀侐拝祶'|狹U廋{倭:K&瞝-e宩k=V%'H>{;縸袼溡{~jN]m6 锩榼鎉g宷q +T*宴 榅jn'瞎堄.O`隄{ox斧食}hu0繑v苼 +~#g鐯溃视诃)<.j>15刀喣=N+QH "_I5簧y鷘{寥.7嚯k萦錰傧·梛燣丑T3*p(。 +6 懎C僻mS厅裠諎{h"-駪唬*蝬肃豥$d5C柡g仔;?N据v炽ㄖ7 +F梦冋辒霖]0 +8婸曡佴{-髧rG死@质銣扼8茼KS0,授N}k郿R訷fo熊o 0脯楰<槃9m0輁m.R鏓j窞祤]SO愩 銮蜮滏艜x$ 乇嘌5et赩轀硊$c麉!x坞5ヴ 觿'1<躈湍z燺 M:潆c讲潪拥K麟暝s瓳5$堃p物h役漨f鯡摋弛$y鎣=泤G,`+調潞拜孚坼碑)淼十o╱甧Ps荸睨譶X尬}$禐-獕L9&_S`*75o瞯Q踡#= @A犤$鳍P鮲濑⺁)7鎴郕隟梲泤蔾樤8跜B蝑灙U膚醿朖M唆D櫧9槿躼||-fY~薼b虽G箢蚒L槥k兊﹏8 沷烲夻狯蒔醚}3悪8煳粦 v=Y2:P蛪p城染P `璘O桧7黥s|';&,盽b孑=諟窓瀾职j駄<郎鲸莝遁s 巃鉎Jl彨i諏!穠鉎&?8bI掽?:Gγ6&搤C<&巘M淜]5籥^6枑頧琁ⅱ箯D亊較0藹C揪坖鲧Gl [僷腞q_揂k蠶 鍂歁Cn轂SG賤仙玐d献譆$/凋胆詥|絁9蒿価勪矮16峑牃AM樃`7Q毁┇瑍# +冯荫,+挊$侳疎2邢 9鋕恉B绤D傫i誔p绅c覿習鹩78爴捞tQ欞粡.5g#与qM鑧?襶b豞紤自^甊蔎佡8dJW9踟 +x叆骄搼p<;22wN摝p 樏鏕;衾鳆H睹≥A攌找f;奐/?Y雙究(丱e筼g扰(儹摫;敆滔截9r呼颂 +O豌筄詠~較0rv餸g穖^靜漚 uk抻瀓F4壌]=汹Z跙弳 :鎟m郕:Tネ珱陯閛~絎p娾唉獺骉3J0%Pt5i9t_鼀翢痩 +斎r枘+钸廄埩`軍t?#P糅 億K樿$轔$MN 怎绗*堬}鲖煽哶鉵wW鷸嫹溭;Ny谖7_≥廼锸/邌'G8庎骭鹭聄endstream +endobj +1620 0 obj << +/Type /Page +/Contents 1621 0 R +/Resources 1619 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1565 0 R +/Annots [ 1623 0 R 1624 0 R 1625 0 R 1626 0 R 1628 0 R 1629 0 R 1630 0 R 1631 0 R 1632 0 R 1634 0 R 1635 0 R 1636 0 R 1637 0 R 1638 0 R ] +>> endobj +1623 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [460.7601 717.9621 502.4137 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +1624 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 706.007 136.9336 716.9109] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +1625 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 607.5313 162.0093 629.7827] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +1626 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 607.5313 217.8992 629.7827] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1628 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.6109 416.392 236.4535 427.2959] +/Subtype /Link +/A << /S /GoTo /D (a00147_gb5fecbc62edd128012cea0f47b57ab9f) >> +>> endobj +1629 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [309.2914 356.9954 361.4951 367.8994] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +1630 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 254.0374 139.4144 277.0061] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1631 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 254.0374 178.4276 277.0061] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1632 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.2931 254.0374 245.9338 277.0061] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1634 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7506 176.8276 216.6541 187.7167] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1635 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [285.5252 176.8276 343.4374 187.7167] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1636 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.8343 176.8276 412.6275 187.7167] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1637 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [393.7656 122.7745 457.7454 133.6784] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga20812098a4663c8a9fc4ce8e95391b6) >> +>> endobj +1638 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 110.8193 151.6186 121.7233] +/Subtype /Link +/A << /S /GoTo /D (a00147_g79c4110211247df3fb30b8cf1c4c02af) >> +>> endobj +1622 0 obj << +/D [1620 0 R /XYZ 90 757.9346 null] +>> endobj +743 0 obj << +/D [1620 0 R /XYZ 350.0021 547.1921 null] +>> endobj +1627 0 obj << +/D [1620 0 R /XYZ 90 530.476 null] +>> endobj +1520 0 obj << +/D [1620 0 R /XYZ 247.4281 212.04 null] +>> endobj +1633 0 obj << +/D [1620 0 R /XYZ 90 195.3238 null] +>> endobj +1619 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R /F52 1229 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1641 0 obj << +/Length 1580 +/Filter /FlateDecode +>> +stream +x诃Xmo6_!怿.)>lKti指熩"pd9fK,7 嘄鬏墹稢 θ噖菄倾橤釓y怘H砼躅狖鶎賏讫&嘧屐沁y銭$襖{薓%A38戕r齸络! 椟 +殜ˇ馟>n泳茹.墒U欐兮泸侦俨謐蚏B3扎黛鼼戥良W3JD*>(aQ慕軱r>冻胭煹3PMZ濅安 锨.▉辍CE(  劽圅`z@Y艊$A葯鏎壬1葸誾]軘 _S:泅O竕鞧Dj*洹,幈培z鏨E)%摓蟕I2&黀峏潔HXP +I;锥U魗l,鈍L噂嗀悏盇62K翰^,運^c'鉈*7&2 +J緗鼹5N0_Zs穒懂 i梞睨>瓒[僶p嶢獇0" +%""l!j糧0p刡礙胜8渨3蔍 84爂H嶎[F0饑啨z&垚0MS郂垿b)揟/飉8p虷髴o蘯镻E菜K劬%'1"誴Pkp鮿殺盛*yQ龃r 襜Z醮秠繱钖皱%U+;頽撀从迢%:X^黣:n菽糥Z9髖*L鹼5铙 +!&蚣M蔯盽j瀺:<浿^詪≥玜幦捩AX峵G+w蚨祶~J}Wj3V箞2#剈Q~btJ9PN伱煵' +!邁Zh圡}"J妈 tJ{W*'O)S%.*毘s憒爺g閾w痩燧un場祬S\ G熌腻>, 欿iC&),N欹w_尜蘔侮賣8?遙盷颺^菁桓葫硗邋ucc{=铎>韩'n渦拯吾i侰魬骀褼AYンO諐6m啥椤L2菢⑤m鏣)`鳏d劅屜5躱帑1'祳螸唪.w.繯EG}请Η硶Pp &郆穞簗鈎燖<偑<貈歗霤轊刞h$BF&┖.蠼sN6皖lは;癘菰m6Z3汦畢殠蚆詘lR`O%4鉸yR鞸:凶;qkX臫 +~攫匑NR8侴笸1撤'槶|濲;\憞#&聳丝p8刁Z橖 嘗%)F]卮t蒙挛O +傏傘7懊巹;"γ舞报'x晁E瀆,,溮偸9c(赤V 漪f炸F( +-nm#騸}Ro獑殏嗱嫰珂)gq0赃 +听KZ慔J飹定S%兔二羿4+焙&G遜捐E裵:摰)┇韾禞鞟栓"J' +&j"尷a飇 +j6h繲`閆2\%职fTo7 X患繭~ヵ鄞E"豤~mV-"Lj^考^>患z髒¢|yM哵 a2,)星)鲀b &Z灘岽wFp(5疢琳> endobj +1643 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [124.6997 570.6986 183.6983 593.6673] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1644 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 533.0943 139.4144 556.063] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1645 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.2799 533.0943 191.8873 556.063] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1647 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [205.4361 438.1884 231.2292 449.0774] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1648 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [460.7601 376.1104 502.4137 399.0792] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +1649 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 364.1553 136.9336 375.0592] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +1642 0 obj << +/D [1640 0 R /XYZ 90 757.9346 null] +>> endobj +1518 0 obj << +/D [1640 0 R /XYZ 206.4623 473.4116 null] +>> endobj +1646 0 obj << +/D [1640 0 R /XYZ 90 456.6845 null] +>> endobj +1639 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1652 0 obj << +/Length 1881 +/Filter /FlateDecode +>> +stream +x谡Z藃6蓦+4訊W6蔒uX7.悘芒^癮(窛 Ef井U谑.蓞详?<嗃輣Xa+Ro秝釕螳晚驰j_mk英^t☆鮝瑞耖$ B 嵉園Xq轙濡z1軻3趷D!L醺tc@郄q,g殶8聎&:$>E;T幾适`)?瑋MrnUA惢[;忶;N#鄐i$q]峭脟兔b第'yh兇&昪O5崗n腑l赔.qT&Q橣ef%i荵?YKL4樑)熼|瀓浌銶鎣朗鑃P楖/謆觜隔^6 僀S)樟烩种Q蘶髁0莭餒]蠿=劻H1箩z鴍fG/;皩笴(厴n;:Xq@捺o}wd襀鉃!馅胮#*G烡鰣<*嫧,2傡$$E+^f 丞儊v* Um钪"?n|鵴<&潞縋鴡1:绨;, +9 骓8珿^08$n败=傅杂0!j'5:T&4Zp讵:赞圐c. +!?X雵嚙聶マ喈^W鸔舾靔宻!苛z躧剭蒠爟e-,愥 桉-'/癅&$钚0蓤e2HE驦o2 5EvXh 爟X匆2軑JXAqE惼T^d|仿G(&'藡; +骓埢G^"n8$頏荀嬅g al暽"6*p_vi乑 ≈#4ネ伐mU:`a詄x&,雭 ,鄟淧"%sF=#⺶h6颽&扇預0朦T髽!畡*詜剢4`.礧=歕vG縓帆桸衯犷o[g慧鞀h蘌$堅SE2ì`亦4飥s哘 h剥蔺茒}H鐻2-z勣羂7+奼w=硍蹪CP鞑.!tAmK0}戸c J凹裕愔a轓1o佢{%r囉H怫O堵I0}璛笤顎笛厷徯愭 悬疃瘦J2l."wj 襔袑;XV顀@@ o^題筭襀怫逦F稡' }璗頣s$4er徰; 鱶絠>^T馮1$鬳2TbD9 +>莉倧B倗y;燎傦憲N#壽<< +'撩鬒碽羢讆/#0$w灶>i楗黩哶嬲< cXN枟z:疼I=-恴徏D阷I\椘o+&I.矔`4#OA昪仺$*?!晎 姩鰃>+}9.鄂:%j +z鱥讻牆滤凭废=囶M渒7@0L蒃f12B骒蚜馋鋈{魓篥钃#揊抓杯w脘 +1"L#V椁z鋚训鲳迚氱駓ちB)抾di骤"@凹.F圪0[蘴[PE.籒=qvG"?訧zL! 樱閝尠$沕栗译:矾*偆痘翱:T嶺r鲙d.n繫y廒飜>浟0顇l鲿,W鮻{W%E忴;俣 6?氓泩 71i鐞矋)苂_hcD禵浛麁g36傺蝞i|S"戕}O,/猰礯葬db8*^好廏A彑Q鰧怫蔞葻EiNB営撦yP俻劂皖煣籮;lNw4迪胯Km.endstream +endobj +1651 0 obj << +/Type /Page +/Contents 1652 0 R +/Resources 1650 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1674 0 R +/Annots [ 1657 0 R 1658 0 R 1659 0 R 1660 0 R 1661 0 R 1662 0 R 1663 0 R 1664 0 R 1665 0 R 1666 0 R 1667 0 R 1669 0 R 1671 0 R 1672 0 R 1673 0 R ] +>> endobj +1657 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 613.8755 190.8912 624.7795] +/Subtype /Link +/A << /S /GoTo /D (a00148_g87f0b54ade0d159fba495089128a4932) >> +>> endobj +1658 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 574.2326 195.8725 585.1365] +/Subtype /Link +/A << /S /GoTo /D (a00148_g53fbda0e8c31d4882294c8dc3cb5f487) >> +>> endobj +1659 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 534.5897 215.1402 545.4936] +/Subtype /Link +/A << /S /GoTo /D (a00148_g769512993b7b27271909d6daa4748b60) >> +>> endobj +1660 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 494.9467 213.028 505.8507] +/Subtype /Link +/A << /S /GoTo /D (a00148_g210e629f7252e4bc8458cbdf260b3318) >> +>> endobj +1661 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 455.3038 234.0589 466.2077] +/Subtype /Link +/A << /S /GoTo /D (a00148_g6b16e0bac41821c1fbe0c267071642f0) >> +>> endobj +1662 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 415.6609 216.9034 426.5648] +/Subtype /Link +/A << /S /GoTo /D (a00148_g969d7fff37a979737da045e0d538a9bd) >> +>> endobj +1663 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 376.0179 195.8725 386.9219] +/Subtype /Link +/A << /S /GoTo /D (a00148_g22fa0681cd463191d7a01fe85d86996f) >> +>> endobj +1664 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 336.375 195.8725 347.2789] +/Subtype /Link +/A << /S /GoTo /D (a00148_gffcd2fbe181e2aaefbf970551c302af5) >> +>> endobj +1665 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 296.7321 195.8725 307.636] +/Subtype /Link +/A << /S /GoTo /D (a00148_ge23534479ead15af8ff08ace26a47fb5) >> +>> endobj +1666 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 257.0891 195.8725 267.9931] +/Subtype /Link +/A << /S /GoTo /D (a00148_g165b603ec150e26efec7be199c9c2901) >> +>> endobj +1667 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 217.8198 180.7494 228.3501] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +1669 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 179.8606 169.3122 188.7072] +/Subtype /Link +/A << /S /GoTo /D (a00148_g118e9d76568ab81ad97f138d4ea1ddd2) >> +>> endobj +1671 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 119.8657 138.5977 130.3961] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1672 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 119.8657 162.6772 130.3961] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +1673 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [166.4928 119.8657 191.1801 130.3961] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1653 0 obj << +/D [1651 0 R /XYZ 90 757.9346 null] +>> endobj +1654 0 obj << +/D [1651 0 R /XYZ 90 739.9346 null] +>> endobj +106 0 obj << +/D [1651 0 R /XYZ 90 739.9346 null] +>> endobj +1655 0 obj << +/D [1651 0 R /XYZ 90 719.3112 null] +>> endobj +1656 0 obj << +/D [1651 0 R /XYZ 90 633.2198 null] +>> endobj +1668 0 obj << +/D [1651 0 R /XYZ 90 197.2909 null] +>> endobj +1670 0 obj << +/D [1651 0 R /XYZ 90 138.8364 null] +>> endobj +1650 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1686 0 obj << +/Length 1900 +/Filter /FlateDecode +>> +stream +x诃Y[4~锆▌刏tb|w紙畎办 蠶6MO#冥ら.邕3庬47椴hu秜<櫵7泷孋テK%覍薳z\噱<A躵隥椸胪怏铹^j%曀彤 斝錰J萿Dc牝+ +"哿襄鰎褥2尝N昙,n^.聚磖漐侷b进齇架倆/1嬪{榒D处算係'嚺浥o-恍睳6犧> +*k濪 +製D0?0ε-@扵.宂!釾}岔聱q&耜譥撄.?C7 曘栈52z浕襁棨蝪Uy矗}yvo焝Ym呈胍Y齸M桃_aj!V权i# +I蕐Xf煙ruL要4C彬廚U~L餷_钨.焓揖]y馾I狴#k廦蚌榞VC3r鰳搴磸z鰳!ucO$㈱}od>薷&:Hc\H;苫5+0,y{任$饆皊媒幌唟刯啍罼r$v琓O庝u'諿颞Co憬T#葈 X汸魬卣僎兦疮莁УD右鍒砐鳏.E陟紴%[4T#揦-%xG*jxⅷK5蝘盕3郋劚稙熶xgJ&"N婃H莿胮贙+! 籃祎-橯q籓O)JG +qO+礣s軐鑷慞 7i1z踨O?'~姆壭靝(#翻Z" 巋N! 胘岡呆3仪|嶘*;棁wk 9kd;eQ-卮-諟钒 7%遢鎨鶼馛綟X咾唲Tr苝O5'y耐蓼イ貛夺T軓觕淖鑁g8X懴團\(1 BK5#|掏风~DゞBˇ"P(贋'哘I-俓镔睜鱨墈继N﨟簂W^猭鑼$弑婓)K筝s踜 0m>n'' 6孈巍骹p)瀑坦找GBG菒1阅 x寅f!5R**4<<諟 +矠&牕嗺?蒪G詪4几調0b,殛w镽[5嶮匢s锢憡)跪鬬 !)aG圪>勦鼤\貟软6C錋n葦D0S盥钿!Yq";蟂9妷爙#1襎1廂珸㈤戱y犉!齊K鵨_C}n?n躑H苣G14槯g.枕䦶翧蕰U鲿9%*9f佰'毨慄qa┣葋6%34墇(焸W崸韔魗<珳翦~e撉﹍2^?$灞_匄 纸椵澄w榷咀&.洖9蓥呅殗窀C6O纨峭秶nR哀 8B" 揿;pU甃氍頦 .h9:dSpy2 驻+\C7嚓 +n:g恇#Z$啍赦灌陹M犝抷磋M处穐囇 n血鱵蹩%A溞s`u圈莉d,v琁罻皢俹軅艡螿?mjx1}妘﹏焍r8SX輞9%鷥o1o1[瞷n1'惫辀螆q浘澎 姐sF鼒煓諥1蓩CY"s鳨嚠诽:泬枛jF1饭-哹L越写魋z岠NBS^0:*耲.^Z:鱚寊&怢癟秀蠡嗊F "\看`袡H!?瓿i筚7哤4餄";a饼P/rI[U屃?dEV%弹藜?K忝嫑阰⺗P鰝:(祁鰀g闒唏?%縸鯻]y~蔉愅椵J1,閑ndstream +endobj +1685 0 obj << +/Type /Page +/Contents 1686 0 R +/Resources 1684 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1674 0 R +/Annots [ 1690 0 R 1691 0 R 1692 0 R 1693 0 R 1694 0 R 1695 0 R 1698 0 R 1699 0 R 1700 0 R 1701 0 R ] +>> endobj +1690 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [292.7281 646.4529 322.9445 657.3568] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +1691 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 608.5208 139.4144 631.4895] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1692 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 608.5208 197.6953 631.4895] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +1693 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [200.6841 608.5208 233.2915 631.4895] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1694 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [236.2803 608.5208 264.5639 631.4895] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1695 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [284.4293 608.5208 320.4537 631.4895] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1698 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [313.4498 360.5812 370.7743 371.4851] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +1699 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 124.2624 139.4144 147.2311] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1700 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 124.2624 262.94 147.2311] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1701 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.8054 124.2624 416.0743 147.2311] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1687 0 obj << +/D [1685 0 R /XYZ 90 757.9346 null] +>> endobj +1688 0 obj << +/D [1685 0 R /XYZ 90 739.9346 null] +>> endobj +1617 0 obj << +/D [1685 0 R /XYZ 90 722.0597 null] +>> endobj +1689 0 obj << +/D [1685 0 R /XYZ 90 722.0597 null] +>> endobj +1675 0 obj << +/D [1685 0 R /XYZ 288.1051 554.1796 null] +>> endobj +1696 0 obj << +/D [1685 0 R /XYZ 90 532.2319 null] +>> endobj +774 0 obj << +/D [1685 0 R /XYZ 226.1581 456.1224 null] +>> endobj +1697 0 obj << +/D [1685 0 R /XYZ 90 434.1746 null] +>> endobj +1680 0 obj << +/D [1685 0 R /XYZ 226.1581 96.348 null] +>> endobj +1684 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1704 0 obj << +/Length 866 +/Filter /FlateDecode +>> +stream +x谳W[O0~席垬凴||崣2H撠7@(F+-kR~v欷!M/l菽峅芟|+霮.憿L潎齕挲 0疝~$蔠H "M〢?蒦H8'gv慙'=唭 濆索7驣Rh)注\.м褷讹茔T炳;磕⺁粂阛DU凝Z"䴘瓌摈整\氡鍋(9衜$Z攗攬 c揑"项鹸8溋尕,LpZ+mh召% QΜ殖,鵩U#铦鍏慥麑]2玠ci#c台a碫熁泱鈴bァG~此q!捑` NUKE├am #|]*墶, C2"靶iXT郕!t壃舢騐!XlTa狮kDH懚:S蟷混跜'}趃]赸& 蚪}春c縑l戏:$t釁D7`胂嗓U即<癐w展灇W/矸=聝x柵|痶s +?柴笧"&澢莝'ZUf甂B$兾櫕僳D-蟏芓胍覫垱譥鵕&HR澁uR0,魈涃p癉(矧癥W脤嬅Qr煚d葾!褄瞪魭6c趲d*D)*式CKTYQ硃戽|淯籁>葂羗h刓*鏣F "7#贃a?姗n裔NXk-=钅輮嬊賤熵D痜躏#/貞琩G狵湅蹯谼璮G +鄅Kv\g旄靉';职m豵mn旄留挾]#`=奙鬑婹6 旄 3蹜#杌76阔┍f檻緶W菍u蓥摑s弖t 彀駿凹蠪P窑T≯侳誆9aRv淣襓\w粻>U婼摡Tq@令眕7^搧楝u?鋩譕鰕8}|篗'眙榌jG~~Aendstream +endobj +1703 0 obj << +/Type /Page +/Contents 1704 0 R +/Resources 1702 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1674 0 R +/Annots [ 1707 0 R 1709 0 R ] +>> endobj +1707 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 542.121 139.4144 565.0897] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1709 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 300.0025 139.4144 322.9712] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1705 0 obj << +/D [1703 0 R /XYZ 90 757.9346 null] +>> endobj +1706 0 obj << +/D [1703 0 R /XYZ 90 739.9346 null] +>> endobj +1681 0 obj << +/D [1703 0 R /XYZ 226.1581 519.9805 null] +>> endobj +1708 0 obj << +/D [1703 0 R /XYZ 90 503.321 null] +>> endobj +1682 0 obj << +/D [1703 0 R /XYZ 231.1394 277.862 null] +>> endobj +1710 0 obj << +/D [1703 0 R /XYZ 90 261.2026 null] +>> endobj +1702 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1713 0 obj << +/Length 1160 +/Filter /FlateDecode +>> +stream +x诘X蹘6}鱓 涘]}i7 睝4鮗,2j[,gcER柇嫕4E) )?D8E"芿恖F8x傋疓 蟕|:;崅E捠`粳$A艬MfT忳o轆S1A6辠孆Z埚]栰7z[芿歮'熸鳎W筅畇K0I屨縂>醏钶0b3t0"QD兺圫;胙煟?j;PM鑊О2EX0c)馧B (A!孻剬!X>耜K忌讂w{綛) +擊4忿a;fOn鑮肁侰&蝚鉫Ml鐭涨-o +W{o秅褂"6.;彊y踬柘*苢懫~S箉c;祥zm[IJ沶;Н鳟薗_歽泟FlX洦~}銳!‐P/脬愰o智秶濟X卯亚霖躐傞蹚袵衩鬛]仪嘾搟$樱葱媵蚍l撉卌-'滎)莪Tn .I僺]哱]'uMt吭炸!#觙廭-k~夎斎)萚煷3瓭JGD戠54UR_+B╀挒墟E-+隂鵍,际眎T*d粁幃秃樗 +R抅P&猒(躢耒)牳逬] 鑃m痂'p關f\﹤拗竧N#P:Bp?馠餝胹P_焓䓖CGh3╪戌> endobj +1715 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 717.9621 139.4144 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1717 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 473.5762 139.4144 496.5449] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1714 0 obj << +/D [1712 0 R /XYZ 90 757.9346 null] +>> endobj +1683 0 obj << +/D [1712 0 R /XYZ 231.1394 695.4109 null] +>> endobj +1716 0 obj << +/D [1712 0 R /XYZ 90 678.4366 null] +>> endobj +1677 0 obj << +/D [1712 0 R /XYZ 231.1394 451.025 null] +>> endobj +1718 0 obj << +/D [1712 0 R /XYZ 90 434.0507 null] +>> endobj +1676 0 obj << +/D [1712 0 R /XYZ 351.1686 188.4371 null] +>> endobj +1719 0 obj << +/D [1712 0 R /XYZ 90 171.4629 null] +>> endobj +1711 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1722 0 obj << +/Length 1393 +/Filter /FlateDecode +>> +stream +x诘X蹘6}鱓[牥涘]增璏$@45袊$Xhmy-詵\I蝔暨;忌篩靓)俙y93嚽"$坧E屗`禑噜哶M垱^傈 鴈97$暳rc,H%4X?L% +g *痿漨l岂趔屶iR)t网鏄*钑袓XNE4|3y宫鶟{侷①瀨鴦5根f嫈"'2哔M䴓黕郾f列.9*聜卬鑽5P=B`(!ぇ溉枃槝竝*J冶9霍臸5[H導禛嫱齓D傒^ 點{夎溔9橲$躜q蒃梱6ǔ酠氱喾,%G滖p0妘\毃~篓a汤V(S戄;q飺 +R涠薕0E!衼#5猴墵 OQH8Y债瑩碴馭咮善黠A鹓MV狿9k.穳>外阾M蚵6*葬z欼1EgBE"奃镁z寓  憞ig薭眨%R*h=狾蹓GJM[迁虖攀7E痉mR噶*"RuRX]Jj$)EX2腼/颃癒桅3ユ$qh9=R<俯鳝搕'4!#;|讘;┘p駄晪纵肙tJ豐t p熾!*微窰銂縬>薷%蓓j)[舏棶摑酔D码咅贄噏(嬩覦y樴爘潥窷N慉F碆蠐a璓.嫂妖譺A9誦1临w[(;蘟糜p^T1*郰栣Q談拭.壀q赯T鮤嘐U媣y&婫b#h癒虏 媮噄g粽'K啙岓zT煼'F╞餐|81豨w8笷惈ちj信諚R庺兮嘧|习:鰙虖疟诙b7淽XD"u2 空峚=0瑖檍酆s箔伢襨鯲`樺Eb鼻R;CLZ淘帧镉;祶+;鍸y蕯=辈籜搉 !+赨骸>j泽u脮⑨蹮9.姿俟彘F/]┭"䦷榹b喚銙秇E歎嗞R裆翸骤喩-(9购2跸7/滉P∶pu?}3燉,!6U厔黚誷Nh'_%YR臅唁 遊選昭u埆}逺vK表Q尌≦%澰﨓"螋壕A豍|姂鹱endstream +endobj +1721 0 obj << +/Type /Page +/Contents 1722 0 R +/Resources 1720 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1674 0 R +/Annots [ 1724 0 R ] +>> endobj +1724 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 606.9556 135.0008 629.9244] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1723 0 obj << +/D [1721 0 R /XYZ 90 757.9346 null] +>> endobj +1679 0 obj << +/D [1721 0 R /XYZ 357.2656 564.4285 null] +>> endobj +1725 0 obj << +/D [1721 0 R /XYZ 90 546.998 null] +>> endobj +1678 0 obj << +/D [1721 0 R /XYZ 226.1581 281.678 null] +>> endobj +1726 0 obj << +/D [1721 0 R /XYZ 90 264.2476 null] +>> endobj +1720 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1729 0 obj << +/Length 1266 +/Filter /FlateDecode +>> +stream +x讠X踤8}鱓鑁".蟾洣痕m"吮[ruI毧摺D蕱([ AJ螠9s崛拿餑<吔P凥1.絛坷#件 f;T圜这穂<厰ひ[mZ A 鮒雘灸藔F8膥笞gX +劵脓b蒽襫}S$>碗肝妡鵦u辐瓣X侷㘎|麃5阑[`腡$x缊(E烬係fv嫰{=軫{`;N脸0/`ED馡〩 L垹"4態承 C>o嬴$貜藊熤iY]忼$槩怮隄 酱朑$($L礿(駔]冃N& [ +丞a爲+羾哤[蝻硬VZU 5 D麻鯞翂%B寯鍍炵銙##玤8壁換懐呱厔$G3d湂]`永鰍蹁廿 +1 N]秌#>8揅=!yZk P欶6P|Z&攇m氰3纱藃q-娡1閘蟟趘牤I驶:龗n2蛽訢溽?q棁┛c佱煷幺')|U亀%LD!bK掐m'G腘uPD9b\懀"鋿-奥凴瀫婺t佈[澹戼2憫N=陶獳4D拮`侶,F乒aユ 啢+d`x[ye(!倓'漤,X90庌,P,z)尊2)n飷 像n"Q厼)2:1嵭i傻瓓!f恴K"45Dd饜欟&坞6E)媫汾秨?贾Θ妑潠莶.鶵~_Q>MK 酧栣j汚 齅_5=斮>.齿珇攡S閦m艐瞇$C撞{激.,~廿諨霒^un閁T瘜[趯vK5%莺B黐m0Ymjf鄛U碚;]WUf:NTSL'翦%">S+絴pz續戤^磴煫%夵j涙僴 +<3獩^jc!0煦4f纋瘽{誑vpK#钮<䴘J墚 +>鼕H鸽7%覾3m娃僭竭媔埄蚊f皬硘W囙%躿(q驁JDE8肶/5烧!]9F!當⿷腕筴溺審礿0荤Jv}囷淗88凭[9髱段鱪皝裵l=b莪鬡G駫>$ ︾=/鏽蠯蜆w礽骹 +勷%T 「xH^撗 膯儬i脈'{髫榣煪fo嗾蒄戠iRO靌嚦嚉踽|僈靍郫>d鲝閜ZZ肔烂砂a 態鯳6鳹朒,陚工=M媲4O烁禱谪~矉;荸驚Lt 睛鞖(埔,毆绿%/6P7暖浊赠鼳6乓^o鏥endstream +endobj +1728 0 obj << +/Type /Page +/Contents 1729 0 R +/Resources 1727 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1674 0 R +/Annots [ 1733 0 R 1734 0 R 1735 0 R 1736 0 R 1737 0 R 1738 0 R ] +>> endobj +1733 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 582.7574 152.1568 593.3475] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1734 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7156 582.7574 207.5088 593.3475] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1735 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [294.093 528.4053 335.7466 539.3093] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +1736 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 492.7935 227.254 515.7623] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1737 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [230.2428 492.7935 262.8502 515.7623] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1738 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.7156 492.7935 330.3564 515.7623] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1730 0 obj << +/D [1728 0 R /XYZ 90 757.9346 null] +>> endobj +1731 0 obj << +/D [1728 0 R /XYZ 90 627.2963 null] +>> endobj +1618 0 obj << +/D [1728 0 R /XYZ 90 602.9681 null] +>> endobj +1732 0 obj << +/D [1728 0 R /XYZ 90 602.9681 null] +>> endobj +1727 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1741 0 obj << +/Length 1212 +/Filter /FlateDecode +>> +stream +x谂W蹘6}鱓柩V,7夳Xltmj賎!薢[,箳紱鼄"u砫籑[唌^3噰3!x?鄆2 迮鮲8鼅n谇y(瘕z褫L{歨艛穨i4( 笾蹚KE聲$]襩昳瓷捠潽dk[i頕~6渡 +潋5/绣IJ砠( +V熤弸w③佷 + ??Qo;y\P聈(7霵Z3锇尫漧耠鈼N彎h!佅3傕kー萀0`(〡琫 Z势2瀿1搪2g!4k=$U\η:-r我1垩VM噃9詰齵IVL.遧g(稠W3>辢綇j犯L.韢(o "扉獷3Kr +.勵圃O}GAHB龄E +32T罜央1F撶秬掽狤At垘F頊)wn昝犛iMt 詓=伹(埆丰 J╢p^+7啑煶$T&瞭p#!伭@C檳,衻F(' イ^(昲Pbd袬嘵'fP蜺戤捋v褚>"螁諹,N醍皗y$譪\S,h<畱:曩鑟咟≡4飫x橯x聻锘/厌堳妖魱a$鄕C_3-鈜f腒(.嶬*'讐圡Mla鷩(统8鷒i谨rH鈙鄬)耫p兂Nぉ6槲暤鵹b]` 蜍鶨j:鵞8&z疪64総nI軥5說P賦鱕*a扝-l豸K) +龕`翴蚋}bl决) +򿤨铤筩Y腎U澩樏鞤猚栔先*f鉜幪紾睖领儦"o牑鶪O真]鄉 + d/Q聀>蓳2猍JZj徠僋听觷骑=F﹔0嘜1+M铇飮馑纵磾1镨~曕蕈endstream +endobj +1740 0 obj << +/Type /Page +/Contents 1741 0 R +/Resources 1739 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1754 0 R +/Annots [ 1745 0 R 1746 0 R 1750 0 R 1751 0 R 1752 0 R 1753 0 R ] +>> endobj +1745 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 615.6894 138.5977 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1746 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 615.6894 170.976 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00149_g12a33f0c09711167bdf3dd7d7cf8c5a1) >> +>> endobj +1750 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 531.3846 152.1568 542.2638] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1751 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.6549 531.3846 186.2086 542.2638] +/Subtype /Link +/A << /S /GoTo /D (a00150_g12a33f0c09711167bdf3dd7d7cf8c5a1) >> +>> endobj +1752 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 394.5058 227.254 417.4746] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1753 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 394.5058 380.3883 417.4746] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1742 0 obj << +/D [1740 0 R /XYZ 90 757.9346 null] +>> endobj +654 0 obj << +/D [1740 0 R /XYZ 90 739.9346 null] +>> endobj +110 0 obj << +/D [1740 0 R /XYZ 90 739.9346 null] +>> endobj +1743 0 obj << +/D [1740 0 R /XYZ 90 719.4886 null] +>> endobj +1744 0 obj << +/D [1740 0 R /XYZ 90 634.6393 null] +>> endobj +1747 0 obj << +/D [1740 0 R /XYZ 90 578.3693 null] +>> endobj +1748 0 obj << +/D [1740 0 R /XYZ 90 551.8843 null] +>> endobj +1749 0 obj << +/D [1740 0 R /XYZ 90 551.8843 null] +>> endobj +1739 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1758 0 obj << +/Length 2127 +/Filter /FlateDecode +>> +stream +x诃ZK忋6钧W(1莽箄2Iv3圬K拑,砿蓱漕睐)>-緿n *珚_獺)檉x殘e屒觔3劣t>!鲶鞠??M~鼚f e1崸O蠚CL悹凬煐F1澩i>?BS鄨 l_涘畳)vY鱵_6蹯铵/揰燑糣,羈齡蜱選窬L0bY*饌2:軱8e睽汓w驀鏲>绱劃W弍=蚤GA菽獓操渀專У漳膣羲銖鮵瘼2蕜悬罓藰銍堝鳬鰕Y丧5愳姸:60籦B曝坋d"*;筇k鯇抄滢晰[髄灲^pho郐o姦2没壌&哬菟z淑5峮揥昳E; 杅夨潧瞙亄莘MU啥CJ5 IPL9+K痙綎K贆-2h詹怾椃餅RKm纱h$nk贈AE迟礻残而,z+⊥豌UM) c靦S奻)叨` ;4uj鑵&Z峯_AiN+[ +濋櫅嘫h樺儐機岛蚧m晇恀踞é]手6熗37廹9c咯綌皥U硏飁gz桃q族;P貈07垒O/隴絣さ鑲W0巰敌渵7栉$噫<珕茩嘚Cp8K鶠彋/骜\(*伉尀*4/膿 邱鸭S垎33坉4;瀁}jW栨跴G掅劘v祌嬛'"垯岏q9C$!$邂{芌 闬AP燸H仹)審B#N瞭晟攼懝A@潁0(巀虚*├c6畟諃P .飽偉坒剠枞0C帏x05椺劘C`q"螾1<(&L軍@4 !袘)!煯榶1鰫藀睒eW;狏>r鎥拏a壻\#%糁℅S嶳枈<賦+椃UЬllqPJ;vY>螲=KB誥橆嘻艹阡鼸!J喴$?1啣fq, 名Q:.潎镻!曺'F>裳7鬝,1L权瀞uP;蘚@y%H處炖-桩矩6诟獨E^欥搿m鷘迯铢蝑鲼}]$宍*閲 * _翈,屶名<.滸餚:郡P!Buh^旧v钛軬##誧N`窂槕$凱G/n睱玞 拶溼#晙啾漲筴E耩硌|* K1W械乀繢b桴慩}鵯T诙K濘+毆琠LWe-碓噧堠>8=TIZ战?rZ鎲E唣=巭攻'〡劙┤HB! %虛漝瑞n' H玷8:朔蚽缔顉_v+@嘱竹蠸R攔艷P渠馩旪D韄]@.硣)汜b\9舂鸍烖F鼸艍6耙縘4endstream +endobj +1757 0 obj << +/Type /Page +/Contents 1758 0 R +/Resources 1756 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1754 0 R +/Annots [ 1763 0 R 1764 0 R 1766 0 R 1767 0 R 1768 0 R 1769 0 R 1770 0 R 1771 0 R 1772 0 R 1773 0 R 1774 0 R ] +>> endobj +1763 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 574.0416 151.3297 584.9456] +/Subtype /Link +/A << /S /GoTo /D (a00136) >> +>> endobj +1764 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 535.1382 150.7717 546.0421] +/Subtype /Link +/A << /S /GoTo /D (a00135) >> +>> endobj +1766 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 452.2677 224.9331 463.1716] +/Subtype /Link +/A << /S /GoTo /D (a00144) >> +>> endobj +1767 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 415.4215 222.1728 424.2682] +/Subtype /Link +/A << /S /GoTo /D (a00145) >> +>> endobj +1768 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 376.5181 223.4387 385.3647] +/Subtype /Link +/A << /S /GoTo /D (a00146) >> +>> endobj +1769 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 335.5574 216.0761 346.4613] +/Subtype /Link +/A << /S /GoTo /D (a00147) >> +>> endobj +1770 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 298.7112 214.9707 307.5579] +/Subtype /Link +/A << /S /GoTo /D (a00148) >> +>> endobj +1771 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 259.8078 258.2974 268.6544] +/Subtype /Link +/A << /S /GoTo /D (a00149) >> +>> endobj +1772 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 220.9044 246.8006 229.751] +/Subtype /Link +/A << /S /GoTo /D (a00152) >> +>> endobj +1773 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 168.9847 249.8397 179.8887] +/Subtype /Link +/A << /S /GoTo /D (a00154) >> +>> endobj +1774 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 119.1224 254.5214 130.0263] +/Subtype /Link +/A << /S /GoTo /D (a00151) >> +>> endobj +1759 0 obj << +/D [1757 0 R /XYZ 90 757.9346 null] +>> endobj +1760 0 obj << +/D [1757 0 R /XYZ 90 739.9346 null] +>> endobj +114 0 obj << +/D [1757 0 R /XYZ 90 739.9346 null] +>> endobj +1761 0 obj << +/D [1757 0 R /XYZ 90 719.4775 null] +>> endobj +1762 0 obj << +/D [1757 0 R /XYZ 90 593.0161 null] +>> endobj +1765 0 obj << +/D [1757 0 R /XYZ 90 471.2422 null] +>> endobj +1756 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1780 0 obj << +/Length 2922 +/Filter /FlateDecode +>> +stream +x诃渙S七)T7sf螒晒$wW 睲$桹3鬶F輧+*#校~z;-鞪Lx'&8阖牬漒'熉焈飰耖凁糧靰鲀&撆千V0#厹,俜lH明焀彸篑/G邕デ脲?妅o鳝汘秞硍踩芻^FYm棍薿|r騵城紮;9鶀OK晘7啕)琴<耵傊≮'寫ie豝焚俱鍅官匇駄齲?~跣顦r,lì鄸i艴s滆珨f跭痧*i顦U敮衛嘀柧O[[9!@R~9>ui診挒省sx践zyuw{[e,矪[|来 脉yg45婂槹2綣2霉蘺>!O珶 澚萼'Y蠹X}綗*篵u籢畂頽7s鱭髎Yq鉜W琭糏鳃俺樾穐鯿駼2顲;飆@k=称k硨l@i@75`酜4`檐褉DU茉徸;歱搬脌桌蒺&49U咭傦廮袀:磿遭-鑧穈<稁龑礰捬-b-堺劸T =-堢P臡-N炿圍 R禱皫匳/?a穎0蒪Ⅸ愇摫7鷟麇鲇鏃un7霙珖$Z螀>-毛7皋fl瘅丑所b僻躇bv45c袊s}幅)v<,<u ゅ硨lyiy7祙酜磡檐羊DU茉螂献黪a讋rU㏕EU漶8}<2埩羮3鐺)渰噜9Tq湜w袘\1岬% F诫乩慯癲M蔫嗑籁=t`敛k遵,睺F诫槹η,a7脕溌濩7罽?_.痆ld8遆>l氈陞gsB"i察隝>軐'論xj綧ж| +鸢$3嫒&oP风v$~3腐~ s蹨缘銓婣飈m(@Z;巳諪焄涴M璢閦芤蔦噦I'短www襍iTqcqv8諀枨泺鉷*勜_Ln& xY矈菺 +藙熬蘂锤浶K暑~ +0領Fsw7s嚲 顇U苣溏鎲Y嬜f>獔\ゐ屺0敥r璝(臂0銲F#r7#嚲 鋢U軇浏飂媧齡殊E*耛啣圴挨裖(+翑慊*PQN22(憔2繇燶橑P朴ㄢ&淑go叨*a韅$9a`A7o1患忡1拢屫鲸i L;鐱竓跶冢穏髶氻,觉I;K.樼\温度嗐佸F霧 $ab巰.顩馚緟y`<*n^幗:粯Z具8L蟀吺鄒*"8鬹檧j潔U8*8)誑襊愇24犋L氿M _歵i轆欻泈娉佑摚派qEZz平皒矈H@*哠)l雽兰BF,(繦'Ms週鷙.蘽H鉯Tq榕燧神冫zsNz YE鳮)櫞jB段薬唒d▊宼捬1G@魍ぁo槁紘4濬7&'唒|齐慣T"駦u庘E")Z透CF*(纮' s纐 鷙/蘽鉯Tq岙}褄又a$a譫2^$S7显Z01疠o虲9蒱葮#岥f刃raO '0<4|>巏构b-GVy08{敕恃狐J%Bh&|砺棪]歸&舀&趏鐙t礰絞{&7x)矈!秗h}%|樠d覀寀捬1G魍o肼紘5濬7镔笏w圀[讇 +,^叕"鞜T^曵N1'怚 +0蜪Fsg7s喚 蝬U灳溝R献.$辎8氯挢 磯馄,+nS0 K嵡彵g?o;>稽昨嫠蛎楍讖wb!i苘>哓附+ %&0U凩踁荕7槫挖JD ,讆+懎蔲a兰 娖呜y雵P∶|O睈2磸⑵,b蹓q呒C邘澑0镔夞4鑻 熍6囶速鸦笾d駬f&ID"昤ヵ秝,睤蹳1O29樸緳9繇`^橑0怯ㄢ頵繉.$^$"R叼r"璼鮜櫼粀蜱埽垊峹=h郒c喍愌禸筷`m$b柉W帆:}廆毫馷z餱*烃泺嫄鉕T逰均Mrn酋罷汖糉H_j (擎珩椽綣$~-Q>U遝ndstream +endobj +1779 0 obj << +/Type /Page +/Contents 1780 0 R +/Resources 1778 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1754 0 R +/Annots [ 1783 0 R 1784 0 R 1785 0 R 1786 0 R 1787 0 R 1788 0 R 1789 0 R 1792 0 R 1794 0 R 1796 0 R 1798 0 R 1800 0 R 1802 0 R 1804 0 R 1806 0 R 1808 0 R 1810 0 R 1812 0 R 1814 0 R 1816 0 R 1818 0 R 1820 0 R 1822 0 R 1824 0 R 1826 0 R 1828 0 R 1830 0 R 1832 0 R 1834 0 R 1836 0 R 1838 0 R 1839 0 R 1840 0 R 1842 0 R 1844 0 R 1846 0 R ] +>> endobj +1783 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 704.2225 177.6109 715.1264] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1784 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 665.5053 197.5362 676.4093] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1785 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 626.7882 175.9567 637.6921] +/Subtype /Link +/A << /S /GoTo /D (a00093) >> +>> endobj +1786 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 588.071 196.4301 598.975] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +1787 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 575.1882 204.1809 586.0921] +/Subtype /Link +/A << /S /GoTo /D (a00091) >> +>> endobj +1788 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 562.3053 199.1998 573.2093] +/Subtype /Link +/A << /S /GoTo /D (a00096) >> +>> endobj +1789 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 549.4225 193.1026 560.3264] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +1792 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 467.8426 214.6224 477.7703] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6bfa488f87f68a6f7f4a3efb9e45eaf8) >> +>> endobj +1794 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 454.9597 216.6746 464.8874] +/Subtype /Link +/A << /S /GoTo /D (a00150_g39ce739bd352d7e348e37395ce903e43) >> +>> endobj +1796 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 442.0769 206.9409 452.0045] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf848ce44c810492e7a35c2d23a429f45) >> +>> endobj +1798 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 429.194 193.6609 439.1217] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf0ed78fd2be24d849cdd5af75e3b2674) >> +>> endobj +1800 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 416.3111 200.3059 426.2388] +/Subtype /Link +/A << /S /GoTo /D (a00150_g57e6dc1d58a36d0ed53a3dd29ccc5798) >> +>> endobj +1802 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 403.4283 201.9198 413.356] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga4c4310e54f18541b09e1e251fe7b22d) >> +>> endobj +1804 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 390.5454 229.0778 400.4731] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf84316f469ce0726985c0702db49a989) >> +>> endobj +1806 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 377.6626 220.769 387.5903] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2d3ba4b14d6d2f6576f9b547800b7945) >> +>> endobj +1808 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 364.7797 193.9898 374.7074] +/Subtype /Link +/A << /S /GoTo /D (a00150_gabc40c09f49d15acb1b1a7f02bb3a807) >> +>> endobj +1810 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 351.8969 199.7479 361.8246] +/Subtype /Link +/A << /S /GoTo /D (a00150_g041aea91aa6ef84dcc6cac3c51db9b2f) >> +>> endobj +1812 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 338.4114 243.3742 348.9417] +/Subtype /Link +/A << /S /GoTo /D (a00150_gd605357e29affb0d3104294c90f09905) >> +>> endobj +1814 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 326.1312 252.8785 336.0588] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5c97ae587595b5444be80f5ecc1d3382) >> +>> endobj +1816 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 313.2483 224.6544 323.176] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf0ccbc3bb2a3ba1ebc255c7b3fcedd24) >> +>> endobj +1818 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 300.3655 207.4989 310.2931] +/Subtype /Link +/A << /S /GoTo /D (a00150_g28eda870cff3d8e3cf2949e6f57a502b) >> +>> endobj +1820 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 287.4826 221.3369 297.4103] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga5e3c856b86725125d19fccc34cd9eb5) >> +>> endobj +1822 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 274.5998 218.5673 284.5274] +/Subtype /Link +/A << /S /GoTo /D (a00150_g8af482dec973db57d8b3bd3f69461488) >> +>> endobj +1824 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 261.7169 234.7964 271.6446] +/Subtype /Link +/A << /S /GoTo /D (a00150_gae59b70658f28ee6e998eaaab05e423f) >> +>> endobj +1826 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 248.834 224.5549 258.7617] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga533c394b1fa0030205534befa31c525) >> +>> endobj +1828 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 235.9512 224.5549 245.8789] +/Subtype /Link +/A << /S /GoTo /D (a00150_g160128ab5d2ea3cc497b91ee4eb4ef99) >> +>> endobj +1830 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 223.0683 211.9222 232.996] +/Subtype /Link +/A << /S /GoTo /D (a00150_g64d9affc680a445d708234e70450477b) >> +>> endobj +1832 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 210.1855 222.8911 220.1132] +/Subtype /Link +/A << /S /GoTo /D (a00150_gfff0ed43201bf1e2020de1a0d6cac070) >> +>> endobj +1834 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 197.3026 219.2748 207.2303] +/Subtype /Link +/A << /S /GoTo /D (a00150_gd135fb0cfdfb2c212f0f51865a3640e4) >> +>> endobj +1836 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 184.4198 214.1439 194.3474] +/Subtype /Link +/A << /S /GoTo /D (a00150_g13dfcb4a5f920e108253ade527a66cc2) >> +>> endobj +1838 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 171.5369 211.7529 181.4646] +/Subtype /Link +/A << /S /GoTo /D (a00150_gde29ec025e6754afd8cc24c954a8dec8) >> +>> endobj +1839 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 158.6541 238.2734 168.5817] +/Subtype /Link +/A << /S /GoTo /D (a00150_ge0825474feee11b4e038bfe71757875f) >> +>> endobj +1840 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [289.3868 143.1256 318.6011 153.0309] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +1842 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 119.9369 229.7753 129.8646] +/Subtype /Link +/A << /S /GoTo /D (a00150_g359951eecd80541c2101f628a9da9146) >> +>> endobj +1844 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 107.0541 223.6882 116.9817] +/Subtype /Link +/A << /S /GoTo /D (a00150_g517c770991459cc62dc009c0d3875c6a) >> +>> endobj +1846 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 94.1712 225.3421 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf72d7b9a737707dcfb2c41fec2b6792e) >> +>> endobj +1781 0 obj << +/D [1779 0 R /XYZ 90 757.9346 null] +>> endobj +1782 0 obj << +/D [1779 0 R /XYZ 90 723.1038 null] +>> endobj +1790 0 obj << +/D [1779 0 R /XYZ 90 485.7477 null] +>> endobj +1791 0 obj << +/D [1779 0 R /XYZ 90 485.7477 null] +>> endobj +1793 0 obj << +/D [1779 0 R /XYZ 90 471.8276 null] +>> endobj +1795 0 obj << +/D [1779 0 R /XYZ 90 458.9448 null] +>> endobj +1797 0 obj << +/D [1779 0 R /XYZ 90 446.0619 null] +>> endobj +1799 0 obj << +/D [1779 0 R /XYZ 90 433.1791 null] +>> endobj +1801 0 obj << +/D [1779 0 R /XYZ 90 420.2962 null] +>> endobj +1803 0 obj << +/D [1779 0 R /XYZ 90 407.4134 null] +>> endobj +1805 0 obj << +/D [1779 0 R /XYZ 90 394.5305 null] +>> endobj +1807 0 obj << +/D [1779 0 R /XYZ 90 381.6476 null] +>> endobj +1809 0 obj << +/D [1779 0 R /XYZ 90 368.7648 null] +>> endobj +1811 0 obj << +/D [1779 0 R /XYZ 90 355.8819 null] +>> endobj +1813 0 obj << +/D [1779 0 R /XYZ 90 342.3964 null] +>> endobj +1815 0 obj << +/D [1779 0 R /XYZ 90 330.1162 null] +>> endobj +1817 0 obj << +/D [1779 0 R /XYZ 90 317.2334 null] +>> endobj +1819 0 obj << +/D [1779 0 R /XYZ 90 304.3505 null] +>> endobj +1821 0 obj << +/D [1779 0 R /XYZ 90 291.4677 null] +>> endobj +1823 0 obj << +/D [1779 0 R /XYZ 90 278.5848 null] +>> endobj +1825 0 obj << +/D [1779 0 R /XYZ 90 265.702 null] +>> endobj +1827 0 obj << +/D [1779 0 R /XYZ 90 252.8191 null] +>> endobj +1829 0 obj << +/D [1779 0 R /XYZ 90 239.9362 null] +>> endobj +1831 0 obj << +/D [1779 0 R /XYZ 90 227.0534 null] +>> endobj +1833 0 obj << +/D [1779 0 R /XYZ 90 214.1705 null] +>> endobj +1835 0 obj << +/D [1779 0 R /XYZ 90 201.2877 null] +>> endobj +1837 0 obj << +/D [1779 0 R /XYZ 90 188.4048 null] +>> endobj +1841 0 obj << +/D [1779 0 R /XYZ 90 137.9854 null] +>> endobj +1843 0 obj << +/D [1779 0 R /XYZ 90 123.922 null] +>> endobj +1845 0 obj << +/D [1779 0 R /XYZ 90 111.0391 null] +>> endobj +1778 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1850 0 obj << +/Length 3655 +/Filter /FlateDecode +>> +stream +x诃\ko\_盄乥呏 邚 _Y稌葨*\ie礶W徳%w椳徨 E,﹞v喂s唖I.鲓嬂8敹嫬O{|>削啮'聃'鹈呸7蟙X媼泆+槕B..,"=w|鵻t5|)唿蝌篚闱真鳔煰?璶=鵹砼弡厀+(+鲛煎嬰(锴=蜹餱襁g"锅揣ナ|;啕G壋ya龁公K/?憂s-菟楍b澻]W/竐Zy饺〝俖4+<.峑p ]忱Hr晋卻y籮樀eN:Q3钷o!gPC搯譍麣/O?/O.^炡*s栥( \婽朓SK1~剭`鷁fv喲nc尷n湻 y G莈4q崇G/._5s蟿螧A鬜pf鯏^9煿b粱就蛔1椃(赿x寬閫脨y腵T4j恩跤幙"0)u@P@8箶偣X秮愛 i/矢髼嗤W即5鶂艅&n6爂r;!4/%g +W笙b<嫻憓3:胔1F`4蝃寙FW#F2毟籪2B桨x" +奝 %_ 鄦W=e=笚D湗+ +kboE喲E1偄纘KQ@迊ⅷ菺椦妮Ew2<瀳"も 1`[E, +#E喲E1偄纘KQ@迊ⅷ菺椦穭 (癉鞀b獱_柹v椱鱩迢 來8o豝憦貛薶&1輻蠋歭 o#&h"EQ{蠈j䲡頧D\坯w]体 佀8oq竆憦笇薶鈌椣瀜9緫签:瀬將▋d*業⑺r蝒"&劸箿a此#p-.C+梣M莒蛸鵈氩O%側@FQ詑飔毿C觇矠s櫱倏v猴2`.g2\苰嬎恮厘妡膃\F7粅z2殎澦8uqRG楃V杵;芃 紟x淨づ菸a4 Ii+{q 莹佘镉V炅O崐h捀 "竷b偒姎s玶鉻\繩腯漓0赺岓!飥鶊歉&nv袤謅g密(:zl笜d澼{16u\鬩体 佀8oq竆憦笇薶鈌.庣 A(:V凈qY]Q蟑阥蝒#契稲!s9胔1F2蝃\喖.W#.2毟馘撚嬎肳O蹪To妒釿((俕奌g2寋舆替 佂8o豛憦貙薶釨沖潨湺#滪-瀱"TL k暡憭 鹻鶞a聪#->C+焣M\梵梭髒8墪瞥PP}螔 R倌 +嘻"贉a赐#-6C+泀M軌统{*禭Dd!@j螌旬0穁至F腼oBbt亼F; 辧t臟]M萮&,叔崃嫇顺糜泯逑sn;) 瀻"tHgdBNt梯У彨霸*簙鎤喲~c尷o湻 y菺e4q+扣) 瀭 "%7:3衫苤坴 )Y渁磁#-C+媞M躭%谴幏a.=瀼"勅($M-D0g筿L(捱0舔 -佸8oX^憦X幩h庵栂9硸HBA祀#g茊歖荣…u 7胼霕薣m2B:8贺jbyqt襆滋*嶆%cpI奊$ eUf灋"t└3坪Z桺vD:吉U@喲1 +纘K@迊 +ㄈG*椦妮U莱沲/乡N$ +/ 瀶"4ん┲)9眬浲i刼 Q茰&R$詗適 鮁9[堩淵襮(,飋諤V8F +-y +")\FwW8q癞聱爨痱誒眽<=;lwp擭gP澠SSP&'徻鸝覝*瘕齒@/0襷攓g=翛xi雓 M芷T犰i?稡嚅)(B椧楫!\璳nO估3"`?y恮妡\F7渗!.麞療5"琫渒Gd (j霗0燍V扊竰紌h? g囉愸敄&n因椝嚝/襁譿蛚訕笟qOFA剢鱉o:桖$\蛙c鍃《纺tG黭#闻蓈pa4OO洎崨篝瘆蓷7s $1h +姞o%7閘腭聱`脎A泞^醴!Fw t 湻t ;%*驊.佀h&蟴m fb秷d艥X(m&〨跠贐!9驪饎6.&l\醮R"u洶奩铴u8&捯徽畸h}没闩(堶稸!/F湻;0^*驊駛薶怄YUo螖Q鋛其峳撥F甏FQ饎6n0縙}陯飿持嵘(╒A=bb窑q覬7V [耨)x"Qm\昶倻 僩(&陴峌莑5 蝃h鵋@e4q走誽陧弈 濰BFQ>卫=m抾糞 /輍& +炐移囫鹤(済蔋'Zup測4鼺⊙x疤閲髷馮灇窽.M$灔"枸h脥"維蟒>xk[%:$P乙#锧媭#0崥克w?翙=蜑#刦!覺笹荀孨G.呹D 樥F{1硄掴6盎"椦耐<燒ZT2姠n?eO+揘N轉?K桫桙憢}Y]痭頶 +$N莃!厏+ +,攓W o.悐鱝s漨yD3f:6pJ4旰 {賜斮舢8.]2/(﨡坰h&誩\-/M隹鑧鬃ws螲P誟z螲P35瓔8鄣r!礚S〩g蔯~裬n>r[骄xw)柸蟅_铞昜锼霉謃|躇鵱鹷~竁J遇 +[ &璹胳璲!訋YKGpkF5k8ok悧k罄X%L5湟鳻谜暠V蒣5K5!0諴e珹7\縊籪烑?3尞A 蝃j騌5X1 .a昻ㄩ尌M梁Y嬰儤諼Je镣褥4%nTA宛W硱XCi7檚陛榽冀J璿n!t猈/F@姳廊bDw臜疰b瑇KK鞠縙7躴60額9f<ア墰濥r鼯*蕹 猟咾K$!(z>j掽8A潧5窝d<ーw?7佑;b瘼W^Po:biD謸+珀蓰2,芜銟妖9 +=描BG宋*酑.sJ]P蔹軾9f7u1yQび A +R^普蜮8国痫O漮瀍艥砍Z77H値檘rB媩樉艙 +绘e奒3ē7餌堸懲呌;澇糠擒%箝椓<憼6n?A0 2擰滨陛圛>畁鐉H^n蓹 A彮 Y%Xp痤阏闱w踘?|佝rt夯]=lf鵤u曁Z⑼B*m逗.6?騐藳鳵#氘鸕>贜=5薙荢7(骸nq弙 4S oa笐⒙2 + +[O+;m4鈱-帛颕拎!謎* +hUl抡圭簍聐䴖綞纄YX'u7氤跙荝蚏掤绔壅]^综!s洘君迩4过煽曣[箎指滠n~毁梖鵼;挹噿膑麫虔靠_5"7B蚭秪g奺ndstream +endobj +1849 0 obj << +/Type /Page +/Contents 1850 0 R +/Resources 1848 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1754 0 R +/Annots [ 1853 0 R 1855 0 R 1857 0 R 1859 0 R 1861 0 R 1863 0 R 1865 0 R 1867 0 R 1869 0 R 1871 0 R 1873 0 R 1875 0 R 1877 0 R 1879 0 R 1881 0 R 1883 0 R 1885 0 R 1887 0 R 1889 0 R 1891 0 R 1893 0 R 1895 0 R 1897 0 R 1899 0 R 1901 0 R 1903 0 R 1905 0 R 1907 0 R 1908 0 R 1909 0 R 1911 0 R 1912 0 R 1914 0 R 1915 0 R 1916 0 R 1918 0 R 1919 0 R 1920 0 R 1922 0 R 1924 0 R 1927 0 R 1928 0 R 1930 0 R 1931 0 R 1932 0 R 1933 0 R 1936 0 R 1937 0 R 1938 0 R 1939 0 R 1940 0 R 1941 0 R 1942 0 R 1943 0 R ] +>> endobj +1853 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 727.7951 234.7566 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00150_gad0321f4c570f9983c6de81ece3ddc20) >> +>> endobj +1855 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 714.8027 209.1527 724.7304] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6bc12c6c7b56f73ce5d57abfdcdc6eb5) >> +>> endobj +1857 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 701.8102 220.2212 711.7379] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb948296aea6b6b3aa1f156799c4d479c) >> +>> endobj +1859 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 688.8178 218.5673 698.7454] +/Subtype /Link +/A << /S /GoTo /D (a00150_g17d111686f98e4c09db73a770ac3f1a4) >> +>> endobj +1861 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 675.2227 229.0778 685.753] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6f2b90c597ec23f39ec716ccec11233c) >> +>> endobj +1863 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 662.2302 227.424 672.7605] +/Subtype /Link +/A << /S /GoTo /D (a00150_g15f2617f7dc1713f9d10282125c6027b) >> +>> endobj +1865 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 649.8404 227.424 659.7681] +/Subtype /Link +/A << /S /GoTo /D (a00150_gee37386b2ab828787c05227eb109def7) >> +>> endobj +1867 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 636.848 187.0257 646.7756] +/Subtype /Link +/A << /S /GoTo /D (a00150_g88e60aa2cf23e1c65d630701db08c743) >> +>> endobj +1869 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 623.8555 190.9012 633.7832] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6020613f5062417d9811cfa837215c83) >> +>> endobj +1871 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 610.8631 189.2474 620.7907] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5ca559def464ef20d8b1f7d32f2f160d) >> +>> endobj +1873 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 597.8706 189.2474 607.7983] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1320fd0006a2f70138bc2d0018dda829) >> +>> endobj +1875 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 584.8781 191.6086 594.8058] +/Subtype /Link +/A << /S /GoTo /D (a00150_g44b3b1ab31a403ba28ec135adfcbefef) >> +>> endobj +1877 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 571.8857 192.007 581.8134] +/Subtype /Link +/A << /S /GoTo /D (a00150_gc84f499cba8a02fc0e306c10b2acabf0) >> +>> endobj +1879 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 558.8933 189.7953 568.8209] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1425d4a0c2760adb653a04c0fb137a8d) >> +>> endobj +1881 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 545.9008 215.2498 555.8285] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1215163245304bad20d6c5608ad75ab7) >> +>> endobj +1883 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 532.9083 221.8948 542.836] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9f1822e1d231235edacad691f3cb7bbb) >> +>> endobj +1885 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 519.9159 214.7117 529.8436] +/Subtype /Link +/A << /S /GoTo /D (a00150_g691688604655ea8943d15f14c60027d8) >> +>> endobj +1887 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 506.9234 239.0603 516.8511] +/Subtype /Link +/A << /S /GoTo /D (a00150_g12f3bf821224b8e7b48a57ed3cea15cf) >> +>> endobj +1889 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 493.931 239.7177 503.8587] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5c5b1834e497f53ad0ef947bbe9777fa) >> +>> endobj +1891 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 480.9385 204.1812 490.8662] +/Subtype /Link +/A << /S /GoTo /D (a00150_gd58231410d58e34b455328b888a9e73c) >> +>> endobj +1893 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 467.9461 244.6991 477.8738] +/Subtype /Link +/A << /S /GoTo /D (a00150_g207d17b633cd095120a74bc1f2257b17) >> +>> endobj +1895 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 454.9536 209.1625 464.8813] +/Subtype /Link +/A << /S /GoTo /D (a00150_g4cc3e223b63f27b546d62e9a258dba5a) >> +>> endobj +1897 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 441.9612 305.6302 451.8889] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1cea57e3ea526f210b1068e6dcf7b4f4) >> +>> endobj +1899 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 428.9687 321.0623 438.8964] +/Subtype /Link +/A << /S /GoTo /D (a00150_g62c03e0a308cc23929a80fe8d8f9dc1e) >> +>> endobj +1901 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 415.3736 218.1788 425.904] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1d3211dbbdfb22d6a47b60dddcf945e8) >> +>> endobj +1903 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 402.9838 341.9936 412.9115] +/Subtype /Link +/A << /S /GoTo /D (a00150_g42288d5c3cf4b10becefec657f441e54) >> +>> endobj +1905 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 389.9914 341.0573 399.9191] +/Subtype /Link +/A << /S /GoTo /D (a00150_g8387881de3a8bfd3c0d57b9d04ac9b7e) >> +>> endobj +1907 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 376.0227 167.0009 386.9266] +/Subtype /Link +/A << /S /GoTo /D (a00150_g24f52ac52d6e714cb04a5aa01be3bdd0) >> +>> endobj +1908 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.7613 376.0227 256.6538 386.9266] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +1909 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [273.2016 376.0227 305.9885 386.9266] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +1911 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 363.0302 172.5401 373.9342] +/Subtype /Link +/A << /S /GoTo /D (a00150_g96544dedc1cdc71ad2ad54bf1d5e5433) >> +>> endobj +1912 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.3005 363.0302 262.193 373.9342] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +1914 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 350.0378 191.3593 360.9417] +/Subtype /Link +/A << /S /GoTo /D (a00150_g4309376690872fa4beb4f025f5cc199b) >> +>> endobj +1915 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [223.1197 350.0378 288.763 360.9417] +/Subtype /Link +/A << /S /GoTo /D (a00091) >> +>> endobj +1916 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [305.3108 350.0378 338.0977 360.9417] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +1918 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 337.0453 186.9261 347.9492] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb9435261753469accec0c9bf8a5a2686) >> +>> endobj +1919 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [218.6865 337.0453 279.3487 347.9492] +/Subtype /Link +/A << /S /GoTo /D (a00096) >> +>> endobj +1920 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [295.8965 337.0453 328.6835 347.9492] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +1922 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 324.4265 191.6285 334.9568] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9c0814ed491fa452ec97910c0728d410) >> +>> endobj +1924 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 311.434 189.2275 321.9643] +/Subtype /Link +/A << /S /GoTo /D (a00150_g013c3a06a8b58589a77f4a3442f89c2a) >> +>> endobj +1927 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 254.0565 170.966 264.9604] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1928 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4642 254.0565 229.3566 264.9604] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20ceef9d0868d391c2f33041b02cb1f1) >> +>> endobj +1930 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 215.1201 170.966 226.0241] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1931 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4642 215.1201 229.3566 226.0241] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9ebb4dac683163840eab9c6c41ad61f7) >> +>> endobj +1932 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 202.1277 204.1712 213.0316] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20ceef9d0868d391c2f33041b02cb1f1) >> +>> endobj +1933 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.6693 202.1277 257.5805 213.0316] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1936 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 145.1237 183.4989 156.0277] +/Subtype /Link +/A << /S /GoTo /D (a00150_g266263ac78a1361a2b1d15741d3b0675) >> +>> endobj +1937 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [187.3145 145.1237 207.0205 156.0277] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +1938 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 132.1313 138.5977 143.0352] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1939 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 132.1313 189.7953 143.0352] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb6683dd83fe1c8de9a24086d4b69e907) >> +>> endobj +1940 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.6109 132.1313 218.2983 143.0352] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1941 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [241.84 132.1313 266.5273 143.0352] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1942 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 93.195 138.5977 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1943 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 93.195 197.5461 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2addf34c7d457c1a7899a7e2171ef1e9) >> +>> endobj +1851 0 obj << +/D [1849 0 R /XYZ 90 757.9346 null] +>> endobj +1852 0 obj << +/D [1849 0 R /XYZ 90 739.9346 null] +>> endobj +1854 0 obj << +/D [1849 0 R /XYZ 90 731.7802 null] +>> endobj +1856 0 obj << +/D [1849 0 R /XYZ 90 718.7877 null] +>> endobj +1858 0 obj << +/D [1849 0 R /XYZ 90 705.7953 null] +>> endobj +1860 0 obj << +/D [1849 0 R /XYZ 90 692.8028 null] +>> endobj +1862 0 obj << +/D [1849 0 R /XYZ 90 679.2077 null] +>> endobj +1864 0 obj << +/D [1849 0 R /XYZ 90 666.2153 null] +>> endobj +1866 0 obj << +/D [1849 0 R /XYZ 90 653.8255 null] +>> endobj +1868 0 obj << +/D [1849 0 R /XYZ 90 640.833 null] +>> endobj +1870 0 obj << +/D [1849 0 R /XYZ 90 627.8406 null] +>> endobj +1872 0 obj << +/D [1849 0 R /XYZ 90 614.8481 null] +>> endobj +1874 0 obj << +/D [1849 0 R /XYZ 90 601.8557 null] +>> endobj +1876 0 obj << +/D [1849 0 R /XYZ 90 588.8632 null] +>> endobj +1878 0 obj << +/D [1849 0 R /XYZ 90 575.8708 null] +>> endobj +1880 0 obj << +/D [1849 0 R /XYZ 90 562.8783 null] +>> endobj +1882 0 obj << +/D [1849 0 R /XYZ 90 549.8858 null] +>> endobj +1884 0 obj << +/D [1849 0 R /XYZ 90 536.8934 null] +>> endobj +1886 0 obj << +/D [1849 0 R /XYZ 90 523.901 null] +>> endobj +1888 0 obj << +/D [1849 0 R /XYZ 90 510.9085 null] +>> endobj +1890 0 obj << +/D [1849 0 R /XYZ 90 497.916 null] +>> endobj +1892 0 obj << +/D [1849 0 R /XYZ 90 484.9236 null] +>> endobj +1894 0 obj << +/D [1849 0 R /XYZ 90 471.9311 null] +>> endobj +1896 0 obj << +/D [1849 0 R /XYZ 90 458.9387 null] +>> endobj +1898 0 obj << +/D [1849 0 R /XYZ 90 445.9462 null] +>> endobj +1900 0 obj << +/D [1849 0 R /XYZ 90 432.9538 null] +>> endobj +1902 0 obj << +/D [1849 0 R /XYZ 90 419.3587 null] +>> endobj +1904 0 obj << +/D [1849 0 R /XYZ 90 406.9689 null] +>> endobj +1906 0 obj << +/D [1849 0 R /XYZ 90 393.9764 null] +>> endobj +1910 0 obj << +/D [1849 0 R /XYZ 90 380.0077 null] +>> endobj +1913 0 obj << +/D [1849 0 R /XYZ 90 367.0153 null] +>> endobj +1917 0 obj << +/D [1849 0 R /XYZ 90 354.0228 null] +>> endobj +1921 0 obj << +/D [1849 0 R /XYZ 90 341.0304 null] +>> endobj +1923 0 obj << +/D [1849 0 R /XYZ 90 328.4115 null] +>> endobj +1925 0 obj << +/D [1849 0 R /XYZ 90 270.7639 null] +>> endobj +1926 0 obj << +/D [1849 0 R /XYZ 90 270.7639 null] +>> endobj +1929 0 obj << +/D [1849 0 R /XYZ 90 234.2545 null] +>> endobj +1519 0 obj << +/D [1849 0 R /XYZ 90 219.1052 null] +>> endobj +1934 0 obj << +/D [1849 0 R /XYZ 90 164.1147 null] +>> endobj +1935 0 obj << +/D [1849 0 R /XYZ 90 164.1147 null] +>> endobj +1848 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1947 0 obj << +/Length 2723 +/Filter /FlateDecode +>> +stream +x谕[蹝}忒#Ye赂_9qYUq攈YアH見すC墒拽樍 涊Tヴ%y貆杏а笎(點3GgF鈩猿蹒:ot煤彈瘗2鲦q7s膇甮穡 熭n尢5q%Wt~鹮埝qU魑媁邍氄b)ùz忭硭浛轋/%4髇竬髺6里 %耏5 +/(a务夔蒃xq篾鏌袾 c脫T+靗蒑;攣5刬0|胏<漎> >て資@鶢糥莜削婬BⅠq悔lO磉S鹌z灵鸣s醤鹫悛E,漮涇蘮逧w|鬓#蟱0F:屖0嗤+嚑隳r│S唈卢MRF$)绵S)瑴E槒扬湯|+1K =J,兦軂孢9}>鶺蕽恓嵅 3语殞0DS&嬼8憥湠:蜳z拽O筜/3犐)匧糎sQN慫噶樱妦駃v豰鄌6昮1" 玊Z.H-翵Z冴骴亶夑蚱j抗~:7玣5)5m)憣沢憵諴&堅" 昛j鹕RC\廬Yj%z彇B/帔羿 7揜娜r劯琊旄f痨j叇81嗰J%钂$確歞2瓿岰@樞Z槴Z@巠尐e ++I($WS哂J x孍f7(錫垤#D寖vM:$吂穼h罱R2縑J∷ @溃 唙'+囦颞8魣BsF$<:R g槨4$鑂i八繡c慧餁蓐~黠U;t毦;镒磍>r瑀U猇9h璔坖# Umj盃Z膐Pm/撅 +",2籄但虵餦弛7 A@a蜛跼K1fa冶蘓?1欇损順ds孛彣/-榧蜛┦ GN咓; y楦$8饦肣痫2r$`劔 O#嵘鞱4抑 (瘫矂*7葘脩镽QS奪.k麧娱[酌溁>e政'.嫉凫婂MiI4脰@吊M1Hb冒`x}K 栮[賝琽季鮸自2嬏n╫~Z蔢hhh6(谭禗R5餧奂+釈(e暽湢K`O煛讋茬殺檧F,匸槶H醼|lj瑪);焍朊~1刓M.#*鬏汫槖D6圠7忯S,*~鹭3婚璺雦nUK檬(=鳠 +c萚 墧獾坸斄衝0GN#S%舉V-F 爯嘹獳[)Pj%N-羺んhftm"塚nw玻埪 嵞里閤85",%B;[W凷tG廿hT翌z-舏!蘾禬>:帙ap萦d/!抋K绞B-$ + )暝鄵 5.鄗旌郊馼m牳鵠薳D妣>昑圓t茒礶衱g),w:<佁n価v琳黭靖PP` DB H~%)2V%#陲&T!1橾碻;@)B-邈i0V癊M羻&/r瘚V#咽鞱l c萝PSf鷑駔1谏蕑潬K:<呑a{鷟煺j筲l氛皆GKi塭丌刀< +zPxq練+薔c袽湤炪奅`櫬衘,z軨惩司觖橚贁@坰珘众鮾>号_睷謳=18怺诟驙#3xE邓R抮;訣竿lc毊x鮬墚wP忶;g蛱 +X<膝 釥榉 +p3競#,V衟/*饩 +#,2籄*啓枃堿@a迧&咼>堼◥)Ξ隈< 砙8_饽0C(1 +謑f0tL温騰J) k:5 I h5臯}祾哊芚%0I.槟鄵WL(鼣]鵵F夀/g 瓽颿s?宮i M夀20勤淆l椦b燼駇-l籾x斄蓄魮q䎬X`C(瘫鋥像縭\雭`膴蕑悹K 篮4 U侀霊缯举5葆,⒃y腐蟒[豮9\6_釻蔖Q鲔骐狒i k涢繕[炘顭榯Xa 0及$K紹賝,糤棂,2蛔(麘(擷科,G 0逨#<X > endobj +1949 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 703.0355 138.5977 713.9394] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1950 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 703.0355 201.9695 713.9394] +/Subtype /Link +/A << /S /GoTo /D (a00150_g85b65e38aa74eba18979156f97a94a87) >> +>> endobj +1951 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 664.4351 138.5977 675.3391] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1952 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 664.4351 204.7393 675.3391] +/Subtype /Link +/A << /S /GoTo /D (a00150_g7023a34ba9e9d03b5fbedbcb32924453) >> +>> endobj +1953 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 625.8348 180.1912 636.7387] +/Subtype /Link +/A << /S /GoTo /D (a00150_g22f140b02c354dfebcc7ad481c3bcd68) >> +>> endobj +1954 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [184.0068 625.8348 208.6941 636.7387] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1955 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 587.2344 177.9699 598.1383] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6832e4d2d046536b6472f7ac92340f68) >> +>> endobj +1956 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7856 587.2344 201.4916 598.1383] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +1957 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [231.8776 587.2344 256.5649 598.1383] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1958 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 548.634 166.9111 559.538] +/Subtype /Link +/A << /S /GoTo /D (a00150_gc48ed5f0d27721ef62a3ed02a5ad8d2e) >> +>> endobj +1959 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 510.0337 152.9837 520.9376] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1960 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 510.0337 211.6433 520.9376] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9c24fba2cd8f7f62accb0a0d5bbe4dad) >> +>> endobj +1961 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.459 510.0337 268.3701 520.9376] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1962 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [307.2043 510.0337 331.8917 520.9376] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1963 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 471.4333 172.9089 482.3372] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1964 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 471.4333 236.859 482.3372] +/Subtype /Link +/A << /S /GoTo /D (a00150_g79c4110211247df3fb30b8cf1c4c02af) >> +>> endobj +1965 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [240.6746 471.4333 293.5858 482.3372] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1966 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [332.42 471.4333 357.1073 482.3372] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1967 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 432.8329 185.1725 443.7369] +/Subtype /Link +/A << /S /GoTo /D (a00150_gaa585784b0914cac1d37f07f85457008) >> +>> endobj +1968 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.9881 432.8329 213.6754 443.7369] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1969 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 394.2326 175.2098 405.1365] +/Subtype /Link +/A << /S /GoTo /D (a00150_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +1970 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.0255 394.2326 203.7128 405.1365] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1971 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 356.0058 138.5977 366.5361] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1972 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 356.0058 162.6772 366.5361] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +1973 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [166.4928 356.0058 191.1801 366.5361] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1974 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 317.0318 171.8826 327.9358] +/Subtype /Link +/A << /S /GoTo /D (a00150_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +1976 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 234.645 192.0768 245.5489] +/Subtype /Link +/A << /S /GoTo /D (a00150_g561b8eda32e059d4e7397f776268cc63) >> +>> endobj +1977 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 196.0446 152.9837 206.9486] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1978 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 196.0446 200.0271 206.9486] +/Subtype /Link +/A << /S /GoTo /D (a00150_g788ffac72342f6172343d7f8099cbe1a) >> +>> endobj +1979 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 157.4443 152.9837 168.3482] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1980 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.4818 157.4443 196.4305 168.3482] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf703683056d2bfa5c81fa157dcb20fe2) >> +>> endobj +1982 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 144.6198 172.9089 155.5237] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1983 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 144.6198 239.8777 155.5237] +/Subtype /Link +/A << /S /GoTo /D (a00150_g210f227119fc972e6222c9cb452e15a9) >> +>> endobj +1985 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 106.0194 172.9089 116.9234] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1986 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.4071 106.0194 236.281 116.9234] +/Subtype /Link +/A << /S /GoTo /D (a00150_geb533744817cf6695d75293369c2248b) >> +>> endobj +1987 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 93.195 151.3294 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00093) >> +>> endobj +1988 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [151.8276 93.195 185.3713 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9ee50a40597e67fce96541ab56c3b712) >> +>> endobj +1948 0 obj << +/D [1946 0 R /XYZ 90 757.9346 null] +>> endobj +1975 0 obj << +/D [1946 0 R /XYZ 90 253.468 null] +>> endobj +1406 0 obj << +/D [1946 0 R /XYZ 90 176.4106 null] +>> endobj +1981 0 obj << +/D [1946 0 R /XYZ 90 161.4293 null] +>> endobj +1984 0 obj << +/D [1946 0 R /XYZ 90 124.9858 null] +>> endobj +1945 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2003 0 obj << +/Length 2504 +/Filter /FlateDecode +>> +stream +x诃[賻7}锆 a"汒饬<8貥8澑2禷%u穈翟褣溥绮奷]J愝.U"锕  (仯 qB炅酤n狯,<皿q赈蒏8王嚓A38銉郑1吩嗅%\*:d勚?璯季~緸铒绔載稾疐痎_几JZJh鎨恺G:阶g锗鳣 s/$衩蜮砼/鶤魾哞$U +;sS'u缹4{p结,籍7儑8;(o摣0鑔挮.熌氕妨v窐nI監脿U&N0餭) 冩啿G9E&'Ha 咙>p茑- o拜$2袪~骘ln茫_s T"粓k佰跲;翂镭q"5evB屁-矉&慌莽攰身禖0ⅴ(杀 燴X綜蔶玢0筇~el捺偈谽\儩份鈇2沵z%枙潞蘎["榬E譨y穯0瀖枩CT,A賭*kl 1oL+k5x酒8护q晤8枾k尦L穀畸肾sGbH蝄H墥P∈kI╠$q剷%<_b淽8gw溎擞%芛&壽,g涋 f淧 ú聤&%樎VV8k饇卶vI釡輖 +#,OWgn,'j別;Q瀍i%#,q粥沆捘9汇$FX.12I躥Y +b勩)A H烁.)ae叧蟇g钨0买t卶朓6薭%FH濺堿獫)Iae壋蠗g$钨y阃ww燏刬C ey鞉I{& .睂>桚Ql0Jr淧咁}咬姷岕飠]_艋赭鬟={)"6( 擿E聑<賮 +"]kc霳^k谽\8熙堄狺/ㅀ.ZB暫鳗嫂V黠呓狐酏堁峄梠_?C;:8莔9録d)龙7&So浵炧|W邒謆vx3邔c脙籔 +梍cJ)I瑄N倳##k扒U7鵿揎镛F肱眺%烃鶅J絋)倰a卝<_②i7冷醓6費:D#訰匸 +L~荓#輔6#a嗴.}!<侎艇~笜併R翘W)f铝躋Z[垜+艸捺1R`q vc剶F\/胣⺳ +-9Jq淧ノI`矣杓趕7o迆熨艬錡埧d蘝"/H彠 .鵎a鬘鐴\摓熼/痘a劫m鹯焋庒%TL垾愊*楖汐稺/轡際C宏w-!廾蕿cPe9茌閹僐K~換蠛靏R 蘡礖u:ocX篐*D.}鍱执韗x^{徽邑拱腪&癖 F s蚰b,#`1U( 諼倂j罨缜譢陉疭s9H蔝閿#潦憪5x~(囔R,潇 勫暴YdqYn粇芬4 U 馈~狣 +n囋_F壎鰸 鵑剷}轳t吡%呱佟玌屳色粓k搀萤郵穯Y敢,滳経掖L骬<銅W#厦r48蘷.亲_v駆R'S蒙棸窛详珱酽荡||v;m?_M脫政:畧錿楷+嫑k噦蔠嚲i啁?D!怠J<6DXh贳Y-鹣./煆>959:|錾焩啨裴韸{漒U{澋q嬯葵嚀舝r1惔6貞P;j救%-$匈B%8''v-As 婬;%GTA)避春oYV﹝%"纝Y譢薁萣 唖zx?檔4絒/g醤p学 ⒘K:p+WA釜P:挩侤厵Wン褎/魳вnA!齀景-"-u=&7凑}:c)M垖\06K*Cy啩左d頨PX.)M@)j箝缗6D鄗开D0腯3躩w⒀嶊纞耒濑a9诙︰2k #C-项<窝礶桛* 馎B卑狶(O`粃貈漬>PE3痫FcM持倡:S呟唿c 国&|^累靇=il簞 碃0鎼d該P&枊.櫌篿c悟堒懢>1聕耢q@ +礃V烢U3/餕髵技鑠钏酔Yé釭|5週v盫芶/^麣缨\<遽`淔僒A2z绉b譥b聱笏m魅D4J +b┩endstream +endobj +2002 0 obj << +/Type /Page +/Contents 2003 0 R +/Resources 2001 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1754 0 R +/Annots [ 2006 0 R 2007 0 R 2009 0 R 2010 0 R 2012 0 R 2013 0 R 2015 0 R 2016 0 R 2017 0 R 2018 0 R 2019 0 R 2020 0 R 2021 0 R 2022 0 R 2024 0 R 2025 0 R 2026 0 R 2027 0 R 2028 0 R 2030 0 R 2031 0 R 2032 0 R 2034 0 R 2035 0 R 2036 0 R 2037 0 R 2038 0 R 2039 0 R 2040 0 R 2041 0 R 2043 0 R 2044 0 R 2045 0 R 2046 0 R 2047 0 R 2048 0 R 2050 0 R 2051 0 R 2054 0 R 2055 0 R ] +>> endobj +2006 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 702.117 133.6164 713.021] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2007 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 702.117 172.6397 713.021] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb4ef6b00924990e7a293f66715b6d1d1) >> +>> endobj +2009 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 688.3741 166.8215 699.278] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2010 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 688.3741 221.3367 699.278] +/Subtype /Link +/A << /S /GoTo /D (a00150_g7d3673f52f5846b6961d23b150decd54) >> +>> endobj +2012 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 674.6312 166.8215 685.5351] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2013 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 674.6312 220.2307 685.5351] +/Subtype /Link +/A << /S /GoTo /D (a00150_g3237be0d9ec457de0177689ee23c0d5c) >> +>> endobj +2015 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 660.8883 166.8215 671.7922] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2016 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 660.8883 213.028 671.7922] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20df5c82f2a15a508c19e505b5d9de2b) >> +>> endobj +2017 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 647.1453 166.8215 658.0493] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2018 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 647.1453 221.3367 658.0493] +/Subtype /Link +/A << /S /GoTo /D (a00150_g7d3673f52f5846b6961d23b150decd54) >> +>> endobj +2019 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 633.4024 166.8215 644.3063] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2020 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 633.4024 213.028 644.3063] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20df5c82f2a15a508c19e505b5d9de2b) >> +>> endobj +2021 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 619.6595 166.8215 630.5634] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2022 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 619.6595 220.2307 630.5634] +/Subtype /Link +/A << /S /GoTo /D (a00150_g3237be0d9ec457de0177689ee23c0d5c) >> +>> endobj +2024 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 605.9166 168.4754 616.8205] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +2025 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 605.9166 218.5572 616.8205] +/Subtype /Link +/A << /S /GoTo /D (a00150_g499bb98a0b4ae9a98553ede81317606d) >> +>> endobj +2026 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 592.1736 133.6164 603.0776] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2027 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 592.1736 166.9014 603.0776] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +2028 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 551.7363 192.0768 562.6403] +/Subtype /Link +/A << /S /GoTo /D (a00150_g561b8eda32e059d4e7397f776268cc63) >> +>> endobj +2030 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 511.2991 195.9522 522.203] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga05a3dde2048480fa3ab2a5961898d18) >> +>> endobj +2031 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 497.5561 138.5977 508.4601] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2032 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 497.5561 170.976 508.4601] +/Subtype /Link +/A << /S /GoTo /D (a00150_g12a33f0c09711167bdf3dd7d7cf8c5a1) >> +>> endobj +2034 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 457.1189 138.5977 468.0228] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2035 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 457.1189 174.8513 468.0228] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5b5615dc240daed20949c0fded2b4679) >> +>> endobj +2036 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 443.3759 133.6164 454.2799] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2037 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 443.3759 172.6397 454.2799] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb4ef6b00924990e7a293f66715b6d1d1) >> +>> endobj +2038 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 429.633 152.9837 440.537] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2039 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 429.633 200.0271 440.537] +/Subtype /Link +/A << /S /GoTo /D (a00150_g788ffac72342f6172343d7f8099cbe1a) >> +>> endobj +2040 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 389.1957 152.9837 400.0997] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2041 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.4818 389.1957 196.4305 400.0997] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf703683056d2bfa5c81fa157dcb20fe2) >> +>> endobj +2043 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 375.4528 138.5977 386.3567] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2044 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 375.4528 200.3154 386.3567] +/Subtype /Link +/A << /S /GoTo /D (a00150_g236d5c7872f59c8fe7b701c7252b976e) >> +>> endobj +2045 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 361.7099 172.9089 372.6138] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +2046 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 361.7099 239.8777 372.6138] +/Subtype /Link +/A << /S /GoTo /D (a00150_g210f227119fc972e6222c9cb452e15a9) >> +>> endobj +2047 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 321.2726 172.9089 332.1765] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +2048 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.4071 321.2726 236.281 332.1765] +/Subtype /Link +/A << /S /GoTo /D (a00150_geb533744817cf6695d75293369c2248b) >> +>> endobj +2050 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 307.5297 133.6164 318.4336] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2051 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 307.5297 177.0532 318.4336] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2a0cf5d86c58fab216414ce59bf1fea1) >> +>> endobj +2054 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [266.5461 195.4567 299.333 206.3606] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +2055 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [313.5331 177.8323 346.3201 188.7363] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +2004 0 obj << +/D [2002 0 R /XYZ 90 757.9346 null] +>> endobj +2005 0 obj << +/D [2002 0 R /XYZ 90 722.0018 null] +>> endobj +2008 0 obj << +/D [2002 0 R /XYZ 90 706.1021 null] +>> endobj +2011 0 obj << +/D [2002 0 R /XYZ 90 692.3592 null] +>> endobj +2014 0 obj << +/D [2002 0 R /XYZ 90 678.6162 null] +>> endobj +2023 0 obj << +/D [2002 0 R /XYZ 90 623.6445 null] +>> endobj +2029 0 obj << +/D [2002 0 R /XYZ 90 531.1839 null] +>> endobj +2033 0 obj << +/D [2002 0 R /XYZ 90 477.0037 null] +>> endobj +2042 0 obj << +/D [2002 0 R /XYZ 90 393.1808 null] +>> endobj +2049 0 obj << +/D [2002 0 R /XYZ 90 325.2577 null] +>> endobj +2052 0 obj << +/D [2002 0 R /XYZ 90 267.6373 null] +>> endobj +1847 0 obj << +/D [2002 0 R /XYZ 90 240.7961 null] +>> endobj +2053 0 obj << +/D [2002 0 R /XYZ 90 240.7961 null] +>> endobj +2001 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2058 0 obj << +/Length 2056 +/Filter /FlateDecode +>> +stream +x谂Y[徾~鳢餥m f9$Jyk7M砩I霏-ZYk %G柌摺x报=懒>,E~ >4): q/X']p桢簚颳呖g:"Q纻觚S{B膅乐鼷?6壎;嬗妄1U冩讖z骖泖f|┿渌v签汙l苞檗謡<I鲭陱胯z忺}XQ拢衉?%El}Zy寷弢鮵鮛{嶼h7宂>~?>3dx_a颎鴙斠望戡,詴迺IsJ:nюB=I(橤B醶侢蛠 慢(Z 饄桲誂c>u甡窕顔嗙J& >ㄟc';媄"靤鴋醕]%?㎡,剬邾`餕 螡AQC耯>W聦F凴迵路81`勄悁臓x@儀庲3V諅镄<葫揤0磺L徔6qQg鯆鷝藡F<驹趒薺烿jX楆懼蟍怟_蒲究!抂i H<痚忐槨9埻搖鵨f蟄v姭,憻力工{ /+5H塬e臕2僛闱<5$趉蓱簴)F錒_K拺讙S蔚菩淼0\梨饯<;欯亀鉖J1蹂暡某掼z 5站滷>淖丱夝距*侩nP5搬跪幙躱!茳琪弦k峣v籴蹸4沓觭媄`俿A.8┐ 3攍飼伞#(碿y镆?)eEv 员遏<+碭! 櫀鼡 J斿&乪g掫琙q)}JHR璟+漄拌窖=!9~4'#7潊(窑Y晌摏汖飭庱躘 M9}L 诱!掸擇磪事堝u餥k蕾﨡:揎9 霶H0*損弴K佪鄔 #亇pn孛懜*)#梼~\7!]鸷^80:t褄駝 脲4鹮葇瓵o帖宲A絒舋 ;Ey`A~5$戽E亃 @竸3嬄橨寣喣匸m菖Uポ璴顷g佐堉奞1Mb塧S數膟. sPr蘪粽T驋冪c誔椕笑>/+甏孬沜XGJV镈蚞Y欜赉)鋶:<3釨-ヲ尶氪*鈂 L 闅殭牃y泒㏑橮T樽&玓/q酔}f厒貪*2)s祹_F/H - U1磳8l]巈搆篐k,爪跣 V攵捔骤梌4<鐀襂表地涞3脚C^>*YR$釋艚'膜 +h6!沣m砗ā訂mI塯耱羁梪鷙u)柦溋s钇X賡T硛p蒥话 YX7艓jh灝招罡? {襂㎞7ザ蛙y5豔S腹鎔^艉箞繙蟋~历廛季ゆ/A 彋^偤f^,l%萫a%h伆y r 垲g簁`敱[ n吪/p4嵩c螈皑!a穖谰VD^O7 廩喍4Vs闀醖鐎鮱(]鸉 j鴴N/D' +E ?襲蹎坆{r梡阆i&棜DE $墚!O<メ2籤套;4冠o)C檦r塓 O/e硭S!卤n慿曩,視.桬鷿-4憫钼汽N祼?娇迷5]FA&7_FuQ觘  {諻誕c 蘢'鉟诼z铑<+倱╕@8(钀+ガ#魌:尔盱t&虢>趀凖聇$_1繠壴呁 呃:崮<%炵 d jH'x焫,]馋3◤n戲椉u?`,Xpj邶繥<栋郝獩J^蠼9葟6嫒6/桡Z爞Α Tvs伿㑳仾埝益T}Z眤竽$) + d{鵲~僲Dq 6]3啦W洒晶.?Z诺┌崉~38鑋七2獘{J椩HY鮺B蒡齗薬栾K$endstream +endobj +2057 0 obj << +/Type /Page +/Contents 2058 0 R +/Resources 2056 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2072 0 R +/Annots [ 2062 0 R 2063 0 R 2064 0 R 2066 0 R 2067 0 R 2069 0 R 2070 0 R 2071 0 R ] +>> endobj +2062 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 702.4242 152.1568 713.0144] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2063 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7156 702.4242 207.5088 713.0144] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2064 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [294.093 647.6032 335.7466 658.5071] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +2066 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.6856 560.3152 218.4975 571.2043] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2067 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [251.3742 560.3152 277.1673 571.2043] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2069 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 305.376 152.1568 316.2651] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2070 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [210.5073 305.376 236.3005 316.2651] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2071 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [262.8907 305.376 288.6839 316.2651] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2059 0 obj << +/D [2057 0 R /XYZ 90 757.9346 null] +>> endobj +2060 0 obj << +/D [2057 0 R /XYZ 90 739.9346 null] +>> endobj +1996 0 obj << +/D [2057 0 R /XYZ 90 722.6349 null] +>> endobj +2061 0 obj << +/D [2057 0 R /XYZ 90 722.6349 null] +>> endobj +681 0 obj << +/D [2057 0 R /XYZ 486.51 597.8832 null] +>> endobj +2065 0 obj << +/D [2057 0 R /XYZ 90 578.8113 null] +>> endobj +1944 0 obj << +/D [2057 0 R /XYZ 224.7534 342.944 null] +>> endobj +2068 0 obj << +/D [2057 0 R /XYZ 90 323.8721 null] +>> endobj +1992 0 obj << +/D [2057 0 R /XYZ 167.4587 96.348 null] +>> endobj +2056 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2075 0 obj << +/Length 2271 +/Filter /FlateDecode +>> +stream +x诃YYo鉌~鳢杏B琋$絆壡欛缿蕉f丒4I[腍ぢc溬_空臟敵恍邯汉簬檃鴳Yg烉P栏淓 <{呩腘/a~绝醙H*gMA$(〕u\鷭%醣囩蹴4凪銞<畐塱龋z焏UX而}鈌蒺礲 &夆暖裤Y 鈣纠緲紸#t犊鄶刮钼殁 3岉N鰹鞶鑪vw(@ 衽抈岀eU訯<.齠璮奧 yl 牙-黀U%N6Q 鬐幇60秳焚()a菫P>钸袄})慜剎БTE蚕+擘秠iAu檉咕~XB鍴鯧8qI9訑综樹髼:嫶g優樆押Lb右laΜ垄2C※d蓚婛洐秝:.(I攤丵GX隟c5 9碭2伶種.徛*)[驁F穄!"垡1傜i 軭S,8c]2*鏴R燛Q嶠J/ZmOZm瀗Vk-Uv"蘠$Uf>-#錿夤耯l3鲮櫩セ漣E!湗i嗘T hF@狞U23`,娞p3y [;楅篴愓0磌0銊<$E毲i圅輲y敂`a椵浇穖m5譶遏<3k鰋)p螸#ae偰綯J鷏*%Hs諫Bb>搨"仑9遴搌(竹=溃B巗 i<唡餏]i藖稳效@}幘@橒轑偰襝(GZ禥C响 袀 ╋k+餣W$SY擫砿P#|;%谻W诶帡垮餞蠉 婄邤 wi?5済庶4鹋|塌`<棪v9怲嬁庵薲j.47G蟢](?-8Q欥悛弼a?*蟯骄玩f諐腲欰艵盄泽@賆倿\聐:檘鴈{罰鞢褐鼠C叾)槒(a'E锶9j島兪T^AWyOi)嚴眘a,h荁疁uZ 脻啀[详v/荜鞠捖$折\y^|祤飼呬E蹹施v馨,C K*蔉趝z鋚髢檧糇揼=V僟 5:か旜i兗_=濖X狽镴2V萀硁畀)虮o+/^CyU處3諎/埒題獖食蛟 洠P飔閧/:菬`蔨o.鯝磤愶滛蔦_瘱 Ыxm鋪瞆LtY G鍍觤P"&樆铨絨S>d袮7蛹4獺@/夢/%U歮圞.坡dw档E_烲CcT)C跆膖Hk4A鄉|逥u矫"'恔敡冔An I9^胝f=(&U郂#*柃'C劔 襢紇蓵{IQbNK梁礙匩陮C%曄楴诎 ]5皏怪岖姱砽-h鹊(( 攖]?阼,椣-賚飱;bk羮u谸U范Ⅴ朰郲鞷0壨k覕ah玝N娄栨uU刈誳鷤eM殽D7怦w}氉hE$卝溥狁腯:酲觽Y5l濝冱訴罭]螌烍=#赫$Iz幖憉}僰D_G祥=碳喁Y0X癇*児粆Z攥p5譕撶*[*噏罜L@ AU-釕s5S僟<铻|$`桪b★Xcp揾彵N闸碜厕扣z椧挷Flq]T锫猳0蜦禝籔m撹萺,罋I5\辎黋U瘐栓u线]。*蝑廂a)>F镾貽O啯N4橈OG6阾';`聋C$鱟  /9齯 徼檸aO膙 创嘮F嚕鷓髶差/7彿 < 觫绑k6w7珇0.颪OM鵡擳O钵猡倲嘳Zm蚝:暂P?敤Lq鬫Z vA觃痎諭Z梁=骐種 + 工(j,)T唀-s糈苂uj!詞eW頡S尌嵂蕦颌浛彎f?~M脖W-盂[坋ndstream +endobj +2074 0 obj << +/Type /Page +/Contents 2075 0 R +/Resources 2073 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2072 0 R +/Annots [ 2078 0 R 2079 0 R 2080 0 R 2081 0 R 2082 0 R 2083 0 R 2084 0 R 2087 0 R ] +>> endobj +2078 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7506 726.9434 195.0552 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2079 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [257.8193 726.9434 315.7315 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2080 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [359.1284 726.9434 384.9216 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2081 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [317.5642 648.9799 374.8887 659.8838] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +2082 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.2809 603.5654 239.2097 614.4693] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +2083 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [472.3426 591.6102 513.9963 602.5142] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +2084 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [117.5067 579.6551 147.7231 590.559] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +2087 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 227.4529 152.1568 238.332] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2076 0 obj << +/D [2074 0 R /XYZ 90 757.9346 null] +>> endobj +2077 0 obj << +/D [2074 0 R /XYZ 90 739.9346 null] +>> endobj +1991 0 obj << +/D [2074 0 R /XYZ 286.4315 370.591 null] +>> endobj +2085 0 obj << +/D [2074 0 R /XYZ 90 354.6099 null] +>> endobj +679 0 obj << +/D [2074 0 R /XYZ 224.9827 261.9201 null] +>> endobj +2086 0 obj << +/D [2074 0 R /XYZ 90 246.9153 null] +>> endobj +1995 0 obj << +/D [2074 0 R /XYZ 300.8374 96.348 null] +>> endobj +2073 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F52 1229 0 R /F23 482 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2090 0 obj << +/Length 2121 +/Filter /FlateDecode +>> +stream +x诃Y[忋~席萩lT],[隗詛w杨钨蓎j媮(3&v闗gЭ⺁譞稉L裝0,Q$ERI浱1鼞鼓髮gH$漮3<勯g-痐}'鴉=*蓴蹀pH 鈹轩z麟"Er耿/諳簑wn孥化i箜珏娽DT._繜}倽^湧D孆c鲭飜0bR瘗3<`Dい筱,√?f鞒>v羖:'5纾饦呫!啿鍔`. ^T盼8=姦U s<<1濬+絇?:奜=<酹G>Vq萐胭戶 +"箩魜M袶(=&淓ROUmLQ35槄8"#Z慏 施8膿4镊m,9璱嬺>稌q譁远 c獪?6hh&"洤)Es9iO搓S /$聵,A"%膆j折戂1Ed贺@5!穙*3葡軐⿰r L郅h`D錬邥鄱↗;瘱/線漐穕導W岀台鞄U坼马+U鹟B浸l6/X;燦疴 <'r戂-圠 U7A儺X'蓌 瑂馴v笳v鷌$b耨媒緹>pLPB蹭撼 %8NP#%獄"蕞#蓂v <酷Z皒2-┉舒1cU喲戛n)J郱G騯|;Zj毤~Yq豀Ju逡雳:xQ@w}=晛葳&?璢tc烱猶A#庺. 裈Z褂.]F) 薍誄>珿騣.?媢D鐝"R0IFIW洟=#簨嘡z\>杬(',J閼E)頑l綽N鄪A锽0縎:{攨臟-┃t /9巤熶1=≒牠u蒔J撃剥猇.黝钺鐆麟?軁L6靋窬?扆}R嘋踵N{=牭客oI蹫&蛞1kL訝夢 :埔朄鈈 (/@3匘8+R#$H2@j_"`f杼P厗%馘m>Uj橒鮸搌i'窤潈ヰP礛3祖F酈醂B]"\6V0氌)%硕晃<`)@C|!69漟礂吁摕$02:G括闦;容 +$a*潱廣M挤縋>傯潵嫃遽舚:6讂8讧躴x蕳早~;砆诗腙 >雬P籶Zd蝝%=4輛丹荞鰱;諘"4苕涡M鋭f葠玁3詂mè濍魧=湣鄱]~衒蠴ξ蔉吔'芊褻厎朶蝗驳 竡抸\w麖>;;縴褊溡屈Kq鞄S !臑國P3乒z +TEpq"┑竈y.尪@渨muWo莨aq[W'籬u墭7暆qF +攡#':G]洵?Px釮& l僞:4&虆1褄AB,揌`羄褆鶸肈聃疟筙bQ(>Rf貗y*P纆缐4V羄叭芛艭劥3t獈q嬫 2=6 曹瓭瘑~柴沅洭k:<螵-t/擶 +5&籢^酴.梂,翋dE泇U旃藵Y)钽8<*S(N=vP暛R鲅汑僨I 亦LOuYg纓s瓡胳TenS蠆AVr糰椬⺁5NnQ瀴k+藅廐3d魭s6巇*_傜:C世0崹壤$.M躾鑇 c棊籢坜鷛.:%蕛Xp猍殼 q 鞬ど 9j雔斏桿k@灨琯Qx娑R螒1岉掚 索^稍隃xC璼.兒sΧ鋡w."枕3锦娄Ou ▇a#⺗5% +4欘Y喀嶜,H^?牃0@軏Cta朒钭净侭7UWkg=?'WY71鮂吢k岄gS&P0蹳>5z瞊[螠p~C舄埔"^v麄蘶Z>o鳅懦uwz藎N苓頣膺hUMK0v恌 L甉^垅T.9#!#> endobj +2093 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.3577 726.9434 220.1509 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2094 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [460.7601 659.7528 502.4137 682.7215] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +2095 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 647.7976 136.9336 658.7016] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +2097 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.6109 376.6552 236.4535 387.5592] +/Subtype /Link +/A << /S /GoTo /D (a00147_gb5fecbc62edd128012cea0f47b57ab9f) >> +>> endobj +2098 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [309.2914 313.2651 361.4951 324.169] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +2100 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.8969 154.1071 225.6901 164.9862] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2091 0 obj << +/D [2089 0 R /XYZ 90 757.9346 null] +>> endobj +2092 0 obj << +/D [2089 0 R /XYZ 90 739.9346 null] +>> endobj +1997 0 obj << +/D [2089 0 R /XYZ 350.0021 514.5454 null] +>> endobj +2096 0 obj << +/D [2089 0 R /XYZ 90 491.9191 null] +>> endobj +1990 0 obj << +/D [2089 0 R /XYZ 247.4281 195.2196 null] +>> endobj +2099 0 obj << +/D [2089 0 R /XYZ 90 172.5933 null] +>> endobj +680 0 obj << +/D [2089 0 R /XYZ 225.6001 96.348 null] +>> endobj +2088 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2103 0 obj << +/Length 1978 +/Filter /FlateDecode +>> +stream +x诮YYo苋~焈1y F仸'芍"/摈氨k{眈宇B燞J楥Nx豮[}q<$X浲才餑oC"蓌癕N紏轱7膥廾鱹鹣面镞Q箷H45厐 A 襙v!沮噚拙zC亀a3L<3銞e覟并墰cY\齰x靳鲂竦b 捧_沖~蜜膡搅埳Hl坷 FDJ=m8e%遼攸苎1魝┹ 聻= +賋$b堗±凲8ɡ5;酯z皭=|呙彊彣*Z6#"@轶l璸 +>足I紊悃= 娻]yLaL擫@婖HKjO9霥Z/慇楧6 >i>达FI1ZB 伱@嬻>k贘moF秼) +%塑;0q9鄃豖囯澤S\峒鞬S氱葑ST啫Vw隖_汅;j飄萚卑2瞼%慰 対鄢赶H糙 ?緕w腔逢哚奃环稪剱2塼脊鷾涆瞞蝝剅 鳃喚IF$;Vr岮隡&^NFd 鐘h 鶜泆鴠翑襲.疢戏p{G奟 嶮%豯'记LM駠觗z 煂=嬱伺'廳1崬竣1]'荫5嶳寖⒅:詩 I噩掷Nk2騇钖a墓w=抇R燨詃嘷唁橆l犵$@乪*霵c茷V d哘焣u.玣B;`<l=蛘眻( .嶠鄠u{额<罈Q背蛀癀s蝡宀DI鱯x櫛輢[$諩2 +竞斌 煄鲅f 竰bⅤA谪Aj@隆七斧)感H泩h0!豃1iO犉洹^72硗'哓l*#掄M}y怨㑳 O"5 巤J哪 )翋嚪o>↖B娷摄絺Y睌遼Gmr逨H嫉肹汱q>鼾蘗囄8棆>j綡ap釞鏋縎Ee\脓 .鵅2%繠2捘 羃揭)娺f$*p xw#1w厭k(1埠)摢霻:冩暺`硒鐬瞶%e9槜痻)hAl叡Cb牞奩忨aJ 6嗒堞=蓍h勋嫭{&'W:箙ez!v冲9誕壱e孙,焋De葻^/r繙鄻齞y蘖"G蜺叝R]+鬑te雌鼀鑣7Ν楾羌鶔 +:1O鍦;Z斢+挷蚞賜9峙li鍇vG倗褢xl盛v熙サ殒&W穕馑腡}=h熄~/蘧y筢Y p別Qvg兾秾)\ ,溆{讫 M掇5鯡榤0v}c煴9眖L菞厚蟢鼷奝7tQ諌o篘単W柞仟$罄Z^x谄"vi骶7#阖詟d)鶏銐豫 峜8摴菵(Fl92鮍髴IpH3""鱇d碂孡 馩当鳔7庂jk鯸曕ck蟱 v#p酌瑟儾H`J9]鵉N筼%C閊饊vⅷ]}Yw簈'7x璽葳鸬鎵o(弧銮G妐`C瑠.p{Y!e闓 -蚖靉endstream +endobj +2102 0 obj << +/Type /Page +/Contents 2103 0 R +/Resources 2101 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2072 0 R +/Annots [ 2106 0 R 2108 0 R 2109 0 R 2110 0 R 2111 0 R 2112 0 R 2113 0 R 2115 0 R ] +>> endobj +2106 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 726.9533 157.1381 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2108 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.7319 549.2408 221.6354 560.1299] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +2109 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [290.5065 549.2408 348.4187 560.1299] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2110 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [391.8156 549.2408 417.6088 560.1299] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2111 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [393.7656 495.1877 457.7454 506.0916] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga20812098a4663c8a9fc4ce8e95391b6) >> +>> endobj +2112 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 483.2325 151.6186 494.1364] +/Subtype /Link +/A << /S /GoTo /D (a00147_g79c4110211247df3fb30b8cf1c4c02af) >> +>> endobj +2113 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [124.6997 295.1891 183.6983 318.1579] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +2115 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 204.0406 157.1381 214.9197] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2104 0 obj << +/D [2102 0 R /XYZ 90 757.9346 null] +>> endobj +2105 0 obj << +/D [2102 0 R /XYZ 90 739.9346 null] +>> endobj +1993 0 obj << +/D [2102 0 R /XYZ 224.7534 583.8924 null] +>> endobj +2107 0 obj << +/D [2102 0 R /XYZ 90 567.737 null] +>> endobj +1989 0 obj << +/D [2102 0 R /XYZ 206.4623 238.6822 null] +>> endobj +2114 0 obj << +/D [2102 0 R /XYZ 90 222.5267 null] +>> endobj +1994 0 obj << +/D [2102 0 R /XYZ 207.0201 96.348 null] +>> endobj +2101 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F52 1229 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2118 0 obj << +/Length 2118 +/Filter /FlateDecode +>> +stream +x谳Zm徾6柯m4f畻m矨.輋;爄靶隰甈[r%9涇P|1%蕭飠@qE0Eg囅 d&,$廹臊=B鼢W /a| |缓;*f墭瞥斩QBg噛屇bI#<_=I8捃殲窟~m踰摥],鎖萿 芓歁QhPi0I揧 A}`厲綯棂1])A榿鄔e#_霏LQ(7毪禚"|OXt抑z*/粥 +茢OZT谭莃蒌e←鍌D笙唰 肺S#砦淡飧悤瓮糂6蟤糤筷亣/崣XV愭x灩榞簕 &y{J⒐琷囙X 靬$Q蘽9{0滭劅B绞O疻 捨xw FN務丣f9 鎝P#; * 哗繨岥缐/=P1R束SS豕諆0恇潞8鷳j&q歷尗萒С恔Y譟鮡G篌菙1動旟(F帿'+;a:lD爼j壱cn鍜+i貅9p慔O國R#甘愞:lY曧e囩< aI囇]81熞;A12k诌 H CW顷遲寪x鶒7'67慶J刁翭撉P狢3攋i唺L愅柼\姉XG+2G慿甌硬痞澛(奌j4nm幥t']众TN$A1錤鮷箷n6油睚蹧徽趸/b◣類K殣薊5尻n姀.咗瘸k㑳>頴裠尰Y礥咹繓i畛W塢昶,唸巊螚H1E\V~镺Fㄗ嘴p豥MT78嗻%IH考盧鎅氟 哴LS}$思hl@阱腱=-繬:賰玲孛侭鴏4歰鼲韰血烷4V'罙 hX&,aa列髶,Δu钝 R<澾l1褯珲v!A_-媿[U泮+@/瓜緲CVK+k親 顢輂yF鰐a涠竄釦eV喞J<.谼p;?!尞P n濞sC峙奡籬z瞍&0勞K捾*馽杽b蓫屣油關暘V皀1駫掊珕恑钏cs86V :銥x慆Oy"攬8綐 #<枘.辶.惓<氾 d 膟<叁瘥T頛O^浸3tC7捻ci簷睼5 &'~售 4l硇礚齌肗Wk鹃3穋惵┉譅eJ>h 9iIE4棶iADUQ?<撃T}>p踯當X嘈甦侗8跷 '鬂<洼榱'悧晗5 +庥D噈U铥镟>?柱縠楎\l0玍3tuL[s氩P匇xL钄/鲛揪{蹥栧賈掄1=莐I_陓-I(F4J蜑^噕kD'mq鍪瑽jB玪t懔蘪蠀梯,7棬迻霃N4&蠛s酳泣癡淆皢君6諱P+洣湩R賮H兆蠱黝a7锍綃tfTU譁 瞞观昷-项K^^}N'埁埯纅c豋G撖W╕閱(漯DンB9靮YHo壎d鶉m糛9B/~I貹婖86⺁(玘>!wQ璃>聠;'糃endstream +endobj +2117 0 obj << +/Type /Page +/Contents 2118 0 R +/Resources 2116 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2072 0 R +/Annots [ 2121 0 R 2122 0 R 2123 0 R 2126 0 R 2127 0 R 2129 0 R 2130 0 R 2131 0 R 2132 0 R 2133 0 R 2134 0 R 2136 0 R 2137 0 R ] +>> endobj +2121 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [210.4174 726.9434 236.2105 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2122 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [460.7601 665.9261 502.4137 688.8948] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +2123 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 653.9709 136.9336 664.8748] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +2126 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.0073 491.9593 207.708 502.8384] +/Subtype /Link +/A << /S /GoTo /D (a00150_g561b8eda32e059d4e7397f776268cc63) >> +>> endobj +2127 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [391.426 437.8962 436.0284 448.8001] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +2129 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.0073 370.7781 207.708 381.6572] +/Subtype /Link +/A << /S /GoTo /D (a00150_g561b8eda32e059d4e7397f776268cc63) >> +>> endobj +2130 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [391.426 316.715 436.0284 327.6189] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +2131 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 281.9517 139.4144 304.9205] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +2132 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 281.9517 175.0106 304.9205] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2133 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [177.9994 281.9517 214.0238 304.9205] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2134 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [233.8893 281.9517 281.53 304.9205] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +2136 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 207.7121 147.1755 218.5912] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2137 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [147.6736 207.7121 182.6919 218.5912] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +2119 0 obj << +/D [2117 0 R /XYZ 90 757.9346 null] +>> endobj +2120 0 obj << +/D [2117 0 R /XYZ 90 739.9346 null] +>> endobj +2124 0 obj << +/D [2117 0 R /XYZ 90 537.7634 null] +>> endobj +1998 0 obj << +/D [2117 0 R /XYZ 90 512.4589 null] +>> endobj +2125 0 obj << +/D [2117 0 R /XYZ 90 512.4589 null] +>> endobj +2128 0 obj << +/D [2117 0 R /XYZ 90 389.2643 null] +>> endobj +1453 0 obj << +/D [2117 0 R /XYZ 300.8374 242.7345 null] +>> endobj +2135 0 obj << +/D [2117 0 R /XYZ 90 226.1983 null] +>> endobj +2116 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2140 0 obj << +/Length 1602 +/Filter /FlateDecode +>> +stream +x谡Y[o6~鳢杏`c嘶膎{仝 !<臁-EV鋂r襜摺H屎Er籰肞う萻9!%鈇鳪<吔@H1.进f伣-L?_混煤&鴡絰#U濨JR榄痡 A 踔浄藔畖//蟖(饞 l瘚!K跳in捈姫慈W镒g媑隖5K0I粗o遚o鏉-0b*<`D敘尥係才/嫙9f髱尐 B惜乹‥5&槩Q +∴@樿BWBx嶫G宥H7贗愪+%豸&筂鉪砄o擙E欎泈X`M 縟匎弞巔跘;+譿廄獵夯<\脚瓅夞蜃楃痎礁x蹯'-鳑灵昮諟Y畂p泬瘡箅吾V皺76*$$5%郾翢pQ瘰2yc>(K媻v籑TE3┃跏X*訩悢琔>礗 祲(茿M4y1陀氇*鬀ス璖聰W鎃掣"颬孿HH$寮&笿鯥蒻(/?5粆'eD洲6獉4 )壚?腤Pげ猹DppzBHDCi媃/矸栨M粶竭f躊H箞 3$杊鸲婢,孪鶭)f銽鶎㏒~CNl9轕崹f荭!靹語蠇4瘨絀—翱6 忝R蚮.枬+揦/A嵢5p鼢妵Tx蕣恅.惯2:>\ ,霘蠴G4CLu镖憣#[鰲疄KW.萉琄鯆  'a巇9指掀q鎝┴蓯英烜Gu +鄑,o鷍G幡璾 +mN蠊汭楙2O倸)棌H3雄N 俁 h,衟锑涮H觙榾殕$Zq/靥鑦h友罬鄢L&a1 坧1G浞﹩*5'碚硰淹.K'脥dR3=偮'lz@3翱5]CV烮,+輌L匥嗹:#G4gB_柖嘌PJAUtUG?/W/o堊娐盋諟鎭4愀I鍇3@.輬9;9 龑C冠幓2蜶(渁≒(PDN嚒S?惁折C慛3烃彠9# &旘.^j.竭fi5y1r鰛%辫櫺軨}雰宿,啢 t禋uCR畈春G!?籙 咞塨н W茊sYE5# {缘馑Zp.驕厧n月吢〢p9i∵P嶈铛%@E簺p炱跉船腋Dc_%昊忤-齒瓤趿 aG拳呞讬z炰>猏-竍{gh鰜P麐烶鰟趏3ciF5鸮寶8?m嘳_=`$J!%2endstream +endobj +2139 0 obj << +/Type /Page +/Contents 2140 0 R +/Resources 2138 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2072 0 R +/Annots [ 2143 0 R 2144 0 R 2145 0 R 2147 0 R 2148 0 R 2149 0 R 2150 0 R 2151 0 R 2152 0 R 2154 0 R 2155 0 R 2157 0 R 2158 0 R ] +>> endobj +2143 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7506 553.2679 195.0552 564.147] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2144 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [200.5347 553.2679 241.8394 564.147] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2145 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.9862 510.9639 146.0595 521.8678] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2147 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7506 442.6743 195.0552 453.5535] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2148 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [200.5347 442.6743 241.8394 453.5535] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2149 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.9862 400.3703 146.0595 411.2742] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2150 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 364.3227 162.0093 387.2914] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2151 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.9981 364.3227 193.2816 387.2914] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2152 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [213.1471 364.3227 260.7879 387.2914] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +2154 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 287.6273 152.1568 298.5064] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2155 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.6549 287.6273 186.2086 298.5064] +/Subtype /Link +/A << /S /GoTo /D (a00150_g12a33f0c09711167bdf3dd7d7cf8c5a1) >> +>> endobj +2157 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7506 117.8746 193.9393 128.7537] +/Subtype /Link +/A << /S /GoTo /D (a00093) >> +>> endobj +2158 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.4374 117.8746 230.7508 128.7537] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9ee50a40597e67fce96541ab56c3b712) >> +>> endobj +2141 0 obj << +/D [2139 0 R /XYZ 90 757.9346 null] +>> endobj +1999 0 obj << +/D [2139 0 R /XYZ 207.0201 589.4618 null] +>> endobj +2142 0 obj << +/D [2139 0 R /XYZ 90 571.7541 null] +>> endobj +2146 0 obj << +/D [2139 0 R /XYZ 90 461.1605 null] +>> endobj +1755 0 obj << +/D [2139 0 R /XYZ 208.1261 323.8211 null] +>> endobj +2153 0 obj << +/D [2139 0 R /XYZ 90 306.1135 null] +>> endobj +2000 0 obj << +/D [2139 0 R /XYZ 368.3438 154.0685 null] +>> endobj +2156 0 obj << +/D [2139 0 R /XYZ 90 136.3608 null] +>> endobj +2138 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2161 0 obj << +/Length 368 +/Filter /FlateDecode +>> +stream +x讠R[o0~锆#啅1mz 酮A/鐥蛣朰皋O杦驍fQ:叁嫊:,2矫襠om軿讝ILxD2譵讂I6:朑I苠fJvx?擡擳T@聘7zTsR=C{G.萎螲嬊秊f矰僩栦I=溌+s剈40#閿)(暆秈(】购+鞠$矣苋??皚紐endstream +endobj +2160 0 obj << +/Type /Page +/Contents 2161 0 R +/Resources 2159 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2163 0 R +>> endobj +2162 0 obj << +/D [2160 0 R /XYZ 90 757.9346 null] +>> endobj +2159 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2166 0 obj << +/Length 2324 +/Filter /FlateDecode +>> +stream +x诃ZY6~靠聫6P砛%2o觗RL23髵,俗氯+薎锟镝&掩鐻 +?X酸傧GRd呩GV +疪"舩彩OOx~"铛辭C偀灍~|O認!曅d鮸0%t跫碞鵩K%N聱鰪弍)饸 l/~藩白镪黺*蝝謻鮵簌舆;筃-ⅴ糸3^鞟O1%抨+躟D敘逿Oy鶺乔0Μ凪汫8'咱G淋詺 岏鷒蛦萿~,"oo嫫賤y+4拂'穝絡儹$倲F竄 ⒉梽垞醍h巢*鑫w5o蕥0bAD4瞸瀼臥腹-霄旷锍Τe茙S框t +oj~,96窊損v0狠昻d哆桭-掩%敵^{唹岖 _醚躤U~玪錟S珡~p璒棝头^砻bC您廗q緰*謃舡Y_&潇;蜗o?㭎耽雓沬k鮟c衯 傾0)祋1S隟霆懔窈>h鰍[蹏谒幸9歬Gk5 <)藹σ捔遂z-N华h6B瑧V(q#.锋R_趿3vn錯玸赁u1宗\磬*趡靹瓆&蛳00桘嶇謇亻赽aQ=砸utD +3 C a $稆ha縍*啿謺.夭膸*&餔$U臜2T(Y縥^涂C<}L_湟o:~8#'8鈦D $ S匲H4岙@憝H()▏t乄4M秆P:2"F$)搩柈s脅x0搹]Γq墉夿$筁'狀Θ>箄fκ!pd8W郠櫜  2#媐>#r}嗊升病?蝢&D d/涓i1廑屮~翔8X7$O*(忎J奟I涿鎨鷺#酒|鵞;詟b寑(鼛j,楌@.@ā鍢M瑍 BFcCS_齛儾O檢=}=c酒=$欚H$P兴T1罛", 3 I ;q┙慀呍 愙慽 辠M箨p翩W{ 繷颁墏V 藲:E 洙抾逥 H$唎,巓谩D搶袀 +校[LC&30XDc諆X4+J㈥y簕螅Y巔J闕kQ怒'娚VR_繫。忄h珙盼[镩 ?$+t 藛{⒈貃p$ +麮G喯#s喔映珥0艷8雳:鷪兤|>墄萐'忇蝱罸q^凣 ,.蓛P/粒'仇h{譩谹C 詼 噹v蚘:X}/Uo^亞'UPqW剱<βr]IX0%楯$" +8 S椀05.偐 陖;.a隄z╁eUU装籂宥蒞惡婣W{眻0CL鄱恴﹫<賐筸╟戫}櫶斠a0魭Y +]b +C6~_B+91_jLANp驐T& 4塗ZG愥wWZD;Owлr-蜁Q嫌莴An髾R 磏tQ蚼GQB^鷩=Xj,酘 +蜞嶣H絇j賀=魁5US鱗痞司\鯵浲W歚4鶢觊]k+蓹恣Qt5e稕; +謐屘譶H癙Y磛$~s鞦大tw贛叠亨刡波荩ニ"鏈榲烆^;1y>/僂C諵艅f襱鄽O\朢Ia廵iH絇畏蛔;毡洑縘n6遄怊[q屋涹泶雈瑶萫~摝 Im ě+2}HI2F萆樳鞙9U淰vgc!ь旐媶$綗#庂3稴饯嗢$h!";I瀨袕廡G\g焚(挙鈄黳D#△}$蘎⌒緧凥舸)庑琏[l&<迅P+側G缟#r漮0%ADP眷9O4抸 *!\湋;﹝-?艌>擋貼霃S-,齌滟蜏 >篆饺狫_谢6珆鏯偓Ks&楊<蹫蛾q%船缃E>fn0J傱,q+"韊*酱{鮧?^_娧7K鷆 / 6oendstream +endobj +2165 0 obj << +/Type /Page +/Contents 2166 0 R +/Resources 2164 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2163 0 R +/Annots [ 2170 0 R 2172 0 R 2173 0 R 2174 0 R 2175 0 R 2176 0 R 2177 0 R 2178 0 R 2179 0 R 2180 0 R 2181 0 R 2182 0 R 2185 0 R 2186 0 R 2190 0 R 2191 0 R ] +>> endobj +2170 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 574.4454 173.4566 585.3494] +/Subtype /Link +/A << /S /GoTo /D (a00137) >> +>> endobj +2172 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 492.1342 177.9699 503.0381] +/Subtype /Link +/A << /S /GoTo /D (a00151_g6832e4d2d046536b6472f7ac92340f68) >> +>> endobj +2173 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7856 492.1342 201.4916 503.0381] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2174 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [231.8776 492.1342 256.5649 503.0381] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2175 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 453.586 138.5977 464.4899] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2176 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 453.586 189.7953 464.4899] +/Subtype /Link +/A << /S /GoTo /D (a00151_gb6683dd83fe1c8de9a24086d4b69e907) >> +>> endobj +2177 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.6109 453.586 218.2983 464.4899] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2178 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [241.84 453.586 266.5273 464.4899] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2179 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 415.0378 138.5977 425.9417] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2180 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 415.0378 197.5461 425.9417] +/Subtype /Link +/A << /S /GoTo /D (a00151_g2addf34c7d457c1a7899a7e2171ef1e9) >> +>> endobj +2181 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 376.4895 138.5977 387.3935] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2182 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 376.4895 201.9695 387.3935] +/Subtype /Link +/A << /S /GoTo /D (a00151_g85b65e38aa74eba18979156f97a94a87) >> +>> endobj +2185 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 294.1783 133.6164 305.0822] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2186 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 294.1783 177.0532 305.0822] +/Subtype /Link +/A << /S /GoTo /D (a00151_g2a0cf5d86c58fab216414ce59bf1fea1) >> +>> endobj +2190 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.6669 210.1544 223.4788 221.0435] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2191 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [256.3555 210.1544 282.1487 221.0435] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2167 0 obj << +/D [2165 0 R /XYZ 90 757.9346 null] +>> endobj +1777 0 obj << +/D [2165 0 R /XYZ 90 739.9346 null] +>> endobj +118 0 obj << +/D [2165 0 R /XYZ 90 739.9346 null] +>> endobj +2168 0 obj << +/D [2165 0 R /XYZ 90 716.7484 null] +>> endobj +2169 0 obj << +/D [2165 0 R /XYZ 90 593.2423 null] +>> endobj +2171 0 obj << +/D [2165 0 R /XYZ 90 510.9311 null] +>> endobj +2183 0 obj << +/D [2165 0 R /XYZ 90 312.9752 null] +>> endobj +2184 0 obj << +/D [2165 0 R /XYZ 90 312.9752 null] +>> endobj +2187 0 obj << +/D [2165 0 R /XYZ 90 257.149 null] +>> endobj +2188 0 obj << +/D [2165 0 R /XYZ 90 230.664 null] +>> endobj +2189 0 obj << +/D [2165 0 R /XYZ 90 230.664 null] +>> endobj +2164 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2197 0 obj << +/Length 1763 +/Filter /FlateDecode +>> +stream +x谂Y[徲F~席萚櫸6o +]y澷岴bФ3濳谱di玧ヵ頉燐8d夅,紝D棋2;,痱n縔鹸 献!鄺外缱4Y&(慣.7鳝I悹.7蹚+綴S乄/]蕤9<⿵*?aL3s}z溰煀刷咾.矈耐缤慌瘨誜0I碆.>~扑-h⺪Kb秉$∷脗S.鰦?鬆]0鲡溌K莿-譒$| 処亶(A:n8A砲1唒剏k7*=‵U躞䓖LQ(]啟Ed&^:!Q惎!w7傢~$39ip2fW浶/檖 w趧 洫F虥小喣妸Hd梮瘖1鄞E覛FД艅 +&BqB"$HBZ羲t煗雯+?臀灱窄 +竟蕍*;噋┇7U4跡滣╔輫U琖d6殑$ a砣鉎舫6瞧鉛Y碒{?+墙:@/3缀=o塨0蒿蛪韜[+DWnG鈄尃D覊 AY#呔~ 漦輡$(62;D叏!J摧E/55:憏Z醗c-倜岆礯脵斩D{(]膩;\rgv謶b韊箮cB詩 85癦驀爷:\悻U#o&澢c榋迥;/DM;'烡O榾扫3h2>ayX痋w,倶p樀丟IT"茦霷 >Pz 9Q骄矧l盢舠衢 +娛㏎[4!>桞販,]胏墓hjH3粿`梫鉒彤垮}M炀紊13┣ 'v鐄筙sy78糋=Z:-╟踬苵 !鮚U7O6垐X8烦晒澟b0漒=穱 f鎣<穡U槣/还終 s{~霴钸趛 逳 Y見簄撇無v*趸 =镚蚿﹌揨s滕轳:~焳?}焪孵Η儖斜宖:-鬾f6詔V"幧鮕=藒坞!齢f{r蓗泱RZ]鄵u丣色隑竊.x劐盒Ua.\ vu 秎0l^0R忐灍で6m覚诶*p+忧漆倐楞刚帤 ++^4u鱵3 3絒{f顦7'鎝i[畗仉'uwOf缰|,腼%`%l仓怘"汤叧&DM$哆鐆^炒"3-2v辴s唨贯Gh9鳥K舴ks鑴剳潵舴f哭湨卾玢鳚鷙# 關V7R鑍搑U[ +苇zc8廨cY座濢喣:嚱逪>G?褌{|m}4剌饒"-@虳媋`彲oj充A 厍阃:M碲b鎞A騙[諰o{[吳駳Y孈7o迴H!/f韽1,丗篛$b丙-*-鱂狫赶抗搘<'{A=忡=w臱:霜鲀!A竗錩谬 l>\尶Jendstream +endobj +2196 0 obj << +/Type /Page +/Contents 2197 0 R +/Resources 2195 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2163 0 R +/Annots [ 2200 0 R 2201 0 R 2202 0 R 2204 0 R 2206 0 R ] +>> endobj +2200 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 624.7403 157.1381 635.6294] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2201 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.4886 624.7403 241.2818 635.6294] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2202 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [267.872 624.7403 293.6652 635.6294] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2204 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 384.3441 157.1381 395.2232] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2206 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 262.609 157.1381 273.4881] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2198 0 obj << +/D [2196 0 R /XYZ 90 757.9346 null] +>> endobj +2192 0 obj << +/D [2196 0 R /XYZ 224.7534 659.9636 null] +>> endobj +2199 0 obj << +/D [2196 0 R /XYZ 90 643.2365 null] +>> endobj +2193 0 obj << +/D [2196 0 R /XYZ 90 419.4579 null] +>> endobj +2203 0 obj << +/D [2196 0 R /XYZ 90 404.8876 null] +>> endobj +2194 0 obj << +/D [2196 0 R /XYZ 90 295.6655 null] +>> endobj +2205 0 obj << +/D [2196 0 R /XYZ 90 281.0952 null] +>> endobj +2195 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2209 0 obj << +/Length 2273 +/Filter /FlateDecode +>> +stream +x诃Zk徾6>柯 豠鶁鋄粰 毰4檅Qち@5c!说錘部~/%Q橳"D矌罟肩!Jd佱Y糚B!酶\瑹~姶棷狷铌籛, 2捠泡CA$(煌嚗挮k滤箅[8xIn迻涹.o巁栯骃警勃(鳙弚o畁:6-$爆\}鴪H锿F蘦眡寛1t駎)s'猾鱓縯q S凪7弍縋> +蚒M$"duM0鲒鼾fs\教Oф噖軡雴甄孵宀*族6滇 Qs@-3@庡e^e.叽U薕隿qp5傽逃缕佁%nr桔赯KU'$'冧帱鲐&諤咻6E ?焜n)灞);婟cs)癁蠹嶕航9k6F哆4籦=蔠T,\碧w銢爀-]厾-z蹟 k媆m['堇裶焀綺q键w媢!QS!I9痗6m5囟5dXf泆v獨 滙c岙U+,浢祠45雔鄺秹鰄訢{_'\/浻消意燋蚷]蜀-M!}簃閞}u夃j1*!.骺cL螱绂纰趲婇<萦 +譐裺鴚}m/疕S烅9⑤9偁噐U{W[>柉O +崌 -&Z-剳';]p<a淘Bb嵏 .*1f%"(売v ^匡瑦"L粞.\磪i蘪K鮰劐YV顆酨]5]譆S 55銏r猨芖0販&芻 俔%茧S崈61突(栭wJEXS笁 F讈0,鍚z8kL薫鸂fDk[;?O$0巎8圎靫@ f褼.1見H&鮜覟〒Bf眐硞屑w灷 鱗揂0鱜e簪冑<遞脬妺e賈)s漹撣 刖聒 +漑煔):1 +祅覂Y芼!鈓i汢(L磐猔趩# O烈F茰珥8郙xq<菍偢住馐嫩vdD鼸7r墺:崞f觸=5=\2] c* 持=}G3砋篬F鰞-x搒l+诂g^fU咒蚓:炞展]AN尲軒覬髬烑蟱挨纾尳嘉轘葳畜01戏鳷A\琦稼辭%鉊4u矍澘陑Xhl挳w皛,q穣渡/刓T!H <蛹>z诩 瀿`I詺窓&菔槙]墜n穠挨[絒嘉磽]8Hs 絔鵨:|* 甅阕追7w?蔟v{so筈2擨x婆<^旽2嵈&溡泜O<:鶂樲栔;畦珥赧yg= 煟w< 頧镒≤T -崏%2燭僎!j柜斳餢db> &穬ュ1zr莥;箎r如O#-妙 媬Ah*e 1霐A +鴭枦蛣拊Xp芒鍜> Ke祯N:糹絿3鬘孽周髋v>墎y (僀僪蛃嚴餑︿痔n\~掘1,-w屟;污身笪恵@>G顇A躹涶/vo熳涽wA&0P%銜鑀(佱k6LaRj﹃惨樞-*璼勎9J讴鞈賕灒q4噏証巅烝b键-鑴 +A娪SaD 栝敽癪牵P^幼烈=呫紳> 鋝D帶膗2暨z殕閦jn%淮 +疩 (<箁x +$0賺9'G/ bB;XZ't湻阽!魛|幮4偢6瓯鶸%&aH*Q嘕QK嵏耠橥透'i禴a頤| +鑮 蓱bPD祧倌[A(&蛳篮 獕淸焗b->(^侱4宩J 霡)騫,她即騛a#蟆堳#K鳎W忊糫?騳g簦鶞~O#圼镖轣闕娒)I绽銳!&瑷)钮煊哕暏皬W 茚m 悝簰懓R"^暍zS餽慴y饁窦_7/幝h&杯閬,}L鸷8帻营R沺pC钊Nw婳eX腻QF鐀1閜焨喛|痉梭8%V褑;L淴 $7弤灦?D笟>Ct"咟4k媓% ̄ HxPVL勰笩仫1]*6髛~*-泏急c=!待繝m縂硕圬o蚛 ?\諁代咫c >鼎U?黕aHendstream +endobj +2208 0 obj << +/Type /Page +/Contents 2209 0 R +/Resources 2207 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2163 0 R +/Annots [ 2213 0 R 2214 0 R 2216 0 R 2219 0 R 2221 0 R 2223 0 R 2225 0 R 2227 0 R 2229 0 R 2231 0 R 2233 0 R 2234 0 R 2236 0 R 2237 0 R 2240 0 R 2241 0 R 2242 0 R ] +>> endobj +2213 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 536.3999 169.0332 547.3038] +/Subtype /Link +/A << /S /GoTo /D (a00139) >> +>> endobj +2214 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 497.4963 168.4752 508.4002] +/Subtype /Link +/A << /S /GoTo /D (a00138) >> +>> endobj +2216 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 414.6253 188.6792 425.5293] +/Subtype /Link +/A << /S /GoTo /D (a00090) >> +>> endobj +2219 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 332.7306 237.3867 342.6583] +/Subtype /Link +/A << /S /GoTo /D (a00152_g3e1562e8a6de32268e5df92a52152f91) >> +>> endobj +2221 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 319.7545 226.8662 329.6822] +/Subtype /Link +/A << /S /GoTo /D (a00152_g03d140db75de3d3cdfbbab1c4fed8d8d) >> +>> endobj +2223 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 306.7784 231.8475 316.7061] +/Subtype /Link +/A << /S /GoTo /D (a00152_gbb558f3a9b1ec015e83c314aba694e35) >> +>> endobj +2225 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 292.8261 198.642 303.73] +/Subtype /Link +/A << /S /GoTo /D (a00152_g737337d6a51e31b236c8233d024138a8) >> +>> endobj +2227 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 280.2236 216.8139 290.7539] +/Subtype /Link +/A << /S /GoTo /D (a00152_g7a7c46ffaba30477b8c9e3e61bd2e106) >> +>> endobj +2229 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 267.8502 202.6371 277.7778] +/Subtype /Link +/A << /S /GoTo /D (a00152_g06ba7b414e718081998f2814090debf1) >> +>> endobj +2231 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 254.8741 237.9346 264.8017] +/Subtype /Link +/A << /S /GoTo /D (a00152_gbb56b549f7ab4d86e1cc39b8afc70d1e) >> +>> endobj +2233 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 240.9217 167.0009 251.8256] +/Subtype /Link +/A << /S /GoTo /D (a00152_g24f52ac52d6e714cb04a5aa01be3bdd0) >> +>> endobj +2234 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [248.2853 240.9217 281.0723 251.8256] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +2236 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 227.9456 175.8576 238.8496] +/Subtype /Link +/A << /S /GoTo /D (a00152_g9f2196e2705036869611962425e404bf) >> +>> endobj +2237 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [264.3448 227.9456 297.1318 238.8496] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +2240 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 171.0022 184.6146 181.9061] +/Subtype /Link +/A << /S /GoTo /D (a00152_g2d9d28afa353f662b9bb5234fc419f72) >> +>> endobj +2241 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 132.0986 191.7978 143.0025] +/Subtype /Link +/A << /S /GoTo /D (a00152_g902c4a360134096224bc2655f623aa5f) >> +>> endobj +2242 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 93.195 184.0569 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00152_g54b27e45df15e10a0eb1a3e3a91417d2) >> +>> endobj +2210 0 obj << +/D [2208 0 R /XYZ 90 757.9346 null] +>> endobj +1775 0 obj << +/D [2208 0 R /XYZ 90 739.9346 null] +>> endobj +122 0 obj << +/D [2208 0 R /XYZ 90 739.9346 null] +>> endobj +2211 0 obj << +/D [2208 0 R /XYZ 90 719.4775 null] +>> endobj +2212 0 obj << +/D [2208 0 R /XYZ 90 555.3745 null] +>> endobj +2215 0 obj << +/D [2208 0 R /XYZ 90 433.5999 null] +>> endobj +2217 0 obj << +/D [2208 0 R /XYZ 90 350.729 null] +>> endobj +2218 0 obj << +/D [2208 0 R /XYZ 90 350.729 null] +>> endobj +2220 0 obj << +/D [2208 0 R /XYZ 90 336.7157 null] +>> endobj +2222 0 obj << +/D [2208 0 R /XYZ 90 323.7396 null] +>> endobj +2224 0 obj << +/D [2208 0 R /XYZ 90 310.7635 null] +>> endobj +2226 0 obj << +/D [2208 0 R /XYZ 90 296.8112 null] +>> endobj +2228 0 obj << +/D [2208 0 R /XYZ 90 284.2087 null] +>> endobj +2230 0 obj << +/D [2208 0 R /XYZ 90 271.8352 null] +>> endobj +2232 0 obj << +/D [2208 0 R /XYZ 90 258.8591 null] +>> endobj +2235 0 obj << +/D [2208 0 R /XYZ 90 244.9068 null] +>> endobj +2238 0 obj << +/D [2208 0 R /XYZ 90 189.9768 null] +>> endobj +2239 0 obj << +/D [2208 0 R /XYZ 90 189.9768 null] +>> endobj +2207 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2246 0 obj << +/Length 2421 +/Filter /FlateDecode +>> +stream +x诮Y輷6呖聫騆)Q麞66檏惠竪覫3;Z橿kbK,g橱@%k碥]缙"AA|(媃?1藗Y? V飚傎#技鯀损蒡阰oe6它,栺l6b+)鋖国枧髤T亀|wK冏玌3┃"荛C=秂]腰,譵]訹(zI2磡u踌宎[U 4逑珡焸 +l~鴄柂L_d櫆懋"谏鲫谜瘽Z0/Lm9 +敓嗛l!冥胻,偰'IpI";ー柭雚>$Y:砛(豻榵zy幡蓁σ-6:_閱苖M蠝齍蹏鷋叱n掮臷掮<+%稬璱P驤胝P恕 烤c]d麩G}h9Y$v-Bq迊?聣D崴A4韮0t侾卛4胴忻H㎞崈筏 +g塩e甂zE鋑A鮺羉ㄋ諌竻P#莞<2蠞k呭縟艍\粹X铒骹邧;垼)欚C﹒ 栯Y瑙Q枍ɡ柒8壋罈↑.22N(赡Y+eAr偈-佮筪ュ洸r蔋 5N臕v: 蹉怮U苅 讞s 疝r鬜,咯嬨NWmnH`吱wC既萕Q9抾敛綻#2F蒈$u蠏誔A6忆d(鹙nyeU曰庈箸鞣僆P 帇eD倵1F扲蠀G耡S+?`驥穂mi螪.L剷濳鍈) f^5!虆騆g灖嵁h5g5d*zSiah酇k鎚t+!椫[嫼澸(>昜腏1攱5穆[Aoak堇檕焛ueyx7L 攣桨>秕5FT赌j| 鬁迵6羚嘑%X&gO瑋甙忞懔 穑nX y匒惒*禷9柶~佈S汕 3 +Z鋕74昴}A[-L髐S颋,滷趕<<3檢 琂zN7濛^F6謺Or彿:?篒R!尿轸%云5H$7嗘Es"=-,+y巴?墽宻區欻氫 Mdhtof峮廙呟 蝇g晡墻鮶$鋛[?鋄棗*Q修-)咹喸(`Z僼F>掔3倝X档& 胕81&屋30 =@魾疟*6 +襇嵁仺i壆l7壇阩屺(郓-j.eu{ +恬 嚪梣 r憄B妱 Y鳴髉5x甠骱hy9揋H嘿d蓹1UW痟谶鞇寝靝k@mImD乬$ヴ磑OD豳S8)c勤,埋0嫭跘 Jd4檯 堍!皫eZ竆R@驛惨TO5唔_"V'gU]苽) 噚汏:64葮关Avl雤坷Y纝/N稹寎h|謖]0門欴 7J+咐怠Y|1EVem +n藠嗳0怢W.6劖M尜6垽"d璇 b幱蠕橉铒nnx肯酭噵&,率犊輡X螕犬|gho癃菙楕M闂?h磔睚b,\{so聓诊tSZG%梴$积玅鱰s亣鱨藡见0鬅C镗姣鋦j2搠緲{_茚}\衻~'堞辟戆鞗䴔PGNW3h勹3墼Z7蠻逈'B廇誼n,媾1瀮 5=嶇q餯)帨碂^c鄜-恼誺ot維tW络駹檼3N躖-G肈K牯欝k桎9耉朳鮶镰皔qu)娵\訩僦u9@<簘2乖|&f譐泛 Oa5鸭鱔vo峻 C}2Bi稽罀81攨礻c*c 韊餢c81嗐巺W>剫5=)#攮闄$V󌫀 W忄l戰5粑e菻顲吚 Q犺窹/醛@@yPW +钞霖屡R8%O +嗙8p#;X!£+Y +傰 漦.u罗h]}甇&幮$〝蝅,8茟<萚) J3牑6>颃& a啈h偋夜t熽 i?#儽渡榢-O靣P鵖腽\5鮺o*淀 设脕脮菨錬臒挀:=觢S>n;KP犊qmiy咝F,sU麖>歺孙oM?4k嗡U{鳾A 蜿+'?=t轄\N枪攔..K)^i`;9禸!S_眕邞韫&呑6竐m t?鉻哛ZH3穣╈%8櫓苒糡※@!傕OK餿.}拫v'X淾- 隔:f貅"烧龗A !蜻輺/M釈(欬5'bOvRxE 痀睙%aj羍#p'?鐹77 郅矁鳂GG上郱喿2嗨B狞 +]a?Wu 烅囮徍籊塸?.闯齟ndstream +endobj +2245 0 obj << +/Type /Page +/Contents 2246 0 R +/Resources 2244 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2163 0 R +/Annots [ 2248 0 R 2251 0 R 2252 0 R 2255 0 R ] +>> endobj +2248 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 702.4657 192.3555 713.3696] +/Subtype /Link +/A << /S /GoTo /D (a00152_g058a8e6025f67b021862281f1911fcef) >> +>> endobj +2251 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 617.6293 168.4754 628.5332] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +2252 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 617.6293 218.5572 628.5332] +/Subtype /Link +/A << /S /GoTo /D (a00152_g499bb98a0b4ae9a98553ede81317606d) >> +>> endobj +2255 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 372.6901 227.254 395.6588] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2247 0 obj << +/D [2245 0 R /XYZ 90 757.9346 null] +>> endobj +2249 0 obj << +/D [2245 0 R /XYZ 90 637.022 null] +>> endobj +2250 0 obj << +/D [2245 0 R /XYZ 90 637.022 null] +>> endobj +2253 0 obj << +/D [2245 0 R /XYZ 90 603.0588 null] +>> endobj +2243 0 obj << +/D [2245 0 R /XYZ 90 578.5313 null] +>> endobj +2254 0 obj << +/D [2245 0 R /XYZ 90 578.5313 null] +>> endobj +1420 0 obj << +/D [2245 0 R /XYZ 338.656 320.2263 null] +>> endobj +2256 0 obj << +/D [2245 0 R /XYZ 90 302.5028 null] +>> endobj +2244 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2260 0 obj << +/Length 858 +/Filter /FlateDecode +>> +stream +x诃Vmo0#H皿!遉Z㏑謋掖E 嵎Y?F6m姅渳缁缥wO孿>葝+≤M +簕祡 >\n湕痲銯 鈽粵濕`aw搤餌8z菦絧Wデ\鲵*9察.獼渔止趯q-,F8襋:>A7U餹H2鱍- @Q勢隆 嬡yp迣~z9皵*7 (V!匓#盟#! ┅普鞲╯佼"垇 籗写G{澽i鯲u?垹秳怢巚(}募fP腨橶U> endobj +2262 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 717.9621 227.254 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2264 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 543.1103 227.254 566.079] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2261 0 obj << +/D [2259 0 R /XYZ 90 757.9346 null] +>> endobj +2257 0 obj << +/D [2259 0 R /XYZ 267.4535 665.9412 null] +>> endobj +2263 0 obj << +/D [2259 0 R /XYZ 90 649.2141 null] +>> endobj +2258 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2267 0 obj << +/Length 2057 +/Filter /FlateDecode +>> +stream +x诃歒s啭+X*Dp~箨娂钉HTU捿-諛壧奊萢譀_熎蜛T瑀晥欓閚4>t7h>p_ 悴?Y魀n_鯃<傜:缽戕_.╅d$朂駍〢$(↓耵鐏DGT嗔賘 启e飞婛j閚v紆螩*珝回]吡@* 闿+G紵侷b蔌w镧_q +阛膶#b /z湶p褛{椠/毊 祓| Gp噯 S樋梎M﹂d(魿沫z误"浛鍿о<逳6驲縒膉 c鮔瘝鱼 o徒/撌蹱o窛/_馨樺n拔7Cuf醑|R確璏赞y哇 L訔J if鲅媾塑譜爳誣p薖焆Wo9声鈲f/窤X;M/Z玙Iw碮廴厴嫚($)珏民 !L隮耡 {} kX錛1_x=Dp馶/%;賠圪j麝莀s'U鼮g 濑A眗煁瑯誊0宪H峨|2>N款nr書IY歿GL幺b3j壻y2鄎m 摴浻誨啡桬芪嘍 緀嬽玏鶦X淍1 +/髪)j磅荛>ps睔 \卮焞c:n囋嘒 剦V}a$覙獌]獩-5纴欔K]綴鶉禪)R寬纲J陘:+{m逐椪B瑸輌癸頎撑K﹢〗/鳢磡О/ 插M_'f颜蒴c⿻塆皰J豧悊)-踑觅@,W>榑C g衮%燓4鴀ATg怸1o鏩桹0G襠<%zF硓駿囮壨C逡C~償縿=Pe諓緺f8搱3枉z_(]緈,n睊J賲m皵-KaP佣|斘J>錍Gokペ~(俙貳< "np曤@"笑谾^0侞<暭 瑢頦b钟従愮*W漎n踕莪齪u踪$ SQ&T>5儚3!2芓偭J,蒨]a劻勢繾觧溋﹀L藧D2劌愸 觔驆r臿 I枧躛9;芖硥7袗貛3莂~\cv⑶5楠镞鏠廠&%Jg锢I=(3酲5k惷$":俜陮沉,酆Af?犅_霜肥 熭BmV厷s8暡^V(+g泓'遧嬗i総瘮!1矗;:塵敕:矋&s]8骵p齲壽岵嫫硟睴>錯度=(程f27仅眆撣W抗牖С蹧!攊t(2 <r%ず@$!Ub蓜蹈OH !!5忐iZN}偻I\"Ei?灀倈蕧巀隖堸訔穬泲绸蹴虲4 +ibd"$#)訹>sI+涙燠|盵x邳,鼢雏燀隋(;駂奲 !蛹CYd蠫h峂娐 枽唉0Fa躰Ea蓊 6専Ba軑庌厽7w拂C 玿D鑐壈負犞U&N$:1[堿$_8//u*0撰MACWG7 I2I峬HD*3VbI& +#L&&v覮6崯纃聧庌?趥鷛yyq魀彃"N7襬溲)玬γ> endobj +2270 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.1536 672.5415 350.0824 683.4455] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +2271 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [274.7554 593.6496 309.6842 616.6183] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +2273 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 524.9361 172.3507 535.84] +/Subtype /Link +/A << /S /GoTo /D (a00141) >> +>> endobj +2274 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 486.1806 164.0618 497.0846] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +2277 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 365.4596 298.8158 375.3872] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3f6f1f6f98431f2d33ed30a30d2ccc35) >> +>> endobj +2279 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 326.7041 293.2467 336.6318] +/Subtype /Link +/A << /S /GoTo /D (a00153_g974c9b4bbe6b07cc1d64ac4fad278030) >> +>> endobj +2281 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 287.9486 263.8671 297.8763] +/Subtype /Link +/A << /S /GoTo /D (a00153_gcacc406c3bf7d0e00412e4c946252739) >> +>> endobj +2283 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 249.1931 265.0627 259.1208] +/Subtype /Link +/A << /S /GoTo /D (a00153_gca1240bba5dd57f8c7c27123c84a1f6d) >> +>> endobj +2285 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 210.4377 245.6755 220.3653] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3001114ddadc1f2ada5cc9a780e866fc) >> +>> endobj +2287 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 171.6822 220.231 181.6098] +/Subtype /Link +/A << /S /GoTo /D (a00153_g763f12007aad8cc0e483bf50f8a8d9b4) >> +>> endobj +2289 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 132.9267 286.1035 142.8544] +/Subtype /Link +/A << /S /GoTo /D (a00153_g9dd44616d41cef74d3beb51d8be5ecec) >> +>> endobj +2291 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 94.1712 253.6255 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00153_g529648ad3b0b327a43689b0f1779ff55) >> +>> endobj +2268 0 obj << +/D [2266 0 R /XYZ 90 757.9346 null] +>> endobj +650 0 obj << +/D [2266 0 R /XYZ 90 739.9346 null] +>> endobj +126 0 obj << +/D [2266 0 R /XYZ 90 739.9346 null] +>> endobj +2269 0 obj << +/D [2266 0 R /XYZ 90 716.7484 null] +>> endobj +2272 0 obj << +/D [2266 0 R /XYZ 90 543.8366 null] +>> endobj +2275 0 obj << +/D [2266 0 R /XYZ 90 420.1859 null] +>> endobj +2276 0 obj << +/D [2266 0 R /XYZ 90 381.3704 null] +>> endobj +2278 0 obj << +/D [2266 0 R /XYZ 90 344.7717 null] +>> endobj +2280 0 obj << +/D [2266 0 R /XYZ 90 306.0163 null] +>> endobj +2282 0 obj << +/D [2266 0 R /XYZ 90 267.2608 null] +>> endobj +2284 0 obj << +/D [2266 0 R /XYZ 90 228.5053 null] +>> endobj +2286 0 obj << +/D [2266 0 R /XYZ 90 189.7498 null] +>> endobj +2288 0 obj << +/D [2266 0 R /XYZ 90 150.9943 null] +>> endobj +2290 0 obj << +/D [2266 0 R /XYZ 90 112.2389 null] +>> endobj +2265 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2295 0 obj << +/Length 2082 +/Filter /FlateDecode +>> +stream +x诃Zms4䴙_$3T栎2呤祑蹵岣`:n獯喣 盋瀅Kr8盶鑤澢猾粘赸%lL釓峜:嶵Db!鮴疡<~7b钽  鴉6-徢15足俨挔Q滖駆褊男740Tt祪浲b縅眸j3忒蛹L蔿揙榼]蟡轿,%4C弤麅`迖%"6j7敯8驺鮄r醥V[袿鸄趼┵I獔f|#;f4"Ls囐G紇嚔c痥夘`!峛3(鬒韷斮及0s{莨雛侍dy:b 謔3 "妁e吷G欸噀峞eT)0溔餃qWbx聓宜$墿謒藉6]毪}枟娈熵"票<?=8抬枱>dQGn丹,梓1D)妏 鐰び1%Y鏯諪c齯煏v癏~嗌s粢QL敠鎁瑗&俌@絡X恀M= +桴鬸轫袐玨8 x葃~y|趣庈奯嗬+)诊苿z)l (7鍪 +,啴皥#L葡壗踭炨;s+!,R5煰鰦越W沽詎IJP湩:)㳠厦咺挘櫈`$3:I霁>豰鰁奦0W豨O閖eG䦃]\胔棫頴&e仜8u3:r[坼蹯蹞%倚唶\!"h駙/c澬吧:躬aUq雼┿聿*fZ'7X7廀N骝蛕洯.鷶晱琪谻ES ^N澕郛P衅p!z瑏> 穁鯙uGu 噹輍 &'衘X0衵5-犠ZKo8汹Z缹嶾h迟鬏CM(媢R峠y岒秊-蠎廋Pk螄q V弐韈;A\H)Zf氪]>`k恂錷2莮/l;乙匵膳篌!;遻髨璤樾毇楬<串a酘h鞁剘絬$4垊栻!懶oFG畯凮讞贩7遼婭'縱矌%2 疇/:樢瀄装娚S&鸧撖枻豲穢VV,齨毌;CR辁赯誈S詢2\j$kX槮 亇4碜[哟﹚M[蕠写邔庈M飊.鼓n蜉u:4鄮皟藰U I凧盚 d}萸zk磉脘s掇n]镗I辠黵嚽- ]o掏婋)$Y~T厗萦>?殴O1y侢黸7 +姏m8[,休泚忒6学. 萜祈oW偆E モl7=A\脗A塬>圼z肁躒> ft潸 契鑄]袴<`(䦅啷閰qxME诹凨/1K垱赀77O)v\螵晇慢L颋p裊l浍$h韰4:P惈a=L碚鑩谛fiS庼p$沉匣7過岿铞鐩垲譣h稂得莉NOK榁齶V o顔毮08I磫夆OC蝫i灺 榉?鴢i脽3町鬹.炬顥:0-鬏顁蔝湾頞z|p爹恦~龋 灲i / 孶閑ndstream +endobj +2294 0 obj << +/Type /Page +/Contents 2295 0 R +/Resources 2293 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2292 0 R +/Annots [ 2297 0 R 2298 0 R 2299 0 R 2301 0 R 2302 0 R 2303 0 R 2305 0 R 2306 0 R 2308 0 R 2311 0 R 2312 0 R ] +>> endobj +2297 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [177.0032 702.6096 196.7092 713.5135] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2298 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.9845 663.1573 206.6718 674.0613] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2299 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.1599 623.7051 252.3298 634.609] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +2301 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 459.7527 225.9098 469.6804] +/Subtype /Link +/A << /S /GoTo /D (a00153_g51195ea7cd5aa387a87f9d3b23905b62) >> +>> endobj +2302 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 420.3005 246.7912 430.2281] +/Subtype /Link +/A << /S /GoTo /D (a00153_g9069474ea570fd78c481aa164317dbaf) >> +>> endobj +2303 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 380.8482 245.6755 390.7759] +/Subtype /Link +/A << /S /GoTo /D (a00153_ge0f8cbeca9731af2171ffd37e79de893) >> +>> endobj +2305 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 296.6881 187.0159 306.6157] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb61381673de27f31848c5396bf0b338e) >> +>> endobj +2306 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 257.2358 233.6306 267.1635] +/Subtype /Link +/A << /S /GoTo /D (a00153_gf963fdea2b75d27ef31e92d1d01359ee) >> +>> endobj +2308 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 217.7836 248.0566 227.7113] +/Subtype /Link +/A << /S /GoTo /D (a00153_gc3882366feda1cb759ccbfe98327a7db) >> +>> endobj +2311 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 133.6234 188.6795 143.5511] +/Subtype /Link +/A << /S /GoTo /D (a00153_gdcf372ff9748996f7c05e9822a615384) >> +>> endobj +2312 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 94.1712 254.552 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00153_g92f3344ec8ca46893163399c89fafed5) >> +>> endobj +2296 0 obj << +/D [2294 0 R /XYZ 90 757.9346 null] +>> endobj +2300 0 obj << +/D [2294 0 R /XYZ 90 556.5104 null] +>> endobj +2304 0 obj << +/D [2294 0 R /XYZ 90 312.6772 null] +>> endobj +2307 0 obj << +/D [2294 0 R /XYZ 90 236.1996 null] +>> endobj +2309 0 obj << +/D [2294 0 R /XYZ 90 149.6126 null] +>> endobj +2310 0 obj << +/D [2294 0 R /XYZ 90 149.6126 null] +>> endobj +2293 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2322 0 obj << +/Length 2189 +/Filter /FlateDecode +>> +stream +x诃Z]s鄱}庄蠰`\|铔粔3夗谑mo?#K赐〥"4髯I@(t泷孍奊凰9@2起G 透/#<~劘邖Hs疅鴢7逞爖瑧朤巊I悹剮g薩':=O辬蜻0豁继6y尜跎脭娚f[熿.@&JM欮>0:煿@8撃勸玷走駒 駘a拇/p褮幾#N=Y峮G?:;鯀莕梒S氃7鑱:`D$QHGB]~+&?.釪E$挺歂6S'徴縐赿${??焆)摟t1騁盵7糕i砙-脬I`6哓旀f褾垕0九 CB`贠椑 G鍽刞8S|靈&縌*毫怜╜c哙懩7_聭芌洱~稬 -蟠銣K斝87椂 嫫免cat鞖0>_\吡S緖{uyy{ +1毃HR)瓺 羾襏*>"|u皧癘 芍罂初n]熖讻]^6渒樆劁嬢v;e$底鰈掬y酣*@/1@0m!H A涥$93$鮹驾G襙満臛B獣妞W> * 鑡瘈坃珋栠谖( F钱U篱斆@1圾嚣菡貔eG#R:!淶$﹥9b拢N,棠|枛関濆圂贺=?o l<?v高蓝S眠䏝J鸼硚蜼都gy痻刦0篞駛蟟慇9N;X斢玖#~-~銣n;篱H粬忧+:畓础歠/$矏Q瓝 +魘肪O讽俕厘U9嫌彤X}> j创 熹X縅!楩壠I対g0奈癬荖唢v稖ag8寧]宋烦笏氆洨劎族)'" *#靺}嚑?瓾對鲰4]eE閁`荱S,鍽ラP!廘曲嫴7`i寞ei薿湧mX 譽7镂Lkp:%剺兠CM`蔈,%) #馑j*W鎻28厮瞧],WA1/珏芡2骉^燏M-O,y 崵Jb-們砰 ;熳眼;-鏑滓.維&W漙4鼻2aQ`谴皂X/78袡s5P#: k,鲜l惊O觊b5蠹XgE崛^fkㄩ9L8$#Q=颲E赺9c(: 9塪"謤8X滬灹髅~鱹高r>匊0:v-?濥\鏽A菆QE脡p℉擯T/5`殗ul=蘍逤嚚oa{牦碾e杠2p£e嘤酣5狧蚳 p|哓=P褦L諽YB櫋 '6渳甾:bz~X红儁'a黸z&S$、k)杘0 瑘_+瑬吒摆+F钱'^鰅媋7擅筽℉f枑饍G zO虈l/瓌y覀'瓌滓傦鄍^@侮兌凄7@E塌艟裱嵙砌.Z +K5湎]Z攳隯r?Hi£eb坜-觮m墙rS>Jmh玢患-iQ<霽齤输毹*$&bj蛋竄=!祮:碟~ǖ鍇圸胊t靂礏鏖鲻üP,8T=厙茿)偾迾)晴n/~9s,讻e倧镲>瀇v緡搬{VH/晾/fx`椋C姺癡棣Q偠柅鍋褒毨*殸J櫿>褎僂5 h"庾j㈠7畨扼殘勓彪鏾贤V繭梘WS&&?u!"B蒆B9?M(覊5u 尪yX"U贙箦_槎誊鰈]i_损碮/鴴逅蜅) ,XJ耠鬥+氤,蜶蟕垾a繋ゾ,m9乱p划r_|奛 艙計Yuz鮵謅jB愒 +'拧"袬W%谘@紻M迂*廲緡1呗岓鰼誾晆cX鐕[蒎=樈籎^鏤Viu2\)%恚忥泤蝬诫}z笙v嬃P槹^妁,犌津"~Z~闶k;牸H籲辐婧^ +~sW5-G.嗲眑P窴臺荷Fx倶皎s\"6tpp+琪0 搱5鹼運 q-c窗8=! +嘄: +鷡P板|胊t靭4黻絽wG(L缏"1P朄蕏規!P蛲'肦涑褓:籷% 榏B?就忐:蹑轻.铃Sq翱桞^/韏蠪l嶷Q審.琧xD +鵐/V鶵豯慠62e_$P珤綤F鼹^搮O鲟) ;js=e3!冫Rx 縢浛>a:TM殫`,錯ndstream +endobj +2321 0 obj << +/Type /Page +/Contents 2322 0 R +/Resources 2320 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2292 0 R +/Annots [ 2325 0 R 2327 0 R 2328 0 R 2329 0 R 2330 0 R 2331 0 R 2332 0 R 2333 0 R 2334 0 R 2335 0 R 2336 0 R 2338 0 R 2339 0 R ] +>> endobj +2325 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 703.2861 227.424 713.2138] +/Subtype /Link +/A << /S /GoTo /D (a00153_g196379ceb1219a99f4495e41ccc9bbfb) >> +>> endobj +2327 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 617.7172 235.8724 627.6449] +/Subtype /Link +/A << /S /GoTo /D (a00153_gac0de06236b02659460445de30776e00) >> +>> endobj +2328 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 577.6656 202.5175 587.5932] +/Subtype /Link +/A << /S /GoTo /D (a00153_gf5fe83be78b78b9e7d9e7f1e34ab1cc5) >> +>> endobj +2329 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 537.6139 233.4713 547.5416] +/Subtype /Link +/A << /S /GoTo /D (a00153_g8f4ebd8ef6c0ea665ed351d87fec09fd) >> +>> endobj +2330 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 497.5622 215.0208 507.4899] +/Subtype /Link +/A << /S /GoTo /D (a00153_g51c1cd531ff0afb81620151f2248cd21) >> +>> endobj +2331 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 457.5105 187.9025 467.4382] +/Subtype /Link +/A << /S /GoTo /D (a00153_g15de27b044603284f68db05a378235a7) >> +>> endobj +2332 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 417.4589 211.3245 427.3866] +/Subtype /Link +/A << /S /GoTo /D (a00153_g67cf1e0d2324c93f332c1f020c0fe8b3) >> +>> endobj +2333 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 377.4072 231.2496 387.3349] +/Subtype /Link +/A << /S /GoTo /D (a00153_g24aa5bc36939cc9a0833e1df01478a7e) >> +>> endobj +2334 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 325.794 211.942 336.3243] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4910467b83a639f06739c82cd362037e) >> +>> endobj +2335 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 286.345 259.1549 296.2726] +/Subtype /Link +/A << /S /GoTo /D (a00153_g5b9dba2123705bce1ce95c3deca0bdad) >> +>> endobj +2336 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 246.2933 272.6941 256.221] +/Subtype /Link +/A << /S /GoTo /D (a00153_g2bc3b489923793759526a3181eb667fa) >> +>> endobj +2338 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 160.7244 233.1426 170.6521] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb1455b27c06532a399cf06d2c1d6d08d) >> +>> endobj +2339 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 120.6728 236.4303 130.6004] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3090117ef3ff5775b77cb1960e442d07) >> +>> endobj +2323 0 obj << +/D [2321 0 R /XYZ 90 757.9346 null] +>> endobj +2324 0 obj << +/D [2321 0 R /XYZ 90 722.0018 null] +>> endobj +2326 0 obj << +/D [2321 0 R /XYZ 90 634.0061 null] +>> endobj +2337 0 obj << +/D [2321 0 R /XYZ 90 177.0133 null] +>> endobj +2320 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2354 0 obj << +/Length 2254 +/Filter /FlateDecode +>> +stream +x诃Z[s6~鳢蠰_翝d貛я剖胣垴-qB*/I菸= +iR込2佮凉崦箑&3 ,3Ox(`\微 灜a剺拽瘙%xL0~c ∪鳛E>拋7LK5塊囕,菂ZT築賾|&莡8鋔y穃l~朱悟鷑y}~證&叞鑩/C﨣)S来dJ韹笂媘捙テYbPY]VId嫠z匪 苧撟槭3禔q籏邑&袤桎 +rB<F 9匫Mv @-B1埡r徖hG1 WG茁翩诱挣蟇=hU鱾/&坧FОi善皺*2疀抣 \Tab抮 b 蕧59">g\膱f5軚l.郚鹊理葷nW罎PG吠鵁?-槝焆湡A疙EWH鳒O鶅B砧兲桝Xx-傴n蓴诛<\EaYu"槌0R 朽5`&(挃S0砫0s幜l\n 3W0?f鉰豇恶矜燋7?縻#A茔d 怗蒏僚<銩剻%昳拀5#馤Р壝T嬫U懂6厦嶫鋍"^v獆aDL廖扢梦a8籷-靄惯T]'珵l埡矡G潵熞⑶WiQ'畸4_鲾P礌癟Sⅴ噟離,p %{聺擝;<悽 1覦甡4投\?苮0柫q'!9朖I-捥偌6凁牱驳C蟀嵥2lk夋<{>革#B09Ry噝鴙丆拖ou 蔗E洡姡猲忉K圑N郎{x@鲅丂?0'-c螵w摗葤R奎緣5=獨嫵UBAfHT颜y呤姨$阼ゝ詼玶`鮼.糺鯡欂zL鼧7I晊Jn〨U +熢{c=&U暁倍郍xR"蘓f掌嫁,臣 +赨 +D裎\苒*/44诱行嘾愍1hU诌齵yy轶佩g0*驊Bvfk[荲啺PY暳\68坰A褱S<[銚擼鯲6l跟b>F\賂尋姈l2U孞堙 6Ut銷W(]酖T(j豇秴嘐 +L8偑1閑E +僉#輣{8&穌4?尊R刌5#'鮗m碽矗8檕氩遥嘪/氿綨 +2轏葵濼=2&@4颂崄憭X弓7u>堨觇炤逓熭荑6%Q薯s%頵攝& +3=(!肽z◤悢萁覦ae垟eI禵pp呏6 糊﹡?u簦Y煰瓅蠼OAL鴪Fu88-諗lIte桿Q奂綪恗\溷摼Y;O;戕&d磔=#漕.4藩{塎H4 +欠韊V +岺掷QU椿炌^捋7[ 陼K0埁6+浈R]汋寤5酺7&Y斨 跒GZq!|,劒邬$ 籤Z噟 打]6}hA :Z魻eéd 瑾|z [;pHC2弝 +] U愈_棝灼﹊ +n嚋`顱7z卽低u:(4}N楀|袗@鉔|湔jeW xj獐fA勪#傣锿殕zH瘹HK鍀V 沿/桧1:\'4o8騎榬鎃a瞠'1拾客秾奷g磩Qe蹩Cd}1馑04鹋 陆?-腊D叽P2鈢P$H@%髐Dj4#~e 磬:u祔 渣夥斀ユO(埔淶u鉅鎙媪嗹孅彠u躃o闛剪?(纋endstream +endobj +2353 0 obj << +/Type /Page +/Contents 2354 0 R +/Resources 2352 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2292 0 R +/Annots [ 2357 0 R 2358 0 R 2359 0 R 2360 0 R 2361 0 R 2362 0 R 2364 0 R 2366 0 R 2367 0 R ] +>> endobj +2357 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 705.2116 209.0629 715.1393] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3589822ecb9d9c4145209756396b8a6b) >> +>> endobj +2358 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 666.5202 222.0741 676.4479] +/Subtype /Link +/A << /S /GoTo /D (a00153_g5726142fec34f35fb9ea19e5a45975c6) >> +>> endobj +2359 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 627.8288 214.124 637.7565] +/Subtype /Link +/A << /S /GoTo /D (a00153_g21664b7441cfa37d280228d23316d609) >> +>> endobj +2360 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 589.1374 228.3406 599.0651] +/Subtype /Link +/A << /S /GoTo /D (a00153_g156dd2891a57035e4afdc4c2bc0b0ebf) >> +>> endobj +2361 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 550.446 212.4703 560.3737] +/Subtype /Link +/A << /S /GoTo /D (a00153_ge6f4a2453dbd8bc60e6a82774552366a) >> +>> endobj +2362 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 510.7784 166.3534 521.6823] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb58e1ceb7cb73ca2bcd73146b6c1b4e7) >> +>> endobj +2364 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 378.2912 233.5112 388.2189] +/Subtype /Link +/A << /S /GoTo /D (a00153_g285a80366aed9428f64282b8d13c918b) >> +>> endobj +2366 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.3051 251.4958 359.3784 262.3998] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2367 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.4596 221.9163 356.3884 232.8202] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +2355 0 obj << +/D [2353 0 R /XYZ 90 757.9346 null] +>> endobj +2356 0 obj << +/D [2353 0 R /XYZ 90 720.8203 null] +>> endobj +2363 0 obj << +/D [2353 0 R /XYZ 90 444.8446 null] +>> endobj +2365 0 obj << +/D [2353 0 R /XYZ 90 311.3811 null] +>> endobj +2352 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2377 0 obj << +/Length 1774 +/Filter /FlateDecode +>> +stream +x谕YK徾6钧W枧b憭r踋o襠浑E摾惺箔謻\=操ER置枩磭Q鈎捱蘌&NRuS田a!籰騳駐t花褄r&圱惘亚县Z伨oG1襄3躟D<廧麘M櫣賺G?W|訤)s弼:矢楚燻紺忣`5w,愅\2T'(錷唥蕶UcW %6虬 ?珺辋8霩r–殥錘貉$u 鶂m甊嘷骥双洬w镖Z@ l纷䦅╛69棒嚴唔何w詒郋!軉AP挠:u菛 J籺绕庣橨-跴祜*Y玨n禓蒥訞.忄x梠Xd郅丨院疮\E鷧t聹qgZB灗脞纩滇N e郂O刚D'鄛尗隊婖, =渨T0,忩碧K 1BD:疲銾l'湉o骭o頾遦庫,荵槆>捙J5荩测pHR輥宙sHr(掼3T09I搣蠙恤 ⑤眐旹ZCTZ辉k.躔\+aQ霑欃*;ょ嶟T儧博J轰h濲;X(粈A緧4覥汓FUq腶﹙蒚(I憃扟8j4 4捉2M鄞鵃£~2G敫镺hx瘪fR~絑74\A貧=俤e鎴栾謤"D"藐-:jd昡d22咒(_匍M碋в伟枼鬂鲣Й呤纯籙 艃y_峠{kT璐7-Gw6扫`M#梷鑗E跒畏Y揝B\W偕\繆O豤闶肅讠c棪濮擴k44"7:~_?卧 XZ靣xNN阺Iw/宲;聈槅q`滝鬜酱鬝8糋0:W鷀#7G絴~{ynt慟璃'莞(!湍緦{UE斚%傚5 s)(搀 q菦0U踎$庚]摰Z^U韾ee搹輗/qrs隣(0虢=竰Qw峼._P鮘I衞鞉肋5彦,枆暏~N俎7鐢}QNE 丐垣旐謳7#i=#眢y0ax麬傸jvs醺躺4馱仧鍗鲕搘踢4 +T+絢z粲諷<23" 讌浤S6!d墳灒|潩l%'匨/m%砜f啜o;'1拎f"给W跀踊 FC<嚬鎋(瓌傣.孋h闡&do% 覤╥%o({c:臱滮桱R#, ;噏N)d+endstream +endobj +2376 0 obj << +/Type /Page +/Contents 2377 0 R +/Resources 2375 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2292 0 R +/Annots [ 2379 0 R 2380 0 R 2381 0 R 2382 0 R 2383 0 R 2384 0 R 2387 0 R 2389 0 R ] +>> endobj +2379 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 726.8189 213.038 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00153_g41aa744caa46913b3b3aedb2a4e78546) >> +>> endobj +2380 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 687.2449 190.8907 698.1489] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +2381 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [191.3888 687.2449 268.6482 698.1489] +/Subtype /Link +/A << /S /GoTo /D (a00153_g69646a81a922033c5281445a71f8ffed) >> +>> endobj +2382 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [336.7197 672.2644 372.0849 682.1696] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2383 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.2897 647.671 239.3189 658.575] +/Subtype /Link +/A << /S /GoTo /D (a00153_ga92afb113e122f860392bfbd385f842e) >> +>> endobj +2384 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [336.7197 632.6905 372.0849 642.5957] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2387 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 564.2011 245.6657 574.1288] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb6e04358481bd2057524fb874cfa472b) >> +>> endobj +2389 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 550.8899 229.0679 560.8176] +/Subtype /Link +/A << /S /GoTo /D (a00153_g6836f92f3692f3a4429eb599db40cbae) >> +>> endobj +2378 0 obj << +/D [2376 0 R /XYZ 90 757.9346 null] +>> endobj +713 0 obj << +/D [2376 0 R /XYZ 90 739.9346 null] +>> endobj +2385 0 obj << +/D [2376 0 R /XYZ 90 582.5346 null] +>> endobj +2386 0 obj << +/D [2376 0 R /XYZ 90 582.5346 null] +>> endobj +2388 0 obj << +/D [2376 0 R /XYZ 90 568.1862 null] +>> endobj +2390 0 obj << +/D [2376 0 R /XYZ 90 536.5063 null] +>> endobj +2340 0 obj << +/D [2376 0 R /XYZ 90 511.0399 null] +>> endobj +2391 0 obj << +/D [2376 0 R /XYZ 90 511.0399 null] +>> endobj +2351 0 obj << +/D [2376 0 R /XYZ 238.8902 421.844 null] +>> endobj +2392 0 obj << +/D [2376 0 R /XYZ 90 404.3073 null] +>> endobj +2350 0 obj << +/D [2376 0 R /XYZ 215.8768 311.4556 null] +>> endobj +2393 0 obj << +/D [2376 0 R /XYZ 90 293.9189 null] +>> endobj +2371 0 obj << +/D [2376 0 R /XYZ 352.8421 189.1121 null] +>> endobj +2394 0 obj << +/D [2376 0 R /XYZ 90 171.5754 null] +>> endobj +2368 0 obj << +/D [2376 0 R /XYZ 238.8902 96.348 null] +>> endobj +2375 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2399 0 obj << +/Length 1725 +/Filter /FlateDecode +>> +stream +x诃X[o6~鳢09%眔i韛.4s\`[[娡腂uquA掿姢-'+偫yn$c#c幥.s穕g級Fx|GD/蟕}V'x侐1G堋蝬}WJpb斝駔鹵赓醢'膨 + O耲p憀婸<憟s?抶鷠齣碭Wz礩蘲堅鷖趱;o良O#,畋|`D8сhdS藎劊胙煏礟2繇霐鞶鴗疹D(Mgc<鵰+綼Lc涧/双泈S姿rW 为8⿳岈忿i,鳺彃;鯖洢 +平岿!厠\}逳)M)涇塼守I峈q慍mA%埗晄.)颅菈!,%慖鵤h(鬂珣5賁.7rlM黿玿秹萙鈈!磫<+爴蠴涇wu嗠Z瀢LgL9<慬yP蘵lSa灘 V縜搝8 M婝菥冗h聠Q價w笼顖袞因 +虊捔孜d査洃"YLV>夔h +馞鬞1載0萶"泳a嗎 兰罇叞4蛄97焀笈 }7檔 垵蘹鮁償nvA.6y6 呙.仂ZyhG:枥婨| @[9f闱Mv鋾窟-?,.缢矺"/>栧G 拢舴贉a蚍跿植F動b/BKPiyZ%腐RYNJ時喃祮J9_2y旿H洏/e<嚜漣K虽塝畻プSG憊\2y卅c 3鋣.葲妦Vg鑹袔\墏  硸盱0TC汗监YVS +fh,鐣;繻 0=倭7i挼-碅&w0K;R5H73暿6謆T豚謁b$UZ)粪禜{岈坒5獮嫘枼 +qG8gNS汜蝑葒t筏|僲z =d鸔*€VP乾堾_=C=牷%@,蛉蟸D;葨鐜+竾<ガnF絟歔<粰{e kz^|早畀<轶仦瞂qZK罐婱 E磠J!鋖Q=糓韮(袯捺b缶rq6滇掶兽D]7GwO鵵购N胡R +sX炄\G镖照E6d%佊旊 z虏#窎P%K&沾┹r 諃%枀p薮D]崕N塽2GwO毊鎅榽v萿F賈c,"邀2pJ鶮髰嗝 w炯^/.>痙墚痏疝颡Kv@AR椲茀r煠y謰左眢o5斁嫖)遪!x忐P膧 q橌標rXH揭蟊# ^)垙"﹟%h綱]樍'Y晩谼慆舘栮7咆Qr嶂敜睿还:虛千{褃j梠=(鐬endstream +endobj +2398 0 obj << +/Type /Page +/Contents 2399 0 R +/Resources 2397 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2292 0 R +/Annots [ 2404 0 R 2405 0 R 2407 0 R 2408 0 R 2409 0 R 2410 0 R 2411 0 R 2413 0 R ] +>> endobj +2404 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 421.5214 227.254 444.4901] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2405 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 421.5214 380.3883 444.4901] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +2407 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.808 302.734 388.7368 313.638] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +2408 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [490.9727 302.734 513.9963 313.638] +/Subtype /Link +/A << /S /GoTo /D (a00144_g12b467f314489259dd718228d0827a51) >> +>> endobj +2409 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 290.7789 143.0105 301.6828] +/Subtype /Link +/A << /S /GoTo /D (a00144_g12b467f314489259dd718228d0827a51) >> +>> endobj +2410 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.9993 290.7789 209.4109 301.6828] +/Subtype /Link +/A << /S /GoTo /D (a00144_g41d37ea1e3bd24f7b51e9409aceaaa80) >> +>> endobj +2411 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [226.7857 290.7789 297.4 301.6828] +/Subtype /Link +/A << /S /GoTo /D (a00144_geb79c914cf137e6d27fd7583e5a66679) >> +>> endobj +2413 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [261.4335 197.9645 328.7205 208.8684] +/Subtype /Link +/A << /S /GoTo /D (a00144_g30e827f33eacff55ecb4d8fb5a11d5d1) >> +>> endobj +2400 0 obj << +/D [2398 0 R /XYZ 90 757.9346 null] +>> endobj +2401 0 obj << +/D [2398 0 R /XYZ 90 739.9346 null] +>> endobj +2374 0 obj << +/D [2398 0 R /XYZ 224.7534 640.6243 null] +>> endobj +2402 0 obj << +/D [2398 0 R /XYZ 90 623.0456 null] +>> endobj +2341 0 obj << +/D [2398 0 R /XYZ 238.8902 547.8099 null] +>> endobj +2403 0 obj << +/D [2398 0 R /XYZ 90 530.2312 null] +>> endobj +2314 0 obj << +/D [2398 0 R /XYZ 208.1261 381.0771 null] +>> endobj +2406 0 obj << +/D [2398 0 R /XYZ 90 363.4985 null] +>> endobj +2316 0 obj << +/D [2398 0 R /XYZ 233.9089 276.3076 null] +>> endobj +2412 0 obj << +/D [2398 0 R /XYZ 90 258.7289 null] +>> endobj +2342 0 obj << +/D [2398 0 R /XYZ 238.8902 171.5381 null] +>> endobj +2414 0 obj << +/D [2398 0 R /XYZ 90 153.9594 null] +>> endobj +2397 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2417 0 obj << +/Length 1471 +/Filter /FlateDecode +>> +stream +x谂X雘6羁B杈菮瓚;吆紪"M吃:碋 K触E塲~菞e)婋a( y<飤靼皡[1睟?tb !k渌智 8_3滮zAb+v鈥謗-%伛 &2鹍&駪}Z诚慚$绩"諿眓說='綸7j覿萋"H廃鶙遨蠃rg埗觲,跳:Y佧v7巪6攘qL琷譴寿囐;9闌0u]籗鱱G% 誹熄#+&\=藗Q"~/縑O馢籦 >qrG\琗嘈 堢I閣tM蔙)嬲宇攡F>'桬)$,9:6鋺欸Q;\炷q桧傟泫#勳_2um}?痭锆靠>垦曹,9c)k櫽潈魥 + |沜擀"4蒱c庂哋;hK6Oc醠簄⿴G義=b轝 竐9竰$a9踚略b謚2gNs q廧s烍9秙p汳a0蔱H/t磞輹貾灦绦6c?器3鱰!5貖1秛鸳T ;(菷>酁 o狱№ 恛:{屙,鴠蓠m菑B;@:9赭棗W7?F宕├K: +咑NYo6 ]栆'卾馸>0~ 唅]m嬕8痐噐$9籯楹+[^>Z" 2B 蚌惂骎pu,昲説{"向A;ADUXq襩4溯^/鲽熥踘R艜d~7&甤K\(( 晍胹X浑zr h+W8繆j[ +b%C榇単\眕憔髠訑wPjD3Z塏mヅ儧z ^{}L&逜63è迁p徬ktl^>軛撽輿弚s偎強跦PdW慎㈥*礱]祾e忠lx颌9薉=Z*択#B&a焆p敢r蕸劦U罸\鋱>鍲Z3FS鞨!|BV勃恟皦 s溦|旍y6螪M龑*=* 轆4|fX@@伣p o4 %暝~ 8倥e(6F<胰鑕p鋯~韍;;栝*馦3 +%%鲨<uYu#薇禟E,牰O備8ct0驇H6we漭Bgsvvw驸菆惠U^3%&Y謤Qz&4y7鶅(@;n攀刉[慃J懚I00餠&-N`鉘繝\嫧盆鹑Ui饆$隯誼((闓櫌H嚻顲憧ZkJ 趂o鴆Q栚4y)x觠薊鉖9 灲逾@Oq@U$M撂徣椶撠M劧戦泜连あ;鉦沛+觲稪 +M骦颥w沮 嬚奛嶃I 缘蕎Q趄Ξv9蝬槈|(0!N銯唁4c鸤珿眱 瞏 c脹氂摫R寛姂錉讋邶(tB禚酱a9z>疀囍L,逵p檡q躐麹t憺胵Gr%,H鄕1妿.PX4# +曾>N~;A鷁!?繢 +v蓗HjZd綠h#膍/)蔓酧=邫臶::1_j0:! A篫#鉴}Fp;hX屜觑O鱻鴺2釤U%┝endstream +endobj +2416 0 obj << +/Type /Page +/Contents 2417 0 R +/Resources 2415 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2425 0 R +/Annots [ 2421 0 R ] +>> endobj +2421 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [293.1521 514.0489 332.2253 524.9528] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb58e1ceb7cb73ca2bcd73146b6c1b4e7) >> +>> endobj +2418 0 obj << +/D [2416 0 R /XYZ 90 757.9346 null] +>> endobj +2372 0 obj << +/D [2416 0 R /XYZ 319.1084 712.3476 null] +>> endobj +2419 0 obj << +/D [2416 0 R /XYZ 90 695.8178 null] +>> endobj +2370 0 obj << +/D [2416 0 R /XYZ 368.9116 591.1728 null] +>> endobj +2420 0 obj << +/D [2416 0 R /XYZ 90 574.643 null] +>> endobj +2345 0 obj << +/D [2416 0 R /XYZ 238.8902 487.6225 null] +>> endobj +2422 0 obj << +/D [2416 0 R /XYZ 90 471.0926 null] +>> endobj +2346 0 obj << +/D [2416 0 R /XYZ 207.0201 378.4029 null] +>> endobj +2423 0 obj << +/D [2416 0 R /XYZ 90 361.8731 null] +>> endobj +2315 0 obj << +/D [2416 0 R /XYZ 207.0201 257.2281 null] +>> endobj +2424 0 obj << +/D [2416 0 R /XYZ 90 240.6983 null] +>> endobj +2318 0 obj << +/D [2416 0 R /XYZ 238.8902 96.348 null] +>> endobj +2415 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2428 0 obj << +/Length 1383 +/Filter /FlateDecode +>> +stream +x诮XYo覺~席4cK膕椮眣+4@P 1僨U畗_%x:縹屋1iD穴R飤诛,1"M盥 柢浧M钒齶傰 蝕 O律螲0 溊#4蹾 +v\偵4L>X緂蠄萰Wo`" ;HMね槡_杚洺^雩疱dv|礨.醢帔e蜥& 匏 rh嗷觨癅2'sB"洭'vt詠|0嬮9X.攙瀮塁 Jb剱鮗>"D +徽洓匪嬽zy堳沸 HI0);t(挕=w*匯弖慧昒洸Rc裖1矘綪报甕~涊贋k9偐`嶨鎀矐逘实Z鮚蕌#6U頰壼7渒菫$奥攌Z5m舑E_Z甒詩 +=& o"属2/邰槌χ蹕隢煸攑+-矰蜌蘊1:Tnm疔啬*鹘娝劑Y3x桔U鍂濭 撟狴!晚產sc鑷=# >$6j攔J(D箼I鼓,梈净1T迤嫃菶qY膎罳壘y巅w现杙;美鬩a1跞耏P煴2梖齕恰Bh牙駖蠒杫U6祚+F|歮wk刼?0係L=5柳屝:pSQ )媱┛rsaP劆5#濩i爺糡I兯鸳塭埭靭噚O步匪]悚嶯/羇zkq*c=]Z藜_胶|m面鸖YK #L7J沮氐X震趢璪1旡鑧踰-m襬糎Jq鰉$嬐%踰Z" 瘳[ζZ +&檦,胲a#XR$硣豓聣WJn業果G嚤$8膾 /卑閵4戱8襼磔d3翤N塝".s^l*墯柩X0 遨t諗,<邉3P(饅鋾鈺L{ApV3冗耒%S糭c岉9俲妢氲鎪F5V酈 QH**隃譽胹V禯縓T-i藁砶砕詣)r)#莁篃Mn/郒fK> endobj +2429 0 obj << +/D [2427 0 R /XYZ 90 757.9346 null] +>> endobj +2430 0 obj << +/D [2427 0 R /XYZ 90 739.9346 null] +>> endobj +2348 0 obj << +/D [2427 0 R /XYZ 238.8902 601.3918 null] +>> endobj +2431 0 obj << +/D [2427 0 R /XYZ 90 584.8893 null] +>> endobj +2344 0 obj << +/D [2427 0 R /XYZ 238.8902 497.8687 null] +>> endobj +2432 0 obj << +/D [2427 0 R /XYZ 90 481.3661 null] +>> endobj +2369 0 obj << +/D [2427 0 R /XYZ 207.0201 388.6763 null] +>> endobj +2433 0 obj << +/D [2427 0 R /XYZ 90 372.1738 null] +>> endobj +2347 0 obj << +/D [2427 0 R /XYZ 238.8902 297.1084 null] +>> endobj +2434 0 obj << +/D [2427 0 R /XYZ 90 280.6058 null] +>> endobj +2349 0 obj << +/D [2427 0 R /XYZ 238.8902 205.5404 null] +>> endobj +2435 0 obj << +/D [2427 0 R /XYZ 90 189.0378 null] +>> endobj +2317 0 obj << +/D [2427 0 R /XYZ 207.0201 96.348 null] +>> endobj +2426 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2438 0 obj << +/Length 1725 +/Filter /FlateDecode +>> +stream +x诘Y]撢6}鏦0 >,Y蔥粵汵歟煉瀫M崫d}d%,з>瑣筥: 2起G +廲#"1^頖x紒廮巿y<冪扯怜笱峡Q5VH *企 A)°鼶 B3蜀&>`L7U(> endobj +2445 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [203.2945 407.1106 229.0877 417.9898] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2446 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 333.1135 139.4144 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +2447 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 333.1135 175.6584 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +2448 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [178.6472 333.1135 211.2546 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2449 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [214.2434 333.1135 247.4088 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00047) >> +>> endobj +2450 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [250.3976 333.1135 278.6812 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2451 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [281.6699 333.1135 310.5115 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00039) >> +>> endobj +2452 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [313.5003 333.1135 349.5247 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2453 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.3901 333.1135 412.6078 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00050) >> +>> endobj +2455 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.3132 280.0189 219.125 290.8981] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2456 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 206.0218 139.4144 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +2457 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 206.0218 175.6584 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +2458 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [178.6472 206.0218 211.2546 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2459 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [214.2434 206.0218 243.0849 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00039) >> +>> endobj +2460 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [246.0737 206.0218 282.0981 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2461 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [285.0869 206.0218 321.6693 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00045) >> +>> endobj +2462 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [341.5347 206.0218 384.7524 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00050) >> +>> endobj +2464 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [230.7012 152.9273 279.1888 163.8064] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +2439 0 obj << +/D [2437 0 R /XYZ 90 757.9346 null] +>> endobj +2440 0 obj << +/D [2437 0 R /XYZ 90 739.9346 null] +>> endobj +2319 0 obj << +/D [2437 0 R /XYZ 238.8902 670.3741 null] +>> endobj +2441 0 obj << +/D [2437 0 R /XYZ 90 654.4845 null] +>> endobj +2343 0 obj << +/D [2437 0 R /XYZ 238.8902 558.783 null] +>> endobj +2442 0 obj << +/D [2437 0 R /XYZ 90 542.8934 null] +>> endobj +2443 0 obj << +/D [2437 0 R /XYZ 90 451.9385 null] +>> endobj +1385 0 obj << +/D [2437 0 R /XYZ 90 425.3268 null] +>> endobj +2444 0 obj << +/D [2437 0 R /XYZ 90 425.3268 null] +>> endobj +1321 0 obj << +/D [2437 0 R /XYZ 242.1978 314.3947 null] +>> endobj +2454 0 obj << +/D [2437 0 R /XYZ 90 298.5051 null] +>> endobj +2313 0 obj << +/D [2437 0 R /XYZ 242.1978 187.303 null] +>> endobj +2463 0 obj << +/D [2437 0 R /XYZ 90 171.4134 null] +>> endobj +2395 0 obj << +/D [2437 0 R /XYZ 242.1978 96.348 null] +>> endobj +2436 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2472 0 obj << +/Length 1155 +/Filter /FlateDecode +>> +stream +x谕XK徾6钧W鑘17=y H[咭`釙d[,9zd綜憯鮖薃/θ3遼$gD脧!擯(d\褃厓#tZ7紖駇瘥n踣G! +%暳钚Z Jh皨楷缔l┢ +瘺?>CS5A6,&Kl鹽5$uZ錄钦嘳缱L沲坳薟腀飍 ^#488e![砪 s 骂 徛2袸D(b坥c籍_/I启墧)坪┉s3R滹卷岌T&V &<昭錳筎爀騎徤P異倅C2#%:袛﹣挃曛銿a[帕貘!`枼慮娑e锳兑术9襦b嚿GA2 +汱`}[宽O<惦E強|瞞櫺0"G,FZw%決:鬩誩誐 VN9詵(hp 赥>薧G*踼曱借茋m煀,N筱騔(享 翫獲 +8=Z猋]沲瘿* eS/ZB;z鳀玄%t鯾 瞲硠.%t鄘﹦騙箘 +鄨 Dy硠鯭o桺A5)~g 藉K钄醠 韅哹|.裓 0r[典zb瓧@狗癯鶕骻橳E鰙#藕烢 A鸳Q(n 馱悘M]OnU觿L蚹SHzq毒o0L輲6G4+帪裪_Z洶=(E斸( E)膩緟湯 7"懩6Aǹ:[!虈亅.榆i^4踵$v仔.杝RU;齲钤3プ嘚X髏n绰6瓪炘5︺i粷惝籪朚应珐缌0#剺w骽轖Z琯Ao1崡S{ +砲b潝v贽歅}p~輒嗝Dv;%洼 "\蛜腊*D +.桧 S躾%3x弆L鋻vTL > endobj +2475 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.377 726.9533 248.7336 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +2476 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.0545 702.4697 359.1278 713.3737] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2477 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 649.2336 135.5587 672.2023] +/Subtype /Link +/A << /S /GoTo /D (a00039) >> +>> endobj +2478 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5475 649.2336 175.1299 672.2023] +/Subtype /Link +/A << /S /GoTo /D (a00045) >> +>> endobj +2479 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.9953 649.2336 243.1941 672.2023] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +2481 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.377 591.5789 252.071 602.458] +/Subtype /Link +/A << /S /GoTo /D (a00153_ga92afb113e122f860392bfbd385f842e) >> +>> endobj +2482 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.0545 567.0953 359.1278 577.9993] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2483 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 513.8592 139.9724 536.8279] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +2473 0 obj << +/D [2471 0 R /XYZ 90 757.9346 null] +>> endobj +2474 0 obj << +/D [2471 0 R /XYZ 90 739.9346 null] +>> endobj +2396 0 obj << +/D [2471 0 R /XYZ 227.8216 626.7922 null] +>> endobj +2480 0 obj << +/D [2471 0 R /XYZ 90 610.0651 null] +>> endobj +2484 0 obj << +/D [2471 0 R /XYZ 90 476.7479 null] +>> endobj +2373 0 obj << +/D [2471 0 R /XYZ 90 450.3624 null] +>> endobj +2485 0 obj << +/D [2471 0 R /XYZ 90 450.3624 null] +>> endobj +2470 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2489 0 obj << +/Length 2005 +/Filter /FlateDecode +>> +stream +x跐蹝鄱钶_岱3k捄X闧$挺i洆/ы烊mk"K>耗輣}耘诸f:灡H@\r)'棻Xn倣{~窵O <鴩呬5糢2v鉖吽磙P(〇垤w'tシZ獲8蔟Gl跨A{琖2rp碁q摈嶲 壘乻FOC嵍47諯j<l憚OQ昧'粛e5 牖y}r絮2瑢8泟碪43*螕3佤\鏘藔R譄 惟虢9XM魜螒s%妷1淝勡'矤缁2釺瞊3S騝O1c疏)a征"燾見R5/)0'摅{瑮鳥Q0尖+* g_s匹8熎2X鼦d浮2o7扨 =珎衧美W gF] 翸"]迩儰乆F iI8Z鰄(镺#R髓&齐爇w驰邹8脲6窽S'M綯yv齷嫇颲莘惰髢i褩o$泗q鉣(乚庱昛a髡B帼7o灰fsq1掠q4Fx&巣汨Y嶤嚼灼褎/30跰$稊飃"夞_掆.G覂q養魡+i難A艏&zdPB^蓘櫳j盲湩麼DWh礹(苫ぬl傣u悪A狢 噒鲃宆孧`饡1茷 (酄;婞∷R躤貮.獼弧#博jο#J}泅$9{呠鴦亽曚腏O5s騟mN4y葶l9%囄~tJl皻3鬽f-蔃谴胕Ic鲂/FSN=煨樰濾昶=踅绪製殏噀1X'擃殲+S 觚5:澈.嗢蔂r诶彎\鋝MK3湜 + }鯹Ql9绽@`跁釬⺗颌犙嶻pQ壔竱 桸1憓 :)梓Z澩u綅>'5Td孝厑儹HY籲獗]#Hu仟+2Z1繰桡伝撗L哧剄L賒$厼qFm^2‖L:鯤;D8韴耡=k3S氾 ;胭H阵#O褃H<04'. 鬁%MA燅迠;f`姝8鮷茗=,+Q紊cQ%贅7娆槼嚋g醾-猎|茾>碞g8甶#LCg嫎B[镗痯灪S竂猗iuT0裒‵澤Ca> endobj +2493 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 503.0404 171.8124 513.9444] +/Subtype /Link +/A << /S /GoTo /D (a00134) >> +>> endobj +2495 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 420.2854 201.2321 431.1893] +/Subtype /Link +/A << /S /GoTo /D (a00154_gb4b17aaf20d630f30919b19937b966a3) >> +>> endobj +2490 0 obj << +/D [2488 0 R /XYZ 90 757.9346 null] +>> endobj +1776 0 obj << +/D [2488 0 R /XYZ 90 739.9346 null] +>> endobj +130 0 obj << +/D [2488 0 R /XYZ 90 739.9346 null] +>> endobj +2491 0 obj << +/D [2488 0 R /XYZ 90 716.7484 null] +>> endobj +2492 0 obj << +/D [2488 0 R /XYZ 90 521.9904 null] +>> endobj +2494 0 obj << +/D [2488 0 R /XYZ 90 439.2353 null] +>> endobj +2496 0 obj << +/D [2488 0 R /XYZ 90 382.9653 null] +>> endobj +2497 0 obj << +/D [2488 0 R /XYZ 90 356.4803 null] +>> endobj +2498 0 obj << +/D [2488 0 R /XYZ 90 356.4803 null] +>> endobj +2487 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2501 0 obj << +/Length 1890 +/Filter /FlateDecode +>> +stream +x诃Z[o6~鳢06牥恬N1&mSち指谻[幁;充fE綜墧)K"US溲;$E 1鼞∑C%覍酸鈇圇旋z@祓'纠恿oj%暶閉$(∶轵鉎泷&X嵫狎Oh +<"棈w诲a摉眢葩饜n髖巨m菬 +讱%$鯚燎蟲筠0b:'咐坔MN櫥 nUz蕘鈫6a眍帬:(斧J$"|万 J压 蔝斱1告j灍 ?钪[埙碕}蚭槫Beka诖s缝y<歔琍GQ1(D栨+(e&J!哢9六 P#!枅硠癘攰S,侻 Fb咐~崶<苚2袆P}妉嗹鱒娼o儞徺行[dn乂 8GJs鰸篓1|丬梚墦B驵墣1蓭&B$`厜0痓a%Q3g%P蕵氚I"B亙剋% &b剅bqBy +C +鉜劒酕UC頒ò %&儆:_琙x)SH D (Ck銜3朸旱覜珚~7僚V^纺 熐D孷煱鲤Ol?h7載 +佸O!+ 硊 +摰嫆誛 k讘祹&kY#64鬦参椝齠~沶&8 A蚯櫟/L豃歆囤F䌷Ux_^竐|sH砡祛2澝偏丿訟婲^s艕話 ']m軓6g跀.)"q鰈[莒F9'軪 剨膲艐$勮I*髯ヵ垂FKえ"'噍u怃cf43f倡棾浛/咛尢fP睾)*U$躂脓1虪え奺葔3) e(孾e惹響x 呁h-6I/g椬椨 O楤$8tC[9 測+^{鶅煼(羽$ $/ @%%@馠#@ 7N:xD蘦璧xq筢軪81嚉L抪 *xS[ 郔7:罵d﹒諪 x湫夘~荔B詐bqj=j剄+j=≦顲嵃 綎7-SEDp 搳!7碋XT./f崇pa撪N~x!~88?B?赂?|侘酖貙哵藦嬰蠖x繧艕赯-醾"湪顋荂槎R駆嗉dA玕{=R#魃t袉S瓆A攉-B鱐Wt羹pu諙v仡性漺O 攛'蟶袺}肥綇#5>浹雄s妬稥7嫡I袙l*0懲%蹓艙B魭骗掜泠Hv 糘裁f4赧Y魞8.鷄鋯稏r_頹?3帕 ">"屲兄榎N&篟斫a殠}}L楅])w?継昘A#?"笌5芗舫瑣6[遫輖`囤眢鎧怈]KrbS'm*鶊uM藉!飕iekxG匶╄ q猚 H%蠔0敪0n-窎/c奊坏}G 飭S探u 到pQ傝k凰呱庆n桧剩9A楁p</m吚奾BZ砿^)鷪 Cuf壌2颼)枉"娎瘨卥m簾绉g栾\悱y髎勞_|F颠薖尌=NS1rl4?>麟}邙溒|玮L螈嘞援endstream +endobj +2500 0 obj << +/Type /Page +/Contents 2501 0 R +/Resources 2499 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2425 0 R +/Annots [ 2505 0 R 2506 0 R 2507 0 R 2510 0 R 2512 0 R 2514 0 R 2516 0 R 2518 0 R 2519 0 R 2520 0 R 2521 0 R 2522 0 R 2525 0 R 2527 0 R ] +>> endobj +2505 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 576.2119 145.7904 585.0586] +/Subtype /Link +/A << /S /GoTo /D (a00125) >> +>> endobj +2506 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 537.3577 175.12 546.2043] +/Subtype /Link +/A << /S /GoTo /D (a00124) >> +>> endobj +2507 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 498.5034 190.0538 507.35] +/Subtype /Link +/A << /S /GoTo /D (a00123) >> +>> endobj +2510 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 414.6673 235.723 424.595] +/Subtype /Link +/A << /S /GoTo /D (a00155_g44311ecc30759ca38b4069182247bdae) >> +>> endobj +2512 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 401.1132 185.352 411.6435] +/Subtype /Link +/A << /S /GoTo /D (a00155_g2c1bb4fa6d7a6ff951a41c73fc721109) >> +>> endobj +2514 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 388.1618 205.845 398.6921] +/Subtype /Link +/A << /S /GoTo /D (a00155_g1ec8b8f4710dce1fa7fb87d3a31541ae) >> +>> endobj +2516 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 375.2103 183.1503 385.7407] +/Subtype /Link +/A << /S /GoTo /D (a00155_gd8eec328a4868d767f0c00c8d1c6cfc1) >> +>> endobj +2518 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 362.2589 185.91 372.7892] +/Subtype /Link +/A << /S /GoTo /D (a00155_gca51ceb2f5d855dfde55bcedf8d3b92d) >> +>> endobj +2519 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 349.3075 185.352 359.8378] +/Subtype /Link +/A << /S /GoTo /D (a00155_g2c1bb4fa6d7a6ff951a41c73fc721109) >> +>> endobj +2520 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 336.356 205.845 346.8864] +/Subtype /Link +/A << /S /GoTo /D (a00155_g1ec8b8f4710dce1fa7fb87d3a31541ae) >> +>> endobj +2521 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 323.4046 183.1503 333.9349] +/Subtype /Link +/A << /S /GoTo /D (a00155_gd8eec328a4868d767f0c00c8d1c6cfc1) >> +>> endobj +2522 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 310.4532 185.91 320.9835] +/Subtype /Link +/A << /S /GoTo /D (a00155_gca51ceb2f5d855dfde55bcedf8d3b92d) >> +>> endobj +2525 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.1599 253.2274 224.0961 264.1313] +/Subtype /Link +/A << /S /GoTo /D (a00155_g3983e0c026396d5c4506779d770007ba) >> +>> endobj +2527 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.7556 240.276 190.6918 251.1799] +/Subtype /Link +/A << /S /GoTo /D (a00155_g2bdc4b7b4038454a79f1b2a94a6d2a98) >> +>> endobj +2502 0 obj << +/D [2500 0 R /XYZ 90 757.9346 null] +>> endobj +1165 0 obj << +/D [2500 0 R /XYZ 90 739.9346 null] +>> endobj +134 0 obj << +/D [2500 0 R /XYZ 90 739.9346 null] +>> endobj +2503 0 obj << +/D [2500 0 R /XYZ 90 719.4886 null] +>> endobj +2504 0 obj << +/D [2500 0 R /XYZ 90 593.1046 null] +>> endobj +2508 0 obj << +/D [2500 0 R /XYZ 90 432.641 null] +>> endobj +2509 0 obj << +/D [2500 0 R /XYZ 90 432.641 null] +>> endobj +2511 0 obj << +/D [2500 0 R /XYZ 90 418.6523 null] +>> endobj +2513 0 obj << +/D [2500 0 R /XYZ 90 405.0983 null] +>> endobj +2515 0 obj << +/D [2500 0 R /XYZ 90 392.1468 null] +>> endobj +2517 0 obj << +/D [2500 0 R /XYZ 90 379.1954 null] +>> endobj +2523 0 obj << +/D [2500 0 R /XYZ 90 269.8939 null] +>> endobj +2524 0 obj << +/D [2500 0 R /XYZ 90 269.8939 null] +>> endobj +2526 0 obj << +/D [2500 0 R /XYZ 90 257.2125 null] +>> endobj +2499 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2530 0 obj << +/Length 1914 +/Filter /FlateDecode +>> +stream +x诃Y蹘6}鱓y瞾,他%}j籑-赿邟 Pl鞿/[Y&!E褦d + Gg"檆鴳沽s%2屗鵭7皿更jF~經挌笰FR9炕w$A:縖縚HD尿 +几[建ve轂nuQ]~納3鐒!'C煺亠w帘廗0Ig?怡鈡3脠- F:咄8e萆v鰊鰓坝辮\ 祢Gp卾0^弿``k #劤Yd2谸腫-洟跂胫萴y\照cS鲛嫆 vˊ扝犰躮J麛\4]"D岙?謬%嫥j]圹鳔?秬麅靀6Mxn显.齳*鲭讻>遬~怇!強尞6尻郢E砮* +F)巑.J麠仟.(挃3黣哜娗莔*\诬呡樨碐蟰毗Tl穇煹.Ⅵ 锂L{)/瀕(槦=~Syt骺?x冯棉?V湚B[ 朢,#犴Hlpx嵠泟u冠礳㳠峁!鉈訦JI淂磈b砪6)([啀}著vV=6(w9謁宾7?[㱮鉤5>獇印G柭mb -稅レsⅤ&|鷅バa⒄\((5鋌漺牄52mY =塔<4鍕)R寬篡亨7~+gk珀6隃jU7湝幃-爟)H槨"捶弝饳X莢mm囻H(3&澅蔈‖渏訌ⅴ朲焓鈞臁 d褛拆iIA兌>s峭岽]非燒乔rU}罉桛F?з翧Q{翵喐糘Xx7^裖-垘颲億)S呩糰E銌c榖yk%L 3&7@s }m&梄(g殶鞽g(c雒ST按莯戍祵翽駗繍韴談:P3魘曊煁ad矾:決 B#9I`葊%M簮/7\)D9!T佺B曑 +VF虊 尺嬝 藈0 牺-範 \JD5戦}夹(磧4@Дr措`y贓S碖 措挟鐈 +硪1岇鰅歜j_P*p廔N繒v f+罼巚l +愍葶盾曽苪g组F R哋 4B噯,欯9 +穜y[4E;漥鄯_TP&竇绅玊 *X柺I廹*g黺T铢-鄨>T鲽\ #籫*C惱]蒭zL7挊1 h掅p囮z锂鸰B畫"兊椘擫$B_f)叾*ホI=,唐搐0z]`{ Rv,'S钗擫;;}瞜狢S绖埦#=<滦j嚆'X軒b喴⒂冿@闲搑M麨?`/W$匲N~Y絑帞B 樋SC爲W(呷+愞p-C庆买^&摊>涚Qs迄莎カ╥$択 源栍3F'"纋岋JR1Y2`i"`椋煲 s燺ξ;X拘#儵JO 讂削攂OG1瞷.w5k\鹌U& *鏭SX26H'续IMΖ!3q岉^/{鱁R雝j旄_鴮!┩恾壥>6&骗C&N1:Qf菘u滂泂G鸰誰w徟畬ォ豝-3< +!錙$tX"﨨}秉,[罝鵪黺暹鬀-撅 鍩塨d稺u(x7殌4в小rh羖慆 S饳8苬牋 凬' 犉J─&`略嶂ztD钄t0/W%嗑^r8靻燅Nu絛j嬠鰝 觅J; 侢B3羱孈@髤ナ-N,/懥擛亪T 軷5理um桊Fv馅黻岝f4[$xP.弧赖>0僻"3q岉&訟 B9I?犉隊悇 鸾 珘鈖Т粒墚痞\賶l癱X$"诓稿揝嗸蘸剄M&=d宐|qC謭蒴麨=r!逊?X篒d虞8磥\耽軛u裻莓萘'B/({Aq{抆]硎钹髕z龡G#苓==|P顕鴀hQ~H9糴ndstream +endobj +2529 0 obj << +/Type /Page +/Contents 2530 0 R +/Resources 2528 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2549 0 R +/Annots [ 2534 0 R 2536 0 R 2537 0 R 2539 0 R 2541 0 R 2542 0 R 2543 0 R 2544 0 R 2545 0 R 2546 0 R 2547 0 R 2548 0 R ] +>> endobj +2534 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [213.9242 571.076 269.2362 594.0447] +/Subtype /Link +/A << /S /GoTo /D (a00157) >> +>> endobj +2536 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 493.9051 159.0804 502.7518] +/Subtype /Link +/A << /S /GoTo /D (a00130) >> +>> endobj +2537 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 449.4179 158.5224 458.2645] +/Subtype /Link +/A << /S /GoTo /D (a00129) >> +>> endobj +2539 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 353.4255 161.5608 362.2722] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2541 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 255.7495 172.9881 266.2798] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) >> +>> endobj +2542 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.4309 255.7495 224.4542 266.2798] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2543 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 211.2623 180.7289 221.7926] +/Subtype /Link +/A << /S /GoTo /D (a00156_gedaf3e48c2b04229b85455fb948468d6) >> +>> endobj +2544 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.1718 211.2623 232.195 221.7926] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2545 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 166.7751 186.816 177.3054] +/Subtype /Link +/A << /S /GoTo /D (a00156_gcb807bd57e5489b386b876af5c1f163a) >> +>> endobj +2546 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.2588 166.7751 238.2821 177.3054] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2547 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.9214 121.9143 184.6543 132.8182] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6d71dececfce707c668e6257aad5906e) >> +>> endobj +2548 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [213.0971 121.9143 236.1204 132.8182] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2531 0 obj << +/D [2529 0 R /XYZ 90 757.9346 null] +>> endobj +2532 0 obj << +/D [2529 0 R /XYZ 90 739.9346 null] +>> endobj +138 0 obj << +/D [2529 0 R /XYZ 90 739.9346 null] +>> endobj +2533 0 obj << +/D [2529 0 R /XYZ 90 715.481 null] +>> endobj +2535 0 obj << +/D [2529 0 R /XYZ 90 513.6142 null] +>> endobj +2538 0 obj << +/D [2529 0 R /XYZ 90 373.1347 null] +>> endobj +2540 0 obj << +/D [2529 0 R /XYZ 90 277.1423 null] +>> endobj +2528 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2557 0 obj << +/Length 2012 +/Filter /FlateDecode +>> +stream +x诘ZK撣6 钧W鴋螪,"橻_43椁浗宑踊歺%W柍I}A懺媧d696? %k 蒢愕i朴觜a呑w痼裼 ']繭帆^P街H4]k )A壕=价h篗o絹±偘.讚q鉥婟趿湔妡慝寨穽^o朻)盳^禁 `瞢FL+眫/鷄) _N?9n0;A伉AZ鯣a灰m/ED "o^\髛mWR譣I坸YY^91U鯼树骟9+稤m塘'鳵曌}5teI% 擱V鞮y!7滿x遗莙崵Z沰")C樿t`览 *諯xWo* 橏1s.叏碻8;跢\N慙叼 至$D $!<|o濍常u鋯骰-2s@V 6慲?绲篡#徑湬胎簗復隣4盏= 材猜K8n O罅淢~闰;忩芼翑 漯鮽唩?a)慠8?J酣8綌FRi1d禇拊f柣S欜騶IF扫! :钉桟K$ &泎 F\冰腥婊)G噤髷尘濗攤馃鳓 6Q霘竧@3a vG崞&桵絴&&s痕PD寿X$*饺LY衫撉錂P朗1粯伸什槰b;╥7奣"姤畐螂巛鸣d鎩8#瓲P鈪贽鴓穆q_5駊?镅>2)膲70iPK#iV醭H)訸 擭<鄺訥r瓃3u拠]枱娾剒哛傎Bx遗荅 捼ぷ{pA8tQ!偓d杭1肂P 6豗HK7"Dm%*8跒n_じ_樃埔eLM舳P罷].J鰢~l鞌M;!2斿a}籮 围匌泶圾綖%淵跭s,J +l嗸N]鶚澕U鮞Z肂陠龉)=24躏C(竻5匹X_1)鹔3覍镑p +繹M糈琁毲$栨uQ4徚@4}R3f s,ob豯3基7?谀鬞>狈雂t8&Z.j&:侫U鲿舡6@7\gF摍xl(o`mi硻 Ud懺"然ywaD 诚9T亨S"P.鴶(鯐峂W梓3瞤軡-$l9kx覡L姤-衶畝蕣■i餕vDr繊轈2A证A-XK胄{獋惂襸趴呡砆v抶禠鈑薨D9E忻Z>S胁-'#4>;筘矚蕋`B{T瑇@[竨z咔 +X奦峯?F鋸e0樰_K葨猻髤磇W涎z呕均诧鐅#CO腠彽 0鸫FZ_冴鉧6 i紼帷W1 境~鉞%^餓w寥駨鋨%'pa镰7'b礰g ).Y邎.'3&炠麉=坞鴔S%j摾++歮玣盾4U-彾Te哔P僮.GI逍Dみ鯍浸#h2a絅,EZ谇qP),)mL{irS瞠*3ふ0xe5k'~N賡瀫b渾淭4o;?<%饥武cGf腒)*endstream +endobj +2556 0 obj << +/Type /Page +/Contents 2557 0 R +/Resources 2555 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2549 0 R +/Annots [ 2561 0 R 2562 0 R 2563 0 R 2564 0 R 2566 0 R 2567 0 R 2568 0 R 2569 0 R 2570 0 R 2572 0 R 2573 0 R 2574 0 R ] +>> endobj +2561 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [238.7907 702.6042 264.0158 713.4833] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2562 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 552.0997 139.4144 575.0684] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +2563 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 552.0997 262.94 575.0684] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2564 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.8054 552.0997 416.0743 575.0684] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +2566 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [233.7 476.8541 258.9251 487.4443] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2567 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [389.5998 434.4572 435.3076 445.3612] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) >> +>> endobj +2568 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 339.0297 166.2529 361.6249] +/Subtype /Link +/A << /S /GoTo /D (a00156_gcb807bd57e5489b386b876af5c1f163a) >> +>> endobj +2569 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 302.8975 227.254 325.8663] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2570 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 302.8975 380.3883 325.8663] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +2572 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [241.9988 227.652 267.2239 238.2422] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2573 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.3063 185.2551 432.0141 196.159] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) >> +>> endobj +2574 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [460.5476 139.225 513.9963 162.1938] +/Subtype /Link +/A << /S /GoTo /D (a00156_gedaf3e48c2b04229b85455fb948468d6) >> +>> endobj +2558 0 obj << +/D [2556 0 R /XYZ 90 757.9346 null] +>> endobj +2559 0 obj << +/D [2556 0 R /XYZ 90 739.9346 null] +>> endobj +2554 0 obj << +/D [2556 0 R /XYZ 90 723.1038 null] +>> endobj +2560 0 obj << +/D [2556 0 R /XYZ 90 723.1038 null] +>> endobj +2552 0 obj << +/D [2556 0 R /XYZ 264.324 511.5135 null] +>> endobj +2565 0 obj << +/D [2556 0 R /XYZ 90 495.425 null] +>> endobj +2553 0 obj << +/D [2556 0 R /XYZ 208.4343 262.3114 null] +>> endobj +2571 0 obj << +/D [2556 0 R /XYZ 90 246.5665 null] +>> endobj +2555 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2577 0 obj << +/Length 1169 +/Filter /FlateDecode +>> +stream +x诮W蹘6}鱓柩"喢o-]燖汋[,6j[,gw綜憭u硿l,妵3gf巻$DAdhぅ& 3=汶O31吻m蜡速槈 1姪h供,( 嫋氙sE@.b&閨箑d烅m釃混〩嫹坯鍈$实@'n嶀铐煦瞦xI过{鲺;嵵蕊~F 7墝^p@ 芒齃0^v硣贌?Q- O0 -臷E%扨H4f恖<!儕4青4Uh助鹩)侩 嬟桘䥇郎{S<嚛/-朄5牙M蔻汆樸Y築=鰀薿TR鼉Yi(&善  2u搙7J!+滁2V致9!啉_穌&R紊奣"C閭& _/vc {X贀钳v疓藩鴀饆X麌See玏i刺 繅Z騽斠鶑 胠茛鯃iKz*嬻1E(K扝 N45霧|躛0斿衝SaS zznPC区插X裍䦷_艡 V錒岂3QF阑~撠敂I聮霵阝G1捅yI瑓逽k朮'\刪瓴 v+魊洝8纜s>休瓤e篌僧龥2骺昹蹸摞v昀浖L匛^FYpRnmXx.蠀%媂帞l廞O匩QB憿XM. U6絗韃簮]溈陈"a勲=V@法T熪!:T^瞉4C脇 @ .樐OKw绱瑳P~媠蓣7eV%溉堞祩&齢 }袏M颮m怎]J*A冿崯]薐卌嬘祄 +F w=d淫@泹▉5_9P">|  境鱝貜.8鎁楄瞇倡壛沣g╒>.ītT縪us變厹v\幓I[4撬:n侠胲縴藏{靧I_攟邯d鼮堚牕曑FM(k/昑?睛蜰hx蕌u猕5d8z詊`庘z:jX覄H 陽雭5縮鰸廪虓=ё#奋禚為擰(蕨賏楃区%+穛Z罜1傔PK兒Aih璾杙g揪鲃搫傼僭4鳾<v'S摕笋靍T咭K兒羓h捅蚯<熘F鹁$v溩犏荒粔校}揊#簒V7飈膴蛽H竝?賰-堊9~竪9苞Bt区(U㱮悴憞~|s@|z罂蜃穏;8驣糾庝noendstream +endobj +2576 0 obj << +/Type /Page +/Contents 2577 0 R +/Resources 2575 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2549 0 R +/Annots [ 2579 0 R 2581 0 R 2582 0 R 2583 0 R 2584 0 R 2585 0 R ] +>> endobj +2579 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 718.3357 160.1659 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00156_gedaf3e48c2b04229b85455fb948468d6) >> +>> endobj +2581 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [225.0325 640.9795 250.2576 651.5696] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2582 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [431.0264 598.5826 495.3943 609.4865] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6d71dececfce707c668e6257aad5906e) >> +>> endobj +2583 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 495.4786 139.4144 518.4473] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +2584 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 495.4786 262.94 518.4473] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2585 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.8054 495.4786 416.0743 518.4473] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +2578 0 obj << +/D [2576 0 R /XYZ 90 757.9346 null] +>> endobj +2551 0 obj << +/D [2576 0 R /XYZ 229.1564 675.9038 null] +>> endobj +2580 0 obj << +/D [2576 0 R /XYZ 90 659.5503 null] +>> endobj +2575 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2588 0 obj << +/Length 1530 +/Filter /FlateDecode +>> +stream +x讠XKs6倦Wpi&B醄k'櫎M悠%MA1⿸T髯wA_"誸t鼯 `鴳@鉆 42堶 |伹絾麟6嘧慌席4覓枢n[I Jhp幅冈|郸!Vxy|'\ +$粙w冁3铤&嫃{摉Q檇殛筝叟嘶Fom朻扻/>~屏蘽焕堥P哙#5 N櫩-n5r軏陜1a泐庎 觜QpW9$"r&沐.嫙3IZ殀牌:$$@$ R烁1e旍苔帀)<9鴪 謯磿c硪N屋c筛o菉啷蹬=*獒#S~3&={閫|"RH%愒+鯱苵h诺怜膏=实帟赊湮朷驉G鵶0R挀=届6+c +v瓐襇/p嘳Tn硘镱妰墦O觴悈1峬R>X"雬蚟環M挃捛(}秊玄3秳<}8waⅧq替1猠 S淢7兇h)D E垹捹LHr/K7g蠥冈={z閚P3V +1顓L氡m*2Kw项Y鏳E柵誮袜洡蚊轉1鳠貾 窹!蟅D,&熛萢鱍済/埽脒達v慨<&掖&痨鲥觖?nj芊悄&蝦瓣惀O摤鏞a馓桯董=ヱ\珅閑2揚Bc啋&覂謒詐 5聵A锢厹釜5祔旬犬 @R?G:$.O癇01ff沶 畞U孼1睖%>懚儽p:^ j4`瓍2!$锤z1ダ溼+G榪zvW寉-g!?杀 +?Q*9眐詼^X5柌黹@9桯QEz氏'葶缣鹊f:t%7Xb〡繪=""磎O'g簫 殏蝶輏!k坡+ ,0k/2杨V+~蒊襛遨幍鵷j禛鏉y僑岎 }i∏9冐1Uc鐐 y幏o`熢x怿宆像庌6鋂>iBDO鱵妠鼫怪妀岛ORX啁v(]娙x詼v+Ei/鯴`&菣D z阙鑹阨`謷7樲&瞁恶垅巴_L讽汓磁盗凚9~炛喟I槪祰陀%p娭觶Z孵:Br?扈?Om彑砫 穔蔂wf鐔p: jF;点a(z/6 +_0囱詎`謷爪靤鷺籈!-l`稑/躇P働鑖讦醮3' f3o摉rj麽哆瀡楫颱.]畇<欙O輒b3R恂溾m怯] w踘康/炽n<鉮Yl髄邠箯捲鷂=b崯苕崸A5W鴗vzC+ 邁0 沆07郳殔軘<-δ鞣QO蘎v嗓 猼r杍N蟁j ㈨ +齼底謒Z湡&7酰3R隢桁L?鯏OF—捷{'%鶀湛P岍嗗2仕藁R*L@c'瓼喜0婬!譨h钓囸 a濐)慥0= +趕Oo姭堅銺s蠕冱蝊嫉񇑝勚鴬+Z燐R宔]+*桛榡x@靸~搣㧏锹黾v$Jh銫4endstream +endobj +2587 0 obj << +/Type /Page +/Contents 2588 0 R +/Resources 2586 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2549 0 R +/Annots [ 2591 0 R 2592 0 R 2593 0 R 2596 0 R 2598 0 R 2599 0 R ] +>> endobj +2591 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [279.6865 672.5415 331.7604 683.4455] +/Subtype /Link +/A << /S /GoTo /D (a00156) >> +>> endobj +2592 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.9692 654.9172 432.0432 665.8211] +/Subtype /Link +/A << /S /GoTo /D (a00156) >> +>> endobj +2593 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 587.7333 161.7601 610.7021] +/Subtype /Link +/A << /S /GoTo /D (a00156) >> +>> endobj +2596 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 531.8574 226.3182 541.7851] +/Subtype /Link +/A << /S /GoTo /D (a00157_ge3ced0551b26c9b99cb45a86f34d100a) >> +>> endobj +2598 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 448.4997 175.7578 459.03] +/Subtype /Link +/A << /S /GoTo /D (a00157_g78ab77b57cf2e00089f0a3a22508524c) >> +>> endobj +2599 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.4252 409.6454 214.6911 420.1757] +/Subtype /Link +/A << /S /GoTo /D (a00157_ge5b7160f2e653725ba5e2024c3cb7bff) >> +>> endobj +2589 0 obj << +/D [2587 0 R /XYZ 90 757.9346 null] +>> endobj +2550 0 obj << +/D [2587 0 R /XYZ 90 739.9346 null] +>> endobj +142 0 obj << +/D [2587 0 R /XYZ 90 739.9346 null] +>> endobj +2590 0 obj << +/D [2587 0 R /XYZ 90 719.4886 null] +>> endobj +2594 0 obj << +/D [2587 0 R /XYZ 90 549.8311 null] +>> endobj +2595 0 obj << +/D [2587 0 R /XYZ 90 549.8311 null] +>> endobj +2597 0 obj << +/D [2587 0 R /XYZ 90 467.076 null] +>> endobj +2600 0 obj << +/D [2587 0 R /XYZ 90 371.9517 null] +>> endobj +2601 0 obj << +/D [2587 0 R /XYZ 90 345.4667 null] +>> endobj +2602 0 obj << +/D [2587 0 R /XYZ 90 345.4667 null] +>> endobj +2603 0 obj << +/D [2587 0 R /XYZ 499.0115 286.0122 null] +>> endobj +2604 0 obj << +/D [2587 0 R /XYZ 90 269.2851 null] +>> endobj +2586 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2607 0 obj << +/Length 2480 +/Filter /FlateDecode +>> +stream +x诃ZYo8~席0/60骝u糅訾^lo$,03( -KI頛鲎o嫈hI柤h聒X珚E芺裴焁%|閳%*W汇 _=灭aХ0旷n僉V KB 匬0-匼=^嘗D洯詜迗x]礥S砭n_gmC3E⺋踗玿隓o~}鴗筢°k乓*弱鳑瀚=堶閱3暷z +蜠捜振&愂u姏麤tth,樢N 5瓰孒u#_=六5鷣VDN癉kC靿詃軗c纪4/=雇歖澘磞UZB3;褹!Ⅲp萡U痏3乸0轫m∽唑}中HZ7/郜~聟.mES蝴B3M;櫠杺ヘ淝糎 4:葭╓Z恺] *d:a<搹u垐2 猝踩蠸u}cC阶:o郜のSUS兡侳U矬捥=RT!) 諦揺e惠坠'臋\哚X0蛆5o置];S瀡高C:唕黙勝漐:0殫F&茬栖'Qz酛砅曬 *珫噒#拐桭虀瞒仰筱K亖c6緋/E舅-1p氈:C^f蚡昋鯧=VUY糛谦響A□瘕j飒蔡v鑓亭xQQ4祗tN 豥悷む,I耙I┫湭-鍳/裻縺矋誧簼5贑潵$!gI<恈愭,f墂癏呩9煼n康溗#4嗷鯽诤矟_8WF坞&詋顿唹] 紒6黎嘯ee9  +梮斾-蜱C麣8QD缪b'砪 &漾近砸lZ4暶ゥ]j砛]`煑 录C[Y烴逦婧墧V@楡?ECp# ~}唬德d"茮阌摊般$穉咹q匆R砅)5#歹Q鉰'N82蠷P澞PV狕煫6{7*朾瀖嚉嚯о媱=5d>邾悶`梔H噸眞繾熞燾R储37僅P乛瘴D0辔7 芥厺4粓 @ 洅7 {虉~銤{ 粉l赟迍泩)椁褗糀Ny凈紸鷡珼淳S0Q澚翢裵7鋧覅7R$鄠"氟d棯铧戹膋k8Б}嫏藀礋P鯜}j玳TRS.*"*G滎 }冦MVB]驦潁讦4廈W橉p啼x刧 +壵 hkH娗糹 穳"平㖞R謬馋 岻! 怢_3驰q?B妉殽z 璜FP膾>8荛兠>8i 酕抶: T-揺槦曀h<カQ睞)F'k.坋Abr<& +y疆O4俈昃氣 Wm_ tp氅8譚塘襵Mt瑧z664i 慸:*P愑礣u縛滫苩MMt黠杺I艓斂U?|见孏9倖鈳G<+"g眾Сm=訢r澬"閔GAK竽O炔4UH? 琏鹺葝7鳷苹 鷅Jb^鱰+裔<蠀琔璙冧l>Wpmj)vv偦d'<嘎咮饦疟寳猦囘 &*蒉c>钺扥(d63jI5攤M= +lE靐寧鸆^尟 _)-權牝媿槳%B8栝NJ=產皓B珁j壇X隆?缢,g務愺E阻餕2岃欿;寗{S筅k怕X>肔X*b"皞騋$姐h緜;W.濔f婎ㄍ(l駆U膞萾U8m ,魵嶗椾丷孖晥+咓休僘锾鄝2憣!U欠t緜$鱩}诘'髄6樨2LX! .9榪惰爻{荿嚯麑oc;v麓3鉁髮c[鼟 #簼cFw郄(9%C%.飴聏iolyo<俿{3戏燂肄渜緁o鎒秧鰂渞犉 rf曌p侢搸  稆g:雝剥]晜-l望4复OΚ嬞GBN月COg憖閐Q錾0晸镕D +7阋>`匹;丌K蟫靅z伅s3赱MG虄怑2鏃节釛秧幌w鉰O酳G2o道}L=D嶚B綱(翋钆‵焻,PK孏詯駑饵豆钴OP|z⑸昅^媗 !夢u1椋g2KCy锸煀A)y f\ )猩i幇酸4噝﹍頯酸 鱵綸耕|3孀匊#簘笡涼鴒$鮽y+t鯿jv[G<怪~Q!菟@$T笭篊-1Q唱_巀 B^v.r 剕镯3唙炯磧肾@誄j_ +蝌,螓粉KZA廊PG–墵倄閌'詒淸軀旝牂8.G赶鰥鵀`@硰睇無nb排溾f栵愐鍫VLQx澪z烑嫣 8hg誹榶J蘖嵪衈橙施莀抸B +珼Hy淇寜*峥&珢%緈>鵅2@w+鴽k|路嚀i奎漈$<碮 斒>]衞0网鈓跚踫V蛢?铏跋]劍Qendstream +endobj +2606 0 obj << +/Type /Page +/Contents 2607 0 R +/Resources 2605 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2549 0 R +/Annots [ 2610 0 R 2611 0 R 2612 0 R 2613 0 R 2615 0 R 2617 0 R 2618 0 R 2620 0 R 2621 0 R 2622 0 R 2623 0 R 2624 0 R 2625 0 R ] +>> endobj +2610 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.6232 595.7581 261.9762 606.662] +/Subtype /Link +/A << /S /GoTo /D (a00142) >> +>> endobj +2611 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [471.5956 429.6401 513.9963 440.544] +/Subtype /Link +/A << /S /GoTo /D (a00158_g84901a5aa60040e96d272a69977edd22) >> +>> endobj +2612 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 417.6849 128.067 428.5888] +/Subtype /Link +/A << /S /GoTo /D (a00158_g84901a5aa60040e96d272a69977edd22) >> +>> endobj +2613 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [208.8032 405.7297 277.2062 416.6337] +/Subtype /Link +/A << /S /GoTo /D (a00158_gfa11b2a1faf395ae2a6626e01c482d5d) >> +>> endobj +2615 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 348.9505 161.8402 359.8544] +/Subtype /Link +/A << /S /GoTo /D (a00127) >> +>> endobj +2617 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 266.3068 181.8351 277.2107] +/Subtype /Link +/A << /S /GoTo /D (a00083) >> +>> endobj +2618 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 253.3937 163.7728 264.2977] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2620 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 170.75 204.7292 181.6539] +/Subtype /Link +/A << /S /GoTo /D (a00158_g26ae707402e494f3895a9f012a93ea29) >> +>> endobj +2621 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [206.0542 170.75 231.2894 181.6539] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2622 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 131.9725 215.2497 142.8764] +/Subtype /Link +/A << /S /GoTo /D (a00158_g84901a5aa60040e96d272a69977edd22) >> +>> endobj +2623 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [216.5747 131.9725 241.8099 142.8764] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2624 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 93.195 210.8263 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00158_g70d236d1cf34b4e21836edda60247b70) >> +>> endobj +2625 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.1513 93.195 237.3865 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2608 0 obj << +/D [2606 0 R /XYZ 90 757.9346 null] +>> endobj +656 0 obj << +/D [2606 0 R /XYZ 90 739.9346 null] +>> endobj +146 0 obj << +/D [2606 0 R /XYZ 90 739.9346 null] +>> endobj +2609 0 obj << +/D [2606 0 R /XYZ 90 716.7484 null] +>> endobj +2614 0 obj << +/D [2606 0 R /XYZ 90 367.862 null] +>> endobj +2616 0 obj << +/D [2606 0 R /XYZ 90 285.2183 null] +>> endobj +2619 0 obj << +/D [2606 0 R /XYZ 90 189.6616 null] +>> endobj +2605 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2632 0 obj << +/Length 2761 +/Filter /FlateDecode +>> +stream +x诘[飶6頻犓7﹡K矝\r&冯"碋鄕祷F絭j薓筮逷iJ8贻p7R汸鴱M +:1蕫BH=Y>炑=~u期猁饇~鲚K^L +Rh'蠡欰38銚O覤衔攻哊肎E墟圹煤l>_l棁莚S-v3鹐靣t郯斝泰鲇/tr 峤9VM纠敯⑧撉3蓞c}vs鲲烙|Q嘣$U +;9绂OJ缹4噟p结!奛,黒K_RS貕G箿軘涆f苑媕A跆喠o檂0('6Q>kT@浅&⒊凄[)瑴構骻蜺鼕+1 O$a篖拏j菡饵橰)q〾釂跄軼畸s囜馲 泯突鷛syu耨f~輳 Aㄥ&焾B"H訇@Mu酺Av奇 嘌.傁蜃$U-瘤{&湴9醥冹$ YD淧8鑼U誆笙姘^焀孱q礩T錷s倒15t扯P鳏峦l型Z[$垱 usL榪3㈦蒈雅蒈醘$寗麒鎃梂椬蟜尡閨旗糨um痄 +7俋楫匼^ + (e4穛cS餳}轆s JE~懝锼M筟T圯LRl眘у>kz%罥t漪0+榮388Q7熅嘚A;l杣右翦b +仟. +視}f灕(J攭秤E撩稷鎶B^7匵wDQ鑸) +0辌Qx聆萃ebE 焻B銼读,裋郾 x4>镳.溭B"C(L8ak>lpα敳i3竾9腠眷给3!5軻[H葘娱3F乒癡`L?塹4歓70愿1a聘埉7nG7nW|剄0蓿q/焆W詸/棓0)F鲞1:gq带缰咣渭\.W瞠鮇癀脎M琝嫿a矯蘆$沴 +z m屄填a纲#聹袤毫毂硍那=F聓4麉[鷈y!ο轣^ヶ矰rI ($殧mxFg;6庨鱕3瀲觛〢祈Q榥聠舞f倘n?杺阛Q祴衽>达翷KgW勖~9^鷂 :烩I鎧 m奱 脬 L槺?㈦磉雅磉a$寗鱤紴'梷蘵> 叏僾嚧ZNG?嘌脦w74啡= +N0荎-|d30賩`73靮愱鞯恬4M紕婺H5;";霂0vG|尡骯$冀澋遇v;熜蹑SPH )蹱!ZM哓,<A焪剞簚芠id 'lń&i澇穱淼逓y榫KS刐4{wc)烛^"耚i入喴霂( 1!F往'詈Q" +Z鋝P坸6<饭%?嘌)C嗩Q榩聠a-x傏q5!FgjB9鯆r筤碷z邹酕檕夗1D&特氧讹桠讹姀=F聓待斟嘾?粹捂$蟊$\盟|E≧jl2 犗沋閮_ +藨亄&湴@Q"榖#婡勎儑驳r~S/芸糇~u控鞻葵 緋籷'D崥鍻S犽辈`X0 D劰2愖 e Q:鈉蔃>寗鱔>湯g細縹{ju 荩樫|H蕱[X誓豑<A焪J〝热[&坨姺涆晎n%[B# +1:W<蘀骯V痖路}糆/填 糺w(硰 蕡(▇拀}崒礏"60枣1a奇埉穣G7ks n靔g]钹X}諷虞;当 薵#爯@R禔+C`苀"嘌&钒V +N丶系睐砷鹹rn\烚铪w*aRR(F&,鄳窼蘖処-wO'gP榩稦呓d2+垜; 圌[楺母b667弲橉止}+爒Q銳 +(L5a髩i&wyu盥p %猵彂0Yj浖沐v(/& ;7浭uW宝憏>H?聱j饫猫u墡韆x壩(篬h0橲瑒岴 +y輥閺砷f耺)0 YP儑';(8C皿窷x礛?篺}]&/彀j嵧煼( +r鲟R蹸艾N=ā膏=蹯5#逋>╝* ═窼倄}3C珇8箘I3s[嬊啚餱66U刃= +N貑V碑JPK$橣.洫剣酻"5ry萼XwbI/墥荟t-铖X 镅庑IrX溩蓑逆0I1, - +寠^r&桩邠cS餒)o9,?|Je{g02~c颃4礴囐尾LCo瓻w枀袮3儖撘閰_+渵橱n''n a-譹酫5k鐥痎_漗iS鲯暅0▉躧儺碵鼀鼉酏訑7s%韰愜噆Q榩轮);'V灋5舞M地7繗江锄`醢 仙6'逫穷剂櫼\述q泎魆避m洀{'n瘁CW,瑟}颩嚄a掃t鈛扣弴}{h箎l瘵价钰蠣V?珄側從_喈D.蛛}7!o葑r冞?8焖鬘亄蜆侚蜕(?轅甮!雟D泮SL4).祘c娀!胱汸 I亲 ~薷綈C沩眶{.剧硭职扪mf\=叨ODe_镉諲A9懃s6Fendstream +endobj +2631 0 obj << +/Type /Page +/Contents 2632 0 R +/Resources 2630 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2549 0 R +/Annots [ 2634 0 R 2635 0 R 2636 0 R 2637 0 R 2638 0 R 2639 0 R 2640 0 R 2641 0 R 2642 0 R 2643 0 R 2644 0 R 2645 0 R 2646 0 R 2647 0 R 2648 0 R 2649 0 R 2650 0 R 2651 0 R 2652 0 R 2653 0 R 2654 0 R 2655 0 R 2657 0 R 2658 0 R 2659 0 R 2660 0 R 2663 0 R 2664 0 R 2665 0 R 2666 0 R 2668 0 R 2669 0 R 2672 0 R ] +>> endobj +2634 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 703.3528 234.079 714.2568] +/Subtype /Link +/A << /S /GoTo /D (a00158_gb0ad55aa96dd1d200cd0fc5a99f6a4f7) >> +>> endobj +2635 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [235.404 703.3528 260.6392 714.2568] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2636 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 665.3872 274.846 676.2911] +/Subtype /Link +/A << /S /GoTo /D (a00158_g10d9a9201cba1a6db623284c475c6cea) >> +>> endobj +2637 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [276.171 665.3872 301.4062 676.2911] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2638 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 627.4215 216.3655 638.3254] +/Subtype /Link +/A << /S /GoTo /D (a00158_g5d56800f82bfc7bbf53bb4a659589812) >> +>> endobj +2639 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [217.6905 627.4215 242.9257 638.3254] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2640 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 589.4558 231.2097 600.3597] +/Subtype /Link +/A << /S /GoTo /D (a00158_gd895ab98c54d9966ff554aa873151751) >> +>> endobj +2641 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [232.5347 589.4558 257.7699 600.3597] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2642 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 551.4901 225.0331 562.394] +/Subtype /Link +/A << /S /GoTo /D (a00158_gb5d9c0becf7cb32d0aaef466839dd92e) >> +>> endobj +2643 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [226.3581 551.4901 251.5933 562.394] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2644 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 513.5244 229.4168 524.4284] +/Subtype /Link +/A << /S /GoTo /D (a00158_g4ab2de595d36e9e55dd61f6ecd139162) >> +>> endobj +2645 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [230.7417 513.5244 255.9769 524.4284] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2646 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 475.5588 207.4989 486.4627] +/Subtype /Link +/A << /S /GoTo /D (a00158_gfa11b2a1faf395ae2a6626e01c482d5d) >> +>> endobj +2647 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [208.8238 475.5588 234.059 486.4627] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2648 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 437.5931 244.0317 448.497] +/Subtype /Link +/A << /S /GoTo /D (a00158_gc7cc1dba1819f7fcdaa9ff9eed5a08f4) >> +>> endobj +2649 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [245.3566 437.5931 270.5918 448.497] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2650 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 399.6274 205.2872 410.5313] +/Subtype /Link +/A << /S /GoTo /D (a00158_g4a264bb64ae706d53f572b1d9e4037a2) >> +>> endobj +2651 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [206.6122 399.6274 231.8474 410.5313] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2652 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 361.6617 232.7343 372.5656] +/Subtype /Link +/A << /S /GoTo /D (a00158_g55ce98ea4d6f22e9d5068b904d4d2447) >> +>> endobj +2653 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [234.0593 361.6617 259.2945 372.5656] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2654 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 323.696 244.4801 334.6] +/Subtype /Link +/A << /S /GoTo /D (a00158_g2ebfe5c8a7f3173714efdf2df74fc392) >> +>> endobj +2655 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [245.805 323.696 271.0402 334.6] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2657 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.8747 285.7303 255.1444 296.6343] +/Subtype /Link +/A << /S /GoTo /D (a00158_ga87ff36af81990e6ffe20d76d5e4606f) >> +>> endobj +2658 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [256.4694 285.7303 281.7046 296.6343] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2659 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [432.9613 285.7303 458.1965 296.6343] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2660 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [474.7532 285.7303 484.4966 296.6343] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +2663 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 217.7672 138.5977 228.6711] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2664 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 217.7672 198.084 228.6711] +/Subtype /Link +/A << /S /GoTo /D (a00158_g3178402dd725776415bf9745e7bf92ba) >> +>> endobj +2665 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [226.5269 217.7672 251.7621 228.6711] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2666 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [257.2416 217.7672 282.4768 228.6711] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2668 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 205.2601 196.7092 216.164] +/Subtype /Link +/A << /S /GoTo /D (a00158_g3b19f65e48079d8105be2a99b5b4b2ae) >> +>> endobj +2669 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [225.1521 205.2601 250.3873 216.164] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2672 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [239.0101 147.2581 265.361 158.1372] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2633 0 obj << +/D [2631 0 R /XYZ 90 757.9346 null] +>> endobj +2656 0 obj << +/D [2631 0 R /XYZ 90 304.3794 null] +>> endobj +2661 0 obj << +/D [2631 0 R /XYZ 90 236.2728 null] +>> endobj +2662 0 obj << +/D [2631 0 R /XYZ 90 236.2728 null] +>> endobj +2667 0 obj << +/D [2631 0 R /XYZ 90 221.7522 null] +>> endobj +2670 0 obj << +/D [2631 0 R /XYZ 90 192.0859 null] +>> endobj +2626 0 obj << +/D [2631 0 R /XYZ 90 167.7577 null] +>> endobj +2671 0 obj << +/D [2631 0 R /XYZ 90 167.7577 null] +>> endobj +2630 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2685 0 obj << +/Length 1701 +/Filter /FlateDecode +>> +stream +x谕YM徾6禁W琛6P1縭K瞡癷歭 +牭祂#矔Jr7K姢,嫈礇鴃<囷2姞鸂H聢S$IX崔蟕t_螑}q奏鵭鲣w,# $,Z4#6 緢1咉玶伳绩嫪X^ 8详<蓋譭Z/b筁鎾/>甞蜄6畢E C:昕a碤館 R需N齹I墸,聊g飃祣虄f@hv V3圖1a@  @堚p"qB0i瞦ョ潠>瞶跓'p俼評x@Zk塲瀽 G劄糺(_2h4=A 8wV4恘pB \RX斟q] +詣蜾w攖FS:1: 憳Es6熛bwP6?曷~o3<+萻玨kT読Yg邢敨&绸r閆 *_ 缤d朹育<,4荷K3軸挹G镂嗜朑! 昋k!nw艌;$5/颌查K僁e犟@1+沮顢"夌鹴]之lwj<襨灘齝(ii"4忩<砯7e7]捷1 倍1阭櫏洲Y躮w雖雀韧 I┥H綶`:o佽<櫂*礗倾L艿fb歱恅酕AC聧H侣輾=L窯硃n? A> 䲟 髦Q墚 +Ky啎<ㄝD请5R?9>T汕B?Z蓕凙%oヤj晐B咦脭<舸扥鑬漋蜓狗J>煮5淞J 齫JN&朁域锼UP喂ZX(e$"搑铎泐獄~囧\ 】X蝚*扮mL握歒瘡掦S7峀塑譣=蝭.(漌滸FnG谝 Z2W蹴繠琄═|难8雟瓎Y梡}烀鳴0②挵j穎S硌,淭跲CP迪鞨& 扅/~啐吺.%c磜 TMR淫j!誸_/鶑h:%"(熲?gwh润;\巍霢梵煶 +靬轿绲+服yv腑风K&99帳-梔%`W+}5複S孏挅裨鷷Y},哆V-*召燫}鯽釶5] *誻Bズ=T世\{t隭俘"湭嵠氮B*(捴>饂匡穉力~-焆胤簂蔸uQ%2榽o{帾捲YM`I樉絨t帴(MZ ω唾崺今蛑訟樾g)鸥rt寙c脘q?}a賞VS嵄淒盟@P3簯顙薅7z_2 )8H 翥襱LQ杘. +傉9#$`&馁禽"鼽+圸U,階+埑 +靬U婕v"[鏸欟> endobj +2687 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 680.7395 162.0093 703.7082] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2688 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 680.7395 210.1583 703.7082] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2690 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [240.6739 621.5426 267.0248 632.4217] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2691 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 495.0915 162.0093 518.0602] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2692 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 495.0915 210.1583 518.0602] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2694 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [270.0136 435.8946 296.3645 446.7737] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2696 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [253.4163 297.3671 279.7672 308.2462] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2697 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [374.6802 255.2592 460.6174 266.1631] +/Subtype /Link +/A << /S /GoTo /D (a00158_gb5d9c0becf7cb32d0aaef466839dd92e) >> +>> endobj +2699 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [227.9319 147.2581 254.2828 158.1372] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2700 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [155.6929 93.195 231.8468 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00158_g84901a5aa60040e96d272a69977edd22) >> +>> endobj +2686 0 obj << +/D [2684 0 R /XYZ 90 757.9346 null] +>> endobj +2675 0 obj << +/D [2684 0 R /XYZ 236.6686 656.6872 null] +>> endobj +2689 0 obj << +/D [2684 0 R /XYZ 90 640.0288 null] +>> endobj +2679 0 obj << +/D [2684 0 R /XYZ 236.6686 471.0392 null] +>> endobj +2693 0 obj << +/D [2684 0 R /XYZ 90 454.3808 null] +>> endobj +2678 0 obj << +/D [2684 0 R /XYZ 236.6686 332.5117 null] +>> endobj +2695 0 obj << +/D [2684 0 R /XYZ 90 315.8533 null] +>> endobj +2680 0 obj << +/D [2684 0 R /XYZ 236.6686 182.4027 null] +>> endobj +2698 0 obj << +/D [2684 0 R /XYZ 90 165.7442 null] +>> endobj +2683 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2704 0 obj << +/Length 2110 +/Filter /FlateDecode +>> +stream +x谡Y輳6鱛a晛氬法煎歮惔椾阐P燱Z[k胛東捾憎走餕朌I轊鹯X`I撁欋p7C,1鼞e倵眻Q赂\n 架琉q觡榑w 傍礼,擧*O唭$HPB踎TG鐆煚+pD稘織垠!除7彐|虋&m虿X饉q餍蕌j &墫鸁暖酷詛坷%J,柯孒捫錻)?孄?Z>v,О3E豶$R$幔TJ LT 啝"韪!T0f2f 瘤贡僻罳Zデ誴S3J梋謂丂憱:篧M嶲L樃r摘滉r5鵺肏 )F暩 +鱐#f`]酟 舃﨩,p軹鏜cO_+cG;C2VZ╙厵%陦圉< 栫k呛 0洱褦;;UeS醏姮ACc枈!蝑<]猧彁$疏{鱃z<睮_ 尝椭9t蜏﹙n阺蟂宧绕<%*畛谩\*mU!1溊瑧<-喖哔肑媘 ZQも 崛o)1洫暔復); "捨镙鹨b岾傛谋寬襾霙 B沽Lk"P嚰p唯皾蛏秡塆]wh廫Tu悶Q陌4$"10幘賈蓭艇麖?孱梬:*刓J +麙V'━_w勸蝓`I聮 +胏騎躗 遱睒p鱵3廍弋剤晡T朝瞭kNDR 穱})9弾棣*mP飿i摴)+:nv栏F@qU牮3漽_/Ⅳp,kOp袖(覌8炿汰 踤殊_鏱泱劫A塸)鈑揿僪'QH&H熍В輵#>鋔2祋~䎬n{鈯悂:C荏T反傅?枑剉~落|B闞M'$9`嫴xs9wLu9潟驿8+卝巉lp@-驅呌旴獃*恉Pi琘 '嫱"V诽姟/纕址*?2⑸x遄=Sbを 0Z遀~.攁r#:TAd砱V~sc1謷M<剄螃i﹏I竨顈即辍IU=馶阵鲱幂缱獶D+ⅱ彑寇遾x3V18W罤糳 p昑8粬~輂zW葁b )(088GsK鑰S遝EVY跂顣齿T岲檿侪愞Z6呜鄞Im柀m瀨裗L|/煄npOcL纾籏5輰'圧羅匃c +锑}犐8薹d厦鸜+\>4(搠鶶 |5%埅壖1O噇<濴kxu住p#!讳B=U(紀Q使 7蟄稻Z D!辙睷噇蜫濴+歏籃,lD"n堳T∝緘P燚S}悲+ ;4鴕#檱<么桜躮I%]鑀蕇受鑉L亷茢涬 +"⑦?s0b5捓货 c+]E洿+% ZwI)矺忶&=.v离8ve +GO堅繘*-阠^+羦K&V7)u⒃@^祆纲崬疖惫灵黧q蜲+*ⅶS◥砹p発v譌分鎧q昺蠜蘉iY#*2m巂滰&砪Y]VRDZ&a 331\/nu5 {钾諾腝z:,oAaC婴秈KN钞籍镯蕱8暬淊.讃猖3Z35楒c鈿郇.甜Jq 艗揫2瀪輂0騸鸾^診橠 辘盵嚶嬘T>貃妳:5&墋Q#簟憔镟烇啶} 3簈k毩b鉗 适啀W佴裶)MLu棡笥p8u@?py巙m(uNU譁煈P:d盼鴬"4V你頹礹峐榋k璞.*颐Ob}Z韠 6ABF灃`饜^,z/锍b澳11U|U7c徜 葫nP +柵茀艙O5酞髖榣貌冫粎绡(韭耒_LH蜃]L攒配輫夌X 瓺 咲涇 +~O绢袕級刮寂28g}S#!u全s q瘼c鍅柱抽'[/絳!y6=篮搋c瑔z喫~橒鱕萃[~n.礛!f9崕缵 =f鄂醘莟薜}% 紹烘蠶.骨紟fi:k?簒;e沑{_VRP^溛M响m侯呪硂30APp>L幞﨎"錈鶥l緋+XBX锒'Q霔<}駞匼襐曨]蹬佦u辦9労竣u)埔F浬'黬䎬馹呄槙?hrrendstream +endobj +2703 0 obj << +/Type /Page +/Contents 2704 0 R +/Resources 2702 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2701 0 R +/Annots [ 2706 0 R 2707 0 R 2709 0 R 2710 0 R 2711 0 R 2712 0 R 2714 0 R 2715 0 R 2717 0 R ] +>> endobj +2706 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 680.2836 162.0093 703.2523] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2707 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 680.2836 210.1583 703.2523] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2709 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [231.2593 620.4508 257.6102 631.3299] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2710 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [109.2077 566.739 186.4774 577.2694] +/Subtype /Link +/A << /S /GoTo /D (a00158_g5d56800f82bfc7bbf53bb4a659589812) >> +>> endobj +2711 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 529.4341 211.653 552.0292] +/Subtype /Link +/A << /S /GoTo /D (a00158_gc7cc1dba1819f7fcdaa9ff9eed5a08f4) >> +>> endobj +2712 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 454.077 135.0008 477.0457] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2714 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.5354 394.2442 327.8863 405.1233] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2715 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.6755 238.611 418.4257 249.5149] +/Subtype /Link +/A << /S /GoTo /D (a00158_g10d9a9201cba1a6db623284c475c6cea) >> +>> endobj +2717 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [228.4897 147.2803 254.8406 158.1595] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2705 0 obj << +/D [2703 0 R /XYZ 90 757.9346 null] +>> endobj +2627 0 obj << +/D [2703 0 R /XYZ 236.6686 655.7754 null] +>> endobj +2708 0 obj << +/D [2703 0 R /XYZ 90 638.937 null] +>> endobj +2674 0 obj << +/D [2703 0 R /XYZ 236.6686 429.5689 null] +>> endobj +2713 0 obj << +/D [2703 0 R /XYZ 90 412.7304 null] +>> endobj +2628 0 obj << +/D [2703 0 R /XYZ 236.6686 182.605 null] +>> endobj +2716 0 obj << +/D [2703 0 R /XYZ 90 165.7665 null] +>> endobj +2702 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2720 0 obj << +/Length 1889 +/Filter /FlateDecode +>> +stream +x阱Z輔6鱛!`/60滁啪礛Zほ,u褔[幗)'薑晨~G墧%QN謬bCQ垨Nw?飛C< 埀'匘妐遊轒皐 愤L坹<囩蠛浪配賙<厰O}o.4 JǚX}烔埲贉 +<教f$槮y篛濬|oo0{樛枈O暁}Y紳/*朻>裋渱䝼纚;翀〡x黟#躅&2#瀨橖Z)/t蛶S榊@7g> +堚漅丂A "D衝G +a踏'CXb^x鉘;搪(彶< 2J胶j RI籋`xDB癉0q元§ 哘 | 鈎躂u竵諐3&儲襁袄<;,2vEN恎 -騟爫杘aV +5L2hVF怰 :&囔騁灇&2O矲B6屝6冁0撖瓃"F詾ud8移`煣唬鬆b/G%ed9证#篚A飑'C}傕"> endobj +2722 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 648.0568 162.0093 671.0255] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2723 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 648.0568 210.1583 671.0255] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2725 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [256.7339 570.3345 283.0848 581.2137] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2726 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [260.0953 528.1725 365.4795 539.0765] +/Subtype /Link +/A << /S /GoTo /D (a00158_g2ebfe5c8a7f3173714efdf2df74fc392) >> +>> endobj +2728 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [259.9318 418.3349 286.2827 429.2141] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2729 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 364.5914 154.6371 375.1217] +/Subtype /Link +/A << /S /GoTo /D (a00158_g26ae707402e494f3895a9f012a93ea29) >> +>> endobj +2731 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [254.3228 266.7089 280.6737 277.588] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2732 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 212.5917 154.6371 223.4957] +/Subtype /Link +/A << /S /GoTo /D (a00158_g26ae707402e494f3895a9f012a93ea29) >> +>> endobj +2733 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 120.9622 162.0093 143.9309] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2734 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 120.9622 210.1583 143.9309] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2721 0 obj << +/D [2719 0 R /XYZ 90 757.9346 null] +>> endobj +2681 0 obj << +/D [2719 0 R /XYZ 378.1965 605.8182 null] +>> endobj +2724 0 obj << +/D [2719 0 R /XYZ 90 588.8207 null] +>> endobj +2676 0 obj << +/D [2719 0 R /XYZ 236.6686 453.8186 null] +>> endobj +2727 0 obj << +/D [2719 0 R /XYZ 90 436.8211 null] +>> endobj +2677 0 obj << +/D [2719 0 R /XYZ 236.6686 302.1926 null] +>> endobj +2730 0 obj << +/D [2719 0 R /XYZ 90 285.1951 null] +>> endobj +2629 0 obj << +/D [2719 0 R /XYZ 236.6686 96.348 null] +>> endobj +2718 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2737 0 obj << +/Length 1898 +/Filter /FlateDecode +>> +stream +x诘Y踤6诀S谽怼fy)┗J洿K乏Y!m( 暐L枟朕}?ERN Y烵冡q靫蹸smg毓呑ogD//a}i^璮/扌 P ╬V7A:9義堡削х鹑駵 掮雧<趏悻 $_V飂'珰睎3A$劭f熅`g 蚪沘;黟#再蝄侍弔v1Γ C阸厽濺O !],AS 癏P桿愓&偕#髆箌捏煊o錐鯏/- &T杌"/笫D香-柼8Vㄎ蝉曹q竀/甋@羮V&ゝ懄m9饇j旬8SO oY+GP拦?4闣:逻痀緺|~煩焑n臵7鮂訂"庘DnR藲圊儲皦 l洍秡~覣璣,庲,#櫗X>G楡 +E"H0Y创Q1Z Bm5`;;/驒绶櫵+媫T*熢i q!狴挬趨貮(稹 $iE驢撐摤茒:*"cn疰~揇&澺憁坁k2%懈k)C渀鬲岾-財K L阇壷錕9r5>邘71r監踻7X 8怰( 馗\勫6鮵p1l1f i>"<8繷凓屰瀜".fm埔3鹟椳f- 瘜A港r3R9焞bS1a槀.牖觘誇崡U頒d10碩箐[附K銐:藕 +?樬病╝R妮都CQ?\P清应㏎8鳕I蝚鯴簡仪j闗祌爍p殬Y恱~;03齎m愇j跾00姲pyk鈊&潍嬚橇㏒蚸葬群亀h4絘t磋>洧嗉#Bw4–寋袁恒杓鷍$潄S'k禣%蝝拝 沝罚阹桕$犛jF3恵灋u; 0Q寋 龈羐 +袜7绵嘤b~#尤x痳8>9蝎l財y *Te裞K|D檛$[冴砿FJ:\隢鬇s伿鑒F祗o鯵詳4sTj孧忲懮83耖T睶悌O)凫p畴K8仂jq炯蕥t=绪癷#!捍**O08鴁譎銌叙CBt⿴鱸婂A圢雗@伥hY M偸`漶 ? Ok震荸 p?:]]齳:齷帮{PHY@其窬o餕{聾睇 c2搸熣岥袁垗騦]ygSb肛r醿+鞬s嬘T細lg|/鰍鏽粵/妶畤C譏R 谳臦"k-4虜<2铔K,%@#.%坬WF 滰AQ銞鰡~B蹰V]粖粘撍銋+膝剱鵭谤 X)[>y#m枋vZ胠JD8 +硋?茱L22谀绞:y!咪礫(卽刀3骊m鷤膭OU!晏H倩釘Q鵳桪a>,7A^譂贒桬囱*4<噕Ri裲zR +i!攵k釁懔 襃轊}碏U1昂Z皲êW駈遙 l輇Ue@,pU泾筞掖荤j籑狶秖59濦+彛T鞰8J-腶裏 >圐S涭浏N逓濽奍:吭^鮍@ w侏貴:Q帋廣G5跌ホU.)馐喌谻鞉 i2笑坌洞ZI凯>貟> у靁胾9谤_厤覿|&4緬}俦􆗡坳.烬芲①啐谼犨z冞腊#.烎愭耑?姑笰齔)贳8媼f6]杞yx'嬓^愡お盔%e/銯1菾愲奔m蝲8慰=荟镘d耙錯ndstream +endobj +2736 0 obj << +/Type /Page +/Contents 2737 0 R +/Resources 2735 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2701 0 R +/Annots [ 2740 0 R 2741 0 R 2743 0 R 2744 0 R 2745 0 R 2747 0 R 2748 0 R ] +>> endobj +2740 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [238.4524 726.9533 264.8033 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2741 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 567.8253 135.0008 590.794] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2743 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [262.8109 509.031 289.1618 519.9102] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2744 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 370.1174 162.0093 393.0862] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2745 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 370.1174 210.1583 393.0862] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2747 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [274.8955 313.1712 301.2464 324.0503] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2748 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [420.3578 271.0632 513.9963 281.9672] +/Subtype /Link +/A << /S /GoTo /D (a00158_g55ce98ea4d6f22e9d5068b904d4d2447) >> +>> endobj +2738 0 obj << +/D [2736 0 R /XYZ 90 757.9346 null] +>> endobj +2739 0 obj << +/D [2736 0 R /XYZ 90 739.9346 null] +>> endobj +2673 0 obj << +/D [2736 0 R /XYZ 236.6686 544.1142 null] +>> endobj +2742 0 obj << +/D [2736 0 R /XYZ 90 527.5172 null] +>> endobj +2682 0 obj << +/D [2736 0 R /XYZ 236.6686 348.2544 null] +>> endobj +2746 0 obj << +/D [2736 0 R /XYZ 90 331.6573 null] +>> endobj +2735 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F52 1229 0 R /F14 636 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2751 0 obj << +/Length 564 +/Filter /FlateDecode +>> +stream +x讠TMs0襟+t十惧[;i2鮈g)4b隳R'蹩疈聠Bs閜悇烐捷}p DKM-姮恎鼷>掳澓齮鴾E7wK璪奷.侭*2抦bEQ')M\5毡Z&q~鱐珲9I90+bL砮%]+liE廆6N2虱戜-⒌"義控G?8~;0棡`.5儨Q僔挞尋F籎0捦W耎 +5褱S 簉捏:?MQ鐗括鎸慳鑎繢=U猞W%歫潋禃蜴獃潏郂峊rV臅糋蛿晒k3& 嶮}Z7o)湊;冇扴K闛鳡咅M1}蘋!t+]饼ⅸ馒R勢z銱鷱 潟鐌s訥}╒锖*7籪Wf〃PZ}誊&蹄&H;b晰\%宩艮yu:喘闐矢+IU垪#輂h爿?D蕸䝼梺妅'罩忢憓10}愤yG栀G \灗瘒賹;倈t禋淊a "赿飲波螃貏tB七2A熉C  鼕≒蹌筛 +=}]4 困o珑bb榧?S?*鍵+endstream +endobj +2750 0 obj << +/Type /Page +/Contents 2751 0 R +/Resources 2749 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2701 0 R +>> endobj +2752 0 obj << +/D [2750 0 R /XYZ 90 757.9346 null] +>> endobj +2749 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2755 0 obj << +/Length 2441 +/Filter /FlateDecode +>> +stream +x诘Z[徾6~鳢0Xsy夸4Eせ畚[S奊36晁琫w揀=IeR- t鹼久脧噰⑷\v;;/p坫a賥摈K0I,g奎婄噙F蘦1 寛1t緹q事舗鲶?鳡Xa沩#H〗实O"+1处O_\k>韼脒蓍:TO祄毣~侄崓mこN⒌竦乒`漸D箭机\mw鮾廤莠O坨-0蘑n皏纆)潡ef#岽诹箣<\肱閤9ou銥>煄K"l紩氻⺻鏾}┫|\R眡㎡彈潎匞荊g侖鲢皲澇戁烔$询秂]紶e鸻w農榴#启初>沫冼YN払抮雘漵壏Iw胼o琩/铪C睫U灳lw }05)往\r壈破┮>:=y蘋>;*䜩i茺劾遾x $駝Sぅ82TbQ嶶焳_璒G磩6入H骆OCO莭踖袃薅im7>塂狈#/謫?庺 )B●#8闎/t鳸鼉4/豋康砘T$1橁3鑼U駼R d櫈aE:鴲h#莛B!)楺SC蒯 围v>炾鶹箶HpN霵%'榪5A4$a⒄\壐溷3M璪T:沯` 槺F淍,髲莝齴 +,R寬W綵L硄埰]+v. w4[格笆]_浧甅 [徳'攥魨;賚]描bSyv胪屦{3Vc 臿糔譖畔[k>獾^Pf鉺俖潠D/瀄lG阛H篢俎O轆,竼殱(us埔孴諑%鸋〩, +g霵%^樲 杛 %.I梽翃啔!箜%籥奭r粿雝悸闚狸. 睡昺&絲r$\ +O叆W4 <奏╀.道l▽瀧橌t戈ZR拣码璲帔翠b醀6(鞾圅%u辌0G4念8腐(.朗矉 鎑楃韉足-犬R瞍攠毟tW踑|颷($庸 谆V钷c钥y蕻僣轜茎 9桯A< 枯_r#*圻撖肭愤. !媨毈r▌L$d>Dj蚭n鈼 m玪wN^絡鑸(,M阿洇b@F +(,鉛 + oY +} R(笐揃 +/劉C|H璭晲鑤 9 髮Ψ腙愑I晆抍宼掔韙驨蠭弢奛騨$v僋L靨憮o~@晉kA鼋A鑣_ +勲胑?<%/'1:SQu07u脔顠〦轝qC硯巪jGgW;未4n嬥]紆3* +Z瀁 膧躊 膀P1FC%羡 晿溷!瓲M犞鑣gJ(/y懾韸arJ儺M!T⒅ e 6=k$(鏢C嗅 ~ u$q粂晬B嘕椤z堖欱e弴a纋dw盷\q h]胎 6ct&mt0K鑓[矶NaⅡ[/U倒'揞佼影*籡租 K遆3厰$a揭{P墋h藪咛疍qR錩艴坿桪)U瑯c儥擷 )鼻嶝炼3~<1盈0(b殙亙 +勉K&v鸞岄趽 4-*燡炱顕A婍w许詉kV配(t鴤┹R陝扫;啯3燫鷡髅 %'0躈漧R陝陸2E&ξ滽謣襦wx&蜧&k呙0c{倡蠬砤籵'W/<盳L#i4=燡魤祙veQ#铽dWTkS十V萎懥\v腕v5鎉o@ #纽郥x撑f/y愗韢T涴SP%rM莢櫻 淚0b\嫂A桊?R慌r蠂ヴ價S#4哸B昔胝蘾天G 驺溠珞)泭崛皽辅屟筎`n馵}峝溋?u!唏异㖞r6>+踍(ng鐎/D#礫氏淎%蛒宽 j-洘崉A3mk怋&嚜p; 2$翼7OY#屍/きYv%(G弼蹰鶸W兀N轠乗〓坃S:l轈长谞齦↓zS寎竟;~T'踮痬僰Q旫鞯7endstream +endobj +2754 0 obj << +/Type /Page +/Contents 2755 0 R +/Resources 2753 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2701 0 R +/Annots [ 2759 0 R 2760 0 R 2761 0 R 2762 0 R 2763 0 R 2765 0 R 2766 0 R 2768 0 R 2771 0 R 2773 0 R 2774 0 R 2776 0 R 2777 0 R 2778 0 R 2779 0 R 2780 0 R 2781 0 R 2782 0 R 2783 0 R 2784 0 R ] +>> endobj +2759 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [304.7882 642.9278 343.8612 653.8318] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2760 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.7163 630.9727 260.5985 641.8766] +/Subtype /Link +/A << /S /GoTo /D (a00159_gfe5e93119035e14cc485760a176249ba) >> +>> endobj +2761 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [413.5434 630.9727 467.5403 641.8766] +/Subtype /Link +/A << /S /GoTo /D (a00159_gceb952d27de8125d5146ac0bee325b8f) >> +>> endobj +2762 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [268.7434 593.3114 307.8165 616.2802] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2763 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [124.4207 581.3563 163.4938 592.2602] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2765 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 486.8218 162.5475 495.6685] +/Subtype /Link +/A << /S /GoTo /D (a00120) >> +>> endobj +2766 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 447.8916 163.1055 456.7383] +/Subtype /Link +/A << /S /GoTo /D (a00121) >> +>> endobj +2768 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 363.8772 196.4299 373.8049] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2771 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 306.282 227.9818 316.8123] +/Subtype /Link +/A << /S /GoTo /D (a00159_ga680bc3f3a1a8a6aec20fe729d138cb8) >> +>> endobj +2773 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 293.2926 223.0005 303.8229] +/Subtype /Link +/A << /S /GoTo /D (a00159_g720ac440c7b24bdd07c53ba146e36fb2) >> +>> endobj +2774 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 280.3032 178.1689 290.8335] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2776 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 197.3698 179.0853 207.9001] +/Subtype /Link +/A << /S /GoTo /D (a00159_gd58a6c7e62ae59bf7a016ded12ca2910) >> +>> endobj +2777 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.5282 197.3698 265.4205 207.9001] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2778 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [304.8984 182.3375 338.7573 192.2427] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2779 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 158.4396 192.6345 168.9699] +/Subtype /Link +/A << /S /GoTo /D (a00159_gfe5e93119035e14cc485760a176249ba) >> +>> endobj +2780 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [221.0774 158.4396 278.9697 168.9699] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2781 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.8358 143.4073 391.6946 153.3125] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2782 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 119.1358 180.9085 130.0397] +/Subtype /Link +/A << /S /GoTo /D (a00159_gceb952d27de8125d5146ac0bee325b8f) >> +>> endobj +2783 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.3513 119.1358 267.2437 130.0397] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2784 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [397.2067 104.4771 431.0655 114.3823] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2756 0 obj << +/D [2754 0 R /XYZ 90 757.9346 null] +>> endobj +2757 0 obj << +/D [2754 0 R /XYZ 90 739.9346 null] +>> endobj +150 0 obj << +/D [2754 0 R /XYZ 90 739.9346 null] +>> endobj +2758 0 obj << +/D [2754 0 R /XYZ 90 716.7313 null] +>> endobj +2764 0 obj << +/D [2754 0 R /XYZ 90 503.7525 null] +>> endobj +2767 0 obj << +/D [2754 0 R /XYZ 90 381.8888 null] +>> endobj +2769 0 obj << +/D [2754 0 R /XYZ 90 324.8962 null] +>> endobj +2770 0 obj << +/D [2754 0 R /XYZ 90 324.8962 null] +>> endobj +2772 0 obj << +/D [2754 0 R /XYZ 90 310.267 null] +>> endobj +2775 0 obj << +/D [2754 0 R /XYZ 90 215.9841 null] +>> endobj +2753 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2791 0 obj << +/Length 2035 +/Filter /FlateDecode +>> +stream +x诘ZY徾6~鳢0籜3%n褔4G閼.鷴乂制Fm9曞ほ紺癜$意 +d)裼\蝲#s呯櫲恇\嗡 线秒og腘痐~|s3{魷BJR9抗$H%t~硚綈堜x癫歿3据蔩蚿_耘鹙_窄y;誩=訥x 傎蝽蛬俪o5S0I客^颗5橕bS箻寛Rt緹q受胣鲶'/荓t募勁%)!梻賋D+1^<`L胧8鲷P灤泤鯪{4剸r母闗B氖鷅=鲵偎o轥侂b_]橶嵌9曧℡抾徂乍=爤講朞:,]籗u=巒.&y6"G榪覐M#^跹&Nr懰0盿P.W\+7EcF讷wO~摄镘粆悼}WNu玗y .烬世;DJH 鶋竸kp々Rj酂婮/.7鉔L椶G驜K7/蜔?徾?澲祉襃,i&"0饊X]Mz牽鷛禺)#(h x眷f8蕆J娼鱖t2 g _Q H墍慇矛擏*wEc话Ua\,愺dHR位/o6[]&*R63t疦莏mF瓭1kV靨鷳/謂/鎻+L0<躖盐-iS磃T谍7蜊M鍑襎钯W怀]m!?-AlY锬綑瞊蚻a^>監MSX丕m1B蕘,4/琒餹_村茍"謡嶞P昜]|:aR舳j谈\蕎甑y "锻1S芏鮶护b駋>;[坷燾t櫉齘?.*A(<{X濌仯e释=τ<評e稚瞟稌蹄z蹚H%銀,S洵睿娄+1Y0銙纕j`g禪s 侴0-;;f@`圙嚃罀-!8Ca,U浺绽眫9GE"/-盶瘛^hn0ナ+糹輸咿06*贾K+.歪杨nui 渝9駿O5-鎁+廜x收^uev[ou嵡躺'B隥)#i趫獲iLJ蛐8|J} 浊+偫R&冟Q +8P Ae>碆罕Z!竐a瘌乗喕Κ.EA纞$婁観皎4绣鋮錎欧鞴`Se帕:豖/,≈侭 睖禋uE㑇E 鵎9湛ZB经-Чom硧岰爏h墵鮜SAs爱燊a$\o盜昩}點jㄖG=串銂 a搞0p瓝sf呇 +l鰒炶=訢W 券]}薊閯j嶵N8 俖箞,郝l玗]祂T&r鞤伴鑨TJy M+7X枙1$vk榀f锌酆儹蕠鶢控U>7n/s(瑧1 v>?3{z~ni??3▂=7=z珁⺁21樅hn.F󜇕j!6婕鮿r磛擟齡!儮$0g蝤U0蒀罐.K榍}C1秶唽蓞C呹c?GnP憢F68餮70<冴4 ylNe#ń焜7+b鰘6OQ鋈膴.碊's99A9r鹓(q%蕇枏,Cヴ襹亪昹*a}q&vu筪覮i银y7$迀=蘥鞞9鶩哅{颭鲊NK\取仪擓┨I黳=8e),-%攺叹\>酅(7櫜袦㎎南Y御 +匘 +CM+gH{霌S?沚F)唶=宐LF鏛1i軩癔瓴:炨禣^_w鳟W x埥67綕嶕:2(NO 鼓O軓6 3TI~/P!<怠-|涨G嘏Xj俓P臿甙t瘿P麁\P%5j/竻] &9 : 樴E&-宧娨H餙v咋Gj濾趴5蓈q鷮~ED聶0姲Y娾8ArS齻S()9癲|-銹 瓷x釲z芢n脦滋顂鐼▅傑尙圫 &6>焛拓(R`6簥貆 :簸c橧N荴∷鍰> endobj +2795 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [324.7453 474.4264 376.5504 497.3951] +/Subtype /Link +/A << /S /GoTo /D (a00159_gd58a6c7e62ae59bf7a016ded12ca2910) >> +>> endobj +2796 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.3663 474.4264 437.2485 497.3951] +/Subtype /Link +/A << /S /GoTo /D (a00159_gfe5e93119035e14cc485760a176249ba) >> +>> endobj +2797 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [454.1911 474.4264 508.1881 497.3951] +/Subtype /Link +/A << /S /GoTo /D (a00159_gceb952d27de8125d5146ac0bee325b8f) >> +>> endobj +2798 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 410.341 142.7416 431.2524] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2801 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [244.1409 324.7746 304.8028 335.3648] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2802 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [348.807 300.0021 387.8801 310.906] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2803 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [285.2161 264.2545 324.2892 287.2232] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2804 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 230.5641 142.7416 251.4756] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2806 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [234.3477 153.4162 295.0096 164.3053] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2807 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [391.1676 128.9426 430.2407 139.8465] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2808 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [295.4576 93.195 334.5307 116.1637] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2792 0 obj << +/D [2790 0 R /XYZ 90 757.9346 null] +>> endobj +2793 0 obj << +/D [2790 0 R /XYZ 90 739.9346 null] +>> endobj +2785 0 obj << +/D [2790 0 R /XYZ 90 723.1038 null] +>> endobj +2794 0 obj << +/D [2790 0 R /XYZ 90 723.1038 null] +>> endobj +2799 0 obj << +/D [2790 0 R /XYZ 90 371.2512 null] +>> endobj +2786 0 obj << +/D [2790 0 R /XYZ 90 344.9853 null] +>> endobj +2800 0 obj << +/D [2790 0 R /XYZ 90 344.9853 null] +>> endobj +2787 0 obj << +/D [2790 0 R /XYZ 492.0776 188.3053 null] +>> endobj +2805 0 obj << +/D [2790 0 R /XYZ 90 172.6296 null] +>> endobj +2789 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R /F52 1229 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2812 0 obj << +/Length 1157 +/Filter /FlateDecode +>> +stream +x谂W[o6~鳢鷇3腔D康HV4@[[ 奓'耫)鹰i鲭{(R奷蔙  J黿!I!伮A(B桝rZ徉~縚7絽餹窥7厰2[ A 鰢蟢債fKa ^7>翽5An婥搃;*掓ん:"遼葸鹘bg梎>帕旎Ya腡$'(E冇奡謢d?V亏r霥籤=N02柏z4"槩怮 +鄕H鸋:! + A2醲sQ1%儊4_g騮侴潝#F蒆錥咔"蚹]趶簆龘>宄遝E騑7譾擵銜wn酇嚆Z泄g慇楧a EL嗎h;D聵匒垗4j]毽蔽珴V%2GM╣S伸aF迍嘉鯁婖擙(鮍:O躙R4ym嚽4b鉵⺶q7cw3鼈&;)泅砘j扗W毡2'c怉煜N霒寳+ j RB8欜:=谹^N峺T5ゅ~#謖v乤楅)妏D2@]厭敝彪锺1觭\橯蛻嘺;g䲠鱪暧圦)N3獌k濆>犇3r伶S攞覍6#罺t2`慹鷷䝼1陀vs秹v壪臆m〔镡h遞E霾寇m8^鯏 懁溁Bv%S嚼lYR韛m21顆&娅莳;#(gn}搱D!秮躠件1%︵xf]6I} jD2!鈽烎p佅d_y唰g埪怰ㄥ!gL镼緕 鵃絙埅s鯋Zf;:駼尼辛致壚犦,fH-卨埗耐a茣狰羛/ #}f褴z2賹癑哺.礝i/(2}儉 +罰 I爨/7O桷潯S嚒28縐46,=h^'/酴蚖`8侮!牝+垺 砱跚6e|襭短l罶蹫%=X氅9n晾P少槛=j慢q哸V缺曳硠},鈁ZT袤蠍鷏~f,[[鼈拒尊v婛鴘頌琘緍貣"侨,_嚚藎!癊)袷faN鮋7 緟撏B{]0潡faA'?h殔扬紋eq +逢螘璌J3t鍌︻N01烪!誙方獹皠癚,00[)4X%鞰1n阶.王隶'飊阯pc苶桪倃旐ɑ誗尌蜑V笡BvU|咀蕙_6.?endstream +endobj +2811 0 obj << +/Type /Page +/Contents 2812 0 R +/Resources 2810 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2809 0 R +/Annots [ 2814 0 R 2816 0 R 2817 0 R 2818 0 R 2819 0 R ] +>> endobj +2814 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 641.7124 142.7416 662.6238] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2816 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [231.1396 562.6724 291.8015 573.2626] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2817 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [285.903 537.8999 324.976 548.8038] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2818 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [285.2161 500.2956 324.2892 523.2643] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2819 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 464.7486 142.7416 485.66] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2813 0 obj << +/D [2811 0 R /XYZ 90 757.9346 null] +>> endobj +2788 0 obj << +/D [2811 0 R /XYZ 407.944 597.5968 null] +>> endobj +2815 0 obj << +/D [2811 0 R /XYZ 90 581.5869 null] +>> endobj +2810 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2822 0 obj << +/Length 2497 +/Filter /FlateDecode +>> +stream +x诮Zm徾6柯纝眮毲wI龞k禘4&浕赽〉暤奠ns傀I驟&u桠^g3  ?2棾浙=楞畧⺻ /]?n=璮$暢巯I悹勎n卓%"誦I灴~q 寮轹?蠜免粉3嶬剠5j罛=胶镜旱i侷4~跛ox過a莫R虨 u=^q侍椵涨珶瓬釃~镭 a鉙$j鍴a蕝;E俼f巸*!z1郖&R"D尃鎄ow蚙划閂図觪籵 娓銹溮M3:焦 =-盛鏢籖b会k}0c;{>w椨搯 泒wl隚=鯃荶枚G_譃浢vU飭蕑:杂鍰 +$)g郎迉$V絤 2噺nxR籱證饇yx馓u=黚陶#彌ZY枕痂鼅嘺d=n喦G餷繨V2TQV$PF朙揓齮x袠,~8嫫4柅0涕n暖X`鳲B8,慭&<法!\膮`!6h,澘oT虩-!AK藆8_粀国憔墾6芏欯便7H蚂g0T袙eo馣w@<遆x艐瘲麼+墾⑨[vT%*蛤籯琴锝) ,齥(缡>9n阯x|\鄚鳰Mr~?碟q熒rH踅莘薋嶜虔n徥/擗焫节oPv漡珃r_h0撺-濟R碨u2a褌駲$PWyYd鑑馣w@朮瓹忁Q楄A*唜壂愧暢剥巅1敶熀`矍筘碐揰鱛仙5屬疧黄<4抈%Q!鎕lu僽L浉dX瀦繃UY敆Kv表p#qV虺レWJ>俙E!g-*趥 +K枧橆殬搄弹B Nj|螁H顧 豳D朄塮樢fa + +v腶"(g轎郰 禞捋 +}.猺fa蔞b判6E +誱4踮<&歿~|C#F哫 隕ZI#焷迳L/捪記!煣y +6Dr颦b騛X礌$} %典+'S$塖4/愊<颟eRwǘ5郅鞦K筁H^$E5q&.趎A握H蓞DBm欪I4*祉hi鍖!J +~戄. 羘 瞬;填宆胣O镞謟r.*H狘2 >gF$W欛橥洼ё7w痭n緖躅]軡JT駫=aQ(玊*輙設O;'K&/W5悐粊邈炓枘=戚;!顬)qO蒛f暡鄼TNo齸QzUW偮鰒-= F)拽'(6rNn-##崐9s=E嵤3&∥!LR╁嫞t]\蚐貟!敧l湛>\邁xs1jUUz斨 暭<蒎Hh-py眜夃ZX6篒嶇餱魵鴝z鰰O坧茖H2忝跚熮-企轢5tH溞2 嬍楢o0釠燎w`\c=lo%#梬a. E薙$パZ埆篆椺貮E`c觌N 豇戃2麡滠燗9龝啇^pW幈s uJ舨鋜@*枏zJ醮^uWo>隇)QO[ O"Kq譣袪滝R絿郋鄘堸jS:( 鬘Am喚墛鐖KXt&z逾3髩*ND#ぺ*筍+鳊"+豲墣 0頍頁晠溆v~.:眹0e脀茅盼痦y砞┯拲> 旒砈 i谀3襞=.璗28t辜中挩讅鬼墔e珟+0Qu2zM振鬴珟瘂B丈X蓇j邁帇4湕'TN} i蔇鑭(;c女袠Lu羐-錨.Z+^椹[T/*h袒 卋輛]s戌姗zA焍Z絧褖zaa}截藩{~8 荳聻)M莲9;u崺鷹釢iw4仺闚^<杛侸滇蛿藯G`ㄑ1肻Sr仲鈀7蔦铱$7鮄甋氥9=f*iGP +弹.鷝帑!'[S /迥鋞些40e蒓髑z镘V惈韖髡駫x=灦3i +^V/髵刡.sgC朞JG`j絅氲殒晖烆)雞趭H黰粛S縋w8翣r闗H}J娎)OJ +'t 蔥X牯;/fY%阌VR6ux青x"咟K返鸇呮F莴"u)D_&*訮lh阪P跭n芃??蕺t襙諢鳾示捼龟Z玵敖NM鰋薪Cw淦4?Y贠aendstream +endobj +2821 0 obj << +/Type /Page +/Contents 2822 0 R +/Resources 2820 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2809 0 R +/Annots [ 2825 0 R 2826 0 R 2827 0 R 2829 0 R 2830 0 R 2833 0 R 2835 0 R 2837 0 R 2839 0 R 2842 0 R 2843 0 R 2844 0 R 2845 0 R 2846 0 R 2847 0 R 2848 0 R 2850 0 R 2851 0 R 2852 0 R 2853 0 R ] +>> endobj +2825 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [382.9274 654.5304 448.5608 665.4343] +/Subtype /Link +/A << /S /GoTo /D (a00160_g66d19181ad5fe8b8f7c84d1f1d46a2ec) >> +>> endobj +2826 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [236.6088 642.5752 297.2509 653.4791] +/Subtype /Link +/A << /S /GoTo /D (a00160_ge4dcbbe6c641d2e3b8537b479df5fc99) >> +>> endobj +2827 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.2771 612.9957 194.4771 623.8996] +/Subtype /Link +/A << /S /GoTo /D (a00160_g6d9751d534453425c7a5a215d1d4414c) >> +>> endobj +2829 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 556.6105 162.2985 565.4572] +/Subtype /Link +/A << /S /GoTo /D (a00103) >> +>> endobj +2830 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 516.8967 161.7405 525.7433] +/Subtype /Link +/A << /S /GoTo /D (a00102) >> +>> endobj +2833 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 430.0643 237.9445 440.9683] +/Subtype /Link +/A << /S /GoTo /D (a00160_g3d768e989e308144190ae1a5ddfa9726) >> +>> endobj +2835 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 417.0567 174.2837 427.587] +/Subtype /Link +/A << /S /GoTo /D (a00160_g070d2ce7b6bb7e5c05602aa8c308d0c4) >> +>> endobj +2837 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 404.2781 216.3555 414.2058] +/Subtype /Link +/A << /S /GoTo /D (a00160_gecf13b8dc783db2202ca5c34fe117fc3) >> +>> endobj +2839 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 390.8969 231.4091 400.8246] +/Subtype /Link +/A << /S /GoTo /D (a00160_g221d37ccde7e3fd0dd2c2eb0a6b15493) >> +>> endobj +2842 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 331.4782 194.0092 342.3822] +/Subtype /Link +/A << /S /GoTo /D (a00160_g7c5359305008e9183b18d6ab75f568bf) >> +>> endobj +2843 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 318.097 188.4803 329.001] +/Subtype /Link +/A << /S /GoTo /D (a00160_g6d9751d534453425c7a5a215d1d4414c) >> +>> endobj +2844 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [243.4737 318.097 268.161 329.001] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2845 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 278.7567 182.941 289.2871] +/Subtype /Link +/A << /S /GoTo /D (a00160_gdf916e0c752f5cda70d0bddb2be422ba) >> +>> endobj +2846 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [186.7567 278.7567 211.444 289.2871] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2847 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 238.6693 138.5977 249.5732] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2848 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5678 238.6693 214.2533 249.5732] +/Subtype /Link +/A << /S /GoTo /D (a00160_g3191066cf8f76bd00b6843b77c37068f) >> +>> endobj +2850 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 199.329 178.5273 209.8593] +/Subtype /Link +/A << /S /GoTo /D (a00160_gb50f78bbf36d912d69f6c1685d0b40e3) >> +>> endobj +2851 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 159.2415 138.5977 170.1454] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2852 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5678 159.2415 205.5661 170.1454] +/Subtype /Link +/A << /S /GoTo /D (a00160_g66d19181ad5fe8b8f7c84d1f1d46a2ec) >> +>> endobj +2853 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 119.5276 187.9223 130.4316] +/Subtype /Link +/A << /S /GoTo /D (a00160_ge4dcbbe6c641d2e3b8537b479df5fc99) >> +>> endobj +2823 0 obj << +/D [2821 0 R /XYZ 90 757.9346 null] +>> endobj +1315 0 obj << +/D [2821 0 R /XYZ 90 739.9346 null] +>> endobj +154 0 obj << +/D [2821 0 R /XYZ 90 739.9346 null] +>> endobj +2824 0 obj << +/D [2821 0 R /XYZ 90 719.2952 null] +>> endobj +2828 0 obj << +/D [2821 0 R /XYZ 90 573.933 null] +>> endobj +2831 0 obj << +/D [2821 0 R /XYZ 90 449.444 null] +>> endobj +2832 0 obj << +/D [2821 0 R /XYZ 90 449.444 null] +>> endobj +2834 0 obj << +/D [2821 0 R /XYZ 90 434.0494 null] +>> endobj +2836 0 obj << +/D [2821 0 R /XYZ 90 421.0417 null] +>> endobj +2838 0 obj << +/D [2821 0 R /XYZ 90 408.2632 null] +>> endobj +2840 0 obj << +/D [2821 0 R /XYZ 90 350.858 null] +>> endobj +2841 0 obj << +/D [2821 0 R /XYZ 90 350.858 null] +>> endobj +2849 0 obj << +/D [2821 0 R /XYZ 90 218.4785 null] +>> endobj +2820 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2861 0 obj << +/Length 1851 +/Filter /FlateDecode +>> +stream +x诃YKs6倦W(虳($}k汫揑4qOI艭I触塋* y氀 道.鰜@~d炧y$"0.鐩炦羚W3b⺗+W鄰胭o/i2OP"_6#H%t~烬 X.WE4^剈泔b[2輣^l犒,j_渌of/甗牌.$Qj肯>朋-伧fKb1孒捫孲f_砄趒M嚲 满鏕J劆v轾IP冭rE0茓梪緄田烸荱郖蔘S顚剤肭掄E边瓯%侃8 荃b4狍 D饽腝齍檹螖[鶗!宬8&颚 +L`#}:62耛! 殅0f跐懗p87"埸t蔎pde忞Y&6 +b剺#" F 媲橄" 鑍]毺}仨7;騱焧醚藜W厏'娱0|r煗P讒盄樐裓r倶HX+磖ヂ嗯 熈X!F牎骜A%XZY晻Й畘)%喆摇%^D8徻..Q,$鱀+浙 +7―硤cq,鰕 Y|祣琇鹗靀fФ礇o)蔶g勳j梟 |悮虡軠觧;,啌d"Y⿷d!Q)H銧?欲!K%16瀀嬟滂睈&S&柾蚋攂6仌,喺+驺jウ)L阁m燷艗u蔕屰衩.$QI8+5?M閛扴h塧読䙡灘$西绾I+<靤撻溑~报.嚩粑Q謿FI0刘螯1煌,遜︹V轩'焪緘k汋䎬So7牁娕儌SN =2/T呹2E龍8払\D垀嫡ъ仂R僛 .怘i乲 sX遻,蓜GF鑉F噄廋T)渀V~鍁鑑粮,"酘pwL栩+*鰴DA倇/疬诛>JLP +(#.:"=珠鏇kt啬蓼某;=\И 沧錠o}\J\金v_烼%R眷諍l>鮏儣阠;舄vM%肳8燜9h橋8'爤+喩獾閖Mkg m3cP戧韺盱,9W醨鏾 +2 =4|若蠇>煎4唞L鈗紆駯s寗O鈌}鶪竃`H?7k跑膰S8幧[鴓*媋k衢-{:G悉_7巼ⅧmG4霯H$櫲2g':bcN碽*饣V啼刦+j罡繤蚰赚軋呫Fxi蟃?Zf>昬汙8玹燂;荧q:鏆*贃芈K冋g)*B聈耮亢辍鵆$S搗珄S試m踪%吺$凮`:^ó詐÷羻擼H屒T?鉜靊b<隊31炐寁!1龅_@'平忹%鷥裐b苌)&祴d1G >r 〤Y+縭;劑;人8I:&t=e>19锯3/蟋ty機燂 +6蟡昽 E-X壔祆齔瓄べ%*c奕7g`E!"_慭┽ 堕0IíKe@>(峧?c]ňw筰,庑谹i膩彥~磮磬,0 5洙-淅嫋娢Rn屧#鴅hh定√矨>ZykQg庠fg壡:砫螈 +.'MF焲嘤粮阌Z|毿岞kn(齾7蜛Mp5昣]晢V踖觫>埄劒; /芓访Χb訕隂0埄佲~L? S站>N濭X鬹彛嗭c-炠軑潓t輓u渱牖: 听滤u HT弭辬a0欻!譛escu_沩G&E,n.(t鋩鍗WY灂ieY-挚m銔BS_QvE铜,磐澀赟5诼脎酰借x椂6登K雜endstream +endobj +2860 0 obj << +/Type /Page +/Contents 2861 0 R +/Resources 2859 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2809 0 R +/Annots [ 2865 0 R 2866 0 R 2867 0 R 2869 0 R 2870 0 R 2871 0 R 2873 0 R 2874 0 R 2875 0 R 2877 0 R ] +>> endobj +2865 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [206.3331 702.4599 232.1263 713.05] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2866 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 599.8741 139.3246 622.1255] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2867 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.1901 599.8741 192.3555 622.1255] +/Subtype /Link +/A << /S /GoTo /D (a00047) >> +>> endobj +2869 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [269.7449 518.2645 295.538 529.1536] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2870 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 360.3144 139.3246 382.5658] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2871 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.1901 360.3144 192.3555 382.5658] +/Subtype /Link +/A << /S /GoTo /D (a00047) >> +>> endobj +2873 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 313.9634 157.1381 324.8426] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2874 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 199.7115 139.3246 221.9629] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2875 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.1901 199.7115 192.3555 221.9629] +/Subtype /Link +/A << /S /GoTo /D (a00047) >> +>> endobj +2877 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 118.1118 157.1381 128.9909] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2862 0 obj << +/D [2860 0 R /XYZ 90 757.9346 null] +>> endobj +2863 0 obj << +/D [2860 0 R /XYZ 90 739.9346 null] +>> endobj +2857 0 obj << +/D [2860 0 R /XYZ 90 722.6705 null] +>> endobj +2864 0 obj << +/D [2860 0 R /XYZ 90 722.6705 null] +>> endobj +2856 0 obj << +/D [2860 0 R /XYZ 358.4819 555.6542 null] +>> endobj +2868 0 obj << +/D [2860 0 R /XYZ 90 536.7606 null] +>> endobj +2858 0 obj << +/D [2860 0 R /XYZ 90 349.9037 null] +>> endobj +2872 0 obj << +/D [2860 0 R /XYZ 90 333.1669 null] +>> endobj +2854 0 obj << +/D [2860 0 R /XYZ 278.4221 155.4916 null] +>> endobj +2876 0 obj << +/D [2860 0 R /XYZ 90 136.598 null] +>> endobj +2859 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2880 0 obj << +/Length 1378 +/Filter /FlateDecode +>> +stream +x诃X輘8鱛鳞罫'牸&綨3=穽漿i;b S)芃筮 +I凭粚H摭-脧x{憟恉<鬡燧抿 臂S責 ⺋N~揓O"倚[nj!A-譥L├|an蕗木傧`_暳峰暻q尠A>Ep'砮#郦&XH翠/甙&1 0垞詛減受C6YL>7|蘁}`菳N梁0o蔅゜0#p%A嚌K1嫾1#蘫坻E.褐LQ(踮 {b宫%車"履灈紎H吸._Ui戨'y鯾殖Ⅷ5媔n柂*U鍵f枔睱^祚峐鸀=鳳lXp撄-逻毜鳠 Q瞊]f 煳o>|0鹵)H辌.霮tU┉+启锖5勒0 喽甅?& <誋縅AL濤J25裓w枫e迍~@冕qd鸼B幔UOK#F9:ā:%壳MbXv軀GJ|弌屈嚍&G<営沔;猄騵軐&m!』襡轻賬p臾翳裾z<U朆轺硛r爧鉿 駗nZ|]歚僷L`眎b楆+4OmO肄5Ks[鯨唶E瘡dv碀猕i( +l涋≧瀚z壮徘袌黜l炯~?[粹T,舫!腳蝞/?蝕贮惖=wg汼泔垆閕昫诋=峤Q-@00e颞vE"喸髆懏籧锃猛趃捯0囄.乥=頇妓 L<{*懺驩_KJQ║t|蘢焉馉軋+HVi鐫诠%鎎,港 \vX0p籓3c镶92%黱骿Wzb坮j*C:U脬AS5誋衊別黦b䴓嶚} 1!;驡辞騵芷1PB|忥贅?n~凒'澉笣夰琥×z豇瀷n豤>稺羭骟W曼淁蚥v:◤>1D<=,貂辤"hV m;暙2Q.2箾+怀勞+緺靷赑Q岉牰h镪HM嶐∏.媉/鳘D6錈兺櫈endstream +endobj +2879 0 obj << +/Type /Page +/Contents 2880 0 R +/Resources 2878 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2809 0 R +/Annots [ 2882 0 R 2883 0 R 2884 0 R 2885 0 R 2887 0 R 2888 0 R 2889 0 R ] +>> endobj +2882 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [277.7877 706.007 338.4298 716.9109] +/Subtype /Link +/A << /S /GoTo /D (a00160_ge4dcbbe6c641d2e3b8537b479df5fc99) >> +>> endobj +2883 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 619.5604 139.3246 641.8119] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2884 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.3134 619.5604 175.4788 641.8119] +/Subtype /Link +/A << /S /GoTo /D (a00047) >> +>> endobj +2885 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [195.3443 619.5604 242.985 641.8119] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +2887 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 424.9723 139.3246 447.2237] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2888 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.3134 424.9723 175.4788 447.2237] +/Subtype /Link +/A << /S /GoTo /D (a00047) >> +>> endobj +2889 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [195.3443 424.9723 242.985 447.2237] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +2881 0 obj << +/D [2879 0 R /XYZ 90 757.9346 null] +>> endobj +2855 0 obj << +/D [2879 0 R /XYZ 316.2991 559.1605 null] +>> endobj +2886 0 obj << +/D [2879 0 R /XYZ 90 542.4334 null] +>> endobj +2878 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2892 0 obj << +/Length 2408 +/Filter /FlateDecode +>> +stream +x诃ZMs6禁W╦/rU屌' 涓Ojfk6俦o檾嫋hK%⿲ $H甅鵣妡熳枳h +Y)际E阗js悸玤庚1弌帙?R礡He4[?u2%tu魁mM凹尽^? + 慢艞遇|(鵛Vm杨O挣秣煰n瘪K皩h];^m量蟇1%抨;(EW+N欭q负机烦?鑎榡 l簘#窩m)7镗! +!沲輻{永蹧c?糇MYm薢7ǚD⒊痹啫糥B呢鶳禶≤氊斖控葊!鎱\垩尬"蕜X唔/囶毌縯击譒灷侬酴=mN纟7,皀 '凉㈤q垓拼襈檑弌捲@鱉枯蕈-猰Q沇綺.搡'慝g肬mu u淂H懏M璹该閳擽!(嶵_|伯9S9(&<贗*睾1瘛偖薻"织吔林莩K>鲼虌{鸚 s0ɡ攏頝譚菭毁濬<涌76u!劕癟(跏齄AmшY$4:穉)tO骮W3丈躽,K饩m喧f驀 Y俅亭:c圦:G?Bj7}\ +捪绪M#!$控裠(c.倁,舞P)^( +g賵: 0ff猩3隚醭羭鮹傍乚鞢sl_.餉dP縟Ⅴ\!I2@J顑&B#騀d鼆+毳+ ^f俭 +螘\9橏騌8weewm咮鵽6!8Y5銠NG%諀nq +@蒘筫a檐 苧+坞rk罌拳髵軍豼沟櫴-NqⅤ怺T葁晥鋣* j榊.q棯孏~> }(慸谕.e覍K啢旪蚌嬣浕>o趕}M鋤4蚂Z%蛸趱戶u癲鶩/闆嗟;鄊褐嗛玚喦鋱9捑燆!発喻'm貚$类匘,j=RRr!{淹4jRe滺岏y=@Le Kc鬞庴:晑蘅 c@3斢湆如叾鴶乚[n縹}焎G(亁鍌模郟 z桫p y0犌s晠) +帞>嬕挤u}蚢杕F雨||#k+烫?W{-Riv闣輸CL樱!鵎Fc柮#O'簝%7I疢o4厌M>"&z嘜豼墌wA歝2Ni< 3佦據>醫劫構t4椡?濡5繋蛃両2>Q辭霓o隒Y樽嶀蝬X_#Q嗛|趛X赮X:韇宆谂y]邬奸:$_P_nv燁~y笯C愧R蘺錌_q1%2銆!l^d俾"=戙糔d焪伻%"禽靂7鯏鹃沩7瘱X猀驛忭斈單蠐|@Lb KKc$庴:墋葪Hw#発%~)臊)8乮%'俙Q)v%P庂恳rJh媚夹 &磪1zB莥澬>銴剮氐B影+S3矸1魕(#b鑴芓I繢v|@DcKje糷溹xh減#発5f芹4N[臓1浺X阸;瞸b[XZ'q溩i祗.衳@綝愀乚1熥8邺嬈qbПO )峴=pg筮t> Ρ叆51z莥澠>銴4幓氐媦崳砜h'v牨樬晒輒梏摯忕j(Q(>?麁XRXX:)b宆R膟]R鐴溆> 翑U"F軕昁僌y豼+椲覦je,XT奬Dh瓼o靤プ嶌骠fW%⒉甇踉椃]!硡嬮>:茶錪诮煀冕必h濥;鮠抯剪e7K7饐m树澼,猵棿fTQ5莭8嬛N'Hl +B(O--\荧蠑嬙'瑑%{峯0襨级 x摻f冉犠$旌^朝鲰T5B鍓XT)t憅栳 锰蒩μ躇OZ撥乱捛=摄糔r7-鶂{変q/籒蜮錏w駊揋"蘄枅侲F俀6婠虧y>?<鷢橁朧=畦鐄糹躃T弡豼猳N暈=熾p擳掹X<曭A)膜#@鵱\靎P匊绥鍾,硲&巘A$颊c籗覸疟i0弻g)N闾`毑頞馜n耡俾佦GGn6/^蔒祔幚-|愍萋*靬&涾 sU狾忑%C/%`L&嘵 K鱄蟕珿苰]忯y綑錵洃阊廗:rb緆x蕸闭藥{Ym胢X&y<曕 $D飸櫬=策"j=c<{嚺~+b2m嵌籪69C倫w8轫就[,O4籱糛Jp#滈",/>≥疀愳!騆> endobj +2896 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 575.9645 157.9746 586.8684] +/Subtype /Link +/A << /S /GoTo /D (a00105) >> +>> endobj +2897 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 539.0153 157.4166 549.9192] +/Subtype /Link +/A << /S /GoTo /D (a00104) >> +>> endobj +2899 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 459.0226 183.1495 468.8008] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +2902 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 404.9565 217.4713 414.8842] +/Subtype /Link +/A << /S /GoTo /D (a00161_g029256bc17a12e1e86781887e11c0c7d) >> +>> endobj +2904 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.6302 367.0311 204.6385 377.935] +/Subtype /Link +/A << /S /GoTo /D (a00161_gcff75c8c930abd6ff168e85373a4eb92) >> +>> endobj +2906 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 344.0533 176.5052 353.981] +/Subtype /Link +/A << /S /GoTo /D (a00161_g3212e70c55244608ac16316888c354f0) >> +>> endobj +2908 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 332.0544 176.4952 341.9821] +/Subtype /Link +/A << /S /GoTo /D (a00161_g6cda47c85ce1b58b501b44ac9cccc50e) >> +>> endobj +2910 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 319.0793 194.2087 329.9832] +/Subtype /Link +/A << /S /GoTo /D (a00161_gf7dd2757d1e766f65b01ba7c91c660a0) >> +>> endobj +2912 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 308.0567 173.7357 317.9843] +/Subtype /Link +/A << /S /GoTo /D (a00161_g34b924954ba5707d536df28d71a80d39) >> +>> endobj +2914 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 296.0578 173.7357 305.9855] +/Subtype /Link +/A << /S /GoTo /D (a00161_g9e97c58fe35f750ad192774be9408ac8) >> +>> endobj +2916 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 284.0589 173.7357 293.9866] +/Subtype /Link +/A << /S /GoTo /D (a00161_g28cf9765e4b57451af559ab988ad7160) >> +>> endobj +2918 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 272.06 173.7357 281.9877] +/Subtype /Link +/A << /S /GoTo /D (a00161_g17ccd786400fd08b941e11046df1668f) >> +>> endobj +2920 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 216.0414 179.6335 226.9453] +/Subtype /Link +/A << /S /GoTo /D (a00161_gb1fc692a2700b7a51517724364683f67) >> +>> endobj +2922 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 179.0922 173.556 189.9961] +/Subtype /Link +/A << /S /GoTo /D (a00161_g64807ba7c221ddf735572d05021539f2) >> +>> endobj +2924 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 167.0933 189.0379 177.9973] +/Subtype /Link +/A << /S /GoTo /D (a00161_gbc331f73107958428bf1c392ba19b6f4) >> +>> endobj +2925 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 155.0945 197.8948 165.9984] +/Subtype /Link +/A << /S /GoTo /D (a00161_g37e3103b9591790d484a450525739661) >> +>> endobj +2926 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4857 118.1453 216.0979 129.0492] +/Subtype /Link +/A << /S /GoTo /D (a00161_gf0349a8481565e80f55a751e2b408d6d) >> +>> endobj +2927 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [446.0722 118.1453 470.7595 129.0492] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2893 0 obj << +/D [2891 0 R /XYZ 90 757.9346 null] +>> endobj +1316 0 obj << +/D [2891 0 R /XYZ 90 739.9346 null] +>> endobj +158 0 obj << +/D [2891 0 R /XYZ 90 739.9346 null] +>> endobj +2894 0 obj << +/D [2891 0 R /XYZ 90 719.4886 null] +>> endobj +2895 0 obj << +/D [2891 0 R /XYZ 90 593.9619 null] +>> endobj +2898 0 obj << +/D [2891 0 R /XYZ 90 477.02 null] +>> endobj +2900 0 obj << +/D [2891 0 R /XYZ 90 421.9777 null] +>> endobj +2901 0 obj << +/D [2891 0 R /XYZ 90 421.9777 null] +>> endobj +2903 0 obj << +/D [2891 0 R /XYZ 90 385.1719 null] +>> endobj +2905 0 obj << +/D [2891 0 R /XYZ 90 361.2178 null] +>> endobj +2907 0 obj << +/D [2891 0 R /XYZ 90 348.0384 null] +>> endobj +2909 0 obj << +/D [2891 0 R /XYZ 90 336.0395 null] +>> endobj +2911 0 obj << +/D [2891 0 R /XYZ 90 323.0643 null] +>> endobj +2913 0 obj << +/D [2891 0 R /XYZ 90 312.0417 null] +>> endobj +2915 0 obj << +/D [2891 0 R /XYZ 90 300.0428 null] +>> endobj +2917 0 obj << +/D [2891 0 R /XYZ 90 288.044 null] +>> endobj +2919 0 obj << +/D [2891 0 R /XYZ 90 234.0388 null] +>> endobj +2921 0 obj << +/D [2891 0 R /XYZ 90 197.233 null] +>> endobj +2923 0 obj << +/D [2891 0 R /XYZ 90 183.0773 null] +>> endobj +2890 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2933 0 obj << +/Length 1783 +/Filter /FlateDecode +>> +stream +x诘YMs6诫W(虳(綢:N殼I\[=%M[塗I獕}"@E莆d|0E>忭v 檅#S収恇\N爿O譸剺 x緃~[N~yE誘!%.#H%t篭}欼D駖A炤綺^譝W媇攏腚2蒝I譐 5#X涂,逳畺 1I0I4憧揙_餿漙腡(FD):軲8e銮vr;p|∠3AX縦 %稻Qp58箚鑭A0瞥W,<z櫱嘳扷疡x訯 d1#!b弃oN,OWF悼嬻3苩}($%鯎蟈鄕5-"$b坤 郵V@*@|!跰^VY碖z体I獎A鲸+}v*愪 鋏R纏b=鞝T纄貙&hA%Jd`%G繇>塖璡瑖-彶顚l邐4 @ +螐/7iY滆刍21肨yF耲搕m馘周龤V'圮屬D豇+鑩尯-0槀簋礲1认x墔p侂檦'MTQUR]v) +%}魹 爻脵g( L4cz齿盄@掄l嬹齡堁諴鯏轡$乗噛豲鍵lH 髼っ(v嬺賋$Nに⺧睚>O呈Np粓Ⅹ_?VF("掣媎_$PU4[wD禋F@3覠_a謤[瞳:A,竡fA丫糒4*KO "43CQ"]s+6 +廪t<$E捙塎9辋.輐祯b{淜1C5BD敾V ㈢k*蟌呯悤: 頣嗆(斈V偆(蜣 Of8绅D(T敾刁2趎铮鵁綝\m6%莯6$櫅\揤cRQV钜掺液帧 6Xv嚥rgN痕o X[;嘲]Nn@E)G +琴屛C剴釋澫鑌杭'e鷣屨担?aY3vB锢闋 洒轒T T脯M>粄'紨R踁G3錘忩8謾拇W霎庯菡屯萸w鏑K`2b跙  煯綞z卽#B_堧g鶱6弉湪沺鯴葄胣a:uL巭嶁靡41fo碫.瘔愽h楜?f7n@瞥!2E1{fS魯魵略Ip荍眵:2齚u +谡墮暝*>捵喷xu]o)霟C D5禛憚儊蝻 SR喟3掅 %鄄;矶(巤r$茋"啧p袱'q枃摳觌 1囦g耦蕌煫I8{歘 2W[縣苦\M 虍虺婦1鳞擮S" 1h矼鶱.˙苞臜傘)壔O誱肺V5r﹋m赠狥旸B<眅3`爂,閛Z)8霥谰 :蔄TN迒瓷箰.k拥掎]Q懩I:骒堻N?'I%6X_#6lHJ ;%KWJ耗t務謳 N:愹蝌域耿 +笭X寜趥 塲a韟6諓FY(Fx-淑眙V挷 +]辡融$?KB&≡`6&a 6$u蕸[H$1耹@>鲍!'捁膷喼俫J)$鋍4!YjP河 +娕焷t:J哰-篎(阎焃;榃:Ps*5v抑 )aan璾鏕癭#潴vEX焁:紞(谰剁蘥t!虪O>隻靽虾$f*垢衴 +鶦╄祺D蝰铆䦛 受潛檥*榞篁蹴撬wwo>糦^w僄硯匟除层洉觫底1OE鐦^张y拶u?~h銈尴qBL?鬩禅M/刉tc荜$tp,礋綄谶譏Qsre泓轣颊澎`~j .歆@姳9顋绣u4囖aw坐2龈鲎堽h祝晧珨endstream +endobj +2932 0 obj << +/Type /Page +/Contents 2933 0 R +/Resources 2931 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2942 0 R +/Annots [ 2938 0 R 2939 0 R 2941 0 R ] +>> endobj +2938 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 413.0808 135.0008 436.0496] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2939 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.8662 413.0808 183.7077 436.0496] +/Subtype /Link +/A << /S /GoTo /D (a00039) >> +>> endobj +2941 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 341.4685 157.1381 352.3576] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2934 0 obj << +/D [2932 0 R /XYZ 90 757.9346 null] +>> endobj +2935 0 obj << +/D [2932 0 R /XYZ 90 739.9346 null] +>> endobj +2929 0 obj << +/D [2932 0 R /XYZ 90 723.1038 null] +>> endobj +2936 0 obj << +/D [2932 0 R /XYZ 90 723.1038 null] +>> endobj +2928 0 obj << +/D [2932 0 R /XYZ 206.0041 564.8934 null] +>> endobj +2937 0 obj << +/D [2932 0 R /XYZ 90 548.1663 null] +>> endobj +2930 0 obj << +/D [2932 0 R /XYZ 212.5591 388.6469 null] +>> endobj +2940 0 obj << +/D [2932 0 R /XYZ 90 371.9198 null] +>> endobj +2931 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2945 0 obj << +/Length 2274 +/Filter /FlateDecode +>> +stream +x诃沒O$7嗭沁筙,#刃Q.b気炭蟩U賛椵荖6i搛y帊軹?l徼(C湊zq骵.>扒厉R?V{呓錸釄覾/V4#3綳蔺瞕岊px]緸\繩E棇旭披芹貘矜跛鷄s焦{|u鮪飜崸\Jh鎚橱睡tq 鞶"淯0瑛馑炰"|q縲棍cg饐阱)&曜$後9\疧析冠w|咕Xo+zY?3狐 ^%峜1鈹苽j篙嶦耯G胪踺v纟)I妖8>荵}瀓+旧cA$#)$;r A,-鋢 烟驮頥Ic)釉宩"厱踧假8Ws/F}晹* 4誾鍷)嘵; #铈牺[蠠&蛧4C蟹2泮 #蚬垺%1 稷3DA_*aRM0梃M∑ns*喊怱!''5.⑻缂究遶擄s破V时蔍聵k汄0N敂jgO) 珛>舺*蕷=堲T7鬞顙鱐钴裇 鸥iO菰z奿Xρ(M淿GPO)m7z*漱LOA0D5=%\湸瓰 +瞯O%b=咞茷蕓=9黥灐譯x瘳*0憸6._:聲。XgKqh gL俵h┗/Oa{1D篾鷎x=晸)ふ橎mj歏僽T:)Zd鞻K腪 鲘瓥6Z-s頸5=>'3%h9ⅹ憙N`筍yIk繿i銷馆<融18仹3鄕宐O=笏8 2璡濜釚卯缅9槷棞艕0郃9&纐<蹴灆莄泮?漒\^\9<=-0廕f*DU脼[>珇鴄rts 洽 +t-q獞Y0鐰謫9&衠=蹴灆鰼莄泮'楃WE睓QDQ獤1兀=+龒^ 茅B鸧頝葔dm葮c鲘怱葯yd伫麐6鐒ia馬DU#鐠h%U炨涭at茠w N晎掎4穴v麃M寫TO烦潮枉峔~}Z弋?诸梣皝w%逩-韱賛 7 蜄歯+,;nTn嬼侉n苐 !蟖厾?瀽S訝?瘢,网z鱰倒y蚩db^m;:嶽湌滵訊僺e嘅仇&Dzg&卫D 佳?╞黭苹X?瑹狷I旅7計w鬃 僻轺\|惜u爚z|鮭煫邈箪鶔鳧峡繂~i]<倾 褣*ヘ祢endstream +endobj +2944 0 obj << +/Type /Page +/Contents 2945 0 R +/Resources 2943 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2942 0 R +/Annots [ 2949 0 R 2950 0 R 2951 0 R 2952 0 R 2954 0 R 2957 0 R 2959 0 R 2961 0 R 2963 0 R 2965 0 R 2967 0 R 2969 0 R 2971 0 R 2973 0 R 2975 0 R 2977 0 R 2979 0 R 2981 0 R 2983 0 R 2985 0 R 2987 0 R 2989 0 R 2991 0 R 2994 0 R 2995 0 R ] +>> endobj +2949 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 618.5198 165.7154 627.3665] +/Subtype /Link +/A << /S /GoTo /D (a00109) >> +>> endobj +2950 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 580.4794 165.1575 589.326] +/Subtype /Link +/A << /S /GoTo /D (a00108) >> +>> endobj +2951 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 542.439 157.4166 551.2856] +/Subtype /Link +/A << /S /GoTo /D (a00107) >> +>> endobj +2952 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 504.3985 156.8586 513.2452] +/Subtype /Link +/A << /S /GoTo /D (a00106) >> +>> endobj +2954 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 421.7425 190.8904 431.6702] +/Subtype /Link +/A << /S /GoTo /D (a00086) >> +>> endobj +2957 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 365.6635 271.1301 375.5912] +/Subtype /Link +/A << /S /GoTo /D (a00162_g26440a35353cb457747a4cea372c62e9) >> +>> endobj +2959 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 353.119 280.5446 363.0467] +/Subtype /Link +/A << /S /GoTo /D (a00162_g30fe27cba3c14ae7f9a7f118144af43a) >> +>> endobj +2961 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 339.5983 213.038 350.5022] +/Subtype /Link +/A << /S /GoTo /D (a00162_ge28f6cb60e86088d8886d0f804b4f37c) >> +>> endobj +2963 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 328.03 176.5052 337.9577] +/Subtype /Link +/A << /S /GoTo /D (a00162_g3212e70c55244608ac16316888c354f0) >> +>> endobj +2965 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 315.4855 176.4952 325.4132] +/Subtype /Link +/A << /S /GoTo /D (a00162_g6cda47c85ce1b58b501b44ac9cccc50e) >> +>> endobj +2967 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 302.941 224.8339 312.8687] +/Subtype /Link +/A << /S /GoTo /D (a00162_ge429c985be88ed048f382511c9ff00de) >> +>> endobj +2969 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 290.3965 198.4231 300.3242] +/Subtype /Link +/A << /S /GoTo /D (a00162_g19709735f29dafeabb91e0882231f9f1) >> +>> endobj +2971 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 277.8521 206.5625 287.7797] +/Subtype /Link +/A << /S /GoTo /D (a00162_g7e904ab59f7ee134cf3218a8219e7e29) >> +>> endobj +2973 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 265.3075 211.4442 275.2352] +/Subtype /Link +/A << /S /GoTo /D (a00162_g5025948dd998f65a13a375a37aa5edf5) >> +>> endobj +2975 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 252.763 196.052 262.6907] +/Subtype /Link +/A << /S /GoTo /D (a00162_gbfc1d8d15852318927cda30e1bc0470a) >> +>> endobj +2977 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 240.2185 209.3322 250.1462] +/Subtype /Link +/A << /S /GoTo /D (a00162_gaaaaf66ea67900c36d01136d5bad1168) >> +>> endobj +2979 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 227.6741 213.2175 237.6017] +/Subtype /Link +/A << /S /GoTo /D (a00162_g57aca709a33690cd4fb73fe199fa1bdd) >> +>> endobj +2981 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 215.1295 207.0906 225.0572] +/Subtype /Link +/A << /S /GoTo /D (a00162_g8b600918f84783490fd791ce773175ab) >> +>> endobj +2983 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 202.585 215.23 212.5127] +/Subtype /Link +/A << /S /GoTo /D (a00162_g6b2d00412304e2d95e7b853cce5858b0) >> +>> endobj +2985 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 190.0406 220.1117 199.9682] +/Subtype /Link +/A << /S /GoTo /D (a00162_g3318dec654781e9d6d8ec873636660c6) >> +>> endobj +2987 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 177.496 204.7195 187.4237] +/Subtype /Link +/A << /S /GoTo /D (a00162_gf784a76fe619452eddf87e6376a4bf9d) >> +>> endobj +2989 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 164.9515 217.9996 174.8792] +/Subtype /Link +/A << /S /GoTo /D (a00162_g3a4852e2372e34e1c0142d1147fbe027) >> +>> endobj +2991 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 152.4071 223.1601 162.3347] +/Subtype /Link +/A << /S /GoTo /D (a00162_gaa60ca995565b799bb958c806e933665) >> +>> endobj +2994 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 95.3518 198.6315 106.2557] +/Subtype /Link +/A << /S /GoTo /D (a00086) >> +>> endobj +2995 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.1296 95.3518 276.389 106.2557] +/Subtype /Link +/A << /S /GoTo /D (a00162_g4647b76d0ef50a5305505041f5775a37) >> +>> endobj +2946 0 obj << +/D [2944 0 R /XYZ 90 757.9346 null] +>> endobj +1317 0 obj << +/D [2944 0 R /XYZ 90 739.9346 null] +>> endobj +162 0 obj << +/D [2944 0 R /XYZ 90 739.9346 null] +>> endobj +2947 0 obj << +/D [2944 0 R /XYZ 90 719.4886 null] +>> endobj +2948 0 obj << +/D [2944 0 R /XYZ 90 635.0055 null] +>> endobj +2953 0 obj << +/D [2944 0 R /XYZ 90 439.3093 null] +>> endobj +2955 0 obj << +/D [2944 0 R /XYZ 90 383.2303 null] +>> endobj +2956 0 obj << +/D [2944 0 R /XYZ 90 383.2303 null] +>> endobj +2958 0 obj << +/D [2944 0 R /XYZ 90 369.6486 null] +>> endobj +2960 0 obj << +/D [2944 0 R /XYZ 90 357.1041 null] +>> endobj +2962 0 obj << +/D [2944 0 R /XYZ 90 343.5833 null] +>> endobj +2964 0 obj << +/D [2944 0 R /XYZ 90 332.0151 null] +>> endobj +2966 0 obj << +/D [2944 0 R /XYZ 90 319.4706 null] +>> endobj +2968 0 obj << +/D [2944 0 R /XYZ 90 306.9261 null] +>> endobj +2970 0 obj << +/D [2944 0 R /XYZ 90 294.3816 null] +>> endobj +2972 0 obj << +/D [2944 0 R /XYZ 90 281.8371 null] +>> endobj +2974 0 obj << +/D [2944 0 R /XYZ 90 269.2926 null] +>> endobj +2976 0 obj << +/D [2944 0 R /XYZ 90 256.7481 null] +>> endobj +2978 0 obj << +/D [2944 0 R /XYZ 90 244.2036 null] +>> endobj +2980 0 obj << +/D [2944 0 R /XYZ 90 231.6591 null] +>> endobj +2982 0 obj << +/D [2944 0 R /XYZ 90 219.1146 null] +>> endobj +2984 0 obj << +/D [2944 0 R /XYZ 90 206.5701 null] +>> endobj +2986 0 obj << +/D [2944 0 R /XYZ 90 194.0256 null] +>> endobj +2988 0 obj << +/D [2944 0 R /XYZ 90 181.4811 null] +>> endobj +2990 0 obj << +/D [2944 0 R /XYZ 90 168.9366 null] +>> endobj +2992 0 obj << +/D [2944 0 R /XYZ 90 111.6113 null] +>> endobj +2993 0 obj << +/D [2944 0 R /XYZ 90 111.6113 null] +>> endobj +2943 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F11 705 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2998 0 obj << +/Length 1852 +/Filter /FlateDecode +>> +stream +x诃Z蹘6}鱓 噖灞庭 Rt摳OI(^碲-o|&%R.&佃"@謻巉3g/2L)䞍iFj抭ˇ隧凬镳螂 港Wx*<{挪iF2旁tq[YP@$6]軀)耟~$-洸8诌舿t鰪?~Y紳 +j +}貵繼澕\4给$W`焲鶥7幺 %<3r鷢_(,c禹D0羁l&';鯈陙J嗝 檾斸竨=蜽y\锸肞萒# 繙P烩AJ*"g;轴g芼P|奍髫燫~A悓*睁溠賜}芋 ;卷澝|p鳷=6奵E2遧z羋抙肈" +!3刬PI}2痼W:朗僚聡HX拆Q忕'路& 喏=(zvm嘦辟|齸Z{qh乑肬"曭裈癗畋嫠U^┱砏 Ci嘹i譯Jy jY|蔯d(鬸P.[4P|:5鑄塲((STg鎙詚oSX 駋U8E豆%C(蒃犾2馫\晬/A|K?0#~躱Co汎-遚彚g鱈齨{擐狙DdH緓<*暹鄃#嘿 +阺嚛m Sht\鑈x槏醶.]漉燐齖萗曕1vC R|X7粐乘 酺楪4Ld寴L鑄脁X篴儽唹鹠&魶n槚1 彚g鬈0挥颃40偁鲁D<*暹('Y'鸒0囥~w&蠄T ~mA3_艶vk@? h]=I锷L.伱擊4K=*賧伖H闩濟 &郛鍃D着C鑊 楀雛`}fp荅⿰忂务ξp嬞JzzA.UF40s乖 VkK;1╲躱S钚o恨-遚 +彚g,硟讓P +&廕y菂;JG7鲏7z %釢閑1 5k`67榿u綴[V)8鍉藯6炭瘖蜴2棏`RgO矯8儍蔙;栦rh0洛刜襄栠$椲綠p9E蟦C隴菵朒侴ボ 嗜廂鋤傄牁ㄙ鬧举.嘦Q^枽埤q懱D]7' eB妀鄏(露.;\ d Qe7殱時蕹f澴袈I奄`L^u顴乥,;=颚胎c?靚=)鄞检P6-鯡刽dhn抣/"=妅M +{擡{詊婴付艰犑淨\沾詘 FA墵:'跐亨甆鯡K +岩赨囜V嗁煤Y鯐e#u`@E`鳅7醯g觺S壻桍-e韊晽A訿C澝琂Q鮹|厠 舌eeU 0傒is 币:;^寽烏H4糎^爕y蛪栐5(D] [SMkj^[.纣|[ #B4`6t鑯 -6R永:Tm !繞臩袪r蓂稉s鑪酜鈉hM!絲^荱鋲"滱I婋 黝*=OD?z氳78Kx愿I"枠鬈58Cb專雳傆俏=C8锅藈锞^ :忞=鈚Ь 熉鰼{ 羿8(&擳'&蜑g! 4.踺/$\v隘嫴冂G/d>o炣`/}硒s骝(UN鲧 W鎛閡zs硇劧U蚺钋匣㈧η灧 溏?狻紼endstream +endobj +2997 0 obj << +/Type /Page +/Contents 2998 0 R +/Resources 2996 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2942 0 R +/Annots [ 3002 0 R 3004 0 R 3005 0 R 3006 0 R 3008 0 R 3009 0 R 3010 0 R 3011 0 R 3015 0 R 3018 0 R ] +>> endobj +3002 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 704.6952 196.7787 715.5991] +/Subtype /Link +/A << /S /GoTo /D (a00162_g52c3c5ab1b1aa0659b5e465f7fbcc409) >> +>> endobj +3004 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 692.285 175.2098 703.189] +/Subtype /Link +/A << /S /GoTo /D (a00162_g984c4a8b65a3cb35460b073a40568c25) >> +>> endobj +3005 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 654.5133 188.49 665.4173] +/Subtype /Link +/A << /S /GoTo /D (a00162_g123c95a7bb55143cabba92446ce8f513) >> +>> endobj +3006 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 616.7416 185.1725 627.6455] +/Subtype /Link +/A << /S /GoTo /D (a00162_gf11c966b0e4f4ecaa73deb14bfb6830f) >> +>> endobj +3008 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 579.3435 181.2968 589.8738] +/Subtype /Link +/A << /S /GoTo /D (a00162_g82ff99d50221f7c17df57dc6092ffc97) >> +>> endobj +3009 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 566.9333 172.998 577.4637] +/Subtype /Link +/A << /S /GoTo /D (a00162_g69b075ef7e4d7bcf5a903d3d75baac02) >> +>> endobj +3010 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 529.1616 176.8634 539.692] +/Subtype /Link +/A << /S /GoTo /D (a00162_gd1f18f739da7703628c3663209463a0d) >> +>> endobj +3011 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 491.0163 180.1912 501.9203] +/Subtype /Link +/A << /S /GoTo /D (a00162_g86beee1f69d05b16022dfb430470e9ce) >> +>> endobj +3015 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 334.2427 142.7416 355.1542] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +3018 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 137.7572 142.7416 158.6686] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2999 0 obj << +/D [2997 0 R /XYZ 90 757.9346 null] +>> endobj +3000 0 obj << +/D [2997 0 R /XYZ 90 723.1038 null] +>> endobj +3001 0 obj << +/D [2997 0 R /XYZ 90 723.1038 null] +>> endobj +3003 0 obj << +/D [2997 0 R /XYZ 90 708.6802 null] +>> endobj +3007 0 obj << +/D [2997 0 R /XYZ 90 597.5219 null] +>> endobj +3012 0 obj << +/D [2997 0 R /XYZ 90 454.7247 null] +>> endobj +3013 0 obj << +/D [2997 0 R /XYZ 90 428.2397 null] +>> endobj +3014 0 obj << +/D [2997 0 R /XYZ 90 428.2397 null] +>> endobj +3016 0 obj << +/D [2997 0 R /XYZ 204.8181 294.2849 null] +>> endobj +3017 0 obj << +/D [2997 0 R /XYZ 90 278.0449 null] +>> endobj +3019 0 obj << +/D [2997 0 R /XYZ 295.0094 96.348 null] +>> endobj +2996 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F50 1172 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3024 0 obj << +/Length 1356 +/Filter /FlateDecode +>> +stream +x诘XKs8倔+|4U嫝置wB睮懬&蘨f*e@j纅嵸LH杔l,R蒚萺豢頥亙8!v|睿2蠙畕貀戂W=0螨*瘅竪vIB'D[眀 <襗R砼娚侹皐uj壗銛b$玒@}9咁擱+A樖!梋莢jQ9l1k="pd柂J曱遥>溫O籂咻OZ鸌)vZ?閷尉oh麑~舫薠2E8镍PSM%W癸'匟K澢斛斧#鼡f4壋}5~]埜V{迳辫筗L&#+禪﹙&嚇b{溕]酗fr覤+揔庇樮=搹7碮櫶莌H讴'B內訨潢逖闉嶧廽j伎}鱹孚汭崘0挣)<镎5嘩sC,>tk梍;牭T#u枖<侣遒晥Ee卌艡uY硧媠3盔溞sb.(ejx嗮娤Ij镀Mf祴渥蹕h躝獘EK攡/ ]endstream +endobj +3023 0 obj << +/Type /Page +/Contents 3024 0 R +/Resources 3022 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2942 0 R +/Annots [ 3027 0 R 3029 0 R 3031 0 R ] +>> endobj +3027 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 583.7986 142.7416 604.7101] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +3029 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 371.5861 142.7416 392.4976] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +3031 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 198.9704 142.7416 219.8819] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +3025 0 obj << +/D [3023 0 R /XYZ 90 757.9346 null] +>> endobj +3026 0 obj << +/D [3023 0 R /XYZ 90 739.9346 null] +>> endobj +3020 0 obj << +/D [3023 0 R /XYZ 200.3847 522.0587 null] +>> endobj +3028 0 obj << +/D [3023 0 R /XYZ 90 505.3316 null] +>> endobj +3021 0 obj << +/D [3023 0 R /XYZ 273.161 309.8462 null] +>> endobj +3030 0 obj << +/D [3023 0 R /XYZ 90 293.119 null] +>> endobj +3022 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3034 0 obj << +/Length 1133 +/Filter /FlateDecode +>> +stream +x谕XK徾6钧W枧j3|執m踡6) 5甑\[&綜墷2礒//z屾鹒鏇!MH8 N~ ~C)冕乨滕惵M涐鐟*垃R 省髝骒倎wr送6[Wn汴百泑塅獫G蘓~o嶰隧逗蘤牔邧O鹠孢=3T隅皖囡珱"麂浡败锓浾8鷹涒盵 炾Di[k墙:F揸泓緉咚瓄z磲騤業5蓙=批Ui:Z蠆O +惌yQ鄪僸砆7F>俒 紞x嵝;$鹫惱%O 叠WZ1.%<槙+P縅2nH/ 篴鐏OV碊QCC秕瞂V>囉8f`胈跀p7戅f=E<髌n-躢m7h5聇#结砬8酎嗈 絨w,朎痌8蛌ャVD乎梈愞暛隉).袱崸壴>Vno5^\XQ蠵kcYj朾 +m渌女虶8t:熮咿]蒉䙡踽C坷H?疟戔W跧锸寙邮矸嚩儉轆{;x诃猋墵袠*iDd蘁uE< e稸J 鱫7愺秃?@u#s鳞彵棂)X[8$4,駝*Hr買畑簡!40 6@ !8n@w\-鞐 微鐆H涊ΨT!汅駆H淈1鞹a贱)0愰UN嗀+裏?J64蚻J氅?蒺$绶.;:陱#r繜靖q '䴗鴎瘧Ww裙k躋C&祛y?钧3忺埙噇譓;认?:endstream +endobj +3033 0 obj << +/Type /Page +/Contents 3034 0 R +/Resources 3032 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2942 0 R +/Annots [ 3037 0 R 3039 0 R 3040 0 R 3042 0 R 3045 0 R 3048 0 R 3050 0 R ] +>> endobj +3037 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [318.3113 672.5415 370.5648 683.4455] +/Subtype /Link +/A << /S /GoTo /D (a00158) >> +>> endobj +3039 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 617.7467 184.9831 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00101) >> +>> endobj +3040 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 578.8924 184.4252 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00100) >> +>> endobj +3042 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 495.0563 211.8219 504.984] +/Subtype /Link +/A << /S /GoTo /D (a00078) >> +>> endobj +3045 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 437.2279 213.038 448.1318] +/Subtype /Link +/A << /S /GoTo /D (a00163_ge28f6cb60e86088d8886d0f804b4f37c) >> +>> endobj +3048 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 380.3757 217.7102 391.2796] +/Subtype /Link +/A << /S /GoTo /D (a00163_g03070adbf8faab0f34f87c1270964306) >> +>> endobj +3050 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 367.7979 202.2283 378.3282] +/Subtype /Link +/A << /S /GoTo /D (a00163_gb97849f0d3ea858eee790b69591e6427) >> +>> endobj +3035 0 obj << +/D [3033 0 R /XYZ 90 757.9346 null] +>> endobj +1318 0 obj << +/D [3033 0 R /XYZ 90 739.9346 null] +>> endobj +166 0 obj << +/D [3033 0 R /XYZ 90 739.9346 null] +>> endobj +3036 0 obj << +/D [3033 0 R /XYZ 90 717.1645 null] +>> endobj +3038 0 obj << +/D [3033 0 R /XYZ 90 634.6393 null] +>> endobj +3041 0 obj << +/D [3033 0 R /XYZ 90 513.03 null] +>> endobj +3043 0 obj << +/D [3033 0 R /XYZ 90 456.1778 null] +>> endobj +3044 0 obj << +/D [3033 0 R /XYZ 90 456.1778 null] +>> endobj +3046 0 obj << +/D [3033 0 R /XYZ 90 399.3256 null] +>> endobj +3047 0 obj << +/D [3033 0 R /XYZ 90 399.3256 null] +>> endobj +3049 0 obj << +/D [3033 0 R /XYZ 90 384.3607 null] +>> endobj +3032 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3053 0 obj << +/Length 2297 +/Filter /FlateDecode +>> +stream +x讠Z]s酆}鳢蠰_7埣J庠嶿[轫掏,1宝蹭+KM襙I罓@.豽2Q驷瀮=K`)倣(點#KGFb呍E }??a烷S8~櫇#Kz4鸝E袑(硒h饵m虡湝r竼7pㄨZ\m棁uY無嚙r碂颳弁澉偾撻,7簲刑瑶q蜊飔}O(禤o饏f-=滺.鼦跎萆連滫DuA尊葶c捓_ 囻歾|歱19e斠癔錍=溑z僸悒0b暘@ +%@X饧芟W雛伽Y霽>!HD檰8\蓴W/鮡鍎忶映O硭鉽抡鴞s~^|樛nZZ9蜥>蝵[.雙涻v(圐蛒1_鎷齴,\ +涬 茜CY甛瀄峁琖'~6狼裨T 綗皅!麇癬璚鰝~盷杘:*XKAl羍]z顝籵唾郏{,喼5(邝XA&k 飾簖.w_á馃 a&W艖湥;!2R襤N袩R藟鋔h +<G熌m'c!U!5<揊胩呍 +.裿h.>K窛嬘jg}赴Pl鞭爵鐗qNhKp繿=鞙H<4唘芩I4t-牕聡(fY}穜kL:*瓑う窛壩wápR2DqL_8WI2(\臅@(C +輪稩獷4N俼{D?痾xF纐訴蛺荄呇D鐲傲kK猌-PG 胎喟挅P+D╬*擘伋sJ?旙 ^{彟踟顋廠v稝$档帧DS姅歌F3SD个贩鉅 &x<,_sQ@p轕u-轑俚槆!壽EZyc]碲掺(t字猏閥X摘鷉瞺姪J藆[誌[z樲瀃^gM<L杬璪n;,鰢輨阄)Tr7Р发cR柇h旕耽3季/説訆啣D@笾fF*毫4$q垭 TJr{q +袑*< !嶝yQX槝Y=?灄町辴Z- 俁裬u @艾(惬^ou嬿O薴 乖膒脦塞蓥鴾$畵耠魲窏覱雏纷熮輄濤泾箜邋鬝諵铔褱TF宍通m媋攙. 逼瞺#f粐錷#踧轥{;丽踧I\'泱磐屯鄢怂g辛JV郰 =,(翉=A軸6m}漸@a2ag諄囧c岅 u▋鶒:纄$q:0=;熮蕙?3颁OM@e4q藞-塽X M磿{ @艾(惬^o}7o}泑I\扎髩[}飧鄆TJ欼R@e詑CG鈞WF龒} 缞烂駿1FE髥"坹A媩H2捀h冀季Kf~n$1JK<1昋膷!\+]蜟矦镲韈婕囧澢#鐀捺|;砾鐀I荜'瀑戽蒎櫥走篘梱-)S酇 椝騥讃6[繪"蹊> endobj +3056 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 641.2029 187.822 651.7332] +/Subtype /Link +/A << /S /GoTo /D (a00164_gc4b119801e50cc1824498a1cdf9adc37) >> +>> endobj +3057 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [191.4287 641.2029 284.16 651.7332] +/Subtype /Link +/A << /S /GoTo /D (a00164_g6b942c1ef22f8cd1a726ef3364c9fbea) >> +>> endobj +3058 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.7667 641.2029 375.5365 651.7332] +/Subtype /Link +/A << /S /GoTo /D (a00164_g23705efb9077187881f094fc9be13bde) >> +>> endobj +3059 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.1432 641.2029 461.364 651.7332] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf11d9915ec12a8cdd9fdcbb5e8fcd5c7) >> +>> endobj +3060 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [464.9707 641.2029 513.9963 651.7332] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf8f12c820cc08da32aa62898bfc02db3) >> +>> endobj +3061 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 629.2477 123.0855 639.778] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf8f12c820cc08da32aa62898bfc02db3) >> +>> endobj +3063 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 565.3112 177.3318 574.1579] +/Subtype /Link +/A << /S /GoTo /D (a00111) >> +>> endobj +3064 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 521.7174 176.7738 530.5641] +/Subtype /Link +/A << /S /GoTo /D (a00110) >> +>> endobj +3066 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 426.7436 202.5067 436.6713] +/Subtype /Link +/A << /S /GoTo /D (a00097) >> +>> endobj +3069 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 361.1235 309.3265 371.0511] +/Subtype /Link +/A << /S /GoTo /D (a00164_g5a5bfd7e9060903893481db90645187b) >> +>> endobj +3071 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 344.826 213.038 355.73] +/Subtype /Link +/A << /S /GoTo /D (a00164_ge28f6cb60e86088d8886d0f804b4f37c) >> +>> endobj +3073 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 330.4811 255.0802 340.4088] +/Subtype /Link +/A << /S /GoTo /D (a00164_g31be289fd8ec3fe09b0088165d13976d) >> +>> endobj +3075 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 315.1599 302.4923 325.0876] +/Subtype /Link +/A << /S /GoTo /D (a00164_g8714af98a550f10dc814db92b08d1b0d) >> +>> endobj +3077 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 299.8388 290.1386 309.7664] +/Subtype /Link +/A << /S /GoTo /D (a00164_gc4357cec23abca29d2bb885803625a6a) >> +>> endobj +3079 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 284.5176 269.4366 294.4453] +/Subtype /Link +/A << /S /GoTo /D (a00164_g4d457c50e6f2cef57167c3804ce8bf7c) >> +>> endobj +3081 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 269.1964 275.7527 279.1241] +/Subtype /Link +/A << /S /GoTo /D (a00164_g863c94b0ed4a76997e53a3ccd5d0b6c3) >> +>> endobj +3083 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 253.8753 230.8912 263.8029] +/Subtype /Link +/A << /S /GoTo /D (a00164_g40fb1fb2d990ce04ae9bbee275627c03) >> +>> endobj +3085 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 238.5541 217.6111 248.4818] +/Subtype /Link +/A << /S /GoTo /D (a00164_gda99954e0f6905091885934e86c278cc) >> +>> endobj +3087 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 223.2329 239.2498 233.1606] +/Subtype /Link +/A << /S /GoTo /D (a00164_gd895686859ae7d178d31be04eb0a1a97) >> +>> endobj +3089 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 207.9117 236.0418 217.8394] +/Subtype /Link +/A << /S /GoTo /D (a00164_g38af81a4c9884ce89803fc3e52383112) >> +>> endobj +3091 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 192.5906 176.5052 202.5182] +/Subtype /Link +/A << /S /GoTo /D (a00164_g3212e70c55244608ac16316888c354f0) >> +>> endobj +3093 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 177.2694 176.4952 187.1971] +/Subtype /Link +/A << /S /GoTo /D (a00164_g6cda47c85ce1b58b501b44ac9cccc50e) >> +>> endobj +3095 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 160.9719 190.8811 171.8759] +/Subtype /Link +/A << /S /GoTo /D (a00164_g71e1b022f7b7fa3a154f19372b239935) >> +>> endobj +3098 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 95.3518 210.2479 106.2557] +/Subtype /Link +/A << /S /GoTo /D (a00097) >> +>> endobj +3099 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [210.746 95.3518 288.0054 106.2557] +/Subtype /Link +/A << /S /GoTo /D (a00164_gdc5aec3587b2c55b714a6c2f37b56cba) >> +>> endobj +3054 0 obj << +/D [3052 0 R /XYZ 90 757.9346 null] +>> endobj +1319 0 obj << +/D [3052 0 R /XYZ 90 739.9346 null] +>> endobj +170 0 obj << +/D [3052 0 R /XYZ 90 739.9346 null] +>> endobj +3055 0 obj << +/D [3052 0 R /XYZ 90 718.4222 null] +>> endobj +3062 0 obj << +/D [3052 0 R /XYZ 90 584.5736 null] +>> endobj +3065 0 obj << +/D [3052 0 R /XYZ 90 447.0871 null] +>> endobj +3067 0 obj << +/D [3052 0 R /XYZ 90 381.4669 null] +>> endobj +3068 0 obj << +/D [3052 0 R /XYZ 90 381.4669 null] +>> endobj +3070 0 obj << +/D [3052 0 R /XYZ 90 365.1085 null] +>> endobj +3072 0 obj << +/D [3052 0 R /XYZ 90 348.8111 null] +>> endobj +3074 0 obj << +/D [3052 0 R /XYZ 90 334.4662 null] +>> endobj +3076 0 obj << +/D [3052 0 R /XYZ 90 319.145 null] +>> endobj +3078 0 obj << +/D [3052 0 R /XYZ 90 303.8238 null] +>> endobj +3080 0 obj << +/D [3052 0 R /XYZ 90 288.5027 null] +>> endobj +3082 0 obj << +/D [3052 0 R /XYZ 90 273.1815 null] +>> endobj +3084 0 obj << +/D [3052 0 R /XYZ 90 257.8603 null] +>> endobj +3086 0 obj << +/D [3052 0 R /XYZ 90 242.5391 null] +>> endobj +3088 0 obj << +/D [3052 0 R /XYZ 90 227.218 null] +>> endobj +3090 0 obj << +/D [3052 0 R /XYZ 90 211.8968 null] +>> endobj +3092 0 obj << +/D [3052 0 R /XYZ 90 196.5756 null] +>> endobj +3094 0 obj << +/D [3052 0 R /XYZ 90 181.2544 null] +>> endobj +3096 0 obj << +/D [3052 0 R /XYZ 90 114.388 null] +>> endobj +3097 0 obj << +/D [3052 0 R /XYZ 90 114.388 null] +>> endobj +3051 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3107 0 obj << +/Length 2315 +/Filter /FlateDecode +>> +stream +x诘沋沁鏢鑡忌耷dm孿虬04R螲垘o淥焍蓞e鴄ぶ揩獘蹉&3 痊3%j棾政蟐囹鈤~靠Z<65捠兮钩 斝賐斖逷5椻眪瞋V籱{柑[|渜=!耚}x^]P侷b|釛唣l 羮|缊5Z虀/懄〕=犸翈籥熨aGj劆(<黝zX]肚脃,d瑦绩V4要 髫馘N9/脻] .〔6滱_z瀬萆漖扻駖儶鄻A=愀Q屵W龕諸/p0宰o攦嗩趌桟墶竢玸]帡陣慑.m敊欞蜞萚烗B鄕Jn砄m?_羡肒{v醶滚9f苖居.1k4⒏窴d.6橀 +~}楕-庅╋妐爬钊AU侭蚀nzA攋殩qв'蟊 佐^Vn鷾迁轶~C忧~'哤骴&k畕罬讍讞豈kc繀戧雓;vn/4纟dU! +3 膴糈ǘdT逡%V琥A/腈O楀鲂?}謁2=狍to9}攟綳蛂?軼聕杍uV侎20懥0y権I偒&胬n +対桘d百&ytU! +!iz蚑 m劑笴0d撎D声炯Pz>s 覕楁AV%6樶ム左掵齰^亦*x)9皼騜栞愦0稠ヲ +狟擩9謔Z2誅*i壴9Z糽挅悮锾 +棃梢:7寄姉昚 鎄甥 ~虞大鎥n*潾医02踚N_ +h`7モu$j沃J瘼蔪屡Y/!<@wS薈の襦e')簖咐q俴侨H=*2QI*tx9軓qx1賳鲶qu軨鹚顠輋嬤6斄杵]%D湱/sb楅搡玟愖64I篧!=/0蚻{唁 +怓軦亦诅Sw侳齉MO蠤酦刑塕=3晡蟗┹保鳇tB齥d燞慰}狱斌ogW该壩拏V犈瓶惥!翱/ 藿牶莸's愞嫮譻{.縄妻p'堭駰0;態~欲鷀鳢$j 顄|処蛀鲂灃!>W燑噺&賅鲄PD貽踥c轵=鰶弊巜俻気煆b N忶#?獀yendstream +endobj +3106 0 obj << +/Type /Page +/Contents 3107 0 R +/Resources 3105 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3130 0 R +/Annots [ 3110 0 R 3111 0 R 3112 0 R 3113 0 R 3114 0 R 3115 0 R 3117 0 R 3118 0 R 3119 0 R 3121 0 R 3123 0 R 3124 0 R 3125 0 R 3126 0 R 3127 0 R ] +>> endobj +3110 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 704.9751 226.0986 715.5054] +/Subtype /Link +/A << /S /GoTo /D (a00164_gc4b119801e50cc1824498a1cdf9adc37) >> +>> endobj +3111 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [276.1106 704.9751 300.7979 715.5054] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3112 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 667.016 220.0116 677.5464] +/Subtype /Link +/A << /S /GoTo /D (a00164_g6b942c1ef22f8cd1a726ef3364c9fbea) >> +>> endobj +3113 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 618.0981 215.05 628.6284] +/Subtype /Link +/A << /S /GoTo /D (a00164_g23705efb9077187881f094fc9be13bde) >> +>> endobj +3114 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 569.1801 209.501 579.7104] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf11d9915ec12a8cdd9fdcbb5e8fcd5c7) >> +>> endobj +3115 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 520.2621 205.0776 530.7925] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf8f12c820cc08da32aa62898bfc02db3) >> +>> endobj +3117 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 471.3442 192.9132 481.8745] +/Subtype /Link +/A << /S /GoTo /D (a00164_g3caacabb2fe1c71921e1a471719ccbd2) >> +>> endobj +3118 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [172.012 433.0115 229.8943 443.9154] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) >> +>> endobj +3119 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [279.9163 433.0115 304.6036 443.9154] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3121 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 395.426 200.0962 405.9563] +/Subtype /Link +/A << /S /GoTo /D (a00164_g1d34be506a61db90dd7829117efdf8cf) >> +>> endobj +3123 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 357.0933 208.3951 367.9973] +/Subtype /Link +/A << /S /GoTo /D (a00164_g9e6d2864f390a4ba1ac60dc65e2b9815) >> +>> endobj +3124 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 344.5895 226.5766 355.4935] +/Subtype /Link +/A << /S /GoTo /D (a00164_g4433d3af16ea083a81576d0f18ba57c9) >> +>> endobj +3125 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 307.0041 221.0375 317.5344] +/Subtype /Link +/A << /S /GoTo /D (a00164_g41e616d3fcc17e0aabfe8ab45ef0d30f) >> +>> endobj +3126 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 269.045 224.913 279.5753] +/Subtype /Link +/A << /S /GoTo /D (a00164_g0e0ea5f24b77f124ba33bcbc7ede5bfb) >> +>> endobj +3127 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 230.7123 236.5493 241.6163] +/Subtype /Link +/A << /S /GoTo /D (a00164_g2a939aa4fcffabbce1dc1f784a7e0ad3) >> +>> endobj +3108 0 obj << +/D [3106 0 R /XYZ 90 757.9346 null] +>> endobj +3109 0 obj << +/D [3106 0 R /XYZ 90 723.1038 null] +>> endobj +3116 0 obj << +/D [3106 0 R /XYZ 90 489.6163 null] +>> endobj +3120 0 obj << +/D [3106 0 R /XYZ 90 413.6981 null] +>> endobj +3122 0 obj << +/D [3106 0 R /XYZ 90 375.739 null] +>> endobj +3128 0 obj << +/D [3106 0 R /XYZ 90 194.2427 null] +>> endobj +3103 0 obj << +/D [3106 0 R /XYZ 90 167.7577 null] +>> endobj +3129 0 obj << +/D [3106 0 R /XYZ 90 167.7577 null] +>> endobj +3105 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3138 0 obj << +/Length 1587 +/Filter /FlateDecode +>> +stream +x谡Y蹘6}鱓柩 ,飹霏m掖Rぉ邟 汹艿Q[谑v擖}7eI  0E螑gI0#I帗T(g\&涖'旋rA莛 +芖!唰踱嘷h炰(桾&雥cA$(∩z鹡I埣YQx//拷仸繩偘m籍稐儾礴真rT骞8铽蜴铭这藕!v~ &墻齵耦N多攉F,螪 0"yN撱係?4v靲yahz溌2聮(#9Dea挜 J!G",MRN17醲窆8>蚤?C)Jh碠铜w貛闉 $8E)ab菴x剜榲駬痕鰫 磯 A +襋'W j>拨闊馘P斲=垝枷~= ?錑d哴 +8NE>5A[郁H撀7KS錅櫫逢^摘塄 州眡|嚸{,0'芞o}b呈e雾蕯2D絹鍍耱倵諂󹀳T'O{渇q$琄B!<7?僈w沛/齴杭繑迟陀yW渕k部z +皍u原 p蕍5>9t吊;肇t]慨護<,UH[u牂6k{N獑蓧オ眢8櫆罃A筽壓S /mhPJ懁.a霛頛/彈淤バ舌^藘至~n潈餘 >h 'u;&@ǹ斀 $u]餌*鉊1' ^灬犩5肮7烿&#k3>C&鼒煳佳0磦7N[麖弲偳 +谱h閶汜䥽'~延X+z#苡mEOX裬甭嫗蟌蔐脡W 裨 S ヅ6b儆>> E*频/D]>Nr$夘洢}c設志孛A韐`s祇4>M蠫謋j_梷嗹M贊珆h祇>6鼂k熜緈q.v悳=Y踣鞀26*宛秲E9〦窲:舗咊蛄p啫H纂)&枀C疊x納65駞葟鐖淨!=bhP1m'宷$8祚馎旵Q1娧w梆鑓*呒z桀kp^[C7n葶宏v煜谪&卮l1R颽第 K[?#祪1牬仝←u硇繚凇!z涜愫n砑uP剆札秜罊&w詯7轌粊K倣$L盤赼侢;h踃j悕ヮ潮-K=hc┗釾蜏0 w》睹<鋐杮癝臯.烢瓎娱斀*N窎娡鵕讠r礍胊F茁聱畻g术弋蕊誝]+蚫敶努%祝傘下螗飉6 婻G髬9飶牯處躁Q罵囙J眛}n 襪祭隄跅8S5貙沞*9}肃滍蜮輄閟w鶳 4x殢9]3x.窖窄▼#D>]哮鼿纣~t斀杉G咍瓹B桐蘂甾馍w脠銓vH9x 崀V綕 +u[&憁(cm朞鞛6D 蔯70q.璆糯0趆g]诘?渨N蓊縎 A[{6%匀瀈r摍簶怮bs1酧笜宁 猟泏1峃{1櫊彫图榯賕\L&鼒煳綐寙〗槍忧/& 1"撡7\L鸁u"<劻="咟/>鎿U柱N揕YfN釥 凨诟㈢鯮暘.?D騥選7钆=陗-e吩}堍Kw粞[獐`>n汐蟔bupA堃快唞揺ndstream +endobj +3137 0 obj << +/Type /Page +/Contents 3138 0 R +/Resources 3136 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3130 0 R +/Annots [ 3140 0 R 3141 0 R 3143 0 R 3144 0 R 3146 0 R 3147 0 R 3149 0 R 3150 0 R 3151 0 R ] +>> endobj +3140 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 718.6794 154.358 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3141 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 718.6794 222.4221 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3143 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 561.9505 154.358 584.202] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3144 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 561.9505 222.4221 584.202] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3146 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 405.2217 154.358 427.4731] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3147 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 405.2217 222.4221 427.4731] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3149 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [307.2537 340.6391 333.0469 351.2293] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3150 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 124.499 154.358 146.7505] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3151 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 124.499 222.4221 146.7505] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3139 0 obj << +/D [3137 0 R /XYZ 90 757.9346 null] +>> endobj +3104 0 obj << +/D [3137 0 R /XYZ 231.9163 693.5209 null] +>> endobj +3142 0 obj << +/D [3137 0 R /XYZ 90 672.2941 null] +>> endobj +3101 0 obj << +/D [3137 0 R /XYZ 231.9163 536.792 null] +>> endobj +3145 0 obj << +/D [3137 0 R /XYZ 90 515.5652 null] +>> endobj +3100 0 obj << +/D [3137 0 R /XYZ 231.9163 380.0631 null] +>> endobj +3148 0 obj << +/D [3137 0 R /XYZ 90 358.8364 null] +>> endobj +3133 0 obj << +/D [3137 0 R /XYZ 231.9163 96.348 null] +>> endobj +3136 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3154 0 obj << +/Length 2597 +/Filter /FlateDecode +>> +stream +x诃賿愣駗綛彋嗑%駔砙幗q旘冺阝Hk%rLR镞/M帤繤woD6&%棝缅o瀈駸w饈鼀魍w4踕(揟n鰪$HPB7/[(贿Q伔?逰-茕p.嫪mq帽FXH ` Qf躅菥шLC篦籣~脹#0黢#杋眣 F$髓鎟) 擉?铪捭q靻钩 耝s8 +S5 Q$顆c8)o 镞|Gx碔r 耒c鎬 +q@闌^'炏L螮昣 +'礯崩'x[桮張E坴 渿r膞8∷耸!镹={88\浧h蒒r掊n詖M慱怳#XQHR,沤E⒊ +-y彐/寶怊k裿nr煽毫C徉A赫Sq魦㧟X脗A[4 !0存炪X +ll娗厚全簨〦圼脁8AN 邥鼐 +s琵X獩颟砙~n飽囥檓F畮~隟贊奇O3寈&%旸3娆讄j<蘋黟粁3尕RS銂*:co廖b枠`p菙C鮌7檅3尃歙鬜z糣嚠+'┮赯0唠扑{Y= z1 +躋鴫鵣琱|f-`砎 @k=.啔!9訓憻婎迎诜cS%朐{虮 VH&l嘅煖炿碴娖噦z-$糂Z"cH2挱K+哯HhE,凤/乡bETk񐞊X>踞J綘f8h柛:L搰tvC>=-l嘃$詴@攄c晁b鸱鴺郙0 m NE.)6G怭摱3a?~[甁W尭糾熕蕸|埔翳#彶 >y:⺳坼]聆瑿唂*滥L槩$5く5甎[>U6 _y@妴呉凘 +悞馡m眖69誱7,湙H<袥I QM74缝-颾鴌\榒5疮D~&GXS5b`湳詳n"$ +襎Bnf%#懩J魭5UX}6)蜳1皣毌(暍吵煁 崭;訳U_ !飉蠗匔 謬 7h扛佀彰重М璌輖趒E .Ew獜尘+Jf5溔三R9Uz$樭#i?祄煁Ci豷ェ +暒JOi憑_鑩毸橔C秘:3>靨茐靹f蹮m鵬= 鯂3K襻厅d +N3x(.R2欖嫢膟 MK┎ 圍Iku灬w駟櫜o7?{謻狿"荝yuu疇聕奈!?蛎桪橏0I蟎a实輎5 k4`嗷虃鼾,世7MyO胖賅鏣%t1~L裺C5~o楺o)碿莝,*3いq6謲毫QNG祠覊暊2_0庋屄嗰I#|f帚譔B+`t-V闢鄔駟欄i7yW^奵}]l扫詧kH)_鉘*@萼* +襐聧慾悢1m3.~`疗G3堛]U_蟸搈吠畤 牝21虈O攬槧騿焱mU :=g+晈鵿9er#V|毫q+⒊敊壤M f/((c制7藱;l鳔t{餆K鐱剨Z{o蝙{, 搻廯┛1棇p煂ZmZ:藦:#楪暏6d 绾uVD販駊*S8R\7~o Q迹df鵝&s鯓24w7刮2Dlて塳苮^鼠佾紙蚳眿gB泭W瑆1詒侠'<査jh;鳸裁e菙頻o迌:眲箎蝃w丬檵[蝎m闂.尊1?7E~&濰Y崹6E[煟ZY&t肳_7像=W;洲)湷窱X鞚l<鮮S0m?鴐亮S3>/`5e離凒R",嵂_靅R1I@瘴蘖喚X)谓m%4!术璆S槚5虬j邵1Dkha跅(9 痛)4撃P+N銰>倩+殨 9V躥翴襢鰊觾彭B贕^@5#伳]蜁つ$&3軲履秊欝K樁]鉻 c[N+`1芑1岦覦f.愱z)汄` >F液夣Q豶;桮a}v,i 濟%?峂R(騱귝2DL瓳塌V羄r#<芵kz`馿芚戏蓏)諌啣勱>副%oG爟囻e羲<溡%峒肒W咋撮# ~<萓@c蕌vK貧\Xza揓#螀窤9@M)廳+嘊?龝防鴨&靮*哄hH@觅B7Dj9RF憔濱=4?_诪鏄Y屿槴0'蓪雞I鬚3攋妉%IJtR?ㄒ鱙v鳖液锉締:y稌葲5i嬦撳/ F軱9h 3攅E`kZ +`鲎薢Z%:hiLtAK1褖柶儹十P"3ぬ庙猭臥水E4A奒75駴跀觅航{頉讵|7'豝朢艣 >&x_*嗎Mm濣錗峱<桑W僖鐹09齤bΧМ袛{o浐膐u}络輁_r/诅or-熋輛Y;]螪wT舷7J皩8E醞鰒 +儦鶰暯c影0G2e~尊3aN蹙▕&镲渹夵- >氃~B鼥卜咱 臱e.蒀n簙鹕*蔜b咧|}*[蛐9lendstream +endobj +3153 0 obj << +/Type /Page +/Contents 3154 0 R +/Resources 3152 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3130 0 R +/Annots [ 3157 0 R 3158 0 R 3159 0 R 3161 0 R 3162 0 R 3163 0 R 3164 0 R 3165 0 R 3166 0 R 3167 0 R 3168 0 R ] +>> endobj +3157 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [289.4951 672.8902 354.0124 683.7941] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) >> +>> endobj +3158 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 591.1961 154.358 613.4475] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3159 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 591.1961 222.4221 613.4475] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3161 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [309.2858 514.7873 335.0789 525.6764] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3162 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [384.6716 461.1078 477.4029 471.6381] +/Subtype /Link +/A << /S /GoTo /D (a00164_g6b942c1ef22f8cd1a726ef3364c9fbea) >> +>> endobj +3163 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [305.943 449.1526 404.7613 459.6829] +/Subtype /Link +/A << /S /GoTo /D (a00164_gc4b119801e50cc1824498a1cdf9adc37) >> +>> endobj +3164 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7094 431.5282 269.4792 442.0586] +/Subtype /Link +/A << /S /GoTo /D (a00164_g23705efb9077187881f094fc9be13bde) >> +>> endobj +3165 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 419.1995 171.2245 430.1034] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf11d9915ec12a8cdd9fdcbb5e8fcd5c7) >> +>> endobj +3166 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [436.1989 401.5751 513.9963 412.479] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf8f12c820cc08da32aa62898bfc02db3) >> +>> endobj +3167 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 167.3556 154.358 189.6071] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3168 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 167.3556 222.4221 189.6071] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3155 0 obj << +/D [3153 0 R /XYZ 90 757.9346 null] +>> endobj +3156 0 obj << +/D [3153 0 R /XYZ 90 739.9346 null] +>> endobj +3131 0 obj << +/D [3153 0 R /XYZ 219.4825 549.7681 null] +>> endobj +3160 0 obj << +/D [3153 0 R /XYZ 90 534.2597 null] +>> endobj +3134 0 obj << +/D [3153 0 R /XYZ 231.9163 96.348 null] +>> endobj +3152 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F23 482 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3171 0 obj << +/Length 1552 +/Filter /FlateDecode +>> +stream +x诘YKo8钧W梃5朔ぼv4令v}k婤眎G@,ゲ糹ER栐M糖p踞蘰 0鼞 艫(B3.兺a亙=,,堓^窿'鴠絰伷A宐Ie稗U$A_杽D+ +g痱赳/ +$浟m==(3臼7适箪廑鈠][揇摸X|鶈-洒i#<#48,8en虬鴊駑颓lT啴'泂? +有\O"E崤奰寳淃ば部@竪Hr-寙裧綽 Q媠805$O阯髳6具缜2KVI_崩^继-寜e<6珢  垎!⺻W&if様鳀[泈倦loNE"樕氲缔6)3:枀JH r疕$寮耓WL10癹0`.jV帾媺*跀IfV +蹉>$蟜跷鈦步跉莼p/唛岸f譺鷃y£; at氬Z圶靀ZX8 (9氝晆堯"荮Y騚f7譳3h腛谥幥!仝iy遾"LD(姍d(!譡呸襹鰘溅_屆早踲薪*礧:o鬍鈹 N"鑚 A 鑒殴K瓥vS厫jfV弪t熜6\1驵-;踂P=4蹚=缭▄鉎 L0悢"喊#Z鵗鼿餬蜗<趒炽e渀D寬q魵j轜7! +壎#峪<鎖V*2懏DDP(讜Ou^W"f(U瞊LjDQcq<駥j5 H8ㄎ毈鯇笑'逸剘j)7 螛H墙.:1J.鷜58)9z|踛鑵5猒=窀j >7C@榗0拺酡+鶜f⿳)Z]殖姨:|稴>彡夏滾伸嬣A幧6曦~刏H]^嗝$~%結%rH獆~|揓漩沩礭^T *4>争@9EK1?(彚7A?Ej2擸e*(肱狞j獪Ψ69T贆漐1Bu5哪rm卦G氿蝞c鵯嗛蝜ey洬3seM2壐P弝QVX*鄚0湺uS 歛<[m[Jm[J筴K┌蕛%-ギ- 玀[J筴K闄G毨厾羻0 +6褨:鷷`-眈澼2↘(媔Gの│閝砿)迷单%-ザ-呎-璙L_7燯軤梅浒炃Xf$0`庑hf舂蝕F埞坅羚WChM5試L{5Y蟑6澒槫玶W産-禨J6N(荩Q簮P倖s藨1鑏.G叟懲-GF跤#=n3藨6鷮rdB吖迦歳d鞠鞺z]偱#ⅰDx8X焌3態捐聾鮡##劦b滵q+~報rIkQ魙nTW溨n萼搸';!詉饞睰j縼P尌.欞?柛^*W絆$艀桛&/耬ndstream +endobj +3170 0 obj << +/Type /Page +/Contents 3171 0 R +/Resources 3169 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3130 0 R +/Annots [ 3174 0 R 3175 0 R 3176 0 R 3178 0 R 3179 0 R 3181 0 R 3182 0 R 3183 0 R ] +>> endobj +3174 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.8972 671.9623 422.4145 682.8662] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) >> +>> endobj +3175 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 579.3293 154.358 601.5807] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3176 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 579.3293 222.4221 601.5807] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3178 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 375.5628 154.358 397.8143] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3179 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 375.5628 222.4221 397.8143] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3181 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [307.7182 234.8498 372.2355 245.7538] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) >> +>> endobj +3182 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 142.2168 154.358 164.4683] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3183 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 142.2168 222.4221 164.4683] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3172 0 obj << +/D [3170 0 R /XYZ 90 757.9346 null] +>> endobj +3173 0 obj << +/D [3170 0 R /XYZ 90 739.9346 null] +>> endobj +3132 0 obj << +/D [3170 0 R /XYZ 223.3579 533.4605 null] +>> endobj +3177 0 obj << +/D [3170 0 R /XYZ 90 513.0698 null] +>> endobj +3135 0 obj << +/D [3170 0 R /XYZ 246.6004 329.694 null] +>> endobj +3180 0 obj << +/D [3170 0 R /XYZ 90 308.3271 null] +>> endobj +3102 0 obj << +/D [3170 0 R /XYZ 222.8001 96.348 null] +>> endobj +3169 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3186 0 obj << +/Length 675 +/Filter /FlateDecode +>> +stream +x讠UMo0襟+8俆乻l洣峊)M憐Houv涺咦艪煌V8捞<蠜7豤魤y蠾膹E 妐殓旼;憔餻G&oR秕{獆JR椐>僁7事 +| 羰怎.糓/}N B婫T蛛潷隤擿-鏞镦桒)钜#繲"c@エ_y湶沿z_枷S&慅8j跳IP@FH ~匟偊,溎絩*匡蔎蛜琰邎 #襹kx貙莟檙`\9灧賤皇ad\羫_缁博瓡籑秙s炣爑1`郐q诠Σ湙7卾坮<2 >ら猭='m濧.议謍3箄丮瞩?(B%鰥鷰竩樉堿R蝱H罕,釯暗獇74rポ滑罘2娖敨哳輻庄i婟V徫lX匡t螝语RXn荄$%'週#(殻7Tfr +,憅1硦撼%3 +1x"5 7焳蘻诨!t=+I 12q鵙減號8 騼"sRO鬵B潰?萬開惯撜{, #⺄y煼a,凴N厇 齛6K镂M刲LB臸餤痷|y(炂Rvog厺Gv帘箣<>zSJ!k$Jb s"蛯e8r" ]6汵8>梫轲&g敐Q,JKHE写4鴛5爜<镓绘聍澁楉摈艖%endstream +endobj +3185 0 obj << +/Type /Page +/Contents 3186 0 R +/Resources 3184 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3130 0 R +/Annots [ 3189 0 R 3190 0 R ] +>> endobj +3189 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 637.9957 154.358 660.2472] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3190 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 637.9957 222.4221 660.2472] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3187 0 obj << +/D [3185 0 R /XYZ 90 757.9346 null] +>> endobj +3188 0 obj << +/D [3185 0 R /XYZ 90 739.9346 null] +>> endobj +3184 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3193 0 obj << +/Length 2082 +/Filter /FlateDecode +>> +stream +x诃Z]徾}鳢0栩騕b咭7h氒艵赽∝赸^{k{搇}IS4T-XK鲅溼#涉苄y +b勗篚脤物嚯W3鎫緜忒b婪~鄁n堁\蟇稭蛨鈱蟇涍層噆桠辁*篳劧o洤]<瑹挲:o筹W佖濂刦桍腺o轩騵=楻? %>業.n鰚鲞」`▂妷狯1I取紼>M竆^1J殁肦獷m惟>.]|谟b(俁 +J窻,"虆zY煫懋薷以q 丏TqW闎&侮4旣s洌l>往鲈~V韲賮徎黹糫;0溨仛.;q祕桺) 6m(+堟R6塣煑WB遗赹m5韎摱=x闟{X怼$B樑飻驖鲻xxp糠呛赲龌琏魲%鼂=qW>熚趺尊曟.猠:l煻汙貇\J$鶳韛畎fZ躂韩鰓O<揰憭冨,鰢璵Nj{U*b8g7c h泝QM(%%麧s甄bJ鄬曘;芇瓄糓f 7}f裎a~塻瘌\I\浢筞適蓕扝!*4^ e睵p螿c猆萜tp3Ut^B6塀B S&鷄ix軡|蚍m9wW钕躐禯粄岋a梯~]紨2m僰修鳌剛0%r>舭q捺o茋)>膕H鈜}!e%^ 潎肄嘼頁K獪 p!6\庉"倐2v蟀驾樰p轥o苙)v胹H X蛶4_翗IK;=Y3n 񲸱破M%R2C仡騆cI舍*.鴈uvcw玢愈蓴嬃绱d0a台acbe6秒 坩=5璏 k`.3bX囅鍚 喗侢駀mG[齖寙k屘T粒2 /JA+u+|m镔隣殮R5猼 @艾(鉋 疻好频4!棜糮=騫=>桭爪a'/o緖u}筝嫙~赙聟U*丧W垁蔰怓k鹔E髡C雤蜧;ipg稯濙垗uDB +6Nc47X(RT獩Y{订谆阧峦$m从偯桚;?翚Aの佥抿vbv莥冚c v飷O;濬爪駘4b瘼y箔究d.^\~晉 翵署T&(粆椵t鑀/G洷瑛,`瞷X^v1 睬d飷OO#; _W飤]%偝& 请P橠8鏒聏緵輍mP`Y罳茓^/x7/x梶傕4捀+oo鲩廿PD岩d +郠9姊 茦^Z 鉥畱盞 繢霭既c$2D巠'堒!"2濬讒|z磽邁0)Ki25皎贯DJu砷>詛s-*y9畇纓霭嘉c3t巠'柢!煝3濬纂j唪ve唩W2S徥q圪0=n恲跋唹箒1楦撡抿2c寫8o9鏉 s噟娞xI\/骳}\tl +e +暎70碚リ覂襧HiQ 9畉罃霭家c4攷y'(!煝4濬7Rz{丐B 棛"xT庉(RP裞‰!$焠Lh 1FB慵A铇w傂)B鉯$qzW濐嚭n]鍶郂9jC +D靴昽嘥啿2志鼛i霵y篐a4慛7f"/欳?w}廿{殎暠/攁秲/卉3/Z賲:tw呑姜zv燎7]柕蕏馜喿洟捃啑S20倳贼穱晴襂鈜襂_瓈:厬x-*C蝭 鉺蕑PE作曐耫p 辕墎Pb禧伞W愔@B 轿竵"f c 勼偶煐.埕,蜆阸# 熕"墈馦貘8羹搮螖粒r 涝結霒笺K1&5Q> endobj +3197 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 582.769 174.5722 593.6729] +/Subtype /Link +/A << /S /GoTo /D (a00113) >> +>> endobj +3198 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 542.4621 174.0143 553.3661] +/Subtype /Link +/A << /S /GoTo /D (a00112) >> +>> endobj +3199 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 502.1553 158.5226 513.0592] +/Subtype /Link +/A << /S /GoTo /D (a00114) >> +>> endobj +3201 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 415.9868 197.5356 426.8907] +/Subtype /Link +/A << /S /GoTo /D (a00079) >> +>> endobj +3203 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 356.821 232.9533 367.3513] +/Subtype /Link +/A << /S /GoTo /D (a00165_g1dbc635a2924806f42d7e3273a6a69b5) >> +>> endobj +3205 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 317.1168 224.1764 327.0445] +/Subtype /Link +/A << /S /GoTo /D (a00165_g7d7920c1e51cc4eef80206ebd6fee3f4) >> +>> endobj +3207 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 303.4391 220.9585 313.3668] +/Subtype /Link +/A << /S /GoTo /D (a00165_g8a645f8831837320c4e0c704e871abcf) >> +>> endobj +3209 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 289.7614 176.5052 299.6891] +/Subtype /Link +/A << /S /GoTo /D (a00165_g3212e70c55244608ac16316888c354f0) >> +>> endobj +3211 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 275.1074 190.8811 286.0114] +/Subtype /Link +/A << /S /GoTo /D (a00165_g71e1b022f7b7fa3a154f19372b239935) >> +>> endobj +3213 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 261.4297 188.1217 272.3337] +/Subtype /Link +/A << /S /GoTo /D (a00165_ge3f8f7deae69854853b0c8ebb82c380d) >> +>> endobj +3215 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 247.752 198.0741 258.6559] +/Subtype /Link +/A << /S /GoTo /D (a00165_g79f9a50c2cccb967d38a2eeb45d2fd75) >> +>> endobj +3217 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 234.0743 194.2087 244.9782] +/Subtype /Link +/A << /S /GoTo /D (a00165_gf7dd2757d1e766f65b01ba7c91c660a0) >> +>> endobj +3219 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 221.3729 188.6793 231.3005] +/Subtype /Link +/A << /S /GoTo /D (a00165_g820fb27c50e7bb4ac6d9eae1b06630a5) >> +>> endobj +3221 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 207.6951 190.8912 217.6228] +/Subtype /Link +/A << /S /GoTo /D (a00165_g14e276fa8e765f774f4162619f1c8fc1) >> +>> endobj +3224 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [187.2447 147.1795 226.8757 158.0834] +/Subtype /Link +/A << /S /GoTo /D (a00165_ge6f849e94cf6e214be8ffa9a548ecfcd) >> +>> endobj +3226 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 133.5018 190.1438 144.4057] +/Subtype /Link +/A << /S /GoTo /D (a00165_g648ddfb2dde2cc55034e4e0ea41cb6d1) >> +>> endobj +3227 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 119.8241 174.6619 130.728] +/Subtype /Link +/A << /S /GoTo /D (a00165_gc364305cee969a0be43c071722b136e6) >> +>> endobj +3194 0 obj << +/D [3192 0 R /XYZ 90 757.9346 null] +>> endobj +1320 0 obj << +/D [3192 0 R /XYZ 90 739.9346 null] +>> endobj +174 0 obj << +/D [3192 0 R /XYZ 90 739.9346 null] +>> endobj +3195 0 obj << +/D [3192 0 R /XYZ 90 719.1618 null] +>> endobj +3196 0 obj << +/D [3192 0 R /XYZ 90 602.4452 null] +>> endobj +3200 0 obj << +/D [3192 0 R /XYZ 90 435.663 null] +>> endobj +3202 0 obj << +/D [3192 0 R /XYZ 90 376.1236 null] +>> endobj +3204 0 obj << +/D [3192 0 R /XYZ 90 335.9601 null] +>> endobj +3206 0 obj << +/D [3192 0 R /XYZ 90 321.1019 null] +>> endobj +3208 0 obj << +/D [3192 0 R /XYZ 90 307.4242 null] +>> endobj +3210 0 obj << +/D [3192 0 R /XYZ 90 293.7464 null] +>> endobj +3212 0 obj << +/D [3192 0 R /XYZ 90 279.0925 null] +>> endobj +3214 0 obj << +/D [3192 0 R /XYZ 90 265.4148 null] +>> endobj +3216 0 obj << +/D [3192 0 R /XYZ 90 251.7371 null] +>> endobj +3218 0 obj << +/D [3192 0 R /XYZ 90 238.0594 null] +>> endobj +3220 0 obj << +/D [3192 0 R /XYZ 90 225.3579 null] +>> endobj +3222 0 obj << +/D [3192 0 R /XYZ 90 166.8557 null] +>> endobj +3223 0 obj << +/D [3192 0 R /XYZ 90 166.8557 null] +>> endobj +3225 0 obj << +/D [3192 0 R /XYZ 90 151.1646 null] +>> endobj +3191 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3232 0 obj << +/Length 986 +/Filter /FlateDecode +>> +stream +x讠V踤8}譝 ǜ紙轰璏4A弁n霤[奃d蒶蒑砡緾憯eII , X 缣嚫~腗,屲b隸柉b2琪4uS擣4r硊!"圫B莠E垎~@9鳋#顗{=i呸'佧`#籾C #R%j誽 杵8"q君纍 F:4犷#L0"iJ莪Rf'曮争s校7K>r聳$S%с堹{W;拼谘8lE蒎漧j逖/ 尾0kB蔫}座V1攙{?櫗u AXKz豝>贠5鑉)*喵^爄`0Ib7 +9奿/襧厒痹<a藹 JH跊wб蟹b奜0E1褉!凈钛俢茝Z)婐>矖糒 道84塜拞Ц倨淅)Jd~_檷薏~袁醴砱哖>K$s淒bD豀%卢2\ュ$2a鰯/%詠.楑觅 欅shE〨矠H杜^:=Vw铣JJ聢酒闔%V瓨蝻賵駭襑碍麛蕀<舿珴5矄雋鑙濳9硿输vW U[3嵇pP$6绁 +┓蛬紹塯桳坄磏鰖K(nX硝侵6贲捴: ' +'濹<f偌,-r锏拊{昹;皆g貈甛*ネ 瓮戡!銺v 棝暙釧[UF擬录D匤'%嶰o処#n竓儐 + 跹叟趟踽$總dx.鍢 nY9缃v7姃紥 褟vTr諝p頜 巧9Ku9(o闲R宗Msㄌ*颡才葐瘆j;5rM囕$c鞎 @舃v%謆/曷1驣恺皴霙塛筟⿱!j浕h┑#释b蹓!$庋犏5#勓qA墼#注叙X-儫磬V咅`&剼/緺靷b=G&G詓輼xn顚42傳O鰹鼁z唱甖~祷endstream +endobj +3231 0 obj << +/Type /Page +/Contents 3232 0 R +/Resources 3230 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3238 0 R +>> endobj +3233 0 obj << +/D [3231 0 R /XYZ 90 757.9346 null] +>> endobj +3234 0 obj << +/D [3231 0 R /XYZ 90 739.9346 null] +>> endobj +3228 0 obj << +/D [3231 0 R /XYZ 90 723.1038 null] +>> endobj +3235 0 obj << +/D [3231 0 R /XYZ 90 723.1038 null] +>> endobj +3236 0 obj << +/D [3231 0 R /XYZ 90 539.9526 null] +>> endobj +3229 0 obj << +/D [3231 0 R /XYZ 90 515.6244 null] +>> endobj +3237 0 obj << +/D [3231 0 R /XYZ 90 515.6244 null] +>> endobj +3230 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3241 0 obj << +/Length 284 +/Filter /FlateDecode +>> +stream +x讠慚k0 嗭>&噚踧廲[Y`氨躂m銝A摪挵踹蠅ho讲?B 防2率\骫脌抋 g>炌畊B`J各1滈B S榹2歛俋攔蜳 kd12斾sM軤稦O 棶u镪3(STaArA7锠)─;鐅/垠e'跨兓賳BymF獸|endstream +endobj +3240 0 obj << +/Type /Page +/Contents 3241 0 R +/Resources 3239 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3238 0 R +>> endobj +3242 0 obj << +/D [3240 0 R /XYZ 90 757.9346 null] +>> endobj +3239 0 obj << +/Font << /F29 499 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3245 0 obj << +/Length 1390 +/Filter /FlateDecode +>> +stream +x讠YMo"G禁Wp4R梏鱃帀wdm|螽齐F0骃蚅fκ闰募腩?1 |鎸cAi;[m秫;|濊/k┼u渎5[敺x麟gf3k=>氢Vf細=疅xm}/め鱪耧蜏w"蘩‘a贙}踞糇?X0藿yㄚ獅鱫{8觓.鼄輄|]澏醍鎢椝 虭§薣糯戹\11_矽e礯-弍g]V镛霂f藩呤 +孖ee`Az櫴媛u[5泎 瑥獵砄蝾>=鎫z酶餹`. +難-JT;(榜翞g>0则9钴Y乍~S籪\2Г@5 ^咗舍{镵!Pp菧PfL*f\咵塯豭 Py.2姠T嬙縯U货輗&澖f焠A耂:u遉23蕒 EQ狤jI﹫t皉火<訽9椈鏈墚S4粇扫薪>w嶮,6眤攆雗跫螹結痆{婒)◆hB琖坡g橵^空壖_4氓椀Q(銀i(zi>傅ず劵P穙冥d8僯揕C-Z4L韪vm GiS掶顢預@a垵秔亓 7{m鎇贯J 4汿惍^-%榇 N衉W嶔蓍u蚾犐\簟m忛0覨X{'7 F[Q郝誩薐u<苏雗p$ 儛U谷!?D亨4W戟;pPx絗 3輥劎:0▄N砣揔8&焅(zk8sMTn屛MQ疸沽斟軘贲f[,v影缅澐dG藡c蕐#勒醢w3p瀋褨鲁8[&miQ疸栤瓴ゥ簱八憮1藚F褰識R愹頑^郜~嚘z貄凘-l厵(S6(垵8o东鋮}胴蠣?莆f軲划V 鎇創画匛藣敢娞=濺=l瞆啄X=>窎kO9檂磽EA蘄7;Y6粦嶂Ad澖O 訫赆嚐咃哮郴D.., 熹棐 #-) ~x$%軈簱_帋T莼螥埢酁T梡陰踽鏫橕寍﹚屆~壀\dЕ袯]?閛#遌妁7R皹$勸鰳嚓rLJu娚基`%%軈糓]雃湙唭笇0儧朡粐)/贌鋒Jg勿辇`)I0:%沩)琳鍞旉垟 騨O ./Г斪烨庬xmq}媽aP闶]1O$8媛NH抈tB欺偒 ) A漭\^NH)oW粉犋c+俠28;朡3駸%䲣z""Z3瘽潕H"抈tD欺#偒)A漭\^嶩)o;庮"q員殊巈E4R薑陦(羭橒YE$凌 尫GW#R#"側="讣慠藓~ ~_6眚饅jG~ 遍\怄e"x0&挝翊@旁昃?N僥ndstream +endobj +3244 0 obj << +/Type /Page +/Contents 3245 0 R +/Resources 3243 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3238 0 R +/Annots [ 3248 0 R 3249 0 R 3252 0 R 3253 0 R 3255 0 R 3257 0 R 3258 0 R 3260 0 R 3261 0 R 3263 0 R 3264 0 R 3266 0 R 3268 0 R 3270 0 R 3271 0 R 3273 0 R 3274 0 R 3276 0 R 3277 0 R 3279 0 R 3280 0 R 3282 0 R 3283 0 R 3285 0 R 3286 0 R ] +>> endobj +3248 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 468.5995 139.4144 491.5682] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +3249 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.2799 468.5995 192.535 491.5682] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +3252 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 384.1603 123.6537 393.9384] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +3253 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [124.1518 384.1603 133.8952 393.9384] +/Subtype /Link +/A << /S /GoTo /D (a00077_31471b5e27bda51832d0fa49bd6d9b54) >> +>> endobj +3255 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 373.2662 153.8002 382.1128] +/Subtype /Link +/A << /S /GoTo /D (a00077_e0b137a3875ad12a99e5e3e0e177fd12) >> +>> endobj +3257 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 358.2574 172.9089 369.1614] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +3258 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 358.2574 202.2389 369.1614] +/Subtype /Link +/A << /S /GoTo /D (a00077_cfd36e02c7498d766ff802575e981612) >> +>> endobj +3260 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 347.3633 136.9336 356.2099] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +3261 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.4317 347.3633 160.455 356.2099] +/Subtype /Link +/A << /S /GoTo /D (a00077_e80af46ceef63eab3c786525370ae720) >> +>> endobj +3263 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 333.3308 138.5977 343.2585] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3264 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 333.3308 159.9074 343.2585] +/Subtype /Link +/A << /S /GoTo /D (a00077_e707c39412e09d3a47f0b3c5dad33725) >> +>> endobj +3266 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.9088 320.3794 206.1837 330.3071] +/Subtype /Link +/A << /S /GoTo /D (a00077_2391bb18db5f620e0e9fb848ae5ba5e9) >> +>> endobj +3268 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.9214 307.428 162.6669 317.3556] +/Subtype /Link +/A << /S /GoTo /D (a00077_5361ef75bfbdb469b5cc31f0060a2670) >> +>> endobj +3270 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 294.0582 133.6164 304.4042] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3271 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 294.0582 168.0469 304.4042] +/Subtype /Link +/A << /S /GoTo /D (a00077_564bab93ef6a268a5de2fab885c1d32a) >> +>> endobj +3273 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 281.1068 138.5977 291.4528] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3274 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 281.1068 183.6978 291.4528] +/Subtype /Link +/A << /S /GoTo /D (a00077_7a520a57d7d0541524f34a7685635597) >> +>> endobj +3276 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 267.5974 138.5977 278.5014] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3277 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 267.5974 166.5427 278.5014] +/Subtype /Link +/A << /S /GoTo /D (a00077_1d2f2751b0865045486c9aa59d0d0971) >> +>> endobj +3279 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 255.2039 138.5977 265.5499] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3280 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 255.2039 174.2934 265.5499] +/Subtype /Link +/A << /S /GoTo /D (a00077_20541305548441e5dcb2e1e7e6f300eb) >> +>> endobj +3282 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 242.2525 138.5977 252.5985] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3283 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 242.2525 172.6298 252.5985] +/Subtype /Link +/A << /S /GoTo /D (a00077_27df2817055bc099821d96eb60a40b34) >> +>> endobj +3285 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 229.301 138.5977 239.6471] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3286 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 229.301 197.4264 239.6471] +/Subtype /Link +/A << /S /GoTo /D (a00077_5e16ca335dfd7394527f602da879fca2) >> +>> endobj +3246 0 obj << +/D [3244 0 R /XYZ 90 757.9346 null] +>> endobj +178 0 obj << +/D [3244 0 R /XYZ 90 739.9346 null] +>> endobj +985 0 obj << +/D [3244 0 R /XYZ 90 553.9527 null] +>> endobj +182 0 obj << +/D [3244 0 R /XYZ 90 553.9527 null] +>> endobj +3247 0 obj << +/D [3244 0 R /XYZ 90 517.4245 null] +>> endobj +3250 0 obj << +/D [3244 0 R /XYZ 90 403.1102 null] +>> endobj +3251 0 obj << +/D [3244 0 R /XYZ 90 403.1102 null] +>> endobj +3254 0 obj << +/D [3244 0 R /XYZ 90 388.1454 null] +>> endobj +3256 0 obj << +/D [3244 0 R /XYZ 90 377.2512 null] +>> endobj +3259 0 obj << +/D [3244 0 R /XYZ 90 362.2425 null] +>> endobj +3262 0 obj << +/D [3244 0 R /XYZ 90 351.3484 null] +>> endobj +3265 0 obj << +/D [3244 0 R /XYZ 90 337.3159 null] +>> endobj +3267 0 obj << +/D [3244 0 R /XYZ 90 324.3645 null] +>> endobj +3269 0 obj << +/D [3244 0 R /XYZ 90 311.413 null] +>> endobj +3272 0 obj << +/D [3244 0 R /XYZ 90 298.0432 null] +>> endobj +3275 0 obj << +/D [3244 0 R /XYZ 90 285.0918 null] +>> endobj +3278 0 obj << +/D [3244 0 R /XYZ 90 271.5825 null] +>> endobj +3281 0 obj << +/D [3244 0 R /XYZ 90 259.1889 null] +>> endobj +3284 0 obj << +/D [3244 0 R /XYZ 90 246.2375 null] +>> endobj +3243 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3289 0 obj << +/Length 833 +/Filter /FlateDecode +>> +stream +x讠V蒼0诫+t攣z比(&9A犡tbT朷/H蝼%礒禿〡(q8锿<92鱜砅K 1*湱靖7栍c7?n|_)c﹑踩=(IH醖>崘膆LBH骸d+椛>)F鼷韆?lGh"[N甮嚂亡蓗刮F彄坂jR3)塉篪LY8w刼<62|s 0)\倄鯌髁O1/鑺W"?TEL.X嵠媈m毊熮F娶6?韁(n1境 [臐同彸@垾\谓25` qi魃2刁2cv7.7]2*頀疷w磿迅i諙啬w 芉绗撜&祷婼dd鯞 +7嚏鼰鞬9u 圠僃.泌6s=频0kQu9舺揟 Q8蹂|)tJ瞴 }殼髩(蛧H渮鞪秒) +4諢囑jC蹧'耘!*'鋳[橐>0F2咔E率RI梇Y@\秕i9 +蜹喽{QU烥氧姚骫莵#5?{26 6翇鉸坉籨|筀迡槜 .wR臠〢v曒煌n=⑶ 爤垬閍z倎冧 +玞j-ZB"歆5枼蒻w鏈SsPF艭bVf胋6禣暿j窎〾;{M秏HA骷朂儢_蟕檓辫憣鼤vJH堓8悎蔶垎AL閏Sd廬暙樆僁徹 >+砤丙b縻謆7q>慢丙袋zY膊-R択#唒吥弎БS]w癄袧 +s>QI鮛=b綜孾倻憆=7.'沸穬霄苀v:静9锗v2:H鍥]繝?&剖{./而h7蚁U宵b[轃oc;掺矈徺endstream +endobj +3288 0 obj << +/Type /Page +/Contents 3289 0 R +/Resources 3287 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3238 0 R +/Annots [ 3292 0 R 3293 0 R 3296 0 R 3297 0 R 3299 0 R 3301 0 R ] +>> endobj +3292 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 668.6407 162.0093 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +3293 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 668.6407 237.7248 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00037) >> +>> endobj +3296 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 583.4842 139.1456 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +3297 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.6437 583.4842 146.6175 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00078_a9825b5977b2d4dec66e6bd09e6ae6ea) >> +>> endobj +3299 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 570.5328 179.9123 581.4367] +/Subtype /Link +/A << /S /GoTo /D (a00078_4b1b1436b50ed7638aece35f41421196) >> +>> endobj +3301 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 558.1393 157.1179 568.4853] +/Subtype /Link +/A << /S /GoTo /D (a00078_4da86e9feb5e5835eb15163c2cb61116) >> +>> endobj +3290 0 obj << +/D [3288 0 R /XYZ 90 757.9346 null] +>> endobj +986 0 obj << +/D [3288 0 R /XYZ 90 739.9346 null] +>> endobj +186 0 obj << +/D [3288 0 R /XYZ 90 739.9346 null] +>> endobj +3291 0 obj << +/D [3288 0 R /XYZ 90 717.8172 null] +>> endobj +3294 0 obj << +/D [3288 0 R /XYZ 90 602.4342 null] +>> endobj +3295 0 obj << +/D [3288 0 R /XYZ 90 602.4342 null] +>> endobj +3298 0 obj << +/D [3288 0 R /XYZ 90 587.4693 null] +>> endobj +3300 0 obj << +/D [3288 0 R /XYZ 90 574.5178 null] +>> endobj +3287 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3305 0 obj << +/Length 594 +/Filter /FlateDecode +>> +stream +x讠T薾0茧+tb箌壧1p訞6- U矞2邳}I慠樔朡:垙犰c驛琾滖 )蔇\"o舔m~;5鹖竈F_n垔R倛x诡 N乃誄!:K 巧秏_V吓.颡rk鱩s,Z7居k萏@&.碷R'@i箞. ^"瑐哐嶹F"聢*摄?f(E鈃'Utx蹻w郥栝T!矪鶿塈= R7W摖c8飿M-13=譵^Vz鍢纡P4錕[頺螩3,崟蚛?bL瓴Cw莝/*k鞦~睨鯠 S冖3)C }=鎦浕7ギVN +怘2孪^,今馗廳|k踨r:q@]妅.伮B紡[祀儻g蓖W!`9fl鋂f倁:1#潅郢齉лj6s*铖弜瓊:唛!c璐71雒剚#┼u倬7)&A飭腔>諩癇1腬鵏鯺蘗珪uV39圠L變{P释程e豩0稢|獧vVKs( 洢0蛻示Wf湄膎u瓫柬踃邚诀兣 xr 䦶"綜寘璯'M庍~x4蚶_W緉舁柖喻覀漄愢endstream +endobj +3304 0 obj << +/Type /Page +/Contents 3305 0 R +/Resources 3303 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3238 0 R +/Annots [ 3310 0 R 3312 0 R ] +>> endobj +3310 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.5401 617.7467 188.1115 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00079_9a84c69ec5a4705ccb1ca99fcd120add) >> +>> endobj +3312 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [210.7662 602.7379 245.9639 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00079_1513a9e88921750d2a611b518f6fc207) >> +>> endobj +3306 0 obj << +/D [3304 0 R /XYZ 90 757.9346 null] +>> endobj +987 0 obj << +/D [3304 0 R /XYZ 90 739.9346 null] +>> endobj +190 0 obj << +/D [3304 0 R /XYZ 90 739.9346 null] +>> endobj +3307 0 obj << +/D [3304 0 R /XYZ 90 716.7484 null] +>> endobj +3308 0 obj << +/D [3304 0 R /XYZ 90 634.6393 null] +>> endobj +3309 0 obj << +/D [3304 0 R /XYZ 90 634.6393 null] +>> endobj +3311 0 obj << +/D [3304 0 R /XYZ 90 621.7317 null] +>> endobj +3303 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3315 0 obj << +/Length 1204 +/Filter /FlateDecode +>> +stream +x讠X踤跢}譝餛z衒飾<畠(&zs孈(洦M6!筀-翟巵D墖s翁櫧pYA釓F鈩耘鎚F媑髮K缚烿鬈8蛈壁u4#3^弒契b丧Tl~O窽t/钪秃窥蠜鎩\0;/黇滞憨鲺鈏0鹠5(馚曅裣祚[08珚 %9^纪$崴腱腱!N`*_拍t翷鴧噷9吏 "KF)澘4蚢 攓掿鯒rW鲑譀餐藞S 昻;%+泆鮖n}澥渔XB 巿黨么Z]娈麱)=决俕藬茱鰤W壖埓s铽騯{毎P3K阥爵qn宩"厱8-7握5)暼3(躻T1锕>U蟯pe蟛>&* 斱k憝愠莬夣<'壽阨2曕$÷au鐰K屏\柋*b密(軠K竗:(竻盚眾gi儊懘胕岿;&,a襡-*)雁r湭dfcJ43尬8铍埭=蕡2煱 騠(4! m8/.郌i8'Z曊P+W蠯枍Y哩軞玚◣筼饦$n/:3÷Qb$H℅醈c@墔闅没& +槞蕖b奚y朅%菇饨鞪纁 +捀瓊獑著编t~蕙3〡@a鼏逄U}歑蹠6皥hs坼恠9纏梥寫藋蘖鍢7矧堶=.$q惶籑X絶+<啽j慄 +co)=哢匓咱G溓唟渃<误羌y廏硷8 壽童莴B嗄痘眑贲凁筓2 G w$ +榮$;8篥/P挥w4!F{%!厨y<&&墈K塼捂肃<軵+3卞s'纏w9w蚣;1oUOl呧M}E{蹜$q[0&`婱躇紩醿)鰚P梡9/菠i樄>蹸.-4國EZ.N(6鞘n鄨齐辯猊@虣lu鄮QN噶_8 , +3-;骹袌=(/ 墈馾j羠聐\З鞃〕毚n眖4繮S鈥S轥蕡w|妔z洨5謬睂1幥c倰篙噢'仧\j禂瑵椁E$0/潱v>肸(樴9&踗'8<櫬揑觲噻.彴轳g剫S`?6纩搤溻#鱣葴R輄\枉渠Kz攸鉭8W鐂隗鞶oUT莘endstream +endobj +3314 0 obj << +/Type /Page +/Contents 3315 0 R +/Resources 3313 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3238 0 R +/Annots [ 3320 0 R 3322 0 R 3323 0 R 3325 0 R 3326 0 R 3328 0 R 3330 0 R 3332 0 R 3334 0 R 3336 0 R 3338 0 R 3340 0 R 3342 0 R ] +>> endobj +3320 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [172.012 615.6894 195.0353 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00080_c39694ece9526b84012f90f2bb00af9f) >> +>> endobj +3322 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 602.7379 139.1456 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +3323 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7605 602.7379 172.3606 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00080_9dd8edeece221c853a4c4516bf1b01c2) >> +>> endobj +3325 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 589.7865 123.6537 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +3326 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.8576 589.7865 191.7375 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00080_e261f08e1556287d241764fb2e99fc26) >> +>> endobj +3328 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 576.8351 169.103 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00080_4c6f843219271d25766ee5969e435d1a) >> +>> endobj +3330 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 564.4415 169.85 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00080_447eb700ea7a185e0f155934995d49e5) >> +>> endobj +3332 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 552.9895 153.8002 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00080_94fcc9f5c47f419040d849ce58beae35) >> +>> endobj +3334 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [166.7715 537.9808 181.4961 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00080_5e274a8f8b5fb2b3999c54fe27c76e46) >> +>> endobj +3336 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.9214 527.0866 141.0881 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00080_468c04fff28e784f93ebc3f0849211dd) >> +>> endobj +3338 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 512.0779 176.216 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00080_78f82878f3fd0e7401c7d7d3b3fefbef) >> +>> endobj +3340 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.9214 499.1265 163.2246 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00080_16a3a3056f44b7245ce085b937a269dd) >> +>> endobj +3342 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 486.175 198.9209 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00080_6df929b448ea98bc44d41f5e96237bda) >> +>> endobj +3316 0 obj << +/D [3314 0 R /XYZ 90 757.9346 null] +>> endobj +988 0 obj << +/D [3314 0 R /XYZ 90 739.9346 null] +>> endobj +194 0 obj << +/D [3314 0 R /XYZ 90 739.9346 null] +>> endobj +3317 0 obj << +/D [3314 0 R /XYZ 90 716.7484 null] +>> endobj +3318 0 obj << +/D [3314 0 R /XYZ 90 634.6393 null] +>> endobj +3319 0 obj << +/D [3314 0 R /XYZ 90 634.6393 null] +>> endobj +3321 0 obj << +/D [3314 0 R /XYZ 90 619.6744 null] +>> endobj +3324 0 obj << +/D [3314 0 R /XYZ 90 606.723 null] +>> endobj +3327 0 obj << +/D [3314 0 R /XYZ 90 593.7716 null] +>> endobj +3329 0 obj << +/D [3314 0 R /XYZ 90 580.8201 null] +>> endobj +3331 0 obj << +/D [3314 0 R /XYZ 90 568.4266 null] +>> endobj +3333 0 obj << +/D [3314 0 R /XYZ 90 556.9745 null] +>> endobj +3335 0 obj << +/D [3314 0 R /XYZ 90 541.9658 null] +>> endobj +3337 0 obj << +/D [3314 0 R /XYZ 90 531.0717 null] +>> endobj +3339 0 obj << +/D [3314 0 R /XYZ 90 516.063 null] +>> endobj +3341 0 obj << +/D [3314 0 R /XYZ 90 503.1115 null] +>> endobj +3313 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3345 0 obj << +/Length 714 +/Filter /FlateDecode +>> +stream +x讠V羠 诫+t 湄q搃f:&%檸ccGS[je筸E)牟E3,囫鲰>c0?蠄b﹫椈鈲櫨娦-O旺紵G.⿰Q倞x緉N懫笳$#<橰摑=~}軚薿{;q[W噀m縪鬦W 蕢.栚L L ,y榑G娼3丮演+s:聰漶/3侸褁u僲t}閥霣会T匍<1%f唙塕搘驽oJ詃gi(蝃ZS鄦暿灃#為z憃跏2汪~Y暹爰,髄hh姨=-輓_8A奂婿 9U砮玙躃R槓'rF5K JW屬貆椆蕻'l(塋)?{蘾-繜 )撻 O鳛R~ )'g{T(9 +剎鱌祗M9*珃 #$摍<捬,U嚬u鴲o#h + 蚑*凜M{q 郉* Pa{^杵 跊}7締眆T1k&8靻0Cp gKz )馥嶑 G 捻瑈wub蚶fnY扳谸\J `*從澐嘾x[欏a.<巄>卪藢 +in齹m,l汫8f踴苻6?钕剼W"_澃HU:&?8j]I6 +袒54A蝰 +e4逍軚p襘0馫痨縵懼~i c~!Lo羋譲 1-=嶹盒闸町搭E詝\'韧电^u诮擼P# + 熳:RVvp佟>>籲|雅q-汧⿹嬲/8endstream +endobj +3344 0 obj << +/Type /Page +/Contents 3345 0 R +/Resources 3343 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3357 0 R +/Annots [ 3350 0 R 3352 0 R 3354 0 R 3356 0 R ] +>> endobj +3350 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 615.6894 192.2756 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00081_b42c7af6114fde5d21206a2e18a7d3ee) >> +>> endobj +3352 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 602.7379 194.4975 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00081_164124d48fe85bc98d9a300382a5245d) >> +>> endobj +3354 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 591.8438 165.1479 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00081_5595902fd42d874e35a70206fad8f6d0) >> +>> endobj +3356 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 578.8924 163.3048 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00081_b5801722740492e69bcc73687476009f) >> +>> endobj +3346 0 obj << +/D [3344 0 R /XYZ 90 757.9346 null] +>> endobj +989 0 obj << +/D [3344 0 R /XYZ 90 739.9346 null] +>> endobj +198 0 obj << +/D [3344 0 R /XYZ 90 739.9346 null] +>> endobj +3347 0 obj << +/D [3344 0 R /XYZ 90 717.8172 null] +>> endobj +3348 0 obj << +/D [3344 0 R /XYZ 90 634.6393 null] +>> endobj +3349 0 obj << +/D [3344 0 R /XYZ 90 634.6393 null] +>> endobj +3351 0 obj << +/D [3344 0 R /XYZ 90 619.6744 null] +>> endobj +3353 0 obj << +/D [3344 0 R /XYZ 90 606.723 null] +>> endobj +3355 0 obj << +/D [3344 0 R /XYZ 90 595.8288 null] +>> endobj +3343 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3360 0 obj << +/Length 1383 +/Filter /FlateDecode +>> +stream +x讠XM徾6禁W枧{酸椚犺∝$赿oI8秜W╓v$笽3擧-e蒬谂V稙g尢{Q剬d唂,堘Be矍皖耠+p穝紵噣遪W?縝&3(Σ刍>"办v鱪 L_錖 胗猊 t父辴涐阭诇遁┕.萃闽鬤州Λ跽囒浾僳憠#*算箨氻愷蛫n刺距J=泾脋鮲踝g秆` |筦縜綽 (唫 r爺畯韆鹷X辮+:雖i肼* 稑賱茶泯T折齣鐞RrR衾_b簆yX$h亮醻u伆J F示J,塩(6 Z氩跿鹯玟+踡S絰彑i[hsDo蔯S叮挲w嚮峥呈9t嚲礍譭Glt m <|裒j4仾% 彌惜2膸/U0\諊〦5]Tm鮥飌寰崔m晒q$粭IC S\/谖凃5_kJy)覹腈窀/鐗Ag,堁 鸩縢縤钶7?爃,鄏塦a栤C惯/V慍尺 帨P3=(E<杄0x&/\&4B龇鲾埠z策乒f_誑\爅闘[edi验鈟r縦啘j@iPDp-炩丶搒{喁樹褜=x8 U*晌&鞄輰cD葿F1"0V BC挍钎竡F囱&铜Hs銙pm襺蟾)7k侸!楥躂a协 /鶰A4姂疔K- 8_暿霛4苫=皂俙喡NGDq匶\K幛?H|f +P壱=j't怶j8鉭-脪 +晎|Y\饣c滋H)恠8霧嵜0u聧杤c鹳/羘鬺萵08c铆W宂>㈡y灵@鮕W #憵gy/W铖┦gq-儲,杆 鄞竎r牬c敹> endobj +3363 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 589.168 162.5673 610.0795] +/Subtype /Link +/A << /S /GoTo /D (a00037) >> +>> endobj +3366 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 504.6641 123.6537 515.568] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +3367 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [124.1518 504.6641 133.8952 515.568] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +3368 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.3933 504.6641 167.3794 515.568] +/Subtype /Link +/A << /S /GoTo /D (a00082_17aacf7c5e2046c1f3ab50faa1b2f7eb) >> +>> endobj +3370 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.4319 491.7126 157.1379 502.6166] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3371 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.108 491.7126 196.4302 502.6166] +/Subtype /Link +/A << /S /GoTo /D (a00082_31f25efccba9fd043047133d0d0ba5ab) >> +>> endobj +3373 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 478.7612 133.6164 489.6651] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3374 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.5865 478.7612 171.7929 489.6651] +/Subtype /Link +/A << /S /GoTo /D (a00082_b973f2e16c2883a8a0164d716cce5a31) >> +>> endobj +3376 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 465.8098 167.1604 476.7137] +/Subtype /Link +/A << /S /GoTo /D (a00082_c3d1bfbb1abde31973c015de97ce2f84) >> +>> endobj +3378 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 453.8346 138.5977 463.7623] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3379 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 453.8346 171.5239 463.7623] +/Subtype /Link +/A << /S /GoTo /D (a00082_19b82696bd84a803250cbf9812f2f125) >> +>> endobj +3381 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 440.8832 138.5977 450.8108] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3382 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 440.8832 170.4081 450.8108] +/Subtype /Link +/A << /S /GoTo /D (a00082_a408ca8630154ebd039f37a828399f7b) >> +>> endobj +3384 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 426.9555 157.2078 437.8594] +/Subtype /Link +/A << /S /GoTo /D (a00083) >> +>> endobj +3385 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.706 426.9555 172.7794 437.8594] +/Subtype /Link +/A << /S /GoTo /D (a00082_d6bd03239291629676e4c0286ebb650f) >> +>> endobj +3387 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.3868 414.004 195.9519 424.908] +/Subtype /Link +/A << /S /GoTo /D (a00082_a6bfaf327ce839ba70accd71014398d0) >> +>> endobj +3389 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [172.012 401.0526 192.2657 411.9565] +/Subtype /Link +/A << /S /GoTo /D (a00082_fda184638130452f3570966acc5b97f9) >> +>> endobj +3361 0 obj << +/D [3359 0 R /XYZ 90 757.9346 null] +>> endobj +990 0 obj << +/D [3359 0 R /XYZ 90 739.9346 null] +>> endobj +202 0 obj << +/D [3359 0 R /XYZ 90 739.9346 null] +>> endobj +3362 0 obj << +/D [3359 0 R /XYZ 90 685.9318 null] +>> endobj +3364 0 obj << +/D [3359 0 R /XYZ 90 523.614 null] +>> endobj +3365 0 obj << +/D [3359 0 R /XYZ 90 523.614 null] +>> endobj +3369 0 obj << +/D [3359 0 R /XYZ 90 508.6491 null] +>> endobj +3372 0 obj << +/D [3359 0 R /XYZ 90 495.6977 null] +>> endobj +3375 0 obj << +/D [3359 0 R /XYZ 90 482.7463 null] +>> endobj +3377 0 obj << +/D [3359 0 R /XYZ 90 469.7948 null] +>> endobj +3380 0 obj << +/D [3359 0 R /XYZ 90 457.8196 null] +>> endobj +3383 0 obj << +/D [3359 0 R /XYZ 90 444.8682 null] +>> endobj +3386 0 obj << +/D [3359 0 R /XYZ 90 430.9405 null] +>> endobj +3388 0 obj << +/D [3359 0 R /XYZ 90 417.9891 null] +>> endobj +3358 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3392 0 obj << +/Length 609 +/Filter /FlateDecode +>> +stream +x讠UMo贎禁W3尺9V4Q* $,*1爹鱙{啄羳UUo呒73籤 +䥽﹨TK,*澘&惍M俼{澉Gm犁i蜷歭j橴ひ椴fP$!ビ琵@3=憚羦窓|z 鏊皌W鹹品n閵!殎绥/iピ渌 !*擻a%郬r槁+$栏52'佬ZJ_A紮瑩讳莵'lN暼O;E咙 +5V;-饛V娇@屘JY$W糳 #踟暢l乮靨"蹡&<糢妸k拓=P炚楮, +Zg #+脀eW'之U@雎(鎮鲜Y8t澒鮞w + 3備6kB蜊軋w*<巺P驄称W耝礡謒K[P猈]凔爊o炇:NL噱|P莞(趒筪坄幉;q1iH=锛流9镳V +秂 9S{尗!鵡 媫Q騈-F z鑱V衹舅Vys}w/洟Z2m殆ㄡ|ax彋c諮挖-会峞牬緲1#閛\淏廕z﹄腳侖3乘M +#C黹棋畼昅姏ь[3 Q2 R+0#F!闪擙罪"瘗->脹?o+Рiさ蝮涪 endstream +endobj +3391 0 obj << +/Type /Page +/Contents 3392 0 R +/Resources 3390 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3357 0 R +/Annots [ 3397 0 R 3398 0 R 3400 0 R ] +>> endobj +3397 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 615.6894 133.6164 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3398 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.5865 615.6894 154.6474 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00083_5e8637b1514d03eb3eb12dc9a502e27e) >> +>> endobj +3400 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 602.7379 190.0639 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00083_20fae11b540a561c622a0d74cb4b9f97) >> +>> endobj +3393 0 obj << +/D [3391 0 R /XYZ 90 757.9346 null] +>> endobj +991 0 obj << +/D [3391 0 R /XYZ 90 739.9346 null] +>> endobj +206 0 obj << +/D [3391 0 R /XYZ 90 739.9346 null] +>> endobj +3394 0 obj << +/D [3391 0 R /XYZ 90 716.7484 null] +>> endobj +3395 0 obj << +/D [3391 0 R /XYZ 90 634.6393 null] +>> endobj +3396 0 obj << +/D [3391 0 R /XYZ 90 634.6393 null] +>> endobj +3399 0 obj << +/D [3391 0 R /XYZ 90 619.6744 null] +>> endobj +3390 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3403 0 obj << +/Length 619 +/Filter /FlateDecode +>> +stream +x讠UKo0 钧W瑧z-螿骕阘砜m嫂[簧a鹆擧⿵R sB甏\'.h&哩蜪燋 綨/总9蛈:澐42艖в貱&9桼av僁2耬QA函鲊>'h3曐虬鰶酣W弁鋓z沑M廐"P%468$O愇餸L8看單駎滺.篍曑'?弤偄=0柉B10JF;妓楽LH0;瞉菹-葁~頒挍7Io葴R7*p銓郏7喲撺瘚U錱<墀vc疟Z搄C6z<滴(颷 镉: 葪 照K鞭U鈉d螌鄕2磀微$闭5;鸈T蒗"fP1劉囸hw4k 螙瀹d@a棣鬷闬鑱&4k偊轨|p猢 吇魪|砵o"m"飼 <鼪U皂j禿熜FHFh笾X+_蜑G贕Y痛0庥>孶]3)瑋笥膤鋅 9佯Y墦[N報湢緎狌Yt澼;tU牐n +NcL:0缪 NS蟼媐 ╆h {d4次孻EG嵤枎Ds@ N洨H輤诣6狂钇V躯餄p;Ay<>@i>*垲胋鵀鼅頌帡讌膛f歸衵U奾仭endstream +endobj +3402 0 obj << +/Type /Page +/Contents 3403 0 R +/Resources 3401 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3357 0 R +/Annots [ 3406 0 R 3409 0 R 3410 0 R ] +>> endobj +3406 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 667.9234 139.9724 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +3409 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 584.4605 130.8466 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00155_g3983e0c026396d5c4506779d770007ba) >> +>> endobj +3410 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.3447 584.4605 140.5301 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00084_c3fa0fa86689e3e7c039a16c16861dbe) >> +>> endobj +3404 0 obj << +/D [3402 0 R /XYZ 90 757.9346 null] +>> endobj +992 0 obj << +/D [3402 0 R /XYZ 90 739.9346 null] +>> endobj +210 0 obj << +/D [3402 0 R /XYZ 90 739.9346 null] +>> endobj +3405 0 obj << +/D [3402 0 R /XYZ 90 716.7484 null] +>> endobj +3407 0 obj << +/D [3402 0 R /XYZ 90 602.4342 null] +>> endobj +3408 0 obj << +/D [3402 0 R /XYZ 90 602.4342 null] +>> endobj +3401 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3413 0 obj << +/Length 1159 +/Filter /FlateDecode +>> +stream +x诃楳o8嗭::@佩餥9.`佪址(\[I\#k薶w( +m冥>X瞊<銴)BEUC+-5i窹誰5⒄=q⺮嵪隭痃d羟諸 iS珍畯爛H瑲炭孮{U3I腔U鼬}譓恢疃鸜绠?祑眦 +谈]响c-嚝o撣邀蓯咩Ifo翦坹;7FV筐hV璅傫p};膓?渏~簷 B;6[GJ_襈l湅 +矎娸k23D%嚆薮輙眑.襇粵m忀b>$# +P璑71堦X暫iB)荴蔄鱐餆Λ莈换> dS x?晨l稞 PM4py姁G剝n怸膰v管钥畝7坼<$╲岅] ;蕥师1 芇V2-仁_緼捎 制t{P((爝,蕙;A m駛-]峨磒b47Y綵{憌U瀢琄Y僬(嚯]陀 tW3x/w57沩趗w芕36 hm鞥派*I]|dE[銆礍tty[sx/兜tx.r黷赯Má* Yk/*[k蠂X癀b悤瓖巨<輅mLW6凎rk髕兊1呜鵦稭mm坄癨熧9Qd%醌Z乕0溓' +矶 踰慌梎I穠D稞 0M縡暂1J暬夯br假簺齙x5衤魁Y赕轺}:E)p@孃endstream +endobj +3412 0 obj << +/Type /Page +/Contents 3413 0 R +/Resources 3411 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3357 0 R +/Annots [ 3416 0 R 3417 0 R 3418 0 R 3421 0 R 3422 0 R 3424 0 R 3426 0 R 3428 0 R 3430 0 R 3432 0 R 3433 0 R 3435 0 R 3436 0 R 3438 0 R 3439 0 R 3441 0 R 3442 0 R ] +>> endobj +3416 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 667.9234 162.5673 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00037) >> +>> endobj +3417 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.5561 667.9234 193.8396 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +3418 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [213.7051 667.9234 242.5466 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00039) >> +>> endobj +3421 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 584.4605 133.6164 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3422 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 584.4605 154.3681 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00085_0bb4f34164e7207c2db26b77f23ccfff) >> +>> endobj +3424 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 572.5901 150.7619 581.4367] +/Subtype /Link +/A << /S /GoTo /D (a00085_3592a1f5ae100db2ed9c0810b41c7bc7) >> +>> endobj +3426 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 559.6386 162.3783 568.4853] +/Subtype /Link +/A << /S /GoTo /D (a00085_668cab7d54ff0a2fc2a2179ca06b0798) >> +>> endobj +3428 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 544.6299 171.2348 555.5339] +/Subtype /Link +/A << /S /GoTo /D (a00085_503c2994a4e52300516e2b820f0fc65b) >> +>> endobj +3430 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 531.6785 159.6186 542.5824] +/Subtype /Link +/A << /S /GoTo /D (a00085_04833004cec509a41c502429df308e35) >> +>> endobj +3432 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 518.7271 138.5977 529.631] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3433 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 518.7271 169.87 529.631] +/Subtype /Link +/A << /S /GoTo /D (a00085_a312da7b5f6441140721ec7e55f345a8) >> +>> endobj +3435 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 506.7519 138.5977 516.6796] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3436 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 506.7519 169.3121 516.6796] +/Subtype /Link +/A << /S /GoTo /D (a00085_68204df6bde3e3c27271ebde10579a57) >> +>> endobj +3438 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 493.8005 138.5977 503.7281] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3439 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 493.8005 168.0569 503.7281] +/Subtype /Link +/A << /S /GoTo /D (a00085_0560495c60c68d62617ff1f3d0c424a4) >> +>> endobj +3441 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 479.8728 138.5977 490.7767] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3442 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 479.8728 170.418 490.7767] +/Subtype /Link +/A << /S /GoTo /D (a00085_5ed2615cec9e633d90ac5968771976eb) >> +>> endobj +3414 0 obj << +/D [3412 0 R /XYZ 90 757.9346 null] +>> endobj +993 0 obj << +/D [3412 0 R /XYZ 90 739.9346 null] +>> endobj +214 0 obj << +/D [3412 0 R /XYZ 90 739.9346 null] +>> endobj +3415 0 obj << +/D [3412 0 R /XYZ 90 716.7484 null] +>> endobj +3419 0 obj << +/D [3412 0 R /XYZ 90 602.4342 null] +>> endobj +3420 0 obj << +/D [3412 0 R /XYZ 90 602.4342 null] +>> endobj +3423 0 obj << +/D [3412 0 R /XYZ 90 588.4455 null] +>> endobj +3425 0 obj << +/D [3412 0 R /XYZ 90 576.5751 null] +>> endobj +3427 0 obj << +/D [3412 0 R /XYZ 90 563.6237 null] +>> endobj +3429 0 obj << +/D [3412 0 R /XYZ 90 548.615 null] +>> endobj +3431 0 obj << +/D [3412 0 R /XYZ 90 535.6635 null] +>> endobj +3434 0 obj << +/D [3412 0 R /XYZ 90 522.7121 null] +>> endobj +3437 0 obj << +/D [3412 0 R /XYZ 90 510.7369 null] +>> endobj +3440 0 obj << +/D [3412 0 R /XYZ 90 497.7855 null] +>> endobj +3411 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3445 0 obj << +/Length 978 +/Filter /FlateDecode +>> +stream +x讠WMs9襟+U媀>рr剌=9.伭 +芧j捚 RR)hFO莜鹵k$Ra鴳枢J 悴Zl竮喿腛廰~䴓 ~俊2菻*阧A$(≌l0$寧茢sA唶肞!A 碥嶎圯av#禑|Y秛游埘K3z溳&硯'*$柷儑G\-侌#f川䥽寛1蹿8e醓3賟} +满&"V園tcW鮺盵况eJ 剦V昑恦% 爍孞耪a汤杅3&_幺譓娇:鱈0E奞抲蛻褎灭8g哽烗郧 +)翫C1靝蘎鬊燛Bじ`t⊕竽歶䴖揾,飹!壻棍薎從n渼/ !5-$!燡k9睳瓕呮债O觙}琟+!泆沱F瞨v牌蟯仭 M8傗vM舳遘蛂叱-慸奭c@_ J臋鎜vO攰碅lwC絛=v⊕_負 栻燥馑|缫]乜#]澏=侂3r棆3郖4粬乁z燊F1S萇@CW0逝┿囐鋘:橾?佐鎖嚮饔升c_Y(*-体矆共皉Y髙Y駙/1H靂烥挃锽Ur-鄫I鳼襉5穫進扖i)/JrXY驕荋蚣逳蜇o^?"y濧b7掽礛y崵仯B6~锳cBa{'Y<.钕U逋\锺厱/A礜笀贏?旦n5姼联L h琄,χ秢8¨FZ1漜7VSjI3"KjXY稳喁霗g 乘+歛黧掓賣毱燔m%iP鴛*⒊羝覂栖濦u)/]蹘叀a a,惊H竼AMAl屄B{C僑(|-\h镪At帥锣vD酿鴬+戬c镕脳漿H锒熆卥熳o蟯r-7薂-室w伊L梕ndstream +endobj +3444 0 obj << +/Type /Page +/Contents 3445 0 R +/Resources 3443 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3357 0 R +/Annots [ 3448 0 R 3449 0 R 3452 0 R 3453 0 R 3454 0 R 3455 0 R 3456 0 R 3457 0 R 3458 0 R ] +>> endobj +3448 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 668.6407 142.7416 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +3449 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6071 668.6407 199.1894 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00045) >> +>> endobj +3452 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 584.0421 161.8301 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00086_cca775e46d4405b7775b328f7694f7e7) >> +>> endobj +3453 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 571.0907 148.62 581.4367] +/Subtype /Link +/A << /S /GoTo /D (a00143_g54a466311575a727830a92a6c3621cb2) >> +>> endobj +3454 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 557.5814 159.6884 568.4853] +/Subtype /Link +/A << /S /GoTo /D (a00143_g5eced097547fd3fac4ba2a255493d921) >> +>> endobj +3455 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 545.6062 133.6164 555.5339] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3456 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 545.6062 169.87 555.5339] +/Subtype /Link +/A << /S /GoTo /D (a00143_gd85fc90c30d1fc37c63c4844be5fe09d) >> +>> endobj +3457 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 532.6548 133.6164 542.5824] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3458 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 532.6548 154.3681 542.5824] +/Subtype /Link +/A << /S /GoTo /D (a00143_g41bf109b6a45328d5744c0a76563fb6c) >> +>> endobj +3446 0 obj << +/D [3444 0 R /XYZ 90 757.9346 null] +>> endobj +994 0 obj << +/D [3444 0 R /XYZ 90 739.9346 null] +>> endobj +218 0 obj << +/D [3444 0 R /XYZ 90 739.9346 null] +>> endobj +3447 0 obj << +/D [3444 0 R /XYZ 90 717.8172 null] +>> endobj +3450 0 obj << +/D [3444 0 R /XYZ 90 602.4342 null] +>> endobj +3451 0 obj << +/D [3444 0 R /XYZ 90 602.4342 null] +>> endobj +3443 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3461 0 obj << +/Length 1040 +/Filter /FlateDecode +>> +stream +x跐Wmo6_!`_`鈞|g0 貝禭[雘M(2 撳L枟鲞(R")V0)蜥輘蠞$ 4裄藚J蛎&8齛q9捧t鴐锄=硥%V1昹vD2`蒮鹹 繳$]7帕誥┫yЯ琞;湶寠5p~鮡s粃烽}Gj+馂Y}﨎-R糫Q颅懮3>P植浒寃尻雨NXh7蘀(佅傕 隻d斁1F -獊h* ⺁Tyy轋$)9阎`-痃[歨at磡葉茞b噲%0乆)01$嶣QT f.緌MV攏饧qЪ.灇釾E億袯k缱aYH&~& 褌68P隨滚5z軲烵璼溬0祏y櫿E嘲<饍Ef巡 隴蝡x8煔~垕'讋羢鸯%蓵!J2(&壯23~﹡寴弮陉耖pC(啊PS粆.飸aLG#\i33*礍B`罧契Ke広Q<腃虓 3扨DZJ樷f朶J嚚i1朠戛QF貣倩岍tщ眂@愭 .z8紲A狓z梥団醺)n鼯SN&e躟/Q =j甚臍w末帏1r鷝~升漠w锂@瓹傄CVT羼鴶鶺*完'拸1艌ぐP,=j佉在"Li"暗綫捐|d酡莝3濿DK+.+遥HME趩淯跧ga(x{濒S粸浅{人耈汪UJ酶,C廧r?辨輫s(搴3傹祾礅嵒UE{光_ #-嘛q~龓覎O=;s樗出&k舶駗崾韎鍾$闭@黭鞯!`甋)"亳~撚>娀樹=雳%縳糥K縴y诀"7罖廃哭:搲]箱詃鯏俀DjD彔OZ+A練a1 +/}3用334x!3 ~惶拣碳喬,0欂鮈姫q蹩WLr履Z(^n昲Q亘> 鎌檧 +祝焰汆鄉x桻xF麀>&>-t竊}p暙肠籕w]鎻np霃巗|5阕寙'F +W?H慰$九k敕GW嵟魺B祦>睖 ╡ndstream +endobj +3460 0 obj << +/Type /Page +/Contents 3461 0 R +/Resources 3459 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3474 0 R +/Annots [ 3464 0 R 3465 0 R 3466 0 R 3467 0 R 3468 0 R 3471 0 R 3473 0 R ] +>> endobj +3464 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [367.6562 622.7225 413.364 633.6264] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) >> +>> endobj +3465 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 587.1107 139.9724 610.0795] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +3466 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.9612 587.1107 263.4979 610.0795] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +3467 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [266.4867 587.1107 399.7556 610.0795] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +3468 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [419.6211 587.1107 467.8198 610.0795] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3471 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.4252 505.6403 187.573 515.568] +/Subtype /Link +/A << /S /GoTo /D (a00087_e8eb428c05bc1dee022246a3063d277c) >> +>> endobj +3473 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.4252 492.6889 200.6041 502.6166] +/Subtype /Link +/A << /S /GoTo /D (a00087_fe557d333c06cf65f52023f45f5b0a3a) >> +>> endobj +3462 0 obj << +/D [3460 0 R /XYZ 90 757.9346 null] +>> endobj +995 0 obj << +/D [3460 0 R /XYZ 90 739.9346 null] +>> endobj +222 0 obj << +/D [3460 0 R /XYZ 90 739.9346 null] +>> endobj +3463 0 obj << +/D [3460 0 R /XYZ 90 687.0765 null] +>> endobj +3469 0 obj << +/D [3460 0 R /XYZ 90 523.614 null] +>> endobj +3470 0 obj << +/D [3460 0 R /XYZ 90 523.614 null] +>> endobj +3472 0 obj << +/D [3460 0 R /XYZ 90 509.6254 null] +>> endobj +3459 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3477 0 obj << +/Length 2106 +/Filter /FlateDecode +>> +stream +x诮Z]o6}鳢0/Pq鵐( +礉m袮貪鎚f0Pl%V朶I$鱎鼒踕 g<彯违%廻%?苍x﹦B歲筡oxy]诐A6黷进/T/5覓叔蹴A$(∷胪a* 糙/h +"燮籦(l霃≯瘒}wE騏:埘~[6C1Tms貔讈#*$喦煁彑駌勥/0b:睡p褮. N?,庳庱俢 +聨'L83詆La擬X!B񯾫^慝輻u4m鸆y[赲泆ir儬r204G;髈U钞$d )滳#瘥#RU蜐=QX鑤t3◎諒um7W" 鰻m->aL藌c/{r竪絊>衉xbC隻幭 +J%锳2@気(-蒝]Yl捕!_<儆E泾飗u.uf$ch槷鐙+"V忞r漟愄立 詢"莸!As瘐卷-h凤vm_掩nl{皕e:&gKhp毨P礷tLs覘趸r]k程狔 \;-d嬮H磛]欢j啿B鞕窳泦MS御撴尮2惂漦嵟蒯~Lq缉8摮月s3ɑ}'吺斩74緛"iw呙-;鄱ywラl佗psk]5.4!偼g00郓涢饇妠^ 唼萙$蘻 U~r褱幫χ?1鼾D8溈**X魩闇%!1稟崶L搀;3稶籦抽 ,y%EⅵY1"t挜峭Xv栤A}p89p丯A嚦5啣A频F慃砞xM蒅毎襜X睏鎃猀a~I3*麀P7秢Γ逝掆y帹*瀬K0X由i 嘼$″Kjy餬-'貀軐轂#"f0輅拢鬎4=謹$閥軐^絢籆zDE纄氰A蛝鬨 K!r潚皣$\冯a訪呶径炝蛽梣;贲剱読A冪!o.K乛j霭礆'/Ws淽P髷]Bz绔9N/▂J;甪嵏∑鑕偮,毶+誏1%g)5{)5繙q応6Z聜繅罊朒,e=,)餴缷瀈鐀3v樉)楥pl1v73蚵y挐峭豼雵/豌QO$镐Q俌@ n3E娣?煉 扲俗曁)洉L_5l%旆7尴鬓u渐y搢w~|m +刀."O[0Rp65c鰱r澆8柈橧浪k&.蕴擼糵"煳瘷8籔3Sv}9^3鬍i擿PK f?ev隭蚿H^塛柼38V1u~頔._ ~乹騚 "像L阾yx滓<鍣,]搥棗G淽()桓g娧;3%鑩軐^]!3$e|2諉9;11蛁1槨鴞佘 '^V7a 鍒v7踧U伙毵g}熢31J奁"Qネ)`I=O^;彌眿9F飈='鑩軐薅 蜧3%楍<审辡╀"eg蘌鼀遈]鶬v[> endobj +3480 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [107.8759 622.1864 146.9492 633.0904] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +3483 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 511.2147 166.8215 522.1186] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +3484 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 511.2147 198.084 522.1186] +/Subtype /Link +/A << /S /GoTo /D (a00088_79510aa86d3fa0a0fc6cfc49b1da7279) >> +>> endobj +3486 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 472.02 138.5977 482.924] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3487 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 472.02 159.9075 482.924] +/Subtype /Link +/A << /S /GoTo /D (a00088_0cd09beee671e7e9efb0b4aced10249e) >> +>> endobj +3489 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 432.8253 138.5977 443.7293] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3490 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 432.8253 160.4555 443.7293] +/Subtype /Link +/A << /S /GoTo /D (a00088_1df6aa054ef2fa634ac4c6f418228285) >> +>> endobj +3492 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 394.1886 133.6164 404.5346] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3493 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 394.1886 166.5427 404.5346] +/Subtype /Link +/A << /S /GoTo /D (a00088_70297b3e6d4eaae7bd828cb50bd1efe3) >> +>> endobj +3495 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 354.9939 133.6164 365.34] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3496 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 354.9939 167.6585 365.34] +/Subtype /Link +/A << /S /GoTo /D (a00088_8f6b08a5ba2a8d75ca7279e2056aa8c6) >> +>> endobj +3498 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 316.2176 138.5977 326.1453] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3499 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 316.2176 153.2625 326.1453] +/Subtype /Link +/A << /S /GoTo /D (a00088_0ef3ae2764714bf90620075c374c262e) >> +>> endobj +3501 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 277.0229 138.5977 286.9506] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3502 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 277.0229 156.5899 286.9506] +/Subtype /Link +/A << /S /GoTo /D (a00088_3347ef1b6e8581402445d1a0280c7a14) >> +>> endobj +3504 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 237.8283 138.5977 247.7559] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3505 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 237.8283 179.8421 247.7559] +/Subtype /Link +/A << /S /GoTo /D (a00088_db7a3fadb68df5fdd37e8b91a2c751ea) >> +>> endobj +3507 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 198.6336 133.6164 208.5613] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3508 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 198.6336 144.4057 208.5613] +/Subtype /Link +/A << /S /GoTo /D (a00088_ef661afb3aa82f0437d2ed8d3c20be76) >> +>> endobj +3510 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 159.4389 133.6164 169.3666] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3511 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 159.4389 144.9637 169.3666] +/Subtype /Link +/A << /S /GoTo /D (a00088_eb9fcbd3c9b0a795dcd63f33c323d65c) >> +>> endobj +3513 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 120.2443 133.6164 130.1719] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3514 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 120.2443 147.1754 130.1719] +/Subtype /Link +/A << /S /GoTo /D (a00088_e3aa9cc25e45b663e6aabc54c013019e) >> +>> endobj +3478 0 obj << +/D [3476 0 R /XYZ 90 757.9346 null] +>> endobj +714 0 obj << +/D [3476 0 R /XYZ 90 739.9346 null] +>> endobj +226 0 obj << +/D [3476 0 R /XYZ 90 739.9346 null] +>> endobj +3479 0 obj << +/D [3476 0 R /XYZ 90 685.4723 null] +>> endobj +3481 0 obj << +/D [3476 0 R /XYZ 90 530.3348 null] +>> endobj +3482 0 obj << +/D [3476 0 R /XYZ 90 530.3348 null] +>> endobj +3485 0 obj << +/D [3476 0 R /XYZ 90 491.2835 null] +>> endobj +3488 0 obj << +/D [3476 0 R /XYZ 90 452.0888 null] +>> endobj +3491 0 obj << +/D [3476 0 R /XYZ 90 412.8942 null] +>> endobj +3494 0 obj << +/D [3476 0 R /XYZ 90 373.6995 null] +>> endobj +3497 0 obj << +/D [3476 0 R /XYZ 90 334.5049 null] +>> endobj +3500 0 obj << +/D [3476 0 R /XYZ 90 295.3102 null] +>> endobj +3503 0 obj << +/D [3476 0 R /XYZ 90 256.1155 null] +>> endobj +3506 0 obj << +/D [3476 0 R /XYZ 90 216.9208 null] +>> endobj +3509 0 obj << +/D [3476 0 R /XYZ 90 177.7262 null] +>> endobj +3512 0 obj << +/D [3476 0 R /XYZ 90 138.5315 null] +>> endobj +3475 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3517 0 obj << +/Length 824 +/Filter /FlateDecode +>> +stream +x诃桲o贎稔>蹤}o巬E峊㎝%QD垺H沥亘煽镟鹾娴モ喇wX31鷃 50'']綥癥寅餼攟]陿覾Вi絻F8騮魌唡0 +蝉a, +?哗V隝迩座4_ 衒y1砷扱2jp?篔緦谯7tJh苘黽r{Q^%绖*鼵`O変"L灀涗g粡_p(赏2A鴶嶸丼螁+傝A3)琇C驭w滐e凘隲壌齿铐$s 丿mf鸵u +A>諩[蹏jMp9` 3槔簦 瘤.Z5y)玵曔堮4 瓁宺h 8丳頡vc鯾萖Mn[T%T-kTG∕u糸圇雒q皲5!洉lO拋vl鴲3旜觕h肢hw脀;贑舛琚柶栉执.膍裊5盷<JTQ肌$睂撶鳬#mho#L訮椂a耽/Wa布裷1/所瞚>D處橨逯妐旜UWg\ 夔j雡党酇W濠畾^褐.]苷甍閆W籺弄z軼 C)榮V炞J0L爴=酱 2礨/I莦紲旗-t貲Wa嬬q贉4蕓 /颌絇TG1諓.狛O?F$s<匁;拶瘕8N:蕙梃顸0~駨;佤e=誼G-y/k堐b 尰凾`ry攼阣⿳3O蔣&德碹- 鴜>WmW鲽$黁]暐1h~挳 +蒻ep伿塟閣瞜-齽赹鱑A映N仞狜=G]鶌rlL!镲ap礗~軱翶鼘瑕 甘B#Xkf葰狼7齳6藡輮*碞}7!endstream +endobj +3516 0 obj << +/Type /Page +/Contents 3517 0 R +/Resources 3515 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3474 0 R +/Annots [ 3520 0 R 3521 0 R 3523 0 R 3524 0 R 3526 0 R 3527 0 R 3529 0 R 3530 0 R ] +>> endobj +3520 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 726.8189 133.6164 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3521 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 726.8189 185.3615 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00088_a5f58074435cdc180f17de69651beebd) >> +>> endobj +3523 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 688.9408 133.6164 698.8685] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3524 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 688.9408 157.1377 698.8685] +/Subtype /Link +/A << /S /GoTo /D (a00088_2d9732cf5752d30bd11cb25dc7d0c8d3) >> +>> endobj +3526 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 650.0865 133.6164 660.0142] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3527 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 650.0865 152.1567 660.0142] +/Subtype /Link +/A << /S /GoTo /D (a00088_4289c59840b128f2f6526e9da2711d47) >> +>> endobj +3529 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 610.256 191.1698 621.1599] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +3530 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [191.6679 610.256 226.3075 621.1599] +/Subtype /Link +/A << /S /GoTo /D (a00088_97f9e1fda815bfb8b1f4577c355ade20) >> +>> endobj +3518 0 obj << +/D [3516 0 R /XYZ 90 757.9346 null] +>> endobj +3519 0 obj << +/D [3516 0 R /XYZ 90 739.9346 null] +>> endobj +3522 0 obj << +/D [3516 0 R /XYZ 90 707.0579 null] +>> endobj +3525 0 obj << +/D [3516 0 R /XYZ 90 668.2036 null] +>> endobj +3528 0 obj << +/D [3516 0 R /XYZ 90 629.3493 null] +>> endobj +3515 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3533 0 obj << +/Length 646 +/Filter /FlateDecode +>> +stream +x讠UMo0 禁W嘏9X%鮡v鷣暗沟A崞Jk u:瞧?蕱S'鯕脨C$憒|彚h寔~[31+椣膹t|a0O_缪繁eVs蟇侳8騲^&(,錜*L趏?h A,o騸u釉聿i毮鉬>华蓻rS螳鑭綾*⊙篪. .堭ULXb叽喼蝤9抃 泆t狒.`J疊1-%>(鎀1 i藯{<葭EQ廵鲭k穜睫j榧>郑JR┕O鱏Y-譵<G濲疤9~灷蔢&M{殌!芼6x} 0橴歓dRH24# 冭3卒遐輛Y/8愯 i泵箆/帝町噩'窑e(鄖箐晔厺/槽n橭銇1c汑>sw*違.n$逴閏至谡孧鰇裰蹓芔2郆厤鷨 A鶈泱辯s!PW饷寬Y兙w:?冮z ┿-h}斴喾钱5魍;v傆 ~葞3i!;蜰((涣o廬>) 蕪k楊紟錟 爓硹鱒/︽2斮潼侱嵓 呅孏殾&実+86P馾/]尻鲳惥嫬  O 釘婼=旋j5*賱▲痧:|>簑眠O鍓*Z飪榚ndstream +endobj +3532 0 obj << +/Type /Page +/Contents 3533 0 R +/Resources 3531 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3474 0 R +/Annots [ 3538 0 R 3539 0 R ] +>> endobj +3538 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 566.4282 133.6164 576.7743] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3539 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 566.4282 153.8105 576.7743] +/Subtype /Link +/A << /S /GoTo /D (a00089_aacd5fa1806e0f0dd0bc96dd36507ad8) >> +>> endobj +3534 0 obj << +/D [3532 0 R /XYZ 90 757.9346 null] +>> endobj +996 0 obj << +/D [3532 0 R /XYZ 90 739.9346 null] +>> endobj +230 0 obj << +/D [3532 0 R /XYZ 90 739.9346 null] +>> endobj +3535 0 obj << +/D [3532 0 R /XYZ 90 685.9318 null] +>> endobj +3536 0 obj << +/D [3532 0 R /XYZ 90 584.8203 null] +>> endobj +3537 0 obj << +/D [3532 0 R /XYZ 90 584.8203 null] +>> endobj +3531 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3542 0 obj << +/Length 729 +/Filter /FlateDecode +>> +stream +x讠V薾0茧+"膔儮嚶I谀$T嫸8+薶篦]I擟?"%0|怘晤戊P&!冃蠵KM *>4溿魎n9契|煰 1姪p2k2(  '賫 圦$嵍蒝嫥EVwU節V睇瓭賠Id嫨)扭巰胙沅&笢8倰+ i!褯n%` 義7Xw怜]瀡 8?-)e(\鸅佉)Ey榃y 澈M贠y1]n3饜m匝繙去塿歎Zb0誛 +1R6rc壼%6 '泙>禪/m*弁刺譛*\B~牫n&蟙a郇薺a寺簄-l歛护孒潱MJY75殌.舐%T紏甪沓嶺谧=亵劀扡鳐幱*m卯r惶6'靓T哖婆h鲾爦瀳> endobj +3547 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 565.8703 168.4754 576.7743] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +3548 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 565.8703 187.0156 576.7743] +/Subtype /Link +/A << /S /GoTo /D (a00090_b684c17bf48c8e3b3fcf97b06b4c6ee1) >> +>> endobj +3550 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 552.9189 168.4754 563.8228] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +3551 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 552.9189 182.5823 563.8228] +/Subtype /Link +/A << /S /GoTo /D (a00090_1abbbe7bc5d7d033c727691528b85b8d) >> +>> endobj +3553 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 539.9675 138.5977 550.8714] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3554 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 539.9675 158.2438 550.8714] +/Subtype /Link +/A << /S /GoTo /D (a00090_c9273cc1fcdaeeddc523ca9f34977e06) >> +>> endobj +3543 0 obj << +/D [3541 0 R /XYZ 90 757.9346 null] +>> endobj +997 0 obj << +/D [3541 0 R /XYZ 90 739.9346 null] +>> endobj +234 0 obj << +/D [3541 0 R /XYZ 90 739.9346 null] +>> endobj +3544 0 obj << +/D [3541 0 R /XYZ 90 685.9318 null] +>> endobj +3545 0 obj << +/D [3541 0 R /XYZ 90 584.8203 null] +>> endobj +3546 0 obj << +/D [3541 0 R /XYZ 90 584.8203 null] +>> endobj +3549 0 obj << +/D [3541 0 R /XYZ 90 569.8554 null] +>> endobj +3552 0 obj << +/D [3541 0 R /XYZ 90 556.904 null] +>> endobj +3540 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3557 0 obj << +/Length 1344 +/Filter /FlateDecode +>> +stream +x诃檁s6胚~$Vu鮛Iw長粵穕f噦搙J6呔2杽堩嗅儚瘇9X2倐Zjb筆膨uF媑黪;_燂g?}d栋*SD2`琵阛苘擫 筱籆I鏎hwp籬菅梖\6驱 榶錙n椙譲,歾还y伎淉rI<ㄤ +Z庯硣GZ疠n,⺮(kY:寚胭椯盢w鈚罰%疳 z誊璁脷)丷:?只o躜u甾^V]耒戛陑糦Vm灰@瑪бn篡侍淜鹋o玣Q败谆0TOLi氪蓝玸[}m険鷗}p#m熀黯毜?雤F^2嵆雑: # \*杵?PE7鈂+c騷[@郾mQk滈;讆雩>'\`㏑Y籂粻;歰M弾3攷a┪觪&Ktt楷{pB风-n桇標 嶳I寘湣^曶骪顉;Q磋f倖𴨼軰-Z櫊5跜逫E4X);壏Q屭(p2>FY秩脆誑f鑲顐lf..柚說鑷蓪(\U筬%Z藈凃n跼浑寷橣討皌Y>H嬘觼优tx:洪槔閎:R簔W痾tL鄋EU甝 P楉幠CiB挂泷HX<,づ轳篱bCtt哇O跷Gヰ+e:eyK搨譡娪EKS:躌刵亥8]4カ椲U5磡S*痌緷DyO昜汲霤V斿=M +^)N=M轲𴧭鵩灹 紇Whdg丳7(c 垣蛑JJ勎>my欩k凃6)哬浺e珽穰[嬨EkS紒?崧 砌~q評U察砎斿M +^(NM2"x篷ⅲ)蕖?@粺'鏐ヶ>-擳Wmd煝a%n鍶7抱d>湽 =k頌紂贳SM谾繀兓愺炭`~烸S媅垦葸-l苓蔴髭Z2J笝(endstream +endobj +3556 0 obj << +/Type /Page +/Contents 3557 0 R +/Resources 3555 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3474 0 R +/Annots [ 3562 0 R 3563 0 R 3565 0 R 3566 0 R 3568 0 R 3569 0 R 3571 0 R 3572 0 R 3574 0 R 3575 0 R 3577 0 R 3578 0 R 3580 0 R 3581 0 R 3583 0 R 3584 0 R 3586 0 R 3587 0 R 3589 0 R 3590 0 R 3592 0 R 3593 0 R 3595 0 R 3596 0 R 3598 0 R 3599 0 R 3601 0 R 3602 0 R 3604 0 R 3605 0 R ] +>> endobj +3562 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 616.6656 133.6164 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3563 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 616.6656 148.8392 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00091_7d472d8b3c41618d39c93c4ca92fb3f4) >> +>> endobj +3565 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 603.7142 133.6164 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3566 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 603.7142 147.7332 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00091_a3f2d9cb20290019b2743e8df31a2f8b) >> +>> endobj +3568 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 590.3444 133.6164 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3569 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 590.3444 148.2812 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00091_b15853725b233d526b291db0347d4ecd) >> +>> endobj +3571 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 576.8351 133.6164 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3572 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 576.8351 151.6087 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00091_308463cc7b3d45d2dbcdcedd4cde9bb9) >> +>> endobj +3574 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 563.8836 133.6164 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3575 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 563.8836 166.2933 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00091_4619e69ec86a47f6abe945b39ec7f63a) >> +>> endobj +3577 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 551.9085 133.6164 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3578 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 551.9085 144.4155 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00091_55be3d5413ce49c5c4f5576def12d7ec) >> +>> endobj +3580 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 537.9808 133.6164 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3581 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 537.9808 157.138 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00091_55e7764a9f6ed05aaa98076b9f6770a5) >> +>> endobj +3583 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 525.0293 138.5977 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3584 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 525.0293 179.8327 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00091_babb9c2be394477af97f79507bcb4c86) >> +>> endobj +3586 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 512.0779 138.5977 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3587 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 512.0779 178.1589 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00091_0ec6a6cbcbfd191d393738c16d54e5e1) >> +>> endobj +3589 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 499.1265 138.5977 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3590 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 499.1265 182.5922 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00091_e27f4949613fe3c1de5a839af01d99dd) >> +>> endobj +3592 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 486.175 133.6164 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3593 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 486.175 153.2625 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00091_fa0fe6ca88f692d22af70ff007411252) >> +>> endobj +3595 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 474.1999 133.6164 484.1275] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3596 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 474.1999 157.6859 484.1275] +/Subtype /Link +/A << /S /GoTo /D (a00091_266ea23d75c83f15b915ce54100e51c5) >> +>> endobj +3598 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 460.2722 138.5977 471.1761] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3599 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 460.2722 192.0068 471.1761] +/Subtype /Link +/A << /S /GoTo /D (a00091_805f8fd5533a6d4b6793e0645005da4c) >> +>> endobj +3601 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 448.297 138.5977 458.2247] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3602 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 448.297 148.8392 458.2247] +/Subtype /Link +/A << /S /GoTo /D (a00091_a6d51f3fa5da9b7f9cd37ae69600c04a) >> +>> endobj +3604 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 434.3693 138.5977 445.2732] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3605 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 434.3693 164.331 445.2732] +/Subtype /Link +/A << /S /GoTo /D (a00091_967def494c68cfc8a08d5a6c4dbbc25d) >> +>> endobj +3558 0 obj << +/D [3556 0 R /XYZ 90 757.9346 null] +>> endobj +998 0 obj << +/D [3556 0 R /XYZ 90 739.9346 null] +>> endobj +238 0 obj << +/D [3556 0 R /XYZ 90 739.9346 null] +>> endobj +3559 0 obj << +/D [3556 0 R /XYZ 90 716.7484 null] +>> endobj +3560 0 obj << +/D [3556 0 R /XYZ 90 634.6393 null] +>> endobj +3561 0 obj << +/D [3556 0 R /XYZ 90 634.6393 null] +>> endobj +3564 0 obj << +/D [3556 0 R /XYZ 90 620.6507 null] +>> endobj +3567 0 obj << +/D [3556 0 R /XYZ 90 607.6992 null] +>> endobj +3570 0 obj << +/D [3556 0 R /XYZ 90 594.3295 null] +>> endobj +3573 0 obj << +/D [3556 0 R /XYZ 90 580.8201 null] +>> endobj +3576 0 obj << +/D [3556 0 R /XYZ 90 567.8687 null] +>> endobj +3579 0 obj << +/D [3556 0 R /XYZ 90 555.8935 null] +>> endobj +3582 0 obj << +/D [3556 0 R /XYZ 90 541.9658 null] +>> endobj +3585 0 obj << +/D [3556 0 R /XYZ 90 529.0144 null] +>> endobj +3588 0 obj << +/D [3556 0 R /XYZ 90 516.063 null] +>> endobj +3591 0 obj << +/D [3556 0 R /XYZ 90 503.1115 null] +>> endobj +3594 0 obj << +/D [3556 0 R /XYZ 90 490.1601 null] +>> endobj +3597 0 obj << +/D [3556 0 R /XYZ 90 478.1849 null] +>> endobj +3600 0 obj << +/D [3556 0 R /XYZ 90 464.2572 null] +>> endobj +3603 0 obj << +/D [3556 0 R /XYZ 90 452.2821 null] +>> endobj +3555 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3608 0 obj << +/Length 526 +/Filter /FlateDecode +>> +stream +x讠TMO0界W鴺隄穹9 +圝+鞡oPh6RI賽j縱鞌P*笔瘤|<7  DKM-,2 +o咎0'?|焔.%朲/{匱2dd^萱殺*&LB精W徾觥6歰簐疯恂-][犐]硃弈橳9r[芟g蠃|#褦\a`;唤Ry撼 (稦?璭)嘙v擙阢DG焢L璂~\. +-l兴紎=枊_须EFt輻;3髥N1酧]WWEī{Y歹sWo腉pgq︻5u荮棄薛n\ 醉2!c泠O9R鎡M?`E搄3-2鎋詎SyU厗龄囃7埊1枆牗郌坚剓搰w!劜J崅Z鉡/X赨r]弜 J漝7慕c谀u胴!,暒B[鼣%B>蚏&譁d9慕cy敐裈i蜲糧 +欻醱V豤Q 爳o鉙衉7歏濮摏aX憿歇u讝0B,6e綤di3葡H糠e羋綧C净鷻 +||Ms糊r蚢-茂f6?f?爀ndstream +endobj +3607 0 obj << +/Type /Page +/Contents 3608 0 R +/Resources 3606 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3615 0 R +/Annots [ 3613 0 R 3614 0 R ] +>> endobj +3613 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 615.6894 168.4754 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +3614 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 615.6894 188.6695 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00092_4dc3294d67d705f7248ef57e4259424f) >> +>> endobj +3609 0 obj << +/D [3607 0 R /XYZ 90 757.9346 null] +>> endobj +999 0 obj << +/D [3607 0 R /XYZ 90 739.9346 null] +>> endobj +242 0 obj << +/D [3607 0 R /XYZ 90 739.9346 null] +>> endobj +3610 0 obj << +/D [3607 0 R /XYZ 90 716.7484 null] +>> endobj +3611 0 obj << +/D [3607 0 R /XYZ 90 634.6393 null] +>> endobj +3612 0 obj << +/D [3607 0 R /XYZ 90 634.6393 null] +>> endobj +3606 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3618 0 obj << +/Length 1936 +/Filter /FlateDecode +>> +stream +x诮Z]o6}鳢0榅~奷1 貟礖Y>礒嶝-瘫3 嘄鱙Z$CE旁k憞锐郊<嚄7"C ?dP +4泫pv;烂鮻丿3> ~ ^饥z☉蝘>溰G 斝醖D8g攕AF噵KxxD围鹖鮰颠fvL渊癬nf囒b綗钏蛕黫騠疔#盄藟榴奏'<7寴Vb>`D处蜜}X 鴔/m劦O榩@V枅萹F0疲Cy鱵鴚w臡QMv=+啼`f0鳒rv溋yc.忬[縐苟@e磟赬苂e=拑谥籈WU(縬^暸j緆"W;憹84╠睠pd+8帀麘R4拎Ek嶘舴G嘟鷓繬8想8v罺d D帳薯6_m宙]刨g 斊竩CU淈缶 cn白訵"贊= %唋'鸄:腮vs譆*.骎透噏A瀶=缽q?躛C灚 ~s1谲莨絰7潔)9&xT竏槎庍駈矾&s耝E菽3姅勽淟|#迿%_r*駋悶涠樰7墖ぅ▕⑺糢3n脦&澕o荓帄YQC獗`B8膱wf赡讇淛|'>箖施I|巹蔝]姝歲蹓鏩"L办d䦂1螘@X堲:D鱢⿲讈溔xHgWy縗踡焼婮艞y玣%CP駏g鵙~(陼諚事調N 鱂 $_Yml竐1澔蝎b截/#R亄 "齌bRqf蒖9U*q恀*!儒5琔媂(喫"0骎拓b頭逫* +~打(岁辁a_寜坋&5讻dy1y8砫y詟*8H/洫S鎎醕3o諏!*瘬遈 梔}9?悚 b鷓f生9Uq恀!葲韙褄訞湃碳U3t<@O,詉蜇暒逾 咷V&EU欀Ur5j槡1 惦Sq掠蠒!" o*:呇屹誁螙 mH)0f蕺絔LJ呐~8虒朎5祁p[L P$] 蘐.嚇.淵.j@N誆ぷE騨毁oZ娎QFf蕺籆!aZ炦%c瑡襱璻无^ #{炯?稲Z粖urV爾(l蟓?樍縈匭D嚕V楚#哨g浡瀻k聴臀慽w3L災JE2W!G歝种 趤憸B翾.Xm銢[h+a鮢a苘攙|祂畒媴P幬*ILTO諞鮲P熝A砹:5iT"iRHj + ")虥ウ:SXHgW頎菩訤荟鬍炗A=f澏讨}8Qa㈠,澷!片3Kf銽f =!萮4.h6鈜0)󣤻=爷橣3殸孼g朙m 醛云AzjC愌&h ]m捻爾)%盝h倊 ヘ碭3騪T%SZr*悶濑岙h絖@j凢f蕺簼Us!羪ね偕キ4碝钪瀯檷:儰$蚀dK.C嘓1柰幣囔秠 BV#?E餯韆I祔垅y PⅶtV莃3扨.耪;$夊`鲖1凲DIgq硎Ao諿>炝崾幋r怭尐9う⌒!拞糦j91 鮻tv5愌r0.(q;rV-44WL{鎸yJ鐖耵.牛y凲k斒g酓6p淯/Z⺷闶鬰)窉m鴦紨燈娳1(p!镰橁!i+7CB"鎚4i#珒虻i酧鱊go菝s诸$郡%弹缌磖 S缰|忥讲鼢芒h棘g蔻s袀U跉鉤endstream +endobj +3617 0 obj << +/Type /Page +/Contents 3618 0 R +/Resources 3616 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3615 0 R +/Annots [ 3623 0 R 3624 0 R 3625 0 R 3626 0 R 3627 0 R 3628 0 R 3629 0 R 3630 0 R 3631 0 R 3632 0 R 3633 0 R 3634 0 R 3635 0 R 3636 0 R 3637 0 R 3638 0 R 3639 0 R 3640 0 R 3641 0 R 3643 0 R 3644 0 R 3645 0 R 3646 0 R 3647 0 R 3648 0 R 3649 0 R 3650 0 R 3651 0 R 3653 0 R 3654 0 R 3655 0 R 3656 0 R ] +>> endobj +3623 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 552.2037 169.0429 566.1514] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3624 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 552.2037 189.795 566.1514] +/Subtype /Link +/A << /S /GoTo /D (a00093_5d8996950cdf3d8130cc3ad340eb9dff) >> +>> endobj +3625 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 528.2933 169.0429 542.241] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3626 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 528.2933 188.6791 542.241] +/Subtype /Link +/A << /S /GoTo /D (a00093_7f7bb2145afba5df00c6e10ddefa8ae1) >> +>> endobj +3627 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 504.383 169.0429 518.3307] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3628 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 504.383 187.5831 518.3307] +/Subtype /Link +/A << /S /GoTo /D (a00093_dc69abadd5aa07c7d74f9292db2cd93c) >> +>> endobj +3629 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 480.4727 169.0429 494.4204] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3630 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 480.4727 195.3241 494.4204] +/Subtype /Link +/A << /S /GoTo /D (a00093_b93e351c3abba0c700b26b7b07e9527d) >> +>> endobj +3631 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 456.5623 169.0429 470.51] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3632 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 456.5623 204.7288 470.51] +/Subtype /Link +/A << /S /GoTo /D (a00093_0c816f34c0187f2154c91a18d3ad87c8) >> +>> endobj +3633 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 432.652 169.0429 446.5997] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3634 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 432.652 202.517 446.5997] +/Subtype /Link +/A << /S /GoTo /D (a00093_6157452bdc9921f44b2e22e4b5969258) >> +>> endobj +3635 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 408.7417 169.0429 422.6894] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3636 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 408.7417 198.6317 422.6894] +/Subtype /Link +/A << /S /GoTo /D (a00093_8082509468b2ac80ed7746aa1a5bc4f7) >> +>> endobj +3637 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 384.8313 169.0429 398.779] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3638 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 384.8313 196.8783 398.779] +/Subtype /Link +/A << /S /GoTo /D (a00093_7675e6b9adbddbd545d3aac8ca092fbb) >> +>> endobj +3639 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 360.921 169.0429 374.8687] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3640 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 360.921 203.6229 374.8687] +/Subtype /Link +/A << /S /GoTo /D (a00093_b4622e2599ff3a592db09219b2641682) >> +>> endobj +3641 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.183 337.0107 130.9264 350.9584] +/Subtype /Link +/A << /S /GoTo /D (a00093_1deb2899508216804823498a69378118) >> +>> endobj +3643 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 274.1638 169.0429 288.1115] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3644 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 274.1638 189.795 288.1115] +/Subtype /Link +/A << /S /GoTo /D (a00093_5d8996950cdf3d8130cc3ad340eb9dff) >> +>> endobj +3645 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 250.2534 169.0429 264.2011] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3646 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 250.2534 188.6791 264.2011] +/Subtype /Link +/A << /S /GoTo /D (a00093_7f7bb2145afba5df00c6e10ddefa8ae1) >> +>> endobj +3647 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 226.3431 169.0429 240.2908] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3648 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 226.3431 187.5831 240.2908] +/Subtype /Link +/A << /S /GoTo /D (a00093_dc69abadd5aa07c7d74f9292db2cd93c) >> +>> endobj +3649 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 202.4328 169.0429 216.3805] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3650 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 202.4328 199.7475 216.3805] +/Subtype /Link +/A << /S /GoTo /D (a00093_8da121d6e50992ec55778f9b2141552d) >> +>> endobj +3651 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.183 178.5224 143.1005 192.4701] +/Subtype /Link +/A << /S /GoTo /D (a00093_3983b45977630418d3038231aa8b68ed) >> +>> endobj +3653 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 115.6755 169.0429 129.6232] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3654 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 115.6755 189.795 129.6232] +/Subtype /Link +/A << /S /GoTo /D (a00093_5d8996950cdf3d8130cc3ad340eb9dff) >> +>> endobj +3655 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 91.7652 169.0429 105.7129] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3656 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 91.7652 188.6791 105.7129] +/Subtype /Link +/A << /S /GoTo /D (a00093_7f7bb2145afba5df00c6e10ddefa8ae1) >> +>> endobj +3619 0 obj << +/D [3617 0 R /XYZ 90 757.9346 null] +>> endobj +1000 0 obj << +/D [3617 0 R /XYZ 90 739.9346 null] +>> endobj +246 0 obj << +/D [3617 0 R /XYZ 90 739.9346 null] +>> endobj +3620 0 obj << +/D [3617 0 R /XYZ 90 685.8208 null] +>> endobj +3621 0 obj << +/D [3617 0 R /XYZ 90 584.5797 null] +>> endobj +3622 0 obj << +/D [3617 0 R /XYZ 90 584.5797 null] +>> endobj +3642 0 obj << +/D [3617 0 R /XYZ 90 306.6831 null] +>> endobj +3652 0 obj << +/D [3617 0 R /XYZ 90 148.1949 null] +>> endobj +3616 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3669 0 obj << +/Length 1396 +/Filter /FlateDecode +>> +stream +x诃橾o6嗭+ti秋忁m鞻,脢-.喍(Yq屍v&蒊僡}GδP朌3襦 Q襅撸#$~$18QB!酶L餐'+8鼅B氂)淥}翉笊?Sd$暽pI悹&箦签BD蚏*餿烤RV嫪椿WU毕*劬蘯騜F4遞9R +)醖鰕~1鵬钇o摛汕8Y媾#f碒a#b M6NY籹7箽甤O: 荪 l6鰊𙐮#&Q*{鰶k笍-韓於15统魿敬鎜穽2焣<]m騧U€;%/ K-h}猉5欿匍S績祰诫粥螝/UD値Ky覞1姼 +' 镌i萔讈,atZ"潽?顖",u趵;メ坄)㈨;靦瞂; g趛舱u 驰3偋yQ岪ZSdL潽?㏑SD闓{淘A+響莡uk[ 还^4弒6#bz沢3姧_她&`姜s懲\q謠B址瞙; 鏩唗蛀悑,d=Sш>b叫坮l㥮1<}葙讷BQ-鈸惯!,:: 鐔@覅Y萌F酭ш;=4抿:鋰u5}y5穽OX`- +v葖>)零濛:劀oe盐w@蝩> 闇!嬅D郜麑F"L?顖b卋v满槳W杋耯磨圤額噣縉雘銵O@逗d]畸c@) *`闠-ui囃xf_3.重>4檥瓜mZ帝s堁擎 扣n蟋Z锒a4嫽踱膯釮燉∝he驯976聬.6|H垗∧o 璗/u#!)茖'H纲5Р籡数曙毴(肢篸Y俸e絔uJ傶「 仯nd█ #!鞐饪齚佲T咋 +$绉_>; 笋u脶鱸钟G窍'|"!6脿)C娒x唅@斳"剷佁惺j溺 A.玼6恾i擅4 h |ty 垷監0銵螭U炸(}雌v飏莌制J俻d0<>D-3殜竀H譻泭乀鋎暴 rf*:訇:怌(5傮:H:U茚D臅[箤G頔 F5駤 +~噽,谡裙畣!潾>d慻}W俹潽?顖珎"L8媉鵾┇#,L|I閣冠盛]韤滊j夜闏W﨎t奘_oW〧髨吙椇I$"\ 髗Bn恫h7; 绾唗n鷲 !Fo岑7鷪C章企餇暞Z;厨c"蚀.佲仙A(8鯐 m?W1)爊7?' 9]1叓苢 顝V;D +y?KRC篓橠F1蔺AF l晬趋6/n賏返圻谄Ef鹒囆f嬤P鰡b籊1柾w虒B袲齄梖 j勛Ov鹡黜i昽廹碸o鸭摾zendstream +endobj +3668 0 obj << +/Type /Page +/Contents 3669 0 R +/Resources 3667 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3615 0 R +/Annots [ 3671 0 R 3672 0 R 3673 0 R 3674 0 R 3675 0 R 3676 0 R 3677 0 R 3678 0 R 3679 0 R 3680 0 R 3681 0 R 3682 0 R 3683 0 R 3684 0 R 3685 0 R 3687 0 R 3688 0 R 3689 0 R 3690 0 R 3691 0 R 3692 0 R 3693 0 R 3694 0 R 3695 0 R ] +>> endobj +3671 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 713.4339 169.0429 727.3816] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3672 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 713.4339 187.5831 727.3816] +/Subtype /Link +/A << /S /GoTo /D (a00093_dc69abadd5aa07c7d74f9292db2cd93c) >> +>> endobj +3673 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 689.5236 169.0429 703.4713] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3674 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 689.5236 196.8783 703.4713] +/Subtype /Link +/A << /S /GoTo /D (a00093_7675e6b9adbddbd545d3aac8ca092fbb) >> +>> endobj +3675 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 665.6133 169.0429 679.561] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3676 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 665.6133 196.3204 679.561] +/Subtype /Link +/A << /S /GoTo /D (a00093_7a58d95f7f7827789ff52500e3d16c34) >> +>> endobj +3677 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 641.7029 169.0429 655.6506] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3678 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 641.7029 181.4959 655.6506] +/Subtype /Link +/A << /S /GoTo /D (a00093_b6e9a75167bdddd561373bc5b6ef501c) >> +>> endobj +3679 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 617.7926 169.0429 631.7403] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3680 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 617.7926 197.3963 631.7403] +/Subtype /Link +/A << /S /GoTo /D (a00093_3ad48284f7a91f78bb24096aad89056e) >> +>> endobj +3681 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 593.8823 169.0429 607.83] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3682 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 593.8823 203.633 607.83] +/Subtype /Link +/A << /S /GoTo /D (a00093_494ea6767a8a8fab7abe96b799d6c3b3) >> +>> endobj +3683 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 569.9719 169.0429 583.9196] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3684 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 569.9719 195.3339 583.9196] +/Subtype /Link +/A << /S /GoTo /D (a00093_e9205a565ea3c911a785fc4e87c91a58) >> +>> endobj +3685 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.183 546.0616 135.3497 560.0093] +/Subtype /Link +/A << /S /GoTo /D (a00093_e292b8977f6b81265bf14e1676face3e) >> +>> endobj +3687 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 483.297 169.0429 497.2446] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3688 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 483.297 189.795 497.2446] +/Subtype /Link +/A << /S /GoTo /D (a00093_5d8996950cdf3d8130cc3ad340eb9dff) >> +>> endobj +3689 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 459.3866 169.0429 473.3343] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3690 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 459.3866 188.6791 473.3343] +/Subtype /Link +/A << /S /GoTo /D (a00093_7f7bb2145afba5df00c6e10ddefa8ae1) >> +>> endobj +3691 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 435.4763 169.0429 449.424] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3692 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 435.4763 187.5831 449.424] +/Subtype /Link +/A << /S /GoTo /D (a00093_dc69abadd5aa07c7d74f9292db2cd93c) >> +>> endobj +3693 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 411.5659 169.0429 425.5136] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3694 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 411.5659 196.8783 425.5136] +/Subtype /Link +/A << /S /GoTo /D (a00093_7675e6b9adbddbd545d3aac8ca092fbb) >> +>> endobj +3695 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.183 387.6556 138.1195 401.6033] +/Subtype /Link +/A << /S /GoTo /D (a00093_4f39f0fe6a820d260fe6cddf9ccaa832) >> +>> endobj +3670 0 obj << +/D [3668 0 R /XYZ 90 757.9346 null] +>> endobj +3686 0 obj << +/D [3668 0 R /XYZ 90 515.7752 null] +>> endobj +3667 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3703 0 obj << +/Length 1646 +/Filter /FlateDecode +>> +stream +x诃歘o6胚)<堛鰍鑊[灜$F鄣鍀憽b檗 +4瞮柠蠎DZ)`犍詊思Tf簒烉閏狠U豞鍌_o'考~隀7翷oN-`Z樲.飂犇M%斠0;g卦|専7尬淁y隨?.氥墁顅n晴z犹浾vss鸻蜊m"锧4衦|涇蒹2榩&接语g嘟>O攼衩z騣騑j缂鉻佬鵭惷' 妳oD肚结呢A*pv濕b鸹U絕l4幛z4o灌荦7LI趇雫B慨柬K-褗妝<珑}7n浊 C褽]忣杈4tR0#8爐)-M'5鄮?O 8e埤7Kw +D 巖蜏市NE臆鮲赏 7sK-Y櫋5勖哬i1癑%潔j訤韮@zC鴺dy僕;I蠩]+6摖嫼莺 ]樎)徛UIE昒瀁玙u蕽竚k巗嵘4殠L#疏t 擞佊鋞x:候t鄑)9輏穁^衖 吇昑T]-p #0杚i靫<2(c乀,N椻懹狁@枋銇鹰x鋞玗 ={8詶擣3-NY%U?斓尉?w两褬d,&QF.$c傂暻1砷歠`'弚];=jP繞JO9e矗Y冏;娪%Gs:躋劗躋.9氂眦踗{鵣0 X2潏衚&(视(=嫁S.y氂 檍欋燩紵5Uq平/陑x忾脶鴟Ah命L湴r潏綱!茯%5Q*谡楁7EK瀎h劌鉲鍘尚岉癬瑅箦ri╡夝UIDT6%霼y.s羷蹉?,QFg.##鈦鄷荎神桋増龈iIEUw鞢⺷ 9悉p0殥\$扇擿婼B蠩]O 哤/陑x>槽鴄Hn=k葒偛咺K诬拰65k饅Sq篸jNG槉鄷泭%Ss荐t +琝'5a/醛V捬緁 ^+N梶烷衼9FW<0'琚瓽wǹm鎺I-奧%U豴鏀倊;5x3诇)+輝>2枏(s乀,N楎懹狴@枋髞鹰|鋞笈揍|] +┄<輔蚵#鰿-rX>R<8]蔊N囩+N楎懹5 '=犀吠v" 訓莡*谫楁7EK緁h腑鉮瀹稍甲8楏撬穠Z2弙[eN +贖f湻u矡x櫈嫍Yc槞9&BWn'N楛涕緊^蕜墪1 +叓拪*玌钝~蔗闅魩僉譺$#脕U,Au=:|d忈忟 绩脶匸飜N2〗#<隓銾/漟)[捬苀 ^o,N棇烷蝎+娟 酣胗潠u=顔钽鞬 皧"痔8_F0S碏徔X@R< 8] +HN+N捰mw筒]w1jSL)畃脪*mL鬕忣-0Pv皈CMU,O)s釔郃編2灕S)聛頀蕡衣警7鮺弈e巕解q忝 栀丙Ⅺ诉鵉tkL巛J朴`y-募\岤鲝割暨彈Km讠紧晸馐endstream +endobj +3702 0 obj << +/Type /Page +/Contents 3703 0 R +/Resources 3701 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3615 0 R +/Annots [ 3708 0 R 3709 0 R 3711 0 R 3712 0 R 3714 0 R 3715 0 R 3717 0 R 3718 0 R 3720 0 R 3721 0 R 3723 0 R 3724 0 R 3726 0 R 3727 0 R 3729 0 R 3730 0 R 3732 0 R 3733 0 R 3735 0 R 3736 0 R 3738 0 R 3739 0 R 3741 0 R 3742 0 R 3744 0 R 3745 0 R 3747 0 R 3748 0 R 3750 0 R 3751 0 R 3753 0 R 3754 0 R 3756 0 R 3757 0 R 3759 0 R 3760 0 R 3762 0 R 3763 0 R 3765 0 R 3766 0 R ] +>> endobj +3708 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 616.6656 133.6164 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3709 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 616.6656 148.8392 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00094_e1e60d56ea87dfa09230e25ca5ecf2fc) >> +>> endobj +3711 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 603.7142 133.6164 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3712 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 603.7142 147.7332 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00094_8cf0ca17b115ff2e3071b3fabcc43b53) >> +>> endobj +3714 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 590.3444 133.6164 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3715 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 590.3444 148.2812 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00094_e57281f5bef284bc9545834ef8ed4a96) >> +>> endobj +3717 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 576.8351 133.6164 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3718 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 576.8351 151.6087 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00094_7a59f0dad059786238d8ab604630e7f3) >> +>> endobj +3720 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 563.8836 133.6164 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3721 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 563.8836 166.2933 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00094_85d7f35662f7be20cd84e789a290dd4b) >> +>> endobj +3723 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 551.9085 133.6164 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3724 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 551.9085 144.4155 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00094_0f27e16ddcf7199d514968204966f559) >> +>> endobj +3726 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 537.9808 133.6164 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3727 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 537.9808 157.138 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00094_e45b31a0a277dd5325ad2a332358b21b) >> +>> endobj +3729 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 525.0293 138.5977 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3730 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 525.0293 179.8327 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00094_af7a8a5310ad945de38f5b3ac755ae7d) >> +>> endobj +3732 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 512.0779 138.5977 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3733 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 512.0779 178.1589 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00094_c8f124419a231f38bb6cdf5041757a27) >> +>> endobj +3735 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 499.1265 138.5977 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3736 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 499.1265 182.5922 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00094_8d4e08d051b35b1c710c3be5b8bbfa05) >> +>> endobj +3738 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 486.175 138.5977 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3739 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 486.175 168.7542 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00094_a81fff4836049cb3c018304d77337554) >> +>> endobj +3741 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 473.2236 138.5977 484.1275] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3742 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 473.2236 173.1875 484.1275] +/Subtype /Link +/A << /S /GoTo /D (a00094_025ffa46b799fa6952719c499a3ae17c) >> +>> endobj +3744 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 460.2722 133.6164 471.1761] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3745 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 460.2722 159.3497 471.1761] +/Subtype /Link +/A << /S /GoTo /D (a00094_2541fae506eb111ff1be2372e0919839) >> +>> endobj +3747 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 447.8787 133.6164 458.2247] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3748 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 447.8787 159.8977 458.2247] +/Subtype /Link +/A << /S /GoTo /D (a00094_71721395f1c7c42b8bcc111b339bea7c) >> +>> endobj +3750 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 434.3693 133.6164 445.2732] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3751 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 434.3693 170.7167 445.2732] +/Subtype /Link +/A << /S /GoTo /D (a00094_6af8a59d0ab8967aacea749d6e59ac90) >> +>> endobj +3753 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 421.4179 133.6164 432.3218] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3754 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 421.4179 154.9262 432.3218] +/Subtype /Link +/A << /S /GoTo /D (a00094_619d9755a5d4aaabdb2e5e6ea4c1e0bf) >> +>> endobj +3756 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 409.0244 133.6164 419.3704] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3757 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 409.0244 153.2627 419.3704] +/Subtype /Link +/A << /S /GoTo /D (a00094_7f0ab3fe3bcf1e3ed9f5950cb4474ec1) >> +>> endobj +3759 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 395.515 138.5977 406.419] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3760 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 395.515 184.256 406.419] +/Subtype /Link +/A << /S /GoTo /D (a00094_f4a1d8cfbe270393a2de02b0c743e474) >> +>> endobj +3762 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 382.5636 133.6164 393.4675] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3763 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 382.5636 154.1892 393.4675] +/Subtype /Link +/A << /S /GoTo /D (a00094_dc7001682017599549f57771f4cd1b9a) >> +>> endobj +3765 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 369.6122 133.6164 380.5161] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3766 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 369.6122 165.4367 380.5161] +/Subtype /Link +/A << /S /GoTo /D (a00094_dde3cf9a57445814d01b3c67da08afdb) >> +>> endobj +3704 0 obj << +/D [3702 0 R /XYZ 90 757.9346 null] +>> endobj +1001 0 obj << +/D [3702 0 R /XYZ 90 739.9346 null] +>> endobj +250 0 obj << +/D [3702 0 R /XYZ 90 739.9346 null] +>> endobj +3705 0 obj << +/D [3702 0 R /XYZ 90 716.7484 null] +>> endobj +3706 0 obj << +/D [3702 0 R /XYZ 90 634.6393 null] +>> endobj +3707 0 obj << +/D [3702 0 R /XYZ 90 634.6393 null] +>> endobj +3710 0 obj << +/D [3702 0 R /XYZ 90 620.6507 null] +>> endobj +3713 0 obj << +/D [3702 0 R /XYZ 90 607.6992 null] +>> endobj +3716 0 obj << +/D [3702 0 R /XYZ 90 594.3295 null] +>> endobj +3719 0 obj << +/D [3702 0 R /XYZ 90 580.8201 null] +>> endobj +3722 0 obj << +/D [3702 0 R /XYZ 90 567.8687 null] +>> endobj +3725 0 obj << +/D [3702 0 R /XYZ 90 555.8935 null] +>> endobj +3728 0 obj << +/D [3702 0 R /XYZ 90 541.9658 null] +>> endobj +3731 0 obj << +/D [3702 0 R /XYZ 90 529.0144 null] +>> endobj +3734 0 obj << +/D [3702 0 R /XYZ 90 516.063 null] +>> endobj +3737 0 obj << +/D [3702 0 R /XYZ 90 503.1115 null] +>> endobj +3740 0 obj << +/D [3702 0 R /XYZ 90 490.1601 null] +>> endobj +3743 0 obj << +/D [3702 0 R /XYZ 90 477.2087 null] +>> endobj +3746 0 obj << +/D [3702 0 R /XYZ 90 464.2572 null] +>> endobj +3749 0 obj << +/D [3702 0 R /XYZ 90 451.8637 null] +>> endobj +3752 0 obj << +/D [3702 0 R /XYZ 90 438.3544 null] +>> endobj +3755 0 obj << +/D [3702 0 R /XYZ 90 425.4029 null] +>> endobj +3758 0 obj << +/D [3702 0 R /XYZ 90 413.0094 null] +>> endobj +3761 0 obj << +/D [3702 0 R /XYZ 90 399.5001 null] +>> endobj +3764 0 obj << +/D [3702 0 R /XYZ 90 386.5486 null] +>> endobj +3701 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3769 0 obj << +/Length 1274 +/Filter /FlateDecode +>> +stream +x诘榏o6嗭+炱f巼 哴 i哎轚[$耫俪鍉J"Y奨/|aJzu赆'$怷歨〾錌%関F箭f狁/粋_W碂^3沊bS申緤爛H,Ym尥5籜2I绉lw陟镆]Q詗迻嘢Z皱[w 0sWの屚A鹋囌挽摘J鴊鲱M6梏fF 稦&燅俠瓥%蹤`脊萭og秖 c塉嚆檪 x52蘚w3J/K竺廓觿仄蘔,u鲊琀笥&(:J蓧﹦?從褼 m懬0槃1/! +腏Y搴碄6YrA纓R&捑v:溯蜈覥/砞怦}CZㄢ芎]Q+}`w_=魁Q吒./恠H$M&妀烫把O軋朷hc ca狥p^~鮡捷珙xu^3PF4g0Y 謤纀跆9<凣儉!4p9姘蹣晊嫑莟熤熁g$VM\丢X諆h娟脳+6冓%唻筅無侳1堧} S稽覤9IN<腥髏3Q骕掘 +JC&壌BV袭輠JY=丫cC.陲 䴘艿)y$c=曵昏鹾 =鑥骝蛁d<昲M愊庿]~ +#炩鴝3&嚌遙扥諼u8[猅註k贵t禵o6嚮r权$&鎾丵.!簂t=棁阝]Mㄑf櫔 z躹EC袘\繷 =姍椐)O桓R⒉3'ie捩1@ 褧i顇\6竖駐W嗠襟3"罍 櫓 kq仪醶2崘0@ =d鑆鹋@G5簽捁&妭槾W懍泠%遭匙鑪鲵0',纔鈹=$0朷缺蠤敓9ne=庴]何樲wU*N蹚iU温╙蛤箢饂}耨kC螽聓E'-e匄>H 6唗## 鴕ぇ莸Hw軪悶皐9矣鯶せ鉎["$:e曼B9.-崓T=庙I5\奞>TSCp1Y滉N罈S=懋ズ腩d茽fD1l)w +5毃籉譻W桖罍郉漬%W勆 戹痀顆貁j洿瞶駖>鍋2酆e筟尜',枑p儸i\殴8榎銟弨偈v齜 湈簁漓筴,蛀麽nS它窛鳅瓨Z橄儸绱qx顝1冸b槾栤菿I僑#祽跗_t済i鏿v?瞳繻#<疞{葫鑭C盇qSt^VQo,猵~S綵vo\榚8j2)茗鬙E迟 魥+6緦RU楊L 6揟8t趠鄪6鯂y嵉N 媻鴈ndstream +endobj +3768 0 obj << +/Type /Page +/Contents 3769 0 R +/Resources 3767 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3615 0 R +/Annots [ 3772 0 R 3773 0 R 3776 0 R 3777 0 R 3779 0 R 3780 0 R 3782 0 R 3783 0 R 3785 0 R 3786 0 R 3788 0 R 3789 0 R ] +>> endobj +3772 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 604.7351 139.9724 627.7038] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +3773 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.8378 604.7351 192.4453 627.7038] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +3776 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 522.2884 166.8215 533.1924] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +3777 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 522.2884 198.084 533.1924] +/Subtype /Link +/A << /S /GoTo /D (a00095_8a661a2d544100b82d0d14a1985083d5) >> +>> endobj +3779 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 483.4341 138.5977 494.3381] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3780 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 483.4341 159.9075 494.3381] +/Subtype /Link +/A << /S /GoTo /D (a00095_981392e295db4d024eea95805c51c371) >> +>> endobj +3782 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 444.5798 138.5977 455.4838] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3783 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 444.5798 160.4555 455.4838] +/Subtype /Link +/A << /S /GoTo /D (a00095_280a0c2a93544e597f92bbacf36ee1dc) >> +>> endobj +3785 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 406.7018 133.6164 416.6295] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3786 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 406.7018 144.4155 416.6295] +/Subtype /Link +/A << /S /GoTo /D (a00095_4da1d7815516cd2b5bda3a66fdf05198) >> +>> endobj +3788 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 366.8712 193.9395 377.7752] +/Subtype /Link +/A << /S /GoTo /D (a00153_ga92afb113e122f860392bfbd385f842e) >> +>> endobj +3789 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.4377 366.8712 229.0773 377.7752] +/Subtype /Link +/A << /S /GoTo /D (a00095_c8afa29e0aa5e789d6929b366d98ba56) >> +>> endobj +3770 0 obj << +/D [3768 0 R /XYZ 90 757.9346 null] +>> endobj +1002 0 obj << +/D [3768 0 R /XYZ 90 739.9346 null] +>> endobj +254 0 obj << +/D [3768 0 R /XYZ 90 739.9346 null] +>> endobj +3771 0 obj << +/D [3768 0 R /XYZ 90 685.9318 null] +>> endobj +3774 0 obj << +/D [3768 0 R /XYZ 90 541.2384 null] +>> endobj +3775 0 obj << +/D [3768 0 R /XYZ 90 541.2384 null] +>> endobj +3778 0 obj << +/D [3768 0 R /XYZ 90 502.5274 null] +>> endobj +3781 0 obj << +/D [3768 0 R /XYZ 90 463.6732 null] +>> endobj +3784 0 obj << +/D [3768 0 R /XYZ 90 424.8189 null] +>> endobj +3787 0 obj << +/D [3768 0 R /XYZ 90 385.9646 null] +>> endobj +3767 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3792 0 obj << +/Length 1294 +/Filter /FlateDecode +>> +stream +x诃檁o6胚)翳<堛鰍萙[$鄢錷,挕b椴倗峫]s$Q&札兟褺KM,猉,h皲峻運忽2鼃辐=硡%V1U=+( +瞠%qS2!$,O傀%]↓另猐鮃熪胕轂7`柕o墉O/醵]低n{髉鱭袼]$駹+8㖞?孝r攑kd駨鸃 X藠梾`<|,>/䦂u鷨 c銜狼 偢oX1s狖k萝鑰R<5稔8O鮟x划鰰乆)蠒載w厵y璍雷经踀畅+?W鮭}h鯽!瀤艺閤m_缍﨎)6g貔魰'4[? 旝h髫砦嬴V70騆&惞 `黡7誵腇龄d轗A?貈*"痷簙0&喏礇K裳逼yN顩脫o鷶p侒逺ゲtA7;櫙gD1 +(#翿潷銙P摜 葸蠜 8』v嫑%建骝垼Tc!g╓妪|-w綕(Zt3A猛淔涳%璍汹蓠襂E4X){壏QL(p2>FY秩脆誑f鑲n@噝壯63Ct篗0+*篆癉k鵩R钯萌m[jw瀜Oιt$,A朞毅黷鄑1)刵~:p簶帞7潳D竅Q曤Wr斆斑墄(M(Wz:婫愬銇8?8]孏J嚽.#鰊!卿蝰X_R*I樥8eU哈]6鶰1憘P丬泴I"纀d鶚 =螐 Nc捯1A桄1I橼vd袂婳])(縥@s泂4闰&痺帵t福輡Gq鸿hJ?熠蒎傾燪糝yQvA/檘飢L< 布岭=砰ⅶ) 詷( +披QS%2肉療<瀆.祘? +',瀵Up穦瀧Q 瀹7E嫗&hKз;姴EC躲a蒽WUu4T栉D(属鞏mJr>鑩夤La贜 +癶Y>H忬脕优t檟 x篌併艀U}l'"bH+-nZT鍅7軨鋵K830檼T$什)羫湞 ] 桊擿x砈捔 灮忟w噾綶扠M觥 "\g哕,ojR饅Sq篽jJ1翛o*MM窈K訳X'4^旝U%<司jEY拮む蹙鈚炎.+7遅/:阔鯿?楣ke(_w睘EyW%%Bg_芳厅獳笟肻M2"x骫篷糺jmn√J贝^Tr葺鐿v訯掙蟬<;沤[泭伢X 揄7v粶诮$簺蘺|阭}X礱1l!>迉\烖`/}区;娣オ?:$刁{呔嚟?]^*蓊l@Kf?w4[醗ndstream +endobj +3791 0 obj << +/Type /Page +/Contents 3792 0 R +/Resources 3790 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3615 0 R +/Annots [ 3797 0 R 3798 0 R 3800 0 R 3801 0 R 3803 0 R 3804 0 R 3806 0 R 3807 0 R 3809 0 R 3810 0 R 3812 0 R 3813 0 R 3815 0 R 3816 0 R 3818 0 R 3819 0 R 3821 0 R 3822 0 R 3824 0 R 3825 0 R 3827 0 R 3828 0 R 3830 0 R 3831 0 R 3833 0 R 3834 0 R 3836 0 R 3837 0 R ] +>> endobj +3797 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 616.6656 133.6164 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3798 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 616.6656 148.8392 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00096_f1684ad96b8acf54154688df3883b801) >> +>> endobj +3800 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 603.7142 133.6164 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3801 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 603.7142 147.7332 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00096_ed119a030ebd3bf7c30a12071c27d441) >> +>> endobj +3803 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 590.3444 133.6164 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3804 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 590.3444 148.2812 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00096_47140aa52cb9e6a2de38fdfc5da08df1) >> +>> endobj +3806 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 576.8351 133.6164 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3807 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 576.8351 151.6087 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00096_569382bc53aa64c227e57efe88fe13ac) >> +>> endobj +3809 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 563.8836 133.6164 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3810 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 563.8836 166.2933 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00096_8587178a29882482be20c2822b402b96) >> +>> endobj +3812 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 551.9085 133.6164 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3813 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 551.9085 144.4155 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00096_6f8c65cfc8242197bcc3cb5b4735b16f) >> +>> endobj +3815 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 537.9808 133.6164 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3816 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 537.9808 157.138 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00096_51bbbe3099c10ef26119ddc2aa51e35e) >> +>> endobj +3818 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 525.0293 138.5977 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3819 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 525.0293 179.8327 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00096_f20186ef441ef5b600e8544a0f2d8d81) >> +>> endobj +3821 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 512.0779 138.5977 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3822 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 512.0779 178.1589 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00096_a80e8d0fc768525fa3bfb3d4e4cf260d) >> +>> endobj +3824 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 499.1265 138.5977 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3825 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 499.1265 182.5922 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00096_be2c98748e180c1747823cd2fb8ecf0e) >> +>> endobj +3827 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 486.175 138.5977 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3828 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 486.175 168.7542 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00096_b20096ae4953caaa42f6bb2373c4494c) >> +>> endobj +3830 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 473.2236 138.5977 484.1275] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3831 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 473.2236 173.1875 484.1275] +/Subtype /Link +/A << /S /GoTo /D (a00096_e82f68cb91d8688a619d55d2a8572979) >> +>> endobj +3833 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 460.2722 138.5977 471.1761] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3834 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 460.2722 168.2065 471.1761] +/Subtype /Link +/A << /S /GoTo /D (a00096_c92d2f194f096e84791f95d7e8f0ba92) >> +>> endobj +3836 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 447.3207 138.5977 458.2247] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3837 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 447.3207 187.0258 458.2247] +/Subtype /Link +/A << /S /GoTo /D (a00096_858f970feb7462871c814953697a8ad7) >> +>> endobj +3793 0 obj << +/D [3791 0 R /XYZ 90 757.9346 null] +>> endobj +1003 0 obj << +/D [3791 0 R /XYZ 90 739.9346 null] +>> endobj +258 0 obj << +/D [3791 0 R /XYZ 90 739.9346 null] +>> endobj +3794 0 obj << +/D [3791 0 R /XYZ 90 716.7484 null] +>> endobj +3795 0 obj << +/D [3791 0 R /XYZ 90 634.6393 null] +>> endobj +3796 0 obj << +/D [3791 0 R /XYZ 90 634.6393 null] +>> endobj +3799 0 obj << +/D [3791 0 R /XYZ 90 620.6507 null] +>> endobj +3802 0 obj << +/D [3791 0 R /XYZ 90 607.6992 null] +>> endobj +3805 0 obj << +/D [3791 0 R /XYZ 90 594.3295 null] +>> endobj +3808 0 obj << +/D [3791 0 R /XYZ 90 580.8201 null] +>> endobj +3811 0 obj << +/D [3791 0 R /XYZ 90 567.8687 null] +>> endobj +3814 0 obj << +/D [3791 0 R /XYZ 90 555.8935 null] +>> endobj +3817 0 obj << +/D [3791 0 R /XYZ 90 541.9658 null] +>> endobj +3820 0 obj << +/D [3791 0 R /XYZ 90 529.0144 null] +>> endobj +3823 0 obj << +/D [3791 0 R /XYZ 90 516.063 null] +>> endobj +3826 0 obj << +/D [3791 0 R /XYZ 90 503.1115 null] +>> endobj +3829 0 obj << +/D [3791 0 R /XYZ 90 490.1601 null] +>> endobj +3832 0 obj << +/D [3791 0 R /XYZ 90 477.2087 null] +>> endobj +3835 0 obj << +/D [3791 0 R /XYZ 90 464.2572 null] +>> endobj +3790 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3840 0 obj << +/Length 1300 +/Filter /FlateDecode +>> +stream +x诃Y蒼跦诫+x攣QO飲o撠b8螌 (啞H-@[$ +~奒覯應栢怛X飖开b揹 KM2 ⿹散G'8仟8?飭?Kq氹d鳻D袑(蝬2湈鷨pv6鄪?&骙禾顿8K藘_餐n挄踳閏9c稛.'鵬,3┪顕捉薬﹦f箚熃=M 龊G塸V%縛O=蓞邫骶酤┿' 浩獦,巔?Z7醏'哫苀)U膯┪Cs涾i6炌觟"軳6硊6[-麋*B𭏪孭;G闍斩:B﹢XV*)d]/煮t{鞠('Fp哛K,摪Y溗弆灙Sw丂F 1L."PX鉰X.倍侺Z" 怓戼㏎1鶹礈䦶窑駌赽7 +Lu嚙零c:Zq浻鸺/凜jI> 5*B邘栍摐 |%l$篐縎蕳"兯侏猟>[V担Tz,+骈^k!箱@) I 潘Rg泸芦Y:焠;尣歨a牧.Q)瑋崜髜鏫邓$痲%P脾LD糒39猽T澢5皂霤諶'8褱2T'襋W'a屭:弅ㄋf h棴蛘処籺0礞牕Fm!7#瀦X苡 噗=耪諡嗞pOu姭= 諘w飘杔楨 t妠)軉yZ落瀦鈏 4T噞姩;軸\]韎9酥袣砒━Q+苂\%(n瑒{綅鲞 +孵5苒]Eフ襳Lw檍垿Lb趲鮐RBg1mj[6賮苉0iU5GX 7g+槑y閍q3儉碚淕舩k奚蟾}捾铖"V醕 +Zq +[m;鼆gEc#鳕/碻-Y搗$閩譈 {諶~剀欕aqs1评\湻67渑蚼c.疇y躬葑U茘t懕{T孻:玶誨}粅齄驺屙疳郢嘜瘐铈骝队vj驡Ss伥兕aq朴;4N嶱]#騈o腋己K囼炓l據堀踠澋撠qs幭 d/P褞-"蜠焴jX暂0鄾輱竼:躚L奚頕鋣\C瞢惑舯I"榪∟胺B彭瓦痧鑳P 嬠Dzv劮6.銭{v擏垶Q袏霔枷閤歯姺-oQ嵸隃強))wM#N;锿褸*夬0=,3聏z汴阬誆憌z泸25SィQs柘案骗c烹X聏碖Wǜ化岚"FIkR紕C襝*ミ彋/f4{Y+譆縯銮鞟b%T儀$xWX庸劎灒鯖緖゛&x_铆CXY戨鼝.油8鬅;贠~泮尒赼贱х\渟Z預囈逯W賫B +Ρ驍毒ge:骁?礻浢endstream +endobj +3839 0 obj << +/Type /Page +/Contents 3840 0 R +/Resources 3838 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3875 0 R +/Annots [ 3843 0 R 3844 0 R 3847 0 R 3848 0 R 3850 0 R 3851 0 R 3853 0 R 3854 0 R 3856 0 R 3857 0 R 3859 0 R 3861 0 R 3863 0 R 3864 0 R 3866 0 R 3867 0 R 3869 0 R 3871 0 R 3872 0 R 3874 0 R ] +>> endobj +3843 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 668.6407 154.358 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3844 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 668.6407 222.4221 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3847 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 584.4605 133.6164 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3848 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 584.4605 157.1377 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00097_5960d82e7aca2986b8509a0d87d6cbc8) >> +>> endobj +3850 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 571.509 133.6164 581.4367] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3851 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 571.509 154.3681 581.4367] +/Subtype /Link +/A << /S /GoTo /D (a00097_8ae6395641b7752dce47881e20cee970) >> +>> endobj +3853 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 557.5814 133.6164 568.4853] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3854 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 557.5814 166.5525 568.4853] +/Subtype /Link +/A << /S /GoTo /D (a00097_6925d46b2819adb474a5f0036f02dd7d) >> +>> endobj +3856 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 544.6299 138.5977 555.5339] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3857 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 544.6299 157.138 555.5339] +/Subtype /Link +/A << /S /GoTo /D (a00097_7092781c50dcad50f473888585c85b83) >> +>> endobj +3859 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 532.2364 152.1466 542.5824] +/Subtype /Link +/A << /S /GoTo /D (a00097_a6487b9c1c773b32656065d0e19bf142) >> +>> endobj +3861 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 519.285 148.2711 529.631] +/Subtype /Link +/A << /S /GoTo /D (a00097_e87913860c6b05c6e6b060639b950098) >> +>> endobj +3863 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 505.7756 138.5977 516.6796] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3864 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 505.7756 193.1026 516.6796] +/Subtype /Link +/A << /S /GoTo /D (a00097_134ec55c3d5abaebfed4ff8edfedf1ea) >> +>> endobj +3866 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 492.8242 138.5977 503.7281] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3867 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 492.8242 195.3141 503.7281] +/Subtype /Link +/A << /S /GoTo /D (a00097_5a3116623c6a7da7c82db6c301ae0da3) >> +>> endobj +3869 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 479.8728 192.5346 490.7767] +/Subtype /Link +/A << /S /GoTo /D (a00097_606d2729bf411ade69044828403a72af) >> +>> endobj +3871 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 466.9213 138.5977 477.8253] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3872 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 466.9213 209.1522 477.8253] +/Subtype /Link +/A << /S /GoTo /D (a00097_2fca02673894f222b01ad2d3a4d7dd79) >> +>> endobj +3874 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 453.9699 175.3891 464.8738] +/Subtype /Link +/A << /S /GoTo /D (a00097_fb60f42593d305ea36d9b4303722696e) >> +>> endobj +3841 0 obj << +/D [3839 0 R /XYZ 90 757.9346 null] +>> endobj +1004 0 obj << +/D [3839 0 R /XYZ 90 739.9346 null] +>> endobj +262 0 obj << +/D [3839 0 R /XYZ 90 739.9346 null] +>> endobj +3842 0 obj << +/D [3839 0 R /XYZ 90 717.8172 null] +>> endobj +3845 0 obj << +/D [3839 0 R /XYZ 90 602.4342 null] +>> endobj +3846 0 obj << +/D [3839 0 R /XYZ 90 602.4342 null] +>> endobj +3849 0 obj << +/D [3839 0 R /XYZ 90 588.4455 null] +>> endobj +3852 0 obj << +/D [3839 0 R /XYZ 90 575.4941 null] +>> endobj +3855 0 obj << +/D [3839 0 R /XYZ 90 561.5664 null] +>> endobj +3858 0 obj << +/D [3839 0 R /XYZ 90 548.615 null] +>> endobj +3860 0 obj << +/D [3839 0 R /XYZ 90 536.2215 null] +>> endobj +3862 0 obj << +/D [3839 0 R /XYZ 90 523.27 null] +>> endobj +3865 0 obj << +/D [3839 0 R /XYZ 90 509.7607 null] +>> endobj +3868 0 obj << +/D [3839 0 R /XYZ 90 496.8093 null] +>> endobj +3870 0 obj << +/D [3839 0 R /XYZ 90 483.8578 null] +>> endobj +3873 0 obj << +/D [3839 0 R /XYZ 90 470.9064 null] +>> endobj +3838 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3878 0 obj << +/Length 293 +/Filter /FlateDecode +>> +stream +x讠QMk0 禁W鴺釿r,=巑e伭Fs+=ZK翨轮?绔谯餉O~抶z.$7鈟$?-儥< S鲳値;墽佇扔b@La剄!鑏=2!'饠u賱v]坨]邌`價&浖核合i聻荧扽╒儙o?H^x 揃9廜鐞W,F$_l>畇&bl阜顯GdIkH򣘰0簀} (6晞3*魨1!7啵⊙賛Y梞謺興楓h宱 HB蠥?'sT滮G)iBu写Sr{ㄣe股镥\轡C兒J[刽餸礶ndstream +endobj +3877 0 obj << +/Type /Page +/Contents 3878 0 R +/Resources 3876 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3875 0 R +>> endobj +3879 0 obj << +/D [3877 0 R /XYZ 90 757.9346 null] +>> endobj +3876 0 obj << +/Font << /F29 499 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3882 0 obj << +/Length 836 +/Filter /FlateDecode +>> +stream +x趰VMo汙界W狋bl鳆*ⅵMS到T憃M!Lb 唳?砍,`蘎邴娼3;僆酑%2屗 賋噜~䏝A簃N乽i懁G=倢5萈M{紸6mb 趖斡:┎7 PZ聬栨AiH年o价鱺'鬈!玏鳐)蒹凳7帩gI洰篊e椭U贁u櫦伢崿眿/搿躗 L +8親I蒰疍娖ZO 聵椑HQ馐sZ冬轔 1J螊鮭~ VH&巐&辵9. y愍C(ZR臋=a>xV旴(9标禵倊鮟d粡槺-嵌=fk ,㏎漀絇> endobj +3885 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 437.3806 250.6249 458.582] +/Subtype/Link/A<> +>> endobj +3886 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 410.0836 212.6587 418.9302] +/Subtype /Link +/A << /S /GoTo /D (a00171) >> +>> endobj +3888 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 298.6746 202.2283 309.205] +/Subtype /Link +/A << /S /GoTo /D (a00163_gb97849f0d3ea858eee790b69591e6427) >> +>> endobj +3889 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 285.3496 217.7102 296.2535] +/Subtype /Link +/A << /S /GoTo /D (a00163_g03070adbf8faab0f34f87c1270964306) >> +>> endobj +3883 0 obj << +/D [3881 0 R /XYZ 90 757.9346 null] +>> endobj +266 0 obj << +/D [3881 0 R /XYZ 90 739.9346 null] +>> endobj +1064 0 obj << +/D [3881 0 R /XYZ 90 553.9527 null] +>> endobj +270 0 obj << +/D [3881 0 R /XYZ 90 553.9527 null] +>> endobj +3884 0 obj << +/D [3881 0 R /XYZ 90 517.4245 null] +>> endobj +3887 0 obj << +/D [3881 0 R /XYZ 90 317.251 null] +>> endobj +3880 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3893 0 obj << +/Length 1119 +/Filter /FlateDecode +>> +stream +x讠W遫6~鱛!/鰞Y揆嚹`-K赚仓{j夽摃X╟y栜龓┤,  竖x咔汇 +R捎忯髹赶Kl~^娃\ 3u皕,h` +冋d碭螐飊i踪6璆Wyr|Jwe\f鵱駓u3鹵招:UJh挨>}媪氃萏8&R3絧芵4(v鰍鰃cPMZ1:悓嗀<ふ嗸"唻%p午駘_假ほm緗^熺図蝴6輊H颐篕R混楺#[:>庱*-c2磛L嬩愴禁葞hE艢眿0禉咭xM颊;窝藋容燅畘 P髈裼#驀ㄦ硝K欁乡CV:\k蛩6K晻鸆^鍱瀨J藗u)! +-" 僡鬆e誒倘0賀渜㏕鍒藚語n蛎E8睵 寭7鰒,琔綦咃斧桨-牮磃kdR(J辥=゛"陰扎髼缽~o肾3d攵鞛e+ &?YR"韏Ai樒H徎瑼貔O薹f瑞%(o㏕P>X銾j觷桿邰rt;I'UY 4pΩp觏C|h囘銞 犸俚犏濉隠@喨eGN讬5!蛫`螜欒MBH^暡偩蝪肾甫-:f鹼_餐+k翓+啺{煌t犉 蒱 着*.:F嗣1)弖,N遒唱 跀汌U$_靀;D/elPS紅)oQ, |"0熛H彑倚驰d鋧搼三-N∫阄hPBN翺q拺d +踸v0嘁^-浅oF蘩&>束 ^拮k芬乖,:溏c铖S2zv瓕哭蒉_揶䌷齈/4 z$/(飛S. I驾 +*K温I粮>顠鷡10\2m"80-繶聏豻聦1f湻I6镒挀瞮縁@u窯j劽O╄贊豬頷{1iPR sㄣ;w +峚 J}緷iF爜M&(鉑L瘊8釢LS*zv {U/趝瘿7詣鋫 +啙(LG?2$鏳匆2() 皚糹閘%im篕t埠尥進饍踲 爗 鑊g鋅沪蛌b緌膑龇飶i禡飥楟蓅囸endstream +endobj +3892 0 obj << +/Type /Page +/Contents 3893 0 R +/Resources 3891 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3875 0 R +/Annots [ 3896 0 R 3897 0 R 3899 0 R 3901 0 R 3903 0 R 3904 0 R ] +>> endobj +3896 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +3897 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 213.2166 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00172) >> +>> endobj +3899 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 516.2256 211.8219 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00078) >> +>> endobj +3901 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 458.3971 213.038 469.3011] +/Subtype /Link +/A << /S /GoTo /D (a00163_ge28f6cb60e86088d8886d0f804b4f37c) >> +>> endobj +3903 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 401.545 217.7102 412.4489] +/Subtype /Link +/A << /S /GoTo /D (a00163_g03070adbf8faab0f34f87c1270964306) >> +>> endobj +3904 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 388.9671 202.2283 399.4975] +/Subtype /Link +/A << /S /GoTo /D (a00163_gb97849f0d3ea858eee790b69591e6427) >> +>> endobj +3894 0 obj << +/D [3892 0 R /XYZ 90 757.9346 null] +>> endobj +1065 0 obj << +/D [3892 0 R /XYZ 90 739.9346 null] +>> endobj +274 0 obj << +/D [3892 0 R /XYZ 90 739.9346 null] +>> endobj +3895 0 obj << +/D [3892 0 R /XYZ 90 716.7484 null] +>> endobj +3898 0 obj << +/D [3892 0 R /XYZ 90 534.1992 null] +>> endobj +3900 0 obj << +/D [3892 0 R /XYZ 90 477.3471 null] +>> endobj +3902 0 obj << +/D [3892 0 R /XYZ 90 420.4949 null] +>> endobj +3891 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3908 0 obj << +/Length 2681 +/Filter /FlateDecode +>> +stream +x诮[]o7}鳢榱,?嘾(諿+Y準vv仸0T[帊貟珡&綌#r裙"婨"Yg9肩^3⒇?6皌爼&V萰p髏D嵯瘞X1|~⺷y裘Kn栘奧兯籡剨\撖:4D寧耿觅篌鷩請欋|絴3x9襱Hn雳忬辄n厩,n軣諓I;蝓养惭TKVNG傀F %5 o(a烛劣戜驴y<8壋`wAn鋳夵袡$钋!::t[31b曏1 昶\3Vs澪73t粡t:_攥7薊GfA.塗z鎡r笨陗罐靇-fO郸蛂倩谙圹諀睫縔迷t+5$m棇"=▌%Js柾嚚茨% +垾\漣庇~2弁齬酡屯('Z@4敿Ae孛1獕fB㈨鑟gOu品婳#F圀酋>銓WW淗襳W#應51VW-? 冼妼*敐Dvf 麩窢話涘S[d:薠嶆4鼧)蘡f|H-'+絻^?鱽R罨遽轾q4_l晗f踛v吐4└旣f; 媷]k韚,"mmkti磐@Y 鮗g襺产XC9z鴔蟃c;獡V氙敍Z2寔 J隭F<ˊ迬迦ImgX|侵 3免鎞{ 嶵0o}稺M羁嫵-r仨胹lM{O 墇:[曼7珖臛r焿$8趵s34'渜c抙^Wp]5髐f颖7& +#q蜺:!耈f!敱A晉a创猙揎o霊&洳倀缞搘7偳梔$q潓烧7$+7Z嗭Q%^瓐枝披*堄狎岫. 蝿錦橧襧峷X;&`E鉧澧儮羪洟 y{MD蕨hpI\'沩闼橘"Y"B貰T仦锰eさ1缴 ;OJ+謒s纋霭餐c`3污蝣9"颿3.#塠ow痏9I:|爬饗w鐡媞飧籇冷&攑;.Z L斗 0榥f簢昅觪奁魫穱y觪I茉趔w?潫幆/.GV-clxy6絹 4 OO*桠z奨龗熮6痳跻Y++污擛熔">%薍鈜柪黉齲氶~刭2* 灃U忻mE`矁~≠))`撔i}垃靼蝉c`=污X蝣>"颿=.#塠掰嫂婶-QP螼*>暵坡岔A筪蓟VV1湻﹣惙G D鋧j棏腗k嗄萼_]|ZOg镉I@W腇i?㏎U\["輣"2B彼缞 嫁埛L廾倢$n逶礁汓敇.)QZZ<# 吤ZO+):瞎顬);]橂Vvc \莥證瓽鋧\莈$q3淉d掔荠b瀶U欣癀5,gw%IU轭>!驰檬vc寔8ocw熔妙埣忀笇$n踤~ s{лX*籕 籆 wuB1"u正&`v{X賜1鏼y{戺棏腗OёoO.~NL(*jx騰滊p%撘 +jx6卅莏纗3迃鵆y鲹颽e1评x湻1>漤a|D耷x\F咨垶藣&W泓苇2 螱*-錸 蓇:穯hH_п!1紒 Gx结o兖樇囜I軐釗珐誝Vx2TA +逐0礜En>Q渧0=6笉6n嚰=軒塞笉薍鈌軉圪銾鷯6蘚U9%谪枑躆8诇n絼蘰+1嗐紞!o#>嗐2捀肙s6j殊賖P淨bx;瑰踡墉w0=琹7貚6v嚰=鞄塞貚薍鈌靻崨勐漁D欽)iP-钏w5彽錇畆┸2d樼Vc <莥螩濭鋧<莈$q潓轼恻蛨Q:|=炰螾J$螰*揉侰6剨e赛,Yc3Y/穻w/w&qs'胶*$)*Fw(溤WGHE妶!1w梿$矗%^蠟無f弿 穁瑦S 钒癝?<庡NR鍦诸舯昃q樧V6c 芷y籆薏w胵I芾?扼兆j惬X! U7& 桤8齦;禽椀鷒纒g噑ャ蝺硦6F'3燎!z7E堓冕朠m!⊿鹚v緷莋氉鮼嫱齦A 寤迨沔/w瘇鰽鐙:豶!#梿-8>r?pA榚繖Pn覭魂V畈 `泀g;\遚%uM/嗞冬恨↖E橠7〝8猣&)砎Zh鸂奍MT%Y 曾倚摳鸶\~>;} 梄嫥燗繪OhEU;-5肩 牨烂渹7惾}?B:&w?q84!B鱼痴数歛龅n婊讼8篮凰 敯鈕ty鞅[峋W脹埽=匊钎yX( opD[羞m謡{G 梁;"硌茗犤Q冎8攥+[櫶}WM伹=潠Z2P茉iF@}鰤0咅琑鷽~4+f0!瓻化 頑N螳鵥練m簏颤挚x2弓0^O_p駛育;NiU/#畣~A啁21R齮肭鲖芁~檂B&endstream +endobj +3907 0 obj << +/Type /Page +/Contents 3908 0 R +/Resources 3906 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3875 0 R +/Annots [ 3911 0 R 3912 0 R 3914 0 R 3915 0 R 3917 0 R 3919 0 R 3921 0 R 3923 0 R 3925 0 R 3927 0 R 3929 0 R 3931 0 R 3933 0 R 3935 0 R 3937 0 R 3939 0 R 3941 0 R 3943 0 R 3945 0 R 3947 0 R 3948 0 R 3950 0 R 3951 0 R 3952 0 R 3953 0 R 3954 0 R 3955 0 R ] +>> endobj +3911 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.1863 274.5352 659.3878] +/Subtype/Link/A<> +>> endobj +3912 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 592.9052 189.974 601.7519] +/Subtype /Link +/A << /S /GoTo /D (a00173) >> +>> endobj +3914 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 480.609 174.2837 491.1394] +/Subtype /Link +/A << /S /GoTo /D (a00160_g070d2ce7b6bb7e5c05602aa8c308d0c4) >> +>> endobj +3915 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 468.0205 216.3555 477.9481] +/Subtype /Link +/A << /S /GoTo /D (a00160_gecf13b8dc783db2202ca5c34fe117fc3) >> +>> endobj +3917 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 454.8292 258.0292 464.7569] +/Subtype /Link +/A << /S /GoTo /D (a00102_96eb4534b574ece96ed36806039f73d3) >> +>> endobj +3919 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 441.638 288.6444 451.5657] +/Subtype /Link +/A << /S /GoTo /D (a00102_4350350ce0d4595876743d4c0a720bcc) >> +>> endobj +3921 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 428.4468 295.1 438.3745] +/Subtype /Link +/A << /S /GoTo /D (a00102_e7250008b68d1909d54040515eef8ebb) >> +>> endobj +3923 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 415.2556 305.9495 425.1832] +/Subtype /Link +/A << /S /GoTo /D (a00102_6a327c0ffd40f69fbcd5f01f12e5745c) >> +>> endobj +3925 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 402.0643 277.9346 411.992] +/Subtype /Link +/A << /S /GoTo /D (a00102_dd685a0f8b5e76a2687cc0f306813bfb) >> +>> endobj +3927 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 388.8731 241.5711 398.8008] +/Subtype /Link +/A << /S /GoTo /D (a00102_2e52037249bb98d7bbecf42e275beb07) >> +>> endobj +3929 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 375.6819 222.0444 385.6096] +/Subtype /Link +/A << /S /GoTo /D (a00102_72d99b1623afa14bd58c667b748c2ddc) >> +>> endobj +3931 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 362.4907 222.0444 372.4183] +/Subtype /Link +/A << /S /GoTo /D (a00102_c72f8777ccc45ae274449ea7a9f3de04) >> +>> endobj +3933 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 349.2994 261.3467 359.2271] +/Subtype /Link +/A << /S /GoTo /D (a00102_9f6c329c04baba17fe0f5b2a6597d713) >> +>> endobj +3935 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 336.1082 260.231 346.0359] +/Subtype /Link +/A << /S /GoTo /D (a00102_6aaa9da3d0f8d4c0799516d46d939942) >> +>> endobj +3937 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 322.917 261.546 332.8447] +/Subtype /Link +/A << /S /GoTo /D (a00102_8ee5e2c8e517d6e4f2198057f81e93c6) >> +>> endobj +3939 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 309.7258 222.0643 319.6534] +/Subtype /Link +/A << /S /GoTo /D (a00102_ee60b8757bacab269b0ccd7c240bf01d) >> +>> endobj +3941 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 296.5345 204.3509 306.4622] +/Subtype /Link +/A << /S /GoTo /D (a00102_bf4401501f1389872141a78b63f325a3) >> +>> endobj +3943 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 283.3433 219.2947 293.271] +/Subtype /Link +/A << /S /GoTo /D (a00102_55735650f879293d9b7b5fda6753d147) >> +>> endobj +3945 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 270.1521 209.3322 280.0797] +/Subtype /Link +/A << /S /GoTo /D (a00102_876c82c946543cd70c141e41417138e0) >> +>> endobj +3947 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 256.9608 214.4828 266.8885] +/Subtype /Link +/A << /S /GoTo /D (a00102_7bf0c086c7c41c12cc63324327932d91) >> +>> endobj +3948 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 243.7696 231.4091 253.6973] +/Subtype /Link +/A << /S /GoTo /D (a00160_g221d37ccde7e3fd0dd2c2eb0a6b15493) >> +>> endobj +3950 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 185.0539 194.0092 195.9579] +/Subtype /Link +/A << /S /GoTo /D (a00160_g7c5359305008e9183b18d6ab75f568bf) >> +>> endobj +3951 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 171.8627 187.9223 182.7667] +/Subtype /Link +/A << /S /GoTo /D (a00160_ge4dcbbe6c641d2e3b8537b479df5fc99) >> +>> endobj +3952 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 132.5288 138.5977 143.4328] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3953 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5678 132.5288 205.5661 143.4328] +/Subtype /Link +/A << /S /GoTo /D (a00160_g66d19181ad5fe8b8f7c84d1f1d46a2ec) >> +>> endobj +3954 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 93.195 138.5977 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3955 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5678 93.195 214.2533 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00160_g3191066cf8f76bd00b6843b77c37068f) >> +>> endobj +3909 0 obj << +/D [3907 0 R /XYZ 90 757.9346 null] +>> endobj +1066 0 obj << +/D [3907 0 R /XYZ 90 739.9346 null] +>> endobj +278 0 obj << +/D [3907 0 R /XYZ 90 739.9346 null] +>> endobj +3910 0 obj << +/D [3907 0 R /XYZ 90 716.6405 null] +>> endobj +3913 0 obj << +/D [3907 0 R /XYZ 90 499.4252 null] +>> endobj +3916 0 obj << +/D [3907 0 R /XYZ 90 472.0055 null] +>> endobj +3918 0 obj << +/D [3907 0 R /XYZ 90 458.8143 null] +>> endobj +3920 0 obj << +/D [3907 0 R /XYZ 90 445.6231 null] +>> endobj +3922 0 obj << +/D [3907 0 R /XYZ 90 432.4318 null] +>> endobj +3924 0 obj << +/D [3907 0 R /XYZ 90 419.2406 null] +>> endobj +3926 0 obj << +/D [3907 0 R /XYZ 90 406.0494 null] +>> endobj +3928 0 obj << +/D [3907 0 R /XYZ 90 392.8582 null] +>> endobj +3930 0 obj << +/D [3907 0 R /XYZ 90 379.6669 null] +>> endobj +3932 0 obj << +/D [3907 0 R /XYZ 90 366.4757 null] +>> endobj +3934 0 obj << +/D [3907 0 R /XYZ 90 353.2845 null] +>> endobj +3936 0 obj << +/D [3907 0 R /XYZ 90 340.0933 null] +>> endobj +3938 0 obj << +/D [3907 0 R /XYZ 90 326.902 null] +>> endobj +3940 0 obj << +/D [3907 0 R /XYZ 90 313.7108 null] +>> endobj +3942 0 obj << +/D [3907 0 R /XYZ 90 300.5196 null] +>> endobj +3944 0 obj << +/D [3907 0 R /XYZ 90 287.3283 null] +>> endobj +3946 0 obj << +/D [3907 0 R /XYZ 90 274.1371 null] +>> endobj +3949 0 obj << +/D [3907 0 R /XYZ 90 204.2437 null] +>> endobj +3906 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3959 0 obj << +/Length 737 +/Filter /FlateDecode +>> +stream +x诃VMO0界W鹞尶廂i? *m(慗#桚;n*mJSiW9膲=o=螰鼱菮8鉪Υ摟膶'篛 8J>淨&2橸瞓舭灹4$F与濸F 陭40@ M悻樼M雜9蚺j*逝饁t檤mVFY鬉煋隱Sfw檧TYj+,#駭hR馽瀄%?74麙觍d猂qB甀陘淒K,q驇6j)汾珌 .KEDyI具泞蓒樤U5d慩凒[鳸.nhV7訝苑碧珬"釦*9澍p*!$4/O顀76飠=敗绻潍"_緆 6e4i鷂Z' 滉眴 皢灨垛鯶胿#嘐g迻5嫝S)C!Ⅹ麦:≯煭! +qp抎>r敕袊秪剏&x^w摩糎}嚋(hs訬6蝟{涰X6雌%c]BペW$绥?_.XE> endobj +3961 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 703.2821 182.941 713.8125] +/Subtype /Link +/A << /S /GoTo /D (a00160_gdf916e0c752f5cda70d0bddb2be422ba) >> +>> endobj +3962 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [186.7567 703.2821 211.444 713.8125] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3963 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 664.4278 178.5273 674.9582] +/Subtype /Link +/A << /S /GoTo /D (a00160_gb50f78bbf36d912d69f6c1685d0b40e3) >> +>> endobj +3960 0 obj << +/D [3958 0 R /XYZ 90 757.9346 null] +>> endobj +3957 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3966 0 obj << +/Length 2209 +/Filter /FlateDecode +>> +stream +x讠Y[~庄┄謠'E]:垱蒘uDX嘡D'F迿絇藡H乃3吵尺,賿聫-簩TD!2{^绣<⺪淋 歼剙?,^跨2!夋z34#3緗佝矈塡o涪t猑熥,^逭耩9竆GtE蹙8漩昵|梉L欋#q筨姯{Ck3Y 托⑦奎F梉0懩j7敯$崴鐓渎?-时/虁睓+&僻$'芟潈+陮爷;L豭b$Q蔴俥@E/st@K刅-g詚 f麴铪芕翋舀惬c5鐘7*柅噠n乪畮;鸰锃a糲8[=7Um>骣9GOEU鏶;秡)杲絩S喃 兺~*N[]x江79ㄎ矺躞鼢弌镲呓悔踐S抳剦6桭7噈,Fe焏ii/x雾%陞 輂; Jk聶錯@oA!?薉K>绸[&0躼C筬偱bX4CJ閆眼-jN7訮擟忾璁阺撜峸啲qn奢硺丼徕松C,p腋S 漕*鄋4颅(x涳轝書`焈挢+tT潩兵恋|琞!Xn/fze翄v达Y蕼r? 惺>槽菢燐Dbq跰+!)\﹛)&曆lh9&0Z}. 5CKAa姟毡bZ5娯8=軦)噄谹:[籡堓駊8"徒逮7|鬐妡頊z8!'鋘鰒剋u[R嬅聒閖%)!hH 崮疻!GP笡琭愈|,67铍舙募+U_?莈B稈y馹.玽xR芯6琧ㄙ揱+噝後愄礵魳] 洸胐lsAF%X#c篁O鎹$襎饇浿椹>隑$&:彡肱邺腎1酛霂嵧愾艅/Ghh谹 +茐b1口魡6AC藡偿8W闽6 &5定9叫|&眼捽`綥SH)篻迈:倭鏻镵跎睰駜豍8D0 +榪藾:Y譧璿m'彋S ]Ttu*脁3 护a$偺y泮桷兼翼榔鎶)v測5\P$嵁2D榒6/ 1W3DG+W% {h 円哀:7x鼫咕圾9誀 d >韷5c 瓳5炼馻烆 萄 喘鲛鮣c懧塘嘕瓼J槇6)/2WGJG镧5䞍┋|0函娗蟉1;綣[A癕泇烷OQT艏`jA 荲襙匿u~Sa螳>1X鮥巾獓z鏦剑麞U煻b 7XT盋K鈭刃]'l4=3{x埘=/h_縢2 "w L*F絗F1尣<膣髝撙剛6In鮢嫙櫹P睽/铔1S哠*铤E'D+ 疋攏风杯錽9 +&%=Q0瘁P饲4眯潸荟颺鯡喌删[甍3D 8鮉oU踫緋垑璜%庂 葶aD<9乿J\'U苂嫆6O:伬)覚舟扤╳瀟:簅!漣+r襾Jx7 +$喘覰皎9醣寞C}雽q]ぐ*寡?kA_顄瀈擧E覵oQC臸瀫癕唓wOl霜氏頏~.郷P}+])吼0C韜鄣宷D鸄嶖M};豑韖歿髙摕嫾菏 &B7W凷:讷Qp.覬兆r.1 a倗遭t珙c842移]咤e帶亷)=薩|@5顔q鱋遬駟S{椅cx旇絝8 毿)踺駨/O鶢EO蠢? 8廦endstream +endobj +3965 0 obj << +/Type /Page +/Contents 3966 0 R +/Resources 3964 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3984 0 R +/Annots [ 3969 0 R 3970 0 R 3972 0 R 3973 0 R 3974 0 R 3975 0 R 3977 0 R 3979 0 R 3980 0 R 3981 0 R 3982 0 R 3983 0 R ] +>> endobj +3969 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 639.4127 274.5352 660.6142] +/Subtype/Link/A<> +>> endobj +3970 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 612.7666 190.532 621.6133] +/Subtype /Link +/A << /S /GoTo /D (a00174) >> +>> endobj +3972 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.3051 493.1311 359.3784 504.0351] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +3973 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.4596 463.5516 356.3884 474.4555] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +3974 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.2897 309.3651 239.3189 320.2691] +/Subtype /Link +/A << /S /GoTo /D (a00153_ga92afb113e122f860392bfbd385f842e) >> +>> endobj +3975 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [336.7197 294.8746 372.0849 304.7798] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +3977 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 226.9876 237.9445 237.8916] +/Subtype /Link +/A << /S /GoTo /D (a00160_g3d768e989e308144190ae1a5ddfa9726) >> +>> endobj +3979 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 170.3828 194.0092 181.2867] +/Subtype /Link +/A << /S /GoTo /D (a00160_g7c5359305008e9183b18d6ab75f568bf) >> +>> endobj +3980 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 157.5616 188.4803 168.4655] +/Subtype /Link +/A << /S /GoTo /D (a00160_g6d9751d534453425c7a5a215d1d4414c) >> +>> endobj +3981 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [243.4737 157.5616 268.161 168.4655] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3982 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 119.3412 182.941 129.8716] +/Subtype /Link +/A << /S /GoTo /D (a00160_gdf916e0c752f5cda70d0bddb2be422ba) >> +>> endobj +3983 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [186.7567 119.3412 211.444 129.8716] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3967 0 obj << +/D [3965 0 R /XYZ 90 757.9346 null] +>> endobj +1067 0 obj << +/D [3965 0 R /XYZ 90 739.9346 null] +>> endobj +282 0 obj << +/D [3965 0 R /XYZ 90 739.9346 null] +>> endobj +3968 0 obj << +/D [3965 0 R /XYZ 90 716.7484 null] +>> endobj +3971 0 obj << +/D [3965 0 R /XYZ 90 553.0164 null] +>> endobj +3976 0 obj << +/D [3965 0 R /XYZ 90 245.8074 null] +>> endobj +3978 0 obj << +/D [3965 0 R /XYZ 90 189.2026 null] +>> endobj +3964 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3988 0 obj << +/Length 969 +/Filter /FlateDecode +>> +stream +x诮WMo跢襟W(摧欭怄X b碔撹m硬檒(耶3黊zIZK O3o鐀s鶤lyl攁VH_軪<扪碜羲Z啉叻裲茤Y:揶40厐聆 +7hQ楿o:U|寃'嚞;{Y\誻Y^フ救谉!m螶 M襬学<&vg&*~ 卫Z岋"壜]邀!N沸光氬 毊敁#誮皓x\3);T@?坖ZpZG%b/4漝6"墉5w蔧眶#@@5螬諣縏3n0虯喐m,+蒹睯胃E 鹿%曯|祫q矣E;鳥延∕2;圎/滑:f妪*+Ce8L俠F3Q@覃5騏笨樂嘺16鬵帀焴$z炱4ⅰee缙&C葐苹*葭迚WuY璬泼c闄岙畕司42拕癰'+釖qm!\J_ 硦) M&`.>#p廧孰6孰筌eP撥;掎梄题z=肯鱯粵嫱 + 侰-瑞f"䴔峟`9}t犮X娩 )g摦:i⿹礦 A&?2訠.u矁-w饑弧遾v釕㈢蛿Y忡囀X栃T=c,>嬰欖P_g區J[朻@-@jF欽狓誱贜硥f4"y彺欴mD鰳<剿俕ェ%朗3疥^u皢翢$d鏝挸=岫8V 筋j6罵`4沼~z7蓠k^<溷怯.G虳#餙q9})H 繍l馘^佬 +鏬濿\缣0媃\螶哧瑋1I4誈[伆 +禂?盠6擬樤 +蝧拸8i5 拮YGz蛳眕蘒勗?钝宾軎('>{ +癜?撼K>{誌棭勣鉟.S@朤沙[3N趦V鷩秶璚辂E@sK峝D舀+慆(s:輮:顺2g庇/wr鸭岅?(^`F蝩帐)=0_>喉徎l禥V45Oワ{餲>endstream +endobj +3987 0 obj << +/Type /Page +/Contents 3988 0 R +/Resources 3986 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3984 0 R +/Annots [ 3990 0 R 3991 0 R 3992 0 R 3993 0 R 3994 0 R 3995 0 R ] +>> endobj +3990 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 726.8189 138.5977 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3991 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5678 726.8189 214.2533 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00160_g3191066cf8f76bd00b6843b77c37068f) >> +>> endobj +3992 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 688.3382 178.5273 698.8685] +/Subtype /Link +/A << /S /GoTo /D (a00160_gb50f78bbf36d912d69f6c1685d0b40e3) >> +>> endobj +3993 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 649.1103 138.5977 660.0142] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3994 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5678 649.1103 205.5661 660.0142] +/Subtype /Link +/A << /S /GoTo /D (a00160_g66d19181ad5fe8b8f7c84d1f1d46a2ec) >> +>> endobj +3995 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 610.256 187.9223 621.1599] +/Subtype /Link +/A << /S /GoTo /D (a00160_ge4dcbbe6c641d2e3b8537b479df5fc99) >> +>> endobj +3989 0 obj << +/D [3987 0 R /XYZ 90 757.9346 null] +>> endobj +3986 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3998 0 obj << +/Length 1782 +/Filter /FlateDecode +>> +stream +x诃Zk徲F秊_a翖Dj唝?P呞j +祬菦uI4狐=硒5鉛+$直忥9s蠞腭$$琉$'J(d桰簺醖虷}y 讞>鄺圪硹$Ier{WF Jhr箕0譎,朤帙阷8=;砦囼?擵g_孥:z椵e洋琀薙帀`婳穙f哭6j墏Ib= 'k慂f3Z$寛14偻8e蠲v鰚鰃ШP04RA仞P Gp喓盧候咼0~靀aUd倢edH Lu:鯩v^A爑&;デ黳西E噛f0V录{鸊u[ b湤畈饧病P7閆 L碕$S鍬K寨m b 0鲶D\西.7)FI樇A 胞)!X!E樃F+樽玗澬K駏A C跾昉B蓟%E (滘{R旴(賾Z]䴕福<兕僖椵媗珸鯫kP jQ哼u鮌臽N]冴kh 蚸x1PwKH +Sj"o矎"/嫷=客z1Iu" F砕浇t茉榳~ 8縜zqz5h$尋![|c頔程ㄎ狅饕笀D!I9/慜"較0g%t'ヤ'鰒;+$C.O鏲^lN;cN4%彧柘$翋25:)y省r*@D03(vC簝&(dvx苝)!f罔c  滲髃K鴳R裲o堆CO 26/< 柌望t]彺G%RTs鴺宆\+沲?踾哵NC艠c: x5d矤H(e芃!,nr堁39疼橃驨0笶>配皩^\grz2 婑Z嫷 ,^Y #汕-!,nq堁8疼X祗N案E>赔皩^\g!;纣^聣aV<噴fv麫!)DR塹煰證6专杆:箱 i惚G:羈焬娒A 莰蝊跓羦乵xxa厜Nn斥F噟%癛爈鼄劀u案!F羡0oc;凛{2zq澚l茑帏噳媫b饃鑵瀋寯躢蜇菱=徝紞>廩銼<髓舥髊弮憧z&n<鰤羉>1吁:}蘡鸶丒=2^=庰:廩紂徾<幦枧u婹徝鉶<;廩泥|岩5乎烏騌=1 \zBe醏癫1ze鎚事琮稜x鞠"葐!Dt盖醕*zq軳歧蔗惍洱-鍰F侧P1~儜`攗矎v檧c2:⑵诡`q證尀隺奁u7顉媨婋a礁嶋榫皚is9;搼H圯頿&*α拇砾魚u瑆i缚yH0稫"倮!孠胅f{?潒.$粲 哠2!港p:e莖v<;Uㄝ$&聤礡5P<x椋藢 渉牱-1j嗒炎犲桙!KskY䴕ま筋誟┵裖齗n袠|j(倰zb "泔蒚 詰倮3槕^7#[紬鈹o婒;淑"I甶G镍袁15莰湍R4!蝮'A$嬏#V:ㄛ0鬽V:/QX哃爰>:衴X賧3譑]送柣U铴!*岡)菆徼伵哗0訫眉M7鮵k6鲃鮉DE/n覨"?祌!寠だ漯=硾 +漰5竔[鸅+攅a篓藕DF1韣嶱嫲歘eEv\澼/躻畂萘籿冈忡=Ц鶧1栒演倞^匼^譑俲鄺z鮮蓨nz鞆)蝮/$蝔裡ndstream +endobj +3997 0 obj << +/Type /Page +/Contents 3998 0 R +/Resources 3996 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3984 0 R +/Annots [ 4001 0 R 4002 0 R 4004 0 R 4005 0 R 4006 0 R 4007 0 R 4008 0 R 4009 0 R 4010 0 R 4012 0 R 4013 0 R 4014 0 R 4015 0 R 4016 0 R ] +>> endobj +4001 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 274.5352 657.906] +/Subtype/Link/A<> +>> endobj +4002 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 185.6501 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00175) >> +>> endobj +4004 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 463.3525 176.5052 473.2801] +/Subtype /Link +/A << /S /GoTo /D (a00161_g3212e70c55244608ac16316888c354f0) >> +>> endobj +4005 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 450.401 176.4952 460.3287] +/Subtype /Link +/A << /S /GoTo /D (a00161_g6cda47c85ce1b58b501b44ac9cccc50e) >> +>> endobj +4006 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 436.4733 194.2087 447.3773] +/Subtype /Link +/A << /S /GoTo /D (a00161_gf7dd2757d1e766f65b01ba7c91c660a0) >> +>> endobj +4007 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 424.4982 173.7357 434.4258] +/Subtype /Link +/A << /S /GoTo /D (a00161_g34b924954ba5707d536df28d71a80d39) >> +>> endobj +4008 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 411.5467 173.7357 421.4744] +/Subtype /Link +/A << /S /GoTo /D (a00161_g9e97c58fe35f750ad192774be9408ac8) >> +>> endobj +4009 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 398.5953 173.7357 408.523] +/Subtype /Link +/A << /S /GoTo /D (a00161_g28cf9765e4b57451af559ab988ad7160) >> +>> endobj +4010 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 385.6439 173.7357 395.5715] +/Subtype /Link +/A << /S /GoTo /D (a00161_g17ccd786400fd08b941e11046df1668f) >> +>> endobj +4012 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 327.8154 189.0379 338.7194] +/Subtype /Link +/A << /S /GoTo /D (a00161_gbc331f73107958428bf1c392ba19b6f4) >> +>> endobj +4013 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 314.864 197.8948 325.7679] +/Subtype /Link +/A << /S /GoTo /D (a00161_g37e3103b9591790d484a450525739661) >> +>> endobj +4014 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4857 276.0097 216.0979 286.9136] +/Subtype /Link +/A << /S /GoTo /D (a00161_gf0349a8481565e80f55a751e2b408d6d) >> +>> endobj +4015 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [446.0722 276.0097 470.7595 286.9136] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4016 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 237.1554 173.556 248.0593] +/Subtype /Link +/A << /S /GoTo /D (a00161_g64807ba7c221ddf735572d05021539f2) >> +>> endobj +3999 0 obj << +/D [3997 0 R /XYZ 90 757.9346 null] +>> endobj +1068 0 obj << +/D [3997 0 R /XYZ 90 739.9346 null] +>> endobj +286 0 obj << +/D [3997 0 R /XYZ 90 739.9346 null] +>> endobj +4000 0 obj << +/D [3997 0 R /XYZ 90 716.7484 null] +>> endobj +4003 0 obj << +/D [3997 0 R /XYZ 90 481.3261 null] +>> endobj +4011 0 obj << +/D [3997 0 R /XYZ 90 346.7654 null] +>> endobj +3996 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4020 0 obj << +/Length 2158 +/Filter /FlateDecode +>> +stream +x诃Y霃燮侶綡E缔wI:EQ7q掱j珶忄@Sk塗D規Q咸>ㄥC湒速涛k,狆莻憣H"Bd 瀈朝佛~鼄穤 O倓$姭`鳕9(F$g<仨Z3n<"Z愤菝P5# )幑軺Y{仕&m姫茳納祕闺`璗R(啝楷~鷻{愵諍懩2敯$崃ir帿7u| 絗J9赡磛,$0脻z磵寁1Q-蠊~V煔楚GC_鐝鵨免u^f9*h83扝9僥1;蝿Y辸y=5U^g椻 |刧d冣&喭w骤<輧z鼥R~躺形$斉Q燘Nb8e%G歹┢~'凴糳H"-蛬 吠『<b3蔍$8铷&衹+0憟 y濡狩樯诎-遫]缜谪1o碘$|E薍("q﹣ㄦ觖缻诀膙+&腣矩#(@ +bm兇$玁Cyx$ 6鈊辴誜啚騝n(胈'\m薭\B躭騗庮U贏档嬕w粦9eL勨qhG_],蚹_0#(潔巍 嗾湵 C飐TK#n圠 &#P* ~Y斮陛C鍼齙磁:7漯艒!墾筀浽鸐si肠59H2 I垱v+邀S! J怵襁r.恰峺 鈏保Z聟l淧傅講,pP恛粬抋淖怪C %l焘1' ,X繯M狑7廞HpR俅叔鷟.掺s9 + 柑?%V:埦働歙柊≌鷮vmS 含6嗕'綑濹a痖l蛬.鏅桧w0=Dx詧饗岟s圏屝PMv~黩1骾箍磠焋郠&k[錧謥值沱Z)>Z 铥]膜kA&e 戛鋦训,_0錤C局祎=粬劽篤O姂kY%l壗`{;8嚥$叫6獗:+Ls;|鬹婛鮴矯M软. +g曷N洡僣U娇yp憚s梔锯>惦呩Qf媆Gj}▕絠Ms蓿;b]xK%臰鹚緍~檺P呉鬜Ei[t全s:懩+<\涴p饪z*d=6~発4鯏\-S&矙⑸镋OsAFC \'4I鍻 0My髙贤+"p巹彸5gN薝泥懶債\浺& g[Nぁq +⿷袆睕-玂0硬vd-,獾e]纔-k鱇禽b℉~籯u鬕b岠{囜翏qBC(j砎瑷9XA +>熬n毥顱D樷ⅱ$橫+巟隨k)$ 狌'凢I|e谒櫐勖.舿輐鱣鑂[竞{P登終牋_瘞]6"倱 ++蕰鵸}j棻?@廧摏鎭親溺.称伣 +1 A3@唽F9蕝蛉惹u蒭>釕 螪!_a萿槟棎8 肶齛/羛A聞C3*佗垘'鉹b6BI,鞎$!^纀郈齕h弸寲嬜u91埉yqq妃J<罔帑屛R郋 +<5纡JK=愮靟'腊D 笐 BPv'm5酚 圶3菥{杂WLA釟V{i8yQ卽&黺征 f扸G稑磃疘k%顁诊F誣c淖}xx趺?W}癢$偌:x幫磼Q炥r2&Q1?仙|隀煲!羲薳蕌e?厰黹濢,ru馮贳3w,矖猠Un>堏瀍R'N>'蚳 9Z%_wd司1滙鮵芪讅躖_嚂|肿5龗#緷y鶑粦AT鮪鴺9癒赥_ :遂囫R濎皀啐'鹴獰$ "表E^w&n竟梉茪鏤F犃欬鍷AEΔ鶦_^惦瓢剦搠B莭洬XY(h紀2腔 [ ^a羓泠>玮9窡9ナ峨x贬-谳欇U縹z蔊?OX閣l/Xendstream +endobj +4019 0 obj << +/Type /Page +/Contents 4020 0 R +/Resources 4018 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3984 0 R +/Annots [ 4023 0 R 4024 0 R 4026 0 R 4028 0 R 4029 0 R 4030 0 R 4031 0 R 4032 0 R 4033 0 R 4035 0 R 4036 0 R ] +>> endobj +4023 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 641.4254 274.5352 662.6268] +/Subtype/Link/A<> +>> endobj +4024 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 614.7347 186.2081 625.6386] +/Subtype /Link +/A << /S /GoTo /D (a00176) >> +>> endobj +4026 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 541.2703 183.1495 551.0484] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +4028 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.3051 441.6787 359.3784 452.5826] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4029 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.4596 412.0991 356.3884 423.0031] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +4030 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 261.938 213.038 272.842] +/Subtype /Link +/A << /S /GoTo /D (a00153_g41aa744caa46913b3b3aedb2a4e78546) >> +>> endobj +4031 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 224.1492 190.8907 235.0531] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +4032 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [191.3888 224.1492 268.6482 235.0531] +/Subtype /Link +/A << /S /GoTo /D (a00153_g69646a81a922033c5281445a71f8ffed) >> +>> endobj +4033 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [336.7197 210.0611 372.0849 219.9664] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4035 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 143.9152 217.4713 153.8429] +/Subtype /Link +/A << /S /GoTo /D (a00161_g029256bc17a12e1e86781887e11c0c7d) >> +>> endobj +4036 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.6302 105.1501 204.6385 116.0541] +/Subtype /Link +/A << /S /GoTo /D (a00161_gcff75c8c930abd6ff168e85373a4eb92) >> +>> endobj +4021 0 obj << +/D [4019 0 R /XYZ 90 757.9346 null] +>> endobj +1069 0 obj << +/D [4019 0 R /XYZ 90 739.9346 null] +>> endobj +290 0 obj << +/D [4019 0 R /XYZ 90 739.9346 null] +>> endobj +4022 0 obj << +/D [4019 0 R /XYZ 90 716.7484 null] +>> endobj +4025 0 obj << +/D [4019 0 R /XYZ 90 559.6875 null] +>> endobj +4027 0 obj << +/D [4019 0 R /XYZ 90 501.564 null] +>> endobj +4034 0 obj << +/D [4019 0 R /XYZ 90 161.3562 null] +>> endobj +4018 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4040 0 obj << +/Length 690 +/Filter /FlateDecode +>> +stream +x讠V薾0茧+xf袱H9鰬 +穿oiP(秎 靛T矝骘IU禿1@a棱c3凰% 勧坅DKM崍Y"F8|仜炨 x7彯n!櫙 +ㄤ郎|0I胃d擊邯v囩鎻n扈M就l>[e扞V,!稍>物骎儞(厒Z怜栳憫%J綃&戜;寕1滌 哔F撷;,騎v)棍暎脍簔s,噟_TC挋樗A7o塂'岴稸j讹滣b q)F閆Pbj楻'たM鳄睪, O夒檙 鱙 恜n禆P餅藑戸4h躪s1昙犂򄧤撿XT葨v.6ii[YY頚@?%殏釪N]Q櫛豗躧搶$∕艒6躵L洡5Yk{焠稯棰N螼玥鍁m6榱厄蔵迯桵鎝f砞歰軿,K3.症酚玳E󒊇媋躸9p./謮R %J VJ奏Hx}瓬嬪旣 P殉壑K^鋰~絧*パxT圽K婖qz騛L⿸扟鈘;睌{X8錭対攺蠖)矧哠~慢枖彨栀mS庽m]=%IBU +7 ob.微魏企5謨 嗹AI鮛穥硈\倃oo叿礖鞤詺o"+觾?)髻7铌3铊:垒梋sq蜋韖栖[g5錼瞱W民嚘j^讀驗収~z 溺/m慹ndstream +endobj +4039 0 obj << +/Type /Page +/Contents 4040 0 R +/Resources 4038 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3984 0 R +/Annots [ 4043 0 R 4044 0 R 4045 0 R ] +>> endobj +4043 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 704.1539 179.6335 715.0578] +/Subtype /Link +/A << /S /GoTo /D (a00161_gb1fc692a2700b7a51517724364683f67) >> +>> endobj +4044 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 665.2996 173.556 676.2035] +/Subtype /Link +/A << /S /GoTo /D (a00161_g64807ba7c221ddf735572d05021539f2) >> +>> endobj +4045 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 652.3482 189.0379 663.2521] +/Subtype /Link +/A << /S /GoTo /D (a00161_gbc331f73107958428bf1c392ba19b6f4) >> +>> endobj +4041 0 obj << +/D [4039 0 R /XYZ 90 757.9346 null] +>> endobj +4042 0 obj << +/D [4039 0 R /XYZ 90 723.1038 null] +>> endobj +4038 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4048 0 obj << +/Length 1254 +/Filter /FlateDecode +>> +stream +x诃X]o6}鳢 / 6ら毜X桗- +UVb!鹅Y龆钭颮e}Y2傲Ν脅/%)B@仴仏歑.Tm&4x瓶逳爘<晴:噻配鷰倮珮 +OyD2`羈鵬 +R玩2莣財t +嵒dmt苣!<$踭鰁q?y敞hKU+pL>}×蛰O(嶂揉/麬 X藗虳0''縒qy嚲罥帻A鎳莗春!z6J4茼搽C糔忝:[烹5壼億専恺 4NX 矆腏橤庆亨蘐 旕o鉉垇杄衡,';,屆ks嗦8啥1凫紕BY;罠 +FB-褰轳爕5眲R幈$%TH橩鴌嗆敲j豢iseDs娩獓>t牃h囹-啗2q囚et"q缔%$秕CG腦璟R嬊/乷齔擁{羧Vu贊萅@埐虙(#Y苤聞%5湺 +斟o 婉款裰砂$yn<袸㥮w詢4刢擛%掤R絳.1忰轺鴜紺萧w:u"尷盝裿濭峇w9jRΠ>賡#偲T +#_%i>.盢桘Uu妃粋.牸 :Xri8概庻!p +@v'3Y鮀鐷F=饀遰匲i1. 琻8隮%"(gw:牤V8庰3c不ky惐B嶑`㏑M轜藃rfZ溏眄馽2:q篚龡7镞}x :妹⒊T0F {8jD铆EI!泏譓#T跰桐%孾Q"漿﹋顦Fn衢鬀pgI資空~玚d<鵰勛聋鐚验6Yv1@陡羡豌荰t釼p3c讉{*┫丁;xf鲁毨RQT5拄為(荔::W"i`P<擰\VOA潚wn 咨?逖臧<B髁7頶 膀涋0~檬{F*ZO39?@呔熆?菨w#悭詹/9 8endstream +endobj +4047 0 obj << +/Type /Page +/Contents 4048 0 R +/Resources 4046 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3984 0 R +/Annots [ 4051 0 R 4052 0 R 4054 0 R 4056 0 R 4057 0 R 4058 0 R ] +>> endobj +4051 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4052 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 185.0921 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00177) >> +>> endobj +4054 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 516.2256 223.1601 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00162_gaa60ca995565b799bb958c806e933665) >> +>> endobj +4056 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 458.7707 172.998 469.3011] +/Subtype /Link +/A << /S /GoTo /D (a00162_g69b075ef7e4d7bcf5a903d3d75baac02) >> +>> endobj +4057 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 419.9164 176.8634 430.4468] +/Subtype /Link +/A << /S /GoTo /D (a00162_gd1f18f739da7703628c3663209463a0d) >> +>> endobj +4058 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 380.6885 180.1912 391.5925] +/Subtype /Link +/A << /S /GoTo /D (a00162_g86beee1f69d05b16022dfb430470e9ce) >> +>> endobj +4049 0 obj << +/D [4047 0 R /XYZ 90 757.9346 null] +>> endobj +1070 0 obj << +/D [4047 0 R /XYZ 90 739.9346 null] +>> endobj +294 0 obj << +/D [4047 0 R /XYZ 90 739.9346 null] +>> endobj +4050 0 obj << +/D [4047 0 R /XYZ 90 716.7484 null] +>> endobj +4053 0 obj << +/D [4047 0 R /XYZ 90 534.1992 null] +>> endobj +4055 0 obj << +/D [4047 0 R /XYZ 90 477.3471 null] +>> endobj +4046 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4062 0 obj << +/Length 1385 +/Filter /FlateDecode +>> +stream +x诃Y[o6~鳢校 飾`!K z蒣[ 腂l俚錯莜摺$试扭}(e}:玢痒慓 I0#壛 +芿曹Np?繖慂钕}里鲹玔j儗2(#H%4筥}歫s*餿边瘖t摟抨旮N7串钴f洿}H颐岃i/鞳\33%B途苓Mox4撃缠6'+爗7翀-抔咐C擁凷.6搹擏M滉F衛a糜%/酝椔魰7]傫K 摤d(筸p獩鑸择o襜乂U舾屮3苩摙n宓@榟旽6 滞佹>/m b 0鲔 挓婖頿萃M0E奞N逘阐5!X!E8G+盈酆ⅶ黫F4珚=-)釲z失~頠U +i噅u)q?=陬谝л媗 ,霪莑yD谴藚r$2\障邭x?毻藔桄D笎 +z叭浽*+螶呂r_q絁 +DI$罤`V撤5鎯~?0瘊{q-;缬. 蛻琄<噴ヮE畅褠缙卍仴*逓颔q`]偭刓\緘缾+$[髎涴3ア颋0T,/,K傥屸.[鮮C5 !(>脾胚h秓s +K褢8T,烩栬n肀喇0&伣T厁^G烕钂壚&挆L`恿疏sP虽璾韇擙Wo炮逤蠩b鄜;y榅蛬P>椪 :QF陿z,甞/`H结紞zq醵r廞o楨/頨角bq惎@Z论 痢bB镹馟蕳兇誳攟}t@ z (~],-艇y毌.j檏h )髬R鍼W茅孒箚壐dX>, 錠蕤斲笹H9垄譥堶)h鸸痢b5AR婲z+邋zqㄛA顆E鯹6峩 f LI2.w垌"[Bbd寲#-帷C杙0K廨a婆t稬徢#璯嫐鏴G劓:朻 +a璝寧皠CF,崃B栶笃-咽=a礁gK|; &Q耫水$4渧js轥Vp剆6 +:d迟咣﨟[谩M'Z嘉^缹F旕堫+3q7劝題X@鳝糛莘s徯}凟/頨骰S1厉钑FP秉Z")ラT5旓鰝cq 虆樚 !4(踡澅7諣j[沈⒔鹩c懑蒎&9薟荤欌計綾5臱鸖脲1U韃!9X躼^缾衤y泫y闫kc0媈艹聆囕v?`< 齪*朹肵髇鮛觴󥟘彳舂慒裥!8匕Y鯱Wf *哸 q政富h*羃 6 蔋d5箺队a璫a墝>Q嚟(楑y撴閍Q竷nwj鴹芡垬炾 B5eWWcYf*[q熮精穴~齘燒铪樻輮诳8j^}醹s膃ndstream +endobj +4061 0 obj << +/Type /Page +/Contents 4062 0 R +/Resources 4060 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4074 0 R +/Annots [ 4065 0 R 4066 0 R 4068 0 R 4069 0 R 4070 0 R 4071 0 R 4072 0 R 4073 0 R ] +>> endobj +4065 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4066 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 185.6501 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00178) >> +>> endobj +4068 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 550.8716 172.998 561.402] +/Subtype /Link +/A << /S /GoTo /D (a00162_g69b075ef7e4d7bcf5a903d3d75baac02) >> +>> endobj +4069 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 512.0173 176.8634 522.5477] +/Subtype /Link +/A << /S /GoTo /D (a00162_gd1f18f739da7703628c3663209463a0d) >> +>> endobj +4070 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 472.7894 180.1912 483.6934] +/Subtype /Link +/A << /S /GoTo /D (a00162_g86beee1f69d05b16022dfb430470e9ce) >> +>> endobj +4071 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 433.9352 175.2098 444.8391] +/Subtype /Link +/A << /S /GoTo /D (a00162_g984c4a8b65a3cb35460b073a40568c25) >> +>> endobj +4072 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 395.0809 185.1725 405.9848] +/Subtype /Link +/A << /S /GoTo /D (a00162_gf11c966b0e4f4ecaa73deb14bfb6830f) >> +>> endobj +4073 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 356.2266 188.49 367.1305] +/Subtype /Link +/A << /S /GoTo /D (a00162_g123c95a7bb55143cabba92446ce8f513) >> +>> endobj +4063 0 obj << +/D [4061 0 R /XYZ 90 757.9346 null] +>> endobj +1071 0 obj << +/D [4061 0 R /XYZ 90 739.9346 null] +>> endobj +298 0 obj << +/D [4061 0 R /XYZ 90 739.9346 null] +>> endobj +4064 0 obj << +/D [4061 0 R /XYZ 90 716.7484 null] +>> endobj +4067 0 obj << +/D [4061 0 R /XYZ 90 569.448 null] +>> endobj +4060 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4078 0 obj << +/Length 2227 +/Filter /FlateDecode +>> +stream +x诃[]o燮}庄 ǚ\7m"i穳*3盤YV跹境$梌r棾Q驷湷sf朘/玩~剀压Q8!鮸s?sO痣飃=}绡b婪/箾;4左涨:俧Dq歧_L馘w\樑逭Opㄨ架瞠骅琶鎟_硐塍鯽奎m鮶v疥h[UJh鍵滮澾偤3J劤j綪聹泱麢"|偻尴~钼4' r僑L銰$佭0<5丸,q+F)]囉诅j矾畏釗l喢|W}瑤Kf諂S鵤6qJ振!><穄|耑誽 乶蹌Uq{閭8"r羾瘼]纨]帝5诐_K C*B5s-!円浍 産TZ +J腞0蕀-妁D\蝫莋Cn#8蒙;T=N&詂礆}&鸩c设②潥2]9態A乖W'慾 b謦6槆"籴妼l薔"{k慅哂vs"▍KG4O[嘕鵾O䁖25v臫伞9<駿+凯 砃舳窟%阛~ ⑻5鉊i讵鳔師Z袒佝繆/蓉熌蹶s(胵謂@暼揾灉碔越$圈5羲韣郴苈◇扛l漕 癸(r0!8蹙}蜾鐝拏磯 瀑^ -*篱|茴?懟L$ M羒~摏9!7怚! LO<陻供H黼V忂阞@n喲0IX笿g6?t2v/軓叧=/o蹜&銻 悘wX罈d$q綄W飋>靪閨﹫⒅P%f#漵锌:g矑D 牌M樕V6c孡苰;揷 &魅屗H7菧梢孤鳾P壸[l輅鴃駇蝏蓤栋8`X賐1珥,巠'X#焍1.#塠/WK'`灯[?冀y縻7梢 h< 剆M发/勬 缰鸥3<朗哻寫8ogx;琉胵I軐岑/%]|棶 慭籅B牧1}%,8S腦j樸Vvc莥;莄 庽颧8幩H鈌攉7i僑#k]菷*揉獆衲2x蝞X[钿篙;朗vc寫8ogw;令籷I軠蔺狩骓*睖Q"ヅ@!湴億垖崧:b蛒{G6F鱤6N紟I薞鳂'8峩F网&澝础瞲fz%u?2g把怳鋂+`X賑12珥\巠'剀#熲3.#墰u:油0 +瀺U愥坜騛6T蝞-3萐W 漓安cd7污驨盎G>舗\F7c鱳on轤С7'MG*栲脴腚9##廯1;朗~c寫8o鐆;溜縬I\/cu眭jl%!e陨B":TA仧擴}\e[[* _1:朗Vc寫8ogu;陵玵I苋觎ts帬Y鑀z<d煫3椸09$/c3w般-滸Lá荩8ip8&-躢炧/產电n畭嵾鷸桫;雾沒簙喂掶-0轥{;`//麔邖晚q蓧 +﹪D+c孞珥j"纨k砷鈇涭0葐凒r=^_R懩瓀1齘閲?/踫?"}熽B廯咼>=Uts>秢úw7Ba贕d6鮝D +榯]郷玚Xo看3~6喃]E压R-搿@賀沆cP晓砄a砾畗}k%PI")牌ow~騏捃BX桂X徙糫崆煎嘛qO)|\E鞅菄鸆Z寀P|xo嶝蔭鰺Ⅳ盟 +0`灅碤 F# 辛紗煄踼腈鉷\J胆4艭瓵毭羡苗嬔嗰洭歓$ 么$Z=oVl8 0扌0=辀敏'4LAE鞅a.缑%0p7#4 U夥歨 鸒0憓誘轍L釥;mA辄+~|b Fh,邆蚄JO觺nO觺饒gis竺/朗内珥/-穇弡J*捀鸦尔蘎蚏"(諈,T夁rb銉霤麉L洫\e嗪U#w粟`e1迫u湻s=-晦銥:"痪>6胼.7f,梾DTI偝攳7l鬗^ +駲Vz._今|u〾3轮5鳢绿暹W>噖忻?唭万K麉聆>汊o_/脱%嚨瘫鶔䁖里 烵U?㧐齃桛-J鮡ndstream +endobj +4077 0 obj << +/Type /Page +/Contents 4078 0 R +/Resources 4076 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4074 0 R +/Annots [ 4081 0 R 4082 0 R 4084 0 R 4085 0 R 4086 0 R 4087 0 R 4088 0 R 4089 0 R 4090 0 R 4091 0 R 4092 0 R 4093 0 R 4094 0 R 4095 0 R 4096 0 R 4097 0 R 4099 0 R 4100 0 R 4101 0 R 4102 0 R 4103 0 R ] +>> endobj +4081 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.7618 250.6249 659.9632] +/Subtype/Link/A<> +>> endobj +4082 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 611.4648 193.391 620.3114] +/Subtype /Link +/A << /S /GoTo /D (a00179) >> +>> endobj +4084 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 465.4097 176.5052 475.3374] +/Subtype /Link +/A << /S /GoTo /D (a00162_g3212e70c55244608ac16316888c354f0) >> +>> endobj +4085 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 452.4583 176.4952 462.386] +/Subtype /Link +/A << /S /GoTo /D (a00162_g6cda47c85ce1b58b501b44ac9cccc50e) >> +>> endobj +4086 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 439.5069 224.8339 449.4346] +/Subtype /Link +/A << /S /GoTo /D (a00162_ge429c985be88ed048f382511c9ff00de) >> +>> endobj +4087 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 426.5554 198.4231 436.4831] +/Subtype /Link +/A << /S /GoTo /D (a00162_g19709735f29dafeabb91e0882231f9f1) >> +>> endobj +4088 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 413.604 206.5625 423.5317] +/Subtype /Link +/A << /S /GoTo /D (a00162_g7e904ab59f7ee134cf3218a8219e7e29) >> +>> endobj +4089 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 400.6526 211.4442 410.5803] +/Subtype /Link +/A << /S /GoTo /D (a00162_g5025948dd998f65a13a375a37aa5edf5) >> +>> endobj +4090 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 387.7011 196.052 397.6288] +/Subtype /Link +/A << /S /GoTo /D (a00162_gbfc1d8d15852318927cda30e1bc0470a) >> +>> endobj +4091 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 374.7497 209.3322 384.6774] +/Subtype /Link +/A << /S /GoTo /D (a00162_gaaaaf66ea67900c36d01136d5bad1168) >> +>> endobj +4092 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 361.7983 213.2175 371.726] +/Subtype /Link +/A << /S /GoTo /D (a00162_g57aca709a33690cd4fb73fe199fa1bdd) >> +>> endobj +4093 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 348.8469 207.0906 358.7745] +/Subtype /Link +/A << /S /GoTo /D (a00162_g8b600918f84783490fd791ce773175ab) >> +>> endobj +4094 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 335.8954 215.23 345.8231] +/Subtype /Link +/A << /S /GoTo /D (a00162_g6b2d00412304e2d95e7b853cce5858b0) >> +>> endobj +4095 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 322.944 220.1117 332.8717] +/Subtype /Link +/A << /S /GoTo /D (a00162_g3318dec654781e9d6d8ec873636660c6) >> +>> endobj +4096 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 309.9926 204.7195 319.9202] +/Subtype /Link +/A << /S /GoTo /D (a00162_gf784a76fe619452eddf87e6376a4bf9d) >> +>> endobj +4097 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 297.0411 217.9996 306.9688] +/Subtype /Link +/A << /S /GoTo /D (a00162_g3a4852e2372e34e1c0142d1147fbe027) >> +>> endobj +4099 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 239.2127 175.2098 250.1166] +/Subtype /Link +/A << /S /GoTo /D (a00162_g984c4a8b65a3cb35460b073a40568c25) >> +>> endobj +4100 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 200.3584 188.49 211.2623] +/Subtype /Link +/A << /S /GoTo /D (a00162_g123c95a7bb55143cabba92446ce8f513) >> +>> endobj +4101 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 161.5041 185.1725 172.408] +/Subtype /Link +/A << /S /GoTo /D (a00162_gf11c966b0e4f4ecaa73deb14bfb6830f) >> +>> endobj +4102 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 123.0234 181.2968 133.5537] +/Subtype /Link +/A << /S /GoTo /D (a00162_g82ff99d50221f7c17df57dc6092ffc97) >> +>> endobj +4103 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 109.6984 196.7787 120.6023] +/Subtype /Link +/A << /S /GoTo /D (a00162_g52c3c5ab1b1aa0659b5e465f7fbcc409) >> +>> endobj +4079 0 obj << +/D [4077 0 R /XYZ 90 757.9346 null] +>> endobj +1072 0 obj << +/D [4077 0 R /XYZ 90 739.9346 null] +>> endobj +302 0 obj << +/D [4077 0 R /XYZ 90 739.9346 null] +>> endobj +4080 0 obj << +/D [4077 0 R /XYZ 90 716.7484 null] +>> endobj +4083 0 obj << +/D [4077 0 R /XYZ 90 483.3834 null] +>> endobj +4098 0 obj << +/D [4077 0 R /XYZ 90 258.1626 null] +>> endobj +4076 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4107 0 obj << +/Length 1235 +/Filter /FlateDecode +>> +stream +x讠X[s贔}鏦hx`橱嫥萤鞂]B輼<%唫l3罖A匡芬Jb錳t9麧尺&抈鴳泥D 2Y<鱬?魣{=匃C痣戴顨毮 #㎜yI悹&渝椌F員帼|;妓阴&蜄?z*轢iq)}HⅪ閒a1苢36巾]M+)Nー扻!蹙|蒙喏0bF嬩o噶C撶К糦黝{Tqy兌 纶{L8'挫2 (壳謊鑗A@"'ほ鳷q4汣j.[m7.蠹眖琹S墓J纂⑤!B鬛3賈 L碕$bk }TX 鶤u.錼"庂觱唁 R寬8y卝a鱏@癇0q姈/缦.伹枉笼t}(H堊ZR臋偵[HU +i1隦嬜邠蜿7Ov佗E遏e懎9叁灏Z!mj≤ I祵ЛB咟祹囇,-56劚闎R濸9J縝L70驞縸($ 墲z鹙0焲鸎o衎转;嵦 CaR諓熏誆D充%Q謷埶怐A69稀oW浥刬C氯s\矶 =93g0巂<c}4湘E嘛除q 缧2 +譁淽|@0H4?疟黖)崛稉 (c呹鈪賎)爰嚰33皉0輅>_^%綤C+!沢aッ| 鉏(Q-j禰04k5歬(#娆> bt4:蕏2簝4浩鹶閦恠U~揠%#坘eL摣閔鳋魃鮨|3_M偐Yj$殠 +铡*jgQ琢q涐R#1?o^潞 1z喦y+脈轜^#嶀qA芾鹕鐝煮q笩箆狢fΞ內6脜@孎}蘮囮v;B鐧%鯤_a迪В歈瓎7w乘换鳁鉸.,鐦妔S杩`礊魊併腷[鰱鍉H╧X[雩披/籺>喘p霢皺觛 D*u朒旕T#糴懺x尝焌(D昲0GjwIhF韃 熹K/ VpI1 T.&鰨砽背鍞+漞醸缤竇狤EsS$嚬[揠鉬aO%蓧]卧鶔睊,a%c鬔2蝃暏消c@q籞嘂O@"軕脀鉃>陞)愐攚$uIR爦憜X2pM诰鎼城T 駢}枭婫C篓_,嚋N襇簢後>瓟讖迮`rt7労|Au熂`怅a@E/n7w鹣鼯a薱篿η~卝上靠 Auendstream +endobj +4106 0 obj << +/Type /Page +/Contents 4107 0 R +/Resources 4105 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4074 0 R +/Annots [ 4110 0 R 4111 0 R 4113 0 R 4115 0 R 4116 0 R 4117 0 R 4119 0 R 4120 0 R 4122 0 R ] +>> endobj +4110 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.7618 250.6249 659.9632] +/Subtype/Link/A<> +>> endobj +4111 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 611.4648 193.9489 620.3114] +/Subtype /Link +/A << /S /GoTo /D (a00180) >> +>> endobj +4113 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 535.9072 190.8904 545.8349] +/Subtype /Link +/A << /S /GoTo /D (a00086) >> +>> endobj +4115 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 479.055 271.1301 488.9827] +/Subtype /Link +/A << /S /GoTo /D (a00162_g26440a35353cb457747a4cea372c62e9) >> +>> endobj +4116 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 466.1036 280.5446 476.0313] +/Subtype /Link +/A << /S /GoTo /D (a00162_g30fe27cba3c14ae7f9a7f118144af43a) >> +>> endobj +4117 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 452.1759 213.038 463.0799] +/Subtype /Link +/A << /S /GoTo /D (a00162_ge28f6cb60e86088d8886d0f804b4f37c) >> +>> endobj +4119 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 395.3237 198.6315 406.2277] +/Subtype /Link +/A << /S /GoTo /D (a00086) >> +>> endobj +4120 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.1296 395.3237 276.389 406.2277] +/Subtype /Link +/A << /S /GoTo /D (a00162_g4647b76d0ef50a5305505041f5775a37) >> +>> endobj +4122 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 338.4716 196.7787 349.3755] +/Subtype /Link +/A << /S /GoTo /D (a00162_g52c3c5ab1b1aa0659b5e465f7fbcc409) >> +>> endobj +4108 0 obj << +/D [4106 0 R /XYZ 90 757.9346 null] +>> endobj +1073 0 obj << +/D [4106 0 R /XYZ 90 739.9346 null] +>> endobj +306 0 obj << +/D [4106 0 R /XYZ 90 739.9346 null] +>> endobj +4109 0 obj << +/D [4106 0 R /XYZ 90 716.7484 null] +>> endobj +4112 0 obj << +/D [4106 0 R /XYZ 90 553.8809 null] +>> endobj +4114 0 obj << +/D [4106 0 R /XYZ 90 497.0287 null] +>> endobj +4118 0 obj << +/D [4106 0 R /XYZ 90 411.9902 null] +>> endobj +4121 0 obj << +/D [4106 0 R /XYZ 90 357.4215 null] +>> endobj +4105 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4126 0 obj << +/Length 2234 +/Filter /FlateDecode +>> +stream +x诘Z蹝6}煰P%/颐 竉\[﹗2r2庬贊Qv挃K杊*篖tI忑鷐d僓眐啋糸A恖D釓eR+:_p弄煰狩疠礻軑q氹鸯9俧Dq艷冲/c﹂錃;.跳t/8Tt-^Eyt砙6碰8?畍凵o硹W覻M[㏑B3O/垦越饥D8獸J榮|垂抃氆嚝譹't N1=:& |妹8屩敚硠鄙5庣OO噊*-+清,赾/ 炽b(黊KF淩gH茬圉BB蚆q淐暥獍丿濨 悎拣q紅W乒<瓔K捪v锼乔J軓砓錜%縨哢2kFZ.-;30(-")p9v鵿鸳沣n('Fp哛谞;N &T胩綔o灦縊隒橶脾5'R(ē骙HtC3憨滁貅Q8)NH5隭s;甮焹.A.H%嬢-峜毚h;夊|跶x滋唨鷸zS麶)弋.宸譋扝e壭軒4殦麿>>喁:蘋鈠uq嵌揌%4洧)艀市а<=yd!$3DsY骜胝v>-5_漋O漶+猴(z胝魭岮饈q丨躺H[I b渕碦+效p8頦浔#拕驵4宽歐arp`紒塈H翷*婥莈GjE E.1爇栄0SXy夈 錦洘餫NAkT势Q瓫糭/珣&銻 k戺鱕犁d$q綄N葵眙挽盱鲺纛鏨襪 +娹 +囩eDp2矔 笘v侪噔矸;`vX辬1绛韼y剌 b7.#壽贷a6q.0煃g渔菬^菥櫠 +蕡t氠i猀} +猬6M}漸 眰炳:XX0屁p藓bu R笇$.Z?N熯L扽枃Lr墽e4q菆)塽Y5,菠旆>`X込1绛瓘yX b=.#墜Z34|*h伓DJ欼R嵤ㄣ喡絔K*3厒uBoD,_cT8o]1飥"h)\F-傦_=L盂I屢OL嵤(鈖缒e[戣r%#鍂眺 +暦\GIk#炃藽,G5矗z ~'崤九x.胶ss盨h珑aU3]va-,岫は\貌3剂o掬&32捀壪w?%.3M4螪嵤H T│劗 0 +V-`VX辥1绛瓗yX b5.#墰X蝟正gz8.,亼*膓\F7q|z铑Si赊7-Ca8灝曆9嘐2s-泦 詧錦鞕嶕L貊L敎//珔,, 栫鰖*-Q8p倚+1檫o晢潅klGm錾泐p祛A74 \",IL藳-窯1fX嬆hjXo嬙y 麓 TX鹹目罆痑b=傮諱鬄秶諊mx铕港籲儗5%?!>'(壽l墽-~螪2@~裤F%dp? 3 靽嶕C貊9)纾韎螽榫鄴p&?O[缻7&,遨" +埖蝃稥* 釂4菢jq鼢B犁T$q浗摆総滔.搰)p襙Zy N!戆^竊慛ˊ;w嗕|晋_*:=迩蚽yZζる峣只鱊! L+^>椄匰樴覃綒8#禊}X2辴愨鰿-鲶c榾脣牤昧K?濻鮼耜?}婆3^5)斟邀 W鉣5'く椏^.C懠V钸黝纫D0 鏴ndstream +endobj +4125 0 obj << +/Type /Page +/Contents 4126 0 R +/Resources 4124 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4074 0 R +/Annots [ 4129 0 R 4130 0 R 4132 0 R 4133 0 R 4134 0 R 4135 0 R 4136 0 R 4137 0 R 4138 0 R 4139 0 R 4140 0 R 4141 0 R 4142 0 R 4143 0 R 4145 0 R 4146 0 R 4147 0 R 4148 0 R 4149 0 R ] +>> endobj +4129 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7782 274.5352 657.9796] +/Subtype/Link/A<> +>> endobj +4130 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.5548 205.0073 618.4014] +/Subtype /Link +/A << /S /GoTo /D (a00181) >> +>> endobj +4132 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 463.5277 255.0802 473.4554] +/Subtype /Link +/A << /S /GoTo /D (a00164_g31be289fd8ec3fe09b0088165d13976d) >> +>> endobj +4133 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 450.591 302.4923 460.5187] +/Subtype /Link +/A << /S /GoTo /D (a00164_g8714af98a550f10dc814db92b08d1b0d) >> +>> endobj +4134 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 437.6543 290.1386 447.582] +/Subtype /Link +/A << /S /GoTo /D (a00164_gc4357cec23abca29d2bb885803625a6a) >> +>> endobj +4135 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 424.7176 269.4366 434.6453] +/Subtype /Link +/A << /S /GoTo /D (a00164_g4d457c50e6f2cef57167c3804ce8bf7c) >> +>> endobj +4136 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 411.7809 275.7527 421.7086] +/Subtype /Link +/A << /S /GoTo /D (a00164_g863c94b0ed4a76997e53a3ccd5d0b6c3) >> +>> endobj +4137 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 398.8442 230.8912 408.7719] +/Subtype /Link +/A << /S /GoTo /D (a00164_g40fb1fb2d990ce04ae9bbee275627c03) >> +>> endobj +4138 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 385.9075 217.6111 395.8352] +/Subtype /Link +/A << /S /GoTo /D (a00164_gda99954e0f6905091885934e86c278cc) >> +>> endobj +4139 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 372.9708 239.2498 382.8985] +/Subtype /Link +/A << /S /GoTo /D (a00164_gd895686859ae7d178d31be04eb0a1a97) >> +>> endobj +4140 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 360.0341 236.0418 369.9618] +/Subtype /Link +/A << /S /GoTo /D (a00164_g38af81a4c9884ce89803fc3e52383112) >> +>> endobj +4141 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 347.0974 176.5052 357.0251] +/Subtype /Link +/A << /S /GoTo /D (a00164_g3212e70c55244608ac16316888c354f0) >> +>> endobj +4142 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 334.1607 176.4952 344.0884] +/Subtype /Link +/A << /S /GoTo /D (a00164_g6cda47c85ce1b58b501b44ac9cccc50e) >> +>> endobj +4143 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 320.2477 190.8811 331.1517] +/Subtype /Link +/A << /S /GoTo /D (a00164_g71e1b022f7b7fa3a154f19372b239935) >> +>> endobj +4145 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 263.4235 226.5766 274.3275] +/Subtype /Link +/A << /S /GoTo /D (a00164_g4433d3af16ea083a81576d0f18ba57c9) >> +>> endobj +4146 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 224.9723 221.0375 235.5026] +/Subtype /Link +/A << /S /GoTo /D (a00164_g41e616d3fcc17e0aabfe8ab45ef0d30f) >> +>> endobj +4147 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 186.1475 224.913 196.6778] +/Subtype /Link +/A << /S /GoTo /D (a00164_g0e0ea5f24b77f124ba33bcbc7ede5bfb) >> +>> endobj +4148 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 146.949 236.5493 157.853] +/Subtype /Link +/A << /S /GoTo /D (a00164_g2a939aa4fcffabbce1dc1f784a7e0ad3) >> +>> endobj +4149 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 108.4978 192.9132 119.0281] +/Subtype /Link +/A << /S /GoTo /D (a00164_g3caacabb2fe1c71921e1a471719ccbd2) >> +>> endobj +4127 0 obj << +/D [4125 0 R /XYZ 90 757.9346 null] +>> endobj +1074 0 obj << +/D [4125 0 R /XYZ 90 739.9346 null] +>> endobj +310 0 obj << +/D [4125 0 R /XYZ 90 739.9346 null] +>> endobj +4128 0 obj << +/D [4125 0 R /XYZ 90 716.7484 null] +>> endobj +4131 0 obj << +/D [4125 0 R /XYZ 90 481.4867 null] +>> endobj +4144 0 obj << +/D [4125 0 R /XYZ 90 282.3587 null] +>> endobj +4124 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4153 0 obj << +/Length 834 +/Filter /FlateDecode +>> +stream +x诃VMO跕禁W鴺H2;臊庳h應对7奝HLlh}寝点b#鍚摈y骓蹤籴!袕B-5"R徕>pE顥g>k耷裂)谛2玃咇m锳q&慶//'唓>潯勆a{魷,6$蓓-秔毵隡猬嬩6骚躄抰Q尖(`焇喷罥\玉l ;讣俻I`>0n-嗺A劉z?傦稰~鹨#愄蜳籱6@=0讓+dV蜩皧剢姠""aZ﨑擼 8蠾(E豻豨U∑怛圷P鱥0芍薧lAh蝒'v睌<姊散聫辫-X s截d郅G芞艷T(!#({I儙 乴?w悂V#9饬&篸"!4腄E hi諝接偵噐骵濎罴眡腆┬T/煌_*{HRg}娿o枼i藏獐,怔Mr\i獈ツH幾把o:锐懜U幏>*M朸┗y辌0]嚦铰忨轾mg*賣 f(1酲@#酫p&屟漜爘疍8:3n|P満A8P+Il+嚬硕粀="G鮖9k~z~算尻'鑘X5XP>C驪姼YN[o錞G楻_!жcp u!娢Q籍 5]▎局韊>衒|浭<引Qf;c涗Ot蟵/掘孥_胃万謌n孜~墚覷灊奈窸vw衮p嚀萈夎m:湴L肖3亦> endobj +4155 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 714.241 200.0962 724.7714] +/Subtype /Link +/A << /S /GoTo /D (a00164_g1d34be506a61db90dd7829117efdf8cf) >> +>> endobj +4156 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [172.012 675.0131 229.8943 685.9171] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) >> +>> endobj +4157 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [279.9163 675.0131 304.6036 685.9171] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4158 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 636.1588 208.3951 647.0628] +/Subtype /Link +/A << /S /GoTo /D (a00164_g9e6d2864f390a4ba1ac60dc65e2b9815) >> +>> endobj +4154 0 obj << +/D [4152 0 R /XYZ 90 757.9346 null] +>> endobj +4151 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4161 0 obj << +/Length 2081 +/Filter /FlateDecode +>> +stream +x诃Z[5~席罧"作KhYJi傽碕3齿ㄙd丧像岉x.a'3熛w|矽煦IH佱J(d椗阯倠wp q忕饇綴L<&0菻*嬇MmA$(∨ⅫmJ$澩LMO蟔隶繱俻s駆僵毇'徽楫椙鮪;鹀馼騮h漌侷bI滭.J痤#f(䝼chq7釘浬浬O罭鬆049A仞Gp圍镼槶jf侀岏tyx餡鮲礩<蜽瓒;鬃誐禑=蔚!!Q揁-噭閦D蛽旮K [uX碜>h`圗拱v纔-Mm缁jYq=饂尒麋f鏽o轁 *7噉F碄榟UHl\樍xz魐共正藿磒掱o.朑w<0驴%官细橆:o9B櫤灰?腑遁!e8鲕.袍拭3Ζ摘Z↗t1J爈枇t:J.H!虅父(Q#aC`,(XvQ & 痏擹假E┩=bQ蕏殉踍擵豁禯過A響\0*4TH`a:I5$) 皅殜 M貈$5%欁墀5儲,霈[5穋M崷靸FS1謮珕q攒I 癗bg埀?盥k +癸"i7噅辆l%dzQ楾0mw鮅 ==,9]:T^杇s)U&I(#壹&c1扡盒第鋛}W暬Sk媳荪SQ牬 擧$8飫~4N媑pJ5燚Fb%2陼鱧%燚=+逼V晚X塿Dk悝僼:珹3ìg垂p邯6j祊浨!]Bn/n嬾蹠O>K-XV绷3糬-蕃圮#4橊穝慧m奨6苪:晀傏0倯:$v襱dJ 裩rMk沔o-d 垢 籀J鬒n@麕庍6壿6%7烣赴*3jxNnd0%4on虥n媨宲觀綮v皖0眈5墍束@!B袾剖:喩三3F隺舱璣>9賘姿戗椪bz3#映r酕#輓guhguhgk宇栍闯7=C呌 谡M;犡)成骵=趰T3鵌鬶Wg畇=*萛B宨R4+%鑊m雙絔骺4咹搸e G玽r?X!堭/0'瞴魺VS寙!$> +汢"*Qh{<飱觞踛[項a3艑堥蓕?畅銍=ゎ鰿c関]C#坑=冽]整亼螥旫 9縠ndstream +endobj +4160 0 obj << +/Type /Page +/Contents 4161 0 R +/Resources 4159 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4074 0 R +/Annots [ 4164 0 R 4165 0 R 4167 0 R 4169 0 R 4170 0 R 4172 0 R 4173 0 R 4175 0 R 4176 0 R 4177 0 R 4178 0 R 4179 0 R 4180 0 R 4181 0 R ] +>> endobj +4164 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.5601 274.5352 659.7615] +/Subtype/Link/A<> +>> endobj +4165 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 611.1369 205.5653 619.9836] +/Subtype /Link +/A << /S /GoTo /D (a00182) >> +>> endobj +4167 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 517.644 202.5067 527.5717] +/Subtype /Link +/A << /S /GoTo /D (a00097) >> +>> endobj +4169 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 460.4808 309.3265 470.4085] +/Subtype /Link +/A << /S /GoTo /D (a00164_g5a5bfd7e9060903893481db90645187b) >> +>> endobj +4170 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 446.4691 213.038 457.373] +/Subtype /Link +/A << /S /GoTo /D (a00164_ge28f6cb60e86088d8886d0f804b4f37c) >> +>> endobj +4172 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 389.3059 210.2479 400.2098] +/Subtype /Link +/A << /S /GoTo /D (a00097) >> +>> endobj +4173 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [210.746 389.3059 288.0054 400.2098] +/Subtype /Link +/A << /S /GoTo /D (a00164_gdc5aec3587b2c55b714a6c2f37b56cba) >> +>> endobj +4175 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 332.5162 226.0986 343.0466] +/Subtype /Link +/A << /S /GoTo /D (a00164_gc4b119801e50cc1824498a1cdf9adc37) >> +>> endobj +4176 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [276.1106 332.5162 300.7979 343.0466] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4177 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 293.4938 220.0116 304.0242] +/Subtype /Link +/A << /S /GoTo /D (a00164_g6b942c1ef22f8cd1a726ef3364c9fbea) >> +>> endobj +4178 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 243.5125 215.05 254.0429] +/Subtype /Link +/A << /S /GoTo /D (a00164_g23705efb9077187881f094fc9be13bde) >> +>> endobj +4179 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 193.5312 209.501 204.0615] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf11d9915ec12a8cdd9fdcbb5e8fcd5c7) >> +>> endobj +4180 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 143.5499 205.0776 154.0802] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf8f12c820cc08da32aa62898bfc02db3) >> +>> endobj +4181 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 93.5686 192.9132 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00164_g3caacabb2fe1c71921e1a471719ccbd2) >> +>> endobj +4162 0 obj << +/D [4160 0 R /XYZ 90 757.9346 null] +>> endobj +1075 0 obj << +/D [4160 0 R /XYZ 90 739.9346 null] +>> endobj +314 0 obj << +/D [4160 0 R /XYZ 90 739.9346 null] +>> endobj +4163 0 obj << +/D [4160 0 R /XYZ 90 716.7106 null] +>> endobj +4166 0 obj << +/D [4160 0 R /XYZ 90 535.7017 null] +>> endobj +4168 0 obj << +/D [4160 0 R /XYZ 90 478.5385 null] +>> endobj +4171 0 obj << +/D [4160 0 R /XYZ 90 406.0564 null] +>> endobj +4174 0 obj << +/D [4160 0 R /XYZ 90 351.1766 null] +>> endobj +4159 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4185 0 obj << +/Length 1318 +/Filter /FlateDecode +>> +stream +x诘YMo6禁W 冕扶6I h货m籜8禸单詵w淊鷰,姟$婽 r%> 唣岶4$ Iiⅴ&)*Y&4Y犴 亻K溈?&W7,MR*儆蓚"癲饵ta伴%擊b|跟=.稕,/_Gd]线l禮=鷺=e)構,_Tp 奜?项'3帊VrU0O>}ι>烶耂#搊xA )Kv義s睗1侃'N淸礌n扠﹄ez&夷K&W p掙$ .邤淁v蟑ァ\蹃*拒#R騻ti糼@!獚I%柔凷E/彳K8喱郌$VO芼?8|奍烒hQ1 HJ昷=鎳*蠔5S嬽|邒BsB╅FQM鞼蟊艗徘忾侪鈗彩蕁(b狹猓E3;i爳6$\輤ú5:﹣斪爾Uへ郤5f]zk0敜涝X:>稙炤SzA}檠)'妀嫜"巠5'ヲ鸤靟榄=铡SP +9N'虐m!帚 +帍T玝9薽u櫷~ -<[敍挛攨E孩T冼+杒k*o~<c酹腭癜蒞漐w{=砋.+着r奥) 峺 +嚈#宩﹑璸玖@厠鴐*\孙)舊袤 溉讹岷粥cQ綮峨赽[瞊0iJ 侣 q(華噝琷 A鼿F樷bH"( 烽> 旔蟲龋楎癬梥唢;沊臮鳚 +N0靤呴7-|,虨蓥曝m瘐趄滜;:Iぁ"L朇EⅷZ?摚迸廟"猓C暖仢殗莚旧;诊犷嶷蕺诉觩夓柵寮礉隆1筝`仈&%"5H1(\"8XT0玖`"~链鼅縛诹L$虨荻`甓/燂蜨*呴r℉ ?k$嚧摝憵 +侒q汃8貭f> endobj +4187 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [172.012 702.9085 229.8943 713.8125] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) >> +>> endobj +4188 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [279.9163 702.9085 304.6036 713.8125] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4189 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 664.4278 200.0962 674.9582] +/Subtype /Link +/A << /S /GoTo /D (a00164_g1d34be506a61db90dd7829117efdf8cf) >> +>> endobj +4190 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 625.1999 208.3951 636.1039] +/Subtype /Link +/A << /S /GoTo /D (a00164_g9e6d2864f390a4ba1ac60dc65e2b9815) >> +>> endobj +4191 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 612.2485 226.5766 623.1524] +/Subtype /Link +/A << /S /GoTo /D (a00164_g4433d3af16ea083a81576d0f18ba57c9) >> +>> endobj +4192 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 573.7678 221.0375 584.2981] +/Subtype /Link +/A << /S /GoTo /D (a00164_g41e616d3fcc17e0aabfe8ab45ef0d30f) >> +>> endobj +4193 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 534.9135 224.913 545.4438] +/Subtype /Link +/A << /S /GoTo /D (a00164_g0e0ea5f24b77f124ba33bcbc7ede5bfb) >> +>> endobj +4194 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 495.6856 236.5493 506.5895] +/Subtype /Link +/A << /S /GoTo /D (a00164_g2a939aa4fcffabbce1dc1f784a7e0ad3) >> +>> endobj +4186 0 obj << +/D [4184 0 R /XYZ 90 757.9346 null] +>> endobj +4183 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4198 0 obj << +/Length 923 +/Filter /FlateDecode +>> +stream +x诘V遫6~譥!t/鰞; 6d)朼磊谻[ ,跙l贀鋟w擠G栘x0)榛锞;弴1釪% +┿lA肌護"?/棼b鴄蒈s5遵r2hd#彈3詒距枊dvWZ*!僴q_祢nuw萅l姚8旙O藝枨遒m疛 嵨褔O疕軨LXb萧 >抃鴩]>z{骈>∴妏t(结>户颟菸]輊q`9揃Qe礦逳& 36#┹绉丿~撒賨({蚂$喝jV鏲-\Z/ы寶|舒暓鋞帺.浪诰嗪_鱺7Q徥0A,盕` +D}6=孑p=~14l勛躴W‵B苅舁+瞌l=胗/覉失-魶⑻vuM嶀诈8岔+g~!啾>dOh惓M瓶秠鸊":綟>=wJ澳殝s7漥I抵阥U6@$)扒&煾(7aut9$#u沙T 礩!帝邿侍澀:p烰-?:Ζ3弒鴳s5碓v3隁_簥-h}榉擤渲}0.翈D|絪x59 9摼3墪/玮尯鉁sj[ 珍俵沄}% +墇磈石A_積骇04!C#氄"4d倐gM硹0N┼d杵2/)~摋y6~./~襦f漇匸.ny?攔莪謘甪噡0歂瘡_桵>):7N掺7<墧!endstream +endobj +4197 0 obj << +/Type /Page +/Contents 4198 0 R +/Resources 4196 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4195 0 R +/Annots [ 4201 0 R 4202 0 R 4204 0 R ] +>> endobj +4201 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4202 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 202.2478 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00183) >> +>> endobj +4204 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [187.2447 427.1275 226.8757 438.0314] +/Subtype /Link +/A << /S /GoTo /D (a00165_ge6f849e94cf6e214be8ffa9a548ecfcd) >> +>> endobj +4199 0 obj << +/D [4197 0 R /XYZ 90 757.9346 null] +>> endobj +1076 0 obj << +/D [4197 0 R /XYZ 90 739.9346 null] +>> endobj +318 0 obj << +/D [4197 0 R /XYZ 90 739.9346 null] +>> endobj +4200 0 obj << +/D [4197 0 R /XYZ 90 716.7484 null] +>> endobj +4203 0 obj << +/D [4197 0 R /XYZ 90 446.0774 null] +>> endobj +4196 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4208 0 obj << +/Length 1107 +/Filter /FlateDecode +>> +stream +x讠W]o6}鳢槞薿2唘鯍5k伄5皣Y墠8vf呻{)懖,手*J圇滬i&hb!裄藚J钵$zD)~煻客GW&朮臫2刊,(J$,/> 2e崎髎q5+蜉劼鴂'遌,蓑y1VdY惝V爰~鷲;鐩探*92>ody諕+闐3嶂蠕+.PkY4寚舲魆鬢cPm鑣^R揎=甙>胔瓒嗲軬焝2J瑪&胵1s #杂万2EK嬟,/草旯\m7o逄賟.刳芜円铌(旉讜濟y)筝絪$图鎒.3[绀-# P  74mbj3p%亐惒j備鹯馆]v)09gT{;n4褦藘祳~>7廢氉EuJ[#侹j紫慣瓑盳uぶ擆鬵Kv匮#[礶G枬eZyW (f赠5锐貧ェ0 肓!g公f_堩妺") 醜%Q钫籓忶蠳繭z賣贲 #Pb朗帎nj>舵鑹: +# &┢x +QA_6賨坷蜺80^<垤,_8n$訮瓅粜灐膓 ?gi欀声X铞Y汞'Z3%5D'y趢緉T豍F8屔x +俯壄w柋A 疋缘犜1oQy1s?S躷極梑i堨6嫢x洢雞づ*躢臔狦罳1A篓d.硗磒' 靌3檔`儥>藊若o若锼咓4"奾圏t~HFd咨鴆>?粆}鲺oQ胅"-菅P +bkU@&}'卹70霁&sA4螔&螼S爭芺O瞛鸫嵁$JH JT +瀸@[s0剳:VVy禢w钅摵椾.Z麿-魤蘖i.攺鋾椩;\<;m罊辤`兘s栺;肌w巟 $+貛堄=餋r"籊rⅥam霹X4r起酄乿r頁-宾辏8趢荺餈=%尟♂8辁隘哲齽=A鬓歪齁-*B僛(g韟Wx+耞(I"溨雦擄2躑B' 7鱺A.縟P蜉> endobj +4211 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4212 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 202.8057 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00184) >> +>> endobj +4214 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 515.2493 197.5356 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00079) >> +>> endobj +4216 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 458.7707 232.9533 469.3011] +/Subtype /Link +/A << /S /GoTo /D (a00165_g1dbc635a2924806f42d7e3273a6a69b5) >> +>> endobj +4218 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [187.2447 375.6421 226.8757 386.546] +/Subtype /Link +/A << /S /GoTo /D (a00165_ge6f849e94cf6e214be8ffa9a548ecfcd) >> +>> endobj +4209 0 obj << +/D [4207 0 R /XYZ 90 757.9346 null] +>> endobj +1077 0 obj << +/D [4207 0 R /XYZ 90 739.9346 null] +>> endobj +322 0 obj << +/D [4207 0 R /XYZ 90 739.9346 null] +>> endobj +4210 0 obj << +/D [4207 0 R /XYZ 90 716.7484 null] +>> endobj +4213 0 obj << +/D [4207 0 R /XYZ 90 534.1992 null] +>> endobj +4215 0 obj << +/D [4207 0 R /XYZ 90 477.3471 null] +>> endobj +4217 0 obj << +/D [4207 0 R /XYZ 90 394.592 null] +>> endobj +4206 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4222 0 obj << +/Length 1627 +/Filter /FlateDecode +>> +stream +x讠橸徾6呥+勪舿0肊軅"h,m夷A 胸!忞%3榀铳$蕯H*>虹鑯祼dL鉒r4薊都澿緙=!硐s鴠 +~[L灱:親 *才U]A)≠b鮵J剺桐N颼撱)A纲xUf肱蒡x[n拧痕叹.轑^.:6g涌'熆鈒檗L0bZ耢>`D处夙$~XO>L4?;>:#鴨诿床9:熗 苮Zl符'麇寰芡烚0暬'7嚸v厲勉}_^潥枦ei幏1"Hs^AU'#DZ濉Ju鍉公抖qP9暮l鰟揅鏢4l烩%3慍7sV4wUPa虪`0蟝鈞腹=zIFI芗S茌&,$専霁舛m醧蠼娴7-$馁[P3Cм/獢Hiㄙ徻=砙;表佖聧鞺6 +堼刖Z钛f」F*o[齵頦3N-I酓咇`//覯U秃裊|况* q佦翩лu珁镡氟够C縒驻砱0宧甚0膒鋂U授玣琎跙鯸蹔DB+蠹V>6缩q硢驯冖汫fosb7B67旀gンQ/9纣卯赲' 33$店漼儺羪澝hk T梳L⒇ +焻f\楳4  s蘨腻>pU鼠趤灲V簜写$`fQ1麭)鳔Cs-9(曦㏑緋A覺埦镢U{y.悿 滔煐V煀嵴51>,f毩2]键鰅F(>縓\跊(N樐灰q犿HHqp;損錣鞄 嗇室豤龈o囕伣g>{<哤7桥粡 8i蒁A( ;嘔剟-鏆b拉, <骅忹v繻纚鎐莄xuM寢o縨筑G+漢UJk=h~繣2\ 郌Q焽b惌, 9骅@廂v怾恵鎐 莄xu-潺禭1鄟@‐'z`U)sM摐魍 娃瘘S偀屐 +";Y抯择9醟9鱸訙#8'bxu-缢bs韈枅P'Z`U)o倛7`唾 罴)嶱>冘#v猕iG1豼7歛X找輺籩9x)4\:胥发劮逐垽x栩]It酎[*W鉱ei1G噋芊C禚巂39毛隸V>e( V時7O簶 t歪 G盶A 磿衠措;t蟶 鑨 痭wU^麤衪-T(e1"捝5P +Q啘孏灗\A尣暐)蕅邘搽;俽蟶 鍃 ゼ糩与* wUXU受躿)>~`艡,鲯逭q4o C/Y(傻:?栈側罔d杀u<崓劘=3姧w?肂74!|鄛~hX}*匴穥貔n椗z跛辺*@$槩凍c巑+`;tF<椾.剿扽~笛. LR4endstream +endobj +4221 0 obj << +/Type /Page +/Contents 4222 0 R +/Resources 4220 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4195 0 R +/Annots [ 4225 0 R 4226 0 R 4228 0 R 4229 0 R 4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R 4235 0 R 4236 0 R 4238 0 R 4239 0 R ] +>> endobj +4225 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.7618 250.6249 659.9632] +/Subtype/Link/A<> +>> endobj +4226 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 186.7561 620.3114] +/Subtype /Link +/A << /S /GoTo /D (a00185) >> +>> endobj +4228 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 447.7854 224.1764 457.713] +/Subtype /Link +/A << /S /GoTo /D (a00165_g7d7920c1e51cc4eef80206ebd6fee3f4) >> +>> endobj +4229 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 434.8339 220.9585 444.7616] +/Subtype /Link +/A << /S /GoTo /D (a00165_g8a645f8831837320c4e0c704e871abcf) >> +>> endobj +4230 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 421.8825 176.5052 431.8102] +/Subtype /Link +/A << /S /GoTo /D (a00165_g3212e70c55244608ac16316888c354f0) >> +>> endobj +4231 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 407.9548 190.8811 418.8588] +/Subtype /Link +/A << /S /GoTo /D (a00165_g71e1b022f7b7fa3a154f19372b239935) >> +>> endobj +4232 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 395.0034 188.1217 405.9073] +/Subtype /Link +/A << /S /GoTo /D (a00165_ge3f8f7deae69854853b0c8ebb82c380d) >> +>> endobj +4233 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 382.052 198.0741 392.9559] +/Subtype /Link +/A << /S /GoTo /D (a00165_g79f9a50c2cccb967d38a2eeb45d2fd75) >> +>> endobj +4234 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 369.1005 194.2087 380.0045] +/Subtype /Link +/A << /S /GoTo /D (a00165_gf7dd2757d1e766f65b01ba7c91c660a0) >> +>> endobj +4235 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 357.1253 188.6793 367.053] +/Subtype /Link +/A << /S /GoTo /D (a00165_g820fb27c50e7bb4ac6d9eae1b06630a5) >> +>> endobj +4236 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 344.1739 190.8912 354.1016] +/Subtype /Link +/A << /S /GoTo /D (a00165_g14e276fa8e765f774f4162619f1c8fc1) >> +>> endobj +4238 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 286.3455 190.1438 297.2494] +/Subtype /Link +/A << /S /GoTo /D (a00165_g648ddfb2dde2cc55034e4e0ea41cb6d1) >> +>> endobj +4239 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 273.3941 174.6619 284.298] +/Subtype /Link +/A << /S /GoTo /D (a00165_gc364305cee969a0be43c071722b136e6) >> +>> endobj +4223 0 obj << +/D [4221 0 R /XYZ 90 757.9346 null] +>> endobj +1078 0 obj << +/D [4221 0 R /XYZ 90 739.9346 null] +>> endobj +326 0 obj << +/D [4221 0 R /XYZ 90 739.9346 null] +>> endobj +4224 0 obj << +/D [4221 0 R /XYZ 90 716.7484 null] +>> endobj +4227 0 obj << +/D [4221 0 R /XYZ 90 465.759 null] +>> endobj +4237 0 obj << +/D [4221 0 R /XYZ 90 305.2954 null] +>> endobj +4220 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4243 0 obj << +/Length 1440 +/Filter /FlateDecode +>> +stream +x诃X蹘6}鱓閶 噖.姞 6 才m簅IPxmy-/[傥&%Q朌Yt欣皱铚醦x4"$怷歨〾錌%笸&xS?m^邖^緀6蹦*籩翣H,筟|j2e拵踪M汗:&篁谯l潠G襡歄缹禹躚移敒|净焦獵"擻 酂亚4Y`7#J52yJ繸杔F俼5)o T)俉*脩腈H佉*幆$b,1蓭棛1亰:=虗iQR]y=草"鈲筽<.\[蜍]|饉經?枃5 +娾<6輷n陯$孨7刏蕒鏏&*,c $%THY鍙囌.筷jeDs免5狦綑牃h囹腣/f*磴8]锼4濾.眧姧~ B諝玌'则鯿鈴~o勴熻 [5榏3 }6邠}趰 K3j8m5*詏 G砃lRΓk史 B 瑕峒u騅)墷.澄&z:kX1Q~U]l溗|"鋢穒;樰2す衇便5;铙鎆##XVj)Q瓵硭I荩b郯籦w鰹?腯呌&娈w釔胫钰詽@z歁)ō;豯鳻om< 筐pU[`,2|強孚+跧鹹夏0.春4 5>Gm7aB嬦4渊P居n9Ze' x嫦 紡观a研y>駻+f縄袏!+霭r踑#蘹T澍K;钭遟沃V攎+巛巽#yc,8v[述OJ璤"!郯?iK鞥3簋姇J?\<68kna*锥魁 :w銁梟k瑲h棵un\u`?絙鼕羊孮Z頃/' //O庯ㄐ轜鮱禁!輛36瘆h嶞A0^endstream +endobj +4242 0 obj << +/Type /Page +/Contents 4243 0 R +/Resources 4241 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4195 0 R +/Annots [ 4246 0 R 4247 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R ] +>> endobj +4246 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4247 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 190.781 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00187) >> +>> endobj +4249 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 515.6229 179.0853 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00159_gd58a6c7e62ae59bf7a016ded12ca2910) >> +>> endobj +4250 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.5282 515.6229 265.4205 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4251 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [304.8984 500.6286 338.7573 510.5338] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4252 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 476.7686 192.6345 487.2989] +/Subtype /Link +/A << /S /GoTo /D (a00159_gfe5e93119035e14cc485760a176249ba) >> +>> endobj +4253 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [221.0774 476.7686 278.9697 487.2989] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4254 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.8358 461.7743 391.6946 471.6795] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4255 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 437.5407 180.9085 448.4446] +/Subtype /Link +/A << /S /GoTo /D (a00159_gceb952d27de8125d5146ac0bee325b8f) >> +>> endobj +4256 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.3513 437.5407 267.2437 448.4446] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4257 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [397.2067 422.92 431.0655 432.8252] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4244 0 obj << +/D [4242 0 R /XYZ 90 757.9346 null] +>> endobj +1079 0 obj << +/D [4242 0 R /XYZ 90 739.9346 null] +>> endobj +330 0 obj << +/D [4242 0 R /XYZ 90 739.9346 null] +>> endobj +4245 0 obj << +/D [4242 0 R /XYZ 90 719.4886 null] +>> endobj +4248 0 obj << +/D [4242 0 R /XYZ 90 534.1992 null] +>> endobj +4241 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4261 0 obj << +/Length 1733 +/Filter /FlateDecode +>> +stream +x诃Y蹘8}锆埬K反m|繝誮埥兰B=5}a藒龞8砟帩闸y槫sRU>.扦鲤G + %2屗b節噔3bB毲sx>O'烻Sd$暸鮩eA$(∨蹶龜H=汼C櫄瀇O 迈朋酽梭盾~7鹸齤蜢亥mLK潺G\籛寴癣7ch睗p受蚮騨騡kP ,>:麭蒺(孷眨訄ㄙ渀導涻兔m菇檘Bψ4蠺* 2旜 癠 |$?3麳釚4卒羶#崶_3す鸣p皘H蠖5囿(鶚*H貚誂XZ E嬍ZKVBP1dB> U'柉'i薅N|u!S'i7划Nb- QTf嗭P9蘩毇嵼b[簻7潃贿澐"皾/來 窜靶袔c扅脏箯感酂鋾癥潦鑻褄筞n祯歮O硬l{粣庞{4'囋FG°+*嚍KcYy糩赩4稜2 .炶泑@bΥ办LI2^fJ喿蛿颳泯zvN&D舾漇兿y豰;5t醠佪64祮瀂 糢莌驢盕俽>6->鉍h7.泄rFs[朩W蟕J]蛹;(怘)l群忌f陈<於rq{(猛W ;T嶾S򰡼篴諰b跨*96->鉍h7踤JD光0川惥譶j&0屝蘤粴X彊=観し~9RRLX=朾潗V飣?B/臀殘樽觜|茳7q6Q[遁P 胓谕3g衜IOJ诉2丹>S 褹ハ擷110"態镴洹鱜鼴诋E^磄蠆U膞Q钍Z搈w蚌芣疾%rnnmG=⑼;臱6U8剣&<⒖ 庢頇箂蛬铱3罨endstream +endobj +4260 0 obj << +/Type /Page +/Contents 4261 0 R +/Resources 4259 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4195 0 R +/Annots [ 4264 0 R 4265 0 R 4267 0 R 4269 0 R 4270 0 R 4271 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R ] +>> endobj +4264 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4265 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 191.339 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00188) >> +>> endobj +4267 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 551.4743 196.4299 561.402] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4269 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 494.0195 227.9818 504.5498] +/Subtype /Link +/A << /S /GoTo /D (a00159_ga680bc3f3a1a8a6aec20fe729d138cb8) >> +>> endobj +4270 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 481.068 223.0005 491.5984] +/Subtype /Link +/A << /S /GoTo /D (a00159_g720ac440c7b24bdd07c53ba146e36fb2) >> +>> endobj +4271 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 468.1166 178.1689 478.6469] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4273 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 385.3616 179.0853 395.8919] +/Subtype /Link +/A << /S /GoTo /D (a00159_gd58a6c7e62ae59bf7a016ded12ca2910) >> +>> endobj +4274 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.5282 385.3616 265.4205 395.8919] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4275 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [304.8984 370.3672 338.7573 380.2725] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4276 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 346.5073 192.6345 357.0376] +/Subtype /Link +/A << /S /GoTo /D (a00159_gfe5e93119035e14cc485760a176249ba) >> +>> endobj +4277 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [221.0774 346.5073 278.9697 357.0376] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4278 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.8358 331.5129 391.6946 341.4182] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4279 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 307.2794 180.9085 318.1833] +/Subtype /Link +/A << /S /GoTo /D (a00159_gceb952d27de8125d5146ac0bee325b8f) >> +>> endobj +4280 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.3513 307.2794 267.2437 318.1833] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4281 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [397.2067 292.6586 431.0655 302.5639] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4262 0 obj << +/D [4260 0 R /XYZ 90 757.9346 null] +>> endobj +1080 0 obj << +/D [4260 0 R /XYZ 90 739.9346 null] +>> endobj +334 0 obj << +/D [4260 0 R /XYZ 90 739.9346 null] +>> endobj +4263 0 obj << +/D [4260 0 R /XYZ 90 719.4886 null] +>> endobj +4266 0 obj << +/D [4260 0 R /XYZ 90 569.448 null] +>> endobj +4268 0 obj << +/D [4260 0 R /XYZ 90 512.5958 null] +>> endobj +4272 0 obj << +/D [4260 0 R /XYZ 90 403.9379 null] +>> endobj +4259 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4285 0 obj << +/Length 1524 +/Filter /FlateDecode +>> +stream +x讠Xmo6_!t@a3憿l薑.-吨輻TI秴蕭'赏奱}蚀(K羻E熁=w<yP!/刕@焬駈綅榽1Czy)謼独/- 3o祅#飙掲s_,1咉C犊茹e$U}Jl章m枾j&]д駓Z膔失  W/g7m&% I+䴗紻橕r 9 ( 狈淁槝梶鰒鰗嚕 C轗D嗇E>3伉媴麃.傪?+淭剶惰飧%8鍳t4⺷贒)QP譱W倬墒B+*G*溁>Owi袲瓅 P3/(W酶,毈8碆禋誇Y豯7项[7誎_樜|愔显:崥C暈*菽1橲塿:v団凉<6vY>S0`=S镇g蠈~堤6;蘤顿4 fTgq 甏o 鯟0g闱諭国Ow绚杞D訞bQやj 熛逧"丛搆氾r鱲g瓥4镥囿H4?捽中&垳xqu#.w{懥曋2泤w2]" y枦拟綣,翊 ,>纶_箆1!螷)再θ妽z輻Y绚昢|虤┐栻サ^o謂嵥UBn_I囕庠+詚祻&yT,敢鮃 + 亪n埼K!岯8邥?9蕣uY碲爙+ 炞j瓟凍溴 )鉉G'韖H(銈\淢鍾穋ioqs蒃m沠yq!8糙\擡0硸.鵊k癿vy遧qB"?ujv/:S砷 .B$. 4妸虾毞$搶鷴%噧產隦囻勜P谰,N藑j臸 O拥UVOv伎测?w*Q!qFjJ祪譃<ぐ愇?貘A=^炕# D寽%0F#6M1契v磅>'薀B乹3\M77o呓簈j9?僋jB箣vJ倎`9d>?lK`,谾l:豤璥忞韨m雧B癘?%劂f8:豲oD}4qFjJ硟6愵壘6W%厇衈V闡4r~]*倉D]9??亳0闱q6x巖步G?O9K`宺Fl歳c-蕧腠(g雧錘?卹鉬8笟r7噉>qFjJ硟 摧?篛搕=詡b熷-0聫Nl忺樞k鴔⒎Q~v?幚y%叻vS H@蘔繝q?鼄P霈=O(#?e穬玓趪匹擑)泩掑C襠痣 +l郎讙亱-坄鹷 翤pNZ'L-Q朐嫶HⅤ ^/蝺~AX?%&7 !觃@驌葇額右@ ~)I孇Y蔬峣柱 R,邎endstream +endobj +4284 0 obj << +/Type /Page +/Contents 4285 0 R +/Resources 4283 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4298 0 R +/Annots [ 4288 0 R 4289 0 R 4290 0 R 4292 0 R 4293 0 R 4294 0 R 4295 0 R 4297 0 R ] +>> endobj +4288 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4289 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [294.3312 566.4382 625.0908 576.7194] +/Subtype/Link/A<> +>> endobj +4290 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 532.6241 218.2873 541.4707] +/Subtype /Link +/A << /S /GoTo /D (a00190) >> +>> endobj +4292 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 474.0882 185.352 484.6185] +/Subtype /Link +/A << /S /GoTo /D (a00155_g2c1bb4fa6d7a6ff951a41c73fc721109) >> +>> endobj +4293 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 461.1368 205.845 471.6671] +/Subtype /Link +/A << /S /GoTo /D (a00155_g1ec8b8f4710dce1fa7fb87d3a31541ae) >> +>> endobj +4294 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 448.1853 183.1503 458.7157] +/Subtype /Link +/A << /S /GoTo /D (a00155_gd8eec328a4868d767f0c00c8d1c6cfc1) >> +>> endobj +4295 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 435.2339 185.91 445.7642] +/Subtype /Link +/A << /S /GoTo /D (a00155_gca51ceb2f5d855dfde55bcedf8d3b92d) >> +>> endobj +4297 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.7556 378.0081 190.6918 388.9121] +/Subtype /Link +/A << /S /GoTo /D (a00155_g2bdc4b7b4038454a79f1b2a94a6d2a98) >> +>> endobj +4286 0 obj << +/D [4284 0 R /XYZ 90 757.9346 null] +>> endobj +1081 0 obj << +/D [4284 0 R /XYZ 90 739.9346 null] +>> endobj +338 0 obj << +/D [4284 0 R /XYZ 90 739.9346 null] +>> endobj +4287 0 obj << +/D [4284 0 R /XYZ 90 716.7484 null] +>> endobj +4291 0 obj << +/D [4284 0 R /XYZ 90 492.6645 null] +>> endobj +4296 0 obj << +/D [4284 0 R /XYZ 90 394.6746 null] +>> endobj +4283 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4302 0 obj << +/Length 1578 +/Filter /FlateDecode +>> +stream +x讠X[o6~鳢0皣fx%輪mI枝[嫮癜嚩0Y兜豓λ躟摺H蚀(K"旸~哚9i1d獗/|2顛爿徸悬zDt 鷊读忬颜O4(舁7灟j A 蠗'那 )'正*饎 琟~J穳z煌鈐楈栓L除趔鑞扌j髨$齥赳3/粱#孹堮>0"aH腔|lG_誕铓 瑊v#hzf氆@3岏煰恶8糀涼?$$煉`掛鉊NP! +Q#Cd%0 幦坔燠iヽq>汬 qた÷惯=o揷dkl,幎5析e函j5=F卆4珍>a佱忚6@桒礍 L毂澄m濯* F QO韲)蠾&睡圮S3Jv;'L裫鷈从 OS'啥P !鞶臋逭>q\鮹劸譺Uu?嵧巯栛fD囒烅秲,埨盹4.P懘}薒欐I臝%S"&_I\罐D阺U韈>鍔l9L L$疉$镽縦?y凂鮐g1[綥=1A"dAW1@毊覍[I貴qi#儯q<9Q鷝4%<瑅详m欐I\n_訵7Ys瞖Jf5隙銾\V1*猉椱H筏鷶尻y谸,]IY爁&>钀sK~9釙m廦瀏uk#睮)艙縎9?i笔碀z{Hwf貄闈色l嵆<5頁硠>凨踺\w鞆-L,r穽莶aI0l黍觋p8爔揊Z Dm緿Y綟沼.z躛麡!伢C]>a嗸悍瑀X焓梪\畮罖況穖蠔s8嘮q:鏥慾:f薢砮!bAㄤ{ 羣w薚?e)橠圓:⒃奕畖璵>貃幈熧:Wzg0诘63&郳r闔籿zM遥畠 瑍兩8偼溭丩凋视\x鰧it砬l?庠凓霝鋺 +6過破j!黾S薤杬9鲪O}"?/ c?鋯+軽,~筜<1靠y硏砐8騹茗泽"恋 r +孪g ab(C苐8C`_嗿y 偌d鑴鼟 趸徉J7 ?黠镧讌"`瑔4U.瑣O=綰k +y'渠爵k祺衁娠%mro慯恴淁捥鼹蠪誽p黟;穌s 铦}c韵靈uソ9誝鑃何3酎瓈m'c6瑘>FK&l DqB~*pp.:EDp2c5撵 豀钸-0濟`~Jz^朅>屬>-}趔6y/星 %w昧怔竰鄣]剟0VCZ><鰠喠>跬>熂<'薲誹餭>Cg貅埬X j(憕R洿T3T雪嗲鹺o奙枟n`z湓〕瞚帖]sP/剠KO耡羟僫藕蟸鴫'u[:!纈喵y(鬉P05Fa牸r <}U礮脧<*蹢掞趟[y+SB_SvM鯀3咆So+蒈 7訌/鎊:qnゅU眖蛫t>endstream +endobj +4301 0 obj << +/Type /Page +/Contents 4302 0 R +/Resources 4300 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4298 0 R +/Annots [ 4305 0 R 4306 0 R 4307 0 R 4309 0 R 4310 0 R 4311 0 R 4312 0 R 4313 0 R 4315 0 R ] +>> endobj +4305 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4306 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [89.0037 554.483 445.4449 564.3808] +/Subtype/Link/A<> +>> endobj +4307 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 538.2933 203.3535 547.1399] +/Subtype /Link +/A << /S /GoTo /D (a00191) >> +>> endobj +4309 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 480.3601 235.723 490.2877] +/Subtype /Link +/A << /S /GoTo /D (a00155_g44311ecc30759ca38b4069182247bdae) >> +>> endobj +4310 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 466.806 185.352 477.3363] +/Subtype /Link +/A << /S /GoTo /D (a00155_g2c1bb4fa6d7a6ff951a41c73fc721109) >> +>> endobj +4311 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 453.8545 205.845 464.3849] +/Subtype /Link +/A << /S /GoTo /D (a00155_g1ec8b8f4710dce1fa7fb87d3a31541ae) >> +>> endobj +4312 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 440.9031 183.1503 451.4334] +/Subtype /Link +/A << /S /GoTo /D (a00155_gd8eec328a4868d767f0c00c8d1c6cfc1) >> +>> endobj +4313 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 427.9517 185.91 438.482] +/Subtype /Link +/A << /S /GoTo /D (a00155_gca51ceb2f5d855dfde55bcedf8d3b92d) >> +>> endobj +4315 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.1599 370.7259 224.0961 381.6298] +/Subtype /Link +/A << /S /GoTo /D (a00155_g3983e0c026396d5c4506779d770007ba) >> +>> endobj +4303 0 obj << +/D [4301 0 R /XYZ 90 757.9346 null] +>> endobj +1082 0 obj << +/D [4301 0 R /XYZ 90 739.9346 null] +>> endobj +342 0 obj << +/D [4301 0 R /XYZ 90 739.9346 null] +>> endobj +4304 0 obj << +/D [4301 0 R /XYZ 90 716.7484 null] +>> endobj +4308 0 obj << +/D [4301 0 R /XYZ 90 498.3337 null] +>> endobj +4314 0 obj << +/D [4301 0 R /XYZ 90 387.3924 null] +>> endobj +4300 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4319 0 obj << +/Length 637 +/Filter /FlateDecode +>> +stream +x讠UKo覢钧W>x3雧E*( A森П8%N增叱k&nl +!鏇o;蚂坅D E $蒞#扶"澸x?峃涎C岲I朅H隭SdI妭呕蟒词椴蹪桿循畩E盜@荅澔#脥圓Ar3綄>L魑6%8卓㈦F鎂鉫(7Z籥孉矈2鋋SE撸o{烆5 Q2jO06f諒 md%P#DKiQ()x页b;矻髱戡h騇y-椎'饨;'詔<熥觎騯-胼68籞PZ橸繖/园础宷%C*y椄.讻杀o嫛#检|褶0Epq`k菹g+熆]}媼谐朒3.l嚧VR暍赬午R浑;V焭矁艌l贄=`vfV鲔μ荶03T/鴲往3襜)園夦=趡p瘸cX梞_秹.;闍h- 憖TH嬲猾铜荺跛餴違^М}搩Zr蔖#莔P;`s~┫_恳尃l超E*爰谕砑愽蔁Ty<斲|I'c⺋qf]蚩哾;榈5廄G.硇:藹84蔈Q涃6 ┬_骡2稂 騃鳣 c瞇-駔憧縵4趵烵%焠孃8=n倧溏7駉偄endstream +endobj +4318 0 obj << +/Type /Page +/Contents 4319 0 R +/Resources 4317 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4298 0 R +/Annots [ 4322 0 R 4323 0 R ] +>> endobj +4322 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.7618 250.6249 659.9632] +/Subtype/Link/A<> +>> endobj +4323 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 611.4648 174.0239 620.3114] +/Subtype /Link +/A << /S /GoTo /D (a00192) >> +>> endobj +4320 0 obj << +/D [4318 0 R /XYZ 90 757.9346 null] +>> endobj +1083 0 obj << +/D [4318 0 R /XYZ 90 739.9346 null] +>> endobj +346 0 obj << +/D [4318 0 R /XYZ 90 739.9346 null] +>> endobj +4321 0 obj << +/D [4318 0 R /XYZ 90 716.7484 null] +>> endobj +4317 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4327 0 obj << +/Length 2258 +/Filter /FlateDecode +>> +stream +x诃Z]s鄹}庄徐綡3橬靌溳&[[}谳(mkV朶塲汘鷁$纕=~0%瀞q乻!)?25x獎B唓9]?M痿緙?!晚躝剙7松铷d$曈鍈 斝閞笏(:_PC櫄漮~咾乬狷廨vW訵W圂貤玶{叵[~榎/絣昤扻N~ O7輫 F蘦1 +0"菩橛凷>&w摽{烔F魼_a#򩅯廈kU:(/苮v>饇:G忀戚髋qN衄丿 鄹殨 #D +Y丹L*蠆颱Q畝i愉8瓘踘% bA-*敩x~>蕛 iN瓞(k嗇鏊qu黇x,Vc+P7鵝 L礆Jo_h⑩痢 聵椑p亂咫9垷饲民UW沗$-頠=阛vVH&.l朁f踉漩集3;展%$xZR臋T=蹒(T6慀v磉ь昵 l鱀O2 ;b 炜灦:軽(7HR-觟蟥X空饦完-坧擳!I鑅a囍~[ *盂}8洧T +蠰%翋:x{泺 n棉w枧抻N梥kW迬RK;&-赼并ㄉ[孛 阖蜈遫麟輞5DB晁峁D忂Y媵塌譙hGQ魈猏=qW想騖W㏒O獟0bpZ}迵/Fb問馾=(q 鶻(lF6菝s謅媠X'&訊v爩j棲i魻[櫾H缕5D'荜aV\浗}闁V碥,5胘愚5~?镒v%1lp[F`疳5*IIi吾柗x@橋xZ讻<狎桒洤脠x/F炕䎬O槫撪Q鯓m仃 伥{|.倛71 昔縂鍎#禶B呃9杠鹍%鱆cJ燬暲联JP7梡唌 {J疟x勐fH5w识柗m@槻mZ综6a蹡郐脠x鄱齶芳嵡/CX闷1徥D ZF:囲屚伹g#栩[r8頟9釄-邦<J硌 +Vb淲Ct芦嘱j3垲匣茛,嶰埤猼驱鎣0'b6鑖 +沶偷|7S)慥:诽霭瑳C聞3何-菁涆#軠 #饨根请圩sB萳i螾?蓥纤夾g俦愂婫e娰铜PllJ<>A梬熊 c皮涱Q針-0鰿/帿畋W昭鯟音 Ci2絻嬴捋垃浟釛壓菌-{椷蜅甛渱嶝o巾6(P厡柟搣厐0U液(労#夿K|LQH馸娐蹮>輂荎d仒44徥惹l肒s崵杬l<>A7/P3Mwp臇蹕踋鋓v圢芰圯狒(K甠墓&|櫋坠杣nH榩nF9伐泈n[|剆3aD甾^烤zc{飠岉[蒤xT&垬mx}螑`3噜Ykbq镽0斡韛n臇3/Q睾3o圢樧矛?惶淑}馆u总q='钶3蹞洿w籄oQ约尫LU污桏v@橋vZ讃;犴桒o坸坜柩aSY2晧!f6L`Lp66 煃犓沺7F篓LPN端,妥I3(3fづt殊6h耒七囍膤z.諿;j較|m顝珃.鞡v{胒囶紝 A宍濗簝褰炛鮚uGx%>齐0"迡庄衜 浗:﨧宩)椁xT&殬mxB'H1=6炗锊&,荮笔篡[nB71>r:縛No@瓀cv毗另0~"吭騫拯8鰑u w榰秶骾-|踗礎}o)擔W姙Db戸qsU 4> endobj +4330 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.6594 250.6249 657.8608] +/Subtype/Link/A<> +>> endobj +4331 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.2769 190.0737 618.1808] +/Subtype /Link +/A << /S /GoTo /D (a00194) >> +>> endobj +4333 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 515.1065 181.8351 526.0104] +/Subtype /Link +/A << /S /GoTo /D (a00083) >> +>> endobj +4334 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 502.1362 163.7728 513.0401] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4336 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 419.2928 204.7292 430.1968] +/Subtype /Link +/A << /S /GoTo /D (a00158_g26ae707402e494f3895a9f012a93ea29) >> +>> endobj +4337 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [206.0542 419.2928 231.2894 430.1968] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4338 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 380.401 215.2497 391.3049] +/Subtype /Link +/A << /S /GoTo /D (a00158_g84901a5aa60040e96d272a69977edd22) >> +>> endobj +4339 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [216.5747 380.401 241.8099 391.3049] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4340 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 341.5091 210.8263 352.413] +/Subtype /Link +/A << /S /GoTo /D (a00158_g70d236d1cf34b4e21836edda60247b70) >> +>> endobj +4341 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.1513 341.5091 237.3865 352.413] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4342 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 302.6172 234.079 313.5211] +/Subtype /Link +/A << /S /GoTo /D (a00158_gb0ad55aa96dd1d200cd0fc5a99f6a4f7) >> +>> endobj +4343 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [235.404 302.6172 260.6392 313.5211] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4344 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 263.7253 274.846 274.6292] +/Subtype /Link +/A << /S /GoTo /D (a00158_g10d9a9201cba1a6db623284c475c6cea) >> +>> endobj +4345 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [276.171 263.7253 301.4062 274.6292] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4346 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 224.8334 216.3655 235.7373] +/Subtype /Link +/A << /S /GoTo /D (a00158_g5d56800f82bfc7bbf53bb4a659589812) >> +>> endobj +4347 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [217.6905 224.8334 242.9257 235.7373] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4348 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 185.9415 231.2097 196.8454] +/Subtype /Link +/A << /S /GoTo /D (a00158_gd895ab98c54d9966ff554aa873151751) >> +>> endobj +4349 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [232.5347 185.9415 257.7699 196.8454] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4350 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 147.0496 225.0331 157.9535] +/Subtype /Link +/A << /S /GoTo /D (a00158_gb5d9c0becf7cb32d0aaef466839dd92e) >> +>> endobj +4351 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [226.3581 147.0496 251.5933 157.9535] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4352 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 108.1577 229.4168 119.0617] +/Subtype /Link +/A << /S /GoTo /D (a00158_g4ab2de595d36e9e55dd61f6ecd139162) >> +>> endobj +4353 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [230.7417 108.1577 255.9769 119.0617] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4328 0 obj << +/D [4326 0 R /XYZ 90 757.9346 null] +>> endobj +1084 0 obj << +/D [4326 0 R /XYZ 90 739.9346 null] +>> endobj +350 0 obj << +/D [4326 0 R /XYZ 90 739.9346 null] +>> endobj +4329 0 obj << +/D [4326 0 R /XYZ 90 716.74 null] +>> endobj +4332 0 obj << +/D [4326 0 R /XYZ 90 534.0752 null] +>> endobj +4335 0 obj << +/D [4326 0 R /XYZ 90 438.2616 null] +>> endobj +4325 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4357 0 obj << +/Length 1660 +/Filter /FlateDecode +>> +stream +x诘Zk7秊_1U6泖僶斴)PHEViv枍X毻轿匚d滖礫!懬溰s|晴匚哢恃(C湊篫|殃=箭d穆)\煻?蜦胃q氹jv但Q滖jv&S鴑璃埘筺8[拊统W鮑綑0;甒 栄啅搘厂SY驍刑5.A嬗%耏U}0鐇鮭$箞/nF疓喀:蛥帊RREi普e`f9q娚恟趈沨祶QMぐ睯0呒窚玭匫q%獀羂UDa糒G>潺霾~K)_乖膒:濑益}兰j藞xLFV姿x陪/N?焨u(蕌 叞缯v艇婃紟XN?酫莺^廖-!哲"C(8單騳譒tC9#鄆絚W床喇孱秙W澼蹯栛&蹲! >m&R嵶5td麻勓q烬~"轼賌o&聦膣%僾0f探[ @-c'j靨羵辢^茇囦實热觐嶟嬜-aV +%谁H(DC^逘V(Xv!酫莺謳(42魣聢砵樈C8鏱樈坭偨坛?綴[蠇樥e螭鰲hP減-潺D僷D繤I唨聝a_當 E -┬f +E 莳I句Ju叛'P9课朕`藎c魸獏E+:謓-4$B蹃  <鮅礁7>靀箮V__ 蓢mq&垽庉徟)%R5[墥貈m}B".o罦6o瘗edu鱒~倪繥曝x6q瀎6`睦AB磀祕/虷xT@穘魁洕迦# +#为a 牞" 3,阼B$豱p]+镬 唶┥曾s筲r p=6無6丝霕!)蔋戴J3場f跴垇Cc燷o寔^<"#弫7麝样焘风丑g荖S霨B!B騤 mE拢 +簎鸆繮BF@m窎g裢b胶\n楇U1@稸NL簲嬲紮8>炃睚輏患9皐#$聉s匪寏汣J正販sbd硊(<聀浄 +杔^鍹6omn笅.;摋Et篪歆W-緬処耸軭(DH^涫⿻趬凣t膂涇R槤 g闸系眸迴銞踌搌>};0)ā KxDw^贩a!筧 g遮[g{嵻Sx󊲄呩綁xLbVw讻m苚Q"3)0脂ZlL楳~z缹歾蝪D9刿M.╂惞焠麕rW%葧_7涗 +05顽晤V 邵# +d7③BD'%FPoa1勂圃E軄;/槽 iX蓹,抒D:jpyv3T^熔亵耾謔闡&B妍朠鐖2佥儵x 麁E$ Q\{繥<#痆8蔄$&к勈"#酛玭8zY k[纁C详6籱獝F淯;批攢欔)擱"吗(17ro泈q=咪鰢毛涠蜜o駡du嚌$嚸X炠)唘!0 f&擫~OmE#:蚝3]:"`,?俽趲g鴯呕藅\<娑 喠8嘍覬S ;Oo(D缈p ? + "夹'酹尢份飍~塐烔輂x義x箈萯 +6m簓v'鍅帊/酂_浨擋棷矬鮅1q?*騛!endstream +endobj +4356 0 obj << +/Type /Page +/Contents 4357 0 R +/Resources 4355 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4298 0 R +/Annots [ 4359 0 R 4360 0 R 4361 0 R 4362 0 R 4363 0 R 4364 0 R 4365 0 R 4366 0 R 4367 0 R 4368 0 R 4369 0 R 4370 0 R 4371 0 R 4372 0 R 4374 0 R 4375 0 R 4376 0 R 4377 0 R 4378 0 R 4379 0 R ] +>> endobj +4359 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 713.8674 207.4989 724.7714] +/Subtype /Link +/A << /S /GoTo /D (a00158_gfa11b2a1faf395ae2a6626e01c482d5d) >> +>> endobj +4360 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [208.8238 713.8674 234.059 724.7714] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4361 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 675.0131 244.0317 685.9171] +/Subtype /Link +/A << /S /GoTo /D (a00158_gc7cc1dba1819f7fcdaa9ff9eed5a08f4) >> +>> endobj +4362 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [245.3566 675.0131 270.5918 685.9171] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4363 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 636.1588 205.2872 647.0628] +/Subtype /Link +/A << /S /GoTo /D (a00158_g4a264bb64ae706d53f572b1d9e4037a2) >> +>> endobj +4364 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [206.6122 636.1588 231.8474 647.0628] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4365 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 597.3045 232.7343 608.2085] +/Subtype /Link +/A << /S /GoTo /D (a00158_g55ce98ea4d6f22e9d5068b904d4d2447) >> +>> endobj +4366 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [234.0593 597.3045 259.2945 608.2085] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4367 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 558.4502 244.4801 569.3542] +/Subtype /Link +/A << /S /GoTo /D (a00158_g2ebfe5c8a7f3173714efdf2df74fc392) >> +>> endobj +4368 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [245.805 558.4502 271.0402 569.3542] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4369 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.8747 519.5959 255.1444 530.4999] +/Subtype /Link +/A << /S /GoTo /D (a00158_ga87ff36af81990e6ffe20d76d5e4606f) >> +>> endobj +4370 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [256.4694 519.5959 281.7046 530.4999] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4371 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [432.9613 519.5959 458.1965 530.4999] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4372 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [474.7532 519.5959 484.4966 530.4999] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4374 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 450.7886 138.5977 461.6925] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4375 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 450.7886 198.084 461.6925] +/Subtype /Link +/A << /S /GoTo /D (a00158_g3178402dd725776415bf9745e7bf92ba) >> +>> endobj +4376 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [226.5269 450.7886 251.7621 461.6925] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4377 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [257.2416 450.7886 282.4768 461.6925] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4378 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 437.8372 196.7092 448.7411] +/Subtype /Link +/A << /S /GoTo /D (a00158_g3b19f65e48079d8105be2a99b5b4b2ae) >> +>> endobj +4379 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [225.1521 437.8372 250.3873 448.7411] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4358 0 obj << +/D [4356 0 R /XYZ 90 757.9346 null] +>> endobj +4373 0 obj << +/D [4356 0 R /XYZ 90 469.7385 null] +>> endobj +4355 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4382 0 obj << +/Length 1695 +/Filter /FlateDecode +>> +stream +x诃Y]徲F}席班%憵a?PU 勔匱<Bn廨嵢&勰タ咀銓=鰧K>$焥缥絞甤抈#壛 +芿埠涏|B戬琊<]N=&1菻*撳u 斝d箏?%娤嬖PΖkx+饠 \統顿f栈孆阾楉4哽w硰藯撍e#[G%$呰_擏q矄鑎N0bF嬩 |缊C摶 ~豊轓~ox/ '隷﨏眚(琕U堃贉`導輛W&晃3ⅶ賜+( 2B敂怰F狳L塇Mz戝)0$e钦asoSD躺<餚亜やy}冂鰫ルcu額5IF,k0*嵞傯嫒傛.石m 8儓0+#z2 N斧M0E奞oP=阯&VH&蝜:将髕趠<投*弰8WK8P)錟?z*叴Qj貂缒钧 踍秚闽構R鉬uD乾 I猠8m 首o-躦+)9柌騴/虞,歇潢租[/|"4b@Sps]卂|u俯1o荦辐箋A晓{糆tesz 酴呾D协;媻閦l.鑞鮘[F 憸椚嚊輏{Z僸H椠簘0#*U礐i濾i~NT偻鼻FL洼5杽扌S燭 WQ琚燽儕閭,e[鱔SfN +;拭Ee癖<蕺<}誠EVnQ=絾M酛罊P地㈣畉基g锠鋅#蓪躠蒯葆犫y#簐嘯讜x瘟%R昕->忌 勉-徱濮耪bM 瀒"皑槾荲f 祀J8T絰嫃F绣╬Y稥臫=秡菽8宎渁d L巐O酻喙.N4↘^0嚂裧襐椪3\m觠瑲罖  抌刌鸃 闋鸐)償T>hW埕悶腺tW張k鲚D4冾钚愧T<籆D缀CK7m 勉a湾 o: 芔F9hPq熗.剿>ュs 5cpPl擗歵褋苅`缏1u妔](GB幐R 鲌玫島Qm睋瘉舓! 誺X珐mWwDm纺窃v8 彿W浓0彜愧b坂裧耑櫻鴋]撖b4:碱Q踬bG5QeF}.:辛 涕啖/玽蚾7<=鋍;谵7./账鮥穜n韔涊M_鼈j批圾I﹉/X/\聙_Dt璤磘銅0<挹/..e IE艛=夺Av +>z崰;<(k%coQ1U-p搲)igp+jT*2;廅彛2壈絻爥$娙焠鳙:/&棄4-,E-"▁秷埉祱杗"阝#,"喦[[幕鷇秉羟誶袷;d)C儔撗"Q鴏CvA┈頓G妗罣#栩 孋 Y稥臫=禕鯂W杭G  莡爧H硙8僐箣-郾|w倝`蹓篂戋7僃B8FK鮙f7$F柏铮 ,摒aㄡ煤M没#%>︶胊x糬每{眡u7瀫 +"湆壜gnx嵓-磠墡9嘮]"楿ud郁:靣xe`#卉A嚭苈苪鶙坻q榉v忓沔>0鎪)菒UR涁7?f.崲!尯髨DF1] nQ)(怜饄端inG泚哽洍批OB隬鼧睬磣藪踺諏聽u∕詛瘙鏦7欦Ka$軉鎑開憾辬endstream +endobj +4381 0 obj << +/Type /Page +/Contents 4382 0 R +/Resources 4380 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4298 0 R +/Annots [ 4385 0 R 4386 0 R 4388 0 R 4390 0 R 4391 0 R 4393 0 R 4394 0 R 4395 0 R 4396 0 R 4397 0 R 4399 0 R 4400 0 R 4401 0 R 4402 0 R ] +>> endobj +4385 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 630.2193 250.6249 651.4207] +/Subtype/Link/A<> +>> endobj +4386 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 596.8117 174.5819 607.7156] +/Subtype /Link +/A << /S /GoTo /D (a00195) >> +>> endobj +4388 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 512.3371 148.2809 522.1152] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4390 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 445.4868 184.2462 456.3907] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge6bae7dc0225468c8a5ac269df549892) >> +>> endobj +4391 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [185.5712 445.4868 195.3146 456.3907] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4393 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 350.0315 204.7293 360.9354] +/Subtype /Link +/A << /S /GoTo /D (a00142_g3d4c8bd4aada659eb34f5d2ffd3e7901) >> +>> endobj +4394 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 305.7728 194.7667 316.6767] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +4395 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [196.0917 305.7728 205.835 316.6767] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4396 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 261.5141 184.8042 272.418] +/Subtype /Link +/A << /S /GoTo /D (a00142_g7b04a0035bef29d905496c23bae066d2) >> +>> endobj +4397 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [186.1292 261.5141 195.8725 272.418] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4399 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 166.0587 223.997 176.9627] +/Subtype /Link +/A << /S /GoTo /D (a00142_g99e43010ec61327164466aa2d902de45) >> +>> endobj +4400 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [225.322 166.0587 235.0654 176.9627] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4401 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 121.8 226.2087 132.704] +/Subtype /Link +/A << /S /GoTo /D (a00142_gad14bbbf092b90aa0a5a4f9169504a8d) >> +>> endobj +4402 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [227.5337 121.8 237.2771 132.704] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4383 0 obj << +/D [4381 0 R /XYZ 90 757.9346 null] +>> endobj +1085 0 obj << +/D [4381 0 R /XYZ 90 739.9346 null] +>> endobj +354 0 obj << +/D [4381 0 R /XYZ 90 739.9346 null] +>> endobj +4384 0 obj << +/D [4381 0 R /XYZ 90 715.5325 null] +>> endobj +4387 0 obj << +/D [4381 0 R /XYZ 90 533.9892 null] +>> endobj +4389 0 obj << +/D [4381 0 R /XYZ 90 467.1389 null] +>> endobj +4392 0 obj << +/D [4381 0 R /XYZ 90 371.6836 null] +>> endobj +4398 0 obj << +/D [4381 0 R /XYZ 90 187.7108 null] +>> endobj +4380 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4406 0 obj << +/Length 1720 +/Filter /FlateDecode +>> +stream +x诃Z[o9}鏦 H作丙殾jB窄*ba挔%惀Dm特x3嬺'啭.>菫2詘Xi棋pq?烂[篥賭煒螼B莱汆 獓iI錺vs 斝醠鵴ャ*痂q躔鋋忣猈/V氩布)wc錰a咭敧)镍箪誤:箐un侷b|鼘嘖撱FL+1黬^`D处名絏8*Q謁#!H A]懺診T5綷暬勁輏1_Wu=拶罘KWM窣 >~^e聜n,g婝(6漁擣#攸,I鏏)酘c),薕覯1s +Z&除dw[C.取真饁v齸L(潪袭g//Ё搗6𜰖觹馉tQ珻蟊1〥)曎囪[Q->" 篵(郾,鍩誶7琾S>壸^亪)b拝 t, +{yね阗z涐[3,?疚W6鸘-蝭鮧1&bt穁/絛筽抏厱l嵺?}鈽搕uuq+!糤驲*匘颽犼脌 糔 ^X鳰 iDqk韄k::k$K欃鑱8DE=1(麃虪穂睤萳ㄛ ((YF愐歡J6@$隸n琰絉4"3萁玸4対T漼>_瘡粃餄剮崫Kn:璛5剙5xh I疲5嘉及543H#婋*灴淣藿炂;汙Lh烆侴魆4g7)璸X鯱筤z佘Tz 1sQH埲聾%"x潏及垰"覉庵"鷓>}=7(h丆A躋逮Kr鸣;<楢;n%9GTa澁郏8戳2)S:驠\圢槅嘦,鳤抆徶*頪{钼qW9莊銝聞0J命殭跪骀h篎翏>咾):I恌9d螒s2噕訮套.f绡%M昚娌0J覩柄o霍hf蟹v垯偻搕Q禸7锥涗4F恚碧3iNI篎+瑚哯菨wS蟡口7瓒 c侴71鯶H扽b>DPE蛝U斟I't証煕亵贕H鴩噥抎<:离,ち {H<肈4⒏鞧ug)膛 镹x捣M橮p专m㏎;<c04u葲1y唯觟Dq冔+覫祝猽衾r *4n鯙t 1(!鼵!;<c04r葲1y螑觟Dq輴/&]3斗Z郟穀 E摏v蜆bいR3v0x)芵苅^?銗7c 驕в堚咷縳述y状H7粒vk祖饩諀瞩b蜬菹 H眶U∶JQ鎋aAB"]0寰 T'a<+7錸/隿;菁q疾7Sb罯){Jq鯅b,隒謽毭援>A澘晋=賬麀[n陧边c觇1endstream +endobj +4405 0 obj << +/Type /Page +/Contents 4406 0 R +/Resources 4404 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4430 0 R +/Annots [ 4409 0 R 4410 0 R 4411 0 R 4412 0 R 4414 0 R 4415 0 R 4416 0 R 4417 0 R 4419 0 R 4421 0 R 4422 0 R 4423 0 R 4424 0 R 4426 0 R 4427 0 R 4428 0 R 4429 0 R ] +>> endobj +4409 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 704.1539 234.5175 715.0578] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2f8f70c30b9ee08a103fbd69a4365c4c) >> +>> endobj +4410 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [235.8425 704.1539 245.5859 715.0578] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4411 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 665.2996 197.387 676.2035] +/Subtype /Link +/A << /S /GoTo /D (a00142_g9e97a0b4d5cc7764d8e19758f5da53ae) >> +>> endobj +4412 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.712 665.2996 208.4553 676.2035] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4414 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 582.5446 207.0905 593.4485] +/Subtype /Link +/A << /S /GoTo /D (a00142_gcd3ac045f0a4ae63412e3b3d8780e8ab) >> +>> endobj +4415 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [208.4154 582.5446 218.1588 593.4485] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4416 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 543.6903 187.0159 554.5942] +/Subtype /Link +/A << /S /GoTo /D (a00142_g905451249dca72ce0385bf2a9ff178ee) >> +>> endobj +4417 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.3408 543.6903 198.0842 554.5942] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4419 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 461.3088 216.3557 471.8392] +/Subtype /Link +/A << /S /GoTo /D (a00142_gfa82b860a64b67d25ab3abc21811896f) >> +>> endobj +4421 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 378.1802 194.2089 389.0841] +/Subtype /Link +/A << /S /GoTo /D (a00142_g155cba6121323726d02c00284428fed6) >> +>> endobj +4422 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [195.5338 378.1802 205.2772 389.0841] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4423 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 339.3259 229.068 350.2298] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge3c821e3a388615528efda9d23c7d115) >> +>> endobj +4424 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [230.393 339.3259 240.1363 350.2298] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4426 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 257.5471 206.8414 267.4748] +/Subtype /Link +/A << /S /GoTo /D (a00142_g7b5319b5b65761a845fcd1500fde4cdc) >> +>> endobj +4427 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 244.5957 200.296 254.5234] +/Subtype /Link +/A << /S /GoTo /D (a00142_gcfae9053e5c107a1aed6b228c917d2ea) >> +>> endobj +4428 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 231.6442 198.0843 241.5719] +/Subtype /Link +/A << /S /GoTo /D (a00142_g9ff1e8936a8a26bff54c05f8a989b93b) >> +>> endobj +4429 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 218.6928 207.489 228.6205] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge469332907e0617d72d5e2dd4297119d) >> +>> endobj +4407 0 obj << +/D [4405 0 R /XYZ 90 757.9346 null] +>> endobj +4408 0 obj << +/D [4405 0 R /XYZ 90 720.8203 null] +>> endobj +4413 0 obj << +/D [4405 0 R /XYZ 90 599.211 null] +>> endobj +4418 0 obj << +/D [4405 0 R /XYZ 90 477.6017 null] +>> endobj +4420 0 obj << +/D [4405 0 R /XYZ 90 394.8466 null] +>> endobj +4425 0 obj << +/D [4405 0 R /XYZ 90 275.5208 null] +>> endobj +4404 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4433 0 obj << +/Length 1429 +/Filter /FlateDecode +>> +stream +x诃X[o6}鳢榊~3哴0`k笾++_2Y铄唢$什(SZ!抲魙噰喾毁fK琤*够+( K頥oS衘綻杚%M佇驵缤氧.;l騧惮娸v顅銮]锥e%佐抠埙4Y!慧%檤J繸杔f俼矠綑読.7 N偪0?<啠胀 a|Jiz(瀇V&/鐇殥l8伦籪襹涘n凪i V屎4J*3s,M-~漌Kj攀鱕Y<{┌锿郐屋溗存U呋.>査騥sRl炞y';阯$t⒏!訰>獨-p]K(錢KRB厰5穇鏗釶=钍玜o爩h 藜C峵飇T \鞼薓a麆髺骐}(@飊艌譔}譕U瓑盳 6棢鬢彾縞劧暧*;K司撒d0a塨F舉隤a搧囌\烥/尚└:G)鮆mV\貎4刢旸%掤柦籘>礃轺鳨啈:v峓f罸"谜鏠S韮j=ie霴鷬燪N!j6[V$ +赤E掇eO漶吇吖絹1h=:7\磏7噈骀i?捑 攭诚>`蘿 + d谋巏鴰1恨% Z-诒CM跖喽T┯緹鎸b鬎5,>盔<~奅P穂|鰕 N3!丟M5讉瓦QI鱑y葌 U0\娦'x剈R犁瀽谄鑀acL+ +@鵋娽D9_DUm庩囀嘪晽笇d篭産M hu鋒N0矘稷彯!ib悮鮀廪jk嶦7yKi冱k7 )9G +DX+悚ZN0.嗉飬禗 +撅`摼岠~鼾I逫邿鼍厉,偤G邨蟓厶 >汙!霣:彴顈鐂續1q:T伉赠e靝鮁/俭cJE\f>:b孚慨G沌羌o禚餾Q=棝M缩y鸎TE嗷豞P,7S鲼癷 +旗镗倏遷邺'/淓P髂铂苬p椓&荇#.⒚O隖@f 小缕坤訨膏 躋ha蛥蠧烂琴/鏐蕆蝩/敉匣b[澗x*s悜篏[j縊@P 7泹X@x豻@ +"薹 垀_'瞻-舅Z衘婿|6x仩1曩\攜U驰#*B 殺`侊椐贕褹j垢T?#II酑2:66C18阩t瑁#樾羂筇=藶Zc邚試徦}s;竅Ru8Z焝|W釰]d}N1'娛亽隂>种鵤喱IQ玗斶'溼嶎, 傽79u^遨糪V铘?竨:'磊魥+謣昮敧6g;蕻3鼃x隒|秜邠=禐Jm$endstream +endobj +4432 0 obj << +/Type /Page +/Contents 4433 0 R +/Resources 4431 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4430 0 R +/Annots [ 4436 0 R 4437 0 R 4439 0 R 4440 0 R 4441 0 R 4442 0 R 4443 0 R 4444 0 R 4445 0 R 4446 0 R ] +>> endobj +4436 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4437 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 186.7559 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00196) >> +>> endobj +4439 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 515.6229 172.9881 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) >> +>> endobj +4440 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.4309 515.6229 224.4542 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4441 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 476.7686 180.7289 487.2989] +/Subtype /Link +/A << /S /GoTo /D (a00156_gedaf3e48c2b04229b85455fb948468d6) >> +>> endobj +4442 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.1718 476.7686 232.195 487.2989] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4443 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 437.9143 186.816 448.4446] +/Subtype /Link +/A << /S /GoTo /D (a00156_gcb807bd57e5489b386b876af5c1f163a) >> +>> endobj +4444 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.2588 437.9143 238.2821 448.4446] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4445 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.9214 398.6864 184.6543 409.5903] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6d71dececfce707c668e6257aad5906e) >> +>> endobj +4446 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [213.0971 398.6864 236.1204 409.5903] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4434 0 obj << +/D [4432 0 R /XYZ 90 757.9346 null] +>> endobj +1086 0 obj << +/D [4432 0 R /XYZ 90 739.9346 null] +>> endobj +358 0 obj << +/D [4432 0 R /XYZ 90 739.9346 null] +>> endobj +4435 0 obj << +/D [4432 0 R /XYZ 90 716.7484 null] +>> endobj +4438 0 obj << +/D [4432 0 R /XYZ 90 534.1992 null] +>> endobj +4431 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4450 0 obj << +/Length 1521 +/Filter /FlateDecode +>> +stream +x讠Y賻6}鱓閶 %(.MQ燤- 胖钠x飑,g^J6槆裷t镝=嚔L2 $38SB!酶6 渳勊/そ絾鹝鹚礅閟j2儗2唤#H%4惠綴jD鵭M^^鰪OCQ芀磌>婃鑅qg镩eq茇KJk$J菥\黺蹜h9 +&墺鹣馔;渕侂F蘦憓寛14{Xp受蒩駔駑ЧQ?06TA伉X Gp吅罵或 +{瘍6 2B浴⌒62兆袌戳o*嘓&訫q迶j:秮76%l8+&5倜﨏櫁_洆]憃輱覥亞底a&橣豟6Z9Z癝碅3%0耚垰呦+)疹T>&"('颬#冽瑦"L\U榉鵆[账鎛Y蜯U 駷q&戋~*叴Qr@倒}煿?<陬谝Dr狚觵91銪笰抝/[ +篦F躇i5.$礏?X銶a;敫.酤鑧\PI($ 蘘鲻V偶颛哚#牡 +a;$%b綠d貆旿D抽Q[F伦艵$ +噬y嶞n.[0 ~餯s8m钛钌剳0輟訫^錗羅W錯S]:徃,8,耇晟暲)L侶4科冰逺*Be[9E3v═^0h儱扃=祝 23 觾逃礤)A躪{ )H蒭|饌!7 毨脤J! a5絩8永Q驓#/X噼`淄旬],Q8[Mx璌(33箈鑞%絭)W諾嬴捏藂c=b/9*&D%2汃跅壖/{y?(^烐郯3M鋷tf婳鈜濝㘎Q0G嗚D *昞q5$'吪淪p畽E桊 a躀yR +誓 小履匊)8譺X蘁VP(M;F鮹#腾赀[+穩VE m$桖JI︳ +=糢嫌珡巟G_-秹,:&襯"鼈坕輧8鬤J栔0x轓鱺薮顊圭>"坽諁Y*哓i(侰ヒk夽$lP黫遨錌j2 >#;瓅F`郇u*L躓>c鷟貆錽槰1+&鎵贕GD萘l鶺us4z景朊消j7竰 +邭蛎欀H慆菃-/B2拹K蔬"瘬/oR3錈`捻煽仕`瘔Q28T4# 1墾dn!:|侴7b +Q-t*L<0pJ%虐3桛丽ACg噹兊P非軙+.枾bs)S蒜>鹸FY1齸漓h0>m懊RX洈A8X 紑1儓珥 孪kK5L 颙苸 +瑙濚嘜鈄健灊/忹璊脢f-B JQ狏w歧枹'x剄# `C薎|*L> endobj +4453 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4454 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 187.3139 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00197) >> +>> endobj +4456 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 534.931 161.5608 543.7776] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4458 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 450.4922 172.9881 461.0226] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) >> +>> endobj +4459 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.4309 450.4922 224.4542 461.0226] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4460 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 411.6379 180.7289 422.1683] +/Subtype /Link +/A << /S /GoTo /D (a00156_gedaf3e48c2b04229b85455fb948468d6) >> +>> endobj +4461 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.1718 411.6379 232.195 422.1683] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4462 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 372.7836 186.816 383.314] +/Subtype /Link +/A << /S /GoTo /D (a00156_gcb807bd57e5489b386b876af5c1f163a) >> +>> endobj +4463 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.2588 372.7836 238.2821 383.314] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4464 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.9214 333.5557 184.6543 344.4597] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6d71dececfce707c668e6257aad5906e) >> +>> endobj +4465 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [213.0971 333.5557 236.1204 344.4597] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4451 0 obj << +/D [4449 0 R /XYZ 90 757.9346 null] +>> endobj +1087 0 obj << +/D [4449 0 R /XYZ 90 739.9346 null] +>> endobj +362 0 obj << +/D [4449 0 R /XYZ 90 739.9346 null] +>> endobj +4452 0 obj << +/D [4449 0 R /XYZ 90 716.7484 null] +>> endobj +4455 0 obj << +/D [4449 0 R /XYZ 90 551.8236 null] +>> endobj +4457 0 obj << +/D [4449 0 R /XYZ 90 469.0686 null] +>> endobj +4448 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4469 0 obj << +/Length 1547 +/Filter /FlateDecode +>> +stream +x讠Y[o6}鳢榊/罰珻":t碋嘭J"谋2踛繌枿P偫瞮魸蔑FR$?)a\f 晤徵臆灻鴠1y鬄毺 #┨wG A /SⅣlN ejZ]~侹仹狷鈣鄙氆髍U=遨抿P斲俜耪鋌岩6撃揀3 gkPw5翀-#b 蜑&2鱡3<礢8>048A仞G u茫0ZU廚#*fs1濾朋鵁o筲盾袜)Zz澾錺OO箜*2B烂杸D庴K肫g鶁+灊抢a鞽荭秙<,o楙FEyWn婍銃S畺淂^夙销篁觲Y_ucm筸@嚥鏲/霃魂P谢隣}僷媻閺]q萉?碄榟旾6 喴佹>*LVm l 0忤﹚3餚钗S%q5李G坄a馀趹~絴j鈁m!嫤鵩_菞飅Ig辕乀6J訾址3w鯂'=1 [薞d/V{聪鸝(7HR-鉵kQ!g唷5v鍰8涿虔觤q瑳#嬫誉 +$ 貊诸玖\w繞籚]a;H邲DBs钵эM嘕璝x:揇乕9?B_壅Σ+津酰嘩謳mED樤!et'﹞*燿8籦{,qHR痦PB5m俼韨戯!A4鈽蜓裳 U紕⒄%麶a :崫牸-* 3樍Rvy_瘺鋅"E閼廹济v瓕忥Y\~T儴12嘕pSL 0雛獓鈧~, *(i`忯匄7o誮给sq}y9P牎h%x ,3^=R 碨痫蔔C瞎F耯= > -, Q茥tH鸷|桊~烸X雬糰=铖刾鴶娎n3幂猞y8樴纈0wE婮垹X#崣顓 燔譫(鬖 烧x毙;X:1F/魆6>o:頢BW B滐妑]勲仞H匛-*!凴崍勍h7 '劅R$0汜别;X:1F/黴6>o:頢W 驴\耊05泟'ZTB牍.濎煝:0鲚M伧$LJG|曗栜Rw鵮怯fK鑚H佪+l諟鏀蕥] (%鉃iQ聖癲 N/70谻Bk6$V踃粈lS湅駐b砺烈"畦祴8o.|辴昏p熞.*籄ZT想!|矦 敋壐3ZTB厊缞揯啔>u#Z|RA遪瞚( 聣thQ)~eK豻鵮顟膅桚啀飽|@$馵X2馽宮&鹰}J澝u%麜輶(群竤ZT(⒂瘓3 韷p;乥1q巽OK嘜!竌S枏誷 HCt錻G川 殤#暧PD5>烺豈'悻>妶z燛%嘐6λ璒E醞8僥"咟_*棕钆朷"譽滛酇{~猡X騧緝庌竁菖諏坕諀!殆膅敐焰膊9姼城瀹9t帣茚脃消<8^茬>^囖endstream +endobj +4468 0 obj << +/Type /Page +/Contents 4469 0 R +/Resources 4467 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4430 0 R +/Annots [ 4472 0 R 4473 0 R 4476 0 R 4478 0 R 4481 0 R 4483 0 R 4485 0 R 4486 0 R 4487 0 R 4489 0 R 4490 0 R 4492 0 R 4493 0 R 4494 0 R ] +>> endobj +4472 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4473 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 217.1919 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00198) >> +>> endobj +4476 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 516.2256 200.2959 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00131_5320d4457a472d8888ec1905bc0e0a1c) >> +>> endobj +4478 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 504.3552 188.6795 513.2018] +/Subtype /Link +/A << /S /GoTo /D (a00131_5f2e1fcf0055d20ce17664b1027bb9eb) >> +>> endobj +4481 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 445.4457 207.3094 456.3496] +/Subtype /Link +/A << /S /GoTo /D (a00131_1273664aba3e6a2a46e87dcb1a5f19ad) >> +>> endobj +4483 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 432.4943 226.6668 443.3982] +/Subtype /Link +/A << /S /GoTo /D (a00131_890e822616a6839dfbf51dcb591b8e99) >> +>> endobj +4485 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 419.5428 208.4056 430.4468] +/Subtype /Link +/A << /S /GoTo /D (a00131_88460bea09a462d0e22511cb567eee14) >> +>> endobj +4486 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.2212 419.5428 265.1324 430.4468] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4487 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.295 419.5428 398.1028 430.4468] +/Subtype /Link +/A << /S /GoTo /D (a00092) >> +>> endobj +4489 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 406.5914 220.5797 417.4953] +/Subtype /Link +/A << /S /GoTo /D (a00131_1d5ce7047650f3ecee0814dbc8714099) >> +>> endobj +4490 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [224.3954 406.5914 277.3066 417.4953] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4492 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 393.64 191.7182 404.5439] +/Subtype /Link +/A << /S /GoTo /D (a00092) >> +>> endobj +4493 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.6883 393.64 287.4687 404.5439] +/Subtype /Link +/A << /S /GoTo /D (a00131_692d80636342d564422ccd9296ad568d) >> +>> endobj +4494 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [291.2843 393.64 344.1955 404.5439] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4470 0 obj << +/D [4468 0 R /XYZ 90 757.9346 null] +>> endobj +1088 0 obj << +/D [4468 0 R /XYZ 90 739.9346 null] +>> endobj +366 0 obj << +/D [4468 0 R /XYZ 90 739.9346 null] +>> endobj +4471 0 obj << +/D [4468 0 R /XYZ 90 716.7484 null] +>> endobj +4474 0 obj << +/D [4468 0 R /XYZ 90 534.1992 null] +>> endobj +4475 0 obj << +/D [4468 0 R /XYZ 90 534.1992 null] +>> endobj +4477 0 obj << +/D [4468 0 R /XYZ 90 520.2106 null] +>> endobj +4479 0 obj << +/D [4468 0 R /XYZ 90 464.3956 null] +>> endobj +4480 0 obj << +/D [4468 0 R /XYZ 90 464.3956 null] +>> endobj +4482 0 obj << +/D [4468 0 R /XYZ 90 449.4308 null] +>> endobj +4484 0 obj << +/D [4468 0 R /XYZ 90 436.4793 null] +>> endobj +4488 0 obj << +/D [4468 0 R /XYZ 90 423.5279 null] +>> endobj +4491 0 obj << +/D [4468 0 R /XYZ 90 410.5765 null] +>> endobj +4467 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4498 0 obj << +/Length 1405 +/Filter /FlateDecode +>> +stream +x讠X[o6}鳢榊^腫0 霅祂]毞[N8r鍷箕鹽擧e邑皱;囘R`#吰呬iV奲4僚=<~7!鲺尴C蜡7撟o.4覀娾f軿qJhq锄4U垔贉r<=窒轙觚幂v7#O袰黩m僵韩雑];5瓪T +仹D曩棝o7^嫊蕶 F蛇揙_p蒞寴V鉴7璱4))s7浬巧_轓鳍齚l臏榜!昶L22岊?19o理唨D,莈uXg瓴/w躞∞6 莺丑{礨qg尒映挹嚝臿q坟矍踰骰蛆f籠l簕7糊6襸ф顊鼷W隧蔤[4t豘pu牦躐p苜穙?糥B矛Pa!楤Xc6S殗8晻F3芭1%绛宿虒旅胿w1&"(I搟{*%拕k-齤馾}l!潶說殣鄈AQ8dvO慣)懸R  w鮃 踼1"[劜#薋d帛梴疮哯h⿷燡ぽ鍽1o啾5驢- w&)兗琇!4u[@毽W COrX)翀cf諞W粄嫻蔑痼饍戰Gv嵑^/彳磼7堾氣@闲昋[3*愼﹁y:揇俒瞬咡P7送褦紑V +簦嘩':+Te讬.●tnx桺{軓缐0赇脐L@┄蚺庒L)忞鄞`($鍃a裍>锞m奶4LtL 極'櫭4Dvm捿$籡琕8歉機H5"zCL恇Z袋o復覕遆癒憠誌H勖擦N2;秒傒泯:0┲8軃&岫鴾娙n:_np#尋]酫+0鋅?榗&cQ疏樾T,c4}葲}忹溞Dv*=幖D%OxTF5w(慻焕鉺魬]鐐t观8蘃f綜屮岘0]扒遯螶<祴珩寛j豐濋徬垔頌50-O{疲b Eh槅填i槏, q [mT秽nI溟vR砺硫"磱4痮!o綸舾蟟i戄(-幭9BO;茫22(藪 㟼(,64蝨勄g 韋泦4 韦僄屮-鳖體堙磕堁郇6@*,燌 F_畽膖i烻缢#T楉WDc$!胍务╔D痏mf:狷U臜≧ xOД胓蹗馨賜徬 褧碙;拢r2攤k2;b>5ET狍狃9戄\}矑u莯IxT啛?]烼挛^橛R蹰`L1S氉W^葲煒z茜LLi戄(駸玗絔账)BH逃铕▽J",渮a萶c$A( 鰤噔漡)ぐ賸裵-悥半睬誚勓jL弼陶{.甪凮忲哖麐/(粻富僾d弚3失铘匊簵具W托=姘}?F$Y蚭ndstream +endobj +4497 0 obj << +/Type /Page +/Contents 4498 0 R +/Resources 4496 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4430 0 R +/Annots [ 4501 0 R 4502 0 R 4504 0 R 4507 0 R 4509 0 R 4510 0 R 4511 0 R 4513 0 R 4514 0 R 4516 0 R 4517 0 R 4518 0 R 4520 0 R ] +>> endobj +4501 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4502 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 217.7498 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00199) >> +>> endobj +4504 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 532.8737 216.3454 543.7776] +/Subtype /Link +/A << /S /GoTo /D (a00092) >> +>> endobj +4507 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 476.0215 207.3094 486.9254] +/Subtype /Link +/A << /S /GoTo /D (a00132_1273664aba3e6a2a46e87dcb1a5f19ad) >> +>> endobj +4509 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 463.0701 208.4056 473.974] +/Subtype /Link +/A << /S /GoTo /D (a00132_88460bea09a462d0e22511cb567eee14) >> +>> endobj +4510 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.2212 463.0701 265.1324 473.974] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4511 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.295 463.0701 398.1028 473.974] +/Subtype /Link +/A << /S /GoTo /D (a00092) >> +>> endobj +4513 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 450.1186 220.5797 461.0226] +/Subtype /Link +/A << /S /GoTo /D (a00132_1d5ce7047650f3ecee0814dbc8714099) >> +>> endobj +4514 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [224.3954 450.1186 277.3066 461.0226] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4516 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 437.1672 191.7182 448.0711] +/Subtype /Link +/A << /S /GoTo /D (a00092) >> +>> endobj +4517 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.6883 437.1672 287.4687 448.0711] +/Subtype /Link +/A << /S /GoTo /D (a00132_692d80636342d564422ccd9296ad568d) >> +>> endobj +4518 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [291.2843 437.1672 344.1955 448.0711] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4520 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 424.2158 226.6668 435.1197] +/Subtype /Link +/A << /S /GoTo /D (a00132_890e822616a6839dfbf51dcb591b8e99) >> +>> endobj +4499 0 obj << +/D [4497 0 R /XYZ 90 757.9346 null] +>> endobj +1111 0 obj << +/D [4497 0 R /XYZ 90 739.9346 null] +>> endobj +370 0 obj << +/D [4497 0 R /XYZ 90 739.9346 null] +>> endobj +4500 0 obj << +/D [4497 0 R /XYZ 90 716.7484 null] +>> endobj +4503 0 obj << +/D [4497 0 R /XYZ 90 551.8236 null] +>> endobj +4505 0 obj << +/D [4497 0 R /XYZ 90 494.9714 null] +>> endobj +4506 0 obj << +/D [4497 0 R /XYZ 90 494.9714 null] +>> endobj +4508 0 obj << +/D [4497 0 R /XYZ 90 480.0066 null] +>> endobj +4512 0 obj << +/D [4497 0 R /XYZ 90 467.0551 null] +>> endobj +4515 0 obj << +/D [4497 0 R /XYZ 90 454.1037 null] +>> endobj +4519 0 obj << +/D [4497 0 R /XYZ 90 441.1523 null] +>> endobj +4496 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4524 0 obj << +/Length 902 +/Filter /FlateDecode +>> +stream +x讠VKo8倦W(奈"E嬇禡虞) +誚《涞箫;擧G绨掆饹忬鈆魢03"U醶@弗蟧t 'c乄7Fq畁{匧r溽j%B q Y札髞"d0L]1.雞/6o撕娍7珦Z荍 +匳榭翖n堓uL-脽喥餻.|< 齺ニI朔脭畀情顿p;蛒'QW^/i徊ew ~*n媍:*猽a/8 #3R鋈dY 条2C噠Y9!m湱奻},轗$F8柉p拮浳s腑徝ょ貣誺X謁*縵碥1蔴k菀 _蔶蹮11穚cs堽暌A祑N螃劐鳛8呰;/r磔絛榦鶳`覺袙,TB30 =閰挶狌7构珇X3籪p3忤粹,掆?跚宩1m25:l輬?盄[峣蠍-r\7)xj樷Z7跧j雅鏷V 檺狋悢K掆罦^7*y睁鹡侾B吚$寝n種嬗佚^>Xp 撞W)C釟歭Bd}^934珵-U&奾)RFy5T柅甖[#6 錤J翑D| ,㈣珠嶶x霉湩き檾g5灓炗K曓R忰瀓赥7Y 蕢瞌#盟?莃嗠"鉡擗\踨92茀早-q抸稥尗 愢瑼s渰冝,z(%'# + N創眛螪B▔塉{k蝎櫻爾蛇y雕賑[矯径 囈6霫嶵睺嬻臫*% 昑5閾B|黊)j5劧v.$CZ3-樂㧐斫焅矍磗 鋘 ..鸽("攌b.#"虥碉骶U鹵-fM氻<祽晘`綣廵ndstream +endobj +4523 0 obj << +/Type /Page +/Contents 4524 0 R +/Resources 4522 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4430 0 R +/Annots [ 4527 0 R 4528 0 R 4530 0 R ] +>> endobj +4527 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4528 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 200.0459 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00201) >> +>> endobj +4530 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 550.498 201.2321 561.402] +/Subtype /Link +/A << /S /GoTo /D (a00154_gb4b17aaf20d630f30919b19937b966a3) >> +>> endobj +4525 0 obj << +/D [4523 0 R /XYZ 90 757.9346 null] +>> endobj +1112 0 obj << +/D [4523 0 R /XYZ 90 739.9346 null] +>> endobj +374 0 obj << +/D [4523 0 R /XYZ 90 739.9346 null] +>> endobj +4526 0 obj << +/D [4523 0 R /XYZ 90 716.7484 null] +>> endobj +4529 0 obj << +/D [4523 0 R /XYZ 90 569.448 null] +>> endobj +4522 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4534 0 obj << +/Length 2879 +/Filter /FlateDecode +>> +stream +x讠渕o7沁鸖-p恀樶抿)(奒l賟庳>[9燞習曍hb昆唼f%=\;id颻鬅9K6墘-螵1撜>>葆]8緥;/x鎹4撆鏜#槚BNWI7蹠歄焠究?l谍襦骐z|齳}?n壕]悼rNpb鰅駐g緢頬rZ褄刁焅A抩w8S揲蝿鱮騧*u鏱鏮1析梨 C绋>I0鴯 g)幛->I羪鮕漏mc +娴弈勔* 桵屔Du齲 懏丁鲎涳7w穄 @梛gq%餿t秨必;{^?<^芫\輂璝挎" g'FΦ皟 噯髮s47~撧玒涄沲蔟司粪扽%mU罡,俒f呉涎6鯳椷孩>蔺9|湖-栎F睩i7泈龗-s逇^N芦w(眇巵 N;嬡&p i +2唋訇頪?i玳褽U濩r騳6嘷妻畃!$L躝喂冀賹豈祇嚎圻]g逶)#菽p鞋讦襥务鷀鼏1惻m驰N讓▋殃{羟^'*裒c诞+喗牒x2#烩齶s机鷗池@'亡鐾鞮 +請痤鹀 杭糭]椩袏Y飹壯;)榲 4嚟噌颃骣 堅繞<j0=葱j\碨xx 宂-u靔啂 愚51J膂粩:oU& 齺矉)\g<7&1;翘箒1%璈澢gJr鐶輸ym梘鏕'媰H蝑# m邚); + B6j2P攦瑢檙D渋鸙怤蘫P觟dq7藛匠辶袸杽3按餗AU矄~%颵|恟鍜穆 (蔄V9"蚀o}+('5旈4哺侐舘斸嵓駞 +U哨KXm隵 k.銛憖de蕯#鸉守穫rb^C橬#(焈,r拾切B*T%k厢Bk媚(7C擡  +Se7R凭蕋Y蹳馔8e蠑i際[e7D Ν&_H@Q2eQ#e靃A91L 擾>輠%l寪*U赊+&窲甍@+g檺趲偲tA搸蠣 t鈁潥W. ?鎼銈籅偑d 5绞r惒曁伛:N1頣e膭"L欶廊磦/vK嫘囝-巼z吊^戌D_襶涾牦Y 輄9 (禔V咾9"捍o膵}+&54哺耖賐9?傧6蕫7湠~U{ Wb42溊峛= (藺V芁9"檀o膶}+0'5橀4哺笊殚傩 鐫∷U)S嗡hК$歃逤a9仁)G臋鰨湵o缒紗3滷s~q慜g!tCW! +鲰t栜綮嚩 +赍逥a9仁)G剻鰨槺o婺3滷穱yy<蟦孒7 ] *$ 未nl毨衝Yq豎K;緩 +t悤AS4Ac +袎y h:,n浧艳鍇锿轵|~v<淥バt9ⅹ悋l`A&d/彙氪t歽K眬eE蓼3飩o酀鴸yф idqd鸤чQ罿r Km莴佬葟ii8b$Y1鍒泳1霏@湗 τ肉摩8й棊瓽T憪臁u殘悀苟孾7旧 +y悤慡9慶 +鋲y r:,n<熤 c +E埅偦m|.溧詎`-蔌. (蜛V鍸9"未o鋵}+8'5滈4哺蠝O鍳噊^煘//N弿鰩3痜B堥忤4[)0:AT菾聆鯴+嶱z杣慊/,狓Y?鍒緫?霏酂樧皈尤颠鼽|f8翱樋煙do)豔鸣厍胑.西嫠悖搘8鱿琦[q飉C& +9调hIJ冭l哏a>仁)G劄鰨璞o=滷7C縘!EA' +y〧n扢簛',g竖 P鼉焤D黫呷鸙餙蘫idq4稄(f&"焣挢B偑dmk<'zB?媀}a3j ‵d錐A9AF亇+Eb^(4哺m鯣鸇麘橍甈劆*;X伱5璚|篠戴w湸禃堹B.y0灝卽Li╅bDU濦(g甉岏F褠+po橌襏)鐺u殊鑐 *EU>廣(扈蔌s68&:U筀v↖惁盙 訆仢k:機?軎?@/7+Y˙2枨 +=鈇磭潿惴b裶tPASv蠣i洊A'犻鶴桡用嵰j萻o?V利m/l跠3鼊癵耯}蹦f孈/哱$ +眉呡b鹘]m矅脎觚錭鴁囸忋邍ogBO熀勳/)'晒倬<搝zw啕:w遱p縻/脎~y趏ㄏ@峞ndstream +endobj +4533 0 obj << +/Type /Page +/Contents 4534 0 R +/Resources 4532 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4575 0 R +/Annots [ 4537 0 R 4538 0 R 4541 0 R 4542 0 R 4543 0 R 4544 0 R 4545 0 R 4546 0 R 4547 0 R 4548 0 R 4549 0 R 4550 0 R 4551 0 R 4552 0 R 4553 0 R 4554 0 R 4555 0 R 4556 0 R 4557 0 R 4558 0 R 4559 0 R 4560 0 R 4561 0 R 4562 0 R 4563 0 R 4564 0 R 4565 0 R 4566 0 R 4567 0 R 4568 0 R 4569 0 R 4570 0 R 4571 0 R 4572 0 R 4573 0 R 4574 0 R ] +>> endobj +4537 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 635.166 274.5352 656.3674] +/Subtype/Link/A<> +>> endobj +4538 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 603.5642 179.0052 614.4681] +/Subtype /Link +/A << /S /GoTo /D (a00202) >> +>> endobj +4541 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 471.0445 221.2372 481.5748] +/Subtype /Link +/A << /S /GoTo /D (a00135_534d9e416324fb8ecca6b9cb4b1f6a6a) >> +>> endobj +4542 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 457.1975 187.0257 467.1251] +/Subtype /Link +/A << /S /GoTo /D (a00150_g88e60aa2cf23e1c65d630701db08c743) >> +>> endobj +4543 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 442.7477 190.9012 452.6754] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6020613f5062417d9811cfa837215c83) >> +>> endobj +4544 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 428.298 189.2474 438.2257] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5ca559def464ef20d8b1f7d32f2f160d) >> +>> endobj +4545 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 413.8483 189.2474 423.776] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1320fd0006a2f70138bc2d0018dda829) >> +>> endobj +4546 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 399.3986 191.6086 409.3262] +/Subtype /Link +/A << /S /GoTo /D (a00150_g44b3b1ab31a403ba28ec135adfcbefef) >> +>> endobj +4547 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 384.9489 192.007 394.8765] +/Subtype /Link +/A << /S /GoTo /D (a00150_gc84f499cba8a02fc0e306c10b2acabf0) >> +>> endobj +4548 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 370.4991 189.7953 380.4268] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1425d4a0c2760adb653a04c0fb137a8d) >> +>> endobj +4549 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 356.0494 215.2498 365.9771] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1215163245304bad20d6c5608ad75ab7) >> +>> endobj +4550 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 341.5997 221.8948 351.5274] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9f1822e1d231235edacad691f3cb7bbb) >> +>> endobj +4551 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 327.15 214.7117 337.0776] +/Subtype /Link +/A << /S /GoTo /D (a00150_g691688604655ea8943d15f14c60027d8) >> +>> endobj +4552 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 312.7003 239.0603 322.6279] +/Subtype /Link +/A << /S /GoTo /D (a00150_g12f3bf821224b8e7b48a57ed3cea15cf) >> +>> endobj +4553 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 298.2505 239.7177 308.1782] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5c5b1834e497f53ad0ef947bbe9777fa) >> +>> endobj +4554 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 283.8008 204.1812 293.7285] +/Subtype /Link +/A << /S /GoTo /D (a00150_gd58231410d58e34b455328b888a9e73c) >> +>> endobj +4555 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 269.3511 244.6991 279.2788] +/Subtype /Link +/A << /S /GoTo /D (a00150_g207d17b633cd095120a74bc1f2257b17) >> +>> endobj +4556 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 254.9014 209.1625 264.829] +/Subtype /Link +/A << /S /GoTo /D (a00150_g4cc3e223b63f27b546d62e9a258dba5a) >> +>> endobj +4557 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 240.4517 305.6302 250.3793] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1cea57e3ea526f210b1068e6dcf7b4f4) >> +>> endobj +4558 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 226.0019 321.0623 235.9296] +/Subtype /Link +/A << /S /GoTo /D (a00150_g62c03e0a308cc23929a80fe8d8f9dc1e) >> +>> endobj +4559 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 210.9495 218.1788 221.4799] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1d3211dbbdfb22d6a47b60dddcf945e8) >> +>> endobj +4560 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 197.1025 341.9936 207.0302] +/Subtype /Link +/A << /S /GoTo /D (a00150_g42288d5c3cf4b10becefec657f441e54) >> +>> endobj +4561 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 182.6528 341.0573 192.5804] +/Subtype /Link +/A << /S /GoTo /D (a00150_g8387881de3a8bfd3c0d57b9d04ac9b7e) >> +>> endobj +4562 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 167.2268 167.0009 178.1307] +/Subtype /Link +/A << /S /GoTo /D (a00150_g24f52ac52d6e714cb04a5aa01be3bdd0) >> +>> endobj +4563 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.7613 167.2268 256.6538 178.1307] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +4564 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [273.2016 167.2268 305.9885 178.1307] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4565 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 152.7771 172.5401 163.681] +/Subtype /Link +/A << /S /GoTo /D (a00150_g96544dedc1cdc71ad2ad54bf1d5e5433) >> +>> endobj +4566 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.3005 152.7771 262.193 163.681] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +4567 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 138.3273 191.3593 149.2313] +/Subtype /Link +/A << /S /GoTo /D (a00150_g4309376690872fa4beb4f025f5cc199b) >> +>> endobj +4568 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [223.1197 138.3273 288.763 149.2313] +/Subtype /Link +/A << /S /GoTo /D (a00091) >> +>> endobj +4569 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [305.3108 138.3273 338.0977 149.2313] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4570 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 123.8776 186.9261 134.7816] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb9435261753469accec0c9bf8a5a2686) >> +>> endobj +4571 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [218.6865 123.8776 279.3487 134.7816] +/Subtype /Link +/A << /S /GoTo /D (a00096) >> +>> endobj +4572 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [295.8965 123.8776 328.6835 134.7816] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4573 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 109.8015 191.6285 120.3318] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9c0814ed491fa452ec97910c0728d410) >> +>> endobj +4574 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 95.3518 189.2275 105.8821] +/Subtype /Link +/A << /S /GoTo /D (a00150_g013c3a06a8b58589a77f4a3442f89c2a) >> +>> endobj +4535 0 obj << +/D [4533 0 R /XYZ 90 757.9346 null] +>> endobj +1113 0 obj << +/D [4533 0 R /XYZ 90 739.9346 null] +>> endobj +378 0 obj << +/D [4533 0 R /XYZ 90 739.9346 null] +>> endobj +4536 0 obj << +/D [4533 0 R /XYZ 90 716.0742 null] +>> endobj +4539 0 obj << +/D [4533 0 R /XYZ 90 491.1191 null] +>> endobj +4540 0 obj << +/D [4533 0 R /XYZ 90 491.1191 null] +>> endobj +4532 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4579 0 obj << +/Length 2957 +/Filter /FlateDecode +>> +stream +x诘\[o[~鳢校孎,飾,燖8}h6I巺貟V枓瀞H筌f巃y}汏87涮,f䦃Y3g J圪觐傁>z!毞瘙黿u褡2 V谫誹e +f倡觖桂騬!僒n~~^>屪/^no7醌燋輋wZ灦鍑縗e +,圢縳佅掷铛g*x3縫&B惓 -U鲡砼?矟鷯C3B 廚寫ixF腙呀<颲戱e罾棓銇,+URp舜蝥罭t鴽敠隟p鴶4 +鳂Q擾嘀洱~綌|具畕爡0唏笙扙耂,zv#嬻鲳駘s埜S剟④{连7骺q脅~絘+19 O2柃 烨S梻 毋C(卤;C弋a稷框V蝜悹N諕绽]7|媪空绽A^`x圯龃]辬[g婈睶~0澠祍诶讪 杉点驳3茿樃l3寯mi-7啥鍡攎埙,zv搇楇祾}裐Hナ!H(9圼[:璬 ?y O1栀瓎飮4藱凿gT忒啸f筪矮咁裙妦;$a<|歐橗A=r +$郥瀸'掠;炗宎苲G'(瞧3nBge垄Y(鎢p砕伷瞆侲?-徢飖蹮O鯆e鼵膳鮶嬬7 ?O~S渜Y瀫嗴[傃0仵X-F8昋L賺b棾`蒼p !'A~苎4R愻甅毅赕她煣`箚R\$;&=,荐 e菭!2p耺}聯 簐清婾q<侜n凵Q垙 |<9&9~娀琦簾\擴S旕D鷙d!)!%"噋遪vhz~趬亳%U缙壅鵹yj +挠M筲疹򁱴Mj\] +3抠LU +獡楗囿瘺c+6硑)B糖* 虖颧b4炓<4萌|Z|r>%%\濷1z徫絼k觾|=宒訿櫻-1枊將X笟浳銩NMoL@蔚诜说q昲DB唈)6藆R蓤挳;=,kDTXaif墼dq测谈襆LQRゞ9#5NPRK0Zj吜 g棩V#衶荚pzYj-z0帅請謆u汥i.2 箓妵鲮M 洹'j瑻cZK0LkW?統怖咲Uom货;嗣a<-钎&-/倅 QRK0Zj匒 B"*龗]惗 ]侲蟦迻v劬!亜肣v铹2=廇 '闖4" {z#OC#宷喜劦3"20r 熂[$骰a竪e溉ň颲A%宖趛褖LSP禇v|r翬秋}蟦9j牉涮j'd醊偞`v鬕i)`臛G愸$儺輫冿r>孭,寝亜"杸触宛幥氞ユ骬]嚜嬠┭蕏"Z}唬G+0錢)秋癜?炐$l9d獩棑p伷抪俇g旻%跎c*搹検7w鹴惞龠7荔齰鼯酨#r:@醳挡p5嶫 F'曷嘤5.'陹]T陏=挰$7!蕆慟}韉 Ys:J謂0飠袮4x*=籩v汯i孢鷱 *EP愂3eTw %l-榰P萇 B芐 zv蓜茰丟 e 僡躶9 &(毎!块J钣馜代v侗px坮k|]-澂NO|LT眑轄珐 +<Z#猒摭湭:担噃88锱充f銽Au73屘庭A$騅謥m闌侲蟦蝲慧睚i酉齘3 躼婒颽[:| 燆ZO嶡聯 簐慓>2d 啚Q刢Y=I%SJV^1n漳巐塅礈a晿O鸉捧'猼 +藑狖胒祬-7M'沾r 疅狶`癳Rm 5]4嶜蜌.歯鶠淓蟦音垻狳酡%b怭攚g欍Zvb?╤^?覜:⻊綮"饕$s|E8栜腉r潯搳 +0憋[1E'X羼憈<哩烥覓3c4债0Z覅AL腋,橐/-闁)捚Y綮&I廂真楮樶AH(=戽!( ΑP肙 @聯 簐钳x?@#(炉錇欂宇寽!Q肂V鉕跭缎宆鑸荊 +vY%; F镅 z 注ws羹粗C箣蜽FQ巑<飱N\b>垘_め茑I]汇3恺iE =(!瀢礽;{&薣l銒/|%嬴2琲"痞雷M邺剗覆y;mO湾齐悭6簖]罚{2瞰禼綞惗屋骠m2嶧o袢鬖;hlysN顮 l碌飳膚啢寲_rm麨皟,zv经g轠MD (逳兵,x +菿:+阊i宨薭}'髅#f:7澶侟ネ魔%觔傉= 襨D搽?W鏲蒈O'魥惂炷鎂斾懢瓀]9_匪O窙P毗謱j 毺0R摌荊o粍k泵:埋 +V{茎Y趚3乨檖=1媁嶀蝦Js嵪濸 娂>鮩Ьn揳>8<%籭s尠|,wY畯3 S茣p(G樧E瞵聄娆檃 >8<%籭3尠| , wY雗y?疟洽5Jr鳍 +EO眝O蚿儮'苡Х愣9輡褾U(8(奡2y 俠 PV痗艬褏0\d;鎧8鞔皿氟p袂麰鐭C刍21CUS癳揱艉A<>~徉祢) 鮐剛Or伈浐f绖:>粍k+畻]R鋚孋'-(1觪7岟^呓|呖麰~; +Xx胞坕且崪3,捁Jф|aq鑒頲維WZ>K5,(a4 R茞:鯓{┕b粥:t姰5-欜蚀! 崜熵踢LM鼷8"迾0xt ,唜胠$膩>镺WT擃#誙跬h_]^埆W脪q~汉.黸驰棫艏!晞O/^+珂!洘﹡愅哞鐨.N:韽Y?骜閧鶶 ,⺷岲瓐噖噀ndstream +endobj +4578 0 obj << +/Type /Page +/Contents 4579 0 R +/Resources 4577 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4575 0 R +/Annots [ 4582 0 R 4583 0 R 4584 0 R 4585 0 R 4586 0 R 4587 0 R 4588 0 R 4589 0 R 4590 0 R 4591 0 R 4592 0 R 4593 0 R 4594 0 R 4595 0 R 4596 0 R 4597 0 R 4598 0 R 4599 0 R 4600 0 R 4601 0 R 4602 0 R 4603 0 R 4604 0 R 4605 0 R 4606 0 R 4607 0 R 4608 0 R 4609 0 R 4610 0 R 4611 0 R 4612 0 R 4613 0 R 4615 0 R 4616 0 R 4617 0 R 4618 0 R 4619 0 R 4620 0 R 4621 0 R 4622 0 R 4623 0 R 4624 0 R 4625 0 R ] +>> endobj +4582 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 704.2391 180.1912 715.1431] +/Subtype /Link +/A << /S /GoTo /D (a00150_g22f140b02c354dfebcc7ad481c3bcd68) >> +>> endobj +4583 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [184.0068 704.2391 208.6941 715.1431] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4584 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 665.5553 177.9699 676.4593] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6832e4d2d046536b6472f7ac92340f68) >> +>> endobj +4585 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7856 665.5553 201.4916 676.4593] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4586 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [231.8776 665.5553 256.5649 676.4593] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4587 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 626.8716 138.5977 637.7755] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4588 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 626.8716 189.7953 637.7755] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb6683dd83fe1c8de9a24086d4b69e907) >> +>> endobj +4589 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.6109 626.8716 218.2983 637.7755] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4590 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [241.84 626.8716 266.5273 637.7755] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4591 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 588.1878 138.5977 599.0917] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4592 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 588.1878 197.5461 599.0917] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2addf34c7d457c1a7899a7e2171ef1e9) >> +>> endobj +4593 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 549.504 138.5977 560.4079] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4594 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 549.504 201.9695 560.4079] +/Subtype /Link +/A << /S /GoTo /D (a00150_g85b65e38aa74eba18979156f97a94a87) >> +>> endobj +4595 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 510.8202 166.9111 521.7241] +/Subtype /Link +/A << /S /GoTo /D (a00150_gc48ed5f0d27721ef62a3ed02a5ad8d2e) >> +>> endobj +4596 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 472.1364 152.9837 483.0403] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4597 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 472.1364 211.6433 483.0403] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9c24fba2cd8f7f62accb0a0d5bbe4dad) >> +>> endobj +4598 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.459 472.1364 268.3701 483.0403] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4599 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [307.2043 472.1364 331.8917 483.0403] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4600 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 433.4526 172.9089 444.3565] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4601 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 433.4526 236.859 444.3565] +/Subtype /Link +/A << /S /GoTo /D (a00150_g79c4110211247df3fb30b8cf1c4c02af) >> +>> endobj +4602 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [240.6746 433.4526 293.5858 444.3565] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4603 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [332.42 433.4526 357.1073 444.3565] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4604 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 394.7688 185.1725 405.6728] +/Subtype /Link +/A << /S /GoTo /D (a00150_gaa585784b0914cac1d37f07f85457008) >> +>> endobj +4605 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.9881 394.7688 213.6754 405.6728] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4606 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 356.085 175.2098 366.989] +/Subtype /Link +/A << /S /GoTo /D (a00150_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +4607 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.0255 356.085 203.7128 366.989] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4608 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 317.4012 183.4989 328.3052] +/Subtype /Link +/A << /S /GoTo /D (a00150_g266263ac78a1361a2b1d15741d3b0675) >> +>> endobj +4609 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [187.3145 317.4012 207.0205 328.3052] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4610 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 304.9087 138.5977 315.439] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4611 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 304.9087 162.6772 315.439] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +4612 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [166.4928 304.9087 191.1801 315.439] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4613 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 265.8513 171.8826 276.7552] +/Subtype /Link +/A << /S /GoTo /D (a00150_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +4615 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 183.3435 166.8215 194.2474] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4616 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 183.3435 221.3367 194.2474] +/Subtype /Link +/A << /S /GoTo /D (a00150_g7d3673f52f5846b6961d23b150decd54) >> +>> endobj +4617 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 170.4773 166.8215 181.3812] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4618 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 170.4773 213.028 181.3812] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20df5c82f2a15a508c19e505b5d9de2b) >> +>> endobj +4619 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 157.6111 166.8215 168.515] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4620 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 157.6111 220.2307 168.515] +/Subtype /Link +/A << /S /GoTo /D (a00150_g3237be0d9ec457de0177689ee23c0d5c) >> +>> endobj +4621 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 144.7449 168.4754 155.6489] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +4622 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 144.7449 218.5572 155.6489] +/Subtype /Link +/A << /S /GoTo /D (a00150_g499bb98a0b4ae9a98553ede81317606d) >> +>> endobj +4623 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 131.8787 133.6164 142.7827] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4624 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 131.8787 166.9014 142.7827] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4625 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 93.195 192.0768 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00150_g561b8eda32e059d4e7397f776268cc63) >> +>> endobj +4580 0 obj << +/D [4578 0 R /XYZ 90 757.9346 null] +>> endobj +4581 0 obj << +/D [4578 0 R /XYZ 90 723.1038 null] +>> endobj +4614 0 obj << +/D [4578 0 R /XYZ 90 202.2081 null] +>> endobj +4577 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4628 0 obj << +/Length 1404 +/Filter /FlateDecode +>> +stream +x诃Y踨6}譝餛z 屌ylg靑譜瀄廏杊GS[rti肟螧XP╆x<忮{皗v 叆厲歑.T1~硌/閬縘恺22鞚3[XbS硼i3"癰8闺绿燿掱子3'沩轾籁軹O誦推顠1荟琉笼鸩鱵X[麂$W鄉栎萦b$/{攑kd7濸植獾''/桔揎8鐾QPI 7E婶vV (哵a蚸Z|\ 罌T[S旙条佬䙡:[徜7~X妄飛飿眼鬯t眐N寯恉X是U酺萛\,議烙銡fW5f6蕡b掛 +棶葮,粈k裁昂.9z^# D .$K鉇哹唒蓅侕▅\铘&┱Q崹9穽绯v6H@鉠よ5╡副L( 4}瞣E儖w+)4峷;3筠59o嫕;q%鎚e岋x仳A-鋃^禢赘窠n谶灵Uc穩镱dsS6^xKc1褝$F 薴F<嗌⿷ap v黉H1<搓呬1 附 5螶t穈I奺嵤犯ei葵vq耠照睚烅苍奌穅"@J/栕K骡駔I倡矺瘄R魩^鵧\摓[錙棲j6_瑬鸍 槿炸 \C睘5(l$箅彭痼挣讻伮r礯<i;謄馜攛,/瀯陪艙fW'f纰碁t\罼`:項斩哽K 鍇;2.妼nyй燇@k軠7p 8n/*!J偼4重嫸稯圇_閖凖6拻 鼋W 薵D4嚅慺WgD填皩H<椽n驛dY\'薳[稈0#L抐Y2蔈k笴`SSQu塚 朆穠"@J;栕N骡褛I倡矺nVS鞄蕃f\jf4s謻"T*Y嵤灼缔总夳畓$"F(vX輰褖篩脺qQ>警'瑴 wNnYM禛O笈.嚦騫 觳鯻k餷秪} 洠耔e紐質砐v謀a$v咿 楁v镪櫌I}吟燤|8?j)b57幔pat黂酮舎\疚.滽黎鰧QL鰞匙緌窭G橭逕踥$fq'勲堇endstream +endobj +4627 0 obj << +/Type /Page +/Contents 4628 0 R +/Resources 4626 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4575 0 R +/Annots [ 4630 0 R 4631 0 R 4632 0 R 4633 0 R 4634 0 R 4635 0 R 4636 0 R 4637 0 R 4638 0 R 4639 0 R 4640 0 R 4641 0 R 4642 0 R 4643 0 R 4644 0 R 4645 0 R 4646 0 R 4647 0 R 4648 0 R ] +>> endobj +4630 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 702.9085 195.9522 713.8125] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga05a3dde2048480fa3ab2a5961898d18) >> +>> endobj +4631 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 689.9571 138.5977 700.861] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4632 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 689.9571 170.976 700.861] +/Subtype /Link +/A << /S /GoTo /D (a00150_g12a33f0c09711167bdf3dd7d7cf8c5a1) >> +>> endobj +4633 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 651.1028 138.5977 662.0067] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4634 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 651.1028 174.8513 662.0067] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5b5615dc240daed20949c0fded2b4679) >> +>> endobj +4635 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 638.1514 133.6164 649.0553] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4636 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 638.1514 172.6397 649.0553] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb4ef6b00924990e7a293f66715b6d1d1) >> +>> endobj +4637 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 625.1999 152.9837 636.1039] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4638 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 625.1999 200.0271 636.1039] +/Subtype /Link +/A << /S /GoTo /D (a00150_g788ffac72342f6172343d7f8099cbe1a) >> +>> endobj +4639 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 586.3456 152.9837 597.2496] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4640 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.4818 586.3456 196.4305 597.2496] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf703683056d2bfa5c81fa157dcb20fe2) >> +>> endobj +4641 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 573.3942 138.5977 584.2981] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4642 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 573.3942 200.3154 584.2981] +/Subtype /Link +/A << /S /GoTo /D (a00150_g236d5c7872f59c8fe7b701c7252b976e) >> +>> endobj +4643 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 560.4428 172.9089 571.3467] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4644 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 560.4428 239.8777 571.3467] +/Subtype /Link +/A << /S /GoTo /D (a00150_g210f227119fc972e6222c9cb452e15a9) >> +>> endobj +4645 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 521.5885 172.9089 532.4924] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4646 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.4071 521.5885 236.281 532.4924] +/Subtype /Link +/A << /S /GoTo /D (a00150_geb533744817cf6695d75293369c2248b) >> +>> endobj +4647 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 508.637 133.6164 519.541] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4648 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 508.637 177.0532 519.541] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2a0cf5d86c58fab216414ce59bf1fea1) >> +>> endobj +4629 0 obj << +/D [4627 0 R /XYZ 90 757.9346 null] +>> endobj +4626 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4651 0 obj << +/Length 1995 +/Filter /FlateDecode +>> +stream +x诘歮徾6葵W韲诶欋蝗(谒督鋚@.雫j婡钡k#~贀d酊飋(慭蕯I錸疗4<e9d覍所8皿G8屫+妇 +灲鷫旯FZR9_?t$A:_o]艞+)+椃镝PA?鴌;箧r琋m兕惜屣雡邹J0I屟蛜戏噍FL+1綻D处筱孲婢f鞒z=齾顔绷 缕GG83 徛h媬t +Q絓岏獠zhw=誄U/塟Te喼$H 验剺曣Y%"V閉諙爃k僒5泎銪zXy#嶻фoU齿}縜L7g{草3>-7颻广-7熝u"擛槰b.橣J鈗F溞*攰AQa藹 H:X囑莨~}m沗 +FI诟嬥剦gm濝my础緶>/ ^T嚘5!凛"涝蒗m鋔Q y錴=p圯1舛 輲4Jp-x 蔻往x-Lビ◇R兞勤邖"施n)y'򓒗e 9p1%{蝥;税9v 涖 +毗贼叨暪v跊iaOu悰儾8]師湤驝7w,7踬拗钍洲W;3学?煗啞氶窒a 戛>?皱遍)礴蔗09伮Tr襳}rB还 ,OIN趪Ho携軞8 +A~d.V*A4'栂M0暃碷煕衝.7薙r擌!译rS祷忓v,5e& +喥9^𖞬 z庱ボ媫A/烧暧蕻?歶肿n悵傛 +( CM剹鯊y7霡#叺@RV凮KF疯贼C昶X{,諭嬒Xg:v慷O逾?\落縈稉瞎轷*爙n;&h#幞2.内 `亶m$穢傮d"qb趚1闩給/]囯痕`> gR籹僵 咄笲9A叅/!㊣n媾騽 +S劎韟翪烞x趰H#1A8羏* /晀!6檖燃O$<怤钅?I┡KN,丽嚸醊,Kx0Ax飘#|`7O3nDz经+8A拵儣8k浭穣!子|{瘪 +经仕翞瓧\,螚丢縔r糷nN仜蓯(鋴P.08 箷3.厁舀'<0:鹦緭>\k 鑶鲷X6焎紩鵼Y%C鄥益#]撡fqN&6酢t妋'6味嵡mX+ +娋 皊BdW'栫5P6m跐炖f觧Dz儺鉜M嗸扗瓺訸⿲倍┸jWd秮p俍'5辮糚A6羄"E?搅詑CJ坡D簚 +Cfn4/+9W!煪簂蒹m拂䥽;x$bq盻禑5e}U媌,韹K +~飔欦$7湖ce^壱s礳'endstream +endobj +4650 0 obj << +/Type /Page +/Contents 4651 0 R +/Resources 4649 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4575 0 R +/Annots [ 4654 0 R 4655 0 R 4657 0 R 4658 0 R 4659 0 R 4660 0 R 4661 0 R 4662 0 R 4663 0 R 4665 0 R 4666 0 R 4667 0 R 4668 0 R 4669 0 R ] +>> endobj +4654 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.4748 274.5352 659.6763] +/Subtype/Link/A<> +>> endobj +4655 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 579.3616 179.5632 590.2656] +/Subtype /Link +/A << /S /GoTo /D (a00203) >> +>> endobj +4657 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 504.4427 177.6109 515.3466] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4658 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 465.3492 197.5362 476.2531] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4659 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 426.2558 175.9567 437.1597] +/Subtype /Link +/A << /S /GoTo /D (a00093) >> +>> endobj +4660 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 387.1623 196.4301 398.0663] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +4661 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 374.0913 204.1809 384.9952] +/Subtype /Link +/A << /S /GoTo /D (a00091) >> +>> endobj +4662 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 361.0203 199.1998 371.9242] +/Subtype /Link +/A << /S /GoTo /D (a00096) >> +>> endobj +4663 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 347.9493 193.1026 358.8532] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +4665 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 264.6323 210.8161 275.5362] +/Subtype /Link +/A << /S /GoTo /D (a00144_g12b467f314489259dd718228d0827a51) >> +>> endobj +4666 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 225.5388 211.922 236.4428] +/Subtype /Link +/A << /S /GoTo /D (a00144_g20bc87e5c063c3f4b01547be6e5a0148) >> +>> endobj +4667 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 186.4454 202.5074 197.3493] +/Subtype /Link +/A << /S /GoTo /D (a00144_g41d37ea1e3bd24f7b51e9409aceaaa80) >> +>> endobj +4668 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 147.3519 209.7101 158.2559] +/Subtype /Link +/A << /S /GoTo /D (a00144_geb79c914cf137e6d27fd7583e5a66679) >> +>> endobj +4669 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 108.2585 203.6134 119.1624] +/Subtype /Link +/A << /S /GoTo /D (a00144_gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c) >> +>> endobj +4652 0 obj << +/D [4650 0 R /XYZ 90 757.9346 null] +>> endobj +1114 0 obj << +/D [4650 0 R /XYZ 90 739.9346 null] +>> endobj +382 0 obj << +/D [4650 0 R /XYZ 90 739.9346 null] +>> endobj +4653 0 obj << +/D [4650 0 R /XYZ 90 716.6946 null] +>> endobj +4656 0 obj << +/D [4650 0 R /XYZ 90 523.5122 null] +>> endobj +4664 0 obj << +/D [4650 0 R /XYZ 90 283.7018 null] +>> endobj +4649 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4673 0 obj << +/Length 2412 +/Filter /FlateDecode +>> +stream +x诮[]徾6}焈醔_l`囜7媌穒回l:}J傽ck&B=択藫涂_iJ.欀]伹鲴=梂鏫挗M攸#/擯╜\.諳7x駂^ o邭鱫C?頽^饥泞@叅rq鱬 斝泡纨R#Z琻├薱絳aOW醵zW=T阉猋蹢储jI碭}竰s竺漡L她弁x1I竟翀Z,>'憿爧N檣步?>N崎椘缺@氶-UP& +I#EZ21_4 =c_4峘8觸醓秚縋諃`)*" g錚)^翾仴簋eS齻1m獔淜d 檺鄯鰪鎉槅莽覉廒4孷>>V]SuO遽譱. Q揃脜皎Dq从棝娃<掵B鬢^a姩V 学,^h搮洄:ae硃0浥廢4f( 毸I母n攮\┐裦B(┶s0@ l罉謐H洝V0両Lг嘿(m播L傘v榲缮挦 艎铥t[讃熕m]藁僠;纡a蛑貴u39匙к砦鰳狲`蠏R迟E贚}議訪T杍杢U癠傋鵭臎6謽<肶4⒏~璼:湵5ec呢,咷%矆e笇I硍(T D.蟀|棛)矶}附7弛詇v漶t局tg馁;g;~*軾輣_?徽P;踔y5 !a:芃TI ù佄 ま>i唟B髝9Lz涴埚P]$i蟕H甏TYtYm獈.Z縰種L燷炋+沜D0#WYYPe匧I哿亿B鈫y胶C y徣s  3嗣h+L8IT痢R鬛窜;愽L耻6!;樛鈺捷X穀恍圏=Yq遅U泔e;壪u{< +社陟&胓"Y0=<>Q8n▋蛊脥貐鄺疐饏暼!巉s榦 N鵸N駡諬H:馋癲M"岭毮7$其M"慒讐c_候:瓳蘬sUp}-g2$!暬 繞{p毯yv/竲富b9痰剆尤hi*賦霡o囵穑╕潄$到f馿87坆乵咙7Kmy澋覛χ杗 A@-兰-劶maD炗4⒏!f0 Fcfq)\ 廕$G薺L Lenw蠵{p0浟朊.鎻0繘錰u4(嫔)辛襔BZ噛街C 瓘萻舥Z79P秉|!{醄箪愿繨8T*(Z幰 讁:?c燩阃i助 曄e降:遌鷀A劔嫕)逫'溜%*擸縖掕t誘涋楙銔駋xB桊埧レ[婝gc9|K*膤S狲z鸱賆徔夝昌飾区Dv>Kcendstream +endobj +4672 0 obj << +/Type /Page +/Contents 4673 0 R +/Resources 4671 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4575 0 R +/Annots [ 4675 0 R 4676 0 R 4677 0 R 4678 0 R 4679 0 R 4680 0 R 4681 0 R 4682 0 R 4683 0 R 4684 0 R 4685 0 R 4686 0 R 4687 0 R 4688 0 R 4689 0 R 4690 0 R 4691 0 R 4692 0 R 4693 0 R 4694 0 R 4695 0 R ] +>> endobj +4675 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 713.9553 210.8161 724.8593] +/Subtype /Link +/A << /S /GoTo /D (a00144_g5323320b7316647042016f17c4e881be) >> +>> endobj +4676 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 675.2769 185.9198 686.1808] +/Subtype /Link +/A << /S /GoTo /D (a00146_ga4360412ee9350fba725f98a137169fe) >> +>> endobj +4677 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 636.5984 198.084 647.5023] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +4678 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 597.9199 213.1775 608.8238] +/Subtype /Link +/A << /S /GoTo /D (a00146_gfd5ebb56a1bd1da9878aa886a2075e80) >> +>> endobj +4679 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [242.9955 597.9199 285.9441 608.8238] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf703683056d2bfa5c81fa157dcb20fe2) >> +>> endobj +4680 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 585.0564 222.4327 595.9603] +/Subtype /Link +/A << /S /GoTo /D (a00146_gbaf0bb2b6a4424b4eb69e45e457c2583) >> +>> endobj +4681 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 546.3779 205.2871 557.2818] +/Subtype /Link +/A << /S /GoTo /D (a00146_gf20aaf4292cb0d2a1b10bc0a568b51fa) >> +>> endobj +4682 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 507.6994 218.0093 518.6033] +/Subtype /Link +/A << /S /GoTo /D (a00146_g2c64c8c36bc84f9336f6a2184ea51883) >> +>> endobj +4683 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 469.0209 242.358 479.9248] +/Subtype /Link +/A << /S /GoTo /D (a00146_gf5c2ad5acf3cc23b8262e9ba6a15136b) >> +>> endobj +4684 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 430.3424 211.932 441.2463] +/Subtype /Link +/A << /S /GoTo /D (a00147_gef14e83c046e19ab9fe9d1bbcca276c2) >> +>> endobj +4685 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 417.4789 194.2086 428.3828] +/Subtype /Link +/A << /S /GoTo /D (a00147_g1a1bc437c09ddef238abab41d77c3177) >> +>> endobj +4686 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 378.8004 207.3095 389.7043] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8411c95a4d89367ad2d9d6bde1a3d537) >> +>> endobj +4687 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 340.1219 185.9097 351.0258] +/Subtype /Link +/A << /S /GoTo /D (a00147_g61db1dcb7c760e4dd5d60bf4e5576dca) >> +>> endobj +4688 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 301.4434 185.9099 312.3474] +/Subtype /Link +/A << /S /GoTo /D (a00147_g88d2ccf7cd821f89d9a8df7e3948b56c) >> +>> endobj +4689 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 262.765 182.0444 273.6689] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +4690 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 224.0865 196.4303 234.9904] +/Subtype /Link +/A << /S /GoTo /D (a00147_g64a238a5c02640a7a4aef004163aeb47) >> +>> endobj +4691 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [371.6975 209.5536 410.5505 219.4589] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +4692 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 185.408 190.333 196.3119] +/Subtype /Link +/A << /S /GoTo /D (a00147_g81ac47cee1c18f6aa479044069db7ca3) >> +>> endobj +4693 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [377.83 170.8751 416.683 180.7804] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +4694 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 146.7295 224.0965 157.6334] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga9de254b8aa308eb4aab17efdde622d2) >> +>> endobj +4695 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 108.051 198.383 118.9549] +/Subtype /Link +/A << /S /GoTo /D (a00147_g26a14b8dae3f861830af9e7cf1e03725) >> +>> endobj +4674 0 obj << +/D [4672 0 R /XYZ 90 757.9346 null] +>> endobj +4671 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4698 0 obj << +/Length 2146 +/Filter /FlateDecode +>> +stream +x诃沒o燮嗭+鬎=褯mN{燖N鉺"褗It%*廂胂]/狄潭+脲蘰艏.I 啬褖Q8!鮠竟髲7lx 净岿躆q氹升1俧Dq'鲖_μ贳;罡0用敕~ㄨ~X瓫~舄6投泆玽{龥擐碈UJh揀y笏ot拆战埂D8&O%9>佘H.鈰跬粵8 雾湦奨a'w荇粨 +13刬s8椈鍏TQ笠-憉婹Mぐr抎縭甆{括邐+1朥E枟I猕帚糭-歘)遨.51馨撲岘輗悬湕鮔E躊芶貘鹟栄i(J# 覈 +(G䥽暉A 诹 饣\}珸褖hy瑎;B嵆/AC欗{_<頽絪歔Ζ烿韆縹诀^镚媃7隚餂f蹚f骩N讽雍Y,鸉~{io碿7hi灼EhO2旜< @;7>蕥>N^A;RF7>o粉f迺磗*夊致}H*2Z 鞿 "え=珿躅胮.N亲鲚)岍c棻V渪重u嶩苪斸\g!級AYm蘧K斆敕椛V朒&誙孳R*"貿啌勅嗴&搀d彃讗 桻膷d玭5[o鳆蜮 ~趯4"⿶ +蔴U| J攓獟風 e涱稹#龐挽箨皦 o%.7橼醻踝癕貜熮;頙?噛8低a/>"鳛99兆駠wvNb䦂2Y@p掬"蟪t8熤_ba)盶洬Fh阊T仳6蒔娩 yFyq脤揥) sX娄=NrEM~~陦nHR!晹癣0爣'1S椤L y(蔅?鸃猬h刚艨Wo霗枩P怜s僆2cc:蕄Τ觩弈t灧傞Q︶2姼9语W3鳁x6$捒寲擖u渃:j逰姘麘 闘 Ae顱#毲酸A穘鐀Z鲡2駘卽W!瀲蘞$J| 迮' )颫蝕壸墀N6$捒塤7唷繄牏俓 P瀌w%蕪O 鴥考O鴠崴頒_qr玫$R^2W#伜"蕄Wd!W纘+蚣%痲\F7-g嬇盥 Y4!霦磋塩n?%推,髄,@# 胯牣諬2R攨士o符nw犌@|橅窼 B觾逩5m[=磭]紶5驵奾u潷鼂w豐8I啗# 螞虘绛0(y92姼/嫘g葆$&|D` +K_D鸕wdc檷U6仲谸n騭$bY澧<^*蠮焧暀氄蛎-觲镢]墽龈砚不樥*s{1lBaOG$j< `/$o醋(/n痲 +{!eq晴炦珥c榺<棆j?E梸v#⿶2蔴裦媐 v仫鏍擥橌蔳剅5d(臊瘌\yVIK憁鰻鮡 HK讁> 遨嬢剫*/  ,i齳N⒖y,G[怐p"V~f>@9%溮蔳唕5D}旛詏g脥錇恣"侠)惲W!趇"づ灓*旇,@44'艍e 4 褯冼9獏鹎6$\B"誣菋忕"a骒E.闟2}龄H W蚧坣3聠京<曇擤6籝z4..妰7a潂^0>遬 綢)奋O榲殒跎Wn鈓鞼礴鏴S|誇1q甂`0餰ndstream +endobj +4697 0 obj << +/Type /Page +/Contents 4698 0 R +/Resources 4696 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4575 0 R +/Annots [ 4700 0 R 4701 0 R 4702 0 R 4703 0 R 4704 0 R 4705 0 R 4706 0 R 4707 0 R 4708 0 R 4709 0 R 4710 0 R 4711 0 R 4712 0 R 4713 0 R 4714 0 R 4715 0 R 4716 0 R ] +>> endobj +4700 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 713.8976 188.5699 724.8016] +/Subtype /Link +/A << /S /GoTo /D (a00147_gde6634974418e3240c212b9b16864368) >> +>> endobj +4701 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 675.1037 205.825 686.0076] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdb971fb1525d0c5002f52125b05f3218) >> +>> endobj +4702 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 636.3098 190.8911 647.2137] +/Subtype /Link +/A << /S /GoTo /D (a00147_gef6c4140c632b6a406779342cf3b6eb6) >> +>> endobj +4703 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 597.5159 195.3145 608.4198] +/Subtype /Link +/A << /S /GoTo /D (a00147_gfbd5fc486dfdf6bf6fc9db52b1f418c4) >> +>> endobj +4704 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 558.7219 200.8635 569.6259] +/Subtype /Link +/A << /S /GoTo /D (a00147_g7b2ac4b18bd2ac3912fe67b3b17158c3) >> +>> endobj +4705 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 519.928 191.2995 530.832] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +4706 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 481.1341 180.9385 492.0381] +/Subtype /Link +/A << /S /GoTo /D (a00147_g58bb90796c1cdad3aac2ecf44d87b20e) >> +>> endobj +4707 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 442.3402 204.1906 453.2441] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga87feebc7cffd4d8300e776cf64e4fec) >> +>> endobj +4708 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 403.5463 180.9384 414.4502] +/Subtype /Link +/A << /S /GoTo /D (a00147_gb5fecbc62edd128012cea0f47b57ab9f) >> +>> endobj +4709 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 364.7524 214.9411 375.6563] +/Subtype /Link +/A << /S /GoTo /D (a00147_gf2dbaceb10c67783a115075b5b6d66df) >> +>> endobj +4710 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 325.9585 203.0756 336.8624] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga20812098a4663c8a9fc4ce8e95391b6) >> +>> endobj +4711 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 287.1645 203.6235 298.0685] +/Subtype /Link +/A << /S /GoTo /D (a00147_ge5ab69d40013e6cf86ef1763c95d920e) >> +>> endobj +4712 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 248.3706 190.8912 259.2745] +/Subtype /Link +/A << /S /GoTo /D (a00148_g87f0b54ade0d159fba495089128a4932) >> +>> endobj +4713 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 209.5767 195.8725 220.4806] +/Subtype /Link +/A << /S /GoTo /D (a00148_g53fbda0e8c31d4882294c8dc3cb5f487) >> +>> endobj +4714 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 170.7828 215.1402 181.6867] +/Subtype /Link +/A << /S /GoTo /D (a00148_g769512993b7b27271909d6daa4748b60) >> +>> endobj +4715 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 131.9889 213.028 142.8928] +/Subtype /Link +/A << /S /GoTo /D (a00148_g210e629f7252e4bc8458cbdf260b3318) >> +>> endobj +4716 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 93.195 234.0589 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00148_g6b16e0bac41821c1fbe0c267071642f0) >> +>> endobj +4699 0 obj << +/D [4697 0 R /XYZ 90 757.9346 null] +>> endobj +4696 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4719 0 obj << +/Length 3007 +/Filter /FlateDecode +>> +stream +x诃溮r7嗭瞛嵿|葷-蓭戅靚扲e゜搸H篷>l3 擪晩Ei~踹殳13b#c#GGF鈩裕汷t袅筐莀@莲倭w94祝佥&俧Dq艷驰_菛p7y?=|O罘呔~8呔簻咄'處鐙涴#k3k&肯~<8%.9%4 ;蔸$<燚8獸_70瑛栌佷"~篑`z餾姵=谤吘("V匮 n讹 + +10蛚U腐佱(妿u-CQ?H嵆( +9\~鷟8f苷a齟箎qr饼z}{=綵蚖}yXw鮗套煯W~檅J唝S&>>/e嚒SM0b]杼暵蔘拝7绐LWb鯰礢諀$巎濢v1/胎&痉貫y8豇∮\4⒕朏7め{醩`x@'脵蚬伸U"*)斞6á敷怔熪朰=辴疊B 〓煻迖j,J采e铤~瀂虮;烨Hw|y 嬇0 邡S|Y冎^(が $ 82啁`韧C%"n>蕿s扻埅殅-刞庼尖鎹=訶螱Y肉忉f麻鴱絭|蠌县7膣s艏d動蝽=淆昞0U膣(<堳<顩z6魘f抟髕E芗琦p希U仵o+-垽阚;^Q"2祹彶z莾X倾京恪oC莋-彠Q耐;^w渋聕撲>>s恫7軄eu顦#鄮&钚穪{f蘼O篃依\m`駟秔7狫.淵bvy*桂M澍疖 +0銺VG9涓oB}恎-锐4姼窨OOfd獔驦"$U艥S雼K躤eN塧儒ywc堠陥;@5M乮_柢蚢?j剓qm笻髼U-5(ba +r筢gW?W3拤a癅憤:Z芭}\枸@73o翄膷邽O廗聨阾QU1鐢9=攨_瓎?E剅扷);逪9蟓S瓮(W(猞樨藟︺炗4躏P(IUISA$笥,褀5c蒺 +0襋V'9腋o" }Hg-ゑ4姼i<煙螏 +臆j櫰霅T笭D误tY鳨沞 宼斦Ic巰4顩HC覚y i<"n$=;9=>:Wi鎴1~妱!*䴗箴┰^锘F 倒H宼斦Ic巰4顩HC覚y i<"n$]]Q吷杝,幹#猨夬9櫞,閇E 蓧莼+(p7嚲 3鄕E\8/K葨舤QU12n樗蘽k +{2`悾s恞6@翁[ 鉯q嵋/钒;灃鐀F沭r$U%.デl魇!鷛3Mc肹駧:o鹌}o枸;3o釐膷歼]\M徬6S厄k$鍿X-挭W7wy綋3?c鳁勧}P(繾GY6`憔 6鬽潤防朴(釨亟gq咽2IUIsM槾6O@鮻嫖/釘t扷A;:蟓兾@W(鈌'錬藯KQ"$U=靱鷫浫輎ec圕&噜8聘S#v0j拘/毭~w鸁倡嗣醅)抝I剾Ld鎪搈≡_棥eu紭#鄫&佬穪pf迋O !r:e盟怲 T3擕魍饭鈩 +>|I宻斦9c巰3顩8C螜y g<"nωa顸觏婶嚍Sa棜嵴H狫\h庀6O和#T獒峆(纏GY7p憔 7鬽罎櫡嗥(釬墀O萎~0N/OfW琽誼5挭扚槆Q镈濬邉{4lx7 +0躋V菎9芨o }pg-格4姼0n7毱7L谕aT l (n7釂 3躼E\8>9{S^趁U梳UH獖}8*賬> 1顔7Beu虡#缹&绦sf迋O 7Bw煤詫X'-^尋猟凉$满%t朎咩蕴聰剉扷i;逪;蟓游hW(釬趏_Ng裎羠d[聧Ux)挭扖槏涴Lm朇遟Z蘃聦綹C:赎1G鱉o胩紖5濬7嶌檎樗镺}鲀2i4^叅o!V漩B蛅x険o滰9赎1G鱉湣o缣紖3濬7稯?\\衄更e(m餔$U%呅\懅衶據,刘館(`s琿吣6拔蘙X鉯q覿F臛誛訐梜m鉕訂W"P釞 频m|軚%:W饿黙拝靏聩帷恍硍!撜海]?|紐1=)濾Q{{骄蘧zX碲麕鷻哷#*B&+锃穻ok/ 裈诮D*汿{币课祺*>埫峦&惟gy' +罞m$申1顩1鬽臋y 朴(猞彞/>lO軼'嚙}w搮O澭欴Q%. [;撶曳4rxw彷壀k1巙涡秮2毨^蘟鲁<躧彆!J$| <獴5侔韺萻#~{祥7酹M僗+Lp'复?墑幓僆$咛笄膈<>{逎蜲銒'L崯簅锞绎锅炗韜~!┗+艅玵篫魔w●壟碜e達?QL粽 Oendstream +endobj +4718 0 obj << +/Type /Page +/Contents 4719 0 R +/Resources 4717 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4756 0 R +/Annots [ 4721 0 R 4722 0 R 4723 0 R 4724 0 R 4725 0 R 4726 0 R 4727 0 R 4728 0 R 4729 0 R 4730 0 R 4731 0 R 4732 0 R 4733 0 R 4734 0 R 4735 0 R 4736 0 R 4737 0 R 4738 0 R 4739 0 R 4740 0 R 4741 0 R 4742 0 R 4743 0 R 4744 0 R 4745 0 R 4746 0 R 4747 0 R 4748 0 R 4749 0 R 4750 0 R 4751 0 R 4752 0 R 4753 0 R 4754 0 R 4755 0 R ] +>> endobj +4721 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 702.8842 216.9034 713.7882] +/Subtype /Link +/A << /S /GoTo /D (a00148_g969d7fff37a979737da045e0d538a9bd) >> +>> endobj +4722 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 663.9813 195.8725 674.8853] +/Subtype /Link +/A << /S /GoTo /D (a00148_g22fa0681cd463191d7a01fe85d86996f) >> +>> endobj +4723 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 625.0784 195.8725 635.9824] +/Subtype /Link +/A << /S /GoTo /D (a00148_gffcd2fbe181e2aaefbf970551c302af5) >> +>> endobj +4724 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 586.1755 195.8725 597.0795] +/Subtype /Link +/A << /S /GoTo /D (a00148_ge23534479ead15af8ff08ace26a47fb5) >> +>> endobj +4725 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 547.2726 195.8725 558.1766] +/Subtype /Link +/A << /S /GoTo /D (a00148_g165b603ec150e26efec7be199c9c2901) >> +>> endobj +4726 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 508.7434 180.7494 519.2737] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +4727 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 471.5241 169.3122 480.3708] +/Subtype /Link +/A << /S /GoTo /D (a00148_g118e9d76568ab81ad97f138d4ea1ddd2) >> +>> endobj +4728 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 457.4674 214.6224 467.3951] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6bfa488f87f68a6f7f4a3efb9e45eaf8) >> +>> endobj +4729 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 444.4916 216.6746 454.4193] +/Subtype /Link +/A << /S /GoTo /D (a00150_g39ce739bd352d7e348e37395ce903e43) >> +>> endobj +4730 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 431.5159 206.9409 441.4436] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf848ce44c810492e7a35c2d23a429f45) >> +>> endobj +4731 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 418.5402 193.6609 428.4679] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf0ed78fd2be24d849cdd5af75e3b2674) >> +>> endobj +4732 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 405.5645 200.3059 415.4921] +/Subtype /Link +/A << /S /GoTo /D (a00150_g57e6dc1d58a36d0ed53a3dd29ccc5798) >> +>> endobj +4733 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 392.5887 201.9198 402.5164] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga4c4310e54f18541b09e1e251fe7b22d) >> +>> endobj +4734 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 379.613 229.0778 389.5407] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf84316f469ce0726985c0702db49a989) >> +>> endobj +4735 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 366.6373 220.769 376.5649] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2d3ba4b14d6d2f6576f9b547800b7945) >> +>> endobj +4736 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 353.6615 193.9898 363.5892] +/Subtype /Link +/A << /S /GoTo /D (a00150_gabc40c09f49d15acb1b1a7f02bb3a807) >> +>> endobj +4737 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 340.6858 199.7479 350.6135] +/Subtype /Link +/A << /S /GoTo /D (a00150_g041aea91aa6ef84dcc6cac3c51db9b2f) >> +>> endobj +4738 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 327.1074 243.3742 337.6377] +/Subtype /Link +/A << /S /GoTo /D (a00150_gd605357e29affb0d3104294c90f09905) >> +>> endobj +4739 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 314.7343 252.8785 324.662] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5c97ae587595b5444be80f5ecc1d3382) >> +>> endobj +4740 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 301.7586 224.6544 311.6863] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf0ccbc3bb2a3ba1ebc255c7b3fcedd24) >> +>> endobj +4741 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 288.7829 207.4989 298.7106] +/Subtype /Link +/A << /S /GoTo /D (a00150_g28eda870cff3d8e3cf2949e6f57a502b) >> +>> endobj +4742 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 275.8072 221.3369 285.7348] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga5e3c856b86725125d19fccc34cd9eb5) >> +>> endobj +4743 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 262.8314 218.5673 272.7591] +/Subtype /Link +/A << /S /GoTo /D (a00150_g8af482dec973db57d8b3bd3f69461488) >> +>> endobj +4744 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 249.8557 234.7964 259.7834] +/Subtype /Link +/A << /S /GoTo /D (a00150_gae59b70658f28ee6e998eaaab05e423f) >> +>> endobj +4745 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 236.8799 224.5549 246.8076] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga533c394b1fa0030205534befa31c525) >> +>> endobj +4746 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 223.9042 224.5549 233.8319] +/Subtype /Link +/A << /S /GoTo /D (a00150_g160128ab5d2ea3cc497b91ee4eb4ef99) >> +>> endobj +4747 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 210.9285 211.9222 220.8562] +/Subtype /Link +/A << /S /GoTo /D (a00150_g64d9affc680a445d708234e70450477b) >> +>> endobj +4748 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 197.9528 222.8911 207.8804] +/Subtype /Link +/A << /S /GoTo /D (a00150_gfff0ed43201bf1e2020de1a0d6cac070) >> +>> endobj +4749 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 184.977 219.2748 194.9047] +/Subtype /Link +/A << /S /GoTo /D (a00150_gd135fb0cfdfb2c212f0f51865a3640e4) >> +>> endobj +4750 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 172.0013 214.1439 181.929] +/Subtype /Link +/A << /S /GoTo /D (a00150_g13dfcb4a5f920e108253ade527a66cc2) >> +>> endobj +4751 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 159.0256 211.7529 168.9532] +/Subtype /Link +/A << /S /GoTo /D (a00150_gde29ec025e6754afd8cc24c954a8dec8) >> +>> endobj +4752 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 146.0498 238.2734 155.9775] +/Subtype /Link +/A << /S /GoTo /D (a00150_ge0825474feee11b4e038bfe71757875f) >> +>> endobj +4753 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [289.3868 130.4285 318.6011 140.3338] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4754 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 107.1469 229.7753 117.0746] +/Subtype /Link +/A << /S /GoTo /D (a00150_g359951eecd80541c2101f628a9da9146) >> +>> endobj +4755 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 94.1712 223.6882 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00150_g517c770991459cc62dc009c0d3875c6a) >> +>> endobj +4720 0 obj << +/D [4718 0 R /XYZ 90 757.9346 null] +>> endobj +4717 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4759 0 obj << +/Length 3015 +/Filter /FlateDecode +>> +stream +x诘\踨7}譝癹_孄%弅菈]泹諵棆)塗(蕩麟13箃廲m笿$3}}C7f$编餙,_8鉞P..oO#'Ⅺz /K?/NR咵`罦桓竕$X翆rq眫{*?[ ;}xuo ?尫o^no6砘囒皖:n骰硍疧究却漋FYI8y麕/譅蓦蜹餱>p&B悑-U鷓s蛩矞鰦鎮迸暖椧礙橽絼:xU,^p舜騴慞縄i+緱F- +q "H協乕[扊m靳峴观 樀eN:Q3莖;葲R't鐺:挈3蚈?.蝿?/嘻:I移V \)-笫欽崞BJ8匹钟.槸寁6芚x缤.yg"熴p\崄躨椏z8]),'瑨Q:RY&MO闱芪5阄鷌添 Fc,軒骹窏3躛懴q;@nr臌芴=苆 +E蠯翙諁z蒅黮僠6濱?南Fe|3翛黒褚~g鴻Pc 7犄福E`Pn唽"藺D渣c鵯剮;v 傈渀礋1坡8o鰏;孟?鉰 &?_<燆3tbN E餕仿拯 m 揓媔G萄 F;c,嶓fG椉3]懴q4@頲釣Li>A 慟Rq ){鄦We +嗄XP嗓穎:( + F芚螞儮錆鶞犂葈 娚鼑[K鐀Cd 鑲"腽旳S蕠闋(XP$c8o姃wFPT鋝Wc 坟噻廻P`(锗1(詀=羵12^p4&5^9}n侈\輳D嬹掗+%墫 #e|7EK舺l9扦3=f$TZ8_j脏A伧繊W.=~-%攕碶撢%\鲱N朊Pxdj肧3瀲櫞+ 懵1a迓X铏L5廌G媇鄦兖木*.]槑⒐;Td~彻;)w汗肯mMA輄弹s:6.`:薒0W河YH礇钤峍q海鲫 %螞璪瀾h +}3 Y'甝N碕&,昲槆奃C葔V蚩躏茒=@m迎A 纀0凌膟s 柤T V3bW/暜1醏智L心#cQr胉n皵7㈡剸眰y-qGe諆@ 豖"跛囕e,礳潎v +鈜zv)綠B1∪H蔫'MqX拁:摪塴bh聜&瀻'T鐺辪G省0 忽"埈g殯8N*i齝親'雕-乾徒D#粄5&H踲疵vu除o迸_uQ8箯k阮`鞊l鉠乒ь沝竻@,rq%/鳒嗯萂醷9n颋q亯#5BBQ鬪0c6>駙譍 愷}箵綄勜艵tE荹蔓抟壃mN'綒櫟粟{偓呚國譕挾 +-au+萌-"iK穰喘x纱g-∨@nJ蹧睚qf璮R(K (vg欍衸远蚙-)莒'<チ@.挼9豏癀gA9瑞抟秭#柗 +蕼岅问嶄m咵 ~96K仡>忹铛簕村⺪s箥Gx泆Q擵3i殧6)a╗F!Ki7蒏='-rSJ?&捼k榞P+$棚-L*6衄?氃p曌z炘/w:!椰 囊3 柭@*壣ぶ)G5澶n褣Jk搝蒳%V=MN C瑆TN'澯吚>#>)JMi3吭.孳鍉77c祑誴橯Cnnv^,借ph屻<=揲'<碟佨r鯖藨瀡A 怮=tL(琥) 堚y芁d<〢_.y8c8 $姝6!蠸 } sh屜=腚ǜ呟怪蕏耑C箵錣衊圠(奨)彈\1#綕Y 4V,j鸺K挭"楒>彭甄臊}|赶U橮鎡睳 檨Y騃甏剳蹷縃蚤 #雝)榻轙+^谗g鬪箯 粦#圼萚 Eq;坣▊滇 +BNAS冢WC磂眅鈊镻f:疄? 朘襧f綔桱嗓刯跍h鉌彣[wp纂p.mR%澔= +;巰鴆N(5g螒нF鏞!饹B粶e蚻睘鑥B:T薳F ^茿曣Yg仭只乽愘⒚S--佰淚s鷜鳫竵龣2BF*H鍣2"c龓0佛0Oi0怟;q=毎@Ba 僡躶9X袯ht擃蟋曬劦唕c稲Q雌3藚玦T晢y5鱥峌k藅ja瞠^扜匿i唟q>2鷓鮨8椛躩畞20蠵畲伂aF AX((b脎坭1q$`椢貔↗搘.J栂D銛oNX$\睮昲6煌l懂蠠Jo^酋> endobj +4761 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 727.7951 225.3421 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf72d7b9a737707dcfb2c41fec2b6792e) >> +>> endobj +4762 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 714.8475 234.7566 724.7752] +/Subtype /Link +/A << /S /GoTo /D (a00150_gad0321f4c570f9983c6de81ece3ddc20) >> +>> endobj +4763 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 701.9 209.1527 711.8276] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6bc12c6c7b56f73ce5d57abfdcdc6eb5) >> +>> endobj +4764 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 688.9524 220.2212 698.8801] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb948296aea6b6b3aa1f156799c4d479c) >> +>> endobj +4765 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 676.0048 218.5673 685.9325] +/Subtype /Link +/A << /S /GoTo /D (a00150_g17d111686f98e4c09db73a770ac3f1a4) >> +>> endobj +4766 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 662.4546 229.0778 672.9849] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6f2b90c597ec23f39ec716ccec11233c) >> +>> endobj +4767 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 649.507 227.424 660.0373] +/Subtype /Link +/A << /S /GoTo /D (a00150_g15f2617f7dc1713f9d10282125c6027b) >> +>> endobj +4768 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 637.1621 227.424 647.0897] +/Subtype /Link +/A << /S /GoTo /D (a00150_gee37386b2ab828787c05227eb109def7) >> +>> endobj +4770 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 579.341 170.966 590.2449] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4771 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4642 579.341 229.3566 590.2449] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20ceef9d0868d391c2f33041b02cb1f1) >> +>> endobj +4772 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 540.4944 170.966 551.3983] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4773 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4642 540.4944 229.3566 551.3983] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9ebb4dac683163840eab9c6c41ad61f7) >> +>> endobj +4774 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 527.5468 204.1712 538.4507] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20ceef9d0868d391c2f33041b02cb1f1) >> +>> endobj +4775 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.6693 527.5468 257.5805 538.4507] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4777 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 470.7019 166.9111 481.6059] +/Subtype /Link +/A << /S /GoTo /D (a00145_gc48ed5f0d27721ef62a3ed02a5ad8d2e) >> +>> endobj +4778 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 431.8554 180.1912 442.7593] +/Subtype /Link +/A << /S /GoTo /D (a00145_g22f140b02c354dfebcc7ad481c3bcd68) >> +>> endobj +4779 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [184.0068 431.8554 208.6941 442.7593] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4780 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 393.0088 175.2098 403.9127] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +4781 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.0255 393.0088 203.7128 403.9127] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4782 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 354.1622 185.1725 365.0661] +/Subtype /Link +/A << /S /GoTo /D (a00147_gaa585784b0914cac1d37f07f85457008) >> +>> endobj +4783 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.9881 354.1622 213.6754 365.0661] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4784 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 315.3156 152.9837 326.2195] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4785 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 315.3156 211.6433 326.2195] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +4786 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.459 315.3156 268.3701 326.2195] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4787 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [307.2043 315.3156 331.8917 326.2195] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4788 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 276.469 171.8826 287.3729] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +4789 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 237.6224 172.9089 248.5263] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4790 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 237.6224 236.859 248.5263] +/Subtype /Link +/A << /S /GoTo /D (a00147_g79c4110211247df3fb30b8cf1c4c02af) >> +>> endobj +4791 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [240.6746 237.6224 293.5858 248.5263] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4792 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [332.42 237.6224 357.1073 248.5263] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4793 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 199.1494 138.5977 209.6798] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4794 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 199.1494 162.6772 209.6798] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +4795 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [166.4928 199.1494 191.1801 209.6798] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4796 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 159.9292 183.4989 170.8332] +/Subtype /Link +/A << /S /GoTo /D (a00150_g266263ac78a1361a2b1d15741d3b0675) >> +>> endobj +4797 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [187.3145 159.9292 207.0205 170.8332] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4798 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 146.9817 138.5977 157.8856] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4799 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 146.9817 189.7953 157.8856] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb6683dd83fe1c8de9a24086d4b69e907) >> +>> endobj +4800 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.6109 146.9817 218.2983 157.8856] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4801 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [241.84 146.9817 266.5273 157.8856] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4802 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 108.1351 138.5977 119.039] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4803 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 108.1351 197.5461 119.039] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2addf34c7d457c1a7899a7e2171ef1e9) >> +>> endobj +4760 0 obj << +/D [4758 0 R /XYZ 90 757.9346 null] +>> endobj +4769 0 obj << +/D [4758 0 R /XYZ 90 596.0036 null] +>> endobj +4776 0 obj << +/D [4758 0 R /XYZ 90 489.648 null] +>> endobj +4757 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4806 0 obj << +/Length 1902 +/Filter /FlateDecode +>> +stream +x谕Z踨6}譝鑁a`q蟘.$3m幽镃]弴杁[[vti浛顱"`C牵1)粄v愗愨Z:訰藚Ntx噊瓣q佅瘊bpvvh塙爢粉# /#C缼 恡礄?熱嬡飊乡齿甄夙l9ff4[L躘F1c荳.蚂9ss\^厌I~P颅懨狂f- 缚y|瀑=貇`暷p3,@颲乑` S乆蒁费H丗F銘UDp#鍸'l趢QH>l(5 赘{孓Y轚>擒㏑YvWc穉陑茛5Q攭$= 翿潷'(X枮钦橥煰讚缟真盜(%VsH,*C('Bq垧曯1醒觸娮蒥鑘 +刯 +\蔫-I(5X|j退爭蓻騛瞴(讜苤髡排汷粙蓸裳齦庳n偷}鏖秮.w1#賨鬓|膤}銥n狾晪樗擈鵼Z甂襡eaL霌HMi傽3R 艾遭彇Z啙钦廿霸2<甆=紮vJ-褾,<(3=J绾峄濨C<轔h1:!K 黼嵭$P\舸A匂暈1T焺+f\炠曻咔F錼^<蘓{姺磼唥A梤c@B朥nj苾暃a鐀5v砄窣P杁譝竆b猡&宋汴膦Xj扵梼~N:-爎+凖杔L莽胱.瓤腔熰+nァXb5魦澬n92^|熀U璀呁甓gel冤5,懺饟5)翖虸妹蛞躢 +暃7}<疧苙畛s\T溋 ヂ,惶My嫚 倝襏醩T[銁T9矱{j↙[蕄bn$ +g 3疛翀0膛9破u逼佰U嫥F绽u<'鍅⺄晩愍j#Ya妋N墥4@霿s[藝v4囫Y?. f楊識钭2<甆凗a秇鼱:I癙@岆 x軒hir粬%d肪璕祕B]`兄瀎o"皅5落&枍鮴溃c=梦鉰鞙m'O媣4IlI咵@电 &AkXf_齈瓵ガ1o麝=>氟指烧[ i廄VrYFs槚8,箥I+撏r9鎧4[瑳讣倌U昻夃>翃裂鑆R◎y顇}$yD则觇ψxid怼穓/鲩\@奯@櫃璅W`霞睚唿/_hBt烝莯T攛X>L3'iv!Pbv蓾b娸; ;彨硈}騞隆EQ+B]s渢Y@&莑)卬樻Rt fjM厦滼&磐燬b巇rT趭宅:z箎Z6)団f^ヒ侦鷍浨焼'諄&譛wv0~C樕6 N<嘌律绑魂魆氄榝$"犣笞)攔薨尉&腵e-雝[楞sh崨p?  p靟︽:9戫D辗帡C襹昧q鍰 杙瀔8<*/垪釒證抁怌D瓱)霏&;)E擘竕谦D +撯XPzv分>窭X雗>8W愝R鉧鶒I蘹x踏賲爥9棳皱狠J姈銗じ眨Qb纝睘¤q{)禨 \舜状&F躤7n{7`螒筺!丽">晏_;誾>.鰷Ql覱T;o 賐`貮<:P3<.%ж%g貀\屁k驶站塬p硵$Y +Ty;a#R+擉瑖= x糶屿俫cv蝪箸r:]铖皰2,鹒!鱑6艘鉠,餆P侨砋s"#珺逭隑d1 凹彛忳q歖餼坍煆,鱭歟餼撳b秪,W遉.f"I瞤嬍籜置*镟椺庽o抁poD瓱w)钴$培砰r痻轂3"堫珸竌sY\韰Qd侂誈鼺q?8~≤/覍%#虧柛ソ-f藃鞳$黽?麐忣鋌S0覹繽葺オ:3嵭0Ro惙Ok$" 劍跤endstream +endobj +4805 0 obj << +/Type /Page +/Contents 4806 0 R +/Resources 4804 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4756 0 R +/Annots [ 4808 0 R 4809 0 R 4810 0 R 4811 0 R 4813 0 R 4814 0 R 4815 0 R 4816 0 R 4817 0 R 4818 0 R 4819 0 R 4820 0 R 4821 0 R 4822 0 R 4823 0 R 4824 0 R 4825 0 R 4826 0 R 4827 0 R 4828 0 R 4829 0 R 4830 0 R 4831 0 R 4832 0 R 4833 0 R 4834 0 R 4835 0 R 4836 0 R 4837 0 R ] +>> endobj +4808 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 713.8674 138.5977 724.7714] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4809 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 713.8674 201.9695 724.7714] +/Subtype /Link +/A << /S /GoTo /D (a00150_g85b65e38aa74eba18979156f97a94a87) >> +>> endobj +4810 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 675.0131 138.5977 685.9171] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4811 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 675.0131 204.7393 685.9171] +/Subtype /Link +/A << /S /GoTo /D (a00150_g7023a34ba9e9d03b5fbedbcb32924453) >> +>> endobj +4813 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 592.2581 133.6164 603.162] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4814 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 592.2581 166.9014 603.162] +/Subtype /Link +/A << /S /GoTo /D (a00146_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4815 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 553.4038 192.0768 564.3077] +/Subtype /Link +/A << /S /GoTo /D (a00150_g561b8eda32e059d4e7397f776268cc63) >> +>> endobj +4816 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 514.5495 138.5977 525.4534] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4817 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 514.5495 170.976 525.4534] +/Subtype /Link +/A << /S /GoTo /D (a00149_g12a33f0c09711167bdf3dd7d7cf8c5a1) >> +>> endobj +4818 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 475.6952 152.9837 486.5991] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4819 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 475.6952 200.0271 486.5991] +/Subtype /Link +/A << /S /GoTo /D (a00150_g788ffac72342f6172343d7f8099cbe1a) >> +>> endobj +4820 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 436.8409 152.9837 447.7448] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4821 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.4818 436.8409 196.4305 447.7448] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf703683056d2bfa5c81fa157dcb20fe2) >> +>> endobj +4822 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 423.8895 133.6164 434.7934] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4823 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 423.8895 177.0532 434.7934] +/Subtype /Link +/A << /S /GoTo /D (a00151_g2a0cf5d86c58fab216414ce59bf1fea1) >> +>> endobj +4824 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 385.0352 172.9089 395.9391] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4825 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 385.0352 239.8777 395.9391] +/Subtype /Link +/A << /S /GoTo /D (a00150_g210f227119fc972e6222c9cb452e15a9) >> +>> endobj +4826 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 346.1809 172.9089 357.0848] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4827 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.4071 346.1809 236.281 357.0848] +/Subtype /Link +/A << /S /GoTo /D (a00150_geb533744817cf6695d75293369c2248b) >> +>> endobj +4828 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 333.2295 151.3294 344.1334] +/Subtype /Link +/A << /S /GoTo /D (a00093) >> +>> endobj +4829 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [151.8276 333.2295 185.3713 344.1334] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9ee50a40597e67fce96541ab56c3b712) >> +>> endobj +4830 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 294.3752 133.6164 305.2791] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4831 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 294.3752 172.6397 305.2791] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb4ef6b00924990e7a293f66715b6d1d1) >> +>> endobj +4832 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 281.4237 166.8215 292.3277] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4833 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 281.4237 221.3367 292.3277] +/Subtype /Link +/A << /S /GoTo /D (a00150_g7d3673f52f5846b6961d23b150decd54) >> +>> endobj +4834 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 268.4723 166.8215 279.3762] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4835 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 268.4723 220.2307 279.3762] +/Subtype /Link +/A << /S /GoTo /D (a00150_g3237be0d9ec457de0177689ee23c0d5c) >> +>> endobj +4836 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 255.5209 166.8215 266.4248] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4837 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 255.5209 213.028 266.4248] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20df5c82f2a15a508c19e505b5d9de2b) >> +>> endobj +4807 0 obj << +/D [4805 0 R /XYZ 90 757.9346 null] +>> endobj +4812 0 obj << +/D [4805 0 R /XYZ 90 611.208 null] +>> endobj +4804 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4840 0 obj << +/Length 1472 +/Filter /FlateDecode +>> +stream +x诃X]o6}鳢榊^~ 哸[0犽蛑")盦泅.%Q慏It",[圇^~@D"C颇p、魚A;氉k|款~籢技d&2(Β脎*"拌:CWkf彈遨w(.坊紐z}H他|_$碰癬}壕Z鼅荭mXI&齡襻2dw禒- %` 嬵俼鱡辐{馱Q5霚>;a畕 {捉觿cWR,非楕99瑻/ >客珬>蚼豚@寯Up,畭汪SpMy慲が)W灦GW, ;c`鉞师庴:Ow嫂C蔹p[&-虼(O 菄c瀗?R室m筄珕d8(Z +:讋蔊K闌.薀4J9茠擯!eE/嬐醫1 攽3極蔻F瞱4&1p璊%鱉彼龡衑緖▼ 衖\饽猌Q峜T胱_"黥G嚩k1B[ui{-i!cdK颐龕9 +I淁业(烠~4酸鐟9鞡22螇zj诠哆V*龆匡r瘹EP")o刿WЩ缶;~輒02几朷-鏙拭*RJ斸C*:T 蚮'MU瘖郆BL荮2C +磰葲l^L8 Y;氓S鲌恽蕯瀄簚1Q)詤Oql聫孖_讨驪A[T(/毜躞~]1t絤驽苆9==>穆嬠围,闾7 匥 +W8T(yl圥JO%躜jtH ;|垇逢峻\ I樞喾(?/垶琳 {N鶊#il]崛購9螆幑9<->P?nUP#鯌扝卬9_ +%F洠 f漆 +g 喽鱮刯諯=⑾碱+扚(Q 茑胸瑙爾莲鋞zl&e鸯M沃7[鱏朥+檇婎 ;舜! +8W$N)1kaAf&]D柢-奈醶霧gp\H(圷z盖143v犵p}zh忛嫠Cy稃&1蕀07 n嵗枢R貽;輠2茲?NVN質萇7G0X鎢|荭銎疄瀛飶}+~n乑|燖~荛)t>◥C+鬐,g?.呦伲琅幈䴔r昏{la=钜r4o鱁~阽;+愃M炡联DT=箌舠g譚礸殃H +皽鬞擰咔S>w!Ou鞍>逽缳禐趀鹪z哳鬦O硌CO'\("叺栯蕂p +*儑娟6叱"滒X3E訟蠅攘fE診Jm$s2檺翼犻1斟@釃qgY;鋵詐_(@蝻#5哀z/4'5 K瘗R沢譐. z.祔zz魀攱tBk僩76Ks茛艴埝铦5*圖篂┑zNk6У隬餅-1Q誯>{z廦R$揜銌銐 蜶gV東TjG擳虾棶舄 p纸 瓗枡3lh癄q1蕂騷~"7輛7h簢+[洳宊版'渏.zWL.峲77忣烚壳卉弧稺鐜Z6> endobj +4843 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 274.5352 657.906] +/Subtype/Link/A<> +>> endobj +4844 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 201.6901 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00204) >> +>> endobj +4846 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 532.8737 177.9699 543.7776] +/Subtype /Link +/A << /S /GoTo /D (a00151_g6832e4d2d046536b6472f7ac92340f68) >> +>> endobj +4847 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7856 532.8737 201.4916 543.7776] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4848 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [231.8776 532.8737 256.5649 543.7776] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4849 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 494.0194 138.5977 504.9233] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4850 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 494.0194 189.7953 504.9233] +/Subtype /Link +/A << /S /GoTo /D (a00151_gb6683dd83fe1c8de9a24086d4b69e907) >> +>> endobj +4851 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.6109 494.0194 218.2983 504.9233] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4852 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [241.84 494.0194 266.5273 504.9233] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4853 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 455.1651 138.5977 466.069] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4854 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 455.1651 197.5461 466.069] +/Subtype /Link +/A << /S /GoTo /D (a00151_g2addf34c7d457c1a7899a7e2171ef1e9) >> +>> endobj +4855 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 416.3108 138.5977 427.2147] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4856 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 416.3108 201.9695 427.2147] +/Subtype /Link +/A << /S /GoTo /D (a00151_g85b65e38aa74eba18979156f97a94a87) >> +>> endobj +4841 0 obj << +/D [4839 0 R /XYZ 90 757.9346 null] +>> endobj +1115 0 obj << +/D [4839 0 R /XYZ 90 739.9346 null] +>> endobj +386 0 obj << +/D [4839 0 R /XYZ 90 739.9346 null] +>> endobj +4842 0 obj << +/D [4839 0 R /XYZ 90 716.7484 null] +>> endobj +4845 0 obj << +/D [4839 0 R /XYZ 90 551.8236 null] +>> endobj +4838 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4860 0 obj << +/Length 1799 +/Filter /FlateDecode +>> +stream +x诃Yko6_a蠢`索姷h诘踿40m付淡詮u莜撺D蕯)ZFl殍灻{膝H墝1鼞绷c%2屗駖5裸[8黵D荛38瀅綘fl悜T幆n A _-轔4bdzF烄他G鸸瀖O钛9\头蒜szR鰫攒L!訌W疓鏦 +'R0I瑔/w駒b_0bF嬹W鴣1啂W#N絠4' *,嶱?Z +僕醏 {0&6AF:6ぺ啨蠇 "-歅蠇韡S揎蔶睜"6嶶l8疺魉bU瑆_╪;'铋鍏Xl婍諯轛她岵婱但嬲WH 剦Vc4侈鼁衁垔 聵A,鍮詢x:祮谳U浨擒S%i彰&廯a_蘓.觖鮣[郻筸ROHp丹3.9挭褾#┩橄c矸@犊 eG懎叁e夾-歐玞=T1*m药kQ眴梧鉮V脫嚍鞢R鑛饎E>/>`L族羙o/(ZDR=#仚SoOmn2磤菬鬤 妅5絤X*巇銺4K嶾e'壺$ +I蕐 }X她鶽录窭司{`C毓.8恫`H荼驊h圯撷粸H琁>闆鷃,r甡r`$ACG蹫; qL踁桦s !%麫﹫;)CS'[Tn&K馘}竝#嵢笵*rD~阢煋怒Ч藡胨7v~U4]4Q2潐晳@,脷u%糨 r阂圀〣;T疚 籂蘄叶閫"囂Cj溤p鮌釈摺膞.*0&Hr瑩)hAiz姟z赟]X n8Y惃o 8蓌╬喿椄脹痲梶@32⒏咎傀u躅恻曜ㄌL7LYo=*28L}m虝A傠觹R咑皘孉∮糾咁)tZF资xV险/"R"毇L<*G-a6a>胩c來铧甕J泮n眖畬9,!壺]媃虾 k1傸YD5慍驰3C屻5擐)厺荕$D妙D蓆=(G~藃壳m&孴(让騷攂 (哇鯭;爮:銫(-#奫o/Nu掆HK捤丟迦a浧`邵M}O#换騎+)X73每粫寭 n駲1苢s璬$`Lq嬍袵褞)趝P#噞茴D,8O,Y@=,邅)茽蛹m喖郦T"鈫l .鏖豇湂(n敖.a) I娅7 曘譖nl帓7碲荁D1w粼焻鑊埨c B$瘏P泳褔狌Ld號蹇农Gt玧盻S"&瑜L葏鍰:晞B/愑i0訉橻X痔a绖3嫁蕃櫥虦Q 图+W&~^D`h& `l9JP; 亴}=涛:eg矹.頵洸Z旙#遫L獃陛栯坻貚泆O;涆;沚?瀑" Y9勖蛭濇m蜴澼忪磰(n鑜鴶胴賎AI墱鞵9鄉j(=JPg!f牫t寿骣 W{^脟kfs;堟U耼{陬踮淝笣BB&2泠杣{0狯 痺{7膂.穏TDqC稺5 朮e掄Q9z-惏簧鑥4蒩^ 皕週櫄髋诮<噀蒮]篙蔧1[勿皇= +鸠骰O辙_鳘 +n蒘鹤擾蒿u徇z杕吱C荟Z}司仡N +翀瞻F蠌—D +鵠/v誴 a4|I*慟L铌蟛X涃蝕强?ymW媨鲀P?1磐/姳ts讛聇媸棍#?}soB据袽篮豄 蝮m覃瀍ndstream +endobj +4859 0 obj << +/Type /Page +/Contents 4860 0 R +/Resources 4858 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4756 0 R +/Annots [ 4863 0 R 4864 0 R 4866 0 R 4867 0 R 4868 0 R 4869 0 R 4870 0 R 4871 0 R 4872 0 R 4874 0 R 4875 0 R 4876 0 R 4877 0 R ] +>> endobj +4863 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 274.5352 657.906] +/Subtype/Link/A<> +>> endobj +4864 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 196.7088 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00205) >> +>> endobj +4866 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 515.6229 216.8139 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00152_g7a7c46ffaba30477b8c9e3e61bd2e106) >> +>> endobj +4867 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 503.2741 202.6371 513.2018] +/Subtype /Link +/A << /S /GoTo /D (a00152_g06ba7b414e718081998f2814090debf1) >> +>> endobj +4868 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 490.3227 237.9346 500.2504] +/Subtype /Link +/A << /S /GoTo /D (a00152_gbb56b549f7ab4d86e1cc39b8afc70d1e) >> +>> endobj +4869 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 476.395 167.0009 487.2989] +/Subtype /Link +/A << /S /GoTo /D (a00152_g24f52ac52d6e714cb04a5aa01be3bdd0) >> +>> endobj +4870 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [248.2853 476.395 281.0723 487.2989] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4871 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 463.4436 175.8576 474.3475] +/Subtype /Link +/A << /S /GoTo /D (a00152_g9f2196e2705036869611962425e404bf) >> +>> endobj +4872 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [264.3448 463.4436 297.1318 474.3475] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4874 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 406.5914 184.6146 417.4953] +/Subtype /Link +/A << /S /GoTo /D (a00152_g2d9d28afa353f662b9bb5234fc419f72) >> +>> endobj +4875 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 367.7371 192.3555 378.641] +/Subtype /Link +/A << /S /GoTo /D (a00152_g058a8e6025f67b021862281f1911fcef) >> +>> endobj +4876 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 328.8828 191.7978 339.7867] +/Subtype /Link +/A << /S /GoTo /D (a00152_g902c4a360134096224bc2655f623aa5f) >> +>> endobj +4877 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 290.0285 184.0569 300.9324] +/Subtype /Link +/A << /S /GoTo /D (a00152_g54b27e45df15e10a0eb1a3e3a91417d2) >> +>> endobj +4861 0 obj << +/D [4859 0 R /XYZ 90 757.9346 null] +>> endobj +1116 0 obj << +/D [4859 0 R /XYZ 90 739.9346 null] +>> endobj +390 0 obj << +/D [4859 0 R /XYZ 90 739.9346 null] +>> endobj +4862 0 obj << +/D [4859 0 R /XYZ 90 716.7484 null] +>> endobj +4865 0 obj << +/D [4859 0 R /XYZ 90 534.1992 null] +>> endobj +4873 0 obj << +/D [4859 0 R /XYZ 90 425.5413 null] +>> endobj +4858 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4881 0 obj << +/Length 1913 +/Filter /FlateDecode +>> +stream +x诃Z賜跢}譝蛬魻伸KPMk'un(捓`$"⑴岩$9詯Ch`Zxx厢界蜝妼1鼞绷c%2屗馼3裸鍒T噂p|~檹灳爁l悜T庣麋 A 蠗&男閷试鋞s o勊7/妘^净-N泑{處舗;05簽状*$堡烥>囫越a膶/#b oF2鱝=z;嶴8熜uq偘瞰#7註叓U逭i泥苮r*熉]稛飥z7葒;.#堧璮飱莃.ha闪匤ち麬磗鲤O菏峚o/垥哿义1z鍘笾弼y敾A>ぼqA\W頒~5f 讟$'%勓\羢K轚u奉cZ# 禜粞l 2>鎷耉鋄GsE鶖嵘2/t鑍蘼[0j&ㄍa 趪軨乾頯V蒻笲y梯c澪;t(緎O蔠容禽蓾w淤璯F嚰婝蝓K鮵浕S庡P+5j淄Vj|渠F矼$>崋9俥jrq皌c绛顽M7Z儃HEUq鼺;<糋mb滦D*%&蛵i`m昫郆蹽GZ瓎漑m%雠nY,诔F譒S-辿滿擣 S1P眹钷:雾窹.狺:肾E鰍輞{淧偢例沵i杔#8O4ae()u譖秚韯塗+C*)f尋Ji晙{R*甂e鐅9!a-j&皍L琰嘇態S渳⑨l霬宨{塿C祜&<~檕髛vt唟纣诮yeш≌+~F3Z齤刡,.汻h糺 ^蝰淃q勺oy粨鎒?L泜]endstream +endobj +4880 0 obj << +/Type /Page +/Contents 4881 0 R +/Resources 4879 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4756 0 R +/Annots [ 4884 0 R 4885 0 R 4887 0 R 4889 0 R 4890 0 R 4891 0 R 4892 0 R 4893 0 R 4895 0 R 4896 0 R 4897 0 R 4898 0 R 4900 0 R 4901 0 R ] +>> endobj +4884 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.7618 274.5352 659.9632] +/Subtype/Link/A<> +>> endobj +4885 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 197.2667 620.3114] +/Subtype /Link +/A << /S /GoTo /D (a00206) >> +>> endobj +4887 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 534.931 188.6792 545.8349] +/Subtype /Link +/A << /S /GoTo /D (a00090) >> +>> endobj +4889 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 453.1522 237.3867 463.0799] +/Subtype /Link +/A << /S /GoTo /D (a00152_g3e1562e8a6de32268e5df92a52152f91) >> +>> endobj +4890 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 440.2007 226.8662 450.1284] +/Subtype /Link +/A << /S /GoTo /D (a00152_g03d140db75de3d3cdfbbab1c4fed8d8d) >> +>> endobj +4891 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 427.2493 231.8475 437.177] +/Subtype /Link +/A << /S /GoTo /D (a00152_gbb558f3a9b1ec015e83c314aba694e35) >> +>> endobj +4892 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 413.3216 198.642 424.2256] +/Subtype /Link +/A << /S /GoTo /D (a00152_g737337d6a51e31b236c8233d024138a8) >> +>> endobj +4893 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 400.3702 206.3828 411.2741] +/Subtype /Link +/A << /S /GoTo /D (a00144_g30e827f33eacff55ecb4d8fb5a11d5d1) >> +>> endobj +4895 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 317.6152 184.6146 328.5191] +/Subtype /Link +/A << /S /GoTo /D (a00152_g2d9d28afa353f662b9bb5234fc419f72) >> +>> endobj +4896 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 278.7609 191.7978 289.6648] +/Subtype /Link +/A << /S /GoTo /D (a00152_g902c4a360134096224bc2655f623aa5f) >> +>> endobj +4897 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 239.9066 184.0569 250.8105] +/Subtype /Link +/A << /S /GoTo /D (a00152_g54b27e45df15e10a0eb1a3e3a91417d2) >> +>> endobj +4898 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 201.0523 192.3555 211.9562] +/Subtype /Link +/A << /S /GoTo /D (a00152_g058a8e6025f67b021862281f1911fcef) >> +>> endobj +4900 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 118.2972 168.4754 129.2012] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +4901 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 118.2972 218.5572 129.2012] +/Subtype /Link +/A << /S /GoTo /D (a00152_g499bb98a0b4ae9a98553ede81317606d) >> +>> endobj +4882 0 obj << +/D [4880 0 R /XYZ 90 757.9346 null] +>> endobj +1117 0 obj << +/D [4880 0 R /XYZ 90 739.9346 null] +>> endobj +394 0 obj << +/D [4880 0 R /XYZ 90 739.9346 null] +>> endobj +4883 0 obj << +/D [4880 0 R /XYZ 90 716.7484 null] +>> endobj +4886 0 obj << +/D [4880 0 R /XYZ 90 553.8809 null] +>> endobj +4888 0 obj << +/D [4880 0 R /XYZ 90 471.1259 null] +>> endobj +4894 0 obj << +/D [4880 0 R /XYZ 90 336.5651 null] +>> endobj +4899 0 obj << +/D [4880 0 R /XYZ 90 137.2472 null] +>> endobj +4879 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4905 0 obj << +/Length 2075 +/Filter /FlateDecode +>> +stream +x诃Ym徾6_a*5藈JAq6籌搆z箥 磆婤k踊jl蓵鋖鲞逷$e結rzA1E g喢)2丘徧#黭並z晙h票珼W 嶲@^樁恚帘06=M择$椒OTq瀌G軪堕瑧mt謿N犬 裂>賟鏻颿稽v| L鐡嘲u辵0浍) SN2`1d┥LV肕荢v蘭!晓译颢Aa_nz<褏旾尧择崎r*&) 隢战 ";g 煋景>].H楒0捛饖潹 bk6羖挗虛5 嗀H!I9瘎1&敻逽餤T$ 鏐D堚圼铓W摴m蜻/觡极sv讒 EゃE7鱴)=m6r-a/搕;n`9$ fU椑伃Y3鸌凚5鴀 ,Y蹣鰟e鯛 C(' +0X钱魑 q<嚃e'4 +]Z躄/牠鷯7沑EK?Us妛户磷蚶!样掝灛辒k{~~貊襄W_贱彐z羜pu}}kT)洓Bi胒驥 (JL(珼?a3-4b鸖:1c諺C歮闯jW賺謅Ir0滉r飮&綝5i+>頙蹜g荝/+l撸揄l索 打T涣>L\嗳M簼#&鰧崣'菤姏雓dr=攃饷a棳擑蜽Sv]<=/U莽s泳s怡褍茕?韸锾`诤2俩9+ヅ9;雵8谨eZ曻嵿1)m隋|h箿蔦qぐ8_7* EJ萇z藾~++E礨KM賲 +9翿俄~贡壙熰笵*1~>羬)7zz嗶m~wK% +逈簆< 葌 鐠5"#脪A鮂E膉瀲啾鋾莗柪 + +醃蘮樌泒掙=&阌烔衙0<[橋爌*}贌f}z邫攬a糖'赕I`搥诧1[0B倱)哉bUq雼﹏捍嚄f藜簎峿9钇鲵l8莨阁袡{猦逃洬昧#鞷"襅#謵玁 $窏->SN]B 怰~杊M⒄b揇祒"趧]O礀輎⒌峗@ 7zz=裋{Na蓧x)!纼@~n櫀鳫$︹25凣汝ボ癖紸8J \&{.焪X+A趨|堊婕gomJG6G妲普&罽茟#@ ,[懓邟&!橮婱2々p v=Zv6~&荑轷L附箊黝嫱?耣忄邹(T1|*誙] 9卌'U嶝茏s7S;布燔U滿!. +娇僀)菆b鯔@ +G%$H截4H +茾:ni宇 mゃn趑禓洬_Y蝈M6R怘餌8j ?(*Gt茑,@j茶B7で@锱Z賩L鯣髻鋽点磵鴐n.[b}潠涻謈殳G鼤p]磚╝3zu椒5_叶鏝W遃慦桷ɡ竴益7g罙棁1 2 頊壗 喌#襘o=CBm謙Pk+ 贷 檲+泭^闠C绔Q煁搌苉 +孭鲖烸鰧b抧盘w栨'A+峱{G轿>>蓦N栈謭鳣桦endstream +endobj +4904 0 obj << +/Type /Page +/Contents 4905 0 R +/Resources 4903 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4918 0 R +/Annots [ 4908 0 R 4909 0 R 4911 0 R 4912 0 R 4913 0 R 4915 0 R 4916 0 R 4917 0 R ] +>> endobj +4908 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 630.6989 274.5352 651.9003] +/Subtype/Link/A<> +>> endobj +4909 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 556.0563 192.2954 566.9602] +/Subtype /Link +/A << /S /GoTo /D (a00207) >> +>> endobj +4911 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 392.5288 225.9098 402.4565] +/Subtype /Link +/A << /S /GoTo /D (a00153_g51195ea7cd5aa387a87f9d3b23905b62) >> +>> endobj +4912 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 348.6697 246.7912 358.5974] +/Subtype /Link +/A << /S /GoTo /D (a00153_g9069474ea570fd78c481aa164317dbaf) >> +>> endobj +4913 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 304.8107 245.6755 314.7384] +/Subtype /Link +/A << /S /GoTo /D (a00153_ge0f8cbeca9731af2171ffd37e79de893) >> +>> endobj +4915 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 210.2945 187.0159 220.2222] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb61381673de27f31848c5396bf0b338e) >> +>> endobj +4916 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 166.4355 233.6306 176.3632] +/Subtype /Link +/A << /S /GoTo /D (a00153_gf963fdea2b75d27ef31e92d1d01359ee) >> +>> endobj +4917 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 122.5765 248.0566 132.5041] +/Subtype /Link +/A << /S /GoTo /D (a00153_gc3882366feda1cb759ccbfe98327a7db) >> +>> endobj +4906 0 obj << +/D [4904 0 R /XYZ 90 757.9346 null] +>> endobj +1118 0 obj << +/D [4904 0 R /XYZ 90 739.9346 null] +>> endobj +398 0 obj << +/D [4904 0 R /XYZ 90 739.9346 null] +>> endobj +4907 0 obj << +/D [4904 0 R /XYZ 90 715.6224 null] +>> endobj +4910 0 obj << +/D [4904 0 R /XYZ 90 491.4899 null] +>> endobj +4914 0 obj << +/D [4904 0 R /XYZ 90 228.4871 null] +>> endobj +4903 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4922 0 obj << +/Length 2097 +/Filter /FlateDecode +>> +stream +x诃気s鄹肋齏h屸浝藉l%q踚获ms烪^. Ej<灡@r够XX$# dゑ( 覍搜b}咷Opi.熋鮯_嗲儋咿R=襀K*G城J$HPBG冲/cⅨ錅j蕭qy  聈鉳禞胫鍁QM1/岔f蜊烀賢嫣6^ &1/酷见p覬尵FDk:Z焣熟陵祛NO}『醁a莧G褺P= +組贽}筶捍豱~艠>暬丈韹i缜簝9"T隐 { 2q^弎鎃J拧-傖.*X丌搳%i,e垲_柀辂&%4!仆ポS#筚w檬擒梃瓰耪<漃 拪E"牥A@DX尧H窣滽%慥j嬂#nJ^ 犩D珣3n&殠偳O湛U氉磡M嬬tWWy草土蠖\-膂Cj羀緻5g3K^-P壼{橦劑N耛mzJ"\恀^ツH)?m庲昴⒓ +糉靂^[v慵秿5釬G臊披榕唢綷DB(g毄S彦 %<墤跦镣燷L? 陪溴:锴诽-簝恊%J懽A1b8皗u!^僃疄代枃翎Pk 折洓.BE褕Jq2芿,x S+Vq暗櫗藆}0_o薓3巒荬(w &┙嫦铔tQM嘟< +郣 雽/}即C(Y3Q\祬濭@|'E?hq蟸漠吙e7N埒#nt糈x3醲|1机玺郁#(傃 J'鎭鐦F蚶/"莪惩0*)戆粆I7冁┟~#稕p16逛 +!Io騪 )翹蘽=1虧Xi_a閳]媡薾槎HG荑璧H1﹌醏 4GL鑃 f.*Vv8炳駖Sl祃求.瘖&輺蹫牒鍙а憹C鞥a*皣蚌姯:璛淣Oa埼癩Gw-鉉 谎裬辄xu7涋|糊<戰艉淏1 垵籍么湊禧1]ey 缼U3R(5廧+*2Hi%塒昴 +擣靂J[v銛秿4釬G?炕4暳 !,4Q匩` +骔$$)I艍安臄賶漗8霜V畺甡^螊筟筫姗,2趸*&!"V^臶$仸轛,幏0剋禺蜜;飽!x囕梃祒變飫mwgM遚懓R1`u拇詍X/Pn髣﹣9釯噐膴鬺質U垣舃g8鏇|濆箖饺0杛Xo钏&蔝烐韺2$庄>V圛[98麨鸻粠}哳鯷茋v#撞熁:F屄 創妜@ E +鴒{狕袪欯mJ0魙鶱l>O糧喫}-猌~ 衴轀識yjf莽u=A纘7@褅怑2^gE-晹檢孌c暮朝T`K椊塃F4a霼婮*鰵茐E薟H瑘]沊-获膉怷7:z侥蝴譓_n1x@傫p,淭 矹H#絧 +j<膀颔C〆碰⿻0/掂昆V码詡s6禒9 fucpO怑塌稹毖櫖僈蹧heh狤~/蛹hL)駜`@(`楅-飽i憾骬杯熺ざ措駌摋婨氱忓?[﹦ 易Y嚊馲$wb駆啿5l譭玱w@抖芍6[↑靠净;6j.T8 +N*b褩囇~4K/o锂=9ov胪6燎鼢7濗6桜 宧嵣皩鳐锬ZuF祐诠\m75 蹧DA估入4el诊蘑9+ 銬漠蛪栞xN磵葔絥Y4綐7?]輁轓詝{JF"v噻5抗Mp%bZ`┞^/HwE鎊手"袜鬫 [卨耻~澙袿):擱X榪.b擹8粠R哳J[茋Pv#讔躓讇鑴P<~s5o刻:&班謮 +臝E紒痰zA乢啣H'"邐泔誾梪k7X鐕痕Uy1v皕w#yWY呎I醓[K镍癇 +D1>簾!訢 +鵠耈9 F筮FKか輳#_喋尢骑襇簺籑 磌埒`鷂66盔蕕犕-凫.N╬}t? |鴉? 跾邬$衸玤]螈?'endstream +endobj +4921 0 obj << +/Type /Page +/Contents 4922 0 R +/Resources 4920 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4918 0 R +/Annots [ 4925 0 R 4926 0 R 4927 0 R 4929 0 R 4930 0 R 4931 0 R 4932 0 R 4933 0 R 4934 0 R 4935 0 R 4936 0 R 4937 0 R 4938 0 R ] +>> endobj +4925 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 701.9494 188.6795 711.877] +/Subtype /Link +/A << /S /GoTo /D (a00153_gdcf372ff9748996f7c05e9822a615384) >> +>> endobj +4926 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 658.7078 254.552 668.6355] +/Subtype /Link +/A << /S /GoTo /D (a00153_g92f3344ec8ca46893163399c89fafed5) >> +>> endobj +4927 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 615.4662 227.424 625.3938] +/Subtype /Link +/A << /S /GoTo /D (a00153_g196379ceb1219a99f4495e41ccc9bbfb) >> +>> endobj +4929 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 522.401 235.8724 532.3287] +/Subtype /Link +/A << /S /GoTo /D (a00153_gac0de06236b02659460445de30776e00) >> +>> endobj +4930 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 479.1594 202.5175 489.0871] +/Subtype /Link +/A << /S /GoTo /D (a00153_gf5fe83be78b78b9e7d9e7f1e34ab1cc5) >> +>> endobj +4931 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 435.9178 233.4713 445.8455] +/Subtype /Link +/A << /S /GoTo /D (a00153_g8f4ebd8ef6c0ea665ed351d87fec09fd) >> +>> endobj +4932 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 392.6762 215.0208 402.6039] +/Subtype /Link +/A << /S /GoTo /D (a00153_g51c1cd531ff0afb81620151f2248cd21) >> +>> endobj +4933 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 349.4346 187.9025 359.3623] +/Subtype /Link +/A << /S /GoTo /D (a00153_g15de27b044603284f68db05a378235a7) >> +>> endobj +4934 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 306.193 211.3245 316.1207] +/Subtype /Link +/A << /S /GoTo /D (a00153_g67cf1e0d2324c93f332c1f020c0fe8b3) >> +>> endobj +4935 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 262.9514 231.2496 272.8791] +/Subtype /Link +/A << /S /GoTo /D (a00153_g24aa5bc36939cc9a0833e1df01478a7e) >> +>> endobj +4936 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 208.1483 211.942 218.6786] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4910467b83a639f06739c82cd362037e) >> +>> endobj +4937 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 165.5093 259.1549 175.437] +/Subtype /Link +/A << /S /GoTo /D (a00153_g5b9dba2123705bce1ce95c3deca0bdad) >> +>> endobj +4938 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 122.2677 272.6941 132.1954] +/Subtype /Link +/A << /S /GoTo /D (a00153_g2bc3b489923793759526a3181eb667fa) >> +>> endobj +4923 0 obj << +/D [4921 0 R /XYZ 90 757.9346 null] +>> endobj +4924 0 obj << +/D [4921 0 R /XYZ 90 719.8332 null] +>> endobj +4928 0 obj << +/D [4921 0 R /XYZ 90 540.2849 null] +>> endobj +4920 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4941 0 obj << +/Length 1952 +/Filter /FlateDecode +>> +stream +x诃Zko6_a燺l犆酳-檇R娴剌[眳:杒身烃-櫾碅悇=$辖饥L~萖鈗*R$O扑鹒D体Wp齍p9絶K錢"櫺d<l,$ J鑨菌e!痞罁c 垮綟蒹敦婧u?鎳)&鵱┖R撇 慴鑪~%Dc羲ox烇F1檳馹#"%?8e雒vt7鷹常/47 S?NB傏丷wyq鸜eY額艠畯嘐]; 儐v7"営蟪齶]揱&8A渆躖QL~ゴ3o肕T盃;8%I$炗V.飜 JiJ|详蔭m 穖醦jUq2鹼0烰6垢伎淉鼹 e两憏0缹3I污牉IKI桫U")b`衮x邉7|A)8曎丌啭屁*Z澹㥮跭NV踱倕 戤璮恉q蘄槷aK(欚巢K qAc簊皑疒蕥殷电; 崕輺?\b蜀洇G}囩聜"(冹Dy阺 煏嘸H,ㄦ:$g 篝鳽焧{1%x睼N$~㈧镪C慦艼鲸巼)K'鵍&\o*遉旵轢U鐑僑$806?'6秄)`7.?,+婰燚︾粉6 嵞犌鏗岠祽棂岹|@$Fht熠H糡掻蚨w阨l&0LL搸H1J巸 3.rJ皲&蓣爖帍獉j(B蝟BH擩灲6!`3暛"庠06@g g埏qz螄3L讑驨(虰蚲w筚浕嶩)イYdFC拡靮E胜1慫樷}曌┴亵\靥[C灚阞i銅_0玀y軞忑愛嚶咤趔J嫍Q*暀$1X\-!:ザP|圧4:v璕汗檥奸tG≧gx竝XHs鎮D拈`!qnKW~瑡葳檄它P/lM言BR絸ryF螤叔塂勸,*穖0犥坃玕蟧\咕蕧需豼拉*?M櫂\\焦斲砂葃l> 憣~缑 壋槅-L懢燡壭柝u震2z^壚,#A债9榛 +QY松鎵[m跽烩6諲\s 眽艓L?惇"T逪`抩{<戰P"﹠蜷;7&)譑}.P趢@8X4P%庾婄7(倔⊙彪戍質侦詓帓D蝠\8T錔鴦銊霏wBP殜/娵衵[X|紺[鲭只韜纙{螄瑆楩钱K尦泂婱3HO$ O凜EPx  e>B稃RA匃織繾J}LF酃(A2e欭v!顸啱兜偼l銤失G鹺広譼?Q批8循)*贄 l缶U~蝫в>浹3?}筫ndstream +endobj +4940 0 obj << +/Type /Page +/Contents 4941 0 R +/Resources 4939 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4918 0 R +/Annots [ 4944 0 R 4945 0 R 4947 0 R 4948 0 R 4949 0 R 4950 0 R 4951 0 R 4952 0 R 4954 0 R 4956 0 R 4957 0 R ] +>> endobj +4944 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 705.1301 233.1426 715.0578] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb1455b27c06532a399cf06d2c1d6d08d) >> +>> endobj +4945 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 666.2758 236.4303 676.2035] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3090117ef3ff5775b77cb1960e442d07) >> +>> endobj +4947 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 583.5208 209.0629 593.4485] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3589822ecb9d9c4145209756396b8a6b) >> +>> endobj +4948 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 544.6665 222.0741 554.5942] +/Subtype /Link +/A << /S /GoTo /D (a00153_g5726142fec34f35fb9ea19e5a45975c6) >> +>> endobj +4949 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 505.8122 214.124 515.7399] +/Subtype /Link +/A << /S /GoTo /D (a00153_g21664b7441cfa37d280228d23316d609) >> +>> endobj +4950 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 466.9579 228.3406 476.8856] +/Subtype /Link +/A << /S /GoTo /D (a00153_g156dd2891a57035e4afdc4c2bc0b0ebf) >> +>> endobj +4951 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 428.1036 212.4703 438.0313] +/Subtype /Link +/A << /S /GoTo /D (a00153_ge6f4a2453dbd8bc60e6a82774552366a) >> +>> endobj +4952 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 388.2731 166.3534 399.177] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb58e1ceb7cb73ca2bcd73146b6c1b4e7) >> +>> endobj +4954 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 255.3053 233.5112 265.233] +/Subtype /Link +/A << /S /GoTo /D (a00153_g285a80366aed9428f64282b8d13c918b) >> +>> endobj +4956 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 172.5503 245.6657 182.478] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb6e04358481bd2057524fb874cfa472b) >> +>> endobj +4957 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 159.5989 229.0679 169.5265] +/Subtype /Link +/A << /S /GoTo /D (a00153_g6836f92f3692f3a4429eb599db40cbae) >> +>> endobj +4942 0 obj << +/D [4940 0 R /XYZ 90 757.9346 null] +>> endobj +4943 0 obj << +/D [4940 0 R /XYZ 90 720.8203 null] +>> endobj +4946 0 obj << +/D [4940 0 R /XYZ 90 599.211 null] +>> endobj +4953 0 obj << +/D [4940 0 R /XYZ 90 322.1845 null] +>> endobj +4955 0 obj << +/D [4940 0 R /XYZ 90 190.524 null] +>> endobj +4939 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4960 0 obj << +/Length 2082 +/Filter /FlateDecode +>> +stream +x诃歔o愣沁)岞舿0藡x[E饭漧w摐zN[-:水%焚~3擠E7擌6酥h嫦釓Rb#C崌扠 喅熰鐙)OO帱鹩t疠9誄嵈燽8]A:溛-)摚蒎 r<"珩sT澁g籙攄a瘬耧兂i禩艡 &僟敲90缊i艊寛謙斮/蟽涣+?艍鼈酒q满[G縋< +瓡EO苮碖鈼飗駀2['1#磍76ZD1Q(橢厀4绻w犬qN斋wDJ偋y櫙(漨銔8b礜0~宖]鴜EF諯岗XAU弨孢0籱鶑鏃祘Cq剦扖0劇焮si&u.-J#`%+鋷嵈l罐緆&"衫3xe綖&%拕馱oy鴜*摷K> 漤9-扡H韏AQ8昣鮹G獢Hi)ZR嬘焽鲨鐨l{E弆Q椵駆 4灔(嵹Zh爲燡赣VYu7搋f忻釀p霋R8鄥閕d蠮釽遭r漈r R嶲@e∞溬>&孵罘鎿殅O锓iv绵m嬓q找ny2qQ=讶. 傑蜊8=镦Q憸!︰內朘=QY腎杴貲i阎/崵洫4W%圦篛逥垃跬_裞m尪h)1DuP爍撓忞E砽抧l垬9&﹗>ΞI梆溝u,`※F蒼觬zQ|vB'薖鵘2蘆郯<晇f汖狱嫸踴>彃鈷藕叧eq促鍹E 讀4]Fi#軚瓷 +qb{M 獿B Kg澕諛颤8L蕚>?;矞劔(-椺樷瞴/俨<豯髞齊|豢紋8咕:+喷翡u⿸錰$O1個辊杛!S B8驫h忘(t黔(=翭餋(t髓P騨zvus};袐=$R菔=i1隝膂#I +aL鶫磃戻斈蒘 掏z9恉h$蓗&a錊 >&瓩熒欳擃擋0~搉 &2觜祧犷蚩gaY$V灁纞屧璝罊吞r顂篬恶T璺ǚ攓:鳫磃~k]$恒V$帚@b#!$篹t6H紱5较GS仫^瀟y滏个%(G譤 +P羭P%1鬈]橮 +q庻懾鍂eWv昚﨤耻Z膃瀲dr^D骂H煞筼F圥錥躑f~糺]x广Vx浙v"ⅶwEZa矡/k飺择涹'乥XeI屋y襷$`丅猴~Ie柨p % ;E擯(自5Vs X捚O墋 ]rВ!vYMM{Y=旰~2=膓樮蓙.戜h錉柭嚋53Z颶"蔚v##4囁^ ,扭wb脨J"妠._齠L瘋KH肀  伌d蚀淨感# | 繄抙f籸鴇> 焓/剸燌e飄 +鸥皨1逭ⅲ秀兴棫帎yy荍玡5/骃endstream +endobj +4959 0 obj << +/Type /Page +/Contents 4960 0 R +/Resources 4958 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4918 0 R +/Annots [ 4963 0 R 4964 0 R 4966 0 R 4967 0 R 4968 0 R 4969 0 R 4970 0 R 4971 0 R 4972 0 R 4973 0 R 4974 0 R 4975 0 R 4976 0 R ] +>> endobj +4963 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 641.6664 250.6249 662.8678] +/Subtype/Link/A<> +>> endobj +4964 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 617.2739 200.5842 628.1778] +/Subtype /Link +/A << /S /GoTo /D (a00208) >> +>> endobj +4966 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 491.778 298.8158 501.7057] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3f6f1f6f98431f2d33ed30a30d2ccc35) >> +>> endobj +4967 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 454.9084 293.2467 464.8361] +/Subtype /Link +/A << /S /GoTo /D (a00153_g974c9b4bbe6b07cc1d64ac4fad278030) >> +>> endobj +4968 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 418.0389 263.8671 427.9666] +/Subtype /Link +/A << /S /GoTo /D (a00153_gcacc406c3bf7d0e00412e4c946252739) >> +>> endobj +4969 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 381.1693 265.0627 391.097] +/Subtype /Link +/A << /S /GoTo /D (a00153_gca1240bba5dd57f8c7c27123c84a1f6d) >> +>> endobj +4970 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 344.2997 245.6755 354.2274] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3001114ddadc1f2ada5cc9a780e866fc) >> +>> endobj +4971 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 307.4302 220.231 317.3579] +/Subtype /Link +/A << /S /GoTo /D (a00153_g763f12007aad8cc0e483bf50f8a8d9b4) >> +>> endobj +4972 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 270.5606 286.1035 280.4883] +/Subtype /Link +/A << /S /GoTo /D (a00153_g9dd44616d41cef74d3beb51d8be5ecec) >> +>> endobj +4973 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 233.6911 253.6255 243.6187] +/Subtype /Link +/A << /S /GoTo /D (a00153_g529648ad3b0b327a43689b0f1779ff55) >> +>> endobj +4974 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [177.0032 195.8452 196.7092 206.7492] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4975 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.9845 158.9757 206.6718 169.8796] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4976 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.1599 122.1061 252.3298 133.01] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +4961 0 obj << +/D [4959 0 R /XYZ 90 757.9346 null] +>> endobj +1119 0 obj << +/D [4959 0 R /XYZ 90 739.9346 null] +>> endobj +402 0 obj << +/D [4959 0 R /XYZ 90 739.9346 null] +>> endobj +4962 0 obj << +/D [4959 0 R /XYZ 90 716.7484 null] +>> endobj +4965 0 obj << +/D [4959 0 R /XYZ 90 542.7325 null] +>> endobj +4958 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4980 0 obj << +/Length 1572 +/Filter /FlateDecode +>> +stream +x诮X}o8繜"&m;%旝@飔:B溒r@赨wY垁篡?僲扨HG8璟乜唧j# x麿椟`瑢9]捳A_饍痻B犛(徇枆"H冄辫幕笢夲@9U晛.7We漇4i鄥07埐#Q?觜$27制B)楞}N諨孛%Y,p鯅峗癡睦o烽J緬n&!*魍弡臦q战敝{c#麨Z4?u鱟i葼祗9f3c讂仪Z喤^'r銬F>啚 +!;Q衃腵1鳪&9趿.bU[臦FCM8QQO 鉢*獯3))蠒峕23{鼘5N誵!9A/紑V.术Y鈞Ik@霴!<) %K5)>6c鐆鋙蠖4pHR5媟g@K浇FcE>7胥Fq+I踕X绷6$|,?鉌r>躅嚚.?R%!>6:q嗜``Cl狦渡痥鷋灝嫥2塿F橄刄&r. +盛吗『~ee9I帾K灴$ XF踉Q平]藳C椶a鞕wg8z]:-渹)镸钌7g,變奘芒 M垓8Yy禖7舙僦镞杦;栔泴aQ|嘤.=蟰韫7dL0S前<!cb.VSh]>芅兾紒擏灬A艮:PR*3騵s' \@锞↑衄汖屟7ˋ 莾鎗a嗅迨Y陬b*W{烘聙7`3 VjfZ寨;7嬻 IW嗄;搝鲚I笒+iL"o麕4逎!鳵5(&'P/鄭軭^鍻e傗-J傢=藡ボ骥6 "脧祄p芏蠜=趒7m氲瞩z獶Q=鸞%d綰bWt,# 5J"枮 |H戱&,u +焕"in=Y秅3鄚谱o藅U菡逆7狎估 蝤缇託endstream +endobj +4979 0 obj << +/Type /Page +/Contents 4980 0 R +/Resources 4978 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4918 0 R +>> endobj +4981 0 obj << +/D [4979 0 R /XYZ 90 757.9346 null] +>> endobj +406 0 obj << +/D [4979 0 R /XYZ 90 739.9346 null] +>> endobj +1237 0 obj << +/D [4979 0 R /XYZ 90 549.2183 null] +>> endobj +410 0 obj << +/D [4979 0 R /XYZ 90 549.2183 null] +>> endobj +4978 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4984 0 obj << +/Length 1278 +/Filter /FlateDecode +>> +stream +x诮X[o*7~鏦 {|Y逳泟6G:⒀娐BP氓\贒争锏譤 +a5j蚶貫{重C{ +y _褉{僫yc=}U纍宫姿 Q狍%Q烌'軏F)>#榵寻W腏柺D 亰泎[ 睆,>鳔嫥j罅f毺铸鮠>+=D70趈v1时邀G△肌6穰|$簋鋍7-刦儳B穚放 r恵zF 9H纯满癛#T黫槍&衬篞% +鉰珁Y繆;a5 kv洗膊0嬃aV& 儗^nkK婣lV澮9"门诱貛4,踱F芅h8衬泮e慸鬝2巳磰ㄧ砂<$c<鉤%儠1z陱a%鬇蒨梱z䲢|靲u敓饛忩婥S~蘟镽q2氶l磧鹺;M母v]m菎u壀C_f齣毅癿0F摟墑3- '#垇蒭俇廱cR索\ 營╒/Z_tZ昛狄嶌$z侄 *U.4逎痤>4爜 C2_遁鵀嶲慇*O:0;托y(6w0 愮!躹痓 R*S3E(( %hd5顔漮a'n:["T醢!@$蟻徽6!倯嗡愔濂,蛞c沋i誁穵人廧 (T(2/1*寨:棈桺刣^64+掍+萏Ph%涓疼刚庩璮芙啃i遃篲6磄挐榇#硑AH~≈旌ぶ-Pq蕩.+礪莥脿揔0i▇渷QQ'`L釠笄%5P矔^0(K~C`uS$(g96A`辛喟y杷蘛mK鈠/糗瀍餍0賿榣IB羀O7獫銮揂<樝$鷷rz0E帓J翃]N装騯#;i;鞞?+/$赁蝲 擨3F蓼軞[4b%NhDPR.Iq%,柅=萁;6蒡瘓-F茸&霱V肫h盺灲轘j嫸 b|'曔辌罪?E倃X蜷觀兀嚵 4□黼UB>F 騋=貵2Yo柍m'珣瘟牷冣溉v珚P_i<嚔**E)犱+楕豹饩嚝*[讴*屇縠礘&藊2|UW鶮] +䦷 )!瑈尣}浔R_C刍餢掎*捺⊕斐}歀榻砲遨]榙譝`倅藉`|cB灳=8闄'}⊕ZS阐N舽%񛐄攈羳摥)泼玠,dh_ゆ3鹻7%虋7滥/剘!領K7管Ra霹呔~{蔀綖_粕羶梱Ⅳ橦哀endstream +endobj +4983 0 obj << +/Type /Page +/Contents 4984 0 R +/Resources 4982 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4918 0 R +>> endobj +4985 0 obj << +/D [4983 0 R /XYZ 90 757.9346 null] +>> endobj +4982 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4988 0 obj << +/Length 1353 +/Filter /FlateDecode +>> +stream +x谳踤6糨_!犂惉3;惸n猱嵼X0d呧什#,禱K闅 "e2掍A紲;蠉4驙鶪瀯瀈HB蚙袥槽m颠$s/8 #銢# 衠3x4緧垘?o< +}W45扲毫姂晝4汷瓫+y薮 襣轤j丅呸珽1)'w璦臊妿(\0D\鷓O圝}癛Ou虑m銫x磳篼妩竿8]鋴|i葡蛧*4U鰭r,61:7┵|Qlb$傇k#%? 嶕鸨WYn畀`@8cdoTen乱膶JY>蕮葘稞0/p悆K{单鼊Ka塹C`4囁鳶,詇dpER嵃忎嬖>2L拃1TWA8徧7gレ%1 +瓫黮>潒矨浸ex諁'澪+kZ≒79嗣pL0次>媑砚A涄+0g`垡轺}K訿5<龚留Q冑f('<珔M轾彌m+j0剱 +!j傍>Q蠖7 甍@袹櫲+7>届峄撫疢 v韄萜LD嗅箆.囜皗踣#渨譩g!M諚<疥KY}I企馞罀Uu}&yS%摺鑦/;崬&课(l4姙湩Q柬i熡d霻逨a磳Gy尾u-A]6b雝檸蒲(砃1蓙Ig栜!X龚紪裍Y *遂#踼舶棟0JW'%曋[冘*嵢炮肟B|獟&>q9荖\巄泒叜筪qn猏爧裘媡(閘臆Ez(殚屿稶y`kA%嗇T-X懡Yh 敦l锿\萭蒬>'fr刧譨喏/.囄C湉fqjF;s"S S2qB*u唤筜If﹟慆櫮勐U6%d +鏞甉醔F咞V漗8N(螹a語詰dCK!J]u 鱨g禛e哭虉覈w7O]鱦6姰V粊.擙Zqm8]*F嬇x攺現1.*a薢促A蝪:範握"(籲瑾o8奻27谪弧eR詨烏u7c蘩Ⅵc頣;鑸:2謭锘Pzㄔ揽轫进崩W(隇^)坃经[!礃珩<^ 夜+o;悍_|酜L^陣J=S-7I1fG橐L顊 ,嗲箜Κ钞橤0喟勛cendstream +endobj +4987 0 obj << +/Type /Page +/Contents 4988 0 R +/Resources 4986 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4990 0 R +>> endobj +4989 0 obj << +/D [4987 0 R /XYZ 90 757.9346 null] +>> endobj +4986 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4993 0 obj << +/Length 1285 +/Filter /FlateDecode +>> +stream +x谳X[o6~鳢蠸`o暿荒t.n柆4vY 6祃U挍dC鸋懖e櫀統脌怩滐~<$t麮千厩1a(鏭6w犻ve縖饁貀q噞! 颙 zA 7]@螮>餉w~r)tt%镈枋裭4O拇垔x6磔O;BF1僇飾瓮-p鄆x詙郃螒搕耈et>,滂巖偼> +蓖@嫒朗@$眭祡戌=@.︺ラ8*=椛^佟 敚偘P:怌(p\(睉爺黓貳ck4+檃駵 +% q湧妛rkv煅?]^?\脥z9l褠嬱2拃& RP昦準R禪 nc埄u>倍熯觥7蝂鑽佫蒾涢蚾踒鎠轃FY.B岖( C +H嬏8<堥*]4掷\('e浩ㄋ/栋*ó繙aE*xeE幁葅|'%皆1.澧,嬡w(G?婆鐰)圌畜1劵膽舟糟搚l╟F(逝脣酸膳y8竳{唃oZ咽岶粔HF閟y榵SQ$Q臚 覧6q亼鸌燀Cx+颢嬰a + 璞笅鎿"蘤驜d鸴噋+v圸翧曜M 4W嚺^郎v啻8~检踑3#揪驮窣湤] `3畍^蚋饈躊頾-h +聯#籷茆 你}渹繴3鑷脫3籟 )*,釪靺o荖Z摈享藣☉湁b濵楐mWR戃7k痮ma膨曈蕻.圿yuQ*荱!nNzF;聏绀G轗闕徆:碶-0摞蔚邥嬵錌 嫭a帿+W|W^翟吶}]蹘Wu*G澠贪HYO 頪栻鴚1+=i,旿%h覦M予^嵚祮*c]盏%#怪镼_虒p97!⿴f_K噎稲錯錬mㄖ彤1!票'簞骤,=H|雜!pe{截昽巵e 诪櫱}9屼D滦娐|," +1謴嫵濽呌ぽ供4侰憏潝 +鹰⑤Y+胂槦灚抬鐊宾v-' *觘ndstream +endobj +4992 0 obj << +/Type /Page +/Contents 4993 0 R +/Resources 4991 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4990 0 R +>> endobj +4994 0 obj << +/D [4992 0 R /XYZ 90 757.9346 null] +>> endobj +4991 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4997 0 obj << +/Length 1339 +/Filter /FlateDecode +>> +stream +x谂XmS跢_ˇS邙r/ `垞擯p勓(枥岇Hr撲亏;箏9蓌翷2蜉=畸燹ju(/ + @蕛 n挑q瑰甕镂 t^a(8媪嗪B0宲0/@;]锑v<細\伀澦翛B 暢澽`θ倭GO潒K钠7垝,7怰8鸽PL炅╯搦s哻 >w">x`fD?馗';橋.噋鸈&@!H.2JìD~.!q07輢?$鄬&輍^沟禟+i ($琄y \拹V鈚^燉?@嘠弔X频~'眣ⅡCY尟綞w篐Z 痾驱q+摙剓檩庹掳0k)8]啜妈&J襗KC 綂僆,"微k寺瀩金紈r?9龌Ig跰pn髤镛5逕鷚3,w橊-&&-,54$諽樻楬伐H顃婧pq蟏歒G欰1桂蟸⺷2杩%凜&0征qTD礗v巅7&/$玉u抸晄铦E韦浜Dj越礶煋(藆x椷,.锕>8}t;鹢n挋庵冤`鲁轆w蠠8攺檸n"赠鬏魂M"8YH线W映侤鮮8蝨頗%蹩埿糍s/.!N&%差贏樘1窊xUMV犐Zh,讶Β-尋焊嬺蹗榒ML86*D|嗉墜6p"姨唄a沭滠調潤fr#Vd+q毌K竕b 湲4眀巠 +本帵#7绕觔#fD嵦X嘈b鋺舂聧<璚E$沋#接Q]婍{躑$u湇:女苅湻G7i1嬷篞 =紲}硕迹V谏颍淥G顓悛W篭艮哌萛]6)>G竪>壵誎h馗NnΤ僻檜闈U忺睩(q漘1,鱘!牁癕>#殢汦+戯滶zろ葙+岫銔/L`>贻6r.O嫛樲U譺呋岛/喩,襟聢;陖謎1岶>  +顴4&#硒]甎穪襩A蟔歷LY_9#JR巙3雍啮Fp溭鯊7;坢O堇恘焢揮 砣鬤荥恨羖{溬链l<*i?>冂狲嗣峃楅)o< 飧=羍ndstream +endobj +4996 0 obj << +/Type /Page +/Contents 4997 0 R +/Resources 4995 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4990 0 R +>> endobj +4998 0 obj << +/D [4996 0 R /XYZ 90 757.9346 null] +>> endobj +4995 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5001 0 obj << +/Length 970 +/Filter /FlateDecode +>> +stream +x谳W]o6}庄衈{圶~K臧.裐炪臵! 誦j铂XV揵)J幀衦 {h屇$o罟嚰既嗱僱.s丱(窏k 跓弪{ 5fG跐?Zo~辆焎n噖5Ga勴0a埱v G誨. z<齐"zr盰Vk戯鈃荷欠幞匊 1F8Rq锃沎h'掄=f? 洒苯(&$謔{mL鹀垬6萴光B詎她簔耪&P2跘漽淀囑);脲jSe韶幎"^轜閂瑭x,涓眅".E┣+犉s(恱\fP.Cj +\衳a0銄86v'>L D襖a蟽FL傞卹臢9㭎tq 瓰q誳|d榒鰝 j移纲> +L =vx莩s7yU鈢 鼋迻稗覘M稬=Y-媏旀::杠溴0顴溨2姄d{壹AS霗入猢YK!骥X褋衣m1Vi +5餵lN;7W倴捌夗qH锢Y頙务〕\4鲌ピ=q纄 僪2泟搘S#(A衔E宀特Y琪%!xODVB~繡乄I邂【m嵴l/>溝希Ep1笌鎃住妕<iⅴw使蠡&桁鏖魟NK餝'Oxf婄覫0 _@ I酧"tZ厛;燘柠鎀堷*DaW呪芛Q9炫4T-酻'檲<JRB7蔔wS鲿(w'Sイ +馰暗L萼[sN2蒨O/篵iR省寋鍃襇=jt炚煟彰p徽F::頙W澁齭頨傐搽z=烤:(Tmv5 鮏@.蜍f)I鸈蔫.26p艜B脻/?巭+盓傭綇8狵,O 偦m梞噟徤.D>k%庽T征"[y3軵.\U徭九-n:2鶞醶t7苐促晟笾碛锥k{Y<胱T#e8彲X鰁ndstream +endobj +5000 0 obj << +/Type /Page +/Contents 5001 0 R +/Resources 4999 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4990 0 R +>> endobj +5002 0 obj << +/D [5000 0 R /XYZ 90 757.9346 null] +>> endobj +4999 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5005 0 obj << +/Length 2011 +/Filter /FlateDecode +>> +stream +x诮Yms6_醝;油潣 駷齊侷處c粈7蚻w\r卢 .啶; a缆 蹤蝔謟9Gz瀞巘$<?T$呌Q?|耐7@篏T竢譖j&Cy璁d繧馈|鶢q餷%﨏痄飢铋飓鹖(*荎23伡惙L窔堗溆9惜 * _p呯α醰 B乂6g餶5N貿(拌H@`"嘯 %1?テ饇働*q 悒D鏓AY丕腪!镮銄猓栐Cy蒶Y^巧6% 3b89茨洿6聈鑬9z2瘲;攍,C.墴脌植'/%D羙6馣=朥?巶07\≯㈧瞷`调纮+莔z4m唟輥~P(4檡再昡紘摇k滚騌G珻忊,粞96$7!匛嶙\覍.bS/堍,5A鍫劮:b罈5@Ux棻)cS票眖H{陱髫[錮 奙羿 粼I绷浂儒 +⒗駛趓霴!堼E欁胤.鑆 Iq脶=6)k8lR:G爡轖#惃櫋瘹7蚨Tu祾W硉[K=ど'閴0`霊鑯@U聽椏( +鸫 1%S +6喇z\;F觴澖錄h穋Lhf*ж!?O*_X瀵$O'Q-护A"縼eTu找8Pz嚃;r啓_粀簃捜! {涖瞯u_*6s\薦氦垹1煿秛祎6鑿?t耦繰{撗g燍勐62哕&筠.e倷邡痰L鐪21λ5!u対,9)L璠衰`妌Zo( 曤蝼执 钚╁薹m钩婟5ク囮秌拴NK{1wNp\Ec1uk庱`afjU猢湘屫讬栌殚\幟胧爷Η貈辧め5秎觩iU 糬発︳60 櫩欂梁}~娜1]bE,{> 74騅削F: +尌m轛Q,^簷锨  祾c跓-胻>渟У0枎I袔uWo繩*又c枊5sM踍.\k>+.囕4霓4&;镌:;n-甍jx%添&<茓uOML,Fw筜m夎UX:x 6Ro6m誀xQ簩h#1f轑sf碫U^>o紟U呗盌7奢Y騇;1胡=?抗諌ln3=b{I謖捿[ b +螳"廜@栦酯4゜晐+瑌蓳9MT崁醛轄%^癖"<櫩i婵反痖 H訾菺L繽B哽媄~$)K3(痬y8r|x-邱_瘡(j' 砂?,?endstream +endobj +5004 0 obj << +/Type /Page +/Contents 5005 0 R +/Resources 5003 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4990 0 R +>> endobj +5006 0 obj << +/D [5004 0 R /XYZ 90 757.9346 null] +>> endobj +2465 0 obj << +/D [5004 0 R /XYZ 90 739.9346 null] +>> endobj +414 0 obj << +/D [5004 0 R /XYZ 90 739.9346 null] +>> endobj +5003 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5009 0 obj << +/Length 369 +/Filter /FlateDecode +>> +stream +x讠RKk1剧Wz-l湙$搷仟}厲頜d焙娻-J哽f两2/笸銫 釥 漸蔾胷 W! 癕g!焆O^z鍣X随Fe I婭B`覍8H嶰/链悹俬寏f蹚M濁~~躒幻彀揎襥1b芄%f5c蓣SL 佮X>夫;8犘{抂aH煖峹wbt蚲Qw 2D鄆@ +蠛8sM53 儺+槯$7課盺F蛔訷R 斔 37辗M+錏,噺儣A鵛霐螎锢錼簞龊枈 +嶋黮輵-k邖bAM梻岚@澴嗛Lウ鶳愍Di=4黧揷 7鬒鳗p礀)賒漦烎黧华當WKK蟊nendstream +endobj +5008 0 obj << +/Type /Page +/Contents 5009 0 R +/Resources 5007 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4990 0 R +>> endobj +5010 0 obj << +/D [5008 0 R /XYZ 90 757.9346 null] +>> endobj +5007 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5013 0 obj << +/Length 1250 +/Filter /FlateDecode +>> +stream +x谡X[o6~鳢:牥讏錧RX摯K兜兮< Y` %M杛列>R丧&6丄<楋愮;(@莄逦l9违~7@f跁髇[嗤x瘘-sg<-pFG缑悜姏p'耛唓歞Y頭清 偯踏 b菷沣玲x碚b#弩熈t" 顇 |鎈(俺PL歂28叮'j[l {p9倹璋 謐 軫H>鶠鉇 犌;孆癋豰Kkp軕p=l崁嘑.椚~堄YREB鳛TqOi 鍞这窸|=*莫拪:+>簯笂g庐I瓪嫴#*旕Rvn髮慔蹄载xs鯲? T縐YT砇彥鐴箻,ⅱ6嚫垏欍"橤辕XOQ帙豬 K[瑭20琊BukAy &!怠竵馶6I劂礭達韥0p迫梽耗莯q;!#娪.2 (6*嫞酹m垰d6(/谳K5bj嬧<將b胰=3J$⿹P?姊埑(濵瓯==(椋鸙嫸eC?%A轈苓儃綃嬠i%梫懎十璣Mf淦\]wG尜淉綹膲P戗/儼,<慾蒞嘿貥B勓6D[馶塽,局 軒喨9娮d絭_椃)忒 珽櫏+5vt292鋚rt0/K &X艁8族7"襌堄稼#i]彘傴礂B滼z47鮡ab з晊淲楝尦穿,茧bU%歒軫a6C]]蜛@患$财yj絎嫭J實MQ酮!輤i2doc2搔a"-7;M淹虤4揓t +云1b(H=^]胅X炠菄绫!绛D藇dN`7'穈+(4H?&2}褸E2藇v袐n襅髬掞1攡U芇鯩2嗱2唞d繊翚柉 hD置}7y\埲rP跰 &mJ&u淖/#F}為sF鐓 _昂鵌7娙騞齄礄}鰈F"r儷鲋 媫oDf檡$憴X"赤~>F|幎熴-溺6妇邞骒嗄&FAim 7/@猿^蜛I$>sGV唣鵕赡i輥I瞲膐畽 ;憡"%T鹻髉> endobj +5014 0 obj << +/D [5012 0 R /XYZ 90 757.9346 null] +>> endobj +1366 0 obj << +/D [5012 0 R /XYZ 90 739.9346 null] +>> endobj +418 0 obj << +/D [5012 0 R /XYZ 90 739.9346 null] +>> endobj +5011 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5018 0 obj << +/Length 790 +/Filter /FlateDecode +>> +stream +x诃Vmk0_a宒酞t禴芰`[灰 垡O] Nf帩9v2鲞w蹭.I.芭漷瑚G:1熲屈橔扠噾餲 忷7竱1lnx?鰩>B烨$ 颊 崂燽汅挏8絆薥凵I9k酣:+嬦貘;?Zv庱P0c鲊wuM拣( c琵;淧骡鼌A豈r铽鼯Q廵}駋(|\憯u+m|勉盆插棑ギ2蚮(7&T$稲襂礚4狧C譸4[^禍榩伩眫>%隱m塪Z9o奩浗v雛桙橶z珍礜;婴N:岻 qo{瑔艿-涇闃:+,洢师#7 ]邥征;7y9MrK瘬*K嚍勁渭IsW潁g.]N:厃沆嫉%璻`BO#"誚耺`﹁盾捲1洓zo9譟4颁蠟坤 XR-'楢r$庚.煋T櫈` 襣錌玳>f4 "厍渲h!s鄐"(靺-厶忮鵫ry2j埂"绤貤|謸}F9逝秅⑾]閎睊$ +<鑘}H騶烇緦躂缎U)觡]=X捬幊睭W:-( ,)樑Z胄D/矹窌i杏 u盋冋7儺熽杳憿鬏骖饺Sp)剆H1矻韈F嶻楹‐1h澜Z&牨T TxP﹤鞒噦+"8緬v#C热薅M隠p馩澇睚 +E^[ 曢!燻$嘌汴.t暣]4ysj跳#.唽7a郌z 1竁bGXj>>(+;y鷾>t/夳 a歿O杶辄@endstream +endobj +5017 0 obj << +/Type /Page +/Contents 5018 0 R +/Resources 5016 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5015 0 R +>> endobj +5019 0 obj << +/D [5017 0 R /XYZ 90 757.9346 null] +>> endobj +5016 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5022 0 obj << +/Length 1194 +/Filter /FlateDecode +>> +stream +x谡X[o6~鳢:`白%)踡K"Y譮H哹驯0Ere)I1艨]伞滽媢x;W烍R$H档O阝g#0鰬I(磓?溴琱3eG徻|弻=Zx▆寃鋞4癉^朢5WU齇槱藎溙斯h歟鎔郶&縋禑Ax鎎琐r 壩 +杢?u+ %Ao>鼁縉C$8彾)镫吨哘B\ J珻y賦紩v$暹樸*蟭K<[}k:岺Jg>2 +d&a騟歟踉褀#/SLng@夼詖棯潍,烳9鏇 禼洰Tcq(m溪鵽忛审\vt 5{錟樗,僇HM㱮^鏉颦聮軫,}芭76奕=p扝篏D矅鞫zEIO屴盓礿啿秗R撙媗閇=>0R偏E^(肗狐輾猅L*-/顿Ll1仁鐔l 馱坂[t趀粄$P[赋%0粼┇9ge1=.;o薡揥カ椪,<-暪U踗i:墿-,>T[54z鮕W3P糝甛鑣:鍐捊嶉螈:K 劭L<=+旓!爚泑弭籸R力8丒珕aD漰9克q%!dh匑>8q"蝞Μ抟)1悬逊!?Z弄X6X;m㏕姿糣櫑\シ-@薣w穁睧g^ 尩拖秠sx<諈塠}豘gW玒8l套8疸揀赘I&嘩+ 藰~3X2昕, 追鶊捭壒:4婤 Kfn烩d 4鸴渗2進兣&< 7>忆a愐翌+&{癹;B嬨 Z渱Shq従Z= Z滐;犈姶$HCι漬^}鐴 堺埦r鑛丘搸'雰赾秳+眔Q/乑5m]甉睢刋xバ罣睤&痒駪践lDa摈5 隸1%/J輷X埰P锱H讔8J軏 a寍U1蟗:橏O9>na`>ɑ?パS髸gF:焻硗'攺诿c燜@x隽挣噑嵠嶍1蟏烗<虫uendstream +endobj +5021 0 obj << +/Type /Page +/Contents 5022 0 R +/Resources 5020 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5015 0 R +>> endobj +5023 0 obj << +/D [5021 0 R /XYZ 90 757.9346 null] +>> endobj +1367 0 obj << +/D [5021 0 R /XYZ 90 739.9346 null] +>> endobj +422 0 obj << +/D [5021 0 R /XYZ 90 739.9346 null] +>> endobj +5020 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5026 0 obj << +/Length 1686 +/Filter /FlateDecode +>> +stream +x谳Y[o6~鳢02`K姎%)拻寒h譼]妌薖{h婡曡X,y耗蛫")櫜dGI灃<2/;蠉"欱駨>満綜4\M圄Rf倀鱈粝8< 鸖 抽|Q衢<鷓尅w2.t醧uv.#U沲梎礜竮9吐j庞2(,=4;y=o$k`詀H数{蜥淔噗 庯验F粿|OW髵L轔~o諵鮿>(rD坃把 匽枭 A彈X滘0 颦x`y砞[伌o{薳`躄Xd聥澼NS氥@;叴8啻峘濬I斨呵M閹悠84na裿羊t0 讉皨u絒A+ざ遦|  饢迮钜硣%8T聓w<q][#z?bw(槡梣惸l鶖駱NZUESJ涩椛岻I襇嵺 ;"蟅(n姃瘑晳抻溷暽眎嫆:[碾 箓鈈辢 $U<阽漱C2丣嬰,巣7A>k(怱jz5韐_萲L筈睙躓 姩a妚S(%必ec瀁迧遮嫣炏_槭}軹騥塨S"\g >捏:4P蝣簏穇咚) l)眢鲺[#="飄g}濞].僰腱uBg/舷_絴鱊G 坛0]橒w;Hhg6牃嚎璠壑璄sj=< 偉銒癗~橈苵 +y汑%O壐A9i.SgdaX鍆b/絒屏%h +R举-EL焻/y舾3% +J絁愮5/L蕬 0 +j総刉i _6摆A蛉Y亍詼農^鍭Z瞝&2JM> endobj +5027 0 obj << +/D [5025 0 R /XYZ 90 757.9346 null] +>> endobj +1566 0 obj << +/D [5025 0 R /XYZ 90 739.9346 null] +>> endobj +426 0 obj << +/D [5025 0 R /XYZ 90 739.9346 null] +>> endobj +5024 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5030 0 obj << +/Length 1036 +/Filter /FlateDecode +>> +stream +x诮Wmo6_!鬋c;燙鄹Y-ik"说0Yr鮎鲞7)*舦W,!閹|9蝾xD肉衦 8qlF喧$臈#d远雄/妫骔榌p啓5_)[箦1tbc +请0嶴{7Ap渇搹髃藖 t9C.ィ榧6iQ聬4鴜酤#礀傎=j砟坰lmF&誈<殟拗8Z&9F轶孻B釨Ty唴.v1阖眑$O﹡R9s罢雙b3芹,-< -齃薒盔踡~~ya鯕旳Qf!P杔L鍼拖=老畤Q撨笰#纐J 蜎厝揕W 卐碷i拕A.鼝黫~+ 谾汙3粆鵽qus5琏稠銝,J秂qW甐aV ?耇m+?髫r鸒 睓q~`侦Z%梣W&'锹(胥xo溰檷蚃谩*揁咵57r_凞訽k?Y芶>M櫂Z鯣抛蟬1¥Mxi峭F7>=檦宏 , 摙騃E硆h*麘9搴&骠f-)╤ nO3顛m畊*a庞⺮('-掔飧n%鐠]夐砊槾柑譗砾麈b晑漻隝涚潰襱熖罬橶9稂结梾$1#: +S欘盛;9 繄<鍹N~曎U鮦R+岂:U$6"噸+~f杬-梐>[雧P鼭擓o Ks&=9!MN`84v飤;諷<愝 +:3@vg嫕焯鳐#亠櫮猔襒īK赲坚胬悝赕嗯趄軎 +!噠B訠歁o.躇籲鑇閜uv諌[緉'y4稬緵>繕遶 )尦A b0摩$羦oi鍴~+馕 Kc辫QX V(瑓蝌粉亵鸲粆B瘏$漆苗(偔S漫4窝jF黯r苻 1漱优J =1芗2Q9圵] I2L翷T槬拭I>痎'垘K髞皔搂<臥a檦[M0鱅齉^1x纷蠇綦䲟8:#o}=塍/ 瘭羍ndstream +endobj +5029 0 obj << +/Type /Page +/Contents 5030 0 R +/Resources 5028 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5015 0 R +>> endobj +5031 0 obj << +/D [5029 0 R /XYZ 90 757.9346 null] +>> endobj +5028 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5034 0 obj << +/Length 1357 +/Filter /FlateDecode +>> +stream +x诮X[o6~鳢花轊u眯魵贇鰫"驯P[ReiiP艨IG挬8N嬃骓滙澝翎竮{畾 厚阫肝WRw^fQ禆i朓朜>娃峖投 0F8~]|俕A@良k諄鲋#妷憩FFn蹊塅厘C捻 峘!V鹕A荎筞e与 傘琗臽賥B0戰=R !霡眿ы@"嬈.ㄡ犐+,堑-)R.S縔瘌q35菸 y 鬴 K53`"5苢橾Y昸踑瀘 L@ +i(К b绬鰉X荩_鄮禼銅]e瑱倽1>OqGw #à扵 H]僱毓I脲2亵鶀澵;鹨尐醌*&\'9X冥`VFa歠eGx(XB9#J羸锓珞擉'gg.嫒觤!,.]嗠廳<fp埮仅睆楖埡騫豼柄P"Dt六.拟'iR +13岙杽鉀飺緲虹g孆阬舿璜乐6#?}!|拑jgg鼑^艢w=另W/U欲姧硡G琞癙j╫d* 7贱偑穽w钠曢∣]焍@ !篆硄胛頢a}抽W炉7Wr鐌皛竤D?Tndstream +endobj +5033 0 obj << +/Type /Page +/Contents 5034 0 R +/Resources 5032 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5015 0 R +>> endobj +5035 0 obj << +/D [5033 0 R /XYZ 90 757.9346 null] +>> endobj +3302 0 obj << +/D [5033 0 R /XYZ 90 739.9346 null] +>> endobj +430 0 obj << +/D [5033 0 R /XYZ 90 739.9346 null] +>> endobj +5032 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5038 0 obj << +/Length 1998 +/Filter /FlateDecode +>> +stream +x谕Zko_a禃歍1a啗I_U%6洶r x覷[p屩薳砆|槂瞲芬儡蟳9兤,鶅2;墤9^;翀?掙⑼>﹚付F梠<Y拟刳3垐0耤她鞮fん 爻M霞$趠<椮39脄;尜) +"<飲蔾G猆璈8咫=v赁嶺啌鴫X2#sP貚萄/&頉&.}U騉彂_~朁菪r胹玒廄莔z鹪N峋"fYVc谰篍瞳蕾F╋x.盖桮诋4y氐 gg鸄y巃供yx +凔燮m翵7s/\級E蘅sxv +n鋎y来倦躆D屷|檼摏 9A9日w磭5埨Q諸W嘸HP薾璽]篞 & :Q趽騲斾吚尗#覇&Wm咬A8(涼灀;r謴芄幄>舮(k!I^賋䲠 汁Fs7(櫔馧洨鎻TN輑qm猅诠b)-寜匌0竍乌詵絥E~暋--0+K訔嘽墉~O( ;a-朐-烥犬餂J/L荤bN~ê縐蒵/-C┴mZ6砠堁砸 踷d~~Z7 鞦]卧孚z絝C3箦jU+詈抨释恗j穐}lI!~^棶ㄌ遡Y^H\穿諠0g穈 9 )Y };$Hp8鞨*珶湰訇迵詖>)5=I┽;徒^1齉1Bu#^捒畉/^3' 齺昊n紻紻5o虳|祺X當齕?tv溡俊爈96?:$篦齾c 褚褟!X瞉H/.▲J 卓;Y猞餕?]^枧vq嚀U憻篁技=G耏F '{吂+號0遨 艁(/哖鬴h屈w嘃9>=?挘B 烖# 綀Jendstream +endobj +5037 0 obj << +/Type /Page +/Contents 5038 0 R +/Resources 5036 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5040 0 R +>> endobj +5039 0 obj << +/D [5037 0 R /XYZ 90 757.9346 null] +>> endobj +1567 0 obj << +/D [5037 0 R /XYZ 90 739.9346 null] +>> endobj +434 0 obj << +/D [5037 0 R /XYZ 90 739.9346 null] +>> endobj +5036 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5043 0 obj << +/Length 1362 +/Filter /FlateDecode +>> +stream +x诘X雘6羁B谰拿舔!Rd7 7K椚輤0T嫀匷#蒶俛(慗& +0;% 舼嵬鰊舔Y嚫頌亠2榧xM暓Tx揈虯)∞$>1 pO剁Wf锐 AwQ篩i;9]戏┪狮L諽鼾銶g0y8 茩 展窛膑貗崁o:1%棍蒐0"JQ/眸5揢g荠齺忀悀0HA釞揊Aj 瑍Bt{銚飹l沮期蝵*<蒼序鏙没/|n!(>, ; 璻磫0婶m=z9⺧澞5抈(孳6/k咦[> +$%尬篈\秕6:蔃;Xgq鈊|Q觭8E!.)ZQ窿!裿1Hr炮B繢輹(D╠韮霫腉妾[g#蘋睷鏨床\&Kg4篕襪j'6隣s;^;k溱\.熹覴gv;伛b0慶詹0,骠iw,聕Vき=洳鏻4槍c !基"&< .婅骗.u胲姼:!怉(6>m\悮ㄜ蜬;幊b秾軺 it{D毻-3J!J貾蕟p眾n +蛎蝿侶(拲]f/鷊腬坐j轂_鼻wL$>蔰x鮦x:槏't舧銬灺<|;UBZ陈#I鶧÷誉柙nV燭(t螂p詿溈5"1l鵃n,|&,:I(膩.-JJR佊侉囷98 +孎乘g 垑"損>z|#晁L鷹;L繢猃2)鮲珛(爔Q腄Y馡0偮坢固s繞+箬蛮?&欧Mㄖ@r p浕侰 F>!鋂桯垹漙U'豜A珰蘨橲肸QP巡╨ハ铓葮暥%埧騸!/&践** +翰\]喻09r+澚磣C沴f&娿83艔(\|汉4vh偂黌辙羖N莾υ乆u0_IUq + ! 襎勼鹛甈KbO隞P洓丳zjj纏鋃牟溅蒁l 聍埶緅瞒H]S搵}1鬽秵墐=bIl骵?:5;D}峗S|摊)+_氂螳佾aj9og冃~(@x V瘉譔&L +_惽5緜缭4" + >?Q宴O鼈摼|R睇坈,?55愢獄 醖䥇腨M婋鹅pT00O2豐聴Q鑉墭r蟏貥.婼齠& 葵dfJr纃酡抹V]^#J%鞕蝨n襛l侵欭縧o簞焞荬~c馣蔨R骱fR楎骸&p顩富谨鯲=V耣轸endstream +endobj +5042 0 obj << +/Type /Page +/Contents 5043 0 R +/Resources 5041 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5040 0 R +>> endobj +5044 0 obj << +/D [5042 0 R /XYZ 90 757.9346 null] +>> endobj +5041 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5047 0 obj << +/Length 1592 +/Filter /FlateDecode +>> +stream +x谳Y[o6~鳢 +t半X%)^泆@噝E6o唊+壭XJe9m蚌繌eIX鱎麃淆痧8P(L*<-:(感彑u0>∣鴈躽+Q +'<煑8$线tU(z翽7颽賺椯誐O爊8虢?(!b\ 7s 幪游p\i僗谋痒斌 +孚扮FJ侧摼A!V%懟龟渦鋁B舌髬崛伆s宧?咍 GQo.媔懱躸練鰖昞OV箅,K右WLeH(%kC,<癮$8=纤HY鍾躢;滯舚3, +嶷pRN楨K*j=e蕨 +}XI*岃&箨 据疶1r脾紹cD妱(賠I靦d#冤nx鮒/I8O燙g宷轗!w凨厡訂莎琞舉灜..硗砽q=ueСl享陀3{慛1黏@算b暓Nj旄仛澺1)Bp% +┬.4]Q;\T$絅枍#`b[穢佳馐泱6)>磍.6EhK鮰║篖.RW_乘inW)cX鶭`Mk"2灅\紼 m椇忣蠌8空0h:鳒鄸k蘪字╪kX鷿禃u靍蕨勍砿*Uo!#趗k3I'懁r疞杗鼷雄刮'绐﹦!焜(觘rU&l▽錰訖.|Jg$鋱鴏v嫲F肝u<7:镙熭;*︼氪憋浮醼是 +嘍扸宄|犄K迀3 +A0扆's [St潰Hr忨畽轠鄲俼袠c.Uf惊 "*z@啲 + +闠郟D傅8橻2wd粘c秾淐 +Gk5鞸`_}C9诜鰂#K%怙n徜T<:N宼k +;\%刷 +錢爴/c槤G頯Vu戅:D^No-竸觾軮3}门8f怫0嶠帤6/#鏜:砋榚mo僐渳K(趴縞w≡M柼組@:>L獯虚[殠f*`觙R[秇仾唘 ;物6玳rr9碪A=苤L亩ㄖ}嶧疐迀K +b噱讁禞珥槡耄趸5 /邝CvMa颠E*揣w袸崂谮佀)<R綣+你`籓蹺vWY趧i爸k噳b﹖臟Z尽*zZ'9兏' 閚9n-OU5悖靱踘曏7妠浯WQ*醓m6焜虮耸aU锗牶06bリ%鷑xj枅y頌O嬮憋[1辭'HW邳?}(?繦蛡#R"掝3al~甋<a0鉑w窦嘫w7樌戣A鯪嚁郢a,7珦遖v哌隈i鳄"N坩1遆<聩`蜧Eendstream +endobj +5046 0 obj << +/Type /Page +/Contents 5047 0 R +/Resources 5045 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5040 0 R +>> endobj +5048 0 obj << +/D [5046 0 R /XYZ 90 757.9346 null] +>> endobj +5045 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5051 0 obj << +/Length 1707 +/Filter /FlateDecode +>> +stream +x谳ms6鴞~E敌%踠鞄研旳6蹢宜箟埒H渀;-#氡k;r洊}\j[殷*夣)黦齹=閼@釜?烑h嗺{ 榳 ~鰹芥A? 佲?供}娃 Y苪[}+瑢谷榁|{徳iH~馉V塒义Jd艱a暏秩Xr2匧[lzOtN矶霪腹mUS#>鞚Z昜鷱7站M〗胼Z埘?牢u匈煾:罙.;r+A>嵽<洜縉餻56E跬縻 遗鴋彯騣毝/y燠8){夕£gZ ++]叭j7$雱,拈鋆(颦'-褼cU9颭歭篤"浧觶1溾 {尲C'屄I曅 麙3\竂U;偧 湜觿 +_q訿"Q*黇椇g-糍僫c隗醽lY肿貇郩Kvc栧&7m轳$>礐椀0.y< ahp8<:7鳋-4姠傟gI篎_ 3敲椕R铝醻{尺FimU禽僎ie-籛瘭W刨/郟怖铛0岭烉)秽墥完~擠)x悄\,髚W炯賏r{痻溢\<鐇誂櫡.返牾曲漳賣y+聃"Z粡- @纄ndstream +endobj +5050 0 obj << +/Type /Page +/Contents 5051 0 R +/Resources 5049 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5040 0 R +>> endobj +5052 0 obj << +/D [5050 0 R /XYZ 90 757.9346 null] +>> endobj +5049 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5055 0 obj << +/Length 1755 +/Filter /FlateDecode +>> +stream +x谳Y[s8~席2覤-t眃墔伟啦0,煲0 0c;崌禖圪蹇飸%;+嚖郄韊l雛t.吖H"c 縟8R鉮1裸3h~>"钝儈os/撗齙+闵处 鈹旭$䅟燩p鑁奀"2; ?M^巬,堧睌p:z6iW q&坁镫杳'<巵睏#寴抾|ヨx1)k>妫撗-観Op膳 s &菩`FA卫菶扰0轸#8 "\.;N娾絮#竽0倶卓k笰 +鐤<魘 +經T*3蓲9<<;}鲻頉?;(KΘ鮸:蚖Y躦Nz絲9s pK琙檣 :欹蜼f畿7`3)滕s奉Q 煄7碴瘸y嬄露厽骍e^珯mJ*3瓊rm0媨矛鐷:I&U68h,优册=NK`?NbT疈檹%綜> +$%洑0后(S坄苳\q琎@賮熏瓝Y癦疵喠 扸U 贏娩g62N兢藶4瓮[ 嗦邴帅V瞨柉嬷N读AY8D$鷴亻醂6貒;毪U蕻l8[5`猣駰.岼lZ刄438 `C0s燣a$筨=窑E"伬2,输T鱤ThG""@,爘楑5~V轵"WV }<];磎 <PD高 +閷F矇F绯t灅X箟疸隔m4*k厌唍菚踙3M嬕隗骵5胅2_Q襹Eya1'UR,,眀寠hH傋僠敐e5鍕%,U&裾咈34藡E8ob#g洒U癢dQFz&匲成辊蠽坵皕菤"篵]O緕 醩康耩篧m蛧鮂偍鈚(S$杴敄粠岟Qg杍GY.Y"酮Z氟r呝y 蟪[豚O 掻d偾0GJ ;l&鵱撿糒秞"锥仉紃m:1偛掞e臘_,瓴b9莤7且霭糇︸蕕"S矺硶9aǐXEVV炡(v潉`e霑1o圇銡K[T桲嫷65G蟀,{mU5锏虛飕5嵠9 鱩.0qF鷽eh;蛛k鶑z5W軾s惭[c蓍拯⺄:楍筢C沕:&ZQ#i 糤y0鑷泳q旵柔孜繭t礷sp撓^黙#Zk镲C牠鱛d恏长劖*這蕁]鎉袑突!盻$溷郊0礓O諳6y篾D鲹淀镘q*沋幾嗷6)纅愡纈83蘯$9m;F蚠菂G'壳u)谣&俑々/m)彍灰i嫏樵MInv鏗鞪g儯u副M.#箎竭;O讹觫ud剀l5醣(iu$ (`'h+瑴嘫u宇O6雼Q'Yw皴a迷052@蛍6灱鉏諹V單-椤s-F倉闘卅l┻乎竿箝L漬圃柭屟&z^硧uR≯庬9厮湱&L1鸍婹蕫"胾&ń淃1a6晜s禬 睝}I黀せv飪靰:E,.`謤.飉 + ~牣-G 嫲97x髟屁*嬏櫁Y襢李抮_ 5!舄h/ R蹩3;硚-OcY藹詡A2褳璯 邔-眳1雿忧a玿y錣思 +&Sj 潍 "倠t隦I楤菁.侻p纃s玝櫺>O菠+劫謜Fyf灴7// ?X澲'~@?a蕈嚁T鷆u=賮/腕i~qyugO=鶭取損櫜endstream +endobj +5054 0 obj << +/Type /Page +/Contents 5055 0 R +/Resources 5053 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5040 0 R +>> endobj +5056 0 obj << +/D [5054 0 R /XYZ 90 757.9346 null] +>> endobj +5053 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5059 0 obj << +/Length 1399 +/Filter /FlateDecode +>> +stream +x谳X[o6~鳢 +l嫍J%)^鄣@噝E,kg{h傽卞D-94 嘄鱍"%2-莕煉 潘狴螎:@﨏G Sg鏩@=硎ywu溜懔?恜'(⑽xVQ犘#"g<齶 簣姡睰魛陮嬪_g*<8黩xP,莬p6蠶>}@耆` I糒狍}?,[c'铵A<#9阬丑"鷛罵蛺o溦\'憵|QM"`菂Ru榃K~璮扒8rV嗇鱓頠B麺g谜樊/戉H㑇H姰厶qP留v糆#靯,"淘﹣j鈆猑枿6 rc蓾躍筦5K襷]%q顽獁U瑉I憑Z緡) !袧咅鷛ち⑺t揹y;苁#尧恡襥/<东輏覣亿j9働惥&言4虙薘e$氒i!@鑓腜*穵zC辱 襾,+oZY鹚赑戻經鎅x骷韓爜54紟<跃樺i1蒣僞K%,崙J5嵨:rt:⺶4:覭-/.-悚熕领sta鍧銌7u剎 潔邘G楃хg[_籛i苴F}- 钉"b奋諴m詻Vm埒脷5漮;蓭叕3鮨跊鮌謼iPnzXd传-耡岻瑊 儃C}P檕垔赏暤% 鲣k蟚舮%鏨_+薉魽u殩Wl麹敞Mw +G偸kb磯伴d鵣xc賧逇闫 栒朿蹉U7>齝Ю(标#鲚n^腁O釗8T欫;g'Ir玱瑗 浬aw掅 M蒐捣qr洓尘\戙絉aN鯦呫$o蜻:翝瘠网搙庭P 纄P8榦C燧S鵉渦ㄑ)4┇壆)D!-o耆礮踭=芶3掻}R牟0 S附&AlV&EN蜌 L#茙唆截髓厮栌0/R-猋&浺皗鮌{I.歡)媚滋=C0滼&j朝舽z~rb;nq徥襷p狚赶4#kg仧茼(場vHe1Y`G佘2軋ˉ岓挪S^譋#+蓵鶽&懍<蔰汋湎傦Q_ 裦鰆#熿S 7 +'bl弦袃榊熕乼H 腙蜐-蠫玂钤嚏鍕磸淦2k痀)檥芶*侃z\/CW冼Yw巼"輦椚夢爰,熄晖唸TaX瓶z╛鹂=\噆o麇:EJ藍endstream +endobj +5058 0 obj << +/Type /Page +/Contents 5059 0 R +/Resources 5057 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5040 0 R +>> endobj +5060 0 obj << +/D [5058 0 R /XYZ 90 757.9346 null] +>> endobj +5057 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5063 0 obj << +/Length 1263 +/Filter /FlateDecode +>> +stream +x谳XKs6倦W皸屧$&哟VS{\箥增鄕4贉Hぢ嘳窊^i妳)藇s恡纚胞-溉侐彍:驚@(wft.d鼷2卯w~橍^⻊'擒,J v&笥~紒歆澉E,靸汆lr銹雀b洎揶pR飄b#颠甾t鍾保$饳s- 牢狦1宿各[-G l"6`軕=D0,qz卙"漫 !z9.捇P繙髆9)r喫O椝爹e桿C枋2蕆訒2f(Z存漆蔐譙Rt,嬺z甊庭@鈙y眬r┙F.)e' =陟憡糎嶞扬乔儰1瞼Ю篑x}\.>罃庵帜"I?B#秸]雷F{]|民神俞h蜥p86S?忎z擺轮VT讁罕3諜滷gK橸-敀F6嗣#hu腿hendstream +endobj +5062 0 obj << +/Type /Page +/Contents 5063 0 R +/Resources 5061 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5065 0 R +>> endobj +5064 0 obj << +/D [5062 0 R /XYZ 90 757.9346 null] +>> endobj +5061 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5068 0 obj << +/Length 2089 +/Filter /FlateDecode +>> +stream +x谕Zmo_a*5゜买fH逆bN巕'=禃K 幯汆驋\?邊萘|Cu_剌gf灊@]C]呿雠>p傇]l:l7遳眍狺撖穠琥=F8﹌/$膱夂尔囦譯E狾qQd/脪傱儋l 肊厚偰I0更塔醒靊e +L%敪鸒鐝控畫~璋 bWX) +纵t巼屎cu~+!鶂c驂?. 苈亜窸T, bY"篋騾囯桲,-唱 嬩~废r 蹢J>@黯&h.谱g24璨'a(踪 r?鎉舰OfXI[諒蕒F暂k駛愫I呴柆浍p< 隩aI1|險~~6崮l訔挂l譚 +8<欨5趽我抟屈瘯z吾内7戁"t=RZy 釲騳|H揢HP]gCJ4璫R另亢Y剾_闍(咭缊望豶cy永皟晇3頨q'F*in"y晲edEvP藃=鼑开Q!Lf$蕭瓠哩5錕(.搞E/炢磾p柖闹M硝$驘<.澍溊%4Μ鰅Oρ芦<蹁N鬎)F洏誒V|蚙4i[j-&t咳]貕(沫m$(衜绝.話晸@綦u习紫鎹鱗#.鄊间f辊虉!棈JY.m阁[4N潐.4鼂V)蟀螌X嫷鉶紙n8乬X^朖9兜豆&m珱鉖蹣昻 +9S*棘嬱鵽p鞥pKgZw & 意艻既w B=廖Q韀磯5#OYc肦伋袷 +邞`/謔"l7J-襚悙鼁F嗷a,&L -@ 焲衬險囁涞H字[d历w睫碰P_,{!嶰XW:'s#=议币2捋彧⿷碞M鉇jCR积H43{d槫擢鴣鯫哖燙颠ЕfY \h|亊?雬薭[,阧羯`<険;Z繚伽01ha6尫崼姲0}=t5J矄駷k鎌;訹}+趞揕墹猥詃猧雰賆ネ訖95,6><曛`髭;腻j璕?h猒k 赫觏X獼T/j-翽7祦]p`襝韽i5zQ觺0T#膩1贝遞x ~l麤臥絎飥#俳鈂2泯<槞趠a 5坏l轂費Dis ch暤di鎯>鞋(N锚pfi鞵嫡妿橗0竊翁'峮Zc'秄毘┉撦5nd`j刴 X圻&谳X坑&稇I皎[贜楠衮% +>獱躖呎厸羏鐼liI!~^碥匥WTzA谽[尺m塘vC紎惟乷奠釾昰谷Q窷斣*釐Iwy,v葑暱X7}釴粋珟C觓滌畾呯訝))婄QgVs)侂疅接蕁 暧[琶m饾t鞺硘鴼W滩⒎>餜^聃溘冂獟EZ/K塬W '耿溍'{ 澲栎kb葔$圌7 +a譨 L攏6礫癡x﹠穾隖S+ 涧CQ闋Ed"鵙 =[膵忝覢,懑F@ +U'3疖~R纣"L譶M~铯o%&樺0蚍I+嚖'0<纤_翠瀡R$虸2W3,|.妛b8檽损與秭儎oXlL$壱W仅?\愸膕%F閏踟.厢佡F抇K嚼嫓軓g_(d.?嚶嘖$^ご8辮 G?q任偆醇淠渨Y屦[,H愊 >={@d_&岩')'endstream +endobj +5067 0 obj << +/Type /Page +/Contents 5068 0 R +/Resources 5066 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5065 0 R +>> endobj +5069 0 obj << +/D [5067 0 R /XYZ 90 757.9346 null] +>> endobj +2466 0 obj << +/D [5067 0 R /XYZ 90 739.9346 null] +>> endobj +438 0 obj << +/D [5067 0 R /XYZ 90 739.9346 null] +>> endobj +5066 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5072 0 obj << +/Length 572 +/Filter /FlateDecode +>> +stream +x诃TKo覢钧W臚蕍f遊."廎\Je呚I#:qJ黽謂'丞#R亅貪澢魍C頒b乭┅錌懮22s荳6顏疐临%衬R珮"]A! %7ˉ&0 a 覷矩DBz輲咲 +^2凑ip1#6$WX彷7稝Gl逯H蜞 爃-#薂03羥餴_;陝揪$蚓q'ps}j邨R袬刧uh)2鉰犆x^{,旿 i漘栙d=铣$ +橀IT諭鮜(h硇,JH螱{>泑烒]Q;炰亵+H(Q舓O 9? 2蒝丐叓/<>9 J%`<)p俰任阴 猇Z˙S聾wA響質t5茓<^&w懵_9P#-?㎎6^:B1祢#M迼i表@?閖丙nU尘羜O鉟%骾績8䙡q輻鳰!奞T>%魋}滃_攉荁7Awm皸:灀 +R篧X镣昑:梻湹臲9裷緿 墛銾殽舩&^◇摊飛沘2,Y陈9沌 寂斶M#&眉餏cM浝o[烤ngiv8濲{骟邸嚉endstream +endobj +5071 0 obj << +/Type /Page +/Contents 5072 0 R +/Resources 5070 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5065 0 R +>> endobj +5073 0 obj << +/D [5071 0 R /XYZ 90 757.9346 null] +>> endobj +5070 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5076 0 obj << +/Length 2024 +/Filter /FlateDecode +>> +stream +x谕Z[o汬}鳢皏+mR艅n&%6IN嫡.乹宩 8i~C獶b顂蝫e!繮f噿 12菋C懊軀9匊G苇灵攪2#婸Z玪0ph篃 d廏Pb%鰄-pQ`面鯖韔7(疞Cg纾 / 幙X猆霯 襺|] 瘕e8y, 焢卐,谩?!G+泚9鳳瑩wd汎 k&x稝b翿N棊Ge伲豋秾SG>尌∧B啎膴\燀O忲G!F%眬BR 鄕$bч<鵴6圊氍kT魨V敟\C沓D 髭?幏]7 吠鞫粉8r X,G欋E^萬p谨喏狰Vi +珴2喔簶恥睍6駁)$O歊^2E^RG卷mH? +\礙h麷-堪Z浵" 襘因uA趭 ^a赮m匢鑴わ3+癌8鏞,X/@n^?崑 稅检Q3 +sz揌(8讕任O6:\*魝6 卤鐰{Z莂1劮h {C謧EJ"绲Gd镩裍澤,-柫毷1庹皍篣5谹d7 +*襲鳧謄嬲-1hy椁逝晶{%S祏0醷3 w蓅M哂5昣挅{,柝{DbZ 2饎嗟F<,訴B'*背iё礰4平鍡蠒烽棍皂2!{ {棳C做笠t|E詅呲庚O7ob溞讈麶mC貭m冉ve摸2 愤#颽潝Q)C>dYE|^呣8 q 袽刡=v: 斣爜\/N""@裮屆]錉讪{/#YVa淝D碠^&q7*[0諲豢[氕<'s4#q"逰歜pX魥創齠>) q鍹醉H(帙(9k_欕I蘒テ调=:膘鈩Zgb{AM2鰙鳻獭B_:p掾tB鳐塽鉗\濾j疍-j牟p6剁81,7珢 .iS 譂愎幢U;獝C锡?^旹:讪?穜@翝襭 I逊駴玤屿Xe*韐此j鷊嶺y%糱呃鰇铼E膲楈:2l歔髐彟淥u3N殳煘W頠4荜0~欺.*餋J&鱽8塃鴈,猜汴6嚝) m姂3≠)遙嫓4疨|^懨4{ &巁0採!箿霟X+$鏱篣 昘i]鷯6U睃帨猱璋筰i忠"UeNN艄eh鏚K7菳瓨t?(嚪?)s侽0T撿d唠臠0SC橻歫濸&撡r/Ic'N翷恢,:咭OJQ磗膐AI╘恵 諛\錦沬謁M5/豞P +Q╞X赿9SH骲i,t硧C,WX裈3'3E籚8槈橨昲闒鶜W蔿謒_斔s:W⿸旙Y淊﹜M5C漍呩元/X53襚.詨V栽*V癰軡f3蘥璏縊成t懻澦駏礃誱鷫茦糌%胖.澎&=`爽樻恊榤 E  乁`uD鲐駶庆T廬俺C=vbg'0;l)5艅:=┢`汍U&碖sx篛5欻!谹撟筕JuCb. 17弭*屄_迣~:Ku軋驶"婼極j埧񵽈卺彲_=]\総悘Vd故?$?峬$Zu罍丰u韖洅叫z:P媎粳歞篨w肷$+秭巿1趖y晿輳 w",-祁$渘#y褊鮴tHZ 4vi救險g漣F\吐沝鼉 b4輊廭濭沭 6N摧麬1耣R嫖*旎l栵\= 棽霅<浴惟覜鮻%E粁{饷娯楽(EバeH7舳[駋?层8攃$帻Q,*睢P塉-斖M√汩,]-邺芤嚭"]例品O44@$T咼鶋翍T丵!枳椙Q詝T岼睺奷YFe䶮章栳Dh庙牌F哣*' P81 <La480s 8颀s3I娟"痤9yp璱鹙L6磉:丂苑颣R萶簮.P5盦凤O,m讻 嚻 瑛E度姼桃%_韵7崼埑u颖粂O甓壮瘞瞡ML滃E軾_緅碔x顂> endobj +5081 0 obj << +/D [5079 0 R /XYZ 90 757.9346 null] +>> endobj +5078 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5084 0 obj << +/Length 982 +/Filter /FlateDecode +>> +stream +x谕X[s汧~鏦袟屧)浗胺d蛐苆芅S9檘<寪玍匥歀瀅@6燛`牵饼{;琨栵dC鯊l mN9惸ev氨爙:遆v愿S燄沢=K[0辰ea!@1露犯a屒鎼肣~z甞)!藯砞噀$騇e~秺q晈fM糩0J襼?Y梂衈(gD +j )苯盶Lv嵉5侈呲)&~Af褞 V|y2v刾t>浘~;烳<櫹紜彁耮)卅q鹣/c嚛 )諐^jr薀#佀\Z檘嚉裖羅~RXA +!耿0鰏1.0瞜y荷扼 壷wH$"j纳8/&繛xS视賢^w6脥舰2綵j)XE<晃椝0箘Wュ焇輞磊A冱蟞P撷}t6﹥砟缏ja盻8 +2=5M>渮命鄪芉-$:G]c/躍H)3v?!- I 缿-D虉7p>TH0鍪束P!!Q貝齪!i聠恱鱸躳4XH魻T≦*魳R赦^6O +赕诖i祻R31i[&%兦3傓儭G +~jW!;\\鞓恋L釳 +=芦i癕砩3揋臋孀嘇 暶醎a蟜 GO鞢pl腎鰌鵱覜:尯儙#o6LV馼刂 8i鱈x2g.橉hJxD鱸舭凣郈g 芧鲌蝤敮鶲lc穎锛簌溻b>}弁縴毞B獅/ 歸M攦蠇ALD许b]'<轤醼P袔梙"1@X懂n!KJ熴章DY玛姥o穪恐Q觞"DLk幠岺蘔隊X莍ō ]O嗌]=A錒q┿?\斢wY●皇] <壧s琛悜l'蛞穙錝O萔沺缳Pn黙軇镠A梤/谂$/Pc 嶟P潻〝 \/敥儎‰H珔.梅P47a&~+$G弩蓊錶岃(WO釜゛Yc:姄脖_|箕韩粆鵽頤躷)贪K餙endstream +endobj +5083 0 obj << +/Type /Page +/Contents 5084 0 R +/Resources 5082 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5065 0 R +>> endobj +5085 0 obj << +/D [5083 0 R /XYZ 90 757.9346 null] +>> endobj +5082 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5088 0 obj << +/Length 1329 +/Filter /FlateDecode +>> +stream +x谳Ymo6_C<,%0-酆dm毩蕨Yv促+K聿}蕭J+~)1I<倾輵B? 棂侾頔铲欘戩5_鴌:x+俢頜缯靓7g瞘8 瀖VD脀觡徛@棋愱 寜j2宲ご紋綑剆=垁yH飙L糟鑾J琅!猗=兮Cd閌闪譴0劽 + <鸗1戞r蔐/2綂靅駩轻-dP鏝<駶甍7B 猈咀~紽箬她U + g岇覎毷5 ,%$%=瞑顡卭馁q趥3Y荙2O8L鮱騤z6q!蝝風朕4?}嶠蝌cs<T<[虳&澷)湝@他库ㄨh僈湂k礩t0匭Q喫 紥 %0乢2N;坉寺V;尨?D%51伋L7"礥w潐;﹥怓頥貸跙鍸&鲔T賧G%拃%E玼x甿8罎lB驭5!蕴掕"*A鷲.+殠-Q駋;XO岯篙yi*7d栮 2 7縔怰 (|扪;Q豃┮,,i=g阵埕跬D鮜俺!稊J鏁僴E7緗YYr翻,2GQ鍲:誕詗凚5:0莒*3`(┡l踕燵=QK 娷豧︸6U箙j?n法_嬛1{\[$h娫qu躙nA醞e霈雟蝥蝼猾洬忥6`缴⒖mm 抰]麇|经窊悻ro殔趍殿恤悶*炑o,=眘d蜐c&U怭/譇+蟹ac胍截欒抗I醜蠞曑蔥瑍9 摴-P俨}(軨|鯘牞 g簖陒D E镣瞯餓`巷 駿溒yX巩&R挣暯"&;齹肮 L.!亃r}7bv栧:耀媾鸊}9q蟥e 爀ndstream +endobj +5087 0 obj << +/Type /Page +/Contents 5088 0 R +/Resources 5086 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5090 0 R +>> endobj +5089 0 obj << +/D [5087 0 R /XYZ 90 757.9346 null] +>> endobj +5086 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5093 0 obj << +/Length 1936 +/Filter /FlateDecode +>> +stream +x谕Yms汧_;S籧a嶹醰:盚e姏i;.d1"皳闊锪":馜w芩>畸八怼! eQf^悊n8`噺厌O付梠9e0娔IC{] !F7唇呶8N8q2+砱櫨腗=C K''躮}覚苙鶴辘Aahv)y 錼;0纖栣暠8|朅娐 脕礼匈鹯2P,h襉D|硞H`4浒2QPa,{畅C 嬈騊f9啎a_桑阗4陌d槓傽筆济HaI夊螱uY 率 鉨瞒Cl贪"c|bDaDI@茫缈#^pitdg夒譮=憮|彄pOMO,鞵[榄@{:p媎G; 吀髶0HS%馭郃/8)磡@枯葡A鬑簄yA撅1?N旔B?疥毓h@ 俑闠屎x噉杔;S黓Z苰垷5餵礐-濦8堚4p P咱p#疶y劓Fl wNKU葇oks] 謃帡制2p醛䶮"熯笨 +^錕繻B笁盄 澰O抍5U┭盙籜?#饠56垔溞麫偅4:擡豲擹~チ!1#/N vX0N;綞8箍y!贬彏 垃奔:滚:}.2大<鉵符?早$O裃f仫_癞rJ纣g{梕嫉颰S#=x4鶷洅搋G薁潶檃掱,;:緲B.諂]殮e祍侊焲亊粶雬隻 [,h襞d練陭诳^伽0hc6崑毑皚;t7J"脁K~o5s2甑>醉5k菊鞥nD鮑2沾跎j撬暪4,vT騞猍摴jS\W琂嗀[P鸝3u>颼械~PZ];虪v勣*LuS涁%7j &=二>皷贒/{诏j~81桍~夤`*﹃瓃蓮肯摃┹>耏玨酥頃軪旫9缙0認杅~'汋舏X5畀,崲潽禯1V椞YY;奖 [3驼抑嵟730チ*;澠0 骳U蓽闩珆褋£ni%/mS-賛佴>盻括6L粊mX麩谕\垦*廴5赣-韅t赵璡|E緒*wUcuf皼#z[j04^匥%zIq埗翥`x1'3x 衠t)_ B琫棢UE崏|j畵-旹醺衵布匂>u芸簲釵RB鳹鳟5Ofs馜z授峵詒袝 ]崂B緲藃庼壷N宽蠮|瓻熁穨蔌H_N,n%趗鏝)竍蒥<)WH翴7!8袮?z艜"-5~哹淄呋()韸'炎焛邯E 淦+d飭$Q[茆z寳 ;茎E媲)厢咘@)~'NA吸9鐀䓖 峸鏗<薶q魲解+庌X鏸湸昼淴嗡滪銿鏕舽v~衍`x訊蝒ndstream +endobj +5092 0 obj << +/Type /Page +/Contents 5093 0 R +/Resources 5091 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5090 0 R +>> endobj +5094 0 obj << +/D [5092 0 R /XYZ 90 757.9346 null] +>> endobj +2467 0 obj << +/D [5092 0 R /XYZ 90 739.9346 null] +>> endobj +446 0 obj << +/D [5092 0 R /XYZ 90 739.9346 null] +>> endobj +5091 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5097 0 obj << +/Length 919 +/Filter /FlateDecode +>> +stream +x讠WKo覢钧WX庖爁籵锫7詐偸J'5J爨l +蹩3掭卮鞚濝=瀽脧菈H恌\瀑2埋蕊#獐噋?l3G'铷5覓蕏< A 嵡觨G<R亸諯矪W儖馳瘫BXH纋X( 5z;)騰&Ifg繇荢扮,聢i%膺p缊hM鉫)褃鬳囥.珸AX%羋鐜斨nQ拦瞁O漦(Q斈-鷫)C歚1D\r嵝捔Pb|臬*︻ R:;xS畫y欫jR环籍萻 嵒*D訟EEY楩QC>剹8敁{ⅰ憪峸23EU畱eIL誄$翴潞鲂YU螉堆瘩虫2啍瞌sQe撆U6錮; 懇qH#(1 h澴框V陠攦- +Z° 髪溥嗡i-Σ_Q氷竻jy@)貹zVW薱H柝C"pG鸈js#咸緟R"蛈/勫z镜歐絢犡鑢i鮻"/秮t\O(sw84ョo?縤q姨扛0箶u\Uw鳱)勝 鴡K7刁 {臯y@eht$嵫1Y瓲3鱉婌熠d觙b|h嗕犓塲拨禝A盘筠x臝霄瘕箾Omh&_w亱莯 + _>赙.靌洘 +f(TmJ祇成収+S貱=狚椾&(罛腜鱦崆E1+ab该子Q鷕4z闱怘h麓E 飖_暖O里bbP>幾珅g賋澑)V┥琋KMM04:@勶c怞:66 X艠怅&A鄣槮v鼅H>汥` #茦3Mfm3w籠[桽F撍幒7潧瞢牺BL酙p/"厊援l梴"勓鰊_備waoDc潲继k(埄埏=?m_D匉'~F3P尌{ 8猨w販<7驅椬铢s=纤4媩 >读賓ndstream +endobj +5096 0 obj << +/Type /Page +/Contents 5097 0 R +/Resources 5095 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5090 0 R +>> endobj +5098 0 obj << +/D [5096 0 R /XYZ 90 757.9346 null] +>> endobj +5095 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5101 0 obj << +/Length 1899 +/Filter /FlateDecode +>> +stream +x谕Ymo6_a 盉R镔0L睓D-箳墁鑺L变D-e矞(鲞G墹l賿2y04v晴):璜*琚绔?愭d?p轷委愞]AJ遊(⒕|:AH9 ㄠdcNIQ'P磤盔eH+綴卶鎔Q焴鲛醢W翁散髖靰 Q卒 :戬zye賡{颣=矗ǔO哹絹PH "b癑 Op拝8a緩^5弹$U<Mq(}侺惷r凚0滅s梡愗*i艀~(e&EWi敋] 鰓儮A<ど鎵瓮歆 Q! 钤I戜BHo忘訹x活俍憶%睃榁H妘蟣P抁H唭姮糕 Q#"PD/l姞柨l増鍻Jq 0鯆幌0'拣'V亪齻 $^ 鲒'ZZZ"垢H+囅掲_鶍錀崃[d﨟X悭馿ndstream +endobj +5100 0 obj << +/Type /Page +/Contents 5101 0 R +/Resources 5099 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5090 0 R +>> endobj +5102 0 obj << +/D [5100 0 R /XYZ 90 757.9346 null] +>> endobj +1540 0 obj << +/D [5100 0 R /XYZ 90 739.9346 null] +>> endobj +450 0 obj << +/D [5100 0 R /XYZ 90 739.9346 null] +>> endobj +5099 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5105 0 obj << +/Length 1195 +/Filter /FlateDecode +>> +stream +x谳X[o6~鳢0`堐堝!臶>t塠$p q眹,0[N9瞜溯偂}G"錒 +環黑/琥 E(!04PB#Lo{4噶閣=p!畤 ?峽/2b$摿x^p怈実鬋&鐰/8洃ir|DT*$餐w1︱俎`紦錞\B.镾镡3T榇G 7Z鄝0方堮r拌濛~亳 佅"躦 pFQ(Mbh〔I%呦鈟捚vp>~3L幭!8 +裏咲2朜敌嵠4NマKy4<; )#5濱E-婱v%域}綕f鲚!5勺澊+餗2彶懔p4ON93欚~赺O咰g(^罳 眜%f>b睙8G旹)鲬6見\_P(/5纋a0`#]靫f訁( ㄌ莜惱&R諭窾7鋃)U7I?尞榍玼A(顤0H,/c榀嬪t睝齄FLf乿↓梠 \瓠鉲籒砥埒鰖R跋9悑扩溁/獾 /5A嘝嫖鱕h妆!R広"勫廷&P 后uW=磩 /魏g髸峒WxW m呏媯忨b1M皢-L訣 l2鳕AdQ] 4ψ骸O砬訄oO9m嶋?8=HY 剻巈盳瘚-貧蹔售t撥ゑ處捲漀繶]汲e蔁/笕-h+茄>~钽裳勹韉翎d48w;?O +#敼#`2nH顦虴r$;眩冕c0#V膡兦}"r勛滕陊岽]曃k哺Z 摵a^=f﹙4汫[j诖?牃驅僋磈冒F莅壍&:疺裾zy皇 红T︰r剛璬C`9轓糮DR:!~筿5}Q餬w ;H顛-ㄇ=涳虹/擰嵕JЙ粧厌顑胄2y }钦C 遐嘫諘匲渕2]'衮*o(债 +茂` G罦眽(Zo篪AT襴Z碀A[冻杝900劭=踄詾鞮T硙雇V[o秼噸/9洴+=珨 9珮hh躵=,庠8赺i艨4α輜>炳pxz錓=S牙┾t偢顃h^丠yi嘾)鋼铄娀D$╤*Q8.镙笰镡4^愎f棭}/_N 0& 飭艙綿黣^n姢}涽8X`{虺跰芷;<^⺻w冾k'4豇鏾Q黟9endstream +endobj +5104 0 obj << +/Type /Page +/Contents 5105 0 R +/Resources 5103 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5090 0 R +>> endobj +5106 0 obj << +/D [5104 0 R /XYZ 90 757.9346 null] +>> endobj +5103 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5109 0 obj << +/Length 1205 +/Filter /FlateDecode +>> +stream +x谳蓃6舢痐/2i,臇69碤R{+'祝)阪劉慗忾暨  E 4b噌瓅魛鼑#,8顰@%躱_鴈68儎'A鮢 + 騠嫑S匄蠫 0p航鴀. 8袐駰h刮統綂匪$/2]迕圪錪鳄1酮孭鵹)S!鍪d蔀柱s慏Y秺鐄)*n續:晦6 +%礓k墸店疦喻颰诩67Gt惔a]蠉tiР鞺涙噎]|*串5.鲇鲹墲q鴡笱+廠`净f瘌f溶%s曆f蒯u,茨pm便艋坜蜋6 ′(<鍋Q;/?伽蓌祖*jrgu9F +t躙筯絍V禨;荦幾抻:g毤矖賤&;PW炑爴S.唲瓁o铓謟栅陙襞a甍腼i蚔;綱鉷寓醻AH焦涖#煺縹o癜漳 g椡櫂9鞨搛猀强;紅YuGtHf魫 梱6帧踦桀\螦 祐魧^F.v;%廆牨`u7蓨摹過w$鷃ц|g *T"l趺*#+{兑芛;G鮖QG+z'伛鮊4蜼裴嶶垨3鞆渀 佒Q餌 &鶰莹j炂% +抹=N`槴iF1えE牲6蓳MT獮Y 蜼哈}W/.噽染 蹛/~佁銶:8斋!"Й嵽<演=沼/O沙箿榊 賡endstream +endobj +5108 0 obj << +/Type /Page +/Contents 5109 0 R +/Resources 5107 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5090 0 R +>> endobj +5110 0 obj << +/D [5108 0 R /XYZ 90 757.9346 null] +>> endobj +5107 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5113 0 obj << +/Length 1224 +/Filter /FlateDecode +>> +stream +x谕X[o6}鳢衈 +{橷%瑄 幊-.鰫++Ur-9Y做繌I[鬶倭l潘w妁(? + "A(拸=苌醱=d94=婨 鄻盂FGa剝殁/B3丿蛹HH7芋@匹Z +c{瞄茤q帞诫,=垐Y(; !p鸨G1睗紈整eO4緢"緪x G"坙HXF閳0剝霁z^g 潋y]T賋.t/+j箴V)3恮椒尻w萡家 |a4赕γ馾8}3{}9y;浖&+瞅$搄愵|馴$儛@ヴV珸iu澼h欙岄甥聒&:┨L懳蠹LfJ摣Si餲/緔g股6襈'c=櫮i"7K咀XQ寖謕勁3F鲑Fm阙蹛 馧HB囋嗈C-|#ㄧ镆z栜L橝f异∣琸煈浓F岏鄷疏阹柆@Y协襷*紣@磌髱Z燭嗝憨牏V4藌uT夥9哉娂弱笞痎寗[鳏WA朂櫀[撣喓A嚥*vJ筸銰C!t`h婙 Bo12Z4庳}B崵Tkb欀U抏IY<剃音6顸噌膂M;Y;镼W9烖)Enndstream +endobj +5112 0 obj << +/Type /Page +/Contents 5113 0 R +/Resources 5111 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5115 0 R +>> endobj +5114 0 obj << +/D [5112 0 R /XYZ 90 757.9346 null] +>> endobj +5111 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5118 0 obj << +/Length 1020 +/Filter /FlateDecode +>> +stream +x谡XKs親倦W璐e/玜歐C 咼*眞墾)"瞝lHm襁iF帩尙鯝箨畀款i鵓/∠)拕蘋鬿麴;匍@ ^G摅稾H啓Mj 觯馿0鯲&=爄 &觵甃鏷柈Κ(2枘Dk% Uv?y梂k'D +悢責z!&M'魑謟藾-囹"鈘慁z凜8埖寇x?` 罗,5v鞮誽e缪a4/嶰O_Ti#! ⿻V鰖忣%蠵/I摜 N噧( 囕埓G潏8nCt4r!漻嶧nSa7趲诐 j>痝) bHWc(53P"c氱w迫棳5<狧誦9q( xK J膶<,啸*瞥y/#2vS=屲责FB+汗棶Q "襐&憍繄H睴DdI[竜%鸰樋腆V/災钾媦倥&綍yw垀 膡qO>YO`赝}[祅鰶滔&?鮦胪}|蚴岧鏣庙郗7峑琠}鮦7噍枤锆U崎m波a窉庎+A〒T-﹏9:Gux恏漳湥躊f襠-&@">)蟽_鳙-*H煠耖,粅菩虠*/T9帗俾t_q\5_飊裕{嶊铝烈w 3endstream +endobj +5117 0 obj << +/Type /Page +/Contents 5118 0 R +/Resources 5116 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5115 0 R +>> endobj +5119 0 obj << +/D [5117 0 R /XYZ 90 757.9346 null] +>> endobj +5116 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5122 0 obj << +/Length 633 +/Filter /FlateDecode +>> +stream +x诃U遫0~蟔酖2)wnc誔籲#o]UQb*4H:j麥豠 x戳冦畸罹奅嶇Aw苵sG蕨裂'獝翵R壱I滱(J倡灺aD闀z栯2勉: NL4i(薁齮]薗LBU閃puMPf( 倷Jz0侫)婃К偬俛餸澢:j#套扗hZⅵ秘v#H镸'? K,G#iL''vΗi婷皁b熾螎 +s蓞&聢沩鎖r怍-z5娇蠆ギ(U% _鑢等1塳镎險>+'I謉矄峬珏 6^&][bQ垼-\9濍琗 p応9!4絺p綤.糣%萮O魵s陘v椮>甛?dt 渴Y筵y +簨^+遙感忬iy扰16钅肾El+稰"硝 ,蚓樛U_5 漡{鍡d楛;﹗誑拾翾鎠蕮:鋶龢8〃e廅忒.`ぢR龇谛.n貴LQ T%-苯-偌辣y;]絳韝娌9徑枠I +R歺鯏N miiFK殙鍴T$蟭f鬱vP筣/殗A⒎r爊%菙Sbwi&!絙a7_]4v伔Ov齒<>蓍|S瀓{豉 宔ndstream +endobj +5121 0 obj << +/Type /Page +/Contents 5122 0 R +/Resources 5120 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5115 0 R +>> endobj +5123 0 obj << +/D [5121 0 R /XYZ 90 757.9346 null] +>> endobj +5120 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5126 0 obj << +/Length 1857 +/Filter /FlateDecode +>> +stream +x诘Ymo:秊_m撝N-沛交Mh脭B礛 K H魂k癕Bdd籞跌葭9像cc.孇伄聉%Ab粨E図>⑩ 乍t沉呌9粍JWa奭g殢 Fv锼溧)擷=Z##腊8↓t斯3齢瞆鴄軎As>v48d簋御驆韟嗲藀,t烸唀⒗睥肅巉惑WWm T﹨,a 瞬G?cf坭e乤,u%2$柛萘@焠镀8.B&眬聽 2帏TD尾 抚偈藋僿矧fXQ懓楆{5 +#<鑞飠^=蒲j夌v椝9F,釸ax\9>黐?縢4瀾dX韺槦9L.&銾l㎜>汥M8沅淣蓮氅(咽炑*,頔哈 翁擎錫bM@呁2#*/`蟿k縪聞{z摘3祬伀郖:獨 犘毲LH誾}VK YisT{嫦缁EF釙蜩褹愝U:嫐,瓃c畀<翙縗T! & 擑ⅫIq@禕G6 lMt/Z灸零,NdY'w榗=怪8T qK扃黍殾""瞸/H8xX鍑蓟$R揇玿鈕祕B7~灵i/B韘愇p +山(塚i冑bkL僆~"1伕翥E惁>簩'溃箃姒4錝趔y剰8;塀/绕M紖煘7,0x嗖S夑㈤'慓爆挃3u┛ f車瑭鐲梀=魙卬a勎泽猗7糝謅摴,鼧,8瀋XN薵饿8lb2附8v貴V![勛2虂 O1!紴_疒qeN媦揭wF肕掍翸8p槠XD倆糪{茧稦浮&躐衇鴈黔艅剦椔D愆c#嘵=竅Di6咑葬E@7H墏櫌E欴郁箞[罸K抦l@蟌暭x9味攑c嘔=迺偬滚襁6芿洍苇ji8GKG杫w>蝅 H3u L ЭWm邬韀Ro鬷倀>,投礌6"携GC漛E禭铓M杗魡憔n\扅咆 $墶~;纯c瀕K嚡呂愤(%脂U鶳w疃丶##g*q檍9zo峇G远l麖偩z璣Q峝&噴挢耶 烶临 垩澅$旜{螘i鲰2K秄蓁=蛜Op汌桍嵌F婿UG葩設;酆V:横h59篿-4醺娎龇Vl<$v雍+檌<_' 樭圮44崌F荝 u蹘%B觬*灾谍W崱] +丸i骞吞俒葜证珫ng訔*U)广-Ua筰籉oRK麧旑'氚G鄴政峖坋 +讯熳 7牜!  W紃醛A8>4|驭e7Nk暸恁澭t捄6 ]^ +眵7簑^篭ff'O0案喜? 鏨鍦缥r嶉C贠rO0 螟?y&骐`z>q剑 烷铒+.rB;IU2>溙W鬪嵴*XF藬櫧=G案鏢x%藁隋臐铣朥f鍈牚V怌璂!躜~場!Z} +*5|℉d}S营>气:浨畓1 啷蕳L +鈕=&嫦28根X(2娔少#Q庆q凚上 ~枨n~柦{f哞亠5M|<卵奷睬劈=囓9$з"农1驈,雏满養W<;溪賩gKo,齟ndstream +endobj +5125 0 obj << +/Type /Page +/Contents 5126 0 R +/Resources 5124 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5115 0 R +>> endobj +5127 0 obj << +/D [5125 0 R /XYZ 90 757.9346 null] +>> endobj +2469 0 obj << +/D [5125 0 R /XYZ 90 739.9346 null] +>> endobj +454 0 obj << +/D [5125 0 R /XYZ 90 739.9346 null] +>> endobj +5124 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5130 0 obj << +/Length 616 +/Filter /FlateDecode +>> +stream +x讠T遫0~蟔a/dR\阇值+╅B呅"A`恏CS9盇 4)褫}鼯惑I.眆盄覷@蝎q嗦憠GM雷$讣i(欁 0Q2u4F敁N-蟋樶穚滛PL&\ +EA79掊&牶間043抸罫+巭僠袣Sv0柫S疸萩u偗"蘔扏# JⅵBi+"!潒Y6_錂5抧蠱n記飪籺瘘t焞D]伴溒眻%憥$薵嫻爘Nm硋哦鲮跉願I崮F燣p6仝怷Q"Q;豹Q焞KE5麷S鑞-r螇8艂P站殫众^蕐洤"閣庢D4蹂o姯窽╇M^畍Y^x疡t軦/朳阑7鑬^闉坟o23&g絑关づt揘6涄淂uB汗竂腆鉼敏z8脊铟=)妜Ω1倚iDM'衰1蓨鷾瑫U/k躴>尌芢沫盠用(}K#直>ku0啎n檄姏姞赼姷I-+呢 冥迠湱鋞哫z01僚z+67归焏臧鰷圝鋧杇[33煌坠?x芶耿鞀kQB=虲;氕5蕠c|氽睑齄5薕跾韑O`f欪endstream +endobj +5129 0 obj << +/Type /Page +/Contents 5130 0 R +/Resources 5128 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5115 0 R +>> endobj +5131 0 obj << +/D [5129 0 R /XYZ 90 757.9346 null] +>> endobj +5128 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5134 0 obj << +/Length 1803 +/Filter /FlateDecode +>> +stream +x诃Y[s6~達便>灶 状覫8檉3槟}J驙彼槄-o洱#`癥踾X.s幘s$%x椋沪O-glh箹?.皕m洒F妨换奴腳gy誣p癷L杦嶙KB+兏菶楀煙濂.眽殝l籏xs> -O V腨z觚钣怄N彫僭琳,緙G薖@&={箺7饶綩栛匛($/嬁魒u!~6γ眅'I豰&FH寃F悈!醘pL鲁M=w"b"组欨 +46涵8蜶t4袪們 GByU嵀QXR都毫/叽 /;巷6県o贬虴Eq长公6W5Mh尹J浲>6塆紒-吁Ho瑼peV[怩M吮&陊>J尚<9綶砍f涙龋u灂恢da湲籉i鳳忧場犤弻>賧on瞹s翚燋購脷6 K B5y剀缽錏s箯婱餂=C崥罎挺圂鯵瓳扁(VW|З磨~爬橙O)锺h蘱=N翛M仴 +q)なj, 嫭`銓c鯋%j>f駽yKNO^i歈l+瀌`T皽f 貣w-g67w嘳H渿讫 A稫X繹Γ0R*cb庋'1校洓鉖形r柬待M3焁}堷垎~諜陿&鲦 魬蠉媞m酰痀b岉4抛櫷穜R砘q诸c琞#软~醐覐<騲W#=1賝Z賮續)*(囚-;-+婱朞瘐相箔覛2界夆撓邎8︵繌!铚&x>螞N碵{@ 囄J%6溒憨n肈_6靵弒&笱wc媬昫两褼ix漊A儆L=:y強$孮餿>鴭圳V猗奏)A+xPM50憠哛葄Ie"鰛2鏠eE喹DWA董"I臠抏餍鉃穤犼_W鷢盛|V龐L c'1鬄苐x韖[&El谭劒幓峞,棄殝粶G腺*9@6.rt~蕪J楯4噔ZKI團蝍#啳s钝垑淥馣5\畔Oq$%,.溱榆\ 寿詞F)麞丄E櫉hx殽:蒝`柷2&爺e蠧椉[饃 襐UB0$w6~U丆]=缁阏矆#q禺2拧B娳A褰hP=+﹍<%l@糥h!~FY箅芊蒆|@昳漹膓z圗灂厛C>礟鯄Eg蔑 +_]g羟胫%OI呠4<*賙{屨齔3q a蚠D))T${国鋍Bey5GOvV鈗砹夐`賕袍|漾\*+嗰儗揬裒儵^ nR嫝輯H!虯皡Ll笎t绔諍{zRL欞E乞煢 5^畀佢挰m>@坺甀-醉o凇,qm|症O璂i5疬 吔筢 7鍁洔勗襋b蛇wV堫f菁:N趗7^葃4墳)鏓橩P4 F-thD()6rl隲LP讶烖0枴簒敻D\) 巄v鄪 个翅b7`樵匪(8 鸼i手9鈔?jA<$ rV簡m'm∧f1戨睚{砤波TzHY绊犋鋏hf K;h6叾@)鴙棸偀.Y瞘∽sGU栎8)蠁JUOAPgI掜u讕恊s.乮峿%b$額筦马=隧謑zc梘EVvP繻 琙B繚順 ~鰈A[v曞氩硑1垿- 叟h殎v硛fc[钹!;踶9w}R锷.槖9$颮:8v琋Je姀<9J#鶌n鮷 煯皚YL/zM鑛⑽ BNs]狦獩用锡跷e譎誕鼆會覆峞ndstream +endobj +5133 0 obj << +/Type /Page +/Contents 5134 0 R +/Resources 5132 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5115 0 R +>> endobj +5135 0 obj << +/D [5133 0 R /XYZ 90 757.9346 null] +>> endobj +5136 0 obj << +/D [5133 0 R /XYZ 90 739.9346 null] +>> endobj +458 0 obj << +/D [5133 0 R /XYZ 90 739.9346 null] +>> endobj +5132 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5139 0 obj << +/Length 1533 +/Filter /FlateDecode +>> +stream +x谕XK徾6钧W韪蜦 _⑷碋嫺$d欥 ++KqA䓖)懺[霆伞扅f83遬?rt|侾鎰tj +鲍鋘鲀6玤縛 f蝔_0挛f麈FD.鲟M澻0軮7/b 碌K0凌o齨骿躞抢C.純蜰羪祩9g$v+妷痎j盅倆聰6"S0G嶘Yu耙巫0VAu愐 +s5┡)疎Oj c@P醫品8K櫖]酠q'鮇蚚愳瞹斿厏=橪 忩沸COi公wt9绪(崎/蛆`痂G%囏 +,6襪匃覡K峍Q憶伋墸D 瘌x.糶z5L@愽Wzi{b-旓蒋}锝O旯/摪堃DV+O瓈 +煢dx"畡 鎬 L'Tr _&Wf 1娀嗻- 冐(dQ皪ケ~~棖眖 >f|k巕'肵鶕竇^=貆+扒X_s坏7赴獁e誝 P_[崣訅鬊  +U0g瘅v;棈┉!磓澺(蚅0らICD*譸塞拎F怼eR,祖列L逯%褋 〓鷟蕀艞-噵弤s'39鯯霙Ijd 擵訧滣蜥渇稽r螠*瞍^狑涪B 淘QZy橧熼IfA慺F韞蘹1.劄鵏R/荋mSy%Ov"晸:顺茝#<▓ *憌2v橛伮a怟鸔 yTg焈休[~6椦狼鵚镗'譜迶 v蔷f +寰萍懫瓠~埔崀 ;|{祮潰O蜺<渊3v評&qe8!埔}J萜ixo臅躲'o +*[蟲谪+棲50魗vp&缁(瀠]厂V瀒y富靣Q>[V.w=Z屴UU咒W 苒4謄>4Jyd韃奕dD1軪( 獋#縺/XP)程嬉S𤢡!共a袸 匃c]P?mp氳 /燄.诺鯅23V∷:鯌 Le嬊鎻磠m┄sL囕>q)M箖| 怗勦甥J1c懴鎑b鍩.M睄趼v5S戶#+禼墺`S忝 髁氫:q莏j刵)辅n$T(u`;论S#C弲BC覴銜覤瑓4璷|徎$篲颫浺S陏媙―(?苽t"c潶k&+晷滫}e谪c_-%i鈚膍N白避G(5|怘胨?朖卖XsL[蟇z嫛方憂驮牪貊)'欖,膕T 镸1@.)sx罐韨.l."Βa癲_鏉腼䲡=鎾aS铛V-裑o榠 (,.韽 鏘F]G'G駞 -#[妟廠# .AyQ頜icXD紼勵濑狓)xg:B[y垝Z昹髜韇诳捛騳=#厙q猭垚?iC~諉O 炕踳焮扜6@詿l機uv坹鞁u邼)堗n蹪nD颔L}{U6T线硭5騨J螅 +批 焎C齂1?觨5鰊额q醮10O誨煱峡A阏endstream +endobj +5138 0 obj << +/Type /Page +/Contents 5139 0 R +/Resources 5137 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5141 0 R +>> endobj +5140 0 obj << +/D [5138 0 R /XYZ 90 757.9346 null] +>> endobj +5137 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5144 0 obj << +/Length 2011 +/Filter /FlateDecode +>> +stream +x谕Z韔汧柯*旦b埋N6M#6In礢F遤兦K襩该N?L{跨C*;擡橯yAz;记@篏?嗵湝s關eT墦單2_A屓n桫_辯紅4鈊Vf撺E`丌w75,*撔K70H吜扬螄侇;`"/乴呖_~g>鴄2吉埫G\a牚躳38濾{鸨\ц'4週 n(C *劊`YLmG^,弨鴰Y)("E,前睺3 t餳tFbx2 (: 嶧r掜]bLXP镞鏬2OaXI U迪蕒TF0躪 +x刘$紡聇[鞃n揵巊T纀應 b>囷剿o疮&及毨 +WY韯雿S獘墆[i揯#Q 晃pO% =碊^褮篛BQ&,q\庅澶黀┇/( 敞(B耏a$* 埿鮒Ei[h)j +懧7%0QP峒m4s妜濍)袄'咍篣袡善TU +R鋚壘鍏1洺s.躒.l刀毿嗾@u隢0眔萊oq幟鞸勵WD砡Y戸H告XV:.婗#鬛L屌%i珕>7[蹾l琐 <%O7^嶊:M4ac犨禃r怈辙璍LI勵覞枛歊Б噄湔睐n鬞敱bG鵖魍Z4im浶蠝8鳌鉠芈h儝? 熤va痚竈噺(/G qhV论冷碿妣恜XUj\碟}z堡qB3q┚K筛w酑9嚭`;魲蛥{A 觹A紽譤z┶a,嫉60"' +R残[赲棿胛馶谪*儻给xU嬴vH)鴷wB肕7$艒嬨V]d壡誱4椛cFvgB砈盓錺笉P櫭,{ &幓崉g慑|拟\69藰缥礷槟rH胲2?}R晕n荣鶔涃庒,R說d >e:杚秔L,羟歁梸鹶7颊傍L|攻踕?"鸮艇e倷Z谔1t麡2OcvA;q:ζ曖轩巠E;7攧蕐駕鉑堋S霉 躳f%鹲J_# +,/i/iwq锜錔+鰔WG0厘b%汑は坾鞬m:矶/叔箉濋TI谫磱嵷浲N傇&啣彎襭j1瑲)経条盦拄:V癴?cdx"鮣i詟菜稀枎C義a閃ヂ5趮硦.Lsbwp锜⿺l蔸d寀鹓傆磌幈皍倂9ZM茦v :櫠-lc.铺-k1w s朹踚(絠\氉剞┢5 vRs]sV35 S%欃x铟勥酯巼(7踫4K亻`X嘇姖襥6bc愿術銡G僰弥w7s2靣濹痰v游F'45.cVS涧3弚翆%C瞪'T虺晀嗟嶟嶨磗隉茼砒抸C:類囆?9鍓l魈E[秐敶渄俗Hgr悃z/ +$Qz兆螯{總炢帩Y鏁4厢壻> +%堛Y&忪脋植+Z鴲} OI%薊/{蜀,Sュ'姣/Y妁=芽t燒軥鯝緼J&◆Xendstream +endobj +5143 0 obj << +/Type /Page +/Contents 5144 0 R +/Resources 5142 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5141 0 R +>> endobj +5145 0 obj << +/D [5143 0 R /XYZ 90 757.9346 null] +>> endobj +2468 0 obj << +/D [5143 0 R /XYZ 90 739.9346 null] +>> endobj +462 0 obj << +/D [5143 0 R /XYZ 90 739.9346 null] +>> endobj +5142 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5148 0 obj << +/Length 1024 +/Filter /FlateDecode +>> +stream +x诘X[o8~鏦D跅2RR;馿鎖Ε垔[Riw.BDS蛅q咽凪v倔}$,$` d19偢詺璠萙Js-琼 _杙旁饵+醼鄱眹pc镶h锸Y枊竷<*鱒S1a授犋鍋?廂叉爷r堗烏KvB`k輗1):/璹胂r=-0硫榩QKZ0檰Ei$<体b悰<鸂9宑蚌熳欇颇\K钎wcm"t祘骮;i眸d梬d隨z粧泴B/>欤v.$T發尅#袆鉗 4狕犁0ww>軲2wɡo!38r娰7\7&嗚蔉湃* 爒!骭? 媾膍.WqZ幸9I#宯m屵伕玴凲 /峥炼+餃襡魛t仏赨M搙3鵌祪7朢 揮8Kv9j+囁jW鵰愳"揸葡 貏裄w抴犆n (/鴧髠5/1/$\F3*)n&姃臏(軘(D狨錫;\}j敭焹\Yq峡閱鼪弬.專 脯 > 鵆绗<鮂摏徉n蝠/tnp0郑.2-\撗;E倿_/騈 Ⅱ)睉J瘮k$~a)坰J:~o靪a@`粹}5訮庬9碱-熆鳐婨!匘4g莈医穘篏9酁W劢僜淉热6qmP V捧棫换毋d茺趇)⒈檌n磰摌T;7'滈譣&尬僲崍|a湏h鮱[A暨~g2|柬+M渂l磼摌苙 >萱穢抧6i=时讏rL/M9;+寮婒,帉K擇*锹d%$ 4 +f?搕4!攻窭k奌裕'征猜$桲鹵IFxQ克漃Nv(豊w闟L&x鮸(鳘J欐鶙#&5掯0挴 Yk哑^番泰^姴貼>聩U?o氵 zU|4溺?Xendstream +endobj +5147 0 obj << +/Type /Page +/Contents 5148 0 R +/Resources 5146 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5141 0 R +>> endobj +5149 0 obj << +/D [5147 0 R /XYZ 90 757.9346 null] +>> endobj +5146 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5152 0 obj << +/Length 839 +/Filter /FlateDecode +>> +stream +x诮VYo覢~鳢拌K倲砦^鲵魻-姃>*J鞰c8$;c{m譱k(R鰳輽o郣鼇隝廻.L贽狯囼捩佔琊攊W瓨r鉢"0w^w骰=鍽弙V鐥8暣摀oi"6赔xf枎襤>朕 .湏Ae揬Af鲖s}C^8攑鞬w J@k鍺義箞澗蟊襍 M蘒郙*w< +  + 8袬呟.黒<梙"wcp1塀廷4叛撲'{ 塹&B醁捏佴B髩襆源蒼OQ98殭bqu~9<⺶xu寭硴7w齨|B畭衷ㄆ]w駍嫮旟*碣雫隤5暀\fu矻Y剨1便x黀岝#枦 鷱s/`煿臁荀琮六&灚]紂W<汎83捕c4 釻h槟N&f浰q圯q欈贶h眻 !煥鼉mee琛茹;a"+湑5盚鏌M悞I袘亞跲輲zZ漕%鷃+N蠔觮A&向>%kP斦68o?&&庣锦<壝鉶-@ +0!X た惄塯&蘒嗰 u 煻痭圮谲.M蛘$チ趽抰?n厯`T暋<蕻2鹧J餶鑐?硿莀珮S釱荭剆^G泅sr挭j$孞!荲\亲谼fF鉓悙p疹h╗f嚸 圌!埱≥K脼蔉仃}|袢谰%i伆I愆IC┏T 63舕亽戬lN羮渕2p厡T勿b鍮 %凓铺L2JMXp韺e慊rr資0;尶`柆3JU1w櫶塙陡详o織匎埙;s徥g!JQ堛鈋ndstream +endobj +5151 0 obj << +/Type /Page +/Contents 5152 0 R +/Resources 5150 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5141 0 R +>> endobj +5153 0 obj << +/D [5151 0 R /XYZ 90 757.9346 null] +>> endobj +5150 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5156 0 obj << +/Length 1973 +/Filter /FlateDecode +>> +stream +x诘Y}s揌?"9Z黍栃s湥 6毪!:(0埣磟麇o佪%P燝羝:禀}~巷mwCC幠#髠4磜vx嫐w煛楁帱5'eF8ihn$缊鄦窆皲夔黝邛=7H躇f(癱%磒6庛瀣u牃t7 F%愴鮹瘃3;t7栣灞8糋蔡 w併I兎t潰#熜$鴉罓嶩!!G嘊杴 !劝`<嶺巃GR呇(揉趁i埌峏@pr&!9@ +銃缷y鞢颞嗉}V#3$酇' 栥$醡bok繌=8瀾嬝A膢遻徔㱮_Mxd5嵐蔶鏧|2n\]L袒豃涺+|帋庥q7lR{*7詈(嗥Vf瓶昰鶓l1婸0榌/.鋝X唤晉捭v櫃娌BD^N.慹5Y# 媉'r(紼ao莺膌菍$sBz薭x弽缁& +w祶c7簊)j銖茱筓t穠"n傍栵-鸞t7鬗貕q暫5σ4矯X迈O? 潝O晵&烇齅劉冺衠/:痼今S釾壍E氿蓁+茶?89; 譌聰#诹&駐+kFu椵LL槶伇瘙趈RCdhl陂E-茊qo池樄R囋r顴!1e+橱猭Q9(宫4賳爻锹1b運凰K M頭u縎谞~T阽鷞$尲-%貦U巈褂%銎▲>幮槝D<;][IG5 Pw/N"o潠MSQ巤0峫6jV凜&寁1 D^才.-(爑堓呦Q铕6灊;$挢0慕砑勬潁辻⿻墕z&酏疝 nI 疕l韴 +o&墝>TW阍砛姳1=K$7e;:嚫V;羟 +94ta赓)贄溔|忇楻+U;lS#饴-擫#靝习黊狟灬贺& 譂!廴*澰v og橈习]崏 犴 +棅玶J鱱B;璭c顪剾 呐潟笐g戩H#A;^?2鄷,K拗莄3蒝伒s[N$囩厺鯎昕zNG艳噍 #埢]榯冁?u ]0%񛐢$4帓碦t韂;K瑖p敷>>B薗朢們 菑hW>& G車g(p趉驠裊|M沫K]{ш川]~4妹敃9郁Ⅻ醌b惿蠟狺艛餞觚RW ]匎a^/鐞`E茶事劒\L娅)\\狷迨, + 骛歞京澲%朔C餆J斉陔怊Z'3浴\94?载| 虴FbQ!+Xe妌律j驽J_j嗂龡谏摴) +.薸&琤吙S榑cμt=(梥.矤v鸁鳔PW'&祶Zu倢? 芌滰ZS攉ma╫Wh"猏+W腇搏杀茖鼀惨誯bp脐0」2 喂掖㏎e蒔鮳pb湚Q除暋b碨臫j#愼撋詒V\t嚂0U]_-M-蕸郘籄&M4 坝歸j媄藽飘狟f6灮v荹愋ns3S裯$.╙毢B0u81括jj嘿`mXj暾^⿱塟輀$竵哯挳栊榷瘓EQ公歎0冊T飦"鱿$灃a门;*觲(D0貤9o葌@95堒/饥顼e窠%-囀釽.s<'8膘o]B馟 ?!<呂E=敱O飱&纏!H:G< A亨馵邌视涯搤幺8jx{?祭鯯r抸{fi架6搠滞S$秖JI},8+r阈縦櫼舾(馦爰蘮^-硙4Ehj:幓继峼9A艆D#6}p F縔dA)5K<馇 /慻l7p#+>蜂祺逌駓+每莀plQ藎(mN81f曑 榼稚~п彑疯俆'鸓蘩峡_endstream +endobj +5155 0 obj << +/Type /Page +/Contents 5156 0 R +/Resources 5154 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5141 0 R +>> endobj +5157 0 obj << +/D [5155 0 R /XYZ 90 757.9346 null] +>> endobj +1539 0 obj << +/D [5155 0 R /XYZ 90 739.9346 null] +>> endobj +466 0 obj << +/D [5155 0 R /XYZ 90 739.9346 null] +>> endobj +5154 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5160 0 obj << +/Length 1022 +/Filter /FlateDecode +>> +stream +x谳XKo8钧W貗輩T>$>Z炝m4iwc眍- W鹅Jr泃})憆e$籋/MD$圀qf>v慆艓D'┫渪誄蔚>韆+v弟轃"=}E#=s吚L渉鼍O|4p G醴g飔3@}!oΛ蚏櫸:蕻TZL媎>F缃0诃l (缅簾{?"g g齄茚A` +9=$赺n點4Uk灰髾楢>pBfj灓蕋 _技8 /I8Fa貅刨ehG'嵴XG炎R 寥#`N喲p帔D裂//Fc-e伂@~E颺] O'棧2@X碊堄.逖m j +骰T邘O袈捍毛曊m巍Ah 湇G搕i貰7h +)88jQ7覺賛唍D噣-狓 K\^ng鄹0懑闟糒魙0)gX+蜱 Zz濾2,=L>踃焳_T3濼咩俙go荦?認T2Ob,2聵璱 +<唡z5f\犹 李N$<$7酻睷彭F}@Nf 騢封繍L贑毄b洢.疐唜搗燒绅%O拠'i摼y睺閠u>榉'惥uP/u鈦陨&u媢^AF;0H^夶淥谫脠钣G◣=悟 哽 卅yr潽檷詁`(&]= U瑡*RU饴T.}# + _F&7In0Gp饒`碫6鞚_r0壸iw袳G漄滢^∏x尷\糩醃欪糢y盩筲蜶y騇+嫝豅籼蕽J鏆忢鐰K i燽 +罰&我鍙0P闱偀e珌奓5;爉婶阡;j9丝B8幧g鲺闣莕B7紜癬6Evg XUBKj:S賀抗ジ鉰卓殮 靉焹)滂<霢拧%磰迆uK浲(?攈E煈)ォ*U櫨爁礜枉m8郂饿E=#眳0g5悹课L鐍澎觤],还誫げ~D踺瀘endstream +endobj +5159 0 obj << +/Type /Page +/Contents 5160 0 R +/Resources 5158 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5141 0 R +>> endobj +5161 0 obj << +/D [5159 0 R /XYZ 90 757.9346 null] +>> endobj +5158 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5164 0 obj << +/Length 1373 +/Filter /FlateDecode +>> +stream +x谳Xmo6_C财,_姆皏i k7拿>t呩萺"詴\IN;姢$+碿- 橤=像顇"0鼡H鉎r4婨攟徼哶張廇>頞x1=}EuTD揈)⊙dH#聫菙悖祥U蔡壹F神yc0犡蹋11#覫k蛠酟c胗栎{赠#>寛󨷂)?枺搜/+h8q翨#OGi9茙悖"7\-"鍺[yKy,*sl柪梣混KP(幥D伌BU=玈;;眙潘嫵7撻邃嚿轸迮鬯隅A5耶+(TVR4羜4&嗉X5S镜[嚖ox5啒仺mH凟=ll@M[j爰十髏n%72鋱7:龅 唜PR靺歃g焾im_WE镚-6柶"攦l绖靾鷺u鈆4)蜍後垰,#"s銕茊9嫣賘6煑 矦cじf{倍 !蛻埳恠芤氄Y已jm6#潥xp'爫3芇,Av2l`闏~晻U韜:M>刈la燉岾f&NT9埞}烗蹵N +冱泥礨4VH)踏cfQY举%錡-Lf椯晄1劼~3'渱]漕聊1綞隊鈔鑻Kb(郟 +觰L6"莟o|癎膨v,霑鲀 a:,Q囓l(Y磵70;衞~礁rj丩!`幨碸.猵p_9s僄鞴3圎蘨蔎咻局輵ssSyeFM4:跛噼f|鰈6*籑郵_歹1aC+趛埠3*d绺辦朂媙芅78じ椔阶綽苒闰Q筈篯/U 2U龛t>犛!璙G烘e泗 W^B狉r:C茲 鷗ˉS钜%)VwS,哭Q籴`}R笤剹递V b.艺Rn3,)|x忕麊29侏瓂[議 ;拍牴憀G憗圆t鞱湣`@K坿E=i5刉 恶楆~6l鹡摦*Ti>熛曩Cl +镓sE|粉迭6G鶅 `N懤t?mR 廦=傲酒F勃藵阢 /緌W▋篖)遫i邌簞; 攳2Sz瘲 +偁坘廼Z撡je吕wm圞:&U谤Pj谹4蚨岍W;筠潈祁噗Z+>荥F3l-讧s卸seP垂{怯'任.逳,I燐|F騳`<冶圐Jn48))骵晳+榼?W把k%囙 镁鵡>豨j飪 +庩G鈀Wi9漖淃.缯I鑾 鴤拮釮#杈臰]6椌 +F鹷緋@K酲aN蟠溦2骶En?鶙骳隆硬?uO鼘瞘踎馥*燠鈽颍⒋?宙嵻墨;兵4t徆 o詄洏endstream +endobj +5163 0 obj << +/Type /Page +/Contents 5164 0 R +/Resources 5162 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5166 0 R +>> endobj +5165 0 obj << +/D [5163 0 R /XYZ 90 757.9346 null] +>> endobj +5162 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5169 0 obj << +/Length 1411 +/Filter /FlateDecode +>> +stream +x谳X軼6蟔' l鬽洯邸#P(萑Y'$J皓cФ訑'Y臝:28`禀雡諘- ~″衰c卢沥鴟謧歭 航甜鹤:C剃 + :Ad鯁wmDP荈.pA{v﨨 )hCˋ鱯0橣\綔$冑勄y悋I芄颹春绞F1円钋州=皢郋 8伧5/纴緩琁 \綝诛E(L圡2K|q,D耞W/赮濬< P饦缬,鉯? 忷G肔P狘鸌:'熨綜 4~撩@;6僕陸9c灖実y腉国鷭z搪i扞{@邴炸wl倿3檳f^5kv卝蠷u沏≡'-勶5M篝^>P餟讋墘h{傞洃* fⅶ垏a菄X6貮紓迩侭證忠g +C豨糁a j沗懡+:+d 曾SMa@褍^虒d旕62C劈窇堲\ 腌哲 b鉝5#墹1⿱靗BC玆乴嘡侇.= 襼!A\T搾谶 岪S-!豍K齩k 徵丹汃檈Qs"酹XWa64*W涣c 9 犿圠Po嫀=獐hw6=msF#UA晻{{e}蓈魅!OワU炶s ) 剔梪_$襎腷玃ItU寫0m-宀L ts譯uW0挟祜da覂)搵Vi{捪j扯絥!厘.#4NSSs~{訌 s墠=梴 e惂馺25a裑刡羴Q〃(I-4牠K閃翰聂醌Q?+ Th嗞畠 +穯)琚湬0RK缵縚击戮VFQ0)|与;<>隷運wt-'-L$牧牝Qv淓cX$.: Ch?眻0Rb/Eo蕺謨 +;t匷*籙 覙6坯姝9篨G鳑忡Q普hc1鎝 耉醤*B,oB!@/2狒'\腀)綣>瘛n<8跡O闏 5:Mf裥Q闼dP渏彺肊归瓉(:絲=[,6 <"%1H9-9湯A条 叶溳粻蜰$;X歆W惛[f缯蜔s倆> endobj +5170 0 obj << +/D [5168 0 R /XYZ 90 757.9346 null] +>> endobj +5167 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5173 0 obj << +/Length 1556 +/Filter /FlateDecode +>> +stream +x谕Y踨6}譝皔趧q#H$ugrq襠4潹搰模a(:釺姫6.垾DB.j蠄$n粄v鱜A瞼? 4 (&ZHdW=|嗘=嗇!魢O隅\歨臮锌琖P孌滖?黳 嫀B衙朦S6.騃E玻孇獲覄蠬谅f椔傣嘻Ki↙$3簿>\衊J疥Q"t尊@ 託W=蒃0罱臊禱莢|6EL鴮R茨5Fq񲸄q厞颐jCMv&扼搭鋫hFe2蠤&鯋$Nx衘$Xr務:K攑L又磞昖Ef锍QZ鷃)雩<粴}]M:;)4疛v侹M'笫懞鏡5烤袓Y砓!^! 害0;鬿瘽(d{魅;Ix[%.u=*乒A 敵它d/碫u2恔眝衁=b[$R 稶9T匯趹燩 )8,璉g殓2糸u^&4Vx晽sROf"!*佷!m0bD9U襏7Fu嬎:童r+爯虙齰諰逶颵杰愋:;(蕮#**捁勚蹓#槨e^-J *娴 -貃| +w宭忈1M!埪t+co"縊抎]'z澁臢硒蟮﹄|絗jP鶂F炒滅僎!M斱kd镹襀 t謷贩D}勰lV晱6亩^L媾鏘>t餏垘辑j+# √扫猣簈1葾q垴#逵:筝-T*s鐍饒絟?囑%8w +ㄎF蛠5遹"[矨: *E廇璂b韑:Yw缵iQl汚婚牱q魐z☉恄钧u0o謦 焠I嗸]=n櫍鬙糑1&〈.Jl嬨j]1}AcL儔?b<歄o/禉n*c嗪n郳!腲 L媆i『#詢Vn(#扠鼦f顎T添首)轙&琁淂詮1 99i圁擾酮{#4?!1#盽1皶萍鍙磯傖磻|]T#GYdxG昚9万6=碃J[/ +0﹫Q@)佊W碠G#耰9k氰91$7霽_逕?y妁淊郵q|痨q?\2苁阄W5F江MZ锫V|垾谽$o#3k<遒v硭)姙向l6L?c\鵻錊ヱ>9#Aぴ眂H7G腫4帏W 獩贷1厐酀峷m鎶鑇- 噇9驤銕赳|篽R愆*4Z敌ㄞ#u纏扝棴橞]砮虧5Ua檷 <:Xm.MF 棆77靠~ 颇瀹曰V偩<褚"莹񆜵m*'凫坡pU\6技唬m=霎2簑鞚啀MI鑵燇%;d架侘I4儝y:瘭7E{,譓jf軬*qykx>洌R(Uy[粦^ 鞠曐h|庯D侳瑦8譬盻]央事M 葨}(芛乔u$P渢_eh 燞飗zn瑂橔鐾娲pげ{tpz皨(~:椡蚰}葅x帏蛚N摫黜>呿姪H楉'F荥B胵_Γ茊$/·诏訅浸臆:b滄韮﹢+}扰C冕 xP倩#汑<,^九~罕譯盈7熱(锢cx瘗Rendstream +endobj +5172 0 obj << +/Type /Page +/Contents 5173 0 R +/Resources 5171 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5166 0 R +>> endobj +5174 0 obj << +/D [5172 0 R /XYZ 90 757.9346 null] +>> endobj +5171 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5177 0 obj << +/Length 1192 +/Filter /FlateDecode +>> +stream +x谕X[S6~席p_禝Y{u縧g;.Y喗搐0&鄆癝)蠳{,9凞q麓K:凤\td G~q$筁4e"喏Pt 藝=焐1秀e喎^DG:褌坔t説8揾491慔 9赉沽>綕M崨泫氪螉|p>: G [豢魑蜵4=擯瓁t擿璉t踓劧搃锎縻B#4!8!E+嶂A﨡ム烣醌洇踌| 樉q艚u辞:a俼/慕衑i疫,bK,┮S赚ZfLi⒋奲 2請|譖X"墫柷澈t鯿LU"詩屙祉=r産裛[lB 诇mO2~EU蒛65/滳知V贌Ωz鋩AP寈暖 B"N劧甮7&潣r氬8 眥3%樷爌C瘃%I竆 =槕崄c罸\^3荌" U嘚竊O~5邧迄7)r?殽e曞譵Z +骷笤襎铭(布6>|i>駫uZ.q6$陦册B躿洂C\厲 8凄*谦W>N3吖姎5\fZy +眘洵眄-p及摄僑O-M=/sE搰 1Gk鈳鑒Ih1b霍汎q[X 纮.|0 +t3(:获E6 F琳$斾$璖蹡,玬HAv誙 +阽f幣E轁亗k':蟜琜 琳秇2遷md|Q狂呔;9~]湈鯣面惜'G焼M,6{-槸鎁潭繕 kj^夙`M;绑"*燂賴狺琉G|馼'7鲉m^玁痌ǘ含籠柫戻壦k罒SD鯣 睈IhIT,:暾4絭爝xF/颫/>~㧐x%t掹休櫵4僿纽磑郂櫄覘7撙弩Obk陬晅6:_.掻槀K3PO+╔g*xG'曗買誷我p+暡粆J站5穿勅徲閠[#暫zR6°"贤6摱齧)2諡盪Rg穎梼_憛闰炠煤疞>i枍m@钡辨oX恵A6]叚dpU=凯;鵿喉琍z菅iQm馬#/侦焖毁聆犺螚,M儷l*0;驻鎘薤(c鞮爾k╨罯妝+,kUCW揍遧渀&儣>[班鈅 47 +D0%%U龌d,燲皣&7%]a箋~l帖s?聊?裬B__聧匃嬕M/K.趝掻噆硋Cb.Q吘Fpendstream +endobj +5176 0 obj << +/Type /Page +/Contents 5177 0 R +/Resources 5175 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5166 0 R +>> endobj +5178 0 obj << +/D [5176 0 R /XYZ 90 757.9346 null] +>> endobj +5175 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5181 0 obj << +/Length 866 +/Filter /FlateDecode +>> +stream +x诮V[OA~達眪s&[阙>XC$,US澷0m +!s9凤軉億ňY≤镘z酗=Yr犺,胿5v别s?顣8 #烨輯堈蘞韃^u拋L 些_>+艢S絝<礷0聭秛鏬\B揩@x1^ @B`郑楲墂鎪涥1凴厘C腻髡M涯)瑋 峅⒁ (掴z"k冝O揉x0l;7搏陣舣p硼)N亰:培V鎲酰Y"sv墁虃{vR鬞辸跡{]疳哿GV赏,柫Gp~.n臘Я耵VT⑸瘲梳狗$M-宇J漽^獢蒆気嫵,I5维裢M*稶n賹戼逮hn9躱黔x▂r2璲刡8创謓6.朑 瞨e牤瞸话旃,苰赇列虹,'`TQ%昪8~#Bg¥`傇!竤0F屟Q aT亞楑&蝃盒$璢瘶Uj岷(喗ぽ72飈9|嶃虞孟{擄蜐U:筂Rc&>#>0N玮s"l4殱幐橸G儈贜叹y Je/1]?A犧坖kYc竛лD:L躿絑8氈aス軶洈渡D.GY颢昫偻xhS搷姉蠴:UcYm蚚c?坞tz@悈,H略椗媄z僁緉,k]B楑a苿浫 1宗疶蔿"+ (zK氮<qRq-t:璽x枚 PQ溝煘(o@-QQ"?旉▔ⅰs靺B滖繗B速9R"堗傺Y8$裠蚀 4=櫴糫犬煶袁G撏A壁0R畃 -纲蹶樥曹汽X偏G愁d弣橵茫GdG|葳endstream +endobj +5180 0 obj << +/Type /Page +/Contents 5181 0 R +/Resources 5179 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5166 0 R +>> endobj +5182 0 obj << +/D [5180 0 R /XYZ 90 757.9346 null] +>> endobj +5179 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5185 0 obj << +/Length 1880 +/Filter /FlateDecode +>> +stream +x诘Ymo:䴙_m撝N-低{wu5毿) 恦6e4- !愍k癕:2]璟鼁蝧蝭|lll珷-2傇,Z狚洴Z恦熲N腱﹎昐%$禎i*A倻 j;迼#$H千H28C\)杩芘j顡J7渓2v \s>秚'覮亯?[_緛秶~l嶹饼+儶娳嫋xV櫡熘镠'斮'B拒@(p1 6X&B姥?nV寞娷鈥,寮粐 >M怘m孧a$瘌T(郤埈攖阑wi譱支p@ReшYi徥墥;韄!/笧Q竃輽"膕*廿*'H倶N+籞氿4亾敁vF}銌敿016閛*湓i桪ヅJc=啧鼒貞&63谝s!)QW働c&1瓪.H┗Y鏺R彭<夷M屡空 (X$藘_鸕a$澧_﹉甩澿C䥇Y鸑陝(x樑D鞼 䦶.l:嫊翴*騀峲h9憺偂=鷁* GIZ(高E娤]zぐYSB磄n_u,蓁9[ 5u鞸螲塓5i 7q嵸rcL僆鹤Q舗D!h谋O伄1餢-灩qa軳鸣<| +t駟K/H洚k+g~|^#Ym,rDp>〝u醫?啌衏X6霕3vY3细麽c6-璊梃买芅2寖卖<`䴘ㄤyXF鞁绍 ~D溊sWg瘰醭l抇閰旎E譹Sj:Y#3批$]囉)耍l[!]+抣 lqW鸧> 蔘播,wv橎鷧*噇妯y䎱z哅p冁玒:┍帧e]終jw擜=:L9="屣5汳~麞含@ш焽杗壅\郃c#銁7Vl嫢 C穒2濥╧ 甴齜鋹吕緌m8l綾宔猥7(髵黕隫; 8wo^ q"񝋱2蛂屛ǒ焰崛毝^5?2瀟 挥讓k綃 D橶i纎醑萦],贓_/ZTmB篌~装魩搎韅襝秣i=;FV?霕 +歶G b佞瀳侵m姓+茟溆銹2沲Y鷘F8{ta;3r陥襹瞎2彤濛挱[7FG愤S湨]帼戎)诋鎕c0鋵9#鸳曟:评-k4t s褒鞕窐,-琋sP葃橃72醲捍Oj07豆黹X藝儗棊於髓8{0ruL)a[ 宙_5o\閮帪譵&毒u篺v>gV孢[9wT`u杅p槉=F[氾<佴= +梛院7FF=8E燮n策.蘊彮$ 診鄲S冃|譺瞔睁N嫷(8T些諠+痗w颍(t怮󍳱唚^窱錰'彜 r(捨dC餦愇馢%擎靚HE痚咴&d汎'Wo膀瞽乛簿惜弌鯆> 渜o<.節渀4ガQ-i玫溙7煳酻氂+i鎓f靡贈`)ì/1sk$N瑮鉱眢xd觖l紺$ e"[䲠)恛學FLU.洔<}(刹R旗Z*}_6V汮/崫篷j:wJ嚄EOL敇怳舉$H荖f.齚渽滕緯G{脫$籁2*錜鴠~?7:^钮^攧篒sZn焁鰻9(去}牆> endobj +5186 0 obj << +/D [5184 0 R /XYZ 90 757.9346 null] +>> endobj +2486 0 obj << +/D [5184 0 R /XYZ 90 739.9346 null] +>> endobj +470 0 obj << +/D [5184 0 R /XYZ 90 739.9346 null] +>> endobj +5183 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5189 0 obj << +/Length 1221 +/Filter /FlateDecode +>> +stream +x谡YKo6钧W枧Y "%顬襪籑\=eC栬X╚暐lS饯D贃B賾 r慀殭of狙腄肉衦8睓迩#h萆/#'r}不崆勹-8锰-+ 秄镣奈&樎駑别$X澼萎-R&珆豽造桤貴6啍G7沸 +#w] @渃+贅4僪羟梓崪z:`翫1乥枩q j@a壯11廄晽烳榺[E^ (L 嗮鯯匯:涃>殍%b舐t4+r鉇4嚤(2qC把蛀3."$甇(﹣X謨u憲径座吼 +QO朼6/黮頴Y5;/ +I禁)Xb^M鐥娱缢痏 +4邒"$4Ik挬圿k$s羦>TK撏歀I茲4?V璸@檷瑵腋呯U玗枆_刬夫疵聈齌PD狑鎖莒貁w4 +:汳k宑  +Ogェ璡團[.|迡霶Pi4l鑜誼表甯\嵼谯q塜罕q踱°8 蔋tz槐 踤,╛g岻mP%寙誳9ny;螵'μS%ihコ bkz]u祌/m浵隺欴:a杋揆哥m.9=7Dl镠褁芴SJ臹襊C~E昼;2!=渨6騌Z?p:翨勆1^tR%M麲eQ}"嗕f宽歙9G-髍/钰}Y?4琁看搯垌垓u$`鱐樱F蹎雛娈X閔-_昔C8.n檦ˉlK愫O篛脿蹍(沇2#V蚖98>Iz斁"'漒埵Υe櫓I泺擭嚀7唛忑s麆弨&壺鞭恾zK冟-洒$)无o臐玳忷赶蕒尴鸐(肢 [賵 4微]抧H篩跧q筗ei胳!纕$6z2攸~囀獰牙也X:塬0詫 6緹  GM5A窡S敍f<墷絢"鼁輣m紼汍Ш挷琉"愈f泤W衶 枧kz謿鲈漃K2|ZI纎$zkc滒( +~敭7䴔$G埏槬樉4K1{N朾gOw]E I眐5R踦rZN嗴* 嬓嬄臩~0愴镤牓(;閵豷 o鱚饭覨(H_D"rku阀(牉5/譯垘K=恾E齽1 +a跬囹 颖鷔U 诗┺ 鬎E觞)岙1x=掰梧>*endstream +endobj +5188 0 obj << +/Type /Page +/Contents 5189 0 R +/Resources 5187 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5191 0 R +>> endobj +5190 0 obj << +/D [5188 0 R /XYZ 90 757.9346 null] +>> endobj +5187 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5194 0 obj << +/Length 1641 +/Filter /FlateDecode +>> +stream +x诘Z[彌8~席鄎P踿凛л頻w*U韏#酢*'x玕睝&涂_l淍R!破龉~>鏯h駜栵6q\l爸Ⅺ 筐莃鳅/D,b尠祒.W佬D"黵囓鄜巪鄡惠'阳碅誼麵鉳莫?诱.fIA &鬟飃弸zgE樼`(鼾o鲥癇A帑x謂<偓x"G?Dg噪T鍎><梏1-雁D俖库:帳誃嶮 p9A9霆qm?@諵麟瞷$f叟Vs镧粭攪Uk蠔珗 箌 /1+嫁^\-鰖樦W*=_M飨餒l火樕廩朤{R鱞瘵j$a玆湾s應7k帿F尾栭U滂9_'4褸Q烉:塬C@宮苤溠c瓫X羰氫|sL蜣-蚳躸逻暎<);筕^d典#Z$欪檘iZ最c瀽 + v1锁J[翐~咮祔蹆么∣峆$ +睘%@6+釟賙[$葐8qP⒏IM应s6W:Hl簞寲]蓬7|甸E珖缎].;侭躨r甬旵擇櫖#<9蛒0驅я霴9c艐6_0傱埂)鴡Nwbyrr,襻W槡p逡嫹褯1q盉a旔4琳 + +2抚5b駛熴菄,)鶫潐a峣'{d穸8戳8I囌X鉸<k5G5o絒篻;犻:6p偹0绸脴荓r}陥s追秪?座#箥?剩纵纱:佊+君L潂璱瘴N蘝業簿詩L@?菰Tu*'!]撴讓k禊聬f|碗j@齧G 睦藊琿!Α炄*iThN黯-谣味 ,赣隵-衒f逮i;缧稤d5釛"2!}W! ]亏6娟朌y#S爟幆y坱纖y 翧bQM$KXF擞T^钀> ?杵鹻鑹4D]A糀 p誾綠濴H藝荧#洫[#?kvr_D^滂懸铆▔endstream +endobj +5193 0 obj << +/Type /Page +/Contents 5194 0 R +/Resources 5192 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5191 0 R +>> endobj +5195 0 obj << +/D [5193 0 R /XYZ 90 757.9346 null] +>> endobj +5192 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5198 0 obj << +/Length 885 +/Filter /FlateDecode +>> +stream +x诮W[O0~席埓8 {儇:趨i戹↗穳DHS砪'4! 嚼剱锴遷|螚dC鶉l诋烶fO磄rBfy 腽3鰉 3;F{鱸<筃溉A芸 +蝜 +=& 珆橔j誱孋Rw軿W袔$3 鈡巬/ 咔鲕攦k霔醭玻mD贖1[胃暏颁鑚N漫A;,坄|=@[姤A&򎾁茄鷖艎F懡2c渿壭锋1诐8]"湜Q:m,O朰&莪_傕\鳍0uo慻<崝@]耆7斏V#畔 ]C恖M0貝攲"瀏w< +E搇苚梶a|0tg\z(艑G]燵3?tC~[bㄤ亴O犹i^G[\T 鎶槸Ggk:i柼^k'脿疟%巠暏<爰蛒~ (衚A湗撚銲*豪抄翖謼 n-齥bθ―毯拨 莆qwok6棃袑缢碳蒈人T扔靳@躔*瓹C糖磏 *2}H<段n嶐c钄繳铦緰豪搹懈VK,l题絫憲秧43!栿qS腲R)6懗粇w撣U□d洸v愡^/䲢Bkrd扉侜-<落Hfq1捙)H祠韵A5X灋涊纋T_諂J<谈h篏晬-6洞rendstream +endobj +5197 0 obj << +/Type /Page +/Contents 5198 0 R +/Resources 5196 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5191 0 R +>> endobj +5199 0 obj << +/D [5197 0 R /XYZ 90 757.9346 null] +>> endobj +5196 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5202 0 obj << +/Length 3602 +/Filter /FlateDecode +>> +stream +x跐\踤7}鱓鑁L汍耍/ZG粠b +怖頑怗cKX0'浛遙撏f撜蛪 NuXg奅~泥/~滟懻杬┨焰; 瀪瑒?愷3pJ匐泲&鼞P:藦.^c%eJ姡嬰=\ow驘嬁8饺H 硧<% 蛉#`6聦4B繠h^?=葺n窂/k:4u捋蒬 ?趠K極}茡覡]D7,E殕_蝷闇 +::!t唯g:騗===亢俎=?N8;~茌]N7(;獙q摮uQ2灁眚Z縜慭賔RR臲絸J晫晷*;戡  獂蕜r摮* OJL曏oT臿獂鉲D铡 8C濇*豁筱蒿閺戩喟嚟覔ug$8)袢啯紽|妙5矽娋0#D +妷ZAQ蔂緀鬄 + OJL嗂餇冩 +e4:$T6鑐缔鶬囩羽7, 將JA}薴濜G<) 慀1~賬濲/择彣m坃3j-C鉍>)c諲f进灁X柯怊殯jH狢鈼6,膺o尔隬稀6S#罙6眄亜'j縌凍饎江徐亜晷 劇枦E : (魈L= 灁颠▉m5皵薖8g h4Hm衻+( 龎fB给q5鱐HxR`*詞 +脱=T7*尐mP j孿I迁r^e蹘#xD傏kT=溅J蕣 佒9!~霢3泅随顅燓 92I髄吖"峱R鄳R韚欣0燹 +髁娊崰u螤亝KDy `軤X!x讹k0繧伹5榶LcL艓h09姧3 灧贿O>揞^蒽鱋譫箜A晢謔粞!罥伹tFT珒駣窖!佒9ZQ璾_<茑矎~> pR囫|榶:hL!` +JP-`铿蓘p{7;枵苿'Vk縌觺D_/犞aDuh扱2gxa豰nn髹威鹡{B刦窍O弁砜涾镞>齛兛D劸M{&诐<瘠4@ヱ杔 g劗鴎塅T5H,叧;V胪葶婵*陞I赹;蝣醰擀い誴{損v g{GJ茡I澠oX圵X}皫+K袺'0鐁{縀瞒氉 ?營 荁燐\ +P +,孳M 蔗剕恜瓏d専!-q哳締嚄 &4&涽$HxR`"詞梔性;%+﨔唲臧@}罫濜雥EB鍝 +n鲂伥d瘠4@di.娶@矽kYFT5"5鍅V聠鴄Y\咡 k矊盀,3㧐YVY,淪鎉4酟}7糵琼篪4'閤y苠y$悡愚f聯{垃'L英8脈臺0# +釦潵瀷]遧6椣=RD8g\┥Ⅶ薀黏4繼鵮棵鼵H瑠y韉祤鏅?:!ts:;?豸d9\< )涼4坧R1 *瘍Lc鏷窹唾慶4:!~ Oo?叿麠Q傸倧~#擯搈珵OJ灩逜&乤p頑=_@Buh +X涋蕠/0.s鳮;a%焞{飽 OJ燧馋wB[!湉躒sUuH鶺暈8犷 K髹 N艓7q鬥蔔〞~谐鰛'=V兗hZdt螵汸譅儙围鐐泒8(V磇 %疃P曽O#灁嵾泳nJ繟叚鴎=FT弖紏嘒5-樱炅9懎蛪襚%'f玦_凋=鏮虊uV ntn~ hs猝媼忥.呔?粅鋓j4z8邤撦'{讪计R论麑μ眾統跦爑)5敘J汭洢禩Rc樛鴁W掄だcMI鍀!蝠 *鲦 I爑螑RP%<驂/& rT:o`3獦柁x祢]y]RE3笂H=go頧 次Ta嶫珛L貄唤躙葺!倮↓3.埕!罥伹病阒貦%沴H爑N堐*觼:m歋2N-$插6&3f>+僩M\罄y潓風未~扡値嶤(;眨e&q9焾壊8Ov忔岎螆L5F哕O 鍖粏f莚朦蓓梂髹/~E7稔蘎茡Y_鉾Q豟种 hdI韝l*hz8*d箘;#R;10岘>t瘠4@银]娺k獫P?9~鄺P簊鴂w[溧 瞛+3'YD韚1tN-{yu8s鄍脳|*x"3悦棨 <罥伹评U泃>4{阷巺@ 叏树瑧 +#a淞%怖疶+3雠螜U6Nら楢/;淠4柺鳰o4钑'珎曌x卨/P653j无$Du8s栊 纟黨F@兡澿嚙Da皷#瑳,g:悫崉迡k顽e祽NQ鄻) V瓷哎22F=_愧6诂Mg"~揶?铪寃/喻喻WW叨髹噠o凜另枲'冯*e<) 阱秪宛W樻掟YW ǒ#狢;─蹉$乔葶9亳v熅x剸ew蝶%v領)=OxR`黧陲pA醉潎ssAOkVDB铿龠於W紫S@7淢竧<) .3縜)鞼瓋|螐l誧E]x 琌县w駊#嗃.皾菺<) 54~鉏佣┦媒宰 –Q=隈%簈`溷鏮撖泸烷s$鲊\揈/灁X钭~囓7m顕1锯or?9~鑖8椣/辨樕 )MJ8R ++烠涠e 跍粔<:9r栳3驧錀<籬遯亸涩#缊'"A鉾A勷瓨v疎Q諭劇鉏剋帷牾 琰乃阕N圯牳,攷鞝#菆'"G鉾A1┋_q崹$G橖簲泗襸火8v瞒z飫'謠讆耔S蛺觻&T5G_<よ苯巏n淞俬;绤Y熂A=|9z~鷌 a嵊錱,攙Tsf萌DD雡Ah硶呟藐FFuX'E蔵尐荣9惖茂錯凗n埧芖嗷a?9Gv脌瓯骛酸閛MuDJe;w柙I苭?Z績-崁3\璒漝T噓挘=塺|:}Mh~琍粸 + OJL呞飹 + ss﨔厔臧ff. +<寄頻芠s枥M苭F_Z " 哪MFuX'(ZTM湹渗卧K雡!|&%邻琈F鮔s耐鐙O6搬桾鮠咱 OJl詞#B麧杽酉賨徒1:磽0O斷.2瀅\䏝~q笯;蕰2Ne鉼I顣n}(冎9s踈熙鈉蹷g53铘x-妛曇劜梻y3怈尸K13膢r沱W$vA噹e窸5>)x扉躵>b擜|1轘t?錚9:橲鵟-毱痨BS翗:<d]莈ndstream +endobj +5201 0 obj << +/Type /Page +/Contents 5202 0 R +/Resources 5200 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5191 0 R +/Annots [ 5204 0 R 5205 0 R 5206 0 R 5207 0 R 5208 0 R 5209 0 R 5210 0 R 5211 0 R 5212 0 R 5213 0 R 5214 0 R 5215 0 R 5216 0 R 5217 0 R 5218 0 R 5219 0 R 5220 0 R 5221 0 R 5222 0 R 5223 0 R 5224 0 R 5225 0 R 5226 0 R 5227 0 R 5228 0 R 5229 0 R 5230 0 R 5231 0 R 5232 0 R 5233 0 R 5234 0 R 5235 0 R 5236 0 R 5237 0 R 5238 0 R 5239 0 R 5240 0 R 5241 0 R 5242 0 R 5243 0 R 5244 0 R 5245 0 R 5246 0 R 5247 0 R 5248 0 R 5249 0 R 5250 0 R 5251 0 R 5252 0 R 5253 0 R 5254 0 R 5255 0 R 5256 0 R 5257 0 R 5258 0 R 5259 0 R 5260 0 R 5261 0 R 5262 0 R 5263 0 R 5264 0 R 5265 0 R 5266 0 R 5267 0 R 5268 0 R 5269 0 R 5270 0 R 5271 0 R 5272 0 R ] +>> endobj +5204 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.9034 619.7797 156.8586 630.6836] +/Subtype /Link +/A << /S /GoTo /D (page.36) >> +>> endobj +5205 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [217.4706 607.7527 234.407 618.6566] +/Subtype /Link +/A << /S /GoTo /D (page.147) >> +>> endobj +5206 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [218.0285 595.7257 234.965 606.6296] +/Subtype /Link +/A << /S /GoTo /D (page.148) >> +>> endobj +5207 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [172.7487 583.6987 189.6852 594.6027] +/Subtype /Link +/A << /S /GoTo /D (page.149) >> +>> endobj +5208 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.3067 571.6718 190.2432 582.5757] +/Subtype /Link +/A << /S /GoTo /D (page.151) >> +>> endobj +5209 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.4535 559.6448 180.3899 570.5487] +/Subtype /Link +/A << /S /GoTo /D (page.153) >> +>> endobj +5210 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.0114 547.6178 180.9479 558.5217] +/Subtype /Link +/A << /S /GoTo /D (page.154) >> +>> endobj +5211 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [170.6363 535.5908 187.5728 546.4947] +/Subtype /Link +/A << /S /GoTo /D (page.156) >> +>> endobj +5212 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.1943 523.5638 188.1308 534.4678] +/Subtype /Link +/A << /S /GoTo /D (page.157) >> +>> endobj +5213 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [178.9352 511.5368 195.8717 522.4408] +/Subtype /Link +/A << /S /GoTo /D (page.158) >> +>> endobj +5214 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.4931 499.5099 196.4296 510.4138] +/Subtype /Link +/A << /S /GoTo /D (page.159) >> +>> endobj +5215 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.1679 487.4829 219.1044 498.3868] +/Subtype /Link +/A << /S /GoTo /D (page.160) >> +>> endobj +5216 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.7258 475.4559 219.6623 486.3598] +/Subtype /Link +/A << /S /GoTo /D (page.162) >> +>> endobj +5217 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.4608 463.4289 218.3973 474.3329] +/Subtype /Link +/A << /S /GoTo /D (page.164) >> +>> endobj +5218 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.0188 451.402 218.9553 462.3059] +/Subtype /Link +/A << /S /GoTo /D (page.165) >> +>> endobj +5219 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [185.9692 439.375 202.9056 450.2789] +/Subtype /Link +/A << /S /GoTo /D (page.166) >> +>> endobj +5220 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [232.6036 427.348 244.5587 438.2519] +/Subtype /Link +/A << /S /GoTo /D (page.74) >> +>> endobj +5221 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7603 392.8518 165.7155 403.0385] +/Subtype /Link +/A << /S /GoTo /D (page.94) >> +>> endobj +5222 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.1837 380.8248 170.1389 391.0115] +/Subtype /Link +/A << /S /GoTo /D (page.94) >> +>> endobj +5223 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [155.0254 368.7978 166.9805 378.9845] +/Subtype /Link +/A << /S /GoTo /D (page.94) >> +>> endobj +5224 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [135.4892 344.7439 147.4444 354.9305] +/Subtype /Link +/A << /S /GoTo /D (page.94) >> +>> endobj +5225 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [135.4892 320.6899 147.4444 330.8766] +/Subtype /Link +/A << /S /GoTo /D (page.94) >> +>> endobj +5226 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [211.603 307.9457 223.5582 318.8496] +/Subtype /Link +/A << /S /GoTo /D (page.79) >> +>> endobj +5227 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0181 284.7592 157.9546 295.6631] +/Subtype /Link +/A << /S /GoTo /D (page.123) >> +>> endobj +5228 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [148.3408 273.4495 165.2773 283.6361] +/Subtype /Link +/A << /S /GoTo /D (page.105) >> +>> endobj +5229 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.2461 250.263 161.1826 260.4496] +/Subtype /Link +/A << /S /GoTo /D (page.113) >> +>> endobj +5230 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.2768 238.236 182.2133 248.4227] +/Subtype /Link +/A << /S /GoTo /D (page.124) >> +>> endobj +5231 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 213.4648 175.27 224.3687] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5232 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 189.4108 138.5976 200.3147] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5233 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 177.3838 175.27 188.2878] +/Subtype /Link +/A << /S /GoTo /D (page.60) >> +>> endobj +5234 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.1403 154.0471 216.0768 164.2338] +/Subtype /Link +/A << /S /GoTo /D (page.121) >> +>> endobj +5235 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.6645 141.3029 169.601 152.2068] +/Subtype /Link +/A << /S /GoTo /D (page.121) >> +>> endobj +5236 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.3933 117.2489 151.3298 128.1528] +/Subtype /Link +/A << /S /GoTo /D (page.121) >> +>> endobj +5237 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [150.9906 105.2219 167.9271 116.1259] +/Subtype /Link +/A << /S /GoTo /D (page.125) >> +>> endobj +5238 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [350.8746 619.7797 367.8111 630.6836] +/Subtype /Link +/A << /S /GoTo /D (page.121) >> +>> endobj +5239 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.1917 607.7527 371.1282 618.6566] +/Subtype /Link +/A << /S /GoTo /D (page.126) >> +>> endobj +5240 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.1781 585.2835 372.1146 595.4701] +/Subtype /Link +/A << /S /GoTo /D (page.167) >> +>> endobj +5241 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.7361 573.2565 372.6726 583.4432] +/Subtype /Link +/A << /S /GoTo /D (page.168) >> +>> endobj +5242 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [389.3297 561.2295 401.2849 571.4162] +/Subtype /Link +/A << /S /GoTo /D (page.90) >> +>> endobj +5243 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.298 526.0161 372.2345 536.2027] +/Subtype /Link +/A << /S /GoTo /D (page.103) >> +>> endobj +5244 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [360.8372 501.9621 377.7737 512.1488] +/Subtype /Link +/A << /S /GoTo /D (page.103) >> +>> endobj +5245 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.6463 489.9351 396.5828 500.1218] +/Subtype /Link +/A << /S /GoTo /D (page.103) >> +>> endobj +5246 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.761 477.9081 392.6975 488.0948] +/Subtype /Link +/A << /S /GoTo /D (page.103) >> +>> endobj +5247 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [373.5691 465.8812 390.5056 476.0678] +/Subtype /Link +/A << /S /GoTo /D (page.104) >> +>> endobj +5248 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.298 441.8272 372.2345 452.0139] +/Subtype /Link +/A << /S /GoTo /D (page.103) >> +>> endobj +5249 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [366.3662 429.8002 383.3027 439.9869] +/Subtype /Link +/A << /S /GoTo /D (page.127) >> +>> endobj +5250 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.298 405.7463 372.2345 415.9329] +/Subtype /Link +/A << /S /GoTo /D (page.103) >> +>> endobj +5251 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.298 381.6923 372.2345 391.8789] +/Subtype /Link +/A << /S /GoTo /D (page.104) >> +>> endobj +5252 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [462.3752 368.948 479.3117 379.852] +/Subtype /Link +/A << /S /GoTo /D (page.102) >> +>> endobj +5253 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [390.3358 345.7615 402.291 356.6655] +/Subtype /Link +/A << /S /GoTo /D (page.95) >> +>> endobj +5254 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [360.8269 334.4518 372.7821 344.6385] +/Subtype /Link +/A << /S /GoTo /D (page.27) >> +>> endobj +5255 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [333.709 321.7076 350.6455 332.6115] +/Subtype /Link +/A << /S /GoTo /D (page.128) >> +>> endobj +5256 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [397.918 310.3979 409.8731 320.5845] +/Subtype /Link +/A << /S /GoTo /D (page.96) >> +>> endobj +5257 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [399.0338 298.3709 410.9889 308.5576] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5258 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [426.6999 286.3439 438.6551 296.5306] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5259 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [412.085 274.3169 424.0402 284.5036] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5260 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [387.9554 262.29 399.9106 272.4766] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5261 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [390.1671 250.263 402.1223 260.4496] +/Subtype /Link +/A << /S /GoTo /D (page.98) >> +>> endobj +5262 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [457.5143 238.236 469.4695 248.4227] +/Subtype /Link +/A << /S /GoTo /D (page.98) >> +>> endobj +5263 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [387.3975 226.209 399.3526 236.3957] +/Subtype /Link +/A << /S /GoTo /D (page.98) >> +>> endobj +5264 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [415.4025 214.182 427.3577 224.3687] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5265 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [413.878 202.1551 425.8332 212.3417] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5266 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [407.7013 190.1281 419.6565 200.3147] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5267 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [393.4946 178.1011 405.4498 188.2878] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5268 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [416.7473 166.0741 433.6837 176.2608] +/Subtype /Link +/A << /S /GoTo /D (page.100) >> +>> endobj +5269 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [427.1483 154.0471 444.0848 164.2338] +/Subtype /Link +/A << /S /GoTo /D (page.100) >> +>> endobj +5270 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.6343 129.2759 365.5895 140.1798] +/Subtype /Link +/A << /S /GoTo /D (page.96) >> +>> endobj +5271 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [351.7713 117.2489 368.7078 128.1528] +/Subtype /Link +/A << /S /GoTo /D (page.129) >> +>> endobj +5272 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.6343 93.195 365.5895 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5203 0 obj << +/D [5201 0 R /XYZ 90 757.9346 null] +>> endobj +5200 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5275 0 obj << +/Length 3125 +/Filter /FlateDecode +>> +stream +x讠溬r9嗭uiG鞬3碼"鑹C幢較z喎煟虜J粧rpa禚弤澂U赿呩Y糝B!酶\}黺W_嗲/赛∴冁鄌?S2菻*W浵c A ]m>齰xrz件蹊魍a!!鹲*堼榱z鉡熗撃洱缌o裤'枘寴裝鮛#b ]};鄶筼.蹤^J9翵I$ +擢)嚪鏾7珉嬽'1疭M倢擈骖O夷訄p肰"踉/項Ys粜雵0 飂蕻韮Q?!&馩竫U钦铝aId@瑛堛莽G欣徭劝莽s拞#偉X) hp虿ж渴╉ +湦伛躲>=嫴銄税-,N置4]-遑刋*訆,饴%,烿a@媼搷\t滽鋉缫t礬G屷pZ絏煯宪"唾霹)翖 +Z瑖*虔篫T#Nq8砃N2 梑 +\棘%霪ri%貏S雝>[滣瀓Bq$_>章''9:课╅j9I妱1酺;[?=~vD疳粺F#声蜷答8YO鋉怯t祒繶j<?*慴&Y孝鉪=:漀诱!)ッI雳EY`4e?0﹤'雚夵隲毊绤尨2醨q9蹧 W聳熄0犃扑l芛C0歵 呫T[ GJHZ嘢挲“.焞.逎nN^锵H1[>#'2:Pg源祵8H箽&滞}1孈( ;;2乌3fy艱! 鮩襾4cш谖o6g裪⒕輁<[89统嚭趐刿郊摻a@Y欢,"馩搘獮玂熚鋑G0繯* N?e鞻0h1僑鮘=X&懫a8䌷}:趦悒貳t騱! ($kw虩et槇?瓦﹝>a硈棋鋈P( >|_Z濹橆聑K聙乙煻[乣)Ky鞜-!p8杶檫即U茡昶沲)喽񁒺襳+賙偞偝X鞜M乊誷踬38.q奥乥苆冁圊C愾(o诽伮橳J8闫 割8P840嬻醏l28 聙B嚥vG 剪6谹僑鮘=&8!9嗺/OJ #,9藹a{f0ろ0Np欨gfU险a犉 ⺻瞺}9{y,i聙/夶獶诋@鰌 +kO8R# 脆8YN鋉囉t祊凞Zw鞩呟蔩/烡a@媻揢錇J鋉бt礣@ +粩(Vc竝x僲T纋 +Zh湰&虔篫4X#峩待 ,X矯Od'o饦E搪瓕乷俉3b 庴⑤%G 嫙孰簞E鲛爞1{#W寋退嘆_鑙趈 肞縀)'闤z8X纞EIペ 巹捙PE x棘\c*爭#$鮴-A+呧~$琇5 9Y廝鋉'詖鮿5eQ橳嗦M 圀昑l9 粕z`":樁弚*蹉~脝碎-:NV.-wt":澏c煘褣MG遨磔蹂_魽3絶耨s蜧iK费納! (4kwUf皐49牳) ш賀9軼谇f4c*瘗闟N@肦&!N?叜d鞻 hd0O;楿=[O@R(@ |俎適o:"鈖{洆0 +a嵧.碈麻0犘ガ + nG-匔I軄剟W鮨= 亼,"qy}肕a0[ 硚J!m穯繼22晇 E郥=[弨iご幹?斗邒觼轢H:岤! (O嚫輭*M芿趤聇U=[縝贕薞霓矙)帏霻骱炙嘆_鑗趈m盤I峣鞛聁c狍Sg醔Y輎{l祗SP;惻p聙/脶;P逵眜#Q娞0サtPR"i馽1 噬籂訟祄=(!硘┹嚶陯鍎個!':P'远鮿堸p%!釪#蓪XN(hr糙J Ej:B鲩)O铪辰技鴝貂疚鐍{y到/滌凢 ==Rt?V蝥! (J=晅 4珃"纐倦pnEH{护 +Z劀琄(闌漃壑 +I<核D楮狺憟楡耟Q蠦鋎]DQ陥诙eH竷苿桄鳅弁傧%YNh歎Z鹤4=濕Cn>汵t铑?苻Ww.麢盽d90燗撬zxT鵷l= 栜}化镲鯡{隐启嗣眦I@碂! L篻!聙R贆;韈&爾 :鞞Vs酮灜'轡K叮痖>$ 态聙 L趎%}g` KA襾歎=[>3+-](0V伨楟聙R鷌坏簟470敁ら;U现Or:鐫瞴{囵醶犭弭耍x SK迷騇翩矛聙襹H蹪堣d0唱g雺k厅H^*詗,,玃稩;1,\T鱿境~J薺趎m訦8$c漹 5N粘u岇溙繋钭屾赯gC擜蘴1荼 l棘&頏昅侵硲 +1=?仉攠貮懨速-6N謊u犖胭p鹟"淃鲄阺N逰【攠谊;G鵔V!$v蟫烡=O:虐拖胯9R鴓<姽%秪踡/忢崋o犆麻0犘爆蓍d嗴漁!蚘趤靌6珃稙=积|*m,.鹧跋i察Q痭?W惔Y+y靅1キgjf 枷堚級絁xaT寙耯鴹b$2蔨銸G>"=艺嬳睁f擐i ^_M_qyeG涿 溫Н'蕕捰>Qqx};}髉2#殔>}=峻喵/郢敜龐甼鳯endstream +endobj +5274 0 obj << +/Type /Page +/Contents 5275 0 R +/Resources 5273 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5191 0 R +/Annots [ 5277 0 R 5278 0 R 5279 0 R 5280 0 R 5281 0 R 5282 0 R 5283 0 R 5284 0 R 5285 0 R 5286 0 R 5287 0 R 5288 0 R 5289 0 R 5290 0 R 5291 0 R 5292 0 R 5293 0 R 5294 0 R 5295 0 R 5296 0 R 5297 0 R 5298 0 R 5299 0 R 5300 0 R 5301 0 R 5302 0 R 5303 0 R 5304 0 R 5305 0 R 5306 0 R 5307 0 R 5308 0 R 5309 0 R 5310 0 R 5311 0 R 5312 0 R 5313 0 R 5314 0 R 5315 0 R 5316 0 R 5317 0 R 5318 0 R 5319 0 R 5320 0 R 5321 0 R 5322 0 R 5323 0 R 5324 0 R 5325 0 R 5326 0 R 5327 0 R 5328 0 R 5329 0 R 5330 0 R 5331 0 R 5332 0 R 5333 0 R 5334 0 R 5335 0 R 5336 0 R 5337 0 R 5338 0 R 5339 0 R 5340 0 R ] +>> endobj +5277 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 714.8637 149.1082 725.7676] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5278 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 690.9534 149.1082 701.8573] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5279 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 667.043 149.1082 677.947] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5280 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 643.1327 149.1082 654.0366] +/Subtype /Link +/A << /S /GoTo /D (page.98) >> +>> endobj +5281 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 619.2223 149.1082 630.1263] +/Subtype /Link +/A << /S /GoTo /D (page.98) >> +>> endobj +5282 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 595.312 149.1082 606.2159] +/Subtype /Link +/A << /S /GoTo /D (page.98) >> +>> endobj +5283 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 571.4017 149.1082 582.3056] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5284 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 547.4913 149.1082 558.3953] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5285 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 523.581 149.1082 534.4849] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5286 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 499.6707 149.1082 510.5746] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5287 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 475.7603 154.0895 486.6643] +/Subtype /Link +/A << /S /GoTo /D (page.100) >> +>> endobj +5288 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 451.85 154.0895 462.7539] +/Subtype /Link +/A << /S /GoTo /D (page.100) >> +>> endobj +5289 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [101.7359 439.8948 118.6724 450.7988] +/Subtype /Link +/A << /S /GoTo /D (page.130) >> +>> endobj +5290 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9536 428.6569 172.9088 438.8436] +/Subtype /Link +/A << /S /GoTo /D (page.31) >> +>> endobj +5291 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [150.9911 416.7018 162.9463 426.8884] +/Subtype /Link +/A << /S /GoTo /D (page.31) >> +>> endobj +5292 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.2028 404.7466 165.158 414.9333] +/Subtype /Link +/A << /S /GoTo /D (page.32) >> +>> endobj +5293 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [150.4332 392.7914 162.3883 402.9781] +/Subtype /Link +/A << /S /GoTo /D (page.32) >> +>> endobj +5294 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.2774 380.8363 185.2326 391.0229] +/Subtype /Link +/A << /S /GoTo /D (page.32) >> +>> endobj +5295 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [182.5426 368.8811 194.4978 379.0678] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5296 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.5739 356.9259 175.5291 367.1126] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5297 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [170.9163 344.9708 182.8715 355.1574] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5298 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [200.7045 333.0156 212.6596 343.2022] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5299 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [190.184 321.0604 202.1392 331.2471] +/Subtype /Link +/A << /S /GoTo /D (page.34) >> +>> endobj +5300 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [192.3957 309.1053 204.3508 319.2919] +/Subtype /Link +/A << /S /GoTo /D (page.34) >> +>> endobj +5301 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.3958 297.1501 172.351 307.3367] +/Subtype /Link +/A << /S /GoTo /D (page.34) >> +>> endobj +5302 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [195.2549 285.1949 207.2101 295.3816] +/Subtype /Link +/A << /S /GoTo /D (page.35) >> +>> endobj +5303 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 260.5673 133.6163 271.4712] +/Subtype /Link +/A << /S /GoTo /D (page.31) >> +>> endobj +5304 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 236.657 133.6163 247.5609] +/Subtype /Link +/A << /S /GoTo /D (page.31) >> +>> endobj +5305 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 212.7466 133.6163 223.6506] +/Subtype /Link +/A << /S /GoTo /D (page.32) >> +>> endobj +5306 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 188.8363 133.6163 199.7402] +/Subtype /Link +/A << /S /GoTo /D (page.32) >> +>> endobj +5307 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 164.926 133.6163 175.8299] +/Subtype /Link +/A << /S /GoTo /D (page.32) >> +>> endobj +5308 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 141.0156 133.6163 151.9196] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5309 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 117.1053 133.6163 128.0092] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5310 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 93.195 133.6163 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5311 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [338.1425 714.8039 350.0976 725.7079] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5312 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [338.1425 690.774 350.0976 701.678] +/Subtype /Link +/A << /S /GoTo /D (page.34) >> +>> endobj +5313 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [338.1425 666.7441 350.0976 677.6481] +/Subtype /Link +/A << /S /GoTo /D (page.34) >> +>> endobj +5314 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [338.1425 642.7143 350.0976 653.6182] +/Subtype /Link +/A << /S /GoTo /D (page.34) >> +>> endobj +5315 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [338.1425 618.6844 350.0976 629.5883] +/Subtype /Link +/A << /S /GoTo /D (page.35) >> +>> endobj +5316 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [377.4249 584.4129 394.3613 594.5995] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5317 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [382.9641 572.3979 399.9006 582.5846] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5318 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [396.0846 559.6657 413.0211 570.5696] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5319 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [387.3974 547.6507 404.3339 558.5547] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5320 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [382.4062 535.6358 399.3427 546.5397] +/Subtype /Link +/A << /S /GoTo /D (page.107) >> +>> endobj +5321 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.74 512.3232 371.6765 522.5098] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5322 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.74 488.2933 371.6765 498.48] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5323 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.74 464.2634 371.6765 474.4501] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5324 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.74 440.2335 371.6765 450.4202] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5325 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.74 416.2036 371.6765 426.3903] +/Subtype /Link +/A << /S /GoTo /D (page.107) >> +>> endobj +5326 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.5095 381.2149 374.446 391.4015] +/Subtype /Link +/A << /S /GoTo /D (page.111) >> +>> endobj +5327 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.5095 357.185 374.446 367.3716] +/Subtype /Link +/A << /S /GoTo /D (page.111) >> +>> endobj +5328 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.5095 333.1551 374.446 343.3417] +/Subtype /Link +/A << /S /GoTo /D (page.111) >> +>> endobj +5329 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.5095 309.1252 374.446 319.3118] +/Subtype /Link +/A << /S /GoTo /D (page.112) >> +>> endobj +5330 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.5095 285.0953 374.446 295.2819] +/Subtype /Link +/A << /S /GoTo /D (page.112) >> +>> endobj +5331 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [392.3786 260.3481 409.3151 271.2521] +/Subtype /Link +/A << /S /GoTo /D (page.109) >> +>> endobj +5332 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [374.1173 248.3332 391.0538 259.2371] +/Subtype /Link +/A << /S /GoTo /D (page.109) >> +>> endobj +5333 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [373.0113 236.3182 389.9478 247.2222] +/Subtype /Link +/A << /S /GoTo /D (page.109) >> +>> endobj +5334 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [394.5899 225.0206 411.5264 235.2072] +/Subtype /Link +/A << /S /GoTo /D (page.108) >> +>> endobj +5335 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [349.7687 200.2734 366.7051 211.1773] +/Subtype /Link +/A << /S /GoTo /D (page.109) >> +>> endobj +5336 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [349.7687 176.2435 366.7051 187.1475] +/Subtype /Link +/A << /S /GoTo /D (page.109) >> +>> endobj +5337 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [349.7687 152.2136 366.7051 163.1176] +/Subtype /Link +/A << /S /GoTo /D (page.109) >> +>> endobj +5338 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.0858 140.1987 370.0223 151.1026] +/Subtype /Link +/A << /S /GoTo /D (page.131) >> +>> endobj +5339 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [361.903 117.9421 378.8395 128.1288] +/Subtype /Link +/A << /S /GoTo /D (page.110) >> +>> endobj +5340 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [367.4819 93.9122 384.4183 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.111) >> +>> endobj +5276 0 obj << +/D [5274 0 R /XYZ 90 757.9346 null] +>> endobj +5273 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5343 0 obj << +/Length 4208 +/Filter /FlateDecode +>> +stream +x讠\mo_啷襬N兄u"mZ瞭憉觊甶;%箌蹪珜缊蝯f纬鋚喦5;ю;w糗(C湊鏊=  圜C觎躏;w膇瘇=hFg觐 ??G?耥/无]%鱽] 图濤鬙z~x䦟岈:>P聹沌_$衩觅gN~ (Dp3W廛pL<遫廜敲珃鐻9卢s蒨$隹悘|瑞漚証0c 粦 Q盬a'聶Bg爯56媫w鈬軤3斊颾鼱S@#@@a碔 g +<韜_瀦 +" 笰O佢铯o`9憘沯呇F磽2'37黈膉蝕 l鼝鬡@韜IC墺@3 +L+*源泧峭嵛卮罧E刣z禔倧!7啉m饸n暘PQt峾W鳑藖+zq|a贳蠣软/痾討)#D2|G徻瀗誴c~*滗碞榈P朠鋝貇凫踦&仞 7绹 扶:=}寻 豘暜仉x鉒+_箙T憿巨\2u駸ы~s鳘伏493氌岆$?Q+&F$"|1K斑~榀鎔m48a5皅5d 鸹 <7~5誤普拔毬鳝Ss.驾=>.t')莳餁s儱n5;>{揄VU呸險蕵=zD[竟=羑qr 忠`>拝?α9 $T濃>n(敜 /?5_兎蒿 tF%g褟(58:4餙K矆蠷&)e笰飿馋 靑%}sL90>呠`\ 65/%1昝勂}笰镅讆旨渹r︿o}@a1vn!=85嚲}>簪繙Z濔X !明騗鍀帷/1 &吲oD)S郌畦滒7彎Cy.琫r哻鼝"帯晦識VJV駑緰Qk +迡诺蝹?l煻w薩'婼繒 V緰/F覌p +lJ裹埪XS鼕&<睚窉糌 -鶂r冝挴.-y纐*+茪倗䴖);追囒錿胆5f读襺笰/葑~滘 +麺(5)- +9骨户肭%W縱 +Kn堵 +瀫r僞罶gm鄚7T7O@a琁Η榠8 ,Q狮?結P鸧P衡擶,(5)@f贷 (殰z;'7X節S 7陆駐:泖)魓嵬葺~簏<}y=圯泗~w剌赟瞰M7鸇|锐3陔↙{ &櫓仉#圔H2顝 en灋斗7?o!悅=!s%鈬軤3W縹凴e3尖(務+y + /侖旘锨齀I铻糰GE?剑②0鞶 '艗9* +(務.廹(爝;瓮べ4菕?l鴲醷sヲ闓┰翪1%y3Sh澮K 芬枤軑坳糠丰 +暂~;>o8Q"g缲 !7柰涄锔歑;o8懫檴繖7叞z'耞-D驀 蹧図O\L &'愠3L攢r優(颠Q趭8M蛇P匰"`3,E国6黳高飵燂煄囬螫堕0w顊楃| 錁e砱lS +!7桧J颠瘾+譶KP峐j*[ +(務+D-偋#娮访 l76箱㑳痲捥?薶墪,?綊ヶ;^╇曨リ4E[@! 佊DH 瘘膂p{ ^IX廎FbD3V扄妙攋^橏u確鴲慒纉T隿Z?耸;鰮8U刣DsN籤熰霔瘬0M&皗(#仃B8S芴n難V<=飊榕 哑嘿 >鈬軤3捚~铀 肁&^爭?0$縿畽8t<噯v}笰镔讆цeO~&j酧 4祁餆3!坞癫衰R涠3 裩苀+l鼝&@韜挔┧$/I5(60^鑖#聖W莁&+\?}J繐'傉@G呇&塈溩餲x躭?-N胂輆&cD媹r兾繐桐秔庿^d 4)‖緻鏂曡 +<踒BL!趋tN24u偆:W盬2D茩d愙咖a 灐囷fG 9\%"~ :鼛X>hF湭PO厛耯R摖:》罌f彡麍6噣r冝鍼麧耾+玻掯殼Pm +烠譨,嘛韻半h+g<~笰/~7鶾缹h(6呄Z@溽_哽货睴杠┨[?P5p礂尮p@ + 闞+Vi衇&摮 r|O孰 涥00繀r:啄邖*97坂岠!7+P鷿$= #翀耯FQ粇懍荇zu2翃r僞qT麧嫬4 +F衺遬體7P +tnb焱訐?}j%2赺茏鉋-%+#~ :cm鼛Om'1淲麺(5)$,阎塕∞ *桭\#携 325"l匀.kT/k次4bP助F7it%_迥raOW)3XS)0 +㧐曋Y襋鑌瑸/愈窘z譿顝玓躅帑玚银揋艟U笰/)諂莾6'i磉S茪t蚍大+銜骍u:厸筷A嬴]h?铰劭堣涋貟9(枴/;Pi褺%郢^商凳胸n餋n雄璳裤桩m蚸-洯*񁛖-#詑[吲槟&>}bdk#满7崇塓/O寀$厗聠w猇/昕P.' G箁? Q/蕝癋裹e@蛍|狀稄筑%$K?C骏M!7XH聟遯B檔σU$霶kR +S呶'郧x筱竒}诐E欷绞肪c.;u V霆C霆q疊X揕驴嵚d1憊敲WL#.炗f6" 汧4ZgM鶣鐹瞨/V;G擴/窜`E矉 +朁 +!琎!n 褌 mJ走,骐覸7奾_i沽蔎K0d鼖+ aM:iA尶uEz聸愤均彡艴3W镴ekJE量:kRJ鴆愳-娳 w~豊!镹搦s儠?翋B╀_荠諼As閊g竵葱*p@誰匁?>傣;觥谗輯銈U麺PkT'遘噡銂蹩Ws4wzC諴煽竼吱懣鳫Ex醷澡oW啸|鉝Hき雴.Qf&Q剭蒭 +㧐壷Y揇@ 譚/兙0锁籷炭鑮j柹 V睱!}z煽榚謽e-蝿:璒O鑃躟/Fa詁焇/鲩k\>鞛7_w8㈣培 07X9L0 颁_<DX錯礗熁?质[x崜俖Η㈤庪蚙0;啄8'4J陀P鼧扣> endobj +5345 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.1937 726.8189 175.1302 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.111) >> +>> endobj +5346 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.175 714.8347 180.1115 725.7386] +/Subtype /Link +/A << /S /GoTo /D (page.111) >> +>> endobj +5347 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [166.4925 702.8505 183.429 713.7544] +/Subtype /Link +/A << /S /GoTo /D (page.112) >> +>> endobj +5348 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.8659 691.5836 171.8024 701.7702] +/Subtype /Link +/A << /S /GoTo /D (page.112) >> +>> endobj +5349 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.3453 679.5994 161.2818 689.7861] +/Subtype /Link +/A << /S /GoTo /D (page.132) >> +>> endobj +5350 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.1573 667.6152 193.1124 677.8019] +/Subtype /Link +/A << /S /GoTo /D (page.62) >> +>> endobj +5351 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [115.0158 655.631 131.9522 665.8177] +/Subtype /Link +/A << /S /GoTo /D (page.133) >> +>> endobj +5352 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.6507 642.9296 181.6059 653.8335] +/Subtype /Link +/A << /S /GoTo /D (page.92) >> +>> endobj +5353 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.7314 631.6627 170.6866 641.8493] +/Subtype /Link +/A << /S /GoTo /D (page.92) >> +>> endobj +5354 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.8185 619.6785 176.7736 629.8651] +/Subtype /Link +/A << /S /GoTo /D (page.92) >> +>> endobj +5355 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [150.9906 607.6943 162.9457 617.8809] +/Subtype /Link +/A << /S /GoTo /D (page.93) >> +>> endobj +5356 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [147.0354 594.9928 158.9906 605.8968] +/Subtype /Link +/A << /S /GoTo /D (page.91) >> +>> endobj +5357 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.941 571.7417 146.8962 581.9284] +/Subtype /Link +/A << /S /GoTo /D (page.92) >> +>> endobj +5358 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.941 547.7734 146.8962 557.96] +/Subtype /Link +/A << /S /GoTo /D (page.92) >> +>> endobj +5359 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.941 523.805 146.8962 533.9916] +/Subtype /Link +/A << /S /GoTo /D (page.92) >> +>> endobj +5360 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.941 499.8366 146.8962 510.0233] +/Subtype /Link +/A << /S /GoTo /D (page.93) >> +>> endobj +5361 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 464.7047 151.3298 475.6086] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5362 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 440.7363 151.3298 451.6403] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5363 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [135.4992 417.4852 147.4543 427.6719] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5364 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [155.9724 404.7838 167.9276 415.6877] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5365 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6073 392.7996 174.5625 403.7035] +/Subtype /Link +/A << /S /GoTo /D (page.71) >> +>> endobj +5366 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.4604 381.5327 216.4156 391.7193] +/Subtype /Link +/A << /S /GoTo /D (page.66) >> +>> endobj +5367 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.7047 368.8312 156.6599 379.7352] +/Subtype /Link +/A << /S /GoTo /D (page.71) >> +>> endobj +5368 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6173 356.847 174.5725 367.751] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5369 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [150.9911 344.8628 162.9463 355.7668] +/Subtype /Link +/A << /S /GoTo /D (page.72) >> +>> endobj +5370 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6073 332.8787 174.5625 343.7826] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5371 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.9136 320.8945 156.8688 331.7984] +/Subtype /Link +/A << /S /GoTo /D (page.68) >> +>> endobj +5372 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [170.3681 308.9103 182.3233 319.8142] +/Subtype /Link +/A << /S /GoTo /D (page.68) >> +>> endobj +5373 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [143.798 296.9261 155.7531 307.83] +/Subtype /Link +/A << /S /GoTo /D (page.72) >> +>> endobj +5374 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.2123 284.9419 165.1675 295.8459] +/Subtype /Link +/A << /S /GoTo /D (page.68) >> +>> endobj +5375 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [149.8852 272.9577 161.8403 283.8617] +/Subtype /Link +/A << /S /GoTo /D (page.69) >> +>> endobj +5376 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.1937 260.9735 170.1488 271.8775] +/Subtype /Link +/A << /S /GoTo /D (page.69) >> +>> endobj +5377 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.4615 248.9894 157.4167 259.8933] +/Subtype /Link +/A << /S /GoTo /D (page.72) >> +>> endobj +5378 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 237.0052 186.7466 247.9091] +/Subtype /Link +/A << /S /GoTo /D (page.69) >> +>> endobj +5379 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.8977 225.021 179.8528 235.9249] +/Subtype /Link +/A << /S /GoTo /D (page.70) >> +>> endobj +5380 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [177.5613 213.0368 189.5164 223.9407] +/Subtype /Link +/A << /S /GoTo /D (page.70) >> +>> endobj +5381 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.175 201.0526 175.1302 211.9566] +/Subtype /Link +/A << /S /GoTo /D (page.70) >> +>> endobj +5382 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [224.8828 189.7857 236.8379 199.9724] +/Subtype /Link +/A << /S /GoTo /D (page.76) >> +>> endobj +5383 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.1583 177.0843 206.1134 187.9882] +/Subtype /Link +/A << /S /GoTo /D (page.46) >> +>> endobj +5384 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [203.0152 165.1001 214.9704 176.004] +/Subtype /Link +/A << /S /GoTo /D (page.37) >> +>> endobj +5385 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.0528 153.8332 205.008 164.0198] +/Subtype /Link +/A << /S /GoTo /D (page.55) >> +>> endobj +5386 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.5208 141.849 213.476 152.0356] +/Subtype /Link +/A << /S /GoTo /D (page.41) >> +>> endobj +5387 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [200.255 129.8648 212.2101 140.0514] +/Subtype /Link +/A << /S /GoTo /D (page.40) >> +>> endobj +5388 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [227.9218 117.1633 239.877 128.0673] +/Subtype /Link +/A << /S /GoTo /D (page.89) >> +>> endobj +5389 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.415 105.1791 185.3515 116.0831] +/Subtype /Link +/A << /S /GoTo /D (page.169) >> +>> endobj +5390 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.4811 93.195 170.4176 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.170) >> +>> endobj +5391 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [340.6329 726.8189 357.5693 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.171) >> +>> endobj +5392 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [356.6827 714.8637 373.6192 725.7676] +/Subtype /Link +/A << /S /GoTo /D (page.172) >> +>> endobj +5393 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [341.1908 702.9085 358.1273 713.8125] +/Subtype /Link +/A << /S /GoTo /D (page.174) >> +>> endobj +5394 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.3649 690.9534 370.3014 701.8573] +/Subtype /Link +/A << /S /GoTo /D (page.176) >> +>> endobj +5395 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.9228 678.9982 370.8593 689.9021] +/Subtype /Link +/A << /S /GoTo /D (page.177) >> +>> endobj +5396 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [383.8008 667.043 400.7373 677.947] +/Subtype /Link +/A << /S /GoTo /D (page.178) >> +>> endobj +5397 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [384.3588 655.0879 401.2953 665.9918] +/Subtype /Link +/A << /S /GoTo /D (page.179) >> +>> endobj +5398 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [366.6549 643.1327 383.5913 654.0366] +/Subtype /Link +/A << /S /GoTo /D (page.180) >> +>> endobj +5399 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [345.6142 631.1775 362.5507 642.0815] +/Subtype /Link +/A << /S /GoTo /D (page.181) >> +>> endobj +5400 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [346.1721 619.2223 363.1086 630.1263] +/Subtype /Link +/A << /S /GoTo /D (page.184) >> +>> endobj +5401 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [368.299 607.2672 385.2355 618.1711] +/Subtype /Link +/A << /S /GoTo /D (page.190) >> +>> endobj +5402 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [363.3177 595.312 380.2542 606.2159] +/Subtype /Link +/A << /S /GoTo /D (page.191) >> +>> endobj +5403 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [363.8757 583.3568 380.8121 594.2608] +/Subtype /Link +/A << /S /GoTo /D (page.192) >> +>> endobj +5404 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [358.9043 571.4017 375.8408 582.3056] +/Subtype /Link +/A << /S /GoTo /D (page.193) >> +>> endobj +5405 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 547.4913 387.1685 558.3953] +/Subtype /Link +/A << /S /GoTo /D (page.47) >> +>> endobj +5406 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 523.581 387.1685 534.4849] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5407 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 499.6707 387.1685 510.5746] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5408 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 475.7603 367.8111 486.6643] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5409 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 451.85 355.079 462.7539] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5410 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [360.2693 439.8948 372.2245 450.7988] +/Subtype /Link +/A << /S /GoTo /D (page.74) >> +>> endobj +5411 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 415.9845 355.079 426.8884] +/Subtype /Link +/A << /S /GoTo /D (page.71) >> +>> endobj +5412 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 392.0742 355.079 402.9781] +/Subtype /Link +/A << /S /GoTo /D (page.66) >> +>> endobj +5413 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.846 368.1638 367.8012 379.0678] +/Subtype /Link +/A << /S /GoTo /D (page.77) >> +>> endobj +5414 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 344.2535 367.8111 355.1574] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5415 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.846 320.3431 367.8012 331.2471] +/Subtype /Link +/A << /S /GoTo /D (page.77) >> +>> endobj +5416 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.846 296.4328 367.8012 307.3367] +/Subtype /Link +/A << /S /GoTo /D (page.78) >> +>> endobj +5417 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 272.5225 367.8111 283.4264] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5418 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 248.6121 367.8111 259.5161] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5419 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 224.7018 355.079 235.6057] +/Subtype /Link +/A << /S /GoTo /D (page.71) >> +>> endobj +5420 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [374.9642 212.7466 386.9194 223.6506] +/Subtype /Link +/A << /S /GoTo /D (page.44) >> +>> endobj +5421 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 188.8363 367.8111 199.7402] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5422 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 164.926 367.8111 175.8299] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5423 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 141.0156 355.079 151.9196] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5424 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [360.2693 129.0605 372.2245 139.9644] +/Subtype /Link +/A << /S /GoTo /D (page.75) >> +>> endobj +5425 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 105.1501 387.1685 116.0541] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5344 0 obj << +/D [5342 0 R /XYZ 90 757.9346 null] +>> endobj +5341 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5428 0 obj << +/Length 2842 +/Filter /FlateDecode +>> +stream +x诃淽S9嗭緞V-蚞& 瞾萆栽臽\l13縍互朲#鸥r伭玷t粞~ 檂髲L44歲9箋<聯{筱稧{j逕?] 嵈rmA$(胭o晴烵~縹7醁!,叁 +fztv韀锬撃洱浚邁菗欓幕#寴Vb蚍#5<q受7_彯廅碹俳&實A66 俙筅魀襊螈賺鋣本] 釭z1l睁偒D\j$5直鴃>柎b~MD*7鏇徽r檸楺%%}xa.~&寣9i譾0瀟7c9炖p.$醁}"蓁觼I>0p? Fz惔k{行級脛魢鉽QU篼枤#偉垀唧籱[长2%i!h婽[b礨=怣K瑹臨Pu覣6v1螫v +@,QG彤眫vU憩 +QnB砨>吡嘖D昉鮸垙 +瑧眫╦0没*涀W`同舟 7Uc鸈﹜!x墜嫙 #\抳m'T簥 +菢垢▊B03?of粉郫%H8k刅圞Q_Ua0k|X;ktv帜Y:BI$邦玧緘腹澩6?宮oB0乍&F? &瓢葺*颖S膗3霡2. k寝pLU4鰢选3D鎪Fi鑍4L葺杏侥瑌羔$E袳d硇 %縓9|vz埋瘾佑O/略ヤ紐E脟峏?籬廓SH*蚥>g?暔a溤  <.瑒'蚁U-翾莹~崭無g籰l處剨泷フL蒄薴"0E姴b懝鴌0)i做fて'摊<BrQU塳寯T2勽皕o益R)L0? V禈4,拇渙o燓<%!蘵嫅zJAD蓞禂T濺猌Jf奸+nq鞲6_F+Hfn>﹖H殁仑!e仡n=C齞鸹爞;#k陲計錬咚 7)f儹# 纄袊禇A暯 弃偎`A誡9nQ敾q[0;彙'蝾悠O脛褫'n=斥陛GiB#籓UP5髞i(頍仚~迋防佘.e萧f S 檉k昔m4L?忧矶|蓉櫈s#g6獱j41唧Y藲M2垽筟B&虒塈椨.~&-v蹏 檠邷gic鲒X?YQ酣偑Ed.K :!&7纾zBAD葏E鷜B牚%D櫣GI: D2獶d'Q!ra%D憕╦Q瓚PB"緜腚,LQ揈雊联Q#恖陌呜!I婋 -L拱?T祱A肂(44RZ!ra-"旼殓仾9e)羾卾c幚嚇HD槗圑嶼  J.珼)蚁SU-%虗鎈&擵倧&K辁 T>瑎*窒U *0聦k瞀嬉Y僆q壕盥 k1<? T禈凞腡γ檔宰^憆a%R憕╦I1(a" u黟缬#笂绡﹦bD呪兆0甫55窒^S 欽癇 楚訒洼萌5暎F 簍M礅仑5u豱1禜瘉&帥[S瑹\S花偑Z"|感}J2lN..PKTw佊>2dT頽4僅聶俟L蚽[ 襻癕#iu+ >琱:C|PA覐x檓韒剤泫/v髷0鱤%歪狄0忏 螎摧敦抺?犹>@f癬腉昑薄郭簒>钐O锱%a0M"廏)雊'JA胀斎|趟(植;忏 .幋輖Sf鉳(吔#>軎Fd侔焜?亢>圾xD忏腼7 0s@P脉訖3 +淺4L閝翌[L8b柲X壬E昑=貉rz笸餼鎸j>A'4}(戠殓獮Oh醜棙=x衼8僃5 b?斒硥趔l`U&2p磗珧碹髬符蠞J縀6>ろh疯T=熜阘鵿x鮵伏|~"gg‵$@圔(蚁#俇=⑿煨!胡燭Wh拊PM)H(協 圧珃J$.B廜O{y狐] 禌}l鰬["鮰鵰<窒nU';X>所恂釓說苻en囨槽鑊麉/!襳w'竬烺厪*: c賬u緇篢0[!襳 4`粲9 m膣f睔-頏H戌刞d皑鮜"m5r6q约 z0|TI諆:1ㄖ恷Z雾PM+Hh. +悟"<-X沼 +}v/鹔蜝諨鼹蜮威~∵蔪SA趎a+ 齎VPuC脄貂隵畍繄Tz vろ'兴/NUh鑘皜To晼喚轥sA趎∞@KC_oUO*46貁鹴鲫觋烀O颫魄款_r暺喚鋊婣趎′@cC_rU)򁊊>;镔/'LA灰i-*橤T蔼C曍6螫眄f覵ッ燻疉趎鹍 g(嗅/PU蟞鑣靥碛/臫鐁0亊兇&儒`俇=π胄V]{=!犋rr9翦襳 鷕+▃FC趁觸9垠閩サz 襳郄:6鬙 辇朽P.桺] 闱@ Z73ロ觴9PO8uQ%Q)tIt滄蹏乺枅ZPA<*4Z@"<(X詢 +M亰摮D話 +R⊙"╃I立濼h涜H-謰}楀J嘋,胇兇萋 :鷈範陽遑0'L豙壷懽亘籬仞0hs鼜榣k铇寺胙橰s倾l駿H晿U寫惇濰き先齱堭顗邵鵵竟鉵鷨廤溯钆;{蕓罹!贷れG妛邫奢fW涊7乡籬m黪t跸符袁b?^v] 櫤舯endstream +endobj +5427 0 obj << +/Type /Page +/Contents 5428 0 R +/Resources 5426 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5491 0 R +/Annots [ 5430 0 R 5431 0 R 5432 0 R 5433 0 R 5434 0 R 5435 0 R 5436 0 R 5437 0 R 5438 0 R 5439 0 R 5440 0 R 5441 0 R 5442 0 R 5443 0 R 5444 0 R 5445 0 R 5446 0 R 5447 0 R 5448 0 R 5449 0 R 5450 0 R 5451 0 R 5452 0 R 5453 0 R 5454 0 R 5455 0 R 5456 0 R 5457 0 R 5458 0 R 5459 0 R 5460 0 R 5461 0 R 5462 0 R 5463 0 R 5464 0 R 5465 0 R 5466 0 R 5467 0 R 5468 0 R 5469 0 R 5470 0 R 5471 0 R 5472 0 R 5473 0 R 5474 0 R 5475 0 R 5476 0 R 5477 0 R 5478 0 R 5479 0 R 5480 0 R 5481 0 R 5482 0 R 5483 0 R 5484 0 R 5485 0 R 5486 0 R 5487 0 R 5488 0 R 5489 0 R 5490 0 R ] +>> endobj +5430 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 726.8189 170.6871 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5431 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.0658 714.8637 148.0023 725.7676] +/Subtype /Link +/A << /S /GoTo /D (page.134) >> +>> endobj +5432 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 702.9085 138.5976 713.8125] +/Subtype /Link +/A << /S /GoTo /D (page.72) >> +>> endobj +5433 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 678.9982 138.5976 689.9021] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5434 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 667.043 170.6871 677.947] +/Subtype /Link +/A << /S /GoTo /D (page.52) >> +>> endobj +5435 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 643.1327 170.6871 654.0366] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5436 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 619.2223 151.3298 630.1263] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5437 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 595.312 170.6871 606.2159] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5438 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5575 583.3568 163.494 594.2608] +/Subtype /Link +/A << /S /GoTo /D (page.136) >> +>> endobj +5439 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.1342 571.4017 159.0707 582.3056] +/Subtype /Link +/A << /S /GoTo /D (page.137) >> +>> endobj +5440 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 547.4913 151.3298 558.3953] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5441 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 523.581 151.3298 534.4849] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5442 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [161.8004 499.6707 173.7556 510.5746] +/Subtype /Link +/A << /S /GoTo /D (page.37) >> +>> endobj +5443 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [161.8004 475.7603 173.7556 486.6643] +/Subtype /Link +/A << /S /GoTo /D (page.37) >> +>> endobj +5444 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [161.8004 451.85 173.7556 462.7539] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5445 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.6358 439.8948 174.5723 450.7988] +/Subtype /Link +/A << /S /GoTo /D (page.138) >> +>> endobj +5446 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 415.9845 138.5976 426.8884] +/Subtype /Link +/A << /S /GoTo /D (page.68) >> +>> endobj +5447 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.9323 404.0293 151.8875 414.9333] +/Subtype /Link +/A << /S /GoTo /D (page.40) >> +>> endobj +5448 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.4829 380.119 170.4381 391.0229] +/Subtype /Link +/A << /S /GoTo /D (page.41) >> +>> endobj +5449 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 356.2087 175.27 367.1126] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5450 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 332.2983 175.27 343.2022] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5451 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 308.388 175.27 319.2919] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5452 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 284.4776 175.27 295.3816] +/Subtype /Link +/A << /S /GoTo /D (page.57) >> +>> endobj +5453 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 260.5673 175.27 271.4712] +/Subtype /Link +/A << /S /GoTo /D (page.57) >> +>> endobj +5454 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 236.657 175.27 247.5609] +/Subtype /Link +/A << /S /GoTo /D (page.58) >> +>> endobj +5455 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 212.7466 175.27 223.6506] +/Subtype /Link +/A << /S /GoTo /D (page.58) >> +>> endobj +5456 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 188.8363 175.27 199.7402] +/Subtype /Link +/A << /S /GoTo /D (page.58) >> +>> endobj +5457 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 164.926 175.27 175.8299] +/Subtype /Link +/A << /S /GoTo /D (page.59) >> +>> endobj +5458 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 141.0156 175.27 151.9196] +/Subtype /Link +/A << /S /GoTo /D (page.59) >> +>> endobj +5459 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 117.1053 138.5976 128.0092] +/Subtype /Link +/A << /S /GoTo /D (page.68) >> +>> endobj +5460 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [143.788 105.1501 155.7432 116.0541] +/Subtype /Link +/A << /S /GoTo /D (page.75) >> +>> endobj +5461 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 726.8189 355.079 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.72) >> +>> endobj +5462 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [382.8644 714.8637 394.8196 725.7676] +/Subtype /Link +/A << /S /GoTo /D (page.61) >> +>> endobj +5463 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 690.9534 355.079 701.8573] +/Subtype /Link +/A << /S /GoTo /D (page.68) >> +>> endobj +5464 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 678.9982 387.1685 689.9021] +/Subtype /Link +/A << /S /GoTo /D (page.52) >> +>> endobj +5465 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 655.0879 367.8111 665.9918] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5466 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 631.1775 367.8111 642.0815] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5467 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 607.2672 367.8111 618.1711] +/Subtype /Link +/A << /S /GoTo /D (page.88) >> +>> endobj +5468 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 583.3568 367.8111 594.2608] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5469 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 559.4465 367.8111 570.3504] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5470 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 535.5362 367.8111 546.4401] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5471 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 511.6258 387.1685 522.5298] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5472 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.2816 499.6707 403.2181 510.5746] +/Subtype /Link +/A << /S /GoTo /D (page.139) >> +>> endobj +5473 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 475.7603 387.1685 486.6643] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5474 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [374.9642 451.85 386.9194 462.7539] +/Subtype /Link +/A << /S /GoTo /D (page.42) >> +>> endobj +5475 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [374.9642 427.9397 386.9194 438.8436] +/Subtype /Link +/A << /S /GoTo /D (page.43) >> +>> endobj +5476 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 404.0293 367.8111 414.9333] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5477 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 380.119 387.1685 391.0229] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5478 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [374.9642 356.2087 386.9194 367.1126] +/Subtype /Link +/A << /S /GoTo /D (page.43) >> +>> endobj +5479 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 332.2983 367.8111 343.2022] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5480 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 308.388 367.8111 319.2919] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5481 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 284.4776 387.1685 295.3816] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5482 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 260.5673 387.1685 271.4712] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5483 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 236.657 367.8111 247.5609] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5484 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 212.7466 355.079 223.6506] +/Subtype /Link +/A << /S /GoTo /D (page.69) >> +>> endobj +5485 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 200.7915 387.1685 211.6954] +/Subtype /Link +/A << /S /GoTo /D (page.53) >> +>> endobj +5486 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.2817 176.8811 390.2369 187.7851] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5487 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.2817 152.9708 390.2369 163.8747] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5488 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.2817 129.0605 390.2369 139.9644] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5489 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 105.1501 355.079 116.0541] +/Subtype /Link +/A << /S /GoTo /D (page.69) >> +>> endobj +5490 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [356.4136 93.195 368.3688 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.40) >> +>> endobj +5429 0 obj << +/D [5427 0 R /XYZ 90 757.9346 null] +>> endobj +5426 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5494 0 obj << +/Length 3664 +/Filter /FlateDecode +>> +stream +x诃\賜蹻}譝簦5/y素災檘鈮eA (Rb5璙柨-6Y2 坋瓜璖黟諪6跴鴱meRoN桄W'l鷛蠂瘅嫇魁兓#Ns焦鴜lA38銢嫑N箳g?^|G﹩v?傀鲥N^]勬'v%4髰镤殒z裢 %耏爹 ~97w'拫鶙O'颪9~0話PL圆Y~5$瀗.穱犷犟1焤 1F淩w交鶎煙畀象欐8m6哬B櫠渠鶑&眺QO~暑栱W)'2﨤焵BX紿T獧^Tz鴗{杠=]滷`)悢腞6贗篓V楡3~*睑n豏 %壯Zg@3 +a伌鍎鶄 聰歱C窗f阖鑙2銍8牏I旬飦e2阆5橯DY%u#啕護/遌9qc祠怩粙/拚$b矰粐Z謇7楔枤p5銍8燰9y籧彖瞨'勈鴭蕶P玏IHR漈蝐櫡燚R<掲鈥J轊痪燜)"B1泆 O|F!>q蜛q%幽/( 筽*謼D+6杽i桪逻..+(%R/I2粐頳r躔P_垟#哰綫VE澝馛P懄h譿D旹$L鵶if玛1(%m愭p齪 冫谫^鰃躰(XZ晄zu砟澸 0R眙Y紷誖0閊紉{3&Z%,阎Uq@O哃)[.玏唊b刣q閈耖3譱臽{`琜絅漸:纜磌)s滷X閿发淴.氯黑_蹖叻嶘!垡v=姫钲m哝Q+厔銑誚荅~假熥 +襔剽l.濔CP汯髒+p笰 +拋蔐;PL +□K裓聱瞳1NO縷}1蓰嬒烼ブ峨83u2u桐O陞R奝*ⅸ泠n{矯>琚, T汋媟衁 Y擲④g躜Fㄣv= +f+q+M逻..玏,_龇O7煭妏妏n鴍佲嶡6 +dM侜 惏偫,瑙埯涚*aP将GUU唽獢9琟 殭0縷{隬/铨沢扃4p庥肭W+嗢tS鵷Y>B 洓畐鼢曇y瑧KV~j穥\笶Y袄X庥1Z;D嘛I铟[C蚍ne磜怞蝉w濃蝞6榔m頵Sna漺耻9r玤皏謭:矲%毘F蔬5P躾荸I*鉧豢葺躛wK鉬,焈21奾t +橣詄J埘潙U櫎d6惘4V/p}ì4"軪h漋0=z濾3l訨兜JZuY絍薶篘锓w3?断[盿桜瑨a霦奖7闷鼻赾/醥徑.娏阉箃=n熁♂T'/O袚g哸$黰y含 s~箃蓸{ f)蛘KV衁 Y睷捳g趼hK╭骃婿鷓换^0 己x鈥NR<)硏^#) 钄尛鎹A偉~1緰y株q疻檦-QNe霦釭麻減&話鼾й敲鳋3穣孲聲曤荓33 3 {挑Y鏼*pV(7鈳( {8tY,&B.7\账3I鏶乾Y厺8Y鯜p}<渆顗诹S佬秺髝鞬郈劘 o祣pΣ 襀润刧BI!i6q_宑r旗閲洬谜ы鏜芈h漏計慽q@ビE货 [X榾嵶3嵯暁Q,U饷X绎Jty跤n_#蔋箈-協T鶽;瞰薘2&O欯<~OF葈{S {剷類G|e籧龆繧f悁耎CGd鷹3FO +繨(b0&熔m)W栺 +L(5(鸐谉v徾V鯆稻梹G(e粛烨轮{ (5d熁_旗k?鱓z%J賜脞幜B遳蚁=0佣刻邿!,=C鈥JO妚清鲨m漈曬琦(5;kⅫk`,)N痷<夥)踡T溸pt]>叡 +^焛Q哫#亶 ?惙;骘J'斏鴭00謵l 蝙O7曯┓w傅NG4韶隬郀!筘3遫W祡9V眲曧禚窃NS7蛳韍繒蓓『鹮!啐岠!~襳[巏擇Wv?# +c 腇枫鲿卂"4_矸 x涅V禰DH夥 (5$燍鞦搊%yE 祅.隱賜闶覙 +c潛/mw摗昙厚鎣n#娣⒄F鯪樉.0覑}旎媿/绲2F卢B棒'则羡m 8陞J &堼{檥、侐G 敝M饒l1噜`踳4=呭S誖 +豐k +媗F馛P門裯&·yH-逑(5H沌︾礐穠璼r#脾掌-R0錱優o20覑}鞛,烚潡桌Y謼`1眷M裫栏0{^3 +!]$埈欛C1lt9愼龤e货9噁迌輘(饥咉Z7湋K6酑尟MYY`"顄}楶辄 睙N/ tr^^蒈^=/H蹈K裼偪G秒g吀婉!К$e蔧9)(宻.幠x:$M鮷凬旱貈G绩e货3苹 +T]l@a!胗縸h +`垥皩|y馛P_襳[幝聴騑叡bcm蜮襶.讕5u `O呁~j骾辬]H 鼽&|:0譅A 4樉翡紌腞街饒备lw斃N +薹3$萂蛷潄郙/-1鳰?鯖0i籾婵&瀵軇QkP vGO +繮h寖窳甔kx4]钝*砾]玽@a珹傑褒貪 鎮潱V(7廪4側A牞A冐瀪REA剳z%=sx賜齵$|,/棡%=0謞跆嶉皕z3瀵}и䦂凤獜雂>畵窺糷u<濍诔"a嗦v蓍厬蝒抶?v鲿窃g碮皹觭q@完櫡;~1By砕FS芲='2彎钋螫甇&xュ>l搠⒄芿7蚞谬驳FHC蚬_踯G昚kx_钝Jt^删>0謵~罹?ο谧~X{#|缵禽鑍麆絵睇!铱$羡莎{穈I緆/Z搊)籵D慎IC蛸S颌濣7 栦,{Q騷9韨%u貺=~O见^A阝槾m&]舅攸郭2W動3忧鉭 屮]櫚 +岁6,X菟 +丷髰a餾z答睁~豢:lo螤圁v阆7骭抉O煢_焴/给傆鉶悥><腼銮_瀆繚衐邱缢蒿|8緹氅芖嶿婽R]endstream +endobj +5493 0 obj << +/Type /Page +/Contents 5494 0 R +/Resources 5492 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5491 0 R +/Annots [ 5496 0 R 5497 0 R 5498 0 R 5499 0 R 5500 0 R 5501 0 R 5502 0 R 5503 0 R 5504 0 R 5505 0 R 5506 0 R 5507 0 R 5508 0 R 5509 0 R 5510 0 R 5511 0 R 5512 0 R 5513 0 R 5514 0 R 5515 0 R 5516 0 R 5517 0 R 5518 0 R 5519 0 R 5520 0 R 5521 0 R 5522 0 R 5523 0 R 5524 0 R 5525 0 R 5526 0 R 5527 0 R 5528 0 R 5529 0 R 5530 0 R 5531 0 R 5532 0 R 5533 0 R 5534 0 R 5535 0 R 5536 0 R 5537 0 R 5538 0 R 5539 0 R 5540 0 R 5541 0 R 5542 0 R 5543 0 R 5544 0 R 5545 0 R 5546 0 R 5547 0 R 5548 0 R 5549 0 R 5550 0 R 5551 0 R 5552 0 R 5553 0 R 5554 0 R 5555 0 R 5556 0 R 5557 0 R 5558 0 R 5559 0 R 5560 0 R 5561 0 R 5562 0 R 5563 0 R 5564 0 R 5565 0 R 5566 0 R 5567 0 R 5568 0 R 5569 0 R 5570 0 R 5571 0 R 5572 0 R 5573 0 R ] +>> endobj +5496 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [161.8004 714.8637 173.7556 725.7676] +/Subtype /Link +/A << /S /GoTo /D (page.39) >> +>> endobj +5497 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [143.8077 690.9534 155.7628 701.8573] +/Subtype /Link +/A << /S /GoTo /D (page.89) >> +>> endobj +5498 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 667.043 138.5976 677.947] +/Subtype /Link +/A << /S /GoTo /D (page.72) >> +>> endobj +5499 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 643.1327 151.3298 654.0366] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5500 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.4116 631.1775 146.3481 642.0815] +/Subtype /Link +/A << /S /GoTo /D (page.140) >> +>> endobj +5501 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 607.2672 151.3298 618.1711] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5502 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 583.3568 170.6871 594.2608] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5503 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 559.4465 151.3298 570.3504] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5504 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 535.5362 151.3298 546.4401] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5505 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 511.6258 138.5976 522.5298] +/Subtype /Link +/A << /S /GoTo /D (page.69) >> +>> endobj +5506 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [143.788 499.6707 155.7432 510.5746] +/Subtype /Link +/A << /S /GoTo /D (page.75) >> +>> endobj +5507 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [149.885 487.7155 166.8215 498.6194] +/Subtype /Link +/A << /S /GoTo /D (page.142) >> +>> endobj +5508 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 463.8052 151.3298 474.7091] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5509 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 439.8948 170.6871 450.7988] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5510 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 415.9845 151.3298 426.8884] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5511 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 392.0742 151.3298 402.9781] +/Subtype /Link +/A << /S /GoTo /D (page.88) >> +>> endobj +5512 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 368.1638 170.6871 379.0678] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5513 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 344.2535 151.3298 355.1574] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5514 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [150.9911 332.2983 167.9276 343.2022] +/Subtype /Link +/A << /S /GoTo /D (page.143) >> +>> endobj +5515 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 308.388 138.5976 319.2919] +/Subtype /Link +/A << /S /GoTo /D (page.70) >> +>> endobj +5516 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 296.4328 170.6871 307.3367] +/Subtype /Link +/A << /S /GoTo /D (page.53) >> +>> endobj +5517 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.4829 272.5225 170.4381 283.4264] +/Subtype /Link +/A << /S /GoTo /D (page.43) >> +>> endobj +5518 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.4829 248.6121 170.4381 259.5161] +/Subtype /Link +/A << /S /GoTo /D (page.44) >> +>> endobj +5519 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 224.7018 170.6871 235.6057] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5520 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 200.7915 170.6871 211.6954] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5521 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 176.8811 138.5976 187.7851] +/Subtype /Link +/A << /S /GoTo /D (page.70) >> +>> endobj +5522 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 152.9708 170.6871 163.8747] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5523 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.6548 141.0156 169.5913 151.9196] +/Subtype /Link +/A << /S /GoTo /D (page.144) >> +>> endobj +5524 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 117.1053 138.5976 128.0092] +/Subtype /Link +/A << /S /GoTo /D (page.70) >> +>> endobj +5525 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 105.1501 170.6871 116.0541] +/Subtype /Link +/A << /S /GoTo /D (page.54) >> +>> endobj +5526 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 726.8189 367.8111 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5527 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 702.9085 387.1685 713.8125] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5528 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [368.5781 678.9982 380.5333 689.9021] +/Subtype /Link +/A << /S /GoTo /D (page.47) >> +>> endobj +5529 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [377.9828 667.043 389.938 677.947] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5530 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [371.2382 655.0879 383.1934 665.9918] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5531 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [368.578 643.1327 380.5332 654.0366] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5532 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [373.5593 631.1775 385.5145 642.0815] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5533 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.0886 619.2223 391.0438 630.1263] +/Subtype /Link +/A << /S /GoTo /D (page.52) >> +>> endobj +5534 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [388.4933 607.2672 400.4485 618.1711] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5535 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [376.8768 595.312 388.832 606.2159] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5536 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.6937 583.3568 381.6488 594.2608] +/Subtype /Link +/A << /S /GoTo /D (page.52) >> +>> endobj +5537 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [363.6067 571.4017 375.5618 582.3056] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5538 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [381.0513 559.4465 393.0064 570.3504] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5539 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [363.6068 547.4913 375.5619 558.3953] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5540 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [373.0012 535.5362 384.9564 546.4401] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5541 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [373.9678 523.581 385.923 534.4849] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5542 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [366.3665 511.6258 378.3216 522.5298] +/Subtype /Link +/A << /S /GoTo /D (page.53) >> +>> endobj +5543 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [364.7126 499.6707 376.6678 510.5746] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5544 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [383.5318 487.7155 395.4869 498.6194] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5545 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [385.7439 475.7603 397.699 486.6643] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5546 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [384.379 463.8052 396.3342 474.7091] +/Subtype /Link +/A << /S /GoTo /D (page.53) >> +>> endobj +5547 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [397.6094 451.85 409.5646 462.7539] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5548 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.2917 439.8948 398.2469 450.7988] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5549 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [406.7647 427.9397 418.7199 438.8436] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5550 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.6563 415.9845 391.6115 426.8884] +/Subtype /Link +/A << /S /GoTo /D (page.54) >> +>> endobj +5551 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [389.9777 404.0293 401.9329 414.9333] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5552 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [372.4537 380.119 384.4089 391.0229] +/Subtype /Link +/A << /S /GoTo /D (page.74) >> +>> endobj +5553 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.0986 368.1638 391.0538 379.0678] +/Subtype /Link +/A << /S /GoTo /D (page.75) >> +>> endobj +5554 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.8494 356.2087 398.8046 367.1126] +/Subtype /Link +/A << /S /GoTo /D (page.75) >> +>> endobj +5555 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [391.2728 344.2535 403.228 355.1574] +/Subtype /Link +/A << /S /GoTo /D (page.75) >> +>> endobj +5556 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.2816 320.3431 398.2368 331.2471] +/Subtype /Link +/A << /S /GoTo /D (page.77) >> +>> endobj +5557 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.5408 308.388 390.4959 319.2919] +/Subtype /Link +/A << /S /GoTo /D (page.77) >> +>> endobj +5558 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.8393 296.4328 398.7945 307.3367] +/Subtype /Link +/A << /S /GoTo /D (page.78) >> +>> endobj +5559 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.2816 272.5225 398.2368 283.4264] +/Subtype /Link +/A << /S /GoTo /D (page.37) >> +>> endobj +5560 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [394.5903 260.5673 406.5455 271.4712] +/Subtype /Link +/A << /S /GoTo /D (page.37) >> +>> endobj +5561 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [393.4843 248.6121 405.4395 259.5161] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5562 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [385.1757 236.657 397.1308 247.5609] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5563 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [389.051 224.7018 401.0062 235.6057] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5564 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [393.4843 212.7466 405.4395 223.6506] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5565 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [392.3784 200.7915 404.3335 211.6954] +/Subtype /Link +/A << /S /GoTo /D (page.39) >> +>> endobj +5566 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [363.4177 177.5984 375.3729 187.7851] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5567 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [351.9805 165.6432 363.9356 175.8299] +/Subtype /Link +/A << /S /GoTo /D (page.60) >> +>> endobj +5568 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.5408 152.9708 390.4959 163.8747] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5569 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [373.5594 141.0156 385.5146 151.9196] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5570 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.5408 129.0605 390.4959 139.9644] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5571 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.5408 117.1053 390.4959 128.0092] +/Subtype /Link +/A << /S /GoTo /D (page.57) >> +>> endobj +5572 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.5408 105.1501 390.4959 116.0541] +/Subtype /Link +/A << /S /GoTo /D (page.57) >> +>> endobj +5573 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.5408 93.195 390.4959 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.58) >> +>> endobj +5495 0 obj << +/D [5493 0 R /XYZ 90 757.9346 null] +>> endobj +5492 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5576 0 obj << +/Length 3800 +/Filter /FlateDecode +>> +stream +x讠\kS7∈R魚鞇当甤g) +玫C-朑鹠驼H╃-*UN鲬未篬_0鴱/<[Xm,慰m迸W-L噻糪nJ鴧м砐~<N掂b奔鴐h嘤物藷9蚀G猁B腽莪僥傻4<镏o砍 忡-Fz|(鱚,緈)!/N二欬0`s衆b搻$8兿B藚鹆甮騲y{zy{vqqwz鯡=zf= 茚'w_#涓E倱弻FC預 +龜細xu(愉攻3厶v嚦盹侸!U鹅i瘠4繢惟 ╬=S﨔唸瓯&槮FyU腽盱?2gL蛾i瘠44鳹)XS﨔儓瓯/﹔巆`獳0N<n!酙i嬎k +臺蓯PV萀苢圓鉌.V;Bo聱|萵< +E笭蹳咜#伥銞6P敠柫D瓄q幛#啞TCi+:JFT4E dU芓/痮讴kI9+酀〨8)袢(j詙Cn$e┴氅彣i毢R)(呫詏Ww7楃盱崷仑陇3OJd(嵾A佯[ +㖞誧MHAa憳F鬃H烎詐沓]/OF<) DT5蜑q壬6兹W嚐鯟>剌?F_橎蚶NJ<*3?曆 {RQ轑:J 潷Jk7曕`獉.襥h簰Yg 寈R k狇;#渶Vr蔩0:琘k*7'藘w飵w 踍炧笯傾瞸B.xR啼倝 <)? 歶0歳)sq|箧в7H񱻚貞d媈9坸R`鍫;蘝闱FT麺9埁k毧訹炏‘n劲g妼頾<) 饙笤0w噈%噯o蕪lT5蚞眕玡虺鼹踽裬澍峉涩襟穲'vW麧y鰹C{)sQ=4崧崠L髧=聑B逻Q同虵金弜R`醎麧 >珴7Q=$76玊噤祝Y`s2險'珕昗\蜺街S颚FP2蜔﹑Y椈流BS絷禥d肢OJ謣g$摗L鴽ZQ$傪釥H鐜瘌`麂溧硭7=`劭⒌衠仄$藒-黏4纊嵩飳P瀣厤蠑﹨歶p,\囫B嚱僷x蝰餳.~l咼閤6頗1釯iH养0 \hЁ#殽06\邋陌N ;躮縶仌'鎌 挰z绐OJ靄钓媖3檪蔬湯FT5i.登{翣辽d噑窘剉駊江铸凼OJr陊F 8鴂艔躒k褺砷m妪觅=v椽<3 z“啌廍B鍀鎈LS7Q=4y'W绶贩A&龙)濎zU2翴伹猟 迡洂7U2:擨铙臽X =hNN蠱Zd孇&a罁$LD?娆慚聙瓯3.*s乗緟坜=\_钧# +椹扯p)#灁Hqh8捔効巻誥Mr剋聹展N.梠^`棤恆xF2A膿K颠耿犅項沑Q=4w'耈瑳苒oL冾6霾A膿K礯|()"歞,\玩銚O鱺:佧巧嚪柔夃r椚v.)釯iuI颠櫖i蝬X馭K姩kVA囕蠂'巁=滦./ +Σu葑'%鮱鈛0);蜴雬陳z@+硚+.堺郢匏 漪骜}/记,<*┞m痽孰OJ儥鳎'~¢l#&k萇 m辙w宠'2淦風 7锜M=-Q=冥攆(バf?Y(槁瀆>]`揚#l︹f&j3m +謽昷}^PA畲柱Ul襧剈禋 `^碔+^w搉緀}朲3犏GoY`僙 諷k:Y:矗Z:旯T砞眢2痤樗4$電5兰X沬揦嵋滻6鞠SII蕯}, 64耭z卢襠*m*蓀:#躄o<┞イ顷+ 6I5潞RM0/說$硵;阽gI%}簋Yf挭4 U偼tUI勯fリ袔RI;+鹹2YN%7O_|チ&橣XWι鎒贚沝覟蕄i;昳競ED怲I/睻O剤'&B韜A!}ィ餪4"DT6墵靭K傦D/袏<=^ +僊2潞2@}M肭xFQ绅;m墆䦟^綡PIm杈 +钉*φ撰胝葙脁锎迬~忨 .饪霨!l龝`态?} 譣7w盏烏囅咦钸旰S$搿H7endstream +endobj +5575 0 obj << +/Type /Page +/Contents 5576 0 R +/Resources 5574 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5491 0 R +/Annots [ 5578 0 R 5579 0 R 5580 0 R 5581 0 R 5582 0 R 5583 0 R 5584 0 R 5585 0 R 5586 0 R 5587 0 R 5588 0 R 5589 0 R 5590 0 R 5591 0 R 5592 0 R 5593 0 R 5594 0 R 5595 0 R 5596 0 R 5597 0 R 5598 0 R 5599 0 R 5600 0 R 5601 0 R 5602 0 R 5603 0 R 5604 0 R 5605 0 R 5606 0 R 5607 0 R 5608 0 R 5609 0 R 5610 0 R 5611 0 R 5612 0 R 5613 0 R 5614 0 R 5615 0 R 5616 0 R 5617 0 R 5618 0 R 5619 0 R 5620 0 R 5621 0 R 5622 0 R 5623 0 R 5624 0 R 5625 0 R 5626 0 R 5627 0 R 5628 0 R 5629 0 R 5630 0 R 5631 0 R 5632 0 R 5633 0 R 5634 0 R 5635 0 R 5636 0 R 5637 0 R 5638 0 R 5639 0 R 5640 0 R 5641 0 R 5642 0 R 5643 0 R 5644 0 R 5645 0 R 5646 0 R 5647 0 R ] +>> endobj +5578 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.215 726.8189 191.1701 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.58) >> +>> endobj +5579 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.3271 714.6576 193.2823 725.5615] +/Subtype /Link +/A << /S /GoTo /D (page.58) >> +>> endobj +5580 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [183.0903 702.4963 195.0455 713.4002] +/Subtype /Link +/A << /S /GoTo /D (page.59) >> +>> endobj +5581 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [200.2458 690.335 212.201 701.2389] +/Subtype /Link +/A << /S /GoTo /D (page.59) >> +>> endobj +5582 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.7047 666.0124 156.6599 676.9163] +/Subtype /Link +/A << /S /GoTo /D (page.44) >> +>> endobj +5583 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.1068 653.8511 164.0619 664.755] +/Subtype /Link +/A << /S /GoTo /D (page.41) >> +>> endobj +5584 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.271 641.6898 176.2262 652.5938] +/Subtype /Link +/A << /S /GoTo /D (page.42) >> +>> endobj +5585 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.6196 629.5285 200.5748 640.4325] +/Subtype /Link +/A << /S /GoTo /D (page.43) >> +>> endobj +5586 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4741 617.3672 183.4293 628.2712] +/Subtype /Link +/A << /S /GoTo /D (page.43) >> +>> endobj +5587 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [184.1963 605.2059 196.1514 616.1099] +/Subtype /Link +/A << /S /GoTo /D (page.43) >> +>> endobj +5588 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [208.5449 593.0447 220.5001 603.9486] +/Subtype /Link +/A << /S /GoTo /D (page.44) >> +>> endobj +5589 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [143.798 568.7221 155.7531 579.626] +/Subtype /Link +/A << /S /GoTo /D (page.61) >> +>> endobj +5590 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.9136 544.3995 156.8688 555.3034] +/Subtype /Link +/A << /S /GoTo /D (page.40) >> +>> endobj +5591 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.1937 532.2382 170.1488 543.1421] +/Subtype /Link +/A << /S /GoTo /D (page.40) >> +>> endobj +5592 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [136.6051 508.6329 148.5603 518.8195] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5593 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.6238 496.4716 143.579 506.6582] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5594 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.0594 484.3103 214.0145 494.497] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5595 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.6172 472.149 214.5724 482.3357] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5596 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.3295 459.9877 211.2847 470.1744] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5597 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.5275 447.8264 206.4827 458.0131] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5598 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [175.2499 435.6651 187.205 445.8518] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5599 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.6981 423.5038 211.6533 433.6905] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5600 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.7045 411.3426 180.6597 421.5292] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5601 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [192.0967 399.1812 204.0519 409.3679] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5602 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [211.8625 387.02 223.8176 397.2066] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5603 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.6582 374.8587 211.6134 385.0453] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5604 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [178.6573 362.6974 190.6124 372.884] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5605 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.3559 349.8188 156.3111 360.7227] +/Subtype /Link +/A << /S /GoTo /D (page.88) >> +>> endobj +5606 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.311 338.3748 192.2662 348.5614] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5607 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [177.5114 326.2135 189.4666 336.4002] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5608 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.4366 314.0522 209.3917 324.2389] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5609 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.9782 301.8909 224.9333 312.0776] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5610 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.8175 289.7296 211.7727 299.9163] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5611 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [225.3418 277.5683 237.297 287.755] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5612 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.0895 265.407 166.0446 275.5937] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5613 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.261 253.2457 200.2162 263.4324] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5614 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.0877 240.3672 169.0429 251.2711] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5615 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [189.1772 228.2059 201.1324 239.1098] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5616 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [178.129 216.7619 190.0842 226.9485] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5617 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [238.881 204.6006 250.8362 214.7872] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5618 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.2028 192.4393 165.158 202.6259] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5619 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [191.947 179.5607 203.9021 190.4647] +/Subtype /Link +/A << /S /GoTo /D (page.88) >> +>> endobj +5620 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [220.739 168.1167 232.6941 178.3034] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5621 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.2077 155.9554 193.1629 166.1421] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5622 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.2346 130.9155 191.1898 141.8195] +/Subtype /Link +/A << /S /GoTo /D (page.89) >> +>> endobj +5623 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [155.6932 118.7543 172.6297 129.6582] +/Subtype /Link +/A << /S /GoTo /D (page.196) >> +>> endobj +5624 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [236.3796 93.9122 248.3347 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.61) >> +>> endobj +5625 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.106 727.5361 370.0425 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.114) >> +>> endobj +5626 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.1585 715.581 372.095 725.7676] +/Subtype /Link +/A << /S /GoTo /D (page.120) >> +>> endobj +5627 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [403.9849 691.6706 420.9214 701.8573] +/Subtype /Link +/A << /S /GoTo /D (page.115) >> +>> endobj +5628 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [399.5614 679.7155 416.4979 689.9021] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5629 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [414.4954 667.7603 431.4319 677.947] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5630 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [420.5824 655.8051 437.5189 665.9918] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5631 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [408.4181 643.85 425.3546 654.0366] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5632 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.2814 631.1775 403.2179 642.0815] +/Subtype /Link +/A << /S /GoTo /D (page.117) >> +>> endobj +5633 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [412.2935 619.9396 429.23 630.1263] +/Subtype /Link +/A << /S /GoTo /D (page.117) >> +>> endobj +5634 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [413.9572 607.2672 430.8937 618.1711] +/Subtype /Link +/A << /S /GoTo /D (page.118) >> +>> endobj +5635 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [390.1568 595.312 407.0933 606.2159] +/Subtype /Link +/A << /S /GoTo /D (page.118) >> +>> endobj +5636 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [409.5338 584.0741 426.4703 594.2608] +/Subtype /Link +/A << /S /GoTo /D (page.118) >> +>> endobj +5637 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 560.1638 386.0624 570.3504] +/Subtype /Link +/A << /S /GoTo /D (page.115) >> +>> endobj +5638 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 536.2535 386.0624 546.4401] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5639 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 512.3431 386.0624 522.5298] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5640 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 488.4328 386.0624 498.6194] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5641 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 464.5224 386.0624 474.7091] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5642 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 440.6121 386.0624 450.7988] +/Subtype /Link +/A << /S /GoTo /D (page.117) >> +>> endobj +5643 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 416.7018 386.0624 426.8884] +/Subtype /Link +/A << /S /GoTo /D (page.117) >> +>> endobj +5644 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 392.7914 386.0624 402.9781] +/Subtype /Link +/A << /S /GoTo /D (page.118) >> +>> endobj +5645 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 368.8811 386.0624 379.0678] +/Subtype /Link +/A << /S /GoTo /D (page.118) >> +>> endobj +5646 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [372.443 356.9259 389.3795 367.1126] +/Subtype /Link +/A << /S /GoTo /D (page.145) >> +>> endobj +5647 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 333.0156 386.0624 343.2022] +/Subtype /Link +/A << /S /GoTo /D (page.118) >> +>> endobj +5577 0 obj << +/D [5575 0 R /XYZ 90 757.9346 null] +>> endobj +5574 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4977 0 obj +[474 0 R /Fit] +endobj +4919 0 obj +[474 0 R /Fit] +endobj +4902 0 obj +[474 0 R /Fit] +endobj +4878 0 obj +[474 0 R /Fit] +endobj +4857 0 obj +[474 0 R /Fit] +endobj +4670 0 obj +[474 0 R /Fit] +endobj +4576 0 obj +[474 0 R /Fit] +endobj +4531 0 obj +[474 0 R /Fit] +endobj +4521 0 obj +[474 0 R /Fit] +endobj +4495 0 obj +[474 0 R /Fit] +endobj +4466 0 obj +[474 0 R /Fit] +endobj +4447 0 obj +[474 0 R /Fit] +endobj +4403 0 obj +[474 0 R /Fit] +endobj +4354 0 obj +[474 0 R /Fit] +endobj +4324 0 obj +[474 0 R /Fit] +endobj +4316 0 obj +[474 0 R /Fit] +endobj +4299 0 obj +[474 0 R /Fit] +endobj +4282 0 obj +[474 0 R /Fit] +endobj +4258 0 obj +[474 0 R /Fit] +endobj +4240 0 obj +[474 0 R /Fit] +endobj +4219 0 obj +[474 0 R /Fit] +endobj +4205 0 obj +[474 0 R /Fit] +endobj +4182 0 obj +[474 0 R /Fit] +endobj +4150 0 obj +[474 0 R /Fit] +endobj +4123 0 obj +[474 0 R /Fit] +endobj +4104 0 obj +[474 0 R /Fit] +endobj +4075 0 obj +[474 0 R /Fit] +endobj +4059 0 obj +[474 0 R /Fit] +endobj +4037 0 obj +[474 0 R /Fit] +endobj +4017 0 obj +[474 0 R /Fit] +endobj +3985 0 obj +[474 0 R /Fit] +endobj +3956 0 obj +[474 0 R /Fit] +endobj +3905 0 obj +[474 0 R /Fit] +endobj +3890 0 obj +[474 0 R /Fit] +endobj +3700 0 obj +[474 0 R /Fit] +endobj +3699 0 obj +[474 0 R /Fit] +endobj +3698 0 obj +[474 0 R /Fit] +endobj +3697 0 obj +[474 0 R /Fit] +endobj +3696 0 obj +[474 0 R /Fit] +endobj +3666 0 obj +[474 0 R /Fit] +endobj +3665 0 obj +[474 0 R /Fit] +endobj +3664 0 obj +[474 0 R /Fit] +endobj +3663 0 obj +[474 0 R /Fit] +endobj +3662 0 obj +[474 0 R /Fit] +endobj +3661 0 obj +[474 0 R /Fit] +endobj +3660 0 obj +[474 0 R /Fit] +endobj +3659 0 obj +[474 0 R /Fit] +endobj +3658 0 obj +[474 0 R /Fit] +endobj +3657 0 obj +[474 0 R /Fit] +endobj +5648 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 +1228 0 obj << +/Length1 1642 +/Length2 9543 +/Length3 532 +/Length 10417 +/Filter /FlateDecode +>> +stream +x陧teT滍%嵒换K朽惁粊倚4竰偦嘆pw 偦OpK0潲孳s讬=縡M鰖熩U华瀅o0(aU 扜梍 u秛G罍ua<:0T t<`",,Jp 吂(I  P唨倐 \陶 祑@貚 L8父i磅墍诨X^< N0Wg 騺饪h PzΑ`W5ˋ\ 饑&糗m潬 6qA@8v08篱sC磫鄛郣@+}儀  n+ E PtA>簚溰 +x佰窿*{餻~若`$嚭"Y鯏UD崁>樰'r右_B]$'-"\潃^萛嵝渴pG@]Y7铝N鈦鎭睃砄桕赇鮓4/奃@滌xqr倫鬼.竱鍱门vwuAf嗐 驸C靝鵷a葒炇> [塞?鱛5鶲魗⺈jUw'']狊gx5m罒e泐 o牋# u蝥痓折騱褗0'鹂b+肛?# +舴奝厇B纙P$`tz父快.` y粆忡倘 +rt勅 彬\铖>囚~国渐qV?Ht偯W彄&<繞鄒<$-p2懷9,湢!馸T讅濫-臝氲狐礋估南軣磼橃Z>?梞貺檃y3NQ飼賹U喨1}&痞9: n瞢PG裍Kb梖年~M巾{K$: 泴0!j燠*2,6^ qL荚B甚>蕞;7!u夳鈎瓃鑟籗7ML極霟h腥NAQ"﹚觖畗)铺套1百 冕釓處敼1W 鐿鐩勥A)hA{嬥鯵+(R GB9sR钠'&粙尌U7H?^O276域%*G彻煵縅堏&JD 跊E鮝宏嵡 +S鷻毵)[*持(AB緄侥壗'#莚RmB[罁驚6媳甇件鰿g楎0仓軇pWb袶譍?N _”C@qR襙P氇祇5M$`C瀐rA駸始6 擄滤飻|J<茺[8J 財{匩'2閝G蝨糹?^o憬4v4^琋恥5觤铔笺Z笰鴆懼s緵6!"B漤,r0A紪g_@?<賫2腥逿m摶攍凿勏柏z&i黏2烢嬡>輟C)籂轊舯樯Q讕甐Q+稇L碑)贫-"[|BG&~﹙刦_琦}苖V鮁瑖坘桭嬏?"胝狒7訯V 翯8=V?B&,'竰谝t#榹*鴈i芶+= 恫忟"籔>覧桎bP2 +姓鍽1j匸b掶N氙钙b骴銷鞌昱隙l衚3-贍豍轎欴 l])H戃f`閺勯繻4V{臞蠈%59肮搖^敖鼭╅ A粸1w篾虙龃娆\爨5 S明繵弴:.+C颇 躾巶@I緫*(諐m(羡琁C烫 佲&-脦嵹湵詥渢诹欠|磗兽c鵽-XZ巢W|c叼觔M+?-QM鉟1/(靷s蜈T>HiN:W鯽祁x髅 +岋qv.=W楙MJ~xa:芊0 螙.鵨rH5曰倅錖l [杛xzO.:讉渴姕El瞂i埾b侟O>8緀a鶜欚滔啙鞱齽o瓮n2>R;*贝璪鯅 8fj鱃,鲢稏T坛v鴕昔 ;Ah;'S獞2銩"TO /瞑艍(,>Q;6d+ +J U莟:朓#仄鶇-姓勷涛辆|;");!^巟 Z +: +v +z'畊D轢1 +璹'lw遌轩h4T)&巓9/体疑=礡T閧讎]驥朵g1:壘u17磭 tРn询!4痖&v氧-僮3哖 镺{逅pㄏX6┹寧曌輩個蓜迷X;G迓x瓪wE`桊4蚖L而 溠锰 $局婏6%S秺F 孵 趧蜍zR0# ]o&KU黚 +[甦銋 樧 闘呃嗍板網睲锍溷瞯#鵢[i5 >嶋榭4 芢*N踂=岱癳モ(珍掌l 瀪竪%迩煂泇湵YO|鰝M$碙ce<揶勤1D:<{y 鳆l)&D貯垃0礍.lF围啕;汌醁%!0夥>{侓?oehqc鲈hB裴棑明鯩Ky呺kg崶彙5 k F霉銂貌膫)犚g砮嵖'Y<竰y$膵8;漌麕&f汞 wL|肈膦詿鵽Cd阍8l;+钀癑oI/ぐ.k霰霱4I;獤e权络q醛錪咋M//邑/玐'-輰&髱聀霏&鰰 $G娓f( +稲m敕狕4W幀貀 +笳]~;开/(32u 裶徔o}B膬_#玅5l钺决UF翶Q殽儆喥Se~輓谇離峚J/萐乩x毉猠*N3,畑逹x盻痃}詙s=t辋攍>绹荭g#ze⿸F暗駧鮁5鶴U鲭恞瑤r&g/i=3h捕z74輜榵鞌 X迸梧畎GU軗竣蓴▉U櫖煚 骃礥'鈝T灔富篜>鸎NI黧痟C%> hC眹5n {6x K+礫2蒦曌赐椧鷵(6|>懂馻\c袽<圭団yx=&S9>蜑兵jT滬宊Xq锰老貰蟄 雭a谯坐豄$騰誻Xn"怨+ 憷熷E*瞥悆勩黧嚧庿t\嵸\颞呾翅!e躗熫嬿 C║c扻莮9mZ + 2粒}奒8z kl73_Y9鶌O[=9屪->?%热裤>&[頹髯.#5<枃gte簭戻肟\eU塋j氺/开濼(zV琁/3蟐$|焴8в&\恛鈋F锬伬s8;q競︿裀S 齒端Mi讋韊S呃pal跉cB蓒,se鑹瀼o睍呮Z貁8<0颸xg +(處陿i鰳$屘茩63囔!C使噓鍴9藦pTv愑牽* :$/6R謖 礡Z3內肚狋亂良a蓫"/嵉N捈,.*/庱"W4歰2癀踔e -'0髧{俏骎嫜蜁n/靆lW峖櫅藮(堵檄 竈4;囅(窄鑟:溵2曭鍂眧q]x%`吡廨/{5昌%釜_"q蓇蘃:n&f!c璧M祜S]!鎒K嬤6 1棑厃薲i#簡覛燧5驻鞝tr酠s隘)邤銕 <鼵0孍5_帊r斱R寣蔠Q笙P(5\L败uEU3⺗S擏NUPY,礠衂U|,=癯_?6哿恴 WFXR帏J[﨧^{~|z匣_慨江穝2寙e湾0_g覉n坪`j蓁Bq>宍 7礅'8KG疡Lx耬魜[H9 6汞涏$L8/Q&壮r血鴅$s鉐誹/紸:`P&bT韮膋镣9i慘急耻~C菌Vw邸 钿茺鏁魷褪=斴"c{.)2G圫=w$絎俣#f枵OOfZ^(G輐颔qd$耰龙Y蜹碉輨h&Y!倖@昈hC憓譌哝tz^O k|扉费v!w蕙}坓昈笚鵸Ti︺[魳痥&&鎙'@喹s8嬅塼+橆N緬$棺3 7濓墟徲/?a棪 Z綇券龢}DUo穼Pr閾瘧}?ˉr晟乙╨ 送)$睞E癿豤紶OH矟M2l 6)氙瀸敱"鶪,^皁4皗脻"C`孏矔[ 锅诂- +m嬒z`㧟鍲緵W?劓t8Fd嘲Q缓粿#鬍ru he_H僬硢(aa弒 G俖=am#;竭リ疵䲣${<\( `陷櫽曠~坾O蠾>u<р 噡櫀`iz鍌xL绂n蟃疊吲G⒓4呃di虤@祲灴:熳z_{"t奺}]覔颲螐-茝  佷犴酡飞 z脡28p缘霧*沭臀礼/S嵞偈z*褌p窆%.懖c-燸趕I=蜺=I詀3嗪 洨},uH._崨熱樤q_Crr茏纯&脿觓櫷檉稣緹X獭翞{晹Tj>t%Hw哹 +@绛L&菌 1b攰JgK.溤K璸U╦RHM枩濼鰊鷰螶隗+}KM2榊楔D悗-觚騥巁膏".S厾>賨婒甌R穹諒S偈.鯠&GOgB 孏枡9`伃泩雁洬'[|$攄@餹y陚(盐吃聧区W灱m彎;n蹶%蕕LKM_n蒧 p铒q"b~鉭2P罰弚'佉傞^9VzMr. w碶3摩軈梶J蘼跪壃8)lca檓c1裠調撯伫 煇xm頚I6Wb薐眀 賬淬p恒-炋+;m +iK歰瑹Jb1|设@皚vP嚃繛敫,鱹3<) <+p0Y勼bB@棗(pH绋頹k 怲,b#L]Q萐.3o镆M饴5朕+z盕虣}鵌玚鳰7审`7鲞W +鄄A5Z>:羙∴E蓖/o}诫FLO侯&~櫆z餁9)噦穿60嗱畠H$#鍴啣I3(噂OP熓(腻5C.藮轼d鳲}燁x^NE螓 +W摎醣藜錨_﨑o爸瀩 ,q8$<妀f晪Xm`嚠睗gr墴臓];?.鲈Z○wl'杘qM暖<訯呥狠'YEIv#4| 諄糫'騘S欪瓖0b;;遯p3聵釚 /赢& =瘂屙垳4耩7!\H^.斥苫^鸑ㄅ#揶槃簿癇F3鯐-壺9鷊k. 鸫>靆J濏=鍢Z;⒐!,N朶H- 潮$ī_胕蒝圃嫱笤印晱誒`O盱&A擙~糊S襁!撺R獓Pk巸``歃)<颣謨z\砈>扫Y盅磺嗯㏎?u!c斳>p8戱Z{ /跊醸苣渳臕嗣掐怊娝踜I;伡a瘇.v1遟n趆E`z黺z栈<蠟粖X`!嗉暑x鯝僐l剌h欶~腩&号厩6 +晰霛B0氺蠍籫顸;蟗r忤 鋾?鵽&\jズ碑XIb4埑{咍裓E讆顊V~(Y[3/%C{\"~B @敹逻)猋鈭榩,T隮剥泰剹蔓vDq>hu镖傦鑌轘槄霩汳yQ輔劬購/躊嵮(里j[秦靤y'羙@沓y4]n鞉雳惏矓(哴燜u<劰姴c塣"j\ R朮"7$0拾杨,軹 觗趗2*_"蜑_K-栙闠 骮祔錇j`孾n~瑗緕~XK`8p`荸芔韵`',+2竳y5茉珔稚-帄餏綨tM5辒嶒疋屇宷蠸l矺轷錭Vn 弲鲒U騘.#缉璾cr满4 鋘很<匩〖<5耗*臯償B怏碣w 钬>1j$当@e振M朓妱Ж痲e檴8v#(祣)tO ?KV鏅曭{溝 cLt v湞-咲涱x.d奔滟wl霅74H]軅Om艡圅 + 蹢暱蚗K 璺uv鼭粩d浰x +坓雽k橢S*4+d痧黸┏鈟粏怔蹚惴;ef乚應>WhY汃3py汒冡M坑坓捱渆[X灲 +現#蚫[B靺 /m袂0耵[袈M/x簯箝W$)蛠瀪炳l`Tse&綏9戴gC澻炯>攦 礛0筜谱笓偛櫡;N8鐼IJs( (tfL咵hK D蛰L烯鸿戛S O僄%D:犎N遇o禃罶*CO齘翕,紮pV屼/U诇ㄟ宅Q墁飐镍軏 颊3妔6碔縥w蘀逖v愍#靁9箶源饦<\1矓#}sHP=p潻游蟅餮'繥 hZ!麏蠾k爀$嘟@巊p4I炚Y靂锓W遭A;經b8Lb撄W剾嬅1U'醋随/j橤毭w,x%784/T>@歋殩@n苨([}X乶n僧窄犾宯g崣薊>褷#*扢渓譌(4穖义NG乚罵痸&'H l淨厞肠⑤I=炰m[t邷埗L=燹[ 㖞tP!榱#g齀殱泥)酥9#7#呵&_鸲繪C瘚阋2漁I诖痔#>荰顧9貔,錙_出磁 9婥賍Y-]鼽H5f'喜蝆i釠,?@图謏c璔楼荪賯游挅y軡"嫐摒0>-怿:O峐耶F$H 璡A憑汩隗/萔Jg\稏(釱逛儏jG鳈戴獻剕'髠/S>_匣洐怽蒵C單崛l陨S6 ,筠窻查#2<-NW宱Mr^鍀航岅mPI嫔U孮"~G或}槕鱡憅儝q澉垌`S凶諽YE擁U髕厃 G醂椉\k繂葔惝琽譋inY,!駓骵X炎r/koM0Ga狪E2X粩 +AM,p}jo- +?J5窷梘验i璫%葄cA==rO+n囑嫬m鳗匀k宭X曔e簰燜=六`瘱E}帣{襕迵<織銐;$鉕搓瓻盷GMk]輣厜1P箄款N)饱诃}堯ui齿簶[釅尔℃+賸漂(苚涱匙E蚟彸 +>-$0釻(.臟裃燈a袁_G咹%0J愿j送+釫祬*I饇4钏X2J秚c髡膳8胈瓏囼39s?\{<)鎑鷟cL训$┎$挻馠趫縈匨牐榤 %镙=os杌糶/鈈╪~RM硽3貤跟駎儮隭,K潚Y6溣u组嬿曠糎S芺V陸をB!6r媲d濡躕64c 誩 'i鬱-嗴谞辋j吿槎-瀠铵贮2欫迵洯3影M4沁+XiI6绰:褻 瑨巷酁9c/`@L瓎蒍豅#66举吝tg@v滜|C穏遅k濭騸.=j栳 5/栏5#4a#b噹箄39啓勦c醾{Jn-v,~Y抷^/^[卆t餋燍觕;fD{赿(鶜m愽辣{偌髝涖謹zb瑩1鯉3偩SA鲋椋2>嶸羐3陸( ゼ夃 斥鱴,簱e舢径k邩j鱜苀Q>Pa7溩孳5岢Se櫭l)6怫亿屓騜\級hッN莍憼 厥W藇搏炅螆F訨堁H喺惭 O宦qˇ竺J5l.4 nOL!卒'絏宷l?Lj/Ab讈榝"I〣钵[.奜}h職Q':,宔沛圮垿}~3漝 瞥9铟柣 "{,i鴕會v跻B0=n柢%*&晊╔v6紭9|q厭掫4DデE匃8∧飌ㄕ篇DФxJ(8p0=唤V 矛'宙vo鰹 橹k8c\9ォ. 氲恚s斥閥啱坵}覴秺qY2国Mm8惙I錄2塽骅漓V )!~T徫+颙H霫l紊F緄>~[鹳W婢潻D慣h啥z瘚/bC#饇枣楆6ウ艞O+彻~*汴h:A庈鰞,縹|~}盼;+螟u.pd"瞏嘔遃騧{6濯倆睽伭N,鬣 惍#倽{7崱氬Wt5壇脛;捃塴2薾mx!蛑MF熉希矱葏 $n9協娻yca#1菦塽顩 鶹t漖 +斦髄軄髠9佻+f尚u#鶴c啢O曈穠d蘶辽.捲< CK婻3侌銜訊 ブ;w"扑迧蟅V| #漑?鼷傋瘀|肢,d:羪蟁膵 歲臞钗芷雠]o艝耆筆朕)=y醀'_踠稥a忧嗀暴J師'V菀I嬈韝+萢{)懿般t7眫<罆I6綐_榮陆颩鲐i鑍 :2 翷*僎8L;萑EK蔑/弎 灘l尘w@" ,鐇蓍o臷;_(祚@: 0莸l瓦镤荗轈}C吜涭焐←.昖U矽嵞h鲇u[镄&惿 +煍拣kFx畳2&?6}欕盾W鯟Yl.揶醉NU外y夳e硲靰:肶`5;-齡Wc /.裑贠x征防鴫遾񋃔eyUG嶿爻㎜赀泗k]wkP^(夭昉r8.x酎晨h鷊 8朗4S~ +(4 燫1E〢t;|軸;匧饄盵猖㈨禃0推z?6U憗,菛诽,^7紴2R8?5玏靾靘及(紽鷨Q姷4曰Js1 3j斷SZ徻L┙dJ]<旞U7f\消取Bt鼯!G6輣L#≠5F%Ar+轮K欳施;鴻$~彚蔼琕;F質4R謩m場F尀畮:麍丕杤:d銨t黠7瑤諛 &z鹄橃{鴍>︼`睵^并軐鹃C絃贅蒺旵;b昵Uj-<{Y憾贵$,>魕米処Y昵t=勔TB灴-U峞 獢my4 hD1糴-}硚苁皎崷陵霨-z覛 6煸彳,蘜`步愨5冎窏qA;幫沍愋i帯K徴吇浜&j蝷袜j髁 m敘8W瘷TD{艑S摉礒B鎁 wt汁 稻47艒慚w 桄cES+择 *4劥樃d蠻'?曗 8朷 -孉殽n蠃F噚鸂,开[瓽盱)_Uq獒Z/p珯'構癡C~膛绾g5毣潴熰 G聹乸G{玡ndstream +endobj +1229 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 5648 0 R +/FirstChar 2 +/LastChar 122 +/Widths 5649 0 R +/BaseFont /NUDUEK+NimbusRomNo9L-MediItal +/FontDescriptor 1227 0 R +>> endobj +1227 0 obj << +/Ascent 688 +/CapHeight 688 +/Descent -209 +/FontName /NUDUEK+NimbusRomNo9L-MediItal +/ItalicAngle -15.3 +/StemV 120 +/XHeight 462 +/FontBBox [-200 -324 996 964] +/Flags 4 +/CharSet (/fi/zero/one/two/three/six/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/z) +/FontFile 1228 0 R +>> endobj +5649 0 obj +[556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 500 500 0 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 500 0 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 0 389 389 278 556 444 0 0 0 389 ] +endobj +1171 0 obj << +/Length1 1647 +/Length2 16082 +/Length3 532 +/Length 16971 +/Filter /FlateDecode +>> +stream +x诂禼x%\-踲Vl鄱m踲嵌m砪跱:鲰鼷无<箸荦c璯U*妯Y"#RP472撤s萗:+氽寿s尚)櫄籎㧏l0dd翹.桍v".uS埄1滥排C秝餿4穚P*㏒研玄楀戠 #-晚笝谪;貧诠T65竂,mL买 +殥rJq9U俯潻舆&\峫,2柶桅T3{'涂c{;Zs% 08;[ 306u8:賈:; 皌;诠{睄?涃 '笨d +鑫.纹N.縔D宁]叀?節-{晨&銎呆//蚠耘幸郻赆騉.#S墺硟崱邕,U啱偿濝U@ p257t21uv﨣髼麩垸>[鲉6姸椬謄殁ljcF媚7П诉苕杤0 虌=夞遶W儡L濥uA 者" M祉l<&0 r.S(颰@G潺'阻{唧s当3待;3繈菩饂d,C'? 且jhki泫 +揸q䎱)硖*D悄F霄o偿硺〾偉嫳捞墟镥甹gb阣cig鶺蒿 F啯XX[埤劭!S;廾_蔺兏尋牏8a埝薡犸T辅x:⺈&uY{<麮%$d穰cb1s0䙌#3G1Y中派犕H先:辋7Q;c{鍴倥形滹椠п刎丈榀;忬仼﹪1腾步1O圲zV咾=f奕攬鯜鐷–Y揓qa@瓆z.W暳G](} 鱓囩夜苗跹X Eou/ U!y蚎僞|茀z岟廷;Z艳敘抆﨤酝3U塠a閾偀qZcA(嘻 +唙+40?!,y笉E瓕 銶攒滳▽桾N2觼壳EZcs挖J_o矞)暢霮賺妱v囄 B.sぐ3/6殈m1韜┰ Qj勞恮`D\疫(j/]^e[_)抲mp態Bhy蹅檋攭 蟋3M脵訿}諹^褊绵氻琻!\xt*JC>苞膖gu棕+┻Z返WC祘Q89X嶽批7礎脩LX檗补:y莦释騱豢(辩 観4O髳~瓳瓐qjT*篺玕cB濕.蠝 厩:0菄鼍y$穳ご&蹄?1r瓦韋氌8暬昄M裞K>/2u磫e7 M㑳鈪v筅Ad(戙8饟A;!蔙:朏Z纆氙琋醯嚑浏亂8A,深1⊙J=lH?佾X?T]鐝d2Mzz仰~ 諷馶 鱘-耶爖襺近夆2桠\?s鰝_N酺BR鎩踅舆X$鍒剘>e崍dR7]"+=嶺8?$7舜谤F +S紾愾蝼欝空沇p輼洦撎 /={C-捫C⒏懲趷9 +矐鬶<嗎N,锄,藍鈨(n<-仂"寽詨鱥f9i^G#e@p%怣浫({櫋揍烸o遻dy*Vq杆I(h1&n琈aC{+鱶.繗bTT|i敽9槣碎嬪J<諴咮Z}§※ 勱$粞4f烺D9\<頖摴\韹敍~{Q宜顦/5It*馇蟍*匽礇訵漲( s9-渦M8! k滌%*庍@痯}牖牁 2鳎臫廿泹倊YGx搅湕^菹Jh$瑙M=秴罌8@竂锧1蟅穄Oh臡#i+麼(檖 恤r燃溕XqF鷋=YY娿H鐥修!攽L産C&O誳讅h*绔琈T鮪 :肺綏;づ*TA Ec) +僲鵿h宻脦M鼿魃癋+P#;=E@%篝胭珰;)h:я菖J蜨{P7乤|zB硺鍣宒{)g韍壉qt隟叧俕 \閆 頩饷-(疮ずYe祃a巓埝 呲i杂臨膝鳥+8!種秏L;c%9玑乭Τm匄榨h+ f洨f羇塖歶9fP獢T膘J赩籬摵L0崗zh粭5勑*鎩瞿窬埩派'Z酚{憽h鬰\,5O鈀:紩緽F@釆曗}5閫崨ヂ]霝埓*7鰡w@秃3侲慦m鎲囄dK炡乽鞿2桾W誎佖7 ;毋缘篡f$?拣;n3zA趥@+谆っ6)軺硃敁$覕灯{倓;潀U^i鸤/愹郕#貹Xv-u寭4詏(荩擂甶E琵+柧紦@墀8珱z癇蟒0f錖8厳yV +m旽糇;V訔9囆)/脗硘f謍褉w,N輈,毅賤餲a!3b@63Y=%餒柦普2)缣07,]Q鐛氼3&L_Z 壭,軒?)R娂莮樐頀蚗-{━##U6 {]K^葠窌i砶;C岀z議m\O稷s 6k魓%纐=b~,堙'b舆rHb铛丱偭,萺堜紶a&$绘3磻2ov5;%宗餏#x哿$吀<迢 b僔HL~ 翅翌邀g樟 籴\o4I)髆)<[x{0号撙\譼灷!B'{輼 %裎聅7&妐莁co昩+`fG;Yf2F鳻A鰲釷?秅n!龑Zi嫫Pj$8鴄ゝi壍 詂緊'Z@{扸In!颎屢夘罐8铞踲M\Ns袦躊/魹呱/鱌鯗Ka;*F旙Y){菛衈lt}段}凋O摍.yn9~/圖w&襆駕縐孚e 驽6碸哰E*zd怙_頨BW?譳龇3/)wq餌_媘}^Z 煉媶閫- 玃軕<寻%Gqq.魹"綟嗙峩 ?t賐齭愊黎"> 啝\r惶乚纽-碭Q粷?橍IO,{咡晨HI鐈鉡 x?p農n7l{c倩6K!'纖脱堗>迹Hx睋a饂耑.鷐"緪5t磭凰.誢涋纯式}S颯璝t+葭 tjD)Y闷 ?萌 襍vA;0帷褛綑U傑3N体(譸e N{I猋-×A%RE冬堛褮粉/9国8~rZ}邡桱秝瓔謚⒍驤AMダ*镙n* +堳阍=00=F>(詝6躚佉!碽傋 Dou,拧$WV&3袹;譌狏麿簰刧鄤峙_k虫%~斃5%j+'3'揪茄r8焊 )帥堋\0<塗0弌ru +N)纘く.跤T@诛G虢I#竓曬a譓貔 擢鞀% H l?@饂[U鲽 霔V^5 昮`纕寁犎神+4D蟓h虮辉秪;憄(雦玵8r薹枩煰QI履+*捂 S钣 ;+潨a7(域兗E鵫 + xw﨓涐凳F&^,俨殐xhb讫\ 玁31@*杹%@鄭5嘄摩撈.ラbJ陃奪c泡N儖逴尥f56c9〡诨銹 1&昤麭繁馯x閰$/姮pw脞J;謯堳iz1nj>川hF沴EK圲a甮篾吋F2\a7b#跠 c8QUGol FU墵2卋0漘仟N5vH=蛑P驝_w{銰偢讖F!3鷎碴U﹨奍:!闒U@>蹒PZ辌銂纃蟍^0[臨隍{{薢c埨&F忂趵髗捳砥蛻vJ囃;屁譭%0玊跮適`7擕挣喁長5镍鲈%t 孤4擎C_润p魽&珖9垍僻孧寁笃愪7闦婆闶F梲髼芀欁刟+p蛳挱礌8=l扺LiXt岷*{唴轓sSov$Q,J 刁侣峎Qn-F裝魶彽E)蚑.m=撞 忲~'谤/鶃藥槟誜姝 皶 "佰寙 +弰BJ栻骯2{e7痙峈|6廂-H-堂<佌b妏6蠷3擸明⿸^?3/ ZA掦唡鮌秬慊V韭苤艛X两蜚黕黺;脹]砎+EH矞禮貢 哩_ ~e1Z5吿扦蒊oXr紪犙楐:崉4G2皑鬨t;雑3 Ua枼 D 6,由9##H^e螓,哇酖a聰訖 {*攁>S|1I筲2>n┮觘肳xJ涷i''O昨n齃崷ds畏^;曶哉`*菷嬖F嗈:緰+<|H緍y跅dU~49vb 搵y2E壡潷攐[罱棝jtuj柈殈桭掌R嗪彂潾浪`很忐劺B6阽5怹.7毫轜/磡69祓緣舥硑盵se[*zw琑龤KD殅喖4○;宖X陙ⅲ%QE簸w-f*!廬葲7污QJ6ae9,珬廍lA;騡蘎R肥&|wP莅?-v⺮灇ZCLM?倳QC孌}w1" v犝NR瞡tM; ]Xく瑂>在㏕6絙x笩?S劥f澏牕J?J潢簕Q琯熛pY]ea耼O啯蓦u@aR;E[*嗳cgt e熄嵡檊kNM豍T盰呖 w8,T%d矫扖茰久W 燂嶨IB义<懯rM+(2 宩幋U 篙 h%4@畫x3韲叚慱w # .?瘎杶&觎,N(糲霵>W柂琊祌<哩9鑊J枑貔螱!腌K蛥*M荑 f Q闏B疨隩:譁ah g少f%Fnb騳q;@肾稒(樘8覢?A徻oz饨迧 界af怣凞聢2IJ$诛L鎝!?盬v偁硚i$泇嘫$梍龖+鋈劲熅 +酏繂坿4gr4e屨幙s薉Q]鴶V蓈 +&E癐崗頓lij﹦徾VU妩\鉂*硥r桗澕o蠝狵晪m葜你' Ni覌厎}奾eRcu肩厼\ (燩啋砎 仮z咄qZK评艙仛派 銶?%-枾駅筟 铉LJI粦n{`轲珊~3冾-鰓q-8;哉k蘍'N#6l!!c%1G鰨钵b嫖&榰濷 #3a ,o孙2)k翙犜o改 O╋━鹏呋Zd咈mbT瓡X‰; +_刳缷箂瑾3珤B$x`邝顦篼+_邒b^呥u猹G/篋JZバTH爒t|hiЦ纑涗Vる]嫀zk评/午~0軋鍻q鵈艐雖k蓞YO柾2@Ba吉*荿.閴敤rnC^诓r怇^;澠*Lk#c堋翋芮8=?OH逃sE趎ト瓛栥ZΒ蠮掬s竷韐d)I涵OfV汙际T繦l嶥睤k顽/唥禽;昛 嫝氻W0"[姶6O16cV篏坫氽5~?K閬">r鉨/PXU鄨説n╣?S(*噛u^ UH 歮I垘 桱 =^<9後#B1y>竆Qj;so何叻6抲M$7e哅0GY僶>晶 汍繬@f>&纀p磠珂载SF$2珍崿恣譖wYHAYC◥w柵侎~g *媀寃劜bA+^6B%.礕販餼檣&M鏴婲?+{+#r逪驱67MS 喣煈'谡Z))䙌蟃9(ev#`z佇sP=嫄蒢(j}'縃iZ/蟸7p交s嵏]℃>顫T40SQ香! 6蔽罠閬P8,霕'▕d&~':诛霃骓C鞦飜 !鬽溲咗s邅gKh贱x﨔t40#鮳 +嵫&聗 吰B>D#潮'V晊曃k ,ê*§涳葞(%A勛m7釧u蘨X溾I.鈠L5f忈UU愠z房 旭勏蠊稺词5皦燕辧j憁筱轒禘ㄝ汍絻\0樭壢K\津>祲╇5暊冬塗QLo搖c5嫌咍u-箌杴;v-永6?1翩﨟 q陁妓O喥3榝黬簹粚珇p峳S疠MH0;~)注鑑!>〩>H匛瑌.獆狖輌 當& z鶮C4O靃o(尝#寲WB縢襨-( 萧9坊I浼x$2婴柛*x饽Js畧ⅴ綶?b嶷U(擇些芗GI8绸饆E孷艤^k眆∩硂PeP畝M3 +,,冴嫠佪 T順<;墸烃]FJ$Nf亁}窊絒m~鮴邂畺%o天H^诡摏怊陴&翆q軁K&H 龛鴷x7fK絳趒骳/O%鋋|8v!F,"'鴗2槩礎A稆<&N敏徠&{;v!讬'@7 +.i賤柁{秉X廩o榮孴省w9萎*-爿烏 l+覿嗹夥脄鰊檖幰/洕7⑹鎩 め8稜7樀u浐a沔_ b@hv/瑹溍V賒G+]油裐0汞頺'絁骏舝+諉萛/噚x1硱6]祤o~ +UyOj骐塇e諏ws昼琲齜- e漱zq_帠曻 C+f]9)叨釼宎bqtfEg茅蘾@耮枖>-(R蚵齔白e{ =q q裝Z瓸釤,m鳖XX,Nt鬻$/傁 6i霦1%舐蘳扅0惝s嘗豾&9躨L蚔CN蛕x綹竺槾< $稈$d≡灃潘鎷ZE "z鬠 +F芲軙 鲘=WE{%韐味*碋覫鵴膬т;屴so粻 跩B(8 +&〤q垟K%R尗;亖遗L({墵?暳}ヮ譁}<贾u-:懬v篈[9Ew慚(鶁HX)I& 3"牲饢紺['x 糌架缂矼"@r 峼栱_蓐?羋份2陎 e +;秳9}骍慒囁)奩u"t#傾坚oMa{v`Z疅趯b铪贻繶7蹹?薿P*遲g塤釽伨煩薊莠 DyHXW魥%7澐韥&閴tvq開9>跗 1 . @脠唱瓒枤攁?ayF>v朹yR芴螹#vs闺艭I/$@瘑鯙*蝬鹽銒`X啎]d}葿z瀪)'僱鼼笡j姵TQ踟0 許4J'b=P<@Za:坯h63Y篥擋Kb垩|鞉P请u|髋跀慫񥥊)n垅"9揅W緆瘫鏔X,|{胫I/錇c㑇鳦5鴠麤曇俸芋 +趨w6栀楤2晆飫怆睱:f嫰[圚梬革I,i谎賻Cw~刨蝒 +祬搞KE禭蔴wg楝茙扥p$襃'x镂鯫搏=終5加|逽4T89|景%X幷1"玗哕x襃櫣嶗>+陌盥[滜jN[啿 痼)j:嗮魶税kg!铺琉D[C鎌渼骃秪陓>隙hl%姾3[V棅!E挦T.=[靾P鲔D儯9鞸哕滲Oap牻怸苃0烢ng堏Q珱盺q鎂2絞鵵╭*Y誁胢鹼{半吀4}貌龙&綵7芉 }SP 赝W@E飤z蓎djn绡秺,Vg=k6);墨]禉}余霸桱'nF剑dT-詁Y 瑯摖墊A斓 层鋱n(/勵Tuhgb葍嶈b`r2?餏xI F<磡锤46楨o[g8q蓻9eN 仝'宅犘磦IB1W|穛,位鏼濋3&吋I聻R枉;$睓煁齽餫+vk怳=uz^裉\皪孟$+珻=跿?墉5|渴婮Ss|苅考m唧cB揗椇L[D瀻#1&θ.@动DK.滹矶{6娃鹸A#oJ嚐閁+阩芵Aj鎮榢%湞}*3}羔闩!氆`"&襫白硐癗`ニ条a%m凡0 矻Ж楛Hz柟$旳,DC盰qB杯蝾 3悀烊佄/諉}浐竍姢R&8曾纚哜/;>廕背1缉+嚸(<LbG撄>乫紬ME!7罃骙,[緘£8茵▽劆鰠陆王多F W灘2"狗u  ~膴儺豮#y K_M驞y煰枡Mu冟鐴B邹;BZ>G烔艂黅1h8瓐詹誸;k驣蔎熞7Q[0!9|I籙Tm嚥,荫灋陚宑来hH陑$奓p哰鄢咡n殺焢 筳=哲 劑措骚o汉$F虧-L篾婄足t^Xq,J [樃:䶮pVs掃蠖殲'_gn輁$メ $禎Y乼z琢泶Xn卉]傋瑴皹樃w傽#2,s@N|侲'OT璇頲%MM3巜8爡韡釀 +因S- 道J +摘**#遗i鹱^J'&熪}G鍨功R瘪3鳑剸倫-8橜}嗎N!忍0.佲"┚b飬by緽宧9y惊懤; f&0=)>!諡泍W,!VsFb醹 pK>阗&憑;^2k^荋e鲘$割稱 % i礐鴞髻翗巴镵滖 ?騥<狀燊>擽2-4矬7萪[煏変Ii腍彺偁侕D~/O缘瑮 巡俱 +}Lk鑢<騜d斷絈E[3脰空`鳻Y>涠+W橭Q3n魂珴3椊a膒X劽L^灖 7胶91c +>鵯(飛綦4!駝zQ耮£赝M蜱騇LJg 狄JV鈣bD"骉mJ絽鍽_%軓槜勈=5髷,⒒<4ej惨CC'黰-2z$坄逘 馶FB;6=鑛埤J=侐"眓>嫂乏jW\蔻铤昡@/郿坣%pH^1 pH蕗飩s^诿%h;湩A%G8 躓罀斲求瓖擄都グ旧>;灤攔 +菙d梂,g,t俯看薏鞎46愳d&耟fVB及┄)wI3欜4;沂>琱燛^uvxYsh2 }G2Y戫T嚉建舣潸讙j~扠莌n僖搊nh+n询|俳や,サdd塥va蚶^a+琐詜嵴掓乬XI姈E訠阼1┙劻鬲蚣Si{&AE*%mS鋂!湏摍 C穮?`奕蕻G3]o媬镢$;胯5醵!9#';!藆rk2k:h7 ︷tE 0Д羝恤佥辺嚲: "釤J#+]聢6[)&磜:厞伜宰0愦)C熔壓吣KN[鐎莂侂M鄄?_孋雯X鋺x^\钮彆娷>堟阊溇=捋[T哋;闽絆橓湛颀卢祉袗氩坾J嬙 `缍`鯟"#6/8vK=(,蝈祜茷F騆揥xIA(搉項 f虒Jy3N'xuD脀脚o7,e哏+儓郡9湕騙D乾慛e夑j0蜶:攇2刬/姑&鰇D誢K騆 e儿菿<S殶黰捾籃c鄝枔囬 ㄆa罌¤鷐31泛q\o簿/'>稦1薀5)@k绶更9w2?.~{紀汱熟晭+s祉遑冕$靲旊.菬)旓猱!\ 遊佯~ 悧挟n<$A2帗=雹 驩Y"br=仌X疐升+}6擏轟蔵蠿暂襺Oy|鎧叅/柄$'慭y馦7md愗鉄掮塆Q糢n璨臎Y哵鰿!薰绩1mC2{彣*匞7磧徠仑駜櫄芗j .?bz/{癟檻o絓II|0’册庳TlWm9%鏍Pw-7~尒N.涀l%~赝镕箴0Z槌燊騹潻埠覹甆蔋仈|狭1O黶_i偊{魂黗4うLM3+1^"CuXR鲙`擙zYU币y嫾U2還怤羛$4z鈟呚瓧d默墸\g珖_刀3M>9?5*{翱|談,X(囇Ⅺ3兀旽l幛,v贼Kz +竽A"紡璸票&-乳礠愿{瀭\嗍&8Y晖倎M膖+譍 覞淞^(v葳锴x2!摜Wz+v"D駭n黖盲暡p8啙o懳硪扒kz傏灣?皖愒⺶];y筡孌'X瞍\暜犦峙pp鏩dCti谆壐a4屝($旽-䦟硿{E螻1ad/$1}墄 诩蹯↙燨Bd`馷L5[澞Id憁弲an膖#鄳Q荶肒f誚)=na僒鱛 g!p荘r#'咳\锋揹x5/B鋡4絞青#IJ6'姄=蚈觽感 =c{ 0a皃9z灌}磵S6< H椴0dX哶筫9袬孙:'唑憍27礜揆濈P_鷸<6%EXIiK汸)Ux,M?<3镻q俲d 蜲姽星u懬i US跷疷V紁鲍擪):ㄞr}):QW 禩r‖兲玆&)0$驦髾謵艚抒!0椪鈲ym v楄犃榪改]鴼xi2銳癥拌|0M萴D3J<I莗赊㖞 b'T}1渨博)/酙零M 弾梊;魺(-.!譠 +.zo暤斝襢妶璦 埏嘲腆R瀦K 檵a'! v 銨Q睼寽ew寕竹"犠&腓巶u"6堞_D$8勜#O┹ew^%PO`QI6倔cfS 顓妭毧栫珑做髜v樧踝L十@M=岮4毝穹2独NF!-y$<穷卼洓睲-4孤迎甪y?眥瘵敡|]út 錿m + sBW劻軜顖$(m虤M俶d/塴鳇嘂[>濲褩楣慧\ 2m瀾 +`{r鞀蛓賩y鶆Q7扤伍_&I蛷Wu眨&-N7诟艒 姘梬8KCg 羢鑶f婾剄w"Y鴻築詊<宽-/D2J?s#$裴皒盍7R樭纀a蕏' 眲3T艊羋z>t黊吏alY(<,埸倚)|將膵氱g蜠 +{.絚琀鹘傈 摎忸风>j輁b喘$Q瞁 I lW噗J猩翼a鸓 緾è[鷬醘k靸揩?貂e奠%;蝥H杏V桡沰t"4!檚稚/椃嵽j/sCR'2グ棹 鬌胿Q恉舠贻J闚x6竼?釳_ h瀸88I婀痑捼蒝Ols狿箲稘聚呠 逇$俧I襯\5藶FP6灊榪R s狴Im蔊亲)|4>1褠 +森?抪p箂=槏葙鲖h權奋銍{(渒坡.謨d涨箜授S琵V&0鐙U決)郊n楇炌鲄("鯗4zS漧壢拊萙夭纎絷AO舂ぬ膅{y︸蟧 %芶G橠2旔1d2带釨Fz(黀 魶臓'>軩>徹篼鲔j>ty楲脂# 陋藲瑌蘴H翹I鐡vQ涄wn髮g4D擁帲tB勅 ;钅⒋崂 [慃撻9俹吳Yイ茅惷~锣玙诎SdYO +k);d缇_凙[},/$3'E+偤雍峛萾茿32虸b潞)ˊ6④ 郢{賙?PUN雜螦2蘰檼 0r焍颤糑;侦氙%糞蒛O意~-lN起輸⒏Y厡"抦犽偳焩"乚4U婴cn0x嗂坏郸3u杆逳-挱*鹹螑C\嫽Z閕+嬋幇-n苼ys刃oX陫}i扭 )D猄u挙Ob 晠JNB诼堼L[貦xA砡跺丟洃刡 ) :8╯H>嘨'4I>.髛U酫凚C枹;滚sqp鵖#a詁;GB 悪:mH]}7輻c#5瓁=Tv.藫纺CK^b埃Lz千:u x篙遅侲镆C蠑 趋(u湔鎐鑰勡,東\74=w"擹紇①"ゅ>jy n}/%o鳩;斦℉f潂1-!踀3怢雰綳冞圃訿{!t([涙孅`C裯嫯(yF<;豔棰:V/0R虛.絪艋%"=葳- ?p澟鉃囖髐鰤m扜~7鹀僑0㎞p_數,M槶Q3&箚DC樗$歷殷> 闝'診擤K璽^玘擳甴咯愇刓骦鯱,;+)L=玎餋笈氇叟苙q予橷j鳽䎱鑆鋬駡d(_u%L<%O誐Z奾f⒛4X>~1拀x蘇{ 鞢軫X偹9裙蜃Ma躆敜Th^C晃4{Zo-凱琴诜種顟育*絩椿|(靜r碿暧昲 m: + 迻 >QU玃jP莇乖3*?sXk胰早ZE3充権!t栧還淪X玫徴莄姅師陥fP2羒q)狩鵻鵳儢p_G缡聑贄#\)嶑Y;蕃鎟谾蟏澘鉱蓀~废沱裮+鏌2龆L袶'B剶XQs劧牷孓鰴汗/翅C |V*l醙趯佊讥悝V彑挜kw2 姁G:齋9喢_M呣癢逬薗烛镈]軓R奂蒙/~﨨 聐/棯Z怨豧濴髙~炘K)Dh8#5忎0噅^*#耾Ju澬鈭n瑹"";莺葬"V /t"$蠽=毚螩鼃牊徴鯦NGP@F赺¨X#堼Y旂裑伴髑溲塤<飓% >1Q预ⅸ沧昋~K鰧鯅篝-⿶畻 -笹齚灼噼八h怆K鄣\p穲歛4LO6藕朤迨雬 6豧磽玸礩线x%N;菺)ポ裮K脳鈦2绩{^輚}扭{e +X_枮昤墣?杆'淙汀i燫铯_3阺t実 +|*腛淺*N/ec鬝眕\Q0?憴iB樼b&蓲塵>x魃c.烑30窻f鶃N訷壖%8俋鱚 V/3p疫h炡熒 齵3#) sB鸰簺韠$蟒N{2烼v骚謯:6骆;}医撱(ч7剴7^>涙:鬣缫扠~Bm哆举|鵦5嬇O#酴另銲,t*Z颒昙t8/却氖K灛摐$願就弯褿畺頻<顦r]攐頢G瘍據4~z郄%6醘溗"澏浊> endobj +1170 0 obj << +/Ascent 668 +/CapHeight 668 +/Descent -193 +/FontName /GLIAQG+NimbusRomNo9L-ReguItal +/ItalicAngle -15.5 +/StemV 78 +/XHeight 441 +/FontBBox [-169 -270 1010 924] +/Flags 4 +/CharSet (/fi/fl/quotedbl/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/six/eight/question/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/W/Y/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) +/FontFile 1171 0 R +>> endobj +5650 0 obj +[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 0 0 0 0 0 420 0 0 0 0 333 333 333 0 0 250 333 250 278 500 500 500 500 500 0 500 0 500 0 0 0 0 0 0 500 0 611 611 667 722 611 611 722 722 333 0 667 556 833 667 722 611 722 611 500 556 722 0 833 0 556 0 0 0 0 0 500 0 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389 ] +endobj +704 0 obj << +/Length1 771 +/Length2 1151 +/Length3 532 +/Length 1712 +/Filter /FlateDecode +>> +stream +x陧RkTSW應‖騌I誾X%2yj   b,/壒7鋿鋇z箒D|PIU朎lt蒘T +珚@}犜0|慥啺㈱_s梁篔吸5琰9哔;哔4廐Ca酨 %&G偉R 3汳⊙俼XN "'`!>`礦 +/洵蝤򷀮挦"W0}捘" # +9 +Bk +0z&┱`峀蝿,bR8! +l動斅氃$A嗫!m苹T実挗讛L: EBVRXk1Lj鵲葰^?楇x覱Q餑9os9頣: R蝥┃E9f儗淡踪扈F/涻P1湐2鉹y{殐;頨[3毤n謞59*闔烟赱7_=蒏咴賝q*$棢Y廀巛猥掳j蘎sy~隐g-远;=榉Mc乖顔6]瑜p/赌 V藙鶿彥0=Lq-襙gv{$攻岜掕*] 轧a5T[浮-^,6+pIo桠鷹p2汌抑竣d缣/^=cざ>T{^ 齌mn9獬(蟸h藗鬩Q 究跐彣K誻48o>(*嚤n_趫陧齝翜角 8v9鐬姎P栥艩+b映弭v趩+u рU㎜<>餷k姡銌,钯O6瘘捯^Yㄆ皗用欠V.诒"tP3臒楁劫:p7w$Z衶荓w~霨僛r謟}4爼Zc1肝([颹d;0A僙4un4韧z9H炴eq7K]織臍*!*[*9璣n3阄瘫'ヮ謌冏蛮粻累晳 䎱'殆甒F:9矪獢綢旐M澂讨牒鎒7w-p3级烓酿%鳙悠ν6箴祾H;[U泅氘W胏5-鼯迅击s媀S∑ヵc糊踽e筑;/eGXh倦鉤&.}mS?詀[瀟+tiR45鱘*q8F寳E(趏Y=,璷<臂a鐞*Г{na爽;7祧xY柆螂剙簏偓榮〖9遻..VPJ钌q土磠廪饻鐏?|絞2轰I靁SQ 飳oE塪鳭楄VZ]泛功琾弔n嗺聹w\^s蜻軶伊}満寈:裨r穙酴艤悖爸5z q\圩湟忍u哓5i旒^ -k碬餆脡蝕聪 靎鑚撺逐.圼摨鮺9簄'%橢O.f葔U=紋枍O#TS幄D栥汩极寷endstream +endobj +705 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 5651 0 R +/FirstChar 60 +/LastChar 62 +/Widths 5652 0 R +/BaseFont /PAZEBY+CMMI10 +/FontDescriptor 703 0 R +>> endobj +703 0 obj << +/Ascent 694 +/CapHeight 683 +/Descent -194 +/FontName /PAZEBY+CMMI10 +/ItalicAngle -14.04 +/StemV 72 +/XHeight 431 +/FontBBox [-32 -250 1048 750] +/Flags 4 +/CharSet (/less/greater) +/FontFile 704 0 R +>> endobj +5652 0 obj +[778 0 778 ] +endobj +5651 0 obj << +/Type /Encoding +/Differences [ 0 /.notdef 60/less 61/.notdef 62/greater 63/.notdef] +>> endobj +635 0 obj << +/Length1 821 +/Length2 1061 +/Length3 532 +/Length 1656 +/Filter /FlateDecode +>> +stream +x陧RkXT<纐V槍P# p騻s倮81&6  肫-螷璏-絠闥O;|u 曼[g灴训玘#8~脌燺~p,鋭#>"Lm)3\v8鲕覜硦w慧幌5卽* 襺烤@`KA妩;v麰菇髮 VR;G覥rkm儦圩粀0BR6硟w kn增/ojT-`+4YC[縨漸丧瘽a汼_萩[3-彘瞫姠g=l6巜7b/,细9,莚`>犘★镂o炴{岿駝2;|嬵:浘ljh}a茗钣烰#"何尐妇#薢hHnv#唖跢迃锪齻煹銔ZD&v羿䦷袷栮5揄G"l囐b鋉衚N璆+齯s振栤訩p肊b=拆掍x鵝颩蛜埚踻'雁 踫u廯嗡9U賩wF]叉"“%b昂囵@剁 K騿硭be煕趛粦嫀}>垫枡m2~蔴!遷ぁk蛇河L彯W}曓蛟~农W钝皳簸昪1O z+UY[襂-1"gJ6匔孂俸离5或暶=饕i棵%鱇乒F:nN铄m蟎&k藱镗誷O/r^{饮D龗anj柰姤{$焲錆+閸徿鸧tDO$闿霏痎童8-G 脒(]m躜棂(瑢枪3Л皖1揸磯9.6潵"P觃4嚠 ]\颬碥橓vZ炁i创魇=謶蒅#L葼瞧T!'[q蘳鯥kK泾旚艵柄:o抄2嚞诛y$璈2翪? 咟%皈惈 F绚b憻窍&endstream +endobj +636 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 5653 0 R +/FirstChar 3 +/LastChar 110 +/Widths 5654 0 R +/BaseFont /DKDCMS+CMSY10 +/FontDescriptor 634 0 R +>> endobj +634 0 obj << +/Ascent 750 +/CapHeight 683 +/Descent -194 +/FontName /DKDCMS+CMSY10 +/ItalicAngle -14.035 +/StemV 85 +/XHeight 431 +/FontBBox [-29 -960 1116 775] +/Flags 4 +/CharSet (/asteriskmath/similar/arrowright/backslash) +/FontFile 635 0 R +>> endobj +5654 0 obj +[500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 778 0 0 0 0 0 0 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 0 0 0 0 0 0 0 0 0 0 0 0 500 ] +endobj +5653 0 obj << +/Type /Encoding +/Differences [ 0 /.notdef 3/asteriskmath 4/.notdef 24/similar 25/.notdef 33/arrowright 34/.notdef 110/backslash 111/.notdef] +>> endobj +498 0 obj << +/Length1 1626 +/Length2 16798 +/Length3 532 +/Length 17712 +/Filter /FlateDecode +>> +stream +x诂禼t鍈&踲vl;鄱m鄱m鄱m趁幯婶寛}甹兿篜Y畀蠒K?荝'泯6}i7厁$TE;鋆4'A z屦櫩詂紀梕隼簇誑曯>!餲籜湢n_H軍蠬鼘阊粦殎P陭/'熆欳7]慓m㈣啢兗彎w縫苭邁S]媉.<+* />誾~4紕岷60$緷銥陹鐠W陕9y目 鴲泩7蒵+诒稹鮓c斊MnK聉H )蕸浝筍&象氄堠嵮) +`=4果G岓炷ν攟躲Eɡ3正#渖滁 +J>撡擤榈O 锰齪梆q儞!谝嘓趹6c醡nめi儚淣M}憷葰凈[帓祽天0E$悠炎d~` 痰 +鱊/,葢C腟z璿 +T⒔ W c蔟$姆珫僒1骃鼲鷒骟%渱T蔘铷锁参y緬緱胂!^篈k緣DYsfvjJI溾'q8 *1|╡ +脵Dq⺳聳2降绬爻鷝汫3? +(勏 +#㈩;┣硟}_韘巗娪柪祧A塛銒"@经`Q.阯梱綗埍{敄{半h袴Q楡i嵐譅椅QLb葓={sFc0牊靟a窵種\AqY#頦乺▎姕Oj6\Ζ穷哋xE%? R#)sG@AR璤^hmq"NrxTJv 犏9IX咥FTF鳑拿8櫃,)#|3熒踾鉻竹泞 +/ ]骡c鲊Qb&M\p閘Kl5鸷e錈惇ⅳ"Prw馀A1o祺凗釂ZtU2]Tm 売!Z樼媐!o0碧D虾z銄?瓵な砭鞺7頺覨庄\蔩屚v效5+[吲<榽粭拻 +2M<姭熽<珹񞺵3GlREP  +镠Z"eMI瀫爦璳锁窭馉n辰 x浧R4h珶h顎如窊Kt菍ovPY 囙冝Q灶)7n瞈\|c潾v"w県)薈K B亂0喀繤 A匁訡氚鈓郜'竣璁U箩:!;郤=T碑8嗢銥Mza鈤dР怪`8.9#!nx傔睸択旚脉藇7趫zV墮D辉蟲緖厐k]屲姌8[r⑩+限)巄;徃朐嵌捪92~ O%嗺裨$萵y>痁!$裶鹍Dz 86酜諹 &扷~蘛9 +聥苠{憸?﹎醓`喅享P娰 叱媛n.走2G星Y余H鹮@其搟V旁 =s刓aOtq=Axeuc#fud釪姮f矊"岝E谽腐7?C繎殟$.⒖㈤韌 諬嘓驛x烙欵0堨{氒蚞葴$箴J䲟R+鮞缬賧QV*坋T鐐n,ポj厷绶,>?%3鏲 +%. u/^駠J躃'檹I赟by[蒠;'cD蠺>;>7:V袁蘥rV〉Z嶹爴:4dOIe(N嘯rh^7毩r UcK&帞邿)杨産閣H蟪橰褨Q悏B瓯e烈抑n坸'魪 :f赘D燹%6 +绝y婚(o)x%糇睬I=櫳檓频 汫*In韯YP菜瘠甏]震F汘Zn澳,a1x湁偩(═箾{w*悡2CR屠帹1滂|朸AZ.1d蟰U筌P蔥4ir锵hn3_5B獜 &7逰\^0 f熞淬瞐$0/CR0璱烳轳釠浮?6voj+▆蠪d|@籦à--7X 馒 箩鄖'諍〒n)緲C筄#嘚糈缼rDo:銊V培9#  牺寥! ]嘁*<呢y0筄柗\3呅憣^l殩z櫥Q贼T呶v#r$z<轎w寵瓲轍粽w"W餎嘆縲;蠞絥2L櫡;v峴\騸跽娵)訤)*鑝0n<&r鸧騘!峢桞>唇哢矿 廟.-%D/D渫z蚃(u]禯}<拒q╞赸嘧 +Cjo披{坑Q癱瘼Gpa沵鱱涎噮%u8妁恴皣 f鈅%)i+岻鴞瑠[X镨 _B{睾s杀堥o沞%H骷沔禆g鶢{Mr偋薒$藻l 闬bK 挤<<{桋膌QK苏-腚湷u浘A愯硵o竜ㄈ2!x⒚U撗~創>菍F?粑U籚\躿1篺纅踹ea湸孕燎丢p⒛讒9Af熁L9;堫縦& 攌/懼罹#骩陧讁劤悫u'_矍证莠?&9框甮漃/F28蠴*To~訲纃闀#h蠙桩`丸4N跥c様翩Yp~碣*蜩悹z臭倛O淉规.%oY叇稡圝i!]$:4幌0J~r+1%]Q遄R狼7姍 +s哷愵劙R瓆痫箓1抄G}"-驿糪7(桍[Ⅳ顯?墥Y軐O 蛚)柄bV鳴簄铢奃! .坝 m` 舝翕;⒚:𲵓x.眆 4fr:c鼪韪俺痕琙B{却霰礳夷,<俑棢欫春$%煡訛1佖R鬶$Y魇豬g)誗7T昴齠977褗1=赼忶刈扎=蛥ch}偌雜o=D(g⿱M蝃o8:"錧鈥郂?B=B>羒埸N繇(#w4垒q>瞕n+f揱馟]乫蘨痧i梋轞铽伱骙}T*)⺳\%T 盱S,y-蘬9览 嫺祲NYv.dJ +9铍V藴)(魈惹+傉闔f蘡z KJ-j1璲渷蘵G"棚j 蓴6乸崪2蘦i^yD旲腯賐r湫蘹5Z椵 蒉+>桤el[磫擉,檊濶f'济挭&*0_漝晿;洪蘹撷7t _镫8]E9T礼糗>C;帞ハ洜闺覑t)N夝t忙O掮 Z'幉遤c⑹嘃k效$bD樍D蚡蜏';W觫y闒琟誜YS嚡逤囒 +麖!爴2枼cL"痴缺\評g蘆燩賿P焀.鹲贻鱰凷邐瓰挙x壍 噶I术pUo閮9康礍Q .7擹3{犑軿k潉]嶽悜蒯嶒錧mQN%禯聃z軄都蔐|`俊M脂粠紽 9鬥U +[)暃齾漱Z媵E殾}妢3 櫩s 脘'8^璛鋚Y-瓯?瓎撎胖@fc9媓略'a佚a餿'踳C 苖賡#P埋*%淩矮\"u尮#惶(槇晎篤YP釕O斧渀pS.崘(DVm烎c辁b<◥/良0V筟<粳mAue +M謆麈So-篲姪罽票菈_擎媳d搳桧q~h&};没-;u昅匲狊畦9)鼒v坞/蜂|貟仔近x玆嶏?鲷冂FB3=杪巢>@w0Ed鲏抬鉼妆冼歨/偳Rs8E漚郡萱轡'牐轪 蘟吽 +乆T凶-噴蘴錿i/躪虑,杁琲r涫殻僘|0N8僕*k螄瘖|=4>草n 铅i綺_匩$瘜壔饔毱n嗱膸oke,塬B焣-%%6乚u僥 +嚪谢>FUyメ峙顱s糔碞jZ嗂H蜑紎-X蜻WZ畋垓a/鍭d_;鈄%平勬╜"鑜璏嶲 +αI垫LNF霃矜6$+攉^(R'顧?OC5畇帍6F鴡Q鵔嗶鯉 霳K鏏O婢wS皒[<[庿慑忈h鵗I筸18俪羈鬜1鴨贾筅X羚v嫆dF|驷瓩耫蹍&D狌泲Ra^趇鼙#=@な湙WgW納O蹴觹9弖縳箠;,公z诂|蜕眮誒3呅E氈b焓断+竄 +箖}賠椦蔾!; 二l證昳磷構灿 +隐 y楦顰u}N菜E晱伕u廸6绩1恁翠卓侗酧(5巂簪娐窇桛殱蠳\u^ 襘L瓍魴?c礿嫌違90y^y},4┰猒澧Jj歫']蚙瓱=劇十な|肁蓭wAd +焘騂糉怕o鵌屏Z4p洅鷻V軒V! O骓誎也酖鳫籓<)*柟礀CK鱳綾/R餌憧揸6'8觼燭冷挚"O猺F徂Q煝>Д^bia唛铞g烴79;k5凮'嗑Xo勡9邁嫺c\j璜饐o.澤'攤n轾>4鷴 o B砊 瞘犐*? "<严纝!鷋!巸踣峲5竩8猂 %鋐螮N>`=皯\$ju霠鑻 +%稱衜垕%Q]b~蜁e轜dA +娱瀜挐9G怈躄供KqXw:睫菼>娞澴00<獠溪錿l徕Ba $xN臞%t厕!^銇3礓 _,nV=p(α阊%蠺鮂X淝YO,斕窮壿}LE|Oz镫勽政Y諷!P7J"枀仈听绔t,t 蘋A溅B `+c%ク胸{鉣俄箝tYDF +毶B9黤頻Sx趇DJ-=84牊毌韸C"&Z4+:7#坜$ 蠂f憯L^8j蝛^`厒x6穑P嫒 +詑鳜╀椑<:R莞饢5L熦  [n硍}#/8乛 %权刳訔Q严方絩┞qМ軸([H 襔зe#娠|鏤 ъs粓 ^檅Б Cb越>鬩&18J5"麌n-腸w歚 癱LOc怙n<犑駈痔K攸-摇Kl楠 錎Va8I憏*;5!;膉k_G9F;鍯驀@n窢欕倴惃柚悇(早5l琔,9濭m諽~–珉$;4鸇汘,<﹗瘤e暓孀庮曻 剖=u]C<丿柋礦9硽烫Q聦 瘉佀u潋#蛗訔A$矧b +杵64v絙盋䌷4o鸪.塸桐Q鬭5%B8鼙珅9偩灟&~ ]n侽塛c矊C韈9俞nz艅q#j翤餹鳽r噁L?'箊犰膽Q*刋儒w妥℉鰏鳚膶G晻雾(<吴禾I5+d虹飼M珜c 俱u存R寤窶T髐PX6啥$欏累滟o畬酊$/绉0夊亸c盱*阓L妗sj:撍霧ㄚa蚴辎RIY捸LT@ +哴;⊙{で-& 尻洬*?颋'滸y贐庞%执(V朧J ++|/洡斱- CPI擣鎋i&T8漏40'e 䱷}!=λ6鱗p檙嘚wt嬙O脤慻 妹菎铍绢s '$d輨7#>4 D${磈G玌z擯葼4a[67/勛俄 娧晱lQ/狥畱E >^呥ht.僑<挒y鯿f)澥k箦畞^Z麆櫹斵聼嵁3缽袥; 輤氄脇跦%眲:鷌僄22臔餀挋镐K僭峂$>:篸юO雞}鐠m1# 夳*紎+#j-樻s 14浾埭#|*|珯/▲憼郟~PfD谨MD⑹ +H\熠綉KUク=竂p伍恰&xE[ 藳嘍p炃 蘡塎 m镫1Uon揜凗&Wx俯斚字^諓 ?7龓韊{群7YlW偫蔿睜!謍竔柔'^轒●T苊盂媲 ?鈺g暋絤銕z頃砞}P7闪1{蓇鴏2菬姐蓛e&+复埛,y剠 bL霌趲 +wM/C桩吩iW_[報垾{seO| 獠6kt嶷m:霒Y湫傓u艒 賍壠襌櫘 +L虄T7栽)*孋躳A甄\栧糔瘧 T忽锋6,.8穜棝46'F#樹5]7vz渠鷼鏿兦%o{mK(恐宪?m叶屽爺Z鍨霊魩佷ZS=3;(;s郏&萵)a桞 m律儽|%3)*;Y琿I 衲衎[豙)蚼鐖$蛄o;鼝qNL9跘贿P稺狢麽O9崴嗕G6勧吙'QV﹐^|W祼C呙骩?N+棗濮$d %恢 鱨郐峸鎏嗰Y傌眗+綨蹳0C9衰u縱5榢屵咉 琉彉43;盰鉳uh +氫2啯溩E1Gq3*,>#傝褊O :u汈=?昤OE"\瞃ワ瓥R&,睮=~I遷m鲉T仺韆遍儾'查拋p臙f%肖'熒嶔id 溝哀'单裪撓U跐u/鲂e豁O 邖n\聞$r>.=?,琭"N蹀杌~tV'q籆'斷|齻i{Y2釟瓍疠嚣}蔫肙祩w坼封鲰辐锨,狇竓w馱HJtJ趏詮N繦0趩6罶設摁g}捯we垯诿倌觞9r-拐6毝绷蘖;d魭~%-M鵥 +p4飠6p暋骊暅隝= 轕圭〔斁釕嘔吠8Y莿@儐搙R珚儽冇Vj 涮Sm8}MT埒腱廴4n, (MD%}HsMD匣ua?皞鰉幊炳I贃佱JP + >掴*跅铜暖&h隒*~碆s`D;,?n ->鷻豾V?錸Y賱玆~gヂ躋毱櫭<訆┴爴7@ 傈(]]肽M吭,6柄菸栃x_猛彈+ 篫` 禝W盜O竻e;=?+鱃扣乘夌z侒跹凬梑q∨嘖;Я锆Ea颙8鯎鉗1;噖K萿 5氉崦6洘6受晛゜Z氱飗^蓡%簾^F-&枵ユ<-w陽0)-蜸7阶清据7% 媼紮颎6鱐p4-!G潑1E袉yb辯鸾P)廰{劒磚勡N樉慔蓉D抇蒈@ =鎇?+0铝槂定B褗r&叠牋瘚鬟.简"s7jQ垌鉰霖S諝晊JFa绰<妸.P彄pDMx槝 :`$1鷷u涡B郵邏H瓌3b絹爧V颎鏿RZ.$鯿靺R獵固,1叞)/儶C虞S 籜~|6%V'q}〆#钐)躀rU嵁7&? 燲貌8勔 X奾忢@E斯[鮰&=QmP莄孻"葛\XO笤廁$+*句奀牤a梙gV慑痽?碂5<印[藳1 9诋]掏δ*虛qFYC鮯闔e莢4戞节к 4I雼藕 儛彖*?UM*傷蚌(螚rKB埕7屟o:as究n摥屁礛tH>鯺oT/lOQ令 +B唌Sp|U犜栰柠1愹<h*s廅T\馇乮固酊-知K駪雄!t/钊彣茒餢8螑鰊Pw疝!t訟 !6{"匸o穎{j 梓癲9答uC>娤趜3砭鄕%4E3泘苕篪脀圠,b5Y緷霬j>忈(v<5綔續eJ!ミ眶 np;5$,属hF斓-%E殺3嚢稾lr 'b鈤46 餂_酪)v喬7鲷42.伉+湎櫮愾蚅譨阬)M 儡砈< +捚>O8R#阨偵bc萋J]柟棚i蝰9黌"濕 Ya壦獑kH蹪溦槈M齶?"5{霕j覝4iao,甄蝎c目G)鱤8)e qE0*=埪(|s媨*<魖c`2(9,-ro 砰t%1縷Q&\i尽S+w9罄宑"鄔@瀽SQx谛揎窻83N~塛茥蚁銰&bs馴8$g曉羸!浻x糾KP抯v_5.呪V笨驩宬F"肌!*g ,斚刽酥W-ぬ崧鮋龋6!.=0 蚛瘃="8瓰~褡啹q呡}唋7O镃s/哌榚 莳QM?z醀 c!砣勲'Lc瀠`f萱 +啞V @靵bJX埼-M_ q#鯊S!"2夕:kcX絑2椆.玭葩设W俯,;f厍g#i奝瞱?q7=uFC +p癛玶/6_寓鶔J]RK詆 ;丷﹩虝t4.d炅iq濾嬧彪ly朗怣墎鶺3捷枠賠憏K +銗刾蓘購]~恊k閷蝇|5僊邺$ 奊z肍Q舋欿拴墨, (@沎:巚5檟0矬M润熮E 鹷vq錢垍yF鋣0喞灧j鸠xlz蔯=T)澻-^{蜇+3\w怢烺燏撥栱炩諪 >(0硈pz岃Z獛'2l@W[Q=o罆瘂p 9)i)鷰WD6=屾鑊&崎2E徱BvG%霷蝕凳赤0$錶椗儠鼧菬!*XM F M葠沗欄rT鮪]_(o蓞玽}Φ诗pB+*pK囫賓(6Wb▁2!Q7%饚I望2阦橝驲醯骃w陾>癏)D陋耭 *S錁FZR礧趉祉Y囹E>XCSUh]A\l%魡紿觺啲%淄L逕虓!<沅;揽詚 :幕魆^铡oE?i琡K赃)?禋珂楿eM葴U_纏莏j磙74.h6泼\T5鳑+﹁唅騽用&w湤a?襏I猇蜉駃p嫇&馴)t覽(攛 梼/黴2_㎎M|U泬崿骅冏H摚8蝬軩C=邠:狝軎}悘_I"ZK祻@鋆弋* ;賈 Vu b%旒!Sa旱P=gII.汫0F烀轭y>疢.醇&yr靧鍎芧鈖赎4(愚馊堓 ^A罕=]p#R\?3焺1伣*3'pЫ#鯱(臓 盹齸 嗭z缃溻徱鐪鰷鐊{3玼泴W楕綟嵠#5綑SB鍜 珤)諛骚讬勁態绳[輌t勎u丛i"廖篘蟚鬀鸪磯省_讄 97刃w1n2M偝$n3菮"秒慡躅毋荬77餳痟6k獏"~;7暮罄螢葋4收S坴啅縷莹漳缓4.V墵讏R灙X糌RZ甐A(5鈻;=&垼'抴j[唍啟>B麚灎h48"彂n尧紵S毲 S錜鈄绱i>-誜ZNG=膻餋銏!C猸勵贬Z#毿谄羮 馷2泽+ 苏猗P!氓p育Tj檱灼揤s示5︹5疈7勛S$o赧齹7袵冃輒n疟w攪挃抌^壱橺嫖_}V趬P梞沩銼N鏜緲T=刊);鈩倦珩い臔敓Q 陖{Bx哑0響 痩R挰f湵N擝H(麪; 祾铬q痯S#圎o华F_鑿鈬O绩;<捭忞髻姑'&雂坄C)巋CTDyQ診j薽闒Qh 2*H砳墿C媫骵汮}OT眽粙a@]獉8 孫Bh%摦]轗L4 ." ^柽ku焔-q,IC┚I粷棦風碾譕 f餉}F?斪Q!c繾_綡x仸p02蕻!Gb&矫*CtMH梧f]y+ r韯錑f=誐膜b6诺=誜戳埐璣h0笱09c薔`Z B黪Mw羄@0昇P7_灬糉撕Mgkd0s+*md变xk曄;澷-噛MN57燒丿啍愵櫓y*蘢唭丠髹t鷋鳁}f"挫硘PJ睗S#G[;>Z搲4]3A|*KBz# U鮲i4:8i,pLIYu-9uP>K\2M疫/.3,\粰嫅燷圻礆掠 攱(*Fd8N唗蜳36髬F旛l`伵$bd秌囉軇縜鐽_友x牞xo8垜3檑次=駺G齤9瀔捩^s>嵴X8'偺/絇2X^$07V!鴼F<鑬9掏u:C砼烮阝*A堘暑a漬FZ儡嵑E鈓蕬曇'緤-z撺擌昩鍺吨]bD鸧频匡丛5継= 睡¦}a)V%+荭k5罧S搏,暝Y 鼆濔Dě戙逕q-嵈b&━噋Uf~* 水p 喇6铵u波:糏侔)竐(+2t?盋 +粖 *蘬FH)軥~榋蓤Z煱徭$皛臋&g7S&銹矼杄l撣痣T嶔YF,c¤氕.*iy汀 K{贎*yJ? 禱5轅<濐30婴 嵀5曁储错f[涟b愆8$殰m&(衏qT矈膐禂a/|俘Y鎒 :綫奢垩4垕K涞毘童*b沘刀綊&┖>鰽曃穞菪RLn孿0紅T雌j經?P暪!4碴 糽υ趫x5鍥穪 v熫CD莸g丱t>E劊澶曾A釁-*5紃%" +2"b'鷐0%;乫E竷j'd,蓩g! o遰续貥篿 n1+~ #ユ瑖# B軒'澓恺a戦聯M悟T玳壧皲噣鋏鲩 e;t|隽+鬓 I貂^J譳}飋ぱ瑇迋囍灊(ⅷ艝3R3┻鯙忡溪E嚜箹澪紊,濂羁@?U錂鏎桥q捋S癜t壷s魇H06$ Y!c5. oM徶3"充7%07筑麏9訠C﹌躠{嬈R(詆⺶*=?w +& T7侻%[堙鴩p嫮踜{五艇~繒4道L崝馣SS9i乇/Y媅T_ 溳&硋z騚籰 炪3隄9&FG嶼哰h挅J+%醓'坰 n!)k鮺4甹匝R>秶)▊I阛GU鮾橛w巏_鄆 駔*斁 +P碄'盉1@0LQ嵦-?n靶諝錯矣:xX廃@瘭謇跖遆浏fJ囡霋霈祴a䦷霷5耢漦_挩锂 悌 阹d[谨蒧9晉%鞝xAr|C (D喊g賗5裸駓匮輚#犱檜 + Lp誸783蓧Zf鰸E崫瀜._r%X_VK^鷌B珯捈AV1NY:pYf.妺具簓-馪頩朣鵷 4麎Q艰'ot"フ耽萑l莶5 9vV擱9f癞4L">嫽毭蕫c諢dp謔8桑訽聐k'儨丁 稛v铉冀=猕輫yD5 +>?($揠駮}BE薨^黑|颇隉濥i鞔囻LL沢轨帵果";谮倴w甝匍蘥擎)拯!菀牁M:扉栦攜瑌転s8v 猗枰纬奋9足P黍沧廧闣5繖絡薺暫剮桵鶾 篚泐欫稚陲3.dbq銜螖泺磷恩萘䴕P帅3y-7$ gk臋概=Q仓/痕笃}c锲e'落z.5L喏q翓YLt隨2鏡懆鬿v}塤[% >飢粁悯訖UKvでp%^L椢|;]G/烬l誩 +蝒[资488蜻F+ac''#鏙v*V_爳~vI┏书[{s胅蜿X_=涴摔鷳滖-|i7m\猗pX1$!鵀╯蹏oc%_~?ЁJw臃L兾﹔nW涶℉~-咽_/:卂骧u互艐蟣(縷g闻弸具櫀胼齸釟U淀,s籫脕煯f藁7M娟靟镚-S承'遧菽a藈?#t}狁 +焏撮[,濲摈=Zg;糵缦U祧`醬8潳テ蝬螤lO/iN藗o赳]蠔 &腼甅?∽9i=嫪巍~5_w漵琻dh绝诋w> 6絥=o晑赈覽?冫^咨螨璣/%晴薞U0E糬h%/臓譅饀塹忾Gb碛9躭飏蘝胺87nnG荲鱰絪/]49_薻_糞 k嫻獧7=4砗ぷ-冇丫Ga┓藟s &王づ`k崤{騕弉蔩氦蚋嗾{鲈哲筳#沘~i顽}^伐 餁篏煥w}_dz~鹯岘Jm>-~X閏纣頔N蜾67賓/<麾ADV鄇92麰_ ]娣瀦舧砉73蠀;[9<蜷滨}Kf/h趘;瘷w秚[呝挩и柾(#糲K噟vT榍瘇旣瘤TZ3~綡-欚j;/E嗰 m鯔*S脘>}搜焲菗"_艟'm轰灿kvb摮颣_5u鴆@!5`X悳摎XT挓沊斖蹠奺ndstream +endobj +499 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 5648 0 R +/FirstChar 2 +/LastChar 151 +/Widths 5655 0 R +/BaseFont /SPHROT+NimbusRomNo9L-Medi +/FontDescriptor 497 0 R +>> endobj +497 0 obj << +/Ascent 690 +/CapHeight 690 +/Descent -209 +/FontName /SPHROT+NimbusRomNo9L-Medi +/ItalicAngle 0 +/StemV 140 +/XHeight 461 +/FontBBox [-168 -341 1000 960] +/Flags 4 +/CharSet (/fi/exclam/numbersign/parenleft/parenright/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/question/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/bracketleft/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/emdash) +/FontFile 498 0 R +>> endobj +5655 0 obj +[556 0 0 0 0 0 0 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 500 0 0 0 0 333 333 0 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 0 0 0 0 500 0 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 0 722 556 667 722 722 1000 722 722 667 333 0 333 0 500 0 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 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 +484 0 obj << +/Length1 1612 +/Length2 19242 +/Length3 532 +/Length 20154 +/Filter /FlateDecode +>> +stream +x诂穋xe碇&WX┴蓨m鄱mk哦]a%郦囟m鄱O絳w髯>}鶁屉毾=p廹5I 攊M鞂L澎未宼 \9K[#'Y; 瓛┕ 喁枖T匮孕僖(b鑜P75垬槝寽湝挨a;{GKs g叒:%55I1y麿蚠O'Ks 祜嫬⿳澖)轩/担博)蕾`fic +朩袛P埶腗仸巻6#Kc尌)猩`f谤`l4秉4'嚎X侼C摻┍錩7SwcST4{SG[K'ЭK'梗!轩o滍朄c+7雏WB鰩v-l掰)99;;Z;﨔U鹷炍單膙颤貦43v辋曼:Z桅钗22榅:氽z鼚剔羊_i8Y+)埂崺撚_樋t缈黲谯踴垲_V+Kg'S3:XF1崫6乱3(扏3;#每&.S鏹犋Q3304趚LL蚡殄鞙P盠鬟G-沸徿滂荒矬B嫻刎邺/肋 ccl _鎲稏64T7齱8捨!4K每厲Nb栴& +栁3C浛濟梊hb阧c 4杩 爀d`潑叆5馃殖㘚e +4掫閁$DD叐s薐/魑*ト跈?BBv/诳7悥墮丽7 #O!诳`,k桁h玄[2憧 +漷Fhlg蛳(;M䦷6vqt昕n琦_僴j阯j 徊hgl;=争F鲟笀vo7#鴃坿q滼A昡椷镳m蝦凎胡I弲S麖})獌醤t虍d铀\\b蕿< 6v陜@z絙勗3鮤y--6祪漲E%舰w(忌6fG璜'Jb<T扜酒)当h?闍錈瀾%?=掲 t軥鲮鉖g怕恟籅 怑;d狃k〇{EPB6楞艽^}╳z殄悞`揇谑*樼[e迵 S[鵼e%汍+4携g''9g部謀HE0xp'倆oЛI偊铱这>]S:厈z睐=74ヘ^\胫礝蔃;酭馷纲迚許gIH诼艚$3q^輬翻{坪鶯$[遵O:輎c 贗[綼龒H邉蘞P玫栜q釞涳e攌/I|;#c攩6\屣{b睁&9暓め温 渽郘Q_蜠鴓8怙鐵s赺Gi顩@溥''.D坝s䲢鬞e$6偠鬽dew峅陶?笿 c 迒FW綩f勼鹌雲督"玛Yi鱃s炵堻 碐璤績{~1噸醝O煤崺僺 P寣v$粶6树#帤頏^g:t< +;丝=翺Ml駦鋢V怘酏嫽4!泉贮銜┡4. +碛鐄孺 謟t鸶/!J&猚d>9裎>阵5 裈躜㎜耲做w睐P纆墋誟[ _g莪岋s蛀*猆/d褀哉$樭剺汓*煒掰^痯 闼x潧DE梩LB41%%c痊怮d罕痷PT儀>姧嚪懃椙Di逕镓馽缺猪z zz^N&^_鰂哉m:[纪睃n5QC蛲E8 R梪??慱眙.縒A3` 墥"=2緎崉妀畷耶覠%換R舶vIE紶|犢榆扊仆蠅b蝮軸O*="&QMW\5l蕂a鮯2o-蕫髍{嵼莠iB$}16粪s11钱f橏6枆慱~Z4▌ik∈棾5K5#C麫桍薗:毻R谏亇簝R褡扼粩豙0jX,<啛*鮶z鉶朙Иv8KJ.(!Tl懥蠠<<`:觊򊧅飑6洧連h湮腳湶`6礵&a )U#4;彛跐A;c鑠置柖f栝&慹钎捼(懫dm8p蝩g疣 B:肍pJ鴴%0螼\执牗*志2=求X7漏<滼G鏩驼c蓭s1枈餞C崾嗺覝莇苿,/J盵u<碘'rn'乧+絻;S0槵改蛊$氮楧犁趕11瞺悮 + 藠ow藵+慾 z巼私?擙v絾龎Ou +"炪B<靂鲮N助0泅諞 9RT /纴$.`Lw惼#世I篮*赾B嗔)呼ほ↑气c6"m ] 汜*荧5颂麀封絋瞗铡<\1h沟zぽ橯刯I _u鲔&駢喠D|*闛鰉}c胥q尸 %拼霏<弲G橿4傴溛瑺纜me-k};藀\骧Ad<隯隄骉鏁j纪淠%{$罥L銽+' TX姎璅賸fW替濏驦b ?=袇漇c歷*仴螙扊`觳漯 #[ k踛8T#1瞛Y;"臇詉轔娉肱冊u赆庑:74紈8b-掸{Z惋芮殐涳.珈 Q[0敳k0~窡倖逃wdp!)/j(鈆U<鸝v 郣縟`借鎙8炯㎏V礭>'磹亐ε;軥佯諚瞔Q駿m53O豨xC鲣懧W拞広岿$屙萆谷,煉:LB妰虆N !卜7氓%燠淽<氞毞 n+!檄u毧:O領萜うx+羘t)C7K"蛋T洟6'yTG倞74樻硯1Hr于|r懿眿妢t叆`竲蓱y+ 5稚My摾5@暄[U籔帾貴Q涟%縢濹懍鹝3詗暹`,PX{篷!_嶉 蓌jh#;b秐聑vh:蟸_ }`覊=缴e凋\g9哓.:(d=邊)嘉qBごz蹈3fnux<漒禥袙I ~ii&J,uP哀q貓殛sH贘凘岊悥"吚璳T/擨騁% =覿99+J]X榄峱+q>1鳢2cw7蚅 !Y跑猩懭亢U觤h6}鼅朔嵋7)銥5 甲俞tH緽觇j+梲(喒*y话#~撜闩P紲qP屘B )T嫯|bxY倡惂ve"! 苊艕~曵鏎戸 戝駛叧肤*面tTot傏5丅c漋二暫楑C籄 獭W{`!y旿融嵳癥镋憣凇25aR4佪`R52v像争凨 瀿鲢3jA +挐蜣頢urx杯欯}0DS'0鱆ho穄礙A脮A@積汭*嵾TP[逢ы爚\ 簅傇DH$j _〇魻柭k+8~W苜龘r)f齢槲&澡}恌"B;账餶媶黷s:鄚丞t#9鼽H荽賫哊秚'酞_鰰v鐯@罷琹杌W`昣i詽╀齻雷噐y碉 +凩〉\淗^-煼=]螨〖5f抷狞腹>镡馎蓇迓泳P熚Pm-圞9峨,MD看襽D騻8p4韧滏sR橵D+畯飣舾0逆W+ON -ZJ茌溤恜h曵OcB弒2U$忮e也塶徘V;=2|芉 酭b=Wy5從8潒_FB杞EK岜堖u逽抜%M獍情槃w6N&齽祙薨X0&E殅[1YB镁={箙愩鎅L钯.顖列4兪9?fd[僕A 癴鄳, 黅q埮 z雛暴盋k踶tnatM恾媳F仩<傽耍愊*鄰 {'伀陞/+殒莿3斞\牾(c_岪鱗' +k邮德毞 +/哷纤J 7y屼8Z沤asけ +磕J+鲶5麱3Z!^ N絫h牚4睤Oc}= ~< ,菕q/l駸&;驢 +禡鎣?尯◆谢15孫鱲丿硭继:~q怽矊 c糐:,遢驮4K\縘 +侧*94磮独2m沾F u<噥:萞53酊蠆韌R畔[鹧鑛工9箧隿凌]g橆译?屼裋泵咂;嗀`屇4嚔6&H_j绰%/笔@^騵G`懵E皚猁Y J +70揾P龍Z,>J_频6迾Z?1怑蕕2侶J蔜2r判駿#駈/刿R6脸澶j7"诙Y胃篾趭鬬玫]2wv7LOx*茢鵛撼k螇8h璼B1雓p剱寤=cF妸嗛tn綂筰撀'幤Vt?85"皨4瀪緾Y髕0莕龌9耸綍|"紀~ 薋寊:D祍消!1Hm*_U忊娬嚧彊%帧銍0涼.^阷嶆趔涘䎱机+1<娔` @妾&│冣1SJ(y*58F釈:w 4Y檁 诿)鵐(\䥺-咦T%衘5潮g嫧釾9``4K +2iV" 饤8Q跥?I }彳諱aS冦蠛$i i}绊;r_7.悸& +蟢畇[砉1t酞;a8倵穠诃.52噡伈>挷TP:T敓kz幓噡 豠奊:A7X +Eq#;UO. +妫\s0V傃汆直蔻v湒7SN晇糾 k[炟駎鶕揟嚌ㄤ媳4uU+蔣e苬%"舤{ 敌oゅQt錎邡yI颙嵊Y腆A鐊B醰 %%&熮╳Nfgq駰fRn乧 +&P[)2Z槴狨NUy7o(憴鬗看7蚋i:}蓒芝N,k巚,F 汫蝮}vk$芙 尶_+T觐 n+j䙡滶襒G徥 +Z倾憉噋lsl鼃!a蚎a壾P 踙蒤 抠w6!斤鏟惪8>潨$!疖^6垍k'"?鮎轩嗟瓺(嫓G[Q`0~-薈 槮苈挭齓韻[赛鼷N}R>羨颅圼椭選dt宄:aXK硤_蒆n5殙瑺nX愋彜抵 +!菀Lz~峬澻#Hru~X壆琄貛9鄎喈?5q顟蔮u鸡n8V5fxJ*m┑王BKu迶S蟀o%rIt.-奱軅)恭fI囥暃w ⊿涼檱3k縑埛荬'絿\!_Z暼<((k歄s 寇o鈘曾+D.q(,U蜐t桟gy67мv杠0&^KLp薗U N齯V聸o巧俏)5.5彴B聣鑱9 橼铪!崪慃<熑湟爗夯腁狊轒U番b爳s赴/ぢ要慑悯顚匓wE7e麸唌iD:\搸6G醦齀柘笣 +穀霥+猌愜偯$8$煹=5T鵛鈋 鲰筢UDd噟撓蜎竏呫%,骹低s崙腟C>>岼K>> .*V) I欶r裬rS陕鎻噢e襏沂- 絮f@YDQ秱Kz:p6 鈾橆a鲱KG:H瞭,Z臭迺熢エ嘆e妫'猿I餹p穅猅與$YA渰(+k 釟 乓#賴EJzば容庘贄峴:>乛2囪j炧畋笻*e(#E緑嘉v 码鵪粂譺聻灔缐D馕yj酐m潛泳;_}I昛3邟奫iN\兦甎>淲烙"!%ccg&:洤~9阬儡駎閮x佷枠?u櫬徾协Pr佸2ⅷ 窠8-Ft葮2_ A懅萖琼蹑q撌陔-㭎聲q垵癗彗嚣;6鎂痍\鱓#蒜筹8涍媏G~.2K畈UpXM誦hF暁8E瞴qT-蜆旊惟S'f諊.鈕讑n?嵆夙XxJ簣憫垴毐c瘢`VWg 塬79蟻兑窫儱 扔詞硗釘墣l?豝d黔/括挼晌嵵{C咚bV5[抸0#櫉` 鞆{秂}祈梖@衾踾伀懳鉗雖鱙spZ截砞p|扭密DTba#砮餙hq=G3G8,7芙=;i-孇"Y酛8黹硪膤t贡u9綋嵀缊腫&厫$葅Do飲 ,>凈漢 _藯$楞葌﹂;>闽諄O$ !T4靋葞+笔舯98叙'溾罎 d殖塝# 赹+ + !瑵M烃掁S! w?R9喴Tva童)蟉琬u*奉邹壋RG Tu喴@\樐习.忽pb蟉1卙攠ldVD\循FG物碕#&[<腭x鵵储S炍$GX {斓桖譶dYf4<(^侔逮璼]茴σc莽竆酂@*//∨唤l脥H秥雟溁=皭 QA7乗卂t|0 AKZ恲+?`6臯9蛽(~R葡菀1雰管癀茛蒷磸ぃf貁V鷐C^6麻 鵉廃鈈u1 蜯維f畏+楎蘲r,嬔稁鶊&K蟀%X錗砪鹸9焝^m fz䥽隬1(v埚扇]震宻0W陞ehhV驑XP>複剼Z艩飫9杚;I慼薕]2JZ釐U锭^蜝"誳b幗E/yY%羐0a爤梬嶩R瀐骴灲~椴o +{ f醛Hg愔桞7早~8(P﨨S,}鰦蓏 +橁檊w j {頄銪&1珣A)賯WR)#▲y?\@F氾d䴙 鎒Ё殊枢,曺沸xM&&4b2iC弝5挍&e 蚹VZ腡瓠d罘X誤!=娎兽摺緷圭6犽{Y=饪豺T敾畳{)蚫(上盒嗈渍猊埩5F⑷$IWRm哽-+狕4k>nE&蟹/L * 毵剔璾b珌#雄 +琊濁xx3輻*橃鈌鳙e饢w鞷套劷攰5墋曻髪袸fk2;泜2癸ゃ攵诿淊4E6xhJ-8;|搘?H3Y覗蜯1? )捓6筱糮I0艓T1UV?W"敽ubuD阃羠n鍈.媤踩C谷会♀y9螨ING苗kmy軮嬲搈:,{*zM_iy逮_淛BtdM`9Y):59竟NIrKC6冸璉秗衔惑q!\S秮徤扶3⺌R0Q[X !<渧y蟥J%8-!65槑q皲璹歝 Q.投9 3諃Z鄲x:∏}-颓』w#鹶葕觱jaq2M=绍,+#1 JeC罢+敚 獣V玪酆咗71凌<祽"G<鯢奴;鹸<茡 +相衪5鑎8雮y巺89簇e0丌囆%4BE:鎅蘚p沙.卭@" 瀠%郛6c臷j^Kq 簪>*}- 0郦髮#嬾L豓砂 %p&<;藥驜砀8暊8異f轨幡S} o裼W堞B焑*步凈幉陚K﹌躭?W筬<池&衠i27撩+P蕓SuAt孧`嵤慵Q<飪6)醪磚憫難M+/訝杽s^堇 鈇S7Z' "摗E4sZ2O:搴*ZQ: 醢]翗鼷敍 !欹稫ak瘻Qc俐碄%蝲囓PKz${鵥覙/B彑施@a4zg霼!輳O!!敕<-qimA岏 喖瘋鄇嫐髏sr論埡陌鲿氬鏥F.梙 栺鯴R礘>~黚!矫苺歰裙r^?K +;崍P棰攱灡# "yE兆O铈B匐腓yt廐鬧4喒e(28BGu殱ANS扈KuUAt=z 鷱'骕~Q +u遯颤腥单=M慠^  +6i8jJ舫I}Y辀NT-闛[HUji煃遏$7Q顾葀/嫠Bt淛阮友蠻②蒿9卬挵ZF<愎,4XsEX倆撣琛劃jW軠"輐iW>|塡鄠翂rx瞕br/悚G塯^a爏疽O秄1悬殐.H嬤k2鋁 +/罄陾 +鮫犹oBtvL蘿k採/鞔弟沌)-蚄踋L;灦6澓臄dw鬸B盲%宸Y.跆耴曢辺gO&)S怬击.N4F6s?&D緱距~K6鲼埚#2,芗*pvg?洼澀淊a9%.X麒廈啵S=X蛢g92+,C.f軩悆蟘畯*茻!脺**m匵1n鱆毱_轻U垐Q4酶M棟甑癩鹔鎥魝:yj 澰㈧""` 藈存n聝境諷p9 5跂$"壺!7*铝踙u汙泵-埡q砩 1KP,H5徣閆渄M` ;磽:9@0X兩|1瑙#B鮒#g歿u@鋛c)4槤q?禾濪<9痳AX畡焸濛#團.SOyNK邖,,_Ⅱ](窗劬H筩1顡)鯨 2+eK櫕A#7酩谶嵼裂}这 蚘孄=仡;s%8溅j呃1闁愂2囜H茢趿/眼eMG觶z0I]阐汐嚭WP淫楍毆d!睽5%v 鸨5廚填岃?>!N椤蕰焱輱忤:沃d?弼氳棎窱淤骺^gx魨犼喬 t;3馡短緥 驢犤崯4屗晻爔 I<蠛7CKv{]ㄑ癓攡c|纬劘16]抅oA Um.尧瑃R╱I #攠~` +③/茂硯r蠪覸疱缢'畂E籢!s"瑾/莚w#)騼k魋酰礪蟆某8p?0閙'$k嶠6F镏焄<庉舞;M迣_#f槛嵂pf!5C_Ihn寯嚟Df榼蓺:㈥z^@指煘譞wK0!bL[:韤無D3;话|L婈 s偼鴤違SS*用SZ~帣蟙;紇否搟-:桖:収陁绱LOx=3a-&醘淙S鹛m靽跽稫湏g$qQn0啟v糮^}d<骧鞆緱昛mU)6y赝HG@ <翀?tQ 穜&@隣錃.AFf閦%J賎谮瘐*艆y庶,5tN痕X駋x\8<6L愖蠦繢&$:慕5贳颠葉诹)>踳0銼Q( 痻y'姗9腹`┙XG蒻 援/Ds`A|L`(珀莒:OzQ4朅4P埾郁媵栟EDi&^悤 踌4讫"没}|y祣糖ZU刽F,v_tdZ> D%屙 邂O藽P,o蕄儲)I騶薣3f忿椠豰S躠`hD敇z ↗危&,噍`:Q譕;h%ㄘ鉚bD濒&劆<;\/6鈣"/#9*4YV槪S隁| =&岱,鍙i +^軃碓聁-俼u2W媌p+祽^N全贺╠W陷△ 鉄褼 H泐R蔟1u灗鬅i?弌喋傳Z媺yL6ぬ痫@T( 蓎綘V]敏刁n[姙yNS束%轳$K fp騝s艾棪1?< 鹯8啯疓蛉!e檣"r颁a爔/.?H买e]8L憢z怩錜!Z紱. l|FV竴礛1?譲洴XTui7^姀8R4繚邢捞Y壾.9嵤3矋;幔醯戈|儵+`<EV{涾*r嬝 骉}娌藕5$峐t2恀et,=祀}fM黬?ゥ^(2=O廲J去V┸f鋷1L轝稄骻 +鲴"這籮=1O柶+社獅C哑摵窞m邍愍衖]忆愥版}粔b +譶!ど>婄$)衴洔荟榄-磒扈涑烒nX蘠詺Uc羀9K5颫3S-芶臩坨鍉駹{卯95q龋I?覴仢飮堾.K円G谐實刖浺啋蝥喦2&竱q$鰁31箅.Zo顷/bB瘿稘&J┤]級Lc鄄%絾全0/"%`娇捡w絧M-:/勬陖~醨=_鳍撥鍺﨤~撛wm弎!H階唣22樨K?裣\玙詜b|篾审┃Cb~褼i=(電鯋;'佭9嚨}七廕1_ńY\,A1~;瀛]蒶cBJt$$阷U@5仫貅驺椘`澝Z誏# V 妪;d[0移6鬓$谻Z_煾 埕玧]k樄N @pi,z["-v[|"F徐綦摵壚鍙檾俋<8#市^+&"坟鹥 +滐X4:T_H袾g?=,erO晉Jf伝楫瘰`an獭唆8憻Yw晜榤瓳BB保Sg霁贚屋2 幙I枉捞G +A㏑俻胥!Xkc搻j砒闚]xq堭蒐*邎垵^綾zdx錱mM硌庾簄VX&$秝䲠 8b絃鞁^闊鬯N尪jG棘GJf"蒌gf忇(碭X捯斲瘳]nDY奈J{6g凫 i|簝趷~襫Z殣`曷荛昔号買:sc7 #C]* 謣鐓%缑P,吰ぃ琵TLV2\b檣8姜揆HN菆澤5+o{鹑 R驫/O獸e帝L~腣:~"禥$硕#渢R蛨棳#缠$i峏Y颳醖C贅? iF岠 3O +j2p%5攈疒t)梶,肆遂弌xvc譣锢椔)<惑Y壄b!f1)L:q诊[RKub鵟烧*嗽鍶蠵?吠楯6颳澲Z聞窦[岬巙櫛晾瓆嫈Wm俤搪;豪{#脲sL羏IU噰5*捩]G駹6済d[$"*垞7i 92w諔|5*匸)妥k禸寽C6鸿驑鸳c硳握F{*穿:|:p錠qr皣"3/;]3鋑"}]焇粮餟B 銫圻X2z颍%+('S纅巽畄]媊D殆=r{.p%*櫇  G闆轶刃Z|媖縖'鐹 -t%%籘6啄?[輠eヰ,3`缊 産坫?+溭W翲%8l鵀mp碌蔪纳Y腇櫽婁'薀DM閪z梙梮B篑a=鲌瑮,烚𓑡嚙p-尶瘤;R&c䲠,P伲N槛'缾麚p嶭旁gi礈艷J}.)葩|!+讋劄澨烑缗俵=蜞 粉.乍-枿x慛愤寷#俔屈%鍎([甜棰3鸕yY+,栌两 w︺B4柖倛悇嘮(鲉s{壞缉禘尷皽v5^採 鋐婭7Ce氀z否Fk虬 '乢~賒钗畄潦媎wF20葟棩)歵+瀱榉9 c'挙 d醕zパ綣毂愌殣矤蹂]櫝RF<烺檪嶫蜡L囹牝礀a竡盷+兙韬螩訊`硌L囹 刾甎*尬澿'厅9漃崶m颱谕p,4獕崨沟 , +r?$0騷餜眀瞣z鞢┡凷烤珅z乃m~.a 痓0蛕炬穢躇G"謝z薳吚#:> p18f'QZ瘼帜.豄+d铻8媇雫 肌;>f谓墺3玹2%=鄟W眽 +墇&06l240a陖驚聝 拑聉嚉20鷮醡已窊/.壂6%7!.}軉l鱬u 版!;g4壘U灃P櫐z U钕l玮秱离${飶谠鮵鯜=躠 +浛l gQ僾儯*\f駔+F`樬W琉粂専鞞庨繡-鎐 =豜绨貃d侏T!闥櫒,惼6D篖|湤彝簨磵B鰼m俴皔i.ぷC誥A卲槙' +鹫m虮 捀 礻 5淏#f篠呤n愉x辬(槧捜K/T]v荜K7擫湓+ dDw4掔Fsu扜 0'r"8b遅方暽梁M酝頸2瓑ki胏╭铦樥`._瞌郣G禛9hN盗炯?隑驋爸N禒$8M9bMJ帡靳aw!餮Ak犔:鳰耘 5護Zj⺁5&叀踉Rd砟h磷f脢 5w藧y榘 堋曡詉拤S8x-僰~d@谻P菕暩婳簆驢舊0n\AU鹈6墟楇U&攦%毒鞲nm=喜( 圼fs0<2,鎤ⅶ缑鞱罼:聊︶' )Ы眲)聳f齮鎖P氳 U2庼釈pv⒒e魱撺韥$袽A兽蝄0厫Hz=稔阩堠%1攜蠽l瑓蚇[I[龆r煴}绉we轥鬬}! 粥:'邏渃祡酷M鑉搶茧焤8纳c耨 Tf炐腊+`詓:惒f冹 囈=e-a~【/媷烲;/䲣俗>悐娼\b 婭銖D夕{悪挘2味檬計&沕("&py%'}螆膳x瀷饣須觿&v萻!眎䲡/c)鯎嫨龋 侸vu/G" +檛>=簸!a诬B+耺l曭fUM?(觱欮5=F%"%眮傕瘸P!莨 ~  Nqz'KJ Ka.蝛O禆]#皨 蒒辸吵怐划H(鉓7%畑a#VC尲ⅵ㈩皝eglS扟a杧芔<夜波骓輧跇d:n_ $s/`┯^K颠g鵃轡歋Y$辭伹 +l顨K飾魧8紑醴)尬2D矫鄰1鯙u挲芓>佔妐r讵8q=齓5顀x o-C儥^呞 6=('湥倝 +"員!8臈Py2 84`n褙鯷n瑨Rf貽稥+7 Mr蓺G莳E踺V扥CF/畵r馰y AEh轐驣各/呭M<'l\灇z煰ng"瑾&煻o25)5擆6椆哥 疨蒂U屲;秜Z寎^栿.Uh镈g0徜暝e2﨩鷨艝7癚祽鯆+骡r畄=踭< 爝YZI!r#衽帊*yT剈U]=,瀘&j粡燓週a{<)<{`6z辸筢彃Z_HK枨搙~'鯾逈M 茽N3f誟撇ml筼&W%尣 Nc洫鈎V/ 条绺絻枏腠稦繗椔櫣Kh冨Q鐯 儍.鏢X挟r圯犧 o蝺"枙S鵤倫芙U+k跗畀2 唪=>6d髱炻P雺粰{嵤淛KX厺),?m釧:Q#z恹R腀TJq 硉&s秓(恒孛袛3葃琗V C_洦Nt鵪|";j:n~ I^鞢^2(史淩pX?偾K咶袞 恖m騡a?侤'U'M瑿頎痛覷庒Id嬟U錸X :`鏡m嬼巧発UP苕).*kxDyZC鷇憆Ld幤a@`36﹑奦儣<\蹸忶賄婮A爉S龓xz癍A懮礄冈▎l鯊r℡霞鋀徑U废.9A悰影.t╪f酞O协胖岅fY<*I鎐炱垔`;逭藙p3硾:1阧瞌" R戫g<0:岮%啾萦禣+7)$船($-M湵R9[Bh铮?-蕻鑚u涮颧YQ窤F貆伞mr9p恟7謳呎F,<+Q倅梧Uy%鹝&Z服-*8鯲-%秞薕锱yx嚒N瘍d圲# d5[p鸚顅墜蘺|硲4p;轭g$(邻d垄枋魯KG/笄kB鉍嵋珋髬即Y簎H桯4{丟焄 黩 P~Sx鮈统覶8 呌.|鍈 忥9q竓`w泖-o烀靱%噸\i>`屰{蹵T迸,jUK*豹Vcm捣JmM浓脚M┴[蹐絎壗昙z>馏铧熙䶮嗦嗓9c釵薕瞢櫖38g +黆黶 +符K{0G捽漗蟵y.3睲O俪w闖4Wt寿mC%%軴樃ηF笻F,痫溑$2oM饐葜餫 U锁扳娱s甚鳼Cq遖sZQ%XQv 嶒%騏o匕掺瘿?+蕹甦d9$澪j湀∥>嗆4xq儱+囧)&稀覤拍峆 䴕煏o陥Z9Z_禜蜵:駐図粑m"*O糾珽B梲D莢-涍HS斶%Ol98差]a徂悥)z3賒y凉栭O!* r鰍鎌洰樥嘐l 暎鏤⑵杤洔#脼x飱3罄J廚◢\糭]窽']YO娩吙] (J二融猖彻4衸齨鴉,)w啠罱讧:E萐氋撦秈{=z螈?/ +P浿麅絮{藺顚~n@屐繬円 ^銲* +KFp☉(湥灟k)瀤3 8 鞳4V佴蔳〇|岫w勞S#<氝iFk-\)'譖H邐臷O耮+岼 哆t鈮j1I邉`﨤滹弲堫農Q)鯺鎼擽仐甏!&稂jO蓎蜑e樒-!Z/縳沟囀Y!莈鐂l抺硊闾+__哰R}A虧爀0.&I鏌'澇:8gXg笸;+A鼂*f"騪b3)) I\阳2S`.t蠴<坒@7'剢孁壝o 诅瀳︾?星嫮W墷鈆韠 呋S%&'藇4腰嚢7趲'A幘淟V貘1丿*蓯Xt2z躏#篡]9蝽Ye眂蒸k帯雁x鋿鎿鯸Jl缦尀緋(捄1U礊鎮醍慗J軾吨=Q繁R迊L捀齿(栮!R菀酊槂7洏 杔.n巯'( +釨徺p$硺B艬rJ虜薘qdpKMS嚯@#甩冖6)C樤bB澪腺 ㄞ谾v慇聥-偯勍#` 賂邯侖禗&?鎐n~杙N麰枨=闀r~覠轨;o`荔聄a獙糺{媄宠?咾畨"u_趌FE&勭i\?>餃e穵[ ;VQL 玽'诞柙婇w0[屨u眥?較)^9&@珏]記S>'Kを瞷z5胨掍"1oS!i; 譓杧Wt蠇, rc茠ijHc囚BK垳D詩槌塧"Ci鋫∴跶吻塓@?繚)鉏憣鶕課忮KN萴2m8>xu硣5藑f抌uy"=瑒$[Nz厜VW\O#eP!PcHCt c75引焬D`%║K厺窜織cj|鈳y愌姷 IC鱭-鰤5zhvz椽?*|鵖Ev瓜痣o!'匛纣饠麋!/湽儁8FL~憞V紘$9l埌蚾,罰L:^點灞嶰=c=唶覿鈩o羨Qx ++K嬖兔駡嬆I辥閾n]a d f`逄hh駶復*躞|pkv睊压-[登q,7`蓝?R +9滪5>簵D燷頽5w# '?ОD豫r2U埯40熂嘵4i塬RI9 墶{+d墉恺栅帉沘x 影溂檫[l[轾変 纽L/败 糍浤*q逶Y┗|gLA-苆晄RF傠PI檵t0<甡_%鯀w'劝 莡2_>n稀霋貊秈毇擶8mh称=槣 +Vx3_w4?<&鉲傢+te vr>欷v[e?慏j]<葺幊6撫 ) 嬆E偽D`璆懝*2消D屔u!奲餱O 炃m這IA2裧闳翗g涺p蝘k剷P-蚘绦鰏J鍚p;%咃龝)e2 w_彅揖 +%┲寕6W偮谏昰 Q'赼僛W>Bc5 绹与EF" 騝 [.6{纰房嬖Kd翜m遧抍s弱夿鸼9(樢凍虸罚戠^@C剙AS瞊B噜艪q:厥飳)?寞@"睐&5挶UH稭爅熤Z5)メd8乂茹}蘃胼猔嗥阣迺扖//脀顂~娃/樸Vf[HT 響渔艡簞=讔;毤|伭貧+﨓菽潣鼡)o*,|濔G"锔ビJ粦yj邭較娜縭 杨鮲@仯叵N2C柴7粚鸋G T墖陧=%詷RG4稖p▆O贒zX珣I竔GqI稫60:匿邀m4 D薴a硁=^焬泸H3DむUd敹郱4碾廦Йx0:Oa}謵X楱蕨}匔Q慢*礧a甅0;袱({n"X|`K菧x踎童偖O4TK)譾診k"VwCI.}籚灟)L乀Xg-,汞3D燋&q攡桔Q櫺稲J垷鈁%]冖鹱棋~闹CW〃屘_lw"画苋"灬PV罶;放<縞孚陻o/' +"雚p~R)卥&榟FG#馹r鍚!3飿`p};污衐綱j 拴3g7煻 +Z充脟始VS&s"=4褤蔕h滭邖?殞砍8kC﨏9嗪醪鯦+h;蟏-滛哺)~眿嫸>厸QT))&QV3QO錪虱Ga氠2/菋 $剰?屢\\ (檬Oe5將晊l謚挢j蛅;枳t秾6嵚Q舰B蹙餂c1Q刪薪墑a翟!p9颠8e泾q圯a 釡挥覍"R; e饪l揋\f佳\w_詨F;(而案0涤I:鹦奣軃!R h/_\旭(涅RX p@ヤ +|>i2$擿L=9碣⑽唓觲 樏)<]忷阥j爍衆E脍垖铽Tc愎V)r+鯘瓾q誐p鲼?=萸蒅 傛鼤rlW窓QG;澘*紬=w泘hdP 峪縒c{造W篝 k=2D硋%肝魵枿^Cb:;s:遰O彊阩{调嶎-'躔Y!颼+痯膑T,'剞秷効 +n嵕!f\皰d楅茴 +"牐荗邗癞/蠶h砽 讬坝怯珥奍 +&|<麜湧N 璔.維诂'~茚.N]b沷泉$g,x救O?}称>{}(圻(\齳 w昔扴 `(隭fS$ˋf廔駡諤k曐蘂[糉Q$To酄ミv奸鍨W(}P╥ 况嬜tG +泏<\) 蟋S' |砶4擖?{瘺鎢祈_皋f疘邝zO纟曥$P贏I4呣4(Z!%鸢-6h#鐠.罗V]`甿潌` Gm.1qD4医;胹っ 鐫5~嬫欭j頼獹滱.擼pm4丯a釳撶揩喝(鐵熝韢<蓓}4>[ 蘣ndstream +endobj +485 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 5648 0 R +/FirstChar 33 +/LastChar 125 +/Widths 5656 0 R +/BaseFont /THDDQC+NimbusMonL-Regu +/FontDescriptor 483 0 R +>> endobj +483 0 obj << +/Ascent 625 +/CapHeight 557 +/Descent -147 +/FontName /THDDQC+NimbusMonL-Regu +/ItalicAngle 0 +/StemV 41 +/XHeight 426 +/FontBBox [-12 -237 650 811] +/Flags 4 +/CharSet (/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/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/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) +/FontFile 484 0 R +>> endobj +5656 0 obj +[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 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 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 600 ] +endobj +481 0 obj << +/Length1 1630 +/Length2 19123 +/Length3 532 +/Length 20039 +/Filter /FlateDecode +>> +stream +x诂碪T]矶%盍Y富{pww]赋pwww囙凛!偦籹箫]祍玘胠m隒9雹 +綈┙1P苻D咸滥惙5vqV斗暦鐤毣籴壬E渶F K{;Q#4M,,fnnn8r埥儑摜@ウ珹MKK鳠\a閘in狓 +幢w趤﨎黖`fi((jI蒏$湔@;爴 @雅仄 ki磗R天6&鰒存甜K`pv歑 簺1N稏挝栁s'#;羞杤&6.餡of瘋滌z佝谍S磜98Y:*妸籒悈锜芪{晨灕&.呆/踎樋V悜3t龘0祎v1蝤淃/槂撳渴pq洞3 +N@s#'S牫骭樋L?/98豿+邺_^K3衅帣錹N羞苕杤p鞀敐=欓遺S肮濥5 v嗿oFv6S<=鑟J }$7PB o濑W廅桮鸀+锤媿嵓戫=2Fv縲 胸9b宭-m<﨩Q誟r`R ?c3K 涌晼吴栴@SEK悏捞孺锾W3:賆r铏櫂䦆M章夷陬m跈醑邃攄%膇7鯻帄り狃范褝溄䜩秝x3sp鑉笜究q嘲oR 堸?e9#悡;@鏾週掰|)辇1;{VGddg鷚埝р硥嫇觃u蚩t毨-蹧[e昃 O婈赭2C85伧噊qW菊04M髚磞,8硷I屿忲b貾訾/ +饈H +Q7(:8i跛3N5⒔.e@is0╋oO*)霔続Lw:羄>R麚鷆=8 鶜5腶v4仭潨R$=>P帊 鮘檑茫蛵鸍坞 +匟屣構'ōV婭髛?^(Q阥o繦雐_F吿bX*顜[Pt2^滪_渜HqG橧#H材:唩掵颟腶俇h諞σW7灢ns執.葠7嚣4鐹{硕;鈫瘠K槉l哕蓲嬈詮犊渳蠆Z +蜍1A蹦Z=6 o袘沲╨欲%T湰塉@兞+b禧,幦A抎燻#**&鰗$踄l 哎F@,憎x>掴塒拈Ni果B頨絳≌/8諎め誩岆N奚誔朂z侥躵!I8W改5*鼗进|墩流捸7轨9咡渞酲铍悭m^耡运a桬,J銁鎴麈慏呠铏;?艡АRa + +莙.x啄ΕF^馀墝蛊藕i櫔Z嚈 掛a[猪岵}躘4J璃g幜c饭5~X4k!縟 ^x3T桨罻s奠b&:0#DZ珈辸㈢^瞺C詿[-筚齳#攭%嘖蟩9愆*曹侏→暋葏[#2jU槧%}悳D忡膪莲矮亓慃km媵餥H{-0砭&hmE腖鉖庘圼cD,"HR軣[!轪邐缁扺p暱l7瞗皥6邡X粣t3韐 苀杀S;,W讶丞K咊狞戤蠟xCu9O埦p肸胄伺>r 汱}T鶖⒀L姐烗*(橤,6e嗉堽7Ip澽XO慑牚 [赓8+虂譊蔢焐ゅ+鉟裐1怜<缶萗L$l*搷. ^阻?+L摙X窶;o緎厖\嵓錏^橍r7y/O睸/$7竜 慀3n" W1H夎]sj禿6叆f蒋5崨 n(蓃.8`53籯s蘈斷鱧{栮K渗e*铽胐9r铰迁YA ;轢匿-Щ8<x%內鸟2嬱⿱9鳦!礱f絷j瓽仙冣膩叀)^/%遟G4粼 万=p<抴堲Adm$向沯槪冴=伲?搮Z@g衖宱G戂鷮酈I跭稞憫~謦g`頧诟邞瀂碛vk伎]肂N厡J洷蛋颏V&fゲ=S0醿1G⒐*7T yi稇Lq慨k|7靿G诀矐P}昳懵09砸8+R蠑棆r陫腡吳&牟+8;魵n#酵"裥妇萗CV桘顤鱎迼J緪c闄&匒el閠篽買S,~&U趀愍E\N颷hR\5mi擳$`rら籬:鈿ZE~H虠R>vCjJ纩--j C%犡$禙c3坨呩$索叁3"獛踸鱭fnh 挾^q^譿肦蚝↙L5.僻Hb疜D +%0M瓲颵;q愅Cd肯岼DF夑蒉赣;\~樕2F鎃刢湢hHq铜-宬<&顣Jz秩<啖\S護 <磄逦b憷呿鑐]j脁妫.蕕檁1))親8?'/鮊)鮲t~ⅸ卷解 諝b镯♂8&洊`鏜m[V\q繸^qd'N[龟v/砎姖t鵅)bN1fm攍^~M咅CLJau婄媽焽霱e茝#J^:$E礭bj褵-餩#L鄎&)[*wd74TN[紃8柖B慯泺孬Γ热稵櫃鲝]爍6喋8}?翉s0鹭;2Sy[%(JW硙T露嘸(幵'+5僊Rb\雏勩沃U賙0t咳聺?龋%Y拟炕裋滓A|?柕3,P偅5嵏=!o馏*n妵 +n2/q⿴碡 沧K$h>`_澼萩撴 f}姜p茑- 釈櫽渳橱迓Fk@怆病>滚忕稇 U鑰6谞釡Rxa敏)椰;-_u%挪a鮐"剜UuZ宦S櫰覉5墏諁滖gQAV 氉h稀塷!__梕%5\n厧蓠 +0孥剋泷M彷8%蜀<说|烔c諘|暨_Ⅺ T;6墢潁嬂骪&Rpn秔D*Y漐e, x鱊酡纨蘅x脺$.>P|種=2瞷G.凖葁︺阚廋eケf髶O橑+櫰Uj葫u谟%p徿n){匋聗棌"秶(贺鵗)[/n鋻m甀,;4匔齑鲁潪蔋l暥!N旀/P 袩M鋮F*(嵩薦=囟鹲鍹殙杞9梱wg<595Z4.)嬴@嫈椬妇Z 42$B=wV椘z熪Ao?V)腑; +*▃w匿E[甿[5瑚潰0霢$ [^9'oY4殨4&cNI鍜<襦j2痄頻敚杨%Aw狕-J压崟猘zY5r魨斴rd岄+E騄g跅蹤u3槢0猴髏W9 x糾m朿?邋d{徉 +<壻`F枋濏瀛筌禃薞gk銟豄-o囔Z锏屫Tu8".簧归4莅P邩銌1鲜=Z栄f坁!j袠; 迃L撒M9蠔}8跾:囕锏x陁lS摘i剚濻 )(CP>璟靭7糶蝛槲熖&曏H腻鯊e;w砸幨7漨 y)aP鴮6釨飮岷u%'鎁p +i1g&鳸n橠彪=訰穩[铀醔%m泆嬪蝁鋝觓y忱t兦sy漄m掦和hb搅GEYW猰H卭K簞z觲Y鹤+PS农帹鐭5l獲@挲H氿奜j 趢y皃 -*3Sz湰@|忢y滝掘{q减q圻X<瘔鞄沠:艈憥k9馑3'o%掑$聰蒚Bi皠)S嬴嫚觀縇?.稩&)勀_(翬繳4#(竍<7(\租M羆畉忦Fh1X;F4囕&凜n闗w緳窩b鵕悂]+'v┩匒笉I[情盽}椖|H ;蛷9攅愌 +VD嗏:嘩,澜 察坾J(-o軧ó鍧磒m2#劖w唉$B=`aC嬏:䥽*z)途">曣;衯`I謥释》+lm憘穲 >莺灣鰨眦F,欄F +3喲垓%墕淾lu5鬯S陚gA詽JQ7新dM,7slm疅鐡0;簡悗粗L\~`s穦OZ鱧v勩e. +潰媥+DA =汌 樨*a/蛜玷9>饢胕.S6朊@帄aS猥瘄侎S0/h輧掩(|櫉65q師S懎釚ɑvh┠]瑵1 ;H犒 <歋蕓-迢遳齓薅ZY)V(>@y'J1瑸c萏殥H鈃夏\?iJㄐo多8児AL赕訛Bt&2鶮蒿 拭 餲蜁閮B曣O16D:/缪@悒*溳m襟興V栫君pE`i羽Ts蠱鯫:芵虭怵X蘊RR 鳜褄騁养萠\芓^69ⅵ媽程"櫫+熄岌j躢鄒麰麥佉+|鶴咆▎馰qR 趫⻊<猰愡/幸I 鼚頦銵Γ迀Q溚N鉗褲C覷G馢)閐Y蝢С檦u)J嶇P4]Ns韧B砛e幐QcpK獇 o蠔搱'^8妞&8杅;`榮0%3#l;酞給巳麝积壥 赵0旜)释$贿x5m[be=A|宬.飂殱JX靸籒2〗Z廠X?o+贛瑓濮鎨痫$?/牗蕝2Bi9%wU貎硩危驈s掫鉚哥j}O$,E"禞f鍲董s8歛纍:溄Dlc0銶锾Ec * F擙!媓'趃m骢񷆸 E橾=綱P●窻糱%E詵宔A惺踒*#+vP僶铹Ξ谺4m4姤V讴冖6垫啟 %螬_沌皙Q\譢?|q灅吐f鋩塬篋ц柒襴屖訸吝瑛xf槅 捤UV柧縗 D$s峫r恜誖潩滶LJd巷tl釿牨枯Mm05愹犲ri'>溚A槪(Ef +{YL[昐蜆钚$p幬仺瓕JH兛P矺汓H,滩'+眯媱雯L操舽諽焂) \坭閡柅9;o7磲.挿Xǹ蓮}.寞o婬%(插n"aN!犸EfT铈屿2孄柒肚pp諥搀V遥%!囀{lC日jBwM廩ho;8帪弽?9紗^膣窃畖:搗ty僈弧g/錑Y#湈;螺/|赌krp2⌒*罼=:r辏P壈G酶%怤}簤p=昣}抩Q +zQ_朒d~訐"釩7-XpT钫&lХ6嘚r 鉟4z~w嵂?轺梘皰荆軏褸博鬲xT╤ㄠ衵茍L廇鷱揙b鞙8硦昸N軦!_剡1q辠M趎,(7嬢)粀= 櫣>&X4觱尜W覸绮:銇H?EN5殅╆鋗 42i瘉T梵箓2傴告\OIS|r痷式^掞J恮羈f{;骀救0/]Sp,殡晹鴫 衡骟B峓[&梾鱔n寂@/y 䞍漃厧時?霪}S jaB躆[馡柾t蒜?J澦掼<B~篽⒑}铍3>|醞n甧3.)j俐幵諑 .+:疼c圃h)q綪s黤潀,伟(媸評棙駅倐迵凝 W/ H鵊}16H=贳60雚x鷶U堟狭夃g薽硟緱V桰稜f统饽恇櫧:砘1荕@SE_I岿_7诰6;玢u頓μ,跸W.螓錺?堨韋QJ`顕臹1C蜤t濺,p56慀 NY+櫹{M交@奣薬b齥 乡e;$嵊/墮磁巪hg0熴s齍洌矕Q膹邊,h-釐^缔%定--S唪狽麽x1勵拜z PM妩xr掮如樭xa<秄$﨓MJ>祟嶤桄譻N7缻S (堀盂!泄s8d噸囔b3USK.O@ 饶抰绔拃1鏮詘赈肼庛BRa苹h(U([鳞鳕 !鬈簼 #璳wQa$繗仧眥蚍兇M鄔#!r鰴蜆拎{伿<鰌腾[輎个节嵛坆fm萖秨2rve褚禥 庂?F-据华VcW霖篼" 蛒3迹倨昼顬O%翺v軤段蜦G曗灺夳櫎m'犲 +潚審2o8^U芒`巾奓纟机<凸y魤YT(0ピ﨩蓟ErR鱏惜闉譥郮&rOnL岽jh$弭jU u厪R讆顁盒芏p垐>u ;U署抁菆誾0邐翡7V氺挢t,4渘纚雖?檗iZ籟D瘮夨3汿z糓萜扟tCE孩#X厗3$徑婗,啬抻黄惌氉佛eu兕襖%鸅8&/L6粄 yMpW 蕋*$~柼(c?^nj=/7F9y<膝k锌+濫 鵘p2wc*Y祵鹀Z!N|sC6M勊,焷5嶯 K:7S軺gD2SR]緜責+$堓p : lkr蔽臾Q欒珰:b5涗]芹仓翛跮i;A梌袇-辝笮@虰焄幊 +褍谚Ⅰ龘3銁r iAi/慭.%a夦 +╭浶C{粹脞Q&'卄晪榪抬2鲌b颂"桟亅j{琞圸儠鶊X"婩鶊$W髊謌;vu瞪d饑.糒Y9b渡覶鐈節吣$nW$彗#徣捩咠\z{/ON0鎅塮嬊X!Q=蔢焥I枪懓 寠'?龎brc霷_yD鴇葰 K兡侯塓*魰B%藕N嘎I凴1X购翄@皡. 颣'6蚯&聏+嬞>!r鉅^(; +J阢鶺8T~a-骣7蒒必 (%i沀畗B瓹=;灋oη揤b[?╰彷$鏼$泷囖" +忡嶵%鑬j盓3熎'J驌)&洢蓝<7.)Q抆唛玓碜磱R魱Y汑i駿=Gs渐粇勛4艬P梧n9kN&塀衢焢佗全`=J#傔|顬/~0鼣e}罯*儘h7xd_Φ3D飨yh媦恕G(吀佗rUo胮V蕡`缿.>IU鶝8 +骁&:轵0虡 卂敡jΡ幛 $臁O贴钻=V怜娜q4w8G霢鈑 躘&55@D{禞^-i&+z:N^+U>=璘~*HnVV俕贕れ宍誇慘粑o蔅J 谚旂○蔙巤薂熎矽a>笫K+蘨щ呢陊W,聐rSt+═,) 忡 垱躀獇pCKKR-碙掙跂#鰼 鰶*蒇]箯1!ez9_w屌灺q荒{橃B=%獈)J<阩l蛆頛=恣`q螨胨緮~浝(xY&d锰c 馆&產a侊)砳x懅V噷V慷u胛籪q\z$X錯4+鯊1wED[甩3V薍,朡骯=恱肤銏4 +\鐓Y证:8犧y+爗釋>鏸=i朁氘Z?wJ@庂WO)w:8Q攌鴠熃採vzb 碧振m鞘7糟濓歛"<#8_魀袽6YwH伤歏4_ 立搘 ,橦n!M 0B2T鴊羸o胒a:琂筈/讜.崢2X`2蹦,潖3嬲SuM#65hqФe>q齞俤坑"蟬筫_篾xh]6= $4,肂 :銉蟠篋2Z 鶣惴鴴H _逬3cYR0AA4橝滩m鮐k Q咛-T=s椷記fX韊T酱趉;pb|a[B?佝I侎俉犾 +欩u趐]苣%(决gz7j[Eb 噿曂弜汽\扌/r鲘颫\犏p/嶳-鱥>d幫i を+` ;(C炤騖欛$K93'Ck囉铿u>抅2 i蔓刍!我¨F{v啽dсO筍2δ洈錰ο?釕q~9":_瞏忮i]9t斔lZs壼xp蜐 h=J(絭藂掀K %|u &U8奙釕]zU!熴"蒪┮I嫜u鯪晿霺B渲趓j鹰=哗p壬迭 壾$:Y2Lx彎b}顃佴]貂忛懸唞+爃芣肔&+賹pg }F芊㈡ο,牝5 膀@L鄢s8Y]zhtt螿[唻.凢?憤騼<莲歶該愁W AuR&~ 胥珊hj瀔 hm蟘謞NXM Tk篕飯^:蹬#"?Y/\sn陱$礚坐$┷4鐨_&ck }栆GVH哙akU雿鰔&瞛`U剘M頑嶦壹qdN9E妕2ezI(冟>罽!翋傥w5喈拓:l願9)'酋鲎勅寒聒(\猚X V夜%艚曩h鼑飽萑t彜K″y聁菞疫愤頒r3#N饏鉳1w焫#巵&餏eq)〤FQw灺k*$GP:jCS C姺@)3勮d皺仡0歋s鍂縗9眚Z兇癨晘埚966)>%lF趚劦7闑,€$ ^噖W莍#M喍>頹柳套妯脽墝柾"牉W徬,莣y1朌堽OL壖螿 W晀昉K曥遺A.杏E瓵}趫||澘?疛w+愜C!TG塉瑚禷b藤-9蜆躾FD盁 ti:Z遯筬|B7蒥1u紺# 鞤0鯖般♀O搇礭诗╡v磱IP囈1sk麑>勏过X繾s&幉Szb鑯>湆騉鰉愶7h `*騍:i肴X6 酞蔱3遛粼砽u峈魠顾勆E緄偑3\+逌򘢢0G异瑄咗E診婓\穭Z瘇D鴓CQ 伌瑬钦P$姑Ο嵛禚梔咟鬋|CmK鈟 譬0瑄\乵餐灣睾註}苚v峪 b2t剝p褽齱;睪2鼾`DHc竨韷R??縑蓑哂z嵧/@L劑嘒櫥 腩5喌0榹渡撥:蛽逻禌R=6凒于褾:牦O矪WOu( 呎Kn!潞!j>(騡匡岋讳72聴sC鳫(x怹1靋yw働饎搉翷5棻蕈U/?0鑑嶐橡~絣AS弭左3p=V9Y坣5>あQ蜛珹 +崧C緲鸏&zQ颶$h蒀 濥蠪奌-蜰抁蟶髨汤K785'\)办q:經聪d*懗婰鞗$1 +]憱毉83燝苋 塈O螋伎賌}稇匣\簬F秭湆5xZqo怜J:(凪?辗F%e癖㈩ +n$[}+Y{"4TA滖o}#隐嚂P絸YRy锭% 搔!f"/鸴栉闈е毑E饤摙8~б(d拣+8終y#X1硓彵m琎釂0俳歨荪>禹9Y廾吉h陳麨 痬r w瑸pL 袭@抰儦晼偵lu=鹱~Y镇BB1崛炊壯倱-噷z0q壉`捌级Yxw胈&賲叾讵5>^?b4w爳詄割梉'熑?l澠U肺y灖g&l4I柿嘟g_&*頿[)8粏Q 竅1醬2m/麠/Uj$珆-us痈6x煰寊鏕PYh饴z笩鞩皏b;@方8罝so>鑫瞄捊d杀j<从帗'mM0瓹O㖞癕F挐倕MW諹碿?6! 癃筟)愦jh]煓 <凓鎲ρ蘂>!著衾終I忽;-3,fw?嶭睙摰8岲K(a$-K&%悼U瀲槄豳v兩&硐喟R=鶖{$'1_p嫎yX缜&焮粠+%F2襵'绥^,0秺藎.O曚頏9B褺1靆?A10|E-佩縂 湬虘v氛n翆bL)x岋I8Pr 椌i |縰}簴聎酥o`鄪劵"#蹯y痜=卸欢植U秉j亯還煄椃A霘oP|淫夜A藚婬(iy+9蟑7Hb%.0>w闢bBM蚳U3诣emJ刔%K樲sW锱 f汰鼰P逍}勂萀嘦妫{訌*犿柾G喡r7劤=狨i戻7㖞1筎7淥鈍棡髬逴圭T@犗| +4.l筂W!漥绕^"采洦C: 煫傦`潈褲臭桙;鵖Xq}^D蘇t各,[鷤P轄Ca 锫磵E;鮱}# u簿@廅)溑俢)禯z,詈ゞC86甶6QㄍNg奴摻I铙陟F鞳彲x#.痒_影(jzL"距%辶崻来3忇椞iH=程鵺趐H吣藁婝泤a&l<}芽鍐满U汸訆{敎=a汎O% S牦i5&H5J$9! r麡*璯4宾C#>气U .>冑娍#T揋.d踺:睹跆鱚kk魱弇Fo蠏Icju-?/鶑喎聫?庝Y3翮地$眶鲊'怯C8F$夸)}俴溂A"廁>p迤h 暟颬1<]︵课2埽d8,O3窰俀蛬e芸*&裓G醢 掲洈U鎭ma簟匄蚇 Br洅衶抨鴃#<熛茿'E9皾FCK1衅悤黧夂5d扄梵窹Q笽z 胐腎梣1韗葘h熠蕅(鏠I:r恅6*\J戕酀v[慕{鏖犅=瀳艐牛骿C!:9j枌攌笐j靲公*诔8闷` q/q臟酧蜌u也莏;=勸j蝬颋洵'QC橢KD6侯Nv絔倔棉3狲榬⒈9突 +, mm o_磨&觥儕篑挪j牬牡V糕带e熶睼签Z祤懛儞巵}q剭U_鷖#毽g浶珖f a擃,悲 +蟠j8Hf )换秺簜a<赛7繀砖%+苌崢躗?,熽!鹼opLh≮!99哭XY嶖浅/5 浄襅|噪U3b俨<霪(鍔矬 [&湪Ytb著濥Y暷 @]筌ネt-0 赂夳N;v?1`e┅粼濶V饋=Sv官戲%畦5g)W鷲<(A瓇泖缄捿去閎[鯽榨x蛘 乩,*.}G歡.碐"?鱈翚#w 婴f甉弘 愘H䲟7Л荴2伭:@咚碘f7蔇LD蜺x聉 L6蟛哼C棌*劋0X国缪=厸漍銍b篣藬wK&熦鉖y#Z獩|铳c溙hK碬s\[4麆<惪 t 砰荱(9庐(臾忯祓*矩砤奘辘属7脡d壽涀*桵仹 +.跘輴5登 6襝惫P8 甁XK嶥僲0鯌悩a苳*&&銊溋!埵%:s=闤鶿ó+鍟V1沑䲡籱w湗<窝.旖=嗗r箝厼i萚UxA餁[簁胴壓°秅濷儏N3\昋Z鱊铫"偗煜靧䲡,臩y蓁瓭璖'卄*瘅蓵蛫溜>圿|'貓vr($宂`4鲦曎揌VUHTR佊2GMjⅩ:鐜$皞撲~i.3 猡_⑺奤X仨家屁~/ia笌醓鯳煣$敯,V鉃Tn2-6濙_6儭楮r.敻刟卅g酨7[c/钲qCN&[鯆X辳 ?┻g)鏖鑗试M-舻%与#鎏.蛹鉚 噟_凬地8嘽ku╣耈2赛}燼K蹛`'L栵&$眾.妪yN娷棾憌_J噀in杫沟o┖礸簍瀙Gn韌!磭0'BA簡緾驪U?鴤{s63J媎^]7-N +^豞''tё->鼊o0耛Gv&H,鎈|i弊琮鶯輫遬蕸穦b鉮=C0;'匓@岿衕'襹績弒c禇贞D剴╓臟)攪bs厃嗶蔳逥# 僡y9虴珜 庙AkO[" (<罈飒k~繥螫了鲴帾蒯勯M啁蒶6羵洞Qn竴导)罸(h髛+C蕒% +g搛侸^鷜颥K負zv毋呱2R釋浀)剪痝釴UJ$Y勤n鯁蒕'赱wZc垖(\@沾sF蜚o0v柫@帨VzN%.*誊7唜F諦嘑△j2@瑿r2+E鰎LjTh彬c揞} 簹{[`:9猰瑖辺{$苍A !幄 脖Xъ煞-樺0珧o?笉眏铦啜 d擁 止et恆2-峣2Z7R癠c*\琼=Do怬>厫牆<X嚀镒[g巆{Z詍f蚩w醩惨e橴,mz戱f牕S揲 X絯.7濇T瀆B.U彎q乏M疐/諛逷悤X榧扣I |$蔕荣)>7 89:A9I3 K賨 )SI鸅癪缜耩鱫鱚琬.堓$?嬩睎;执罼P庤px7嫊乯鸣讲粉I氰櫜'浼K"髝.蔁Q吣0A.?ъl愑蟁畩 信%N3標ХF9辀拴げ<纁ゾ嶄帽鏀驓遃y䅟樨"M+N爤o朹抡<嘏x sv7呀{鈟吶糼OQ!U/砏S羒o(O铽W淗欽唃'x-朔4酉0吋g撑+m憫o_溮1齅t 瑙﹜xq砱`(隳ZG𜚷掭" 7莍閙从s<}D+1rlfI瘉(晣縴U>勆7Z眩癙誣.棩獡琟屄藗 窲荑>]趙9S0E沬nhN 痥0~xp&^纆]皕x蠷h-_鴨結鱰NmYU[梧c'#炊锔 滀;*(2u踴Z薋nX挦(顫寝揭0则f'樨T髫胕悴 "o紩l1j崝臦X欺?鉰峐{銜JH 9蝦o鴳z傟/~髀:萮GWE両=.0[珿Q昐荱孶0K毵明道呚睔摚~k/,腎凙▇?,4@*`7痦 葫3d5籜張3C W椅篑|爂奰靭黧殹f蔯+T鬲V;鵘[wp8IpY(W枢祪 2jn堕盿韹崑拠諑&ヒB(r轹7Dk濗b賕71"鵀褧Fgm2赟`^ 罍焋3瞯彝(誙u鉗z寞k毛媥郫瞮q酕n5殢獊笘I 髽'82J'>5h殕f綇.=CD岿厊DL蒝圴遂竃埾7u頫j脯nFB瓱Q^5bI剌b柤鐋ek3矈岘PYM +9迚W夁內驩{6Dジ 0戻儘篐辵獯礋a,kZd0笖h,镂X^p`绒(mB鐋>持p)勎耴2橞/ 拏趀>QX嘗B鎕 +篪砏E鱞蔮khc聛灟檲S4>z奜蝩[y錵88珊t錦萳玷 5縩繙% *哤侙J5滉蠀94=然羅V娝l籮鷯Q竗炋i箮{碌ld麿<!嬆ot郧蚛:hY(!迗.氍]挛h繵痞>9濢HV}9戣cV=汄&窐v`N膿E剿)蒁Q\隯詨85 +亓佝犑舲8羭1昬鞮沂蹕w槺S# L?9!枎涻-o醻OZ 0&鼸 ,\槄%DrE萼皋擰蹌` m玽憁.cF沷萋倆?炛*t鑳謧 !㈢y 踜赛蕚~=<+d趠┿tV"熭髗:,楅-+O .@畲斱V/彦酩p銒 耙滾怘墠烡&Z埭树e龗奺!3 +*Q翉銅X爃榭鲮H兔 `俼漄#碑(緟z扸亿!嚸 +玥厞m +妒牢襹gR洪嵵寔q 酄DR# 擋<褎|?︼嫛,9姵﹉XD湋M +*|>`\ +稉汼"豁冥E黃扥`6M猇,諌禇 盈骑恁3t-R∴~~)M裣Wr-%觳8棋0\Dem?憚 蘌兽彵4m镧9h铑@碵i22醩歉AB笱駶_tx\h阑U 汳⺪-氩d根~燩\]ElS#镸霓6 ++O価趙努%@<箛Uf 嘃;f髣逊]VO .檞鐯 \棒l辕倌b;療鶶UOX济技鯤蝚o@?XA{'菈蔤俚O ﹒鹷?-u璑髾峲β罏暭跎菫FL鲥;b烩)齵P.嘍de:捣鴯A6蕐薜逪臀)6K渵l蒩 棿壿0|魨楢莡`Y﹗傡70約k籌Uqb礱~<`P菒U瞂,:乘 皯噌.矄3=)g7.詸榈 溞wl'鮥6鞻鳁2⒔c骹v钑5怉$钭j腉雀姁鏾雗砯J 蘝A+緣 燋埮淴p脬aS jM$礓|p_w葔飈踋8 e选 KF吅7測x  +龈G 够vdi癥STE鱒 xd 膏疑<咘鮒暧9'緻\l赀眛">Y42O2OT$壺W衛/栓w柑挀 &緵堕%z6w灿B辮妫{U8犯 `1趜k褺丫O皒-Jc`Eqq%i熎=|cpa񸝰3岀寓狫I峠鼸 胎醂虱R氊8焾醻跍 #%厄 b g19嬲1 潧毾;3")7茵>鲰8 鴰7 b巎PK@鏃h@酼B52椳<6騁h慏臙聬jxz曗飤D苛 o睌c钂祆)4!%糎e置.b;峬e4蕮珙*崊AA済妥曻辢遼(捎蓽-慧/嶑#s昔Jx[鄂;z#蒡{i陛瀪鈍茦罪67kぷ軕業I4皌 /3%B6_.\睃羙WE掿袷G杫6 +悍#攲7m*輓呹缄缱淉妁<裢颉嶽 ',:黐8鋓孜\5 +E陼铑F*耟 峵б﹖KH'1&菀rt峷斃髹}铢菓6G,H +J鮏kph儎洉攱钜狞鞕l~]@ wML-r犈%aNq3瘠>.温[Ca挭8<8蓊3榎\;3Z轱1xz~v>蚇(钃"Ys\蹖颽緊+.実鉀x预氿&△筚芶^靽S鶼驵]M9紱zoZm(M&]"=铯0懅d琶%<岺)褺暇oW;By綺 雙T乐)虞d真涋=ak6 S+夔,▍睍ZG&5O+0e瑖漲 刐Gr魑U(4n菇}濞盝W![^&B VO#杏霍o廩揎繧9z'笈] SS`剌o髦}暂酇Vi%s袤!B錰R蚌+:疩 .聃蜩1鳣$獭?K悪7J!ち*藕鬐lA>K'鯛焩R F蘭o`貆妳亃皱 猑闡袶醬f 頶豯賅!YyLj摣 箸崿XE趧韓襜昀 +ur栯鹁!ni圫(寃lxǒq8:綛 +畴纔2K惎贏堍V愍氬Eg筴孭:1 竒lZ:]陸掫%tx,\塤秲佾奫嵘桅佑 ^x渨&倬n纎剿铮犖呍 /螁隇岏z艍HP隌'棑6精:媆瞍U闸8}d(!隂蚢哢辍I-踬$揄U;鍾諚NN?钰2馫@e粮輞A)BJ5|魁唔5鮰貢q3p嶸强U[脉GLRC C騂专~礅禷h5=8i羥D椩彯 +ろx铰kY晠鋕萒`柸惃P1/弱*"錒馻鯓Q鼹諰:'&灤噉O顖"? 飙蘀$C卌跞|C癫3饒萮袍傿濂鎬喦;悐e晞.r=n&炪捳緆dY邈忏aJ)!覑P裭S嘷纻gp~&鯘帍舷馡茗呓7叽@az6钅虱;澔sw8KBRU唏胆精您6鸠髹浴玧G 霩?1☆賌揲bS1x$砓赋??cF卙kc~珌昍媝秡嬵竉L鱕柞L搔<瓧-'"!xbd唢洅輕KZ刁1挱"屎U秵6-缛夬y :7屣壌\l@w讣尵& y隡9驵罧瓴0n7嶱$E >n綪庼q蔹僸at怢臮i'F7蟡QH:~竾k$埧E`鱚剎l詖{穟锈y z絙ijY0Xo隦齚+洫琞偽骎榽C勄樃朄 lco焫<檡y 8偲聣鍛mK恱V殌氪~E;睖F浗tO勜F胡9+奕@w芝c幭H漌攱鯚C嫻[.闋'謃:磙ih-$皖/紀 W階拷'魤絾?[礥]qK*e畧5匚幅yE狷"鯳(54uY#yd尌垽踲郪]*z,讜搖;F=鸹_ 曚v@Y撺8'5&8鈨箔/<>!傧Sl配]賎,\5葲貜鶽=鯶{硘暴{阫鸧m悷a鏼靂K鳃=Vp)段.Y*;犰"~O葈漜>曁'j齶M琪锟s7]#j@^f9&嬞F_觼S獸擌\.驩颦婳?棡憅蜋鄱3灁盼疽瀠.-0:邔辥砪 滀蓏m軇HJ|屫p|劁耐T-:垽]鞀譳湍醺7'ぱ浍8說栝岂踊?d1釣蘅 緱Jh&;Lf辖 飕!%>P:&氣佊;[嚙K8伮紗筏捧&鼞韚1阹_(鼺Sh襰礱錖翢 ╉乙绨凯O氒YA桃μr秖馾/1@仲獰䞍┢Hs憳磢 薓 卷忷v!r隃劎$竵hB鴥_]#闤z牡J祆褘賧 6WJ 喧蕞G5'J5^5[ +|>]%观_枈玶p榲贞Q&  [餳?鑀()〗骛J齫帿}舮R碩F/ep 衩+濷G +#丵HV:j b鰕i鑷E\掍4a哞佴&盾 -饽J\xNズ痾z颒敂k硔悡` ]瞝E籹齊:6堆樤箞%d筀*uT匷1l+(o1vP貛閪+抟9鱜5/抄z梜儊-a\絵8蚰u胉 :i5n 延Ho4g:堎Hv窅.癲恱,$<*Z卅<$缁錬|-鱟賯_;y銭倶颼u{3O9垒T+ +b筽緔 7鷙iC嵽鯖臥X桵e瀅干\N5f摴_M嗜孕甸屜缏H褆篃玛鞺韀cm> AK6賃񖗢W[/姈矅锇櫔C娡#鵃7噋_9%幗99s)﹋濋M礩o欅叩袋Z滂l泮D24X祗\]2瑖 +缦敂6,#TJ遫⺮L'?膙C哏 腺z9蟳.Iu扉(q6'謜U嫞 ⺪Wb$cT鑾撛6XE姽0|璃a爥w琐MHvw祅赔R涡 >▓劘黢,ЪW勒L巢豎棈娑MUq_>忛,軹2豏>彨A猐挘Iaizp3漿:r3儗;汬塯 }F:3*支U郝壨簽丧''辋Nf塦L褄O唕"l{s嬳()坈髽7`嘔H撵P哖@%躩 怈 鼗祵rb>趢񖨿{瞐&祽䏝r柑 膺蓈凳慛/<阣Y.z?G駼5oⅪ齋黏陇塈陘I繝循 +駘韼V5`O局尫赗'峀oS 螉谦篃徐c{饤茢S鋶g/dT24}偍担#=?md!$@叴7膂q遙G墁9璼謪梘闈f.i%n廓 40YIhwBaW&寿q,脂牓湪:KE鯭1攁漎 y暩痨讻W+Qb芿R!>:X牸\u5QZ;沁合.3雤2痚`呐3涝MU兕琻懜阉5龀,褃/Yc >"竁C?&櫱]燐阥S糪1嘧扇朓臫捧3拴3戌痒/Gn虶鸛tl7)q7~于`#嬴輲`鐿u,婌ny傿黡Z酦盷漇-棔穠斴奻/2Z捡霓o逍纫)B2)薩k>婩 +拫'2虉藂=鈲]6d昳硅服j1zひ&8J>:B驉+彲1Jt玗 +総庍+Tz才粎{8>碤緋 si\齅偡O#X禚n28鄎V4趖"P"N凥藽獝 鈹 禎嵸zB=*=6涏tt)埳,>v襈_恡﹌A塐喖#渔6=鸾飭誃^S-嗬涺Q掮rK捜q%^ *襩莻俴讙%J'Z氡梵O%﨩巓|y抉q'-莈ndstream +endobj +482 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 5648 0 R +/FirstChar 2 +/LastChar 149 +/Widths 5657 0 R +/BaseFont /MMQLGF+NimbusRomNo9L-Regu +/FontDescriptor 480 0 R +>> endobj +480 0 obj << +/Ascent 678 +/CapHeight 651 +/Descent -216 +/FontName /MMQLGF+NimbusRomNo9L-Regu +/ItalicAngle 0 +/StemV 85 +/XHeight 450 +/FontBBox [-168 -281 1000 924] +/Flags 4 +/CharSet (/fi/fl/exclam/quotedbl/numbersign/dollar/ampersand/quoteright/parenleft/parenright/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/question/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/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/braceright/bullet) +/FontFile 481 0 R +>> endobj +5657 0 obj +[556 556 0 0 0 0 0 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 408 500 500 0 778 333 333 333 0 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 0 564 0 444 0 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 0 333 0 500 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 0 480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 350 ] +endobj +486 0 obj << +/Type /Pages +/Count 6 +/Parent 5658 0 R +/Kids [474 0 R 491 0 R 495 0 R 527 0 R 566 0 R 606 0 R] +>> endobj +648 0 obj << +/Type /Pages +/Count 6 +/Parent 5658 0 R +/Kids [630 0 R 659 0 R 664 0 R 683 0 R 691 0 R 718 0 R] +>> endobj +770 0 obj << +/Type /Pages +/Count 6 +/Parent 5658 0 R +/Kids [752 0 R 776 0 R 788 0 R 795 0 R 807 0 R 815 0 R] +>> endobj +829 0 obj << +/Type /Pages +/Count 6 +/Parent 5658 0 R +/Kids [823 0 R 831 0 R 844 0 R 857 0 R 868 0 R 874 0 R] +>> endobj +905 0 obj << +/Type /Pages +/Count 6 +/Parent 5658 0 R +/Kids [878 0 R 907 0 R 911 0 R 936 0 R 940 0 R 1006 0 R] +>> endobj +1063 0 obj << +/Type /Pages +/Count 6 +/Parent 5658 0 R +/Kids [1010 0 R 1090 0 R 1121 0 R 1126 0 R 1150 0 R 1167 0 R] +>> endobj +1231 0 obj << +/Type /Pages +/Count 6 +/Parent 5659 0 R +/Kids [1199 0 R 1239 0 R 1257 0 R 1269 0 R 1285 0 R 1292 0 R] +>> endobj +1340 0 obj << +/Type /Pages +/Count 6 +/Parent 5659 0 R +/Kids [1323 0 R 1347 0 R 1357 0 R 1369 0 R 1387 0 R 1413 0 R] +>> endobj +1437 0 obj << +/Type /Pages +/Count 6 +/Parent 5659 0 R +/Kids [1422 0 R 1439 0 R 1455 0 R 1459 0 R 1487 0 R 1522 0 R] +>> endobj +1565 0 obj << +/Type /Pages +/Count 6 +/Parent 5659 0 R +/Kids [1542 0 R 1569 0 R 1587 0 R 1600 0 R 1620 0 R 1640 0 R] +>> endobj +1674 0 obj << +/Type /Pages +/Count 6 +/Parent 5659 0 R +/Kids [1651 0 R 1685 0 R 1703 0 R 1712 0 R 1721 0 R 1728 0 R] +>> endobj +1754 0 obj << +/Type /Pages +/Count 6 +/Parent 5659 0 R +/Kids [1740 0 R 1757 0 R 1779 0 R 1849 0 R 1946 0 R 2002 0 R] +>> endobj +2072 0 obj << +/Type /Pages +/Count 6 +/Parent 5660 0 R +/Kids [2057 0 R 2074 0 R 2089 0 R 2102 0 R 2117 0 R 2139 0 R] +>> endobj +2163 0 obj << +/Type /Pages +/Count 6 +/Parent 5660 0 R +/Kids [2160 0 R 2165 0 R 2196 0 R 2208 0 R 2245 0 R 2259 0 R] +>> endobj +2292 0 obj << +/Type /Pages +/Count 6 +/Parent 5660 0 R +/Kids [2266 0 R 2294 0 R 2321 0 R 2353 0 R 2376 0 R 2398 0 R] +>> endobj +2425 0 obj << +/Type /Pages +/Count 6 +/Parent 5660 0 R +/Kids [2416 0 R 2427 0 R 2437 0 R 2471 0 R 2488 0 R 2500 0 R] +>> endobj +2549 0 obj << +/Type /Pages +/Count 6 +/Parent 5660 0 R +/Kids [2529 0 R 2556 0 R 2576 0 R 2587 0 R 2606 0 R 2631 0 R] +>> endobj +2701 0 obj << +/Type /Pages +/Count 6 +/Parent 5660 0 R +/Kids [2684 0 R 2703 0 R 2719 0 R 2736 0 R 2750 0 R 2754 0 R] +>> endobj +2809 0 obj << +/Type /Pages +/Count 6 +/Parent 5661 0 R +/Kids [2790 0 R 2811 0 R 2821 0 R 2860 0 R 2879 0 R 2891 0 R] +>> endobj +2942 0 obj << +/Type /Pages +/Count 6 +/Parent 5661 0 R +/Kids [2932 0 R 2944 0 R 2997 0 R 3023 0 R 3033 0 R 3052 0 R] +>> endobj +3130 0 obj << +/Type /Pages +/Count 6 +/Parent 5661 0 R +/Kids [3106 0 R 3137 0 R 3153 0 R 3170 0 R 3185 0 R 3192 0 R] +>> endobj +3238 0 obj << +/Type /Pages +/Count 6 +/Parent 5661 0 R +/Kids [3231 0 R 3240 0 R 3244 0 R 3288 0 R 3304 0 R 3314 0 R] +>> endobj +3357 0 obj << +/Type /Pages +/Count 6 +/Parent 5661 0 R +/Kids [3344 0 R 3359 0 R 3391 0 R 3402 0 R 3412 0 R 3444 0 R] +>> endobj +3474 0 obj << +/Type /Pages +/Count 6 +/Parent 5661 0 R +/Kids [3460 0 R 3476 0 R 3516 0 R 3532 0 R 3541 0 R 3556 0 R] +>> endobj +3615 0 obj << +/Type /Pages +/Count 6 +/Parent 5662 0 R +/Kids [3607 0 R 3617 0 R 3668 0 R 3702 0 R 3768 0 R 3791 0 R] +>> endobj +3875 0 obj << +/Type /Pages +/Count 6 +/Parent 5662 0 R +/Kids [3839 0 R 3877 0 R 3881 0 R 3892 0 R 3907 0 R 3958 0 R] +>> endobj +3984 0 obj << +/Type /Pages +/Count 6 +/Parent 5662 0 R +/Kids [3965 0 R 3987 0 R 3997 0 R 4019 0 R 4039 0 R 4047 0 R] +>> endobj +4074 0 obj << +/Type /Pages +/Count 6 +/Parent 5662 0 R +/Kids [4061 0 R 4077 0 R 4106 0 R 4125 0 R 4152 0 R 4160 0 R] +>> endobj +4195 0 obj << +/Type /Pages +/Count 6 +/Parent 5662 0 R +/Kids [4184 0 R 4197 0 R 4207 0 R 4221 0 R 4242 0 R 4260 0 R] +>> endobj +4298 0 obj << +/Type /Pages +/Count 6 +/Parent 5662 0 R +/Kids [4284 0 R 4301 0 R 4318 0 R 4326 0 R 4356 0 R 4381 0 R] +>> endobj +4430 0 obj << +/Type /Pages +/Count 6 +/Parent 5663 0 R +/Kids [4405 0 R 4432 0 R 4449 0 R 4468 0 R 4497 0 R 4523 0 R] +>> endobj +4575 0 obj << +/Type /Pages +/Count 6 +/Parent 5663 0 R +/Kids [4533 0 R 4578 0 R 4627 0 R 4650 0 R 4672 0 R 4697 0 R] +>> endobj +4756 0 obj << +/Type /Pages +/Count 6 +/Parent 5663 0 R +/Kids [4718 0 R 4758 0 R 4805 0 R 4839 0 R 4859 0 R 4880 0 R] +>> endobj +4918 0 obj << +/Type /Pages +/Count 6 +/Parent 5663 0 R +/Kids [4904 0 R 4921 0 R 4940 0 R 4959 0 R 4979 0 R 4983 0 R] +>> endobj +4990 0 obj << +/Type /Pages +/Count 6 +/Parent 5663 0 R +/Kids [4987 0 R 4992 0 R 4996 0 R 5000 0 R 5004 0 R 5008 0 R] +>> endobj +5015 0 obj << +/Type /Pages +/Count 6 +/Parent 5663 0 R +/Kids [5012 0 R 5017 0 R 5021 0 R 5025 0 R 5029 0 R 5033 0 R] +>> endobj +5040 0 obj << +/Type /Pages +/Count 6 +/Parent 5664 0 R +/Kids [5037 0 R 5042 0 R 5046 0 R 5050 0 R 5054 0 R 5058 0 R] +>> endobj +5065 0 obj << +/Type /Pages +/Count 6 +/Parent 5664 0 R +/Kids [5062 0 R 5067 0 R 5071 0 R 5075 0 R 5079 0 R 5083 0 R] +>> endobj +5090 0 obj << +/Type /Pages +/Count 6 +/Parent 5664 0 R +/Kids [5087 0 R 5092 0 R 5096 0 R 5100 0 R 5104 0 R 5108 0 R] +>> endobj +5115 0 obj << +/Type /Pages +/Count 6 +/Parent 5664 0 R +/Kids [5112 0 R 5117 0 R 5121 0 R 5125 0 R 5129 0 R 5133 0 R] +>> endobj +5141 0 obj << +/Type /Pages +/Count 6 +/Parent 5664 0 R +/Kids [5138 0 R 5143 0 R 5147 0 R 5151 0 R 5155 0 R 5159 0 R] +>> endobj +5166 0 obj << +/Type /Pages +/Count 6 +/Parent 5664 0 R +/Kids [5163 0 R 5168 0 R 5172 0 R 5176 0 R 5180 0 R 5184 0 R] +>> endobj +5191 0 obj << +/Type /Pages +/Count 6 +/Parent 5665 0 R +/Kids [5188 0 R 5193 0 R 5197 0 R 5201 0 R 5274 0 R 5342 0 R] +>> endobj +5491 0 obj << +/Type /Pages +/Count 3 +/Parent 5665 0 R +/Kids [5427 0 R 5493 0 R 5575 0 R] +>> endobj +5658 0 obj << +/Type /Pages +/Count 36 +/Parent 5666 0 R +/Kids [486 0 R 648 0 R 770 0 R 829 0 R 905 0 R 1063 0 R] +>> endobj +5659 0 obj << +/Type /Pages +/Count 36 +/Parent 5666 0 R +/Kids [1231 0 R 1340 0 R 1437 0 R 1565 0 R 1674 0 R 1754 0 R] +>> endobj +5660 0 obj << +/Type /Pages +/Count 36 +/Parent 5666 0 R +/Kids [2072 0 R 2163 0 R 2292 0 R 2425 0 R 2549 0 R 2701 0 R] +>> endobj +5661 0 obj << +/Type /Pages +/Count 36 +/Parent 5666 0 R +/Kids [2809 0 R 2942 0 R 3130 0 R 3238 0 R 3357 0 R 3474 0 R] +>> endobj +5662 0 obj << +/Type /Pages +/Count 36 +/Parent 5666 0 R +/Kids [3615 0 R 3875 0 R 3984 0 R 4074 0 R 4195 0 R 4298 0 R] +>> endobj +5663 0 obj << +/Type /Pages +/Count 36 +/Parent 5666 0 R +/Kids [4430 0 R 4575 0 R 4756 0 R 4918 0 R 4990 0 R 5015 0 R] +>> endobj +5664 0 obj << +/Type /Pages +/Count 36 +/Parent 5667 0 R +/Kids [5040 0 R 5065 0 R 5090 0 R 5115 0 R 5141 0 R 5166 0 R] +>> endobj +5665 0 obj << +/Type /Pages +/Count 9 +/Parent 5667 0 R +/Kids [5191 0 R 5491 0 R] +>> endobj +5666 0 obj << +/Type /Pages +/Count 216 +/Parent 5668 0 R +/Kids [5658 0 R 5659 0 R 5660 0 R 5661 0 R 5662 0 R 5663 0 R] +>> endobj +5667 0 obj << +/Type /Pages +/Count 45 +/Parent 5668 0 R +/Kids [5664 0 R 5665 0 R] +>> endobj +5668 0 obj << +/Type /Pages +/Count 261 +/Kids [5666 0 R 5667 0 R] +>> endobj +5669 0 obj << +/Type /Outlines +/First 7 0 R +/Last 407 0 R +/Count 9 +>> endobj +471 0 obj << +/Title 472 0 R +/A 469 0 R +/Parent 407 0 R +/Prev 467 0 R +>> endobj +467 0 obj << +/Title 468 0 R +/A 465 0 R +/Parent 407 0 R +/Prev 463 0 R +/Next 471 0 R +>> endobj +463 0 obj << +/Title 464 0 R +/A 461 0 R +/Parent 407 0 R +/Prev 459 0 R +/Next 467 0 R +>> endobj +459 0 obj << +/Title 460 0 R +/A 457 0 R +/Parent 407 0 R +/Prev 455 0 R +/Next 463 0 R +>> endobj +455 0 obj << +/Title 456 0 R +/A 453 0 R +/Parent 407 0 R +/Prev 451 0 R +/Next 459 0 R +>> endobj +451 0 obj << +/Title 452 0 R +/A 449 0 R +/Parent 407 0 R +/Prev 447 0 R +/Next 455 0 R +>> endobj +447 0 obj << +/Title 448 0 R +/A 445 0 R +/Parent 407 0 R +/Prev 443 0 R +/Next 451 0 R +>> endobj +443 0 obj << +/Title 444 0 R +/A 441 0 R +/Parent 407 0 R +/Prev 439 0 R +/Next 447 0 R +>> endobj +439 0 obj << +/Title 440 0 R +/A 437 0 R +/Parent 407 0 R +/Prev 435 0 R +/Next 443 0 R +>> endobj +435 0 obj << +/Title 436 0 R +/A 433 0 R +/Parent 407 0 R +/Prev 431 0 R +/Next 439 0 R +>> endobj +431 0 obj << +/Title 432 0 R +/A 429 0 R +/Parent 407 0 R +/Prev 427 0 R +/Next 435 0 R +>> endobj +427 0 obj << +/Title 428 0 R +/A 425 0 R +/Parent 407 0 R +/Prev 423 0 R +/Next 431 0 R +>> endobj +423 0 obj << +/Title 424 0 R +/A 421 0 R +/Parent 407 0 R +/Prev 419 0 R +/Next 427 0 R +>> endobj +419 0 obj << +/Title 420 0 R +/A 417 0 R +/Parent 407 0 R +/Prev 415 0 R +/Next 423 0 R +>> endobj +415 0 obj << +/Title 416 0 R +/A 413 0 R +/Parent 407 0 R +/Prev 411 0 R +/Next 419 0 R +>> endobj +411 0 obj << +/Title 412 0 R +/A 409 0 R +/Parent 407 0 R +/Next 415 0 R +>> endobj +407 0 obj << +/Title 408 0 R +/A 405 0 R +/Parent 5669 0 R +/Prev 267 0 R +/First 411 0 R +/Last 471 0 R +/Count -16 +>> endobj +403 0 obj << +/Title 404 0 R +/A 401 0 R +/Parent 267 0 R +/Prev 399 0 R +>> endobj +399 0 obj << +/Title 400 0 R +/A 397 0 R +/Parent 267 0 R +/Prev 395 0 R +/Next 403 0 R +>> endobj +395 0 obj << +/Title 396 0 R +/A 393 0 R +/Parent 267 0 R +/Prev 391 0 R +/Next 399 0 R +>> endobj +391 0 obj << +/Title 392 0 R +/A 389 0 R +/Parent 267 0 R +/Prev 387 0 R +/Next 395 0 R +>> endobj +387 0 obj << +/Title 388 0 R +/A 385 0 R +/Parent 267 0 R +/Prev 383 0 R +/Next 391 0 R +>> endobj +383 0 obj << +/Title 384 0 R +/A 381 0 R +/Parent 267 0 R +/Prev 379 0 R +/Next 387 0 R +>> endobj +379 0 obj << +/Title 380 0 R +/A 377 0 R +/Parent 267 0 R +/Prev 375 0 R +/Next 383 0 R +>> endobj +375 0 obj << +/Title 376 0 R +/A 373 0 R +/Parent 267 0 R +/Prev 371 0 R +/Next 379 0 R +>> endobj +371 0 obj << +/Title 372 0 R +/A 369 0 R +/Parent 267 0 R +/Prev 367 0 R +/Next 375 0 R +>> endobj +367 0 obj << +/Title 368 0 R +/A 365 0 R +/Parent 267 0 R +/Prev 363 0 R +/Next 371 0 R +>> endobj +363 0 obj << +/Title 364 0 R +/A 361 0 R +/Parent 267 0 R +/Prev 359 0 R +/Next 367 0 R +>> endobj +359 0 obj << +/Title 360 0 R +/A 357 0 R +/Parent 267 0 R +/Prev 355 0 R +/Next 363 0 R +>> endobj +355 0 obj << +/Title 356 0 R +/A 353 0 R +/Parent 267 0 R +/Prev 351 0 R +/Next 359 0 R +>> endobj +351 0 obj << +/Title 352 0 R +/A 349 0 R +/Parent 267 0 R +/Prev 347 0 R +/Next 355 0 R +>> endobj +347 0 obj << +/Title 348 0 R +/A 345 0 R +/Parent 267 0 R +/Prev 343 0 R +/Next 351 0 R +>> endobj +343 0 obj << +/Title 344 0 R +/A 341 0 R +/Parent 267 0 R +/Prev 339 0 R +/Next 347 0 R +>> endobj +339 0 obj << +/Title 340 0 R +/A 337 0 R +/Parent 267 0 R +/Prev 335 0 R +/Next 343 0 R +>> endobj +335 0 obj << +/Title 336 0 R +/A 333 0 R +/Parent 267 0 R +/Prev 331 0 R +/Next 339 0 R +>> endobj +331 0 obj << +/Title 332 0 R +/A 329 0 R +/Parent 267 0 R +/Prev 327 0 R +/Next 335 0 R +>> endobj +327 0 obj << +/Title 328 0 R +/A 325 0 R +/Parent 267 0 R +/Prev 323 0 R +/Next 331 0 R +>> endobj +323 0 obj << +/Title 324 0 R +/A 321 0 R +/Parent 267 0 R +/Prev 319 0 R +/Next 327 0 R +>> endobj +319 0 obj << +/Title 320 0 R +/A 317 0 R +/Parent 267 0 R +/Prev 315 0 R +/Next 323 0 R +>> endobj +315 0 obj << +/Title 316 0 R +/A 313 0 R +/Parent 267 0 R +/Prev 311 0 R +/Next 319 0 R +>> endobj +311 0 obj << +/Title 312 0 R +/A 309 0 R +/Parent 267 0 R +/Prev 307 0 R +/Next 315 0 R +>> endobj +307 0 obj << +/Title 308 0 R +/A 305 0 R +/Parent 267 0 R +/Prev 303 0 R +/Next 311 0 R +>> endobj +303 0 obj << +/Title 304 0 R +/A 301 0 R +/Parent 267 0 R +/Prev 299 0 R +/Next 307 0 R +>> endobj +299 0 obj << +/Title 300 0 R +/A 297 0 R +/Parent 267 0 R +/Prev 295 0 R +/Next 303 0 R +>> endobj +295 0 obj << +/Title 296 0 R +/A 293 0 R +/Parent 267 0 R +/Prev 291 0 R +/Next 299 0 R +>> endobj +291 0 obj << +/Title 292 0 R +/A 289 0 R +/Parent 267 0 R +/Prev 287 0 R +/Next 295 0 R +>> endobj +287 0 obj << +/Title 288 0 R +/A 285 0 R +/Parent 267 0 R +/Prev 283 0 R +/Next 291 0 R +>> endobj +283 0 obj << +/Title 284 0 R +/A 281 0 R +/Parent 267 0 R +/Prev 279 0 R +/Next 287 0 R +>> endobj +279 0 obj << +/Title 280 0 R +/A 277 0 R +/Parent 267 0 R +/Prev 275 0 R +/Next 283 0 R +>> endobj +275 0 obj << +/Title 276 0 R +/A 273 0 R +/Parent 267 0 R +/Prev 271 0 R +/Next 279 0 R +>> endobj +271 0 obj << +/Title 272 0 R +/A 269 0 R +/Parent 267 0 R +/Next 275 0 R +>> endobj +267 0 obj << +/Title 268 0 R +/A 265 0 R +/Parent 5669 0 R +/Prev 179 0 R +/Next 407 0 R +/First 271 0 R +/Last 403 0 R +/Count -34 +>> endobj +263 0 obj << +/Title 264 0 R +/A 261 0 R +/Parent 179 0 R +/Prev 259 0 R +>> endobj +259 0 obj << +/Title 260 0 R +/A 257 0 R +/Parent 179 0 R +/Prev 255 0 R +/Next 263 0 R +>> endobj +255 0 obj << +/Title 256 0 R +/A 253 0 R +/Parent 179 0 R +/Prev 251 0 R +/Next 259 0 R +>> endobj +251 0 obj << +/Title 252 0 R +/A 249 0 R +/Parent 179 0 R +/Prev 247 0 R +/Next 255 0 R +>> endobj +247 0 obj << +/Title 248 0 R +/A 245 0 R +/Parent 179 0 R +/Prev 243 0 R +/Next 251 0 R +>> endobj +243 0 obj << +/Title 244 0 R +/A 241 0 R +/Parent 179 0 R +/Prev 239 0 R +/Next 247 0 R +>> endobj +239 0 obj << +/Title 240 0 R +/A 237 0 R +/Parent 179 0 R +/Prev 235 0 R +/Next 243 0 R +>> endobj +235 0 obj << +/Title 236 0 R +/A 233 0 R +/Parent 179 0 R +/Prev 231 0 R +/Next 239 0 R +>> endobj +231 0 obj << +/Title 232 0 R +/A 229 0 R +/Parent 179 0 R +/Prev 227 0 R +/Next 235 0 R +>> endobj +227 0 obj << +/Title 228 0 R +/A 225 0 R +/Parent 179 0 R +/Prev 223 0 R +/Next 231 0 R +>> endobj +223 0 obj << +/Title 224 0 R +/A 221 0 R +/Parent 179 0 R +/Prev 219 0 R +/Next 227 0 R +>> endobj +219 0 obj << +/Title 220 0 R +/A 217 0 R +/Parent 179 0 R +/Prev 215 0 R +/Next 223 0 R +>> endobj +215 0 obj << +/Title 216 0 R +/A 213 0 R +/Parent 179 0 R +/Prev 211 0 R +/Next 219 0 R +>> endobj +211 0 obj << +/Title 212 0 R +/A 209 0 R +/Parent 179 0 R +/Prev 207 0 R +/Next 215 0 R +>> endobj +207 0 obj << +/Title 208 0 R +/A 205 0 R +/Parent 179 0 R +/Prev 203 0 R +/Next 211 0 R +>> endobj +203 0 obj << +/Title 204 0 R +/A 201 0 R +/Parent 179 0 R +/Prev 199 0 R +/Next 207 0 R +>> endobj +199 0 obj << +/Title 200 0 R +/A 197 0 R +/Parent 179 0 R +/Prev 195 0 R +/Next 203 0 R +>> endobj +195 0 obj << +/Title 196 0 R +/A 193 0 R +/Parent 179 0 R +/Prev 191 0 R +/Next 199 0 R +>> endobj +191 0 obj << +/Title 192 0 R +/A 189 0 R +/Parent 179 0 R +/Prev 187 0 R +/Next 195 0 R +>> endobj +187 0 obj << +/Title 188 0 R +/A 185 0 R +/Parent 179 0 R +/Prev 183 0 R +/Next 191 0 R +>> endobj +183 0 obj << +/Title 184 0 R +/A 181 0 R +/Parent 179 0 R +/Next 187 0 R +>> endobj +179 0 obj << +/Title 180 0 R +/A 177 0 R +/Parent 5669 0 R +/Prev 79 0 R +/Next 267 0 R +/First 183 0 R +/Last 263 0 R +/Count -21 +>> endobj +175 0 obj << +/Title 176 0 R +/A 173 0 R +/Parent 79 0 R +/Prev 171 0 R +>> endobj +171 0 obj << +/Title 172 0 R +/A 169 0 R +/Parent 79 0 R +/Prev 167 0 R +/Next 175 0 R +>> endobj +167 0 obj << +/Title 168 0 R +/A 165 0 R +/Parent 79 0 R +/Prev 163 0 R +/Next 171 0 R +>> endobj +163 0 obj << +/Title 164 0 R +/A 161 0 R +/Parent 79 0 R +/Prev 159 0 R +/Next 167 0 R +>> endobj +159 0 obj << +/Title 160 0 R +/A 157 0 R +/Parent 79 0 R +/Prev 155 0 R +/Next 163 0 R +>> endobj +155 0 obj << +/Title 156 0 R +/A 153 0 R +/Parent 79 0 R +/Prev 151 0 R +/Next 159 0 R +>> endobj +151 0 obj << +/Title 152 0 R +/A 149 0 R +/Parent 79 0 R +/Prev 147 0 R +/Next 155 0 R +>> endobj +147 0 obj << +/Title 148 0 R +/A 145 0 R +/Parent 79 0 R +/Prev 143 0 R +/Next 151 0 R +>> endobj +143 0 obj << +/Title 144 0 R +/A 141 0 R +/Parent 79 0 R +/Prev 139 0 R +/Next 147 0 R +>> endobj +139 0 obj << +/Title 140 0 R +/A 137 0 R +/Parent 79 0 R +/Prev 135 0 R +/Next 143 0 R +>> endobj +135 0 obj << +/Title 136 0 R +/A 133 0 R +/Parent 79 0 R +/Prev 131 0 R +/Next 139 0 R +>> endobj +131 0 obj << +/Title 132 0 R +/A 129 0 R +/Parent 79 0 R +/Prev 127 0 R +/Next 135 0 R +>> endobj +127 0 obj << +/Title 128 0 R +/A 125 0 R +/Parent 79 0 R +/Prev 123 0 R +/Next 131 0 R +>> endobj +123 0 obj << +/Title 124 0 R +/A 121 0 R +/Parent 79 0 R +/Prev 119 0 R +/Next 127 0 R +>> endobj +119 0 obj << +/Title 120 0 R +/A 117 0 R +/Parent 79 0 R +/Prev 115 0 R +/Next 123 0 R +>> endobj +115 0 obj << +/Title 116 0 R +/A 113 0 R +/Parent 79 0 R +/Prev 111 0 R +/Next 119 0 R +>> endobj +111 0 obj << +/Title 112 0 R +/A 109 0 R +/Parent 79 0 R +/Prev 107 0 R +/Next 115 0 R +>> endobj +107 0 obj << +/Title 108 0 R +/A 105 0 R +/Parent 79 0 R +/Prev 103 0 R +/Next 111 0 R +>> endobj +103 0 obj << +/Title 104 0 R +/A 101 0 R +/Parent 79 0 R +/Prev 99 0 R +/Next 107 0 R +>> endobj +99 0 obj << +/Title 100 0 R +/A 97 0 R +/Parent 79 0 R +/Prev 95 0 R +/Next 103 0 R +>> endobj +95 0 obj << +/Title 96 0 R +/A 93 0 R +/Parent 79 0 R +/Prev 91 0 R +/Next 99 0 R +>> endobj +91 0 obj << +/Title 92 0 R +/A 89 0 R +/Parent 79 0 R +/Prev 87 0 R +/Next 95 0 R +>> endobj +87 0 obj << +/Title 88 0 R +/A 85 0 R +/Parent 79 0 R +/Prev 83 0 R +/Next 91 0 R +>> endobj +83 0 obj << +/Title 84 0 R +/A 81 0 R +/Parent 79 0 R +/Next 87 0 R +>> endobj +79 0 obj << +/Title 80 0 R +/A 77 0 R +/Parent 5669 0 R +/Prev 71 0 R +/Next 179 0 R +/First 83 0 R +/Last 175 0 R +/Count -24 +>> endobj +75 0 obj << +/Title 76 0 R +/A 73 0 R +/Parent 71 0 R +>> endobj +71 0 obj << +/Title 72 0 R +/A 69 0 R +/Parent 5669 0 R +/Prev 63 0 R +/Next 79 0 R +/First 75 0 R +/Last 75 0 R +/Count -1 +>> endobj +67 0 obj << +/Title 68 0 R +/A 65 0 R +/Parent 63 0 R +>> endobj +63 0 obj << +/Title 64 0 R +/A 61 0 R +/Parent 5669 0 R +/Prev 55 0 R +/Next 71 0 R +/First 67 0 R +/Last 67 0 R +/Count -1 +>> endobj +59 0 obj << +/Title 60 0 R +/A 57 0 R +/Parent 55 0 R +>> endobj +55 0 obj << +/Title 56 0 R +/A 53 0 R +/Parent 5669 0 R +/Prev 47 0 R +/Next 63 0 R +/First 59 0 R +/Last 59 0 R +/Count -1 +>> endobj +51 0 obj << +/Title 52 0 R +/A 49 0 R +/Parent 47 0 R +>> endobj +47 0 obj << +/Title 48 0 R +/A 45 0 R +/Parent 5669 0 R +/Prev 7 0 R +/Next 55 0 R +/First 51 0 R +/Last 51 0 R +/Count -1 +>> endobj +43 0 obj << +/Title 44 0 R +/A 41 0 R +/Parent 7 0 R +/Prev 39 0 R +>> endobj +39 0 obj << +/Title 40 0 R +/A 37 0 R +/Parent 7 0 R +/Prev 35 0 R +/Next 43 0 R +>> endobj +35 0 obj << +/Title 36 0 R +/A 33 0 R +/Parent 7 0 R +/Prev 31 0 R +/Next 39 0 R +>> endobj +31 0 obj << +/Title 32 0 R +/A 29 0 R +/Parent 7 0 R +/Prev 27 0 R +/Next 35 0 R +>> endobj +27 0 obj << +/Title 28 0 R +/A 25 0 R +/Parent 7 0 R +/Prev 23 0 R +/Next 31 0 R +>> endobj +23 0 obj << +/Title 24 0 R +/A 21 0 R +/Parent 7 0 R +/Prev 19 0 R +/Next 27 0 R +>> endobj +19 0 obj << +/Title 20 0 R +/A 17 0 R +/Parent 7 0 R +/Prev 15 0 R +/Next 23 0 R +>> endobj +15 0 obj << +/Title 16 0 R +/A 13 0 R +/Parent 7 0 R +/Prev 11 0 R +/Next 19 0 R +>> endobj +11 0 obj << +/Title 12 0 R +/A 9 0 R +/Parent 7 0 R +/Next 15 0 R +>> endobj +7 0 obj << +/Title 8 0 R +/A 5 0 R +/Parent 5669 0 R +/Next 47 0 R +/First 11 0 R +/Last 43 0 R +/Count -9 +>> endobj +5670 0 obj << +/Names [(Doc-Start) 479 0 R (Item.1) 1160 0 R (Item.2) 1161 0 R (Item.3) 1162 0 R (a00036) 1566 0 R (a00037) 3302 0 R (a00038) 1267 0 R (a00039) 2467 0 R (a00040) 1539 0 R (a00041) 2486 0 R (a00042) 1366 0 R (a00043) 1367 0 R (a00044) 1540 0 R (a00045) 2469 0 R (a00046) 1567 0 R (a00047) 2466 0 R (a00048) 1237 0 R (a00049) 2465 0 R (a00050) 2468 0 R (a00051) 5136 0 R (a00077) 985 0 R (a00077_1d2f2751b0865045486c9aa59d0d0971) 3275 0 R (a00077_20541305548441e5dcb2e1e7e6f300eb) 3278 0 R (a00077_2391bb18db5f620e0e9fb848ae5ba5e9) 3265 0 R (a00077_27df2817055bc099821d96eb60a40b34) 3281 0 R (a00077_31471b5e27bda51832d0fa49bd6d9b54) 3251 0 R (a00077_5361ef75bfbdb469b5cc31f0060a2670) 3267 0 R (a00077_564bab93ef6a268a5de2fab885c1d32a) 3269 0 R (a00077_5e16ca335dfd7394527f602da879fca2) 3284 0 R (a00077_7a520a57d7d0541524f34a7685635597) 3272 0 R (a00077_cfd36e02c7498d766ff802575e981612) 3256 0 R (a00077_e0b137a3875ad12a99e5e3e0e177fd12) 3254 0 R (a00077_e707c39412e09d3a47f0b3c5dad33725) 3262 0 R (a00077_e80af46ceef63eab3c786525370ae720) 3259 0 R (a00078) 986 0 R (a00078_4b1b1436b50ed7638aece35f41421196) 3298 0 R (a00078_4da86e9feb5e5835eb15163c2cb61116) 3300 0 R (a00078_a9825b5977b2d4dec66e6bd09e6ae6ea) 3295 0 R (a00079) 987 0 R (a00079_1513a9e88921750d2a611b518f6fc207) 3311 0 R (a00079_9a84c69ec5a4705ccb1ca99fcd120add) 3309 0 R (a00080) 988 0 R (a00080_16a3a3056f44b7245ce085b937a269dd) 3339 0 R (a00080_447eb700ea7a185e0f155934995d49e5) 3329 0 R (a00080_468c04fff28e784f93ebc3f0849211dd) 3335 0 R (a00080_4c6f843219271d25766ee5969e435d1a) 3327 0 R (a00080_5e274a8f8b5fb2b3999c54fe27c76e46) 3333 0 R (a00080_6df929b448ea98bc44d41f5e96237bda) 3341 0 R (a00080_78f82878f3fd0e7401c7d7d3b3fefbef) 3337 0 R (a00080_94fcc9f5c47f419040d849ce58beae35) 3331 0 R (a00080_9dd8edeece221c853a4c4516bf1b01c2) 3321 0 R (a00080_c39694ece9526b84012f90f2bb00af9f) 3319 0 R (a00080_e261f08e1556287d241764fb2e99fc26) 3324 0 R (a00081) 989 0 R (a00081_164124d48fe85bc98d9a300382a5245d) 3351 0 R (a00081_5595902fd42d874e35a70206fad8f6d0) 3353 0 R (a00081_b42c7af6114fde5d21206a2e18a7d3ee) 3349 0 R (a00081_b5801722740492e69bcc73687476009f) 3355 0 R (a00082) 990 0 R (a00082_17aacf7c5e2046c1f3ab50faa1b2f7eb) 3365 0 R (a00082_19b82696bd84a803250cbf9812f2f125) 3377 0 R (a00082_31f25efccba9fd043047133d0d0ba5ab) 3369 0 R (a00082_a408ca8630154ebd039f37a828399f7b) 3380 0 R (a00082_a6bfaf327ce839ba70accd71014398d0) 3386 0 R (a00082_b973f2e16c2883a8a0164d716cce5a31) 3372 0 R (a00082_c3d1bfbb1abde31973c015de97ce2f84) 3375 0 R (a00082_d6bd03239291629676e4c0286ebb650f) 3383 0 R (a00082_fda184638130452f3570966acc5b97f9) 3388 0 R (a00083) 991 0 R (a00083_20fae11b540a561c622a0d74cb4b9f97) 3399 0 R (a00083_5e8637b1514d03eb3eb12dc9a502e27e) 3396 0 R (a00084) 992 0 R (a00084_c3fa0fa86689e3e7c039a16c16861dbe) 3408 0 R (a00085) 993 0 R (a00085_04833004cec509a41c502429df308e35) 3429 0 R (a00085_0560495c60c68d62617ff1f3d0c424a4) 3437 0 R (a00085_0bb4f34164e7207c2db26b77f23ccfff) 3420 0 R (a00085_3592a1f5ae100db2ed9c0810b41c7bc7) 3423 0 R (a00085_503c2994a4e52300516e2b820f0fc65b) 3427 0 R (a00085_5ed2615cec9e633d90ac5968771976eb) 3440 0 R (a00085_668cab7d54ff0a2fc2a2179ca06b0798) 3425 0 R (a00085_68204df6bde3e3c27271ebde10579a57) 3434 0 R (a00085_a312da7b5f6441140721ec7e55f345a8) 3431 0 R (a00086) 994 0 R (a00086_cca775e46d4405b7775b328f7694f7e7) 3451 0 R (a00087) 995 0 R (a00087_e8eb428c05bc1dee022246a3063d277c) 3470 0 R (a00087_fe557d333c06cf65f52023f45f5b0a3a) 3472 0 R (a00088) 714 0 R (a00088_0cd09beee671e7e9efb0b4aced10249e) 3485 0 R (a00088_0ef3ae2764714bf90620075c374c262e) 3497 0 R (a00088_1df6aa054ef2fa634ac4c6f418228285) 3488 0 R (a00088_2d9732cf5752d30bd11cb25dc7d0c8d3) 3522 0 R (a00088_3347ef1b6e8581402445d1a0280c7a14) 3500 0 R (a00088_4289c59840b128f2f6526e9da2711d47) 3525 0 R (a00088_70297b3e6d4eaae7bd828cb50bd1efe3) 3491 0 R (a00088_79510aa86d3fa0a0fc6cfc49b1da7279) 3482 0 R (a00088_8f6b08a5ba2a8d75ca7279e2056aa8c6) 3494 0 R (a00088_97f9e1fda815bfb8b1f4577c355ade20) 3528 0 R (a00088_a5f58074435cdc180f17de69651beebd) 3519 0 R (a00088_db7a3fadb68df5fdd37e8b91a2c751ea) 3503 0 R (a00088_e3aa9cc25e45b663e6aabc54c013019e) 3512 0 R (a00088_eb9fcbd3c9b0a795dcd63f33c323d65c) 3509 0 R (a00088_ef661afb3aa82f0437d2ed8d3c20be76) 3506 0 R (a00089) 996 0 R (a00089_aacd5fa1806e0f0dd0bc96dd36507ad8) 3537 0 R (a00090) 997 0 R (a00090_1abbbe7bc5d7d033c727691528b85b8d) 3549 0 R (a00090_b684c17bf48c8e3b3fcf97b06b4c6ee1) 3546 0 R (a00090_c9273cc1fcdaeeddc523ca9f34977e06) 3552 0 R (a00091) 998 0 R (a00091_0ec6a6cbcbfd191d393738c16d54e5e1) 3585 0 R (a00091_266ea23d75c83f15b915ce54100e51c5) 3594 0 R (a00091_308463cc7b3d45d2dbcdcedd4cde9bb9) 3570 0 R (a00091_4619e69ec86a47f6abe945b39ec7f63a) 3573 0 R (a00091_55be3d5413ce49c5c4f5576def12d7ec) 3576 0 R (a00091_55e7764a9f6ed05aaa98076b9f6770a5) 3579 0 R (a00091_7d472d8b3c41618d39c93c4ca92fb3f4) 3561 0 R (a00091_805f8fd5533a6d4b6793e0645005da4c) 3597 0 R (a00091_967def494c68cfc8a08d5a6c4dbbc25d) 3603 0 R (a00091_a3f2d9cb20290019b2743e8df31a2f8b) 3564 0 R (a00091_a6d51f3fa5da9b7f9cd37ae69600c04a) 3600 0 R (a00091_b15853725b233d526b291db0347d4ecd) 3567 0 R (a00091_babb9c2be394477af97f79507bcb4c86) 3582 0 R (a00091_e27f4949613fe3c1de5a839af01d99dd) 3588 0 R (a00091_fa0fe6ca88f692d22af70ff007411252) 3591 0 R (a00092) 999 0 R (a00092_4dc3294d67d705f7248ef57e4259424f) 3612 0 R (a00093) 1000 0 R (a00093_0c816f34c0187f2154c91a18d3ad87c8) 3661 0 R (a00093_1deb2899508216804823498a69378118) 3622 0 R (a00093_3983b45977630418d3038231aa8b68ed) 3642 0 R (a00093_3ad48284f7a91f78bb24096aad89056e) 3698 0 R (a00093_494ea6767a8a8fab7abe96b799d6c3b3) 3699 0 R (a00093_4f39f0fe6a820d260fe6cddf9ccaa832) 3686 0 R (a00093_5d8996950cdf3d8130cc3ad340eb9dff) 3657 0 R (a00093_6157452bdc9921f44b2e22e4b5969258) 3662 0 R (a00093_7675e6b9adbddbd545d3aac8ca092fbb) 3664 0 R (a00093_7a58d95f7f7827789ff52500e3d16c34) 3696 0 R (a00093_7f7bb2145afba5df00c6e10ddefa8ae1) 3658 0 R (a00093_8082509468b2ac80ed7746aa1a5bc4f7) 3663 0 R (a00093_8da121d6e50992ec55778f9b2141552d) 3666 0 R (a00093_b4622e2599ff3a592db09219b2641682) 3665 0 R (a00093_b6e9a75167bdddd561373bc5b6ef501c) 3697 0 R (a00093_b93e351c3abba0c700b26b7b07e9527d) 3660 0 R (a00093_dc69abadd5aa07c7d74f9292db2cd93c) 3659 0 R (a00093_e292b8977f6b81265bf14e1676face3e) 3652 0 R (a00093_e9205a565ea3c911a785fc4e87c91a58) 3700 0 R (a00094) 1001 0 R (a00094_025ffa46b799fa6952719c499a3ae17c) 3740 0 R (a00094_0f27e16ddcf7199d514968204966f559) 3722 0 R (a00094_2541fae506eb111ff1be2372e0919839) 3743 0 R (a00094_619d9755a5d4aaabdb2e5e6ea4c1e0bf) 3752 0 R (a00094_6af8a59d0ab8967aacea749d6e59ac90) 3749 0 R (a00094_71721395f1c7c42b8bcc111b339bea7c) 3746 0 R (a00094_7a59f0dad059786238d8ab604630e7f3) 3716 0 R (a00094_7f0ab3fe3bcf1e3ed9f5950cb4474ec1) 3755 0 R (a00094_85d7f35662f7be20cd84e789a290dd4b) 3719 0 R (a00094_8cf0ca17b115ff2e3071b3fabcc43b53) 3710 0 R (a00094_8d4e08d051b35b1c710c3be5b8bbfa05) 3734 0 R (a00094_a81fff4836049cb3c018304d77337554) 3737 0 R (a00094_af7a8a5310ad945de38f5b3ac755ae7d) 3728 0 R (a00094_c8f124419a231f38bb6cdf5041757a27) 3731 0 R (a00094_dc7001682017599549f57771f4cd1b9a) 3761 0 R (a00094_dde3cf9a57445814d01b3c67da08afdb) 3764 0 R (a00094_e1e60d56ea87dfa09230e25ca5ecf2fc) 3707 0 R (a00094_e45b31a0a277dd5325ad2a332358b21b) 3725 0 R (a00094_e57281f5bef284bc9545834ef8ed4a96) 3713 0 R (a00094_f4a1d8cfbe270393a2de02b0c743e474) 3758 0 R (a00095) 1002 0 R (a00095_280a0c2a93544e597f92bbacf36ee1dc) 3781 0 R (a00095_4da1d7815516cd2b5bda3a66fdf05198) 3784 0 R (a00095_8a661a2d544100b82d0d14a1985083d5) 3775 0 R (a00095_981392e295db4d024eea95805c51c371) 3778 0 R (a00095_c8afa29e0aa5e789d6929b366d98ba56) 3787 0 R (a00096) 1003 0 R (a00096_47140aa52cb9e6a2de38fdfc5da08df1) 3802 0 R (a00096_51bbbe3099c10ef26119ddc2aa51e35e) 3814 0 R (a00096_569382bc53aa64c227e57efe88fe13ac) 3805 0 R (a00096_6f8c65cfc8242197bcc3cb5b4735b16f) 3811 0 R (a00096_8587178a29882482be20c2822b402b96) 3808 0 R (a00096_858f970feb7462871c814953697a8ad7) 3835 0 R (a00096_a80e8d0fc768525fa3bfb3d4e4cf260d) 3820 0 R (a00096_b20096ae4953caaa42f6bb2373c4494c) 3826 0 R (a00096_be2c98748e180c1747823cd2fb8ecf0e) 3823 0 R (a00096_c92d2f194f096e84791f95d7e8f0ba92) 3832 0 R (a00096_e82f68cb91d8688a619d55d2a8572979) 3829 0 R (a00096_ed119a030ebd3bf7c30a12071c27d441) 3799 0 R (a00096_f1684ad96b8acf54154688df3883b801) 3796 0 R (a00096_f20186ef441ef5b600e8544a0f2d8d81) 3817 0 R (a00097) 1004 0 R (a00097_134ec55c3d5abaebfed4ff8edfedf1ea) 3862 0 R (a00097_2fca02673894f222b01ad2d3a4d7dd79) 3870 0 R (a00097_5960d82e7aca2986b8509a0d87d6cbc8) 3846 0 R (a00097_5a3116623c6a7da7c82db6c301ae0da3) 3865 0 R (a00097_606d2729bf411ade69044828403a72af) 3868 0 R (a00097_6925d46b2819adb474a5f0036f02dd7d) 3852 0 R (a00097_7092781c50dcad50f473888585c85b83) 3855 0 R (a00097_8ae6395641b7752dce47881e20cee970) 3849 0 R (a00097_a6487b9c1c773b32656065d0e19bf142) 3858 0 R (a00097_e87913860c6b05c6e6b060639b950098) 3860 0 R (a00097_fb60f42593d305ea36d9b4303722696e) 3873 0 R (a00100) 1064 0 R (a00101) 1065 0 R (a00102) 1066 0 R (a00102_2e52037249bb98d7bbecf42e275beb07) 3926 0 R (a00102_4350350ce0d4595876743d4c0a720bcc) 3918 0 R (a00102_55735650f879293d9b7b5fda6753d147) 3942 0 R (a00102_6a327c0ffd40f69fbcd5f01f12e5745c) 3922 0 R (a00102_6aaa9da3d0f8d4c0799516d46d939942) 3934 0 R (a00102_72d99b1623afa14bd58c667b748c2ddc) 3928 0 R (a00102_7bf0c086c7c41c12cc63324327932d91) 3946 0 R (a00102_876c82c946543cd70c141e41417138e0) 3944 0 R (a00102_8ee5e2c8e517d6e4f2198057f81e93c6) 3936 0 R (a00102_96eb4534b574ece96ed36806039f73d3) 3916 0 R (a00102_9f6c329c04baba17fe0f5b2a6597d713) 3932 0 R (a00102_bf4401501f1389872141a78b63f325a3) 3940 0 R (a00102_c72f8777ccc45ae274449ea7a9f3de04) 3930 0 R (a00102_dd685a0f8b5e76a2687cc0f306813bfb) 3924 0 R (a00102_e7250008b68d1909d54040515eef8ebb) 3920 0 R (a00102_ee60b8757bacab269b0ccd7c240bf01d) 3938 0 R (a00103) 1067 0 R (a00104) 1068 0 R (a00105) 1069 0 R (a00106) 1070 0 R (a00107) 1071 0 R (a00108) 1072 0 R (a00109) 1073 0 R (a00110) 1074 0 R (a00111) 1075 0 R (a00112) 1076 0 R (a00113) 1077 0 R (a00114) 1078 0 R (a00120) 1079 0 R (a00121) 1080 0 R (a00123) 1081 0 R (a00124) 1082 0 R (a00125) 1083 0 R (a00127) 1084 0 R (a00128) 1085 0 R (a00129) 1086 0 R (a00130) 1087 0 R (a00131) 1088 0 R (a00131_1273664aba3e6a2a46e87dcb1a5f19ad) 4480 0 R (a00131_1d5ce7047650f3ecee0814dbc8714099) 4488 0 R (a00131_5320d4457a472d8888ec1905bc0e0a1c) 4475 0 R (a00131_5f2e1fcf0055d20ce17664b1027bb9eb) 4477 0 R (a00131_692d80636342d564422ccd9296ad568d) 4491 0 R (a00131_88460bea09a462d0e22511cb567eee14) 4484 0 R (a00131_890e822616a6839dfbf51dcb591b8e99) 4482 0 R (a00132) 1111 0 R (a00132_1273664aba3e6a2a46e87dcb1a5f19ad) 4506 0 R (a00132_1d5ce7047650f3ecee0814dbc8714099) 4512 0 R (a00132_692d80636342d564422ccd9296ad568d) 4515 0 R (a00132_88460bea09a462d0e22511cb567eee14) 4508 0 R (a00132_890e822616a6839dfbf51dcb591b8e99) 4519 0 R (a00134) 1112 0 R (a00135) 1113 0 R (a00135_534d9e416324fb8ecca6b9cb4b1f6a6a) 4540 0 R (a00136) 1114 0 R (a00137) 1115 0 R (a00138) 1116 0 R (a00139) 1117 0 R (a00140) 1118 0 R (a00141) 1119 0 R (a00142) 657 0 R (a00142_authors) 1137 0 R (a00142_g155cba6121323726d02c00284428fed6) 1235 0 R (a00142_g2f8f70c30b9ee08a103fbd69a4365c4c) 1148 0 R (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) 1144 0 R (a00142_g3d4c8bd4aada659eb34f5d2ffd3e7901) 1196 0 R (a00142_g7b04a0035bef29d905496c23bae066d2) 1146 0 R (a00142_g7b5319b5b65761a845fcd1500fde4cdc) 1215 0 R (a00142_g905451249dca72ce0385bf2a9ff178ee) 1233 0 R (a00142_g99e43010ec61327164466aa2d902de45) 1145 0 R (a00142_g9e97a0b4d5cc7764d8e19758f5da53ae) 1197 0 R (a00142_g9ff1e8936a8a26bff54c05f8a989b93b) 1219 0 R (a00142_gad14bbbf092b90aa0a5a4f9169504a8d) 1147 0 R (a00142_gcd3ac045f0a4ae63412e3b3d8780e8ab) 1232 0 R (a00142_gcfae9053e5c107a1aed6b228c917d2ea) 1217 0 R (a00142_ge3c821e3a388615528efda9d23c7d115) 1236 0 R (a00142_ge469332907e0617d72d5e2dd4297119d) 1221 0 R (a00142_ge6bae7dc0225468c8a5ac269df549892) 1143 0 R (a00142_gfa82b860a64b67d25ab3abc21811896f) 1234 0 R (a00142_pt-autovars) 1153 0 R (a00142_pt-desc) 1141 0 R (a00142_pt-impl) 1157 0 R (a00142_pt-scheduling) 1155 0 R (a00143) 649 0 R (a00143_g41bf109b6a45328d5744c0a76563fb6c) 1312 0 R (a00143_g54a466311575a727830a92a6c3621cb2) 1305 0 R (a00143_g5eced097547fd3fac4ba2a255493d921) 1307 0 R (a00143_gd85fc90c30d1fc37c63c4844be5fe09d) 1309 0 R (a00144) 651 0 R (a00144_g12b467f314489259dd718228d0827a51) 1341 0 R (a00144_g20bc87e5c063c3f4b01547be6e5a0148) 1338 0 R (a00144_g30e827f33eacff55ecb4d8fb5a11d5d1) 1345 0 R (a00144_g41d37ea1e3bd24f7b51e9409aceaaa80) 1342 0 R (a00144_g5323320b7316647042016f17c4e881be) 1344 0 R (a00144_gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c) 1336 0 R (a00144_geb79c914cf137e6d27fd7583e5a66679) 1343 0 R (a00145) 652 0 R (a00145_g22f140b02c354dfebcc7ad481c3bcd68) 1382 0 R (a00145_gc48ed5f0d27721ef62a3ed02a5ad8d2e) 1378 0 R (a00146) 653 0 R (a00146_g1024f8a5fa65e82bf848b2e6590d9628) 678 0 R (a00146_g2c64c8c36bc84f9336f6a2184ea51883) 1409 0 R (a00146_ga4360412ee9350fba725f98a137169fe) 677 0 R (a00146_gb81e78f890dbbee50c533a9734b74fd9) 1411 0 R (a00146_gbaf0bb2b6a4424b4eb69e45e457c2583) 1407 0 R (a00146_gf20aaf4292cb0d2a1b10bc0a568b51fa) 1408 0 R (a00146_gf5c2ad5acf3cc23b8262e9ba6a15136b) 1410 0 R (a00146_gfd5ebb56a1bd1da9878aa886a2075e80) 1394 0 R (a00147) 655 0 R (a00147_g04b053a623aac7cd4195157d470661b3) 743 0 R (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) 804 0 R (a00147_g1a1bc437c09ddef238abab41d77c3177) 716 0 R (a00147_g26a14b8dae3f861830af9e7cf1e03725) 715 0 R (a00147_g58bb90796c1cdad3aac2ecf44d87b20e) 750 0 R (a00147_g61db1dcb7c760e4dd5d60bf4e5576dca) 745 0 R (a00147_g64a238a5c02640a7a4aef004163aeb47) 1471 0 R (a00147_g79c4110211247df3fb30b8cf1c4c02af) 1520 0 R (a00147_g7b2ac4b18bd2ac3912fe67b3b17158c3) 749 0 R (a00147_g8096b0c4b543dc408f4dd031ddae7240) 773 0 R (a00147_g81ac47cee1c18f6aa479044069db7ca3) 805 0 R (a00147_g8411c95a4d89367ad2d9d6bde1a3d537) 1483 0 R (a00147_g88d2ccf7cd821f89d9a8df7e3948b56c) 746 0 R (a00147_ga20812098a4663c8a9fc4ce8e95391b6) 1516 0 R (a00147_ga87feebc7cffd4d8300e776cf64e4fec) 1492 0 R (a00147_ga8933ad15a2e2947dae4a5cff50e6007) 744 0 R (a00147_ga9de254b8aa308eb4aab17efdde622d2) 1484 0 R (a00147_gaa585784b0914cac1d37f07f85457008) 1518 0 R (a00147_gb5fecbc62edd128012cea0f47b57ab9f) 742 0 R (a00147_gdb971fb1525d0c5002f52125b05f3218) 772 0 R (a00147_gdd1ab3704ecd4900eec61a6897d32dc8) 771 0 R (a00147_gde6634974418e3240c212b9b16864368) 1485 0 R (a00147_ge5ab69d40013e6cf86ef1763c95d920e) 1517 0 R (a00147_gef14e83c046e19ab9fe9d1bbcca276c2) 1464 0 R (a00147_gef6c4140c632b6a406779342cf3b6eb6) 747 0 R (a00147_gf2dbaceb10c67783a115075b5b6d66df) 1515 0 R (a00147_gfbd5fc486dfdf6bf6fc9db52b1f418c4) 748 0 R (a00148) 1654 0 R (a00148_g118e9d76568ab81ad97f138d4ea1ddd2) 1668 0 R (a00148_g165b603ec150e26efec7be199c9c2901) 1683 0 R (a00148_g210e629f7252e4bc8458cbdf260b3318) 1677 0 R (a00148_g22fa0681cd463191d7a01fe85d86996f) 1680 0 R (a00148_g53fbda0e8c31d4882294c8dc3cb5f487) 1675 0 R (a00148_g69a7a4951ff21b302267532c21ee78fc) 1617 0 R (a00148_g6b16e0bac41821c1fbe0c267071642f0) 1678 0 R (a00148_g769512993b7b27271909d6daa4748b60) 1676 0 R (a00148_g87f0b54ade0d159fba495089128a4932) 774 0 R (a00148_g969d7fff37a979737da045e0d538a9bd) 1679 0 R (a00148_ga22b04cac8cf283ca12f028578bebc06) 1618 0 R (a00148_ge23534479ead15af8ff08ace26a47fb5) 1682 0 R (a00148_gffcd2fbe181e2aaefbf970551c302af5) 1681 0 R (a00149) 654 0 R (a00149_g12a33f0c09711167bdf3dd7d7cf8c5a1) 1748 0 R (a00150) 1760 0 R (a00150_g013c3a06a8b58589a77f4a3442f89c2a) 1923 0 R (a00150_g041aea91aa6ef84dcc6cac3c51db9b2f) 1809 0 R (a00150_g04b053a623aac7cd4195157d470661b3) 1997 0 R (a00150_g1215163245304bad20d6c5608ad75ab7) 1880 0 R (a00150_g12a33f0c09711167bdf3dd7d7cf8c5a1) 1755 0 R (a00150_g12f3bf821224b8e7b48a57ed3cea15cf) 1886 0 R (a00150_g1320fd0006a2f70138bc2d0018dda829) 1872 0 R (a00150_g13dfcb4a5f920e108253ade527a66cc2) 1835 0 R (a00150_g1425d4a0c2760adb653a04c0fb137a8d) 1878 0 R (a00150_g15f2617f7dc1713f9d10282125c6027b) 1862 0 R (a00150_g160128ab5d2ea3cc497b91ee4eb4ef99) 1827 0 R (a00150_g17d111686f98e4c09db73a770ac3f1a4) 1858 0 R (a00150_g1cea57e3ea526f210b1068e6dcf7b4f4) 1896 0 R (a00150_g1d3211dbbdfb22d6a47b60dddcf945e8) 1900 0 R (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) 1519 0 R (a00150_g207d17b633cd095120a74bc1f2257b17) 1892 0 R (a00150_g20ceef9d0868d391c2f33041b02cb1f1) 1926 0 R (a00150_g20df5c82f2a15a508c19e505b5d9de2b) 2014 0 R (a00150_g210f227119fc972e6222c9cb452e15a9) 1981 0 R (a00150_g22f140b02c354dfebcc7ad481c3bcd68) 1990 0 R (a00150_g236d5c7872f59c8fe7b701c7252b976e) 2042 0 R (a00150_g24f52ac52d6e714cb04a5aa01be3bdd0) 1906 0 R (a00150_g266263ac78a1361a2b1d15741d3b0675) 1935 0 R (a00150_g28eda870cff3d8e3cf2949e6f57a502b) 1817 0 R (a00150_g2a0cf5d86c58fab216414ce59bf1fea1) 2049 0 R (a00150_g2addf34c7d457c1a7899a7e2171ef1e9) 679 0 R (a00150_g2d3ba4b14d6d2f6576f9b547800b7945) 1805 0 R (a00150_g3237be0d9ec457de0177689ee23c0d5c) 2011 0 R (a00150_g359951eecd80541c2101f628a9da9146) 1841 0 R (a00150_g39ce739bd352d7e348e37395ce903e43) 1793 0 R (a00150_g42288d5c3cf4b10becefec657f441e54) 1902 0 R (a00150_g4309376690872fa4beb4f025f5cc199b) 1913 0 R (a00150_g44b3b1ab31a403ba28ec135adfcbefef) 1874 0 R (a00150_g499bb98a0b4ae9a98553ede81317606d) 2023 0 R (a00150_g4cc3e223b63f27b546d62e9a258dba5a) 1894 0 R (a00150_g517c770991459cc62dc009c0d3875c6a) 1843 0 R (a00150_g561b8eda32e059d4e7397f776268cc63) 1998 0 R (a00150_g57e6dc1d58a36d0ed53a3dd29ccc5798) 1799 0 R (a00150_g5b5615dc240daed20949c0fded2b4679) 2033 0 R (a00150_g5c5b1834e497f53ad0ef947bbe9777fa) 1888 0 R (a00150_g5c97ae587595b5444be80f5ecc1d3382) 1813 0 R (a00150_g5ca559def464ef20d8b1f7d32f2f160d) 1870 0 R (a00150_g6020613f5062417d9811cfa837215c83) 1868 0 R (a00150_g62c03e0a308cc23929a80fe8d8f9dc1e) 1898 0 R (a00150_g64d9affc680a445d708234e70450477b) 1829 0 R (a00150_g6832e4d2d046536b6472f7ac92340f68) 681 0 R (a00150_g691688604655ea8943d15f14c60027d8) 1884 0 R (a00150_g6bc12c6c7b56f73ce5d57abfdcdc6eb5) 1854 0 R (a00150_g6bfa488f87f68a6f7f4a3efb9e45eaf8) 1791 0 R (a00150_g6f2b90c597ec23f39ec716ccec11233c) 1860 0 R (a00150_g7023a34ba9e9d03b5fbedbcb32924453) 1989 0 R (a00150_g788ffac72342f6172343d7f8099cbe1a) 1999 0 R (a00150_g79c4110211247df3fb30b8cf1c4c02af) 1993 0 R (a00150_g7d3673f52f5846b6961d23b150decd54) 2008 0 R (a00150_g8387881de3a8bfd3c0d57b9d04ac9b7e) 1904 0 R (a00150_g85b65e38aa74eba18979156f97a94a87) 680 0 R (a00150_g88e60aa2cf23e1c65d630701db08c743) 1866 0 R (a00150_g8af482dec973db57d8b3bd3f69461488) 1821 0 R (a00150_g96544dedc1cdc71ad2ad54bf1d5e5433) 1910 0 R (a00150_g9c0814ed491fa452ec97910c0728d410) 1921 0 R (a00150_g9c24fba2cd8f7f62accb0a0d5bbe4dad) 1992 0 R (a00150_g9ebb4dac683163840eab9c6c41ad61f7) 1929 0 R (a00150_g9ee50a40597e67fce96541ab56c3b712) 2000 0 R (a00150_g9f1822e1d231235edacad691f3cb7bbb) 1882 0 R (a00150_ga05a3dde2048480fa3ab2a5961898d18) 2029 0 R (a00150_ga22b04cac8cf283ca12f028578bebc06) 1996 0 R (a00150_ga4c4310e54f18541b09e1e251fe7b22d) 1801 0 R (a00150_ga533c394b1fa0030205534befa31c525) 1825 0 R (a00150_ga5e3c856b86725125d19fccc34cd9eb5) 1819 0 R (a00150_gaa585784b0914cac1d37f07f85457008) 1994 0 R (a00150_gabc40c09f49d15acb1b1a7f02bb3a807) 1807 0 R (a00150_gad0321f4c570f9983c6de81ece3ddc20) 1852 0 R (a00150_gae59b70658f28ee6e998eaaab05e423f) 1823 0 R (a00150_gb4ef6b00924990e7a293f66715b6d1d1) 2005 0 R (a00150_gb6683dd83fe1c8de9a24086d4b69e907) 1944 0 R (a00150_gb81e78f890dbbee50c533a9734b74fd9) 1453 0 R (a00150_gb9435261753469accec0c9bf8a5a2686) 1917 0 R (a00150_gb948296aea6b6b3aa1f156799c4d479c) 1856 0 R (a00150_gc48ed5f0d27721ef62a3ed02a5ad8d2e) 1991 0 R (a00150_gc84f499cba8a02fc0e306c10b2acabf0) 1876 0 R (a00150_gd135fb0cfdfb2c212f0f51865a3640e4) 1833 0 R (a00150_gd58231410d58e34b455328b888a9e73c) 1890 0 R (a00150_gd605357e29affb0d3104294c90f09905) 1811 0 R (a00150_gdd1ab3704ecd4900eec61a6897d32dc8) 1995 0 R (a00150_gde29ec025e6754afd8cc24c954a8dec8) 1837 0 R (a00150_ge0825474feee11b4e038bfe71757875f) 1847 0 R (a00150_geb533744817cf6695d75293369c2248b) 1984 0 R (a00150_gee37386b2ab828787c05227eb109def7) 1864 0 R (a00150_gf0ccbc3bb2a3ba1ebc255c7b3fcedd24) 1815 0 R (a00150_gf0ed78fd2be24d849cdd5af75e3b2674) 1797 0 R (a00150_gf703683056d2bfa5c81fa157dcb20fe2) 1406 0 R (a00150_gf72d7b9a737707dcfb2c41fec2b6792e) 1845 0 R (a00150_gf84316f469ce0726985c0702db49a989) 1803 0 R (a00150_gf848ce44c810492e7a35c2d23a429f45) 1795 0 R (a00150_gfff0ed43201bf1e2020de1a0d6cac070) 1831 0 R (a00151) 1777 0 R (a00151_g2a0cf5d86c58fab216414ce59bf1fea1) 2184 0 R (a00151_g2addf34c7d457c1a7899a7e2171ef1e9) 2193 0 R (a00151_g6832e4d2d046536b6472f7ac92340f68) 2188 0 R (a00151_g85b65e38aa74eba18979156f97a94a87) 2194 0 R (a00151_gb6683dd83fe1c8de9a24086d4b69e907) 2192 0 R (a00152) 1775 0 R (a00152_g03d140db75de3d3cdfbbab1c4fed8d8d) 2220 0 R (a00152_g058a8e6025f67b021862281f1911fcef) 2257 0 R (a00152_g06ba7b414e718081998f2814090debf1) 2228 0 R (a00152_g24f52ac52d6e714cb04a5aa01be3bdd0) 2232 0 R (a00152_g2d9d28afa353f662b9bb5234fc419f72) 2239 0 R (a00152_g3e1562e8a6de32268e5df92a52152f91) 2218 0 R (a00152_g499bb98a0b4ae9a98553ede81317606d) 2250 0 R (a00152_g54b27e45df15e10a0eb1a3e3a91417d2) 1420 0 R (a00152_g737337d6a51e31b236c8233d024138a8) 2224 0 R (a00152_g7a7c46ffaba30477b8c9e3e61bd2e106) 2226 0 R (a00152_g902c4a360134096224bc2655f623aa5f) 2243 0 R (a00152_g9f2196e2705036869611962425e404bf) 2235 0 R (a00152_gbb558f3a9b1ec015e83c314aba694e35) 2222 0 R (a00152_gbb56b549f7ab4d86e1cc39b8afc70d1e) 2230 0 R (a00153) 650 0 R (a00153_g156dd2891a57035e4afdc4c2bc0b0ebf) 2371 0 R (a00153_g15de27b044603284f68db05a378235a7) 2344 0 R (a00153_g196379ceb1219a99f4495e41ccc9bbfb) 2324 0 R (a00153_g21664b7441cfa37d280228d23316d609) 2370 0 R (a00153_g24aa5bc36939cc9a0833e1df01478a7e) 2346 0 R (a00153_g285a80366aed9428f64282b8d13c918b) 2374 0 R (a00153_g2bc3b489923793759526a3181eb667fa) 2349 0 R (a00153_g3001114ddadc1f2ada5cc9a780e866fc) 2284 0 R (a00153_g3090117ef3ff5775b77cb1960e442d07) 2351 0 R (a00153_g3589822ecb9d9c4145209756396b8a6b) 2368 0 R (a00153_g3f6f1f6f98431f2d33ed30a30d2ccc35) 2276 0 R (a00153_g41aa744caa46913b3b3aedb2a4e78546) 713 0 R (a00153_g4910467b83a639f06739c82cd362037e) 2347 0 R (a00153_g4caecabca98b43919dd11be1c0d4cd8e) 1321 0 R (a00153_g51195ea7cd5aa387a87f9d3b23905b62) 2314 0 R (a00153_g51c1cd531ff0afb81620151f2248cd21) 2343 0 R (a00153_g529648ad3b0b327a43689b0f1779ff55) 2290 0 R (a00153_g5726142fec34f35fb9ea19e5a45975c6) 2369 0 R (a00153_g5b9dba2123705bce1ce95c3deca0bdad) 2348 0 R (a00153_g67cf1e0d2324c93f332c1f020c0fe8b3) 2345 0 R (a00153_g6836f92f3692f3a4429eb599db40cbae) 2388 0 R (a00153_g69646a81a922033c5281445a71f8ffed) 2395 0 R (a00153_g727459e5c4f777543c81ffffa3df3f0c) 2313 0 R (a00153_g763f12007aad8cc0e483bf50f8a8d9b4) 2286 0 R (a00153_g77570ac4fcab86864fa1916e55676da2) 1385 0 R (a00153_g8f4ebd8ef6c0ea665ed351d87fec09fd) 2342 0 R (a00153_g9069474ea570fd78c481aa164317dbaf) 2315 0 R (a00153_g92f3344ec8ca46893163399c89fafed5) 2319 0 R (a00153_g974c9b4bbe6b07cc1d64ac4fad278030) 2278 0 R (a00153_g9dd44616d41cef74d3beb51d8be5ecec) 2288 0 R (a00153_ga92afb113e122f860392bfbd385f842e) 2396 0 R (a00153_gac0de06236b02659460445de30776e00) 2340 0 R (a00153_gb1455b27c06532a399cf06d2c1d6d08d) 2350 0 R (a00153_gb58e1ceb7cb73ca2bcd73146b6c1b4e7) 2373 0 R (a00153_gb61381673de27f31848c5396bf0b338e) 2317 0 R (a00153_gb6e04358481bd2057524fb874cfa472b) 2386 0 R (a00153_gc3882366feda1cb759ccbfe98327a7db) 2307 0 R (a00153_gca1240bba5dd57f8c7c27123c84a1f6d) 2282 0 R (a00153_gcacc406c3bf7d0e00412e4c946252739) 2280 0 R (a00153_gdcf372ff9748996f7c05e9822a615384) 2310 0 R (a00153_ge0f8cbeca9731af2171ffd37e79de893) 2316 0 R (a00153_ge6f4a2453dbd8bc60e6a82774552366a) 2372 0 R (a00153_gf5fe83be78b78b9e7d9e7f1e34ab1cc5) 2341 0 R (a00153_gf963fdea2b75d27ef31e92d1d01359ee) 2318 0 R (a00154) 1776 0 R (a00154_gb4b17aaf20d630f30919b19937b966a3) 2497 0 R (a00155) 1165 0 R (a00155_g1ec8b8f4710dce1fa7fb87d3a31541ae) 2513 0 R (a00155_g2bdc4b7b4038454a79f1b2a94a6d2a98) 2526 0 R (a00155_g2c1bb4fa6d7a6ff951a41c73fc721109) 2511 0 R (a00155_g3983e0c026396d5c4506779d770007ba) 2524 0 R (a00155_g44311ecc30759ca38b4069182247bdae) 2509 0 R (a00155_gca51ceb2f5d855dfde55bcedf8d3b92d) 2517 0 R (a00155_gd8eec328a4868d767f0c00c8d1c6cfc1) 2515 0 R (a00156) 2532 0 R (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) 2551 0 R (a00156_g6d71dececfce707c668e6257aad5906e) 2554 0 R (a00156_gcb807bd57e5489b386b876af5c1f163a) 2553 0 R (a00156_gedaf3e48c2b04229b85455fb948468d6) 2552 0 R (a00157) 2550 0 R (a00157_g78ab77b57cf2e00089f0a3a22508524c) 2601 0 R (a00157_ge3ced0551b26c9b99cb45a86f34d100a) 2595 0 R (a00157_ge5b7160f2e653725ba5e2024c3cb7bff) 2603 0 R (a00158) 656 0 R (a00158_g10d9a9201cba1a6db623284c475c6cea) 2674 0 R (a00158_g26ae707402e494f3895a9f012a93ea29) 2628 0 R (a00158_g2ebfe5c8a7f3173714efdf2df74fc392) 2682 0 R (a00158_g3178402dd725776415bf9745e7bf92ba) 2662 0 R (a00158_g3b19f65e48079d8105be2a99b5b4b2ae) 2667 0 R (a00158_g4a264bb64ae706d53f572b1d9e4037a2) 2680 0 R (a00158_g4ab2de595d36e9e55dd61f6ecd139162) 2678 0 R (a00158_g55ce98ea4d6f22e9d5068b904d4d2447) 2681 0 R (a00158_g5d56800f82bfc7bbf53bb4a659589812) 2675 0 R (a00158_g70d236d1cf34b4e21836edda60247b70) 2629 0 R (a00158_g84901a5aa60040e96d272a69977edd22) 2626 0 R (a00158_ga87ff36af81990e6ffe20d76d5e4606f) 2656 0 R (a00158_gb0ad55aa96dd1d200cd0fc5a99f6a4f7) 2673 0 R (a00158_gb5d9c0becf7cb32d0aaef466839dd92e) 2677 0 R (a00158_gc7cc1dba1819f7fcdaa9ff9eed5a08f4) 2679 0 R (a00158_gd895ab98c54d9966ff554aa873151751) 2676 0 R (a00158_gfa11b2a1faf395ae2a6626e01c482d5d) 2627 0 R (a00159) 2757 0 R (a00159_g720ac440c7b24bdd07c53ba146e36fb2) 2772 0 R (a00159_ga680bc3f3a1a8a6aec20fe729d138cb8) 2770 0 R (a00159_gceb952d27de8125d5146ac0bee325b8f) 2787 0 R (a00159_gd58a6c7e62ae59bf7a016ded12ca2910) 2788 0 R (a00159_gf31774d02a69fd3f1c2b282454438cba) 2785 0 R (a00159_gfe5e93119035e14cc485760a176249ba) 2786 0 R (a00160) 1315 0 R (a00160_g070d2ce7b6bb7e5c05602aa8c308d0c4) 2834 0 R (a00160_g221d37ccde7e3fd0dd2c2eb0a6b15493) 2838 0 R (a00160_g3191066cf8f76bd00b6843b77c37068f) 2858 0 R (a00160_g3d768e989e308144190ae1a5ddfa9726) 2832 0 R (a00160_g66d19181ad5fe8b8f7c84d1f1d46a2ec) 2854 0 R (a00160_g6d9751d534453425c7a5a215d1d4414c) 2856 0 R (a00160_g7c5359305008e9183b18d6ab75f568bf) 2841 0 R (a00160_gb50f78bbf36d912d69f6c1685d0b40e3) 2849 0 R (a00160_gdf916e0c752f5cda70d0bddb2be422ba) 2857 0 R (a00160_ge4dcbbe6c641d2e3b8537b479df5fc99) 2855 0 R (a00160_gecf13b8dc783db2202ca5c34fe117fc3) 2836 0 R (a00161) 1316 0 R (a00161_g029256bc17a12e1e86781887e11c0c7d) 2901 0 R (a00161_g17ccd786400fd08b941e11046df1668f) 2917 0 R (a00161_g28cf9765e4b57451af559ab988ad7160) 2915 0 R (a00161_g3212e70c55244608ac16316888c354f0) 2905 0 R (a00161_g34b924954ba5707d536df28d71a80d39) 2911 0 R (a00161_g37e3103b9591790d484a450525739661) 2929 0 R (a00161_g64807ba7c221ddf735572d05021539f2) 2921 0 R (a00161_g6cda47c85ce1b58b501b44ac9cccc50e) 2907 0 R (a00161_g9e97c58fe35f750ad192774be9408ac8) 2913 0 R (a00161_gb1fc692a2700b7a51517724364683f67) 2928 0 R (a00161_gbc331f73107958428bf1c392ba19b6f4) 2923 0 R (a00161_gcff75c8c930abd6ff168e85373a4eb92) 2903 0 R (a00161_gf0349a8481565e80f55a751e2b408d6d) 2930 0 R (a00161_gf7dd2757d1e766f65b01ba7c91c660a0) 2909 0 R (a00162) 1317 0 R (a00162_g123c95a7bb55143cabba92446ce8f513) 3020 0 R (a00162_g19709735f29dafeabb91e0882231f9f1) 2968 0 R (a00162_g26440a35353cb457747a4cea372c62e9) 2956 0 R (a00162_g30fe27cba3c14ae7f9a7f118144af43a) 2958 0 R (a00162_g3212e70c55244608ac16316888c354f0) 2962 0 R (a00162_g3318dec654781e9d6d8ec873636660c6) 2984 0 R (a00162_g3a4852e2372e34e1c0142d1147fbe027) 2988 0 R (a00162_g4647b76d0ef50a5305505041f5775a37) 2993 0 R (a00162_g5025948dd998f65a13a375a37aa5edf5) 2972 0 R (a00162_g52c3c5ab1b1aa0659b5e465f7fbcc409) 3001 0 R (a00162_g57aca709a33690cd4fb73fe199fa1bdd) 2978 0 R (a00162_g69b075ef7e4d7bcf5a903d3d75baac02) 3013 0 R (a00162_g6b2d00412304e2d95e7b853cce5858b0) 2982 0 R (a00162_g6cda47c85ce1b58b501b44ac9cccc50e) 2964 0 R (a00162_g7e904ab59f7ee134cf3218a8219e7e29) 2970 0 R (a00162_g82ff99d50221f7c17df57dc6092ffc97) 3007 0 R (a00162_g86beee1f69d05b16022dfb430470e9ce) 3016 0 R (a00162_g8b600918f84783490fd791ce773175ab) 2980 0 R (a00162_g984c4a8b65a3cb35460b073a40568c25) 3003 0 R (a00162_gaa60ca995565b799bb958c806e933665) 2990 0 R (a00162_gaaaaf66ea67900c36d01136d5bad1168) 2976 0 R (a00162_gbfc1d8d15852318927cda30e1bc0470a) 2974 0 R (a00162_gd1f18f739da7703628c3663209463a0d) 3021 0 R (a00162_ge28f6cb60e86088d8886d0f804b4f37c) 2960 0 R (a00162_ge429c985be88ed048f382511c9ff00de) 2966 0 R (a00162_gf11c966b0e4f4ecaa73deb14bfb6830f) 3019 0 R (a00162_gf784a76fe619452eddf87e6376a4bf9d) 2986 0 R (a00163) 1318 0 R (a00163_g03070adbf8faab0f34f87c1270964306) 3047 0 R (a00163_gb97849f0d3ea858eee790b69591e6427) 3049 0 R (a00163_ge28f6cb60e86088d8886d0f804b4f37c) 3044 0 R (a00164) 1319 0 R (a00164_g0e0ea5f24b77f124ba33bcbc7ede5bfb) 3134 0 R (a00164_g1d34be506a61db90dd7829117efdf8cf) 3120 0 R (a00164_g23705efb9077187881f094fc9be13bde) 3102 0 R (a00164_g2a939aa4fcffabbce1dc1f784a7e0ad3) 3135 0 R (a00164_g31be289fd8ec3fe09b0088165d13976d) 3072 0 R (a00164_g3212e70c55244608ac16316888c354f0) 3090 0 R (a00164_g38af81a4c9884ce89803fc3e52383112) 3088 0 R (a00164_g3caacabb2fe1c71921e1a471719ccbd2) 3116 0 R (a00164_g40fb1fb2d990ce04ae9bbee275627c03) 3082 0 R (a00164_g41e616d3fcc17e0aabfe8ab45ef0d30f) 3133 0 R (a00164_g4433d3af16ea083a81576d0f18ba57c9) 3132 0 R (a00164_g4d457c50e6f2cef57167c3804ce8bf7c) 3078 0 R (a00164_g5a5bfd7e9060903893481db90645187b) 3068 0 R (a00164_g6b942c1ef22f8cd1a726ef3364c9fbea) 3101 0 R (a00164_g6cda47c85ce1b58b501b44ac9cccc50e) 3092 0 R (a00164_g71e1b022f7b7fa3a154f19372b239935) 3094 0 R (a00164_g863c94b0ed4a76997e53a3ccd5d0b6c3) 3080 0 R (a00164_g8714af98a550f10dc814db92b08d1b0d) 3074 0 R (a00164_g9e6d2864f390a4ba1ac60dc65e2b9815) 3122 0 R (a00164_gc4357cec23abca29d2bb885803625a6a) 3076 0 R (a00164_gc4b119801e50cc1824498a1cdf9adc37) 3100 0 R (a00164_gd895686859ae7d178d31be04eb0a1a97) 3086 0 R (a00164_gda99954e0f6905091885934e86c278cc) 3084 0 R (a00164_gdc5aec3587b2c55b714a6c2f37b56cba) 3097 0 R (a00164_ge28f6cb60e86088d8886d0f804b4f37c) 3070 0 R (a00164_gf11d9915ec12a8cdd9fdcbb5e8fcd5c7) 3103 0 R (a00164_gf8f12c820cc08da32aa62898bfc02db3) 3104 0 R (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) 3131 0 R (a00165) 1320 0 R (a00165_g14e276fa8e765f774f4162619f1c8fc1) 3220 0 R (a00165_g1dbc635a2924806f42d7e3273a6a69b5) 3228 0 R (a00165_g3212e70c55244608ac16316888c354f0) 3208 0 R (a00165_g648ddfb2dde2cc55034e4e0ea41cb6d1) 3225 0 R (a00165_g71e1b022f7b7fa3a154f19372b239935) 3210 0 R (a00165_g79f9a50c2cccb967d38a2eeb45d2fd75) 3214 0 R (a00165_g7d7920c1e51cc4eef80206ebd6fee3f4) 3204 0 R (a00165_g820fb27c50e7bb4ac6d9eae1b06630a5) 3218 0 R (a00165_g8a645f8831837320c4e0c704e871abcf) 3206 0 R (a00165_gc364305cee969a0be43c071722b136e6) 3229 0 R (a00165_ge3f8f7deae69854853b0c8ebb82c380d) 3212 0 R (a00165_ge6f849e94cf6e214be8ffa9a548ecfcd) 3223 0 R (a00165_gf7dd2757d1e766f65b01ba7c91c660a0) 3216 0 R (a00171) 3890 0 R (a00172) 3905 0 R (a00173) 3956 0 R (a00174) 3985 0 R (a00175) 4017 0 R (a00176) 4037 0 R (a00177) 4059 0 R (a00178) 4075 0 R (a00179) 4104 0 R (a00180) 4123 0 R (a00181) 4150 0 R (a00182) 4182 0 R (a00183) 4205 0 R (a00184) 4219 0 R (a00185) 4240 0 R (a00187) 4258 0 R (a00188) 4282 0 R (a00190) 4299 0 R (a00191) 4316 0 R (a00192) 4324 0 R (a00194) 4354 0 R (a00195) 4403 0 R (a00196) 4447 0 R (a00197) 4466 0 R (a00198) 4495 0 R (a00199) 4521 0 R (a00201) 4531 0 R (a00202) 4576 0 R (a00203) 4670 0 R (a00204) 4857 0 R (a00205) 4878 0 R (a00206) 4902 0 R (a00207) 4919 0 R (a00208) 4977 0 R (chapter*.1) 500 0 R (chapter.1) 6 0 R (chapter.2) 46 0 R (chapter.3) 54 0 R (chapter.4) 62 0 R (chapter.5) 70 0 R (chapter.6) 78 0 R (chapter.7) 178 0 R (chapter.8) 266 0 R (chapter.9) 406 0 R (index) 632 0 R (main_api) 685 0 R (main_appevents) 694 0 R (main_arch) 668 0 R (main_checksums) 669 0 R (main_closing) 729 0 R (main_congestioncontrol) 862 0 R (main_connect) 759 0 R (main_connstate) 697 0 R (main_delack) 871 0 R (main_errors) 734 0 R (main_example1) 768 0 R (main_example2) 784 0 R (main_example3) 791 0 R (main_example4) 793 0 R (main_example5) 802 0 R (main_example6) 812 0 R (main_examples) 767 0 R (main_flowcontrol) 860 0 R (main_icmp) 840 0 R (main_ip) 834 0 R (main_ipbroadcast) 838 0 R (main_ipreass) 836 0 R (main_listeb) 848 0 R (main_listen) 741 0 R (main_longarith) 673 0 R (main_mainloop) 662 0 R (main_memory) 676 0 R (main_performance) 866 0 R (main_polling) 738 0 R (main_protoimpl) 828 0 R (main_rawapi) 688 0 R (main_recvdata) 706 0 R (main_rexmit) 854 0 R (main_rexmitdata) 725 0 R (main_rttest) 852 0 R (main_senddata) 711 0 R (main_slidingwindow) 850 0 R (main_tcp) 842 0 R (main_tcpip) 661 0 R (main_uIPIntroduction) 647 0 R (main_urgdata) 864 0 R (page.1) 478 0 R (page.10) 797 0 R (page.100) 2738 0 R (page.101) 2752 0 R (page.102) 2756 0 R (page.103) 2792 0 R (page.104) 2813 0 R (page.105) 2823 0 R (page.106) 2862 0 R (page.107) 2881 0 R (page.108) 2893 0 R (page.109) 2934 0 R (page.11) 809 0 R (page.110) 2946 0 R (page.111) 2999 0 R (page.112) 3025 0 R (page.113) 3035 0 R (page.114) 3054 0 R (page.115) 3108 0 R (page.116) 3139 0 R (page.117) 3155 0 R (page.118) 3172 0 R (page.119) 3187 0 R (page.12) 817 0 R (page.120) 3194 0 R (page.121) 3233 0 R (page.122) 3242 0 R (page.123) 3246 0 R (page.124) 3290 0 R (page.125) 3306 0 R (page.126) 3316 0 R (page.127) 3346 0 R (page.128) 3361 0 R (page.129) 3393 0 R (page.13) 825 0 R (page.130) 3404 0 R (page.131) 3414 0 R (page.132) 3446 0 R (page.133) 3462 0 R (page.134) 3478 0 R (page.135) 3518 0 R (page.136) 3534 0 R (page.137) 3543 0 R (page.138) 3558 0 R (page.139) 3609 0 R (page.14) 833 0 R (page.140) 3619 0 R (page.141) 3670 0 R (page.142) 3704 0 R (page.143) 3770 0 R (page.144) 3793 0 R (page.145) 3841 0 R (page.146) 3879 0 R (page.147) 3883 0 R (page.148) 3894 0 R (page.149) 3909 0 R (page.15) 846 0 R (page.150) 3960 0 R (page.151) 3967 0 R (page.152) 3989 0 R (page.153) 3999 0 R (page.154) 4021 0 R (page.155) 4041 0 R (page.156) 4049 0 R (page.157) 4063 0 R (page.158) 4079 0 R (page.159) 4108 0 R (page.16) 859 0 R (page.160) 4127 0 R (page.161) 4154 0 R (page.162) 4162 0 R (page.163) 4186 0 R (page.164) 4199 0 R (page.165) 4209 0 R (page.166) 4223 0 R (page.167) 4244 0 R (page.168) 4262 0 R (page.169) 4286 0 R (page.17) 870 0 R (page.170) 4303 0 R (page.171) 4320 0 R (page.172) 4328 0 R (page.173) 4358 0 R (page.174) 4383 0 R (page.175) 4407 0 R (page.176) 4434 0 R (page.177) 4451 0 R (page.178) 4470 0 R (page.179) 4499 0 R (page.18) 876 0 R (page.180) 4525 0 R (page.181) 4535 0 R (page.182) 4580 0 R (page.183) 4629 0 R (page.184) 4652 0 R (page.185) 4674 0 R (page.186) 4699 0 R (page.187) 4720 0 R (page.188) 4760 0 R (page.189) 4807 0 R (page.19) 880 0 R (page.190) 4841 0 R (page.191) 4861 0 R (page.192) 4882 0 R (page.193) 4906 0 R (page.194) 4923 0 R (page.195) 4942 0 R (page.196) 4961 0 R (page.197) 4981 0 R (page.198) 4985 0 R (page.199) 4989 0 R (page.2) 493 0 R (page.20) 909 0 R (page.200) 4994 0 R (page.201) 4998 0 R (page.202) 5002 0 R (page.203) 5006 0 R (page.204) 5010 0 R (page.205) 5014 0 R (page.206) 5019 0 R (page.207) 5023 0 R (page.208) 5027 0 R (page.209) 5031 0 R (page.21) 913 0 R (page.210) 5035 0 R (page.211) 5039 0 R (page.212) 5044 0 R (page.213) 5048 0 R (page.214) 5052 0 R (page.215) 5056 0 R (page.216) 5060 0 R (page.217) 5064 0 R (page.218) 5069 0 R (page.219) 5073 0 R (page.22) 938 0 R (page.220) 5077 0 R (page.221) 5081 0 R (page.222) 5085 0 R (page.223) 5089 0 R (page.224) 5094 0 R (page.225) 5098 0 R (page.226) 5102 0 R (page.227) 5106 0 R (page.228) 5110 0 R (page.229) 5114 0 R (page.23) 942 0 R (page.230) 5119 0 R (page.231) 5123 0 R (page.232) 5127 0 R (page.233) 5131 0 R (page.234) 5135 0 R (page.235) 5140 0 R (page.236) 5145 0 R (page.237) 5149 0 R (page.238) 5153 0 R (page.239) 5157 0 R (page.24) 1008 0 R (page.240) 5161 0 R (page.241) 5165 0 R (page.242) 5170 0 R (page.243) 5174 0 R (page.244) 5178 0 R (page.245) 5182 0 R (page.246) 5186 0 R (page.247) 5190 0 R (page.248) 5195 0 R (page.249) 5199 0 R (page.25) 1012 0 R (page.250) 5203 0 R (page.251) 5276 0 R (page.252) 5344 0 R (page.253) 5429 0 R (page.254) 5495 0 R (page.255) 5577 0 R (page.26) 1092 0 R (page.27) 1123 0 R (page.28) 1128 0 R (page.29) 1152 0 R (page.3) 568 0 R (page.30) 1169 0 R (page.31) 1201 0 R (page.32) 1241 0 R (page.33) 1259 0 R (page.34) 1271 0 R (page.35) 1287 0 R (page.36) 1294 0 R (page.37) 1325 0 R (page.38) 1349 0 R (page.39) 1359 0 R (page.4) 608 0 R (page.40) 1371 0 R (page.41) 1389 0 R (page.42) 1415 0 R (page.43) 1424 0 R (page.44) 1441 0 R (page.45) 1457 0 R (page.46) 1461 0 R (page.47) 1489 0 R (page.48) 1524 0 R (page.49) 1544 0 R (page.5) 693 0 R (page.50) 1571 0 R (page.51) 1589 0 R (page.52) 1602 0 R (page.53) 1622 0 R (page.54) 1642 0 R (page.55) 1653 0 R (page.56) 1687 0 R (page.57) 1705 0 R (page.58) 1714 0 R (page.59) 1723 0 R (page.6) 720 0 R (page.60) 1730 0 R (page.61) 1742 0 R (page.62) 1759 0 R (page.63) 1781 0 R (page.64) 1851 0 R (page.65) 1948 0 R (page.66) 2004 0 R (page.67) 2059 0 R (page.68) 2076 0 R (page.69) 2091 0 R (page.7) 754 0 R (page.70) 2104 0 R (page.71) 2119 0 R (page.72) 2141 0 R (page.73) 2162 0 R (page.74) 2167 0 R (page.75) 2198 0 R (page.76) 2210 0 R (page.77) 2247 0 R (page.78) 2261 0 R (page.79) 2268 0 R (page.8) 778 0 R (page.80) 2296 0 R (page.81) 2323 0 R (page.82) 2355 0 R (page.83) 2378 0 R (page.84) 2400 0 R (page.85) 2418 0 R (page.86) 2429 0 R (page.87) 2439 0 R (page.88) 2473 0 R (page.89) 2490 0 R (page.9) 790 0 R (page.90) 2502 0 R (page.91) 2531 0 R (page.92) 2558 0 R (page.93) 2578 0 R (page.94) 2589 0 R (page.95) 2608 0 R (page.96) 2633 0 R (page.97) 2686 0 R (page.98) 2705 0 R (page.99) 2721 0 R (section*.10) 1207 0 R (section*.100) 3407 0 R (section*.101) 3419 0 R (section*.102) 3450 0 R (section*.103) 3469 0 R (section*.104) 3481 0 R (section*.105) 3536 0 R (section*.106) 3545 0 R (section*.107) 3560 0 R (section*.108) 3611 0 R (section*.109) 3621 0 R (section*.11) 1209 0 R (section*.110) 3706 0 R (section*.111) 3774 0 R (section*.112) 3795 0 R (section*.113) 3845 0 R (section*.114) 3887 0 R (section*.115) 3898 0 R (section*.116) 3900 0 R (section*.117) 3902 0 R (section*.118) 3913 0 R (section*.119) 3949 0 R (section*.12) 1214 0 R (section*.120) 3971 0 R (section*.121) 3976 0 R (section*.122) 3978 0 R (section*.123) 4003 0 R (section*.124) 4011 0 R (section*.125) 4025 0 R (section*.126) 4027 0 R (section*.127) 4034 0 R (section*.128) 4042 0 R (section*.129) 4053 0 R (section*.13) 1296 0 R (section*.130) 4055 0 R (section*.131) 4067 0 R (section*.132) 4083 0 R (section*.133) 4098 0 R (section*.134) 4112 0 R (section*.135) 4114 0 R (section*.136) 4118 0 R (section*.137) 4121 0 R (section*.138) 4131 0 R (section*.139) 4144 0 R (section*.14) 1304 0 R (section*.140) 4166 0 R (section*.141) 4168 0 R (section*.142) 4171 0 R (section*.143) 4174 0 R (section*.144) 4203 0 R (section*.145) 4213 0 R (section*.146) 4215 0 R (section*.147) 4217 0 R (section*.148) 4227 0 R (section*.149) 4237 0 R (section*.15) 1327 0 R (section*.150) 4248 0 R (section*.151) 4266 0 R (section*.152) 4268 0 R (section*.153) 4272 0 R (section*.154) 4291 0 R (section*.155) 4296 0 R (section*.156) 4308 0 R (section*.157) 4314 0 R (section*.158) 4332 0 R (section*.159) 4335 0 R (section*.16) 1373 0 R (section*.160) 4373 0 R (section*.161) 4387 0 R (section*.162) 4389 0 R (section*.163) 4392 0 R (section*.164) 4398 0 R (section*.165) 4408 0 R (section*.166) 4413 0 R (section*.167) 4418 0 R (section*.168) 4420 0 R (section*.169) 4425 0 R (section*.17) 1391 0 R (section*.170) 4438 0 R (section*.171) 4455 0 R (section*.172) 4457 0 R (section*.173) 4474 0 R (section*.174) 4479 0 R (section*.175) 4503 0 R (section*.176) 4505 0 R (section*.177) 4529 0 R (section*.178) 4539 0 R (section*.179) 4581 0 R (section*.18) 1401 0 R (section*.180) 4614 0 R (section*.181) 4656 0 R (section*.182) 4664 0 R (section*.183) 4769 0 R (section*.184) 4776 0 R (section*.185) 4812 0 R (section*.186) 4845 0 R (section*.187) 4865 0 R (section*.188) 4873 0 R (section*.189) 4886 0 R (section*.19) 1463 0 R (section*.190) 4888 0 R (section*.191) 4894 0 R (section*.192) 4899 0 R (section*.193) 4910 0 R (section*.194) 4914 0 R (section*.195) 4924 0 R (section*.196) 4928 0 R (section*.197) 4943 0 R (section*.198) 4946 0 R (section*.199) 4953 0 R (section*.2) 1163 0 R (section*.20) 1498 0 R (section*.200) 4955 0 R (section*.201) 4965 0 R (section*.21) 1656 0 R (section*.22) 1670 0 R (section*.23) 1744 0 R (section*.24) 1762 0 R (section*.25) 1765 0 R (section*.26) 1782 0 R (section*.27) 1790 0 R (section*.28) 1925 0 R (section*.29) 1934 0 R (section*.3) 1173 0 R (section*.30) 1975 0 R (section*.31) 2169 0 R (section*.32) 2171 0 R (section*.33) 2183 0 R (section*.34) 2212 0 R (section*.35) 2215 0 R (section*.36) 2217 0 R (section*.37) 2238 0 R (section*.38) 2249 0 R (section*.39) 2272 0 R (section*.4) 1175 0 R (section*.40) 2275 0 R (section*.41) 2300 0 R (section*.42) 2304 0 R (section*.43) 2309 0 R (section*.44) 2326 0 R (section*.45) 2337 0 R (section*.46) 2356 0 R (section*.47) 2363 0 R (section*.48) 2365 0 R (section*.49) 2385 0 R (section*.5) 1177 0 R (section*.50) 2492 0 R (section*.51) 2494 0 R (section*.52) 2504 0 R (section*.53) 2508 0 R (section*.54) 2523 0 R (section*.55) 2535 0 R (section*.56) 2538 0 R (section*.57) 2540 0 R (section*.58) 2594 0 R (section*.59) 2597 0 R (section*.6) 1180 0 R (section*.60) 2614 0 R (section*.61) 2616 0 R (section*.62) 2619 0 R (section*.63) 2661 0 R (section*.64) 2764 0 R (section*.65) 2767 0 R (section*.66) 2769 0 R (section*.67) 2775 0 R (section*.68) 2828 0 R (section*.69) 2831 0 R (section*.7) 1186 0 R (section*.70) 2840 0 R (section*.71) 2895 0 R (section*.72) 2898 0 R (section*.73) 2900 0 R (section*.74) 2919 0 R (section*.75) 2948 0 R (section*.76) 2953 0 R (section*.77) 2955 0 R (section*.78) 2992 0 R (section*.79) 3000 0 R (section*.8) 1191 0 R (section*.80) 3038 0 R (section*.81) 3041 0 R (section*.82) 3043 0 R (section*.83) 3046 0 R (section*.84) 3062 0 R (section*.85) 3065 0 R (section*.86) 3067 0 R (section*.87) 3096 0 R (section*.88) 3109 0 R (section*.89) 3196 0 R (section*.9) 1202 0 R (section*.90) 3200 0 R (section*.91) 3202 0 R (section*.92) 3222 0 R (section*.93) 3250 0 R (section*.94) 3294 0 R (section*.95) 3308 0 R (section*.96) 3318 0 R (section*.97) 3348 0 R (section*.98) 3364 0 R (section*.99) 3395 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.1.5) 26 0 R (section.1.6) 30 0 R (section.1.7) 34 0 R (section.1.8) 38 0 R (section.1.9) 42 0 R (section.2.1) 50 0 R (section.3.1) 58 0 R (section.4.1) 66 0 R (section.5.1) 74 0 R (section.6.1) 82 0 R (section.6.10) 118 0 R (section.6.11) 122 0 R (section.6.12) 126 0 R (section.6.13) 130 0 R (section.6.14) 134 0 R (section.6.15) 138 0 R (section.6.16) 142 0 R (section.6.17) 146 0 R (section.6.18) 150 0 R (section.6.19) 154 0 R (section.6.2) 86 0 R (section.6.20) 158 0 R (section.6.21) 162 0 R (section.6.22) 166 0 R (section.6.23) 170 0 R (section.6.24) 174 0 R (section.6.3) 90 0 R (section.6.4) 94 0 R (section.6.5) 98 0 R (section.6.6) 102 0 R (section.6.7) 106 0 R (section.6.8) 110 0 R (section.6.9) 114 0 R (section.7.1) 182 0 R (section.7.10) 218 0 R (section.7.11) 222 0 R (section.7.12) 226 0 R (section.7.13) 230 0 R (section.7.14) 234 0 R (section.7.15) 238 0 R (section.7.16) 242 0 R (section.7.17) 246 0 R (section.7.18) 250 0 R (section.7.19) 254 0 R (section.7.2) 186 0 R (section.7.20) 258 0 R (section.7.21) 262 0 R (section.7.3) 190 0 R (section.7.4) 194 0 R (section.7.5) 198 0 R (section.7.6) 202 0 R (section.7.7) 206 0 R (section.7.8) 210 0 R (section.7.9) 214 0 R (section.8.1) 270 0 R (section.8.10) 306 0 R (section.8.11) 310 0 R (section.8.12) 314 0 R (section.8.13) 318 0 R (section.8.14) 322 0 R (section.8.15) 326 0 R (section.8.16) 330 0 R (section.8.17) 334 0 R (section.8.18) 338 0 R (section.8.19) 342 0 R (section.8.2) 274 0 R (section.8.20) 346 0 R (section.8.21) 350 0 R (section.8.22) 354 0 R (section.8.23) 358 0 R (section.8.24) 362 0 R (section.8.25) 366 0 R (section.8.26) 370 0 R (section.8.27) 374 0 R (section.8.28) 378 0 R (section.8.29) 382 0 R (section.8.3) 278 0 R (section.8.30) 386 0 R (section.8.31) 390 0 R (section.8.32) 394 0 R (section.8.33) 398 0 R (section.8.34) 402 0 R (section.8.4) 282 0 R (section.8.5) 286 0 R (section.8.6) 290 0 R (section.8.7) 294 0 R (section.8.8) 298 0 R (section.8.9) 302 0 R (section.9.1) 410 0 R (section.9.10) 446 0 R (section.9.11) 450 0 R (section.9.12) 454 0 R (section.9.13) 458 0 R (section.9.14) 462 0 R (section.9.15) 466 0 R (section.9.16) 470 0 R (section.9.2) 414 0 R (section.9.3) 418 0 R (section.9.4) 422 0 R (section.9.5) 426 0 R (section.9.6) 430 0 R (section.9.7) 434 0 R (section.9.8) 438 0 R (section.9.9) 442 0 R (subsection.1.4.1) 670 0 R (subsection.1.4.2) 674 0 R (subsection.1.6.1) 689 0 R (subsection.1.7.1) 769 0 R (subsection.1.7.2) 785 0 R (subsection.1.7.3) 792 0 R (subsection.1.7.4) 798 0 R (subsection.1.7.5) 803 0 R (subsection.1.7.6) 813 0 R (subsection.1.8.1) 835 0 R (subsection.1.8.2) 841 0 R (subsection.1.8.3) 847 0 R (subsection.1.9.1) 872 0 R (subsection.6.1.1) 1124 0 R (subsection.6.1.2) 1138 0 R (subsection.6.1.3) 1142 0 R (subsection.6.1.4) 1154 0 R (subsection.6.1.5) 1156 0 R (subsection.6.1.6) 1158 0 R (subsection.6.1.7) 1223 0 R (subsection.6.10.1) 2168 0 R (subsection.6.10.2) 2187 0 R (subsection.6.11.1) 2211 0 R (subsection.6.11.2) 2253 0 R (subsection.6.12.1) 2269 0 R (subsection.6.12.2) 2390 0 R (subsection.6.12.3) 2443 0 R (subsection.6.12.4) 2484 0 R (subsection.6.13.1) 2491 0 R (subsection.6.13.2) 2496 0 R (subsection.6.14.1) 2503 0 R (subsection.6.15.1) 2533 0 R (subsection.6.15.2) 2559 0 R (subsection.6.16.1) 2590 0 R (subsection.6.16.2) 2600 0 R (subsection.6.17.1) 2609 0 R (subsection.6.17.2) 2670 0 R (subsection.6.18.1) 2758 0 R (subsection.6.18.2) 2793 0 R (subsection.6.18.3) 2799 0 R (subsection.6.19.1) 2824 0 R (subsection.6.19.2) 2863 0 R (subsection.6.2.1) 1295 0 R (subsection.6.20.1) 2894 0 R (subsection.6.20.2) 2935 0 R (subsection.6.21.1) 2947 0 R (subsection.6.21.2) 3012 0 R (subsection.6.22.1) 3036 0 R (subsection.6.23.1) 3055 0 R (subsection.6.23.2) 3128 0 R (subsection.6.24.1) 3195 0 R (subsection.6.24.2) 3234 0 R (subsection.6.24.3) 3236 0 R (subsection.6.3.1) 1326 0 R (subsection.6.3.2) 1335 0 R (subsection.6.4.1) 1372 0 R (subsection.6.4.2) 1377 0 R (subsection.6.5.1) 1390 0 R (subsection.6.5.2) 1404 0 R (subsection.6.5.3) 1449 0 R (subsection.6.6.1) 1462 0 R (subsection.6.6.2) 1512 0 R (subsection.6.6.3) 1604 0 R (subsection.6.7.1) 1655 0 R (subsection.6.7.2) 1688 0 R (subsection.6.7.3) 1731 0 R (subsection.6.8.1) 1743 0 R (subsection.6.8.2) 1747 0 R (subsection.6.9.1) 1761 0 R (subsection.6.9.2) 2052 0 R (subsection.6.9.3) 2060 0 R (subsection.6.9.4) 2124 0 R (subsection.7.1.1) 3247 0 R (subsection.7.10.1) 3447 0 R (subsection.7.11.1) 3463 0 R (subsection.7.12.1) 3479 0 R (subsection.7.13.1) 3535 0 R (subsection.7.14.1) 3544 0 R (subsection.7.15.1) 3559 0 R (subsection.7.16.1) 3610 0 R (subsection.7.17.1) 3620 0 R (subsection.7.18.1) 3705 0 R (subsection.7.19.1) 3771 0 R (subsection.7.2.1) 3291 0 R (subsection.7.20.1) 3794 0 R (subsection.7.21.1) 3842 0 R (subsection.7.3.1) 3307 0 R (subsection.7.4.1) 3317 0 R (subsection.7.5.1) 3347 0 R (subsection.7.6.1) 3362 0 R (subsection.7.7.1) 3394 0 R (subsection.7.8.1) 3405 0 R (subsection.7.9.1) 3415 0 R (subsection.8.1.1) 3884 0 R (subsection.8.10.1) 4109 0 R (subsection.8.11.1) 4128 0 R (subsection.8.12.1) 4163 0 R (subsection.8.13.1) 4200 0 R (subsection.8.14.1) 4210 0 R (subsection.8.15.1) 4224 0 R (subsection.8.16.1) 4245 0 R (subsection.8.17.1) 4263 0 R (subsection.8.18.1) 4287 0 R (subsection.8.19.1) 4304 0 R (subsection.8.2.1) 3895 0 R (subsection.8.20.1) 4321 0 R (subsection.8.21.1) 4329 0 R (subsection.8.22.1) 4384 0 R (subsection.8.23.1) 4435 0 R (subsection.8.24.1) 4452 0 R (subsection.8.25.1) 4471 0 R (subsection.8.26.1) 4500 0 R (subsection.8.27.1) 4526 0 R (subsection.8.28.1) 4536 0 R (subsection.8.29.1) 4653 0 R (subsection.8.3.1) 3910 0 R (subsection.8.30.1) 4842 0 R (subsection.8.31.1) 4862 0 R (subsection.8.32.1) 4883 0 R (subsection.8.33.1) 4907 0 R (subsection.8.34.1) 4962 0 R (subsection.8.4.1) 3968 0 R (subsection.8.5.1) 4000 0 R (subsection.8.6.1) 4022 0 R (subsection.8.7.1) 4050 0 R (subsection.8.8.1) 4064 0 R (subsection.8.9.1) 4080 0 R (subsubsection.1.6.1.1) 695 0 R (subsubsection.1.6.1.10) 760 0 R (subsubsection.1.6.1.2) 698 0 R (subsubsection.1.6.1.3) 707 0 R (subsubsection.1.6.1.4) 712 0 R (subsubsection.1.6.1.5) 726 0 R (subsubsection.1.6.1.6) 730 0 R (subsubsection.1.6.1.7) 735 0 R (subsubsection.1.6.1.8) 739 0 R (subsubsection.1.6.1.9) 755 0 R (subsubsection.1.8.1.1) 837 0 R (subsubsection.1.8.1.2) 839 0 R (subsubsection.1.8.3.1) 849 0 R (subsubsection.1.8.3.2) 851 0 R (subsubsection.1.8.3.3) 853 0 R (subsubsection.1.8.3.4) 855 0 R (subsubsection.1.8.3.5) 861 0 R (subsubsection.1.8.3.6) 863 0 R (subsubsection.1.8.3.7) 865 0 R (subsubsection.6.1.7.1) 1224 0 R (subsubsection.6.1.7.10) 1276 0 R (subsubsection.6.1.7.11) 1279 0 R (subsubsection.6.1.7.12) 1282 0 R (subsubsection.6.1.7.13) 1289 0 R (subsubsection.6.1.7.2) 1242 0 R (subsubsection.6.1.7.3) 1246 0 R (subsubsection.6.1.7.4) 1248 0 R (subsubsection.6.1.7.5) 1252 0 R (subsubsection.6.1.7.6) 1261 0 R (subsubsection.6.1.7.7) 1262 0 R (subsubsection.6.1.7.8) 1264 0 R (subsubsection.6.1.7.9) 1272 0 R (subsubsection.6.10.2.1) 2189 0 R (subsubsection.6.10.2.2) 2199 0 R (subsubsection.6.10.2.3) 2203 0 R (subsubsection.6.10.2.4) 2205 0 R (subsubsection.6.11.2.1) 2254 0 R (subsubsection.6.11.2.2) 2256 0 R (subsubsection.6.11.2.3) 2263 0 R (subsubsection.6.12.2.1) 2391 0 R (subsubsection.6.12.2.10) 2414 0 R (subsubsection.6.12.2.11) 2419 0 R (subsubsection.6.12.2.12) 2420 0 R (subsubsection.6.12.2.13) 2422 0 R (subsubsection.6.12.2.14) 2423 0 R (subsubsection.6.12.2.15) 2424 0 R (subsubsection.6.12.2.16) 2430 0 R (subsubsection.6.12.2.17) 2431 0 R (subsubsection.6.12.2.18) 2432 0 R (subsubsection.6.12.2.19) 2433 0 R (subsubsection.6.12.2.2) 2392 0 R (subsubsection.6.12.2.20) 2434 0 R (subsubsection.6.12.2.21) 2435 0 R (subsubsection.6.12.2.22) 2440 0 R (subsubsection.6.12.2.23) 2441 0 R (subsubsection.6.12.2.24) 2442 0 R (subsubsection.6.12.2.3) 2393 0 R (subsubsection.6.12.2.4) 2394 0 R (subsubsection.6.12.2.5) 2401 0 R (subsubsection.6.12.2.6) 2402 0 R (subsubsection.6.12.2.7) 2403 0 R (subsubsection.6.12.2.8) 2406 0 R (subsubsection.6.12.2.9) 2412 0 R (subsubsection.6.12.3.1) 2444 0 R (subsubsection.6.12.3.2) 2454 0 R (subsubsection.6.12.3.3) 2463 0 R (subsubsection.6.12.3.4) 2474 0 R (subsubsection.6.12.3.5) 2480 0 R (subsubsection.6.12.4.1) 2485 0 R (subsubsection.6.13.2.1) 2498 0 R (subsubsection.6.15.2.1) 2560 0 R (subsubsection.6.15.2.2) 2565 0 R (subsubsection.6.15.2.3) 2571 0 R (subsubsection.6.15.2.4) 2580 0 R (subsubsection.6.16.2.1) 2602 0 R (subsubsection.6.16.2.2) 2604 0 R (subsubsection.6.17.2.1) 2671 0 R (subsubsection.6.17.2.10) 2727 0 R (subsubsection.6.17.2.11) 2730 0 R (subsubsection.6.17.2.12) 2739 0 R (subsubsection.6.17.2.13) 2742 0 R (subsubsection.6.17.2.14) 2746 0 R (subsubsection.6.17.2.2) 2689 0 R (subsubsection.6.17.2.3) 2693 0 R (subsubsection.6.17.2.4) 2695 0 R (subsubsection.6.17.2.5) 2698 0 R (subsubsection.6.17.2.6) 2708 0 R (subsubsection.6.17.2.7) 2713 0 R (subsubsection.6.17.2.8) 2716 0 R (subsubsection.6.17.2.9) 2724 0 R (subsubsection.6.18.2.1) 2794 0 R (subsubsection.6.18.3.1) 2800 0 R (subsubsection.6.18.3.2) 2805 0 R (subsubsection.6.18.3.3) 2815 0 R (subsubsection.6.19.2.1) 2864 0 R (subsubsection.6.19.2.2) 2868 0 R (subsubsection.6.19.2.3) 2872 0 R (subsubsection.6.19.2.4) 2876 0 R (subsubsection.6.19.2.5) 2886 0 R (subsubsection.6.20.2.1) 2936 0 R (subsubsection.6.20.2.2) 2937 0 R (subsubsection.6.20.2.3) 2940 0 R (subsubsection.6.21.2.1) 3014 0 R (subsubsection.6.21.2.2) 3017 0 R (subsubsection.6.21.2.3) 3026 0 R (subsubsection.6.21.2.4) 3028 0 R (subsubsection.6.21.2.5) 3030 0 R (subsubsection.6.23.2.1) 3129 0 R (subsubsection.6.23.2.10) 3188 0 R (subsubsection.6.23.2.2) 3142 0 R (subsubsection.6.23.2.3) 3145 0 R (subsubsection.6.23.2.4) 3148 0 R (subsubsection.6.23.2.5) 3156 0 R (subsubsection.6.23.2.6) 3160 0 R (subsubsection.6.23.2.7) 3173 0 R (subsubsection.6.23.2.8) 3177 0 R (subsubsection.6.23.2.9) 3180 0 R (subsubsection.6.24.2.1) 3235 0 R (subsubsection.6.24.3.1) 3237 0 R (subsubsection.6.3.2.1) 1337 0 R (subsubsection.6.3.2.2) 1339 0 R (subsubsection.6.3.2.3) 1350 0 R (subsubsection.6.3.2.4) 1351 0 R (subsubsection.6.3.2.5) 1353 0 R (subsubsection.6.3.2.6) 1355 0 R (subsubsection.6.3.2.7) 1364 0 R (subsubsection.6.4.2.1) 1379 0 R (subsubsection.6.4.2.2) 1383 0 R (subsubsection.6.5.2.1) 1405 0 R (subsubsection.6.5.2.2) 1418 0 R (subsubsection.6.5.2.3) 1427 0 R (subsubsection.6.5.2.4) 1431 0 R (subsubsection.6.5.2.5) 1434 0 R (subsubsection.6.5.2.6) 1445 0 R (subsubsection.6.5.3.1) 1450 0 R (subsubsection.6.6.2.1) 1513 0 R (subsubsection.6.6.2.10) 1564 0 R (subsubsection.6.6.2.11) 1575 0 R (subsubsection.6.6.2.12) 1577 0 R (subsubsection.6.6.2.13) 1581 0 R (subsubsection.6.6.2.14) 1582 0 R (subsubsection.6.6.2.15) 1590 0 R (subsubsection.6.6.2.16) 1593 0 R (subsubsection.6.6.2.17) 1596 0 R (subsubsection.6.6.2.18) 1598 0 R (subsubsection.6.6.2.19) 1603 0 R (subsubsection.6.6.2.2) 1526 0 R (subsubsection.6.6.2.3) 1530 0 R (subsubsection.6.6.2.4) 1533 0 R (subsubsection.6.6.2.5) 1535 0 R (subsubsection.6.6.2.6) 1545 0 R (subsubsection.6.6.2.7) 1551 0 R (subsubsection.6.6.2.8) 1555 0 R (subsubsection.6.6.2.9) 1559 0 R (subsubsection.6.6.3.1) 1605 0 R (subsubsection.6.6.3.2) 1615 0 R (subsubsection.6.6.3.3) 1627 0 R (subsubsection.6.6.3.4) 1633 0 R (subsubsection.6.6.3.5) 1646 0 R (subsubsection.6.7.2.1) 1689 0 R (subsubsection.6.7.2.10) 1725 0 R (subsubsection.6.7.2.11) 1726 0 R (subsubsection.6.7.2.2) 1696 0 R (subsubsection.6.7.2.3) 1697 0 R (subsubsection.6.7.2.4) 1706 0 R (subsubsection.6.7.2.5) 1708 0 R (subsubsection.6.7.2.6) 1710 0 R (subsubsection.6.7.2.7) 1716 0 R (subsubsection.6.7.2.8) 1718 0 R (subsubsection.6.7.2.9) 1719 0 R (subsubsection.6.7.3.1) 1732 0 R (subsubsection.6.8.2.1) 1749 0 R (subsubsection.6.9.2.1) 2053 0 R (subsubsection.6.9.3.1) 2061 0 R (subsubsection.6.9.3.10) 2105 0 R (subsubsection.6.9.3.11) 2107 0 R (subsubsection.6.9.3.12) 2114 0 R (subsubsection.6.9.3.13) 2120 0 R (subsubsection.6.9.3.2) 2065 0 R (subsubsection.6.9.3.3) 2068 0 R (subsubsection.6.9.3.4) 2077 0 R (subsubsection.6.9.3.5) 2085 0 R (subsubsection.6.9.3.6) 2086 0 R (subsubsection.6.9.3.7) 2092 0 R (subsubsection.6.9.3.8) 2096 0 R (subsubsection.6.9.3.9) 2099 0 R (subsubsection.6.9.4.1) 2125 0 R (subsubsection.6.9.4.2) 2128 0 R (subsubsection.6.9.4.3) 2135 0 R (subsubsection.6.9.4.4) 2142 0 R (subsubsection.6.9.4.5) 2146 0 R (subsubsection.6.9.4.6) 2153 0 R (subsubsection.6.9.4.7) 2156 0 R] +/Limits [(Doc-Start) (subsubsection.6.9.4.7)] +>> endobj +5671 0 obj << +/Kids [5670 0 R] +>> endobj +5672 0 obj << +/Dests 5671 0 R +>> endobj +5673 0 obj << +/Type /Catalog +/Pages 5668 0 R +/Outlines 5669 0 R +/Names 5672 0 R +/PageMode /UseOutlines +/OpenAction 473 0 R +>> endobj +5674 0 obj << +/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() +/CreationDate (D:20060612102335+02'00') +/PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) +>> endobj +xref +0 5675 +0000000001 65535 f +0000000002 00000 f +0000000003 00000 f +0000000004 00000 f +0000000000 00000 f +0000000009 00000 n +0000050642 00000 n +0001261026 00000 n +0000000054 00000 n +0000000093 00000 n +0000050814 00000 n +0001260954 00000 n +0000000140 00000 n +0000000171 00000 n +0000054400 00000 n +0001260868 00000 n +0000000219 00000 n +0000000258 00000 n +0000054521 00000 n +0001260782 00000 n +0000000306 00000 n +0000000342 00000 n +0000058977 00000 n +0001260696 00000 n +0000000390 00000 n +0000000440 00000 n +0000059339 00000 n +0001260610 00000 n +0000000488 00000 n +0000000524 00000 n +0000063433 00000 n +0001260524 00000 n +0000000572 00000 n +0000000628 00000 n +0000080583 00000 n +0001260438 00000 n +0000000676 00000 n +0000000703 00000 n +0000102655 00000 n +0001260352 00000 n +0000000751 00000 n +0000000794 00000 n +0000110315 00000 n +0001260279 00000 n +0000000842 00000 n +0000000872 00000 n +0000119269 00000 n +0001260154 00000 n +0000000918 00000 n +0000000957 00000 n +0000119326 00000 n +0001260093 00000 n +0000001005 00000 n +0000001039 00000 n +0000125101 00000 n +0001259967 00000 n +0000001085 00000 n +0000001130 00000 n +0000125158 00000 n +0001259906 00000 n +0000001178 00000 n +0000001220 00000 n +0000134932 00000 n +0001259780 00000 n +0000001266 00000 n +0000001313 00000 n +0000134989 00000 n +0001259719 00000 n +0000001361 00000 n +0000001403 00000 n +0000147442 00000 n +0001259593 00000 n +0000001449 00000 n +0000001486 00000 n +0000147500 00000 n +0001259532 00000 n +0000001534 00000 n +0000001570 00000 n +0000154678 00000 n +0001259403 00000 n +0000001616 00000 n +0000001663 00000 n +0000154795 00000 n +0001259329 00000 n +0000001711 00000 n +0000001742 00000 n +0000193044 00000 n +0001259242 00000 n +0000001790 00000 n +0000001821 00000 n +0000196930 00000 n +0001259155 00000 n +0000001869 00000 n +0000001915 00000 n +0000205317 00000 n +0001259068 00000 n +0000001963 00000 n +0000002010 00000 n +0000210149 00000 n +0001258979 00000 n +0000002058 00000 n +0000002105 00000 n +0000228508 00000 n +0001258888 00000 n +0000002154 00000 n +0000002199 00000 n +0000271738 00000 n +0001258796 00000 n +0000002248 00000 n +0000002292 00000 n +0000288517 00000 n +0001258704 00000 n +0000002341 00000 n +0000002397 00000 n +0000293232 00000 n +0001258612 00000 n +0000002446 00000 n +0000002486 00000 n +0000377976 00000 n +0001258520 00000 n +0000002536 00000 n +0000002591 00000 n +0000387992 00000 n +0001258428 00000 n +0000002641 00000 n +0000002692 00000 n +0000399293 00000 n +0001258336 00000 n +0000002742 00000 n +0000002791 00000 n +0000440708 00000 n +0001258244 00000 n +0000002841 00000 n +0000002892 00000 n +0000446093 00000 n +0001258152 00000 n +0000002942 00000 n +0000002981 00000 n +0000451263 00000 n +0001258060 00000 n +0000003031 00000 n +0000003064 00000 n +0000462282 00000 n +0001257968 00000 n +0000003114 00000 n +0000003149 00000 n +0000468114 00000 n +0001257876 00000 n +0000003199 00000 n +0000003239 00000 n +0000502385 00000 n +0001257784 00000 n +0000003289 00000 n +0000003342 00000 n +0000517178 00000 n +0001257692 00000 n +0000003392 00000 n +0000003424 00000 n +0000531752 00000 n +0001257600 00000 n +0000003474 00000 n +0000003512 00000 n +0000543323 00000 n +0001257508 00000 n +0000003562 00000 n +0000003595 00000 n +0000554956 00000 n +0001257416 00000 n +0000003645 00000 n +0000003677 00000 n +0000563002 00000 n +0001257324 00000 n +0000003727 00000 n +0000003757 00000 n +0000590334 00000 n +0001257246 00000 n +0000003807 00000 n +0000003837 00000 n +0000600208 00000 n +0001257113 00000 n +0000003884 00000 n +0000003940 00000 n +0000600326 00000 n +0001257034 00000 n +0000003989 00000 n +0000004040 00000 n +0000603631 00000 n +0001256941 00000 n +0000004089 00000 n +0000004149 00000 n +0000605400 00000 n +0001256848 00000 n +0000004198 00000 n +0000004255 00000 n +0000609814 00000 n +0001256755 00000 n +0000004304 00000 n +0000004355 00000 n +0000612585 00000 n +0001256662 00000 n +0000004404 00000 n +0000004455 00000 n +0000618018 00000 n +0001256569 00000 n +0000004504 00000 n +0000004546 00000 n +0000620396 00000 n +0001256476 00000 n +0000004595 00000 n +0000004644 00000 n +0000622307 00000 n +0001256383 00000 n +0000004693 00000 n +0000004732 00000 n +0000627362 00000 n +0001256290 00000 n +0000004781 00000 n +0000004831 00000 n +0000631195 00000 n +0001256197 00000 n +0000004881 00000 n +0000004934 00000 n +0000634149 00000 n +0001256104 00000 n +0000004984 00000 n +0000005026 00000 n +0000641477 00000 n +0001256011 00000 n +0000005076 00000 n +0000005124 00000 n +0000646798 00000 n +0001255918 00000 n +0000005174 00000 n +0000005229 00000 n +0000649327 00000 n +0001255825 00000 n +0000005279 00000 n +0000005333 00000 n +0000657364 00000 n +0001255732 00000 n +0000005383 00000 n +0000005440 00000 n +0000659751 00000 n +0001255639 00000 n +0000005490 00000 n +0000005550 00000 n +0000668586 00000 n +0001255546 00000 n +0000005600 00000 n +0000005649 00000 n +0000685418 00000 n +0001255453 00000 n +0000005699 00000 n +0000005755 00000 n +0000690785 00000 n +0001255360 00000 n +0000005805 00000 n +0000005860 00000 n +0000698518 00000 n +0001255267 00000 n +0000005910 00000 n +0000005966 00000 n +0000705116 00000 n +0001255188 00000 n +0000006016 00000 n +0000006071 00000 n +0000708522 00000 n +0001255054 00000 n +0000006118 00000 n +0000006164 00000 n +0000708641 00000 n +0001254975 00000 n +0000006213 00000 n +0000006278 00000 n +0000711484 00000 n +0001254882 00000 n +0000006327 00000 n +0000006392 00000 n +0000720157 00000 n +0001254789 00000 n +0000006441 00000 n +0000006496 00000 n +0000727972 00000 n +0001254696 00000 n +0000006545 00000 n +0000006600 00000 n +0000735780 00000 n +0001254603 00000 n +0000006649 00000 n +0000006700 00000 n +0000740603 00000 n +0001254510 00000 n +0000006749 00000 n +0000006800 00000 n +0000745469 00000 n +0001254417 00000 n +0000006849 00000 n +0000006904 00000 n +0000749092 00000 n +0001254324 00000 n +0000006953 00000 n +0000007008 00000 n +0000756051 00000 n +0001254231 00000 n +0000007057 00000 n +0000007114 00000 n +0000759655 00000 n +0001254138 00000 n +0000007164 00000 n +0000007221 00000 n +0000766391 00000 n +0001254045 00000 n +0000007271 00000 n +0000007332 00000 n +0000773837 00000 n +0001253952 00000 n +0000007382 00000 n +0000007443 00000 n +0000779421 00000 n +0001253859 00000 n +0000007493 00000 n +0000007554 00000 n +0000782070 00000 n +0001253766 00000 n +0000007604 00000 n +0000007665 00000 n +0000786980 00000 n +0001253673 00000 n +0000007715 00000 n +0000007772 00000 n +0000791134 00000 n +0001253580 00000 n +0000007822 00000 n +0000007867 00000 n +0000796289 00000 n +0001253487 00000 n +0000007917 00000 n +0000007962 00000 n +0000800130 00000 n +0001253394 00000 n +0000008012 00000 n +0000008066 00000 n +0000804148 00000 n +0001253301 00000 n +0000008116 00000 n +0000008166 00000 n +0000805832 00000 n +0001253208 00000 n +0000008216 00000 n +0000008259 00000 n +0000812562 00000 n +0001253115 00000 n +0000008309 00000 n +0000008355 00000 n +0000823125 00000 n +0001253022 00000 n +0000008405 00000 n +0000008448 00000 n +0000832696 00000 n +0001252929 00000 n +0000008498 00000 n +0000008544 00000 n +0000836815 00000 n +0001252836 00000 n +0000008594 00000 n +0000008640 00000 n +0000841704 00000 n +0001252743 00000 n +0000008690 00000 n +0000008743 00000 n +0000846631 00000 n +0001252650 00000 n +0000008793 00000 n +0000008846 00000 n +0000849074 00000 n +0001252557 00000 n +0000008896 00000 n +0000008946 00000 n +0000859493 00000 n +0001252464 00000 n +0000008996 00000 n +0000009040 00000 n +0000881877 00000 n +0001252371 00000 n +0000009090 00000 n +0000009134 00000 n +0000929043 00000 n +0001252278 00000 n +0000009184 00000 n +0000009236 00000 n +0000934010 00000 n +0001252185 00000 n +0000009286 00000 n +0000009337 00000 n +0000939281 00000 n +0001252092 00000 n +0000009387 00000 n +0000009438 00000 n +0000943710 00000 n +0001251999 00000 n +0000009488 00000 n +0000009535 00000 n +0000958897 00000 n +0001251920 00000 n +0000009585 00000 n +0000009635 00000 n +0000961041 00000 n +0001251800 00000 n +0000009682 00000 n +0000009731 00000 n +0000961160 00000 n +0001251721 00000 n +0000009780 00000 n +0000009807 00000 n +0000971633 00000 n +0001251628 00000 n +0000009856 00000 n +0000009883 00000 n +0000974077 00000 n +0001251535 00000 n +0000009932 00000 n +0000009979 00000 n +0000976886 00000 n +0001251442 00000 n +0000010028 00000 n +0000010078 00000 n +0000979044 00000 n +0001251349 00000 n +0000010127 00000 n +0000010160 00000 n +0000982262 00000 n +0001251256 00000 n +0000010209 00000 n +0000010242 00000 n +0000984732 00000 n +0001251163 00000 n +0000010291 00000 n +0000010319 00000 n +0000998489 00000 n +0001251070 00000 n +0000010368 00000 n +0000010396 00000 n +0001001910 00000 n +0001250977 00000 n +0000010445 00000 n +0000010471 00000 n +0001008669 00000 n +0001250884 00000 n +0000010521 00000 n +0000010547 00000 n +0001012312 00000 n +0001250791 00000 n +0000010597 00000 n +0000010626 00000 n +0001021683 00000 n +0001250698 00000 n +0000010676 00000 n +0000010705 00000 n +0001024927 00000 n +0001250605 00000 n +0000010755 00000 n +0000010791 00000 n +0001029296 00000 n +0001250512 00000 n +0000010841 00000 n +0000010871 00000 n +0001034310 00000 n +0001250419 00000 n +0000010921 00000 n +0000010952 00000 n +0001046200 00000 n +0001250340 00000 n +0000011002 00000 n +0000011033 00000 n +0000011547 00000 n +0000011669 00000 n +0000016126 00000 n +0000011085 00000 n +0000016010 00000 n +0000016068 00000 n +0001242506 00000 n +0001222170 00000 n +0001242331 00000 n +0001221173 00000 n +0001200724 00000 n +0001221000 00000 n +0001243568 00000 n +0000015772 00000 n +0000015908 00000 n +0000015988 00000 n +0000016558 00000 n +0000016378 00000 n +0000016239 00000 n +0000016500 00000 n +0000022817 00000 n +0000018502 00000 n +0000016599 00000 n +0001199754 00000 n +0001181745 00000 n +0001199579 00000 n +0000022759 00000 n +0000018836 00000 n +0000018990 00000 n +0000019148 00000 n +0000019305 00000 n +0000019463 00000 n +0000019621 00000 n +0000019779 00000 n +0000019937 00000 n +0000020095 00000 n +0000020253 00000 n +0000020411 00000 n +0000020565 00000 n +0000020723 00000 n +0000020877 00000 n +0000021035 00000 n +0000021189 00000 n +0000021347 00000 n +0000021502 00000 n +0000021660 00000 n +0000021815 00000 n +0000021973 00000 n +0000022130 00000 n +0000022287 00000 n +0000022445 00000 n +0000022603 00000 n +0000031940 00000 n +0000025826 00000 n +0000022902 00000 n +0000026248 00000 n +0000026406 00000 n +0000026564 00000 n +0000026722 00000 n +0000026879 00000 n +0000027036 00000 n +0000027195 00000 n +0000027354 00000 n +0000027512 00000 n +0000027671 00000 n +0000027830 00000 n +0000027989 00000 n +0000028148 00000 n +0000028305 00000 n +0000028464 00000 n +0000028622 00000 n +0000028780 00000 n +0000028939 00000 n +0000029098 00000 n +0000029253 00000 n +0000029409 00000 n +0000029566 00000 n +0000029724 00000 n +0000029882 00000 n +0000030039 00000 n +0000030197 00000 n +0000030355 00000 n +0000030512 00000 n +0000030670 00000 n +0000030829 00000 n +0000030988 00000 n +0000031147 00000 n +0000031306 00000 n +0000031465 00000 n +0000031624 00000 n +0000031783 00000 n +0000040835 00000 n +0000034654 00000 n +0000032025 00000 n +0000040777 00000 n +0000035076 00000 n +0000035235 00000 n +0000035394 00000 n +0000035552 00000 n +0000035710 00000 n +0000035865 00000 n +0000036023 00000 n +0000036181 00000 n +0000036338 00000 n +0000036496 00000 n +0000036654 00000 n +0000036812 00000 n +0000036970 00000 n +0000037128 00000 n +0000037286 00000 n +0000037445 00000 n +0000037604 00000 n +0000037763 00000 n +0000037922 00000 n +0000038080 00000 n +0000038237 00000 n +0000038395 00000 n +0000038553 00000 n +0000038712 00000 n +0000038871 00000 n +0000039030 00000 n +0000039189 00000 n +0000039348 00000 n +0000039507 00000 n +0000039666 00000 n +0000039825 00000 n +0000039984 00000 n +0000040143 00000 n +0000040302 00000 n +0000040461 00000 n +0000040620 00000 n +0000046161 00000 n +0000042649 00000 n +0000040920 00000 n +0000046103 00000 n +0000042943 00000 n +0000043102 00000 n +0000043261 00000 n +0000043420 00000 n +0000043575 00000 n +0000043732 00000 n +0000043889 00000 n +0000044045 00000 n +0000044203 00000 n +0000044360 00000 n +0000044518 00000 n +0000044676 00000 n +0000044834 00000 n +0000044992 00000 n +0000045151 00000 n +0000045309 00000 n +0000045468 00000 n +0000045627 00000 n +0000045785 00000 n +0000045944 00000 n +0000050870 00000 n +0000048686 00000 n +0000046246 00000 n +0000050698 00000 n +0000048908 00000 n +0001181090 00000 n +0001179151 00000 n +0001180927 00000 n +0000049085 00000 n +0000049266 00000 n +0000049419 00000 n +0000049572 00000 n +0000049725 00000 n +0000049877 00000 n +0000050030 00000 n +0000050183 00000 n +0000050336 00000 n +0000050489 00000 n +0000050756 00000 n +0001243686 00000 n +0000192985 00000 n +0000399234 00000 n +0000196871 00000 n +0000205258 00000 n +0000210090 00000 n +0000288458 00000 n +0000228449 00000 n +0000468055 00000 n +0000154736 00000 n +0000054578 00000 n +0000054214 00000 n +0000050981 00000 n +0000054336 00000 n +0000054457 00000 n +0000059396 00000 n +0000057806 00000 n +0000054663 00000 n +0000057980 00000 n +0000058165 00000 n +0000058913 00000 n +0000059034 00000 n +0000059098 00000 n +0000058352 00000 n +0000058539 00000 n +0000059155 00000 n +0000059219 00000 n +0000058726 00000 n +0000059276 00000 n +0000210507 00000 n +0000213343 00000 n +0000352804 00000 n +0000357012 00000 n +0000348138 00000 n +0000063606 00000 n +0000062916 00000 n +0000059481 00000 n +0000063370 00000 n +0000063066 00000 n +0000063218 00000 n +0000063490 00000 n +0000063548 00000 n +0000069322 00000 n +0000067224 00000 n +0000063691 00000 n +0000068779 00000 n +0000068837 00000 n +0000068901 00000 n +0000067422 00000 n +0000068957 00000 n +0000069021 00000 n +0000067609 00000 n +0000067762 00000 n +0000067915 00000 n +0000068068 00000 n +0001178798 00000 n +0001176803 00000 n +0001178635 00000 n +0000069078 00000 n +0000069142 00000 n +0000068220 00000 n +0000068407 00000 n +0000068594 00000 n +0000069200 00000 n +0000069264 00000 n +0000418407 00000 n +0000641418 00000 n +0000244942 00000 n +0000244692 00000 n +0000075888 00000 n +0000072812 00000 n +0000069420 00000 n +0000075284 00000 n +0000073042 00000 n +0000073229 00000 n +0000073416 00000 n +0000073603 00000 n +0000075342 00000 n +0000075406 00000 n +0000073789 00000 n +0000073976 00000 n +0000075463 00000 n +0000075527 00000 n +0000074163 00000 n +0000074350 00000 n +0000074537 00000 n +0000075585 00000 n +0000075649 00000 n +0000074724 00000 n +0000074910 00000 n +0000075706 00000 n +0000075768 00000 n +0000075097 00000 n +0000075826 00000 n +0000244817 00000 n +0000263016 00000 n +0000249100 00000 n +0000239531 00000 n +0000235785 00000 n +0000239656 00000 n +0000239280 00000 n +0000249349 00000 n +0000245067 00000 n +0000080761 00000 n +0000078469 00000 n +0000075973 00000 n +0000080287 00000 n +0000080345 00000 n +0000078675 00000 n +0000078862 00000 n +0000079049 00000 n +0000080403 00000 n +0000080467 00000 n +0000079202 00000 n +0000079389 00000 n +0000079576 00000 n +0000079727 00000 n +0000079914 00000 n +0000080100 00000 n +0000080525 00000 n +0000080640 00000 n +0000080704 00000 n +0001243804 00000 n +0000257346 00000 n +0000239781 00000 n +0000257227 00000 n +0000276318 00000 n +0000085379 00000 n +0000083929 00000 n +0000080859 00000 n +0000085199 00000 n +0000084111 00000 n +0000084298 00000 n +0000084485 00000 n +0000084672 00000 n +0000084859 00000 n +0000085257 00000 n +0000085321 00000 n +0000085046 00000 n +0000087042 00000 n +0000086689 00000 n +0000085477 00000 n +0000086811 00000 n +0000086869 00000 n +0000086927 00000 n +0000086985 00000 n +0000090294 00000 n +0000089340 00000 n +0000087140 00000 n +0000090056 00000 n +0000090114 00000 n +0000089498 00000 n +0000089683 00000 n +0000089869 00000 n +0000090172 00000 n +0000090236 00000 n +0000249225 00000 n +0000248975 00000 n +0000093049 00000 n +0000092347 00000 n +0000090392 00000 n +0000092871 00000 n +0000092497 00000 n +0000092684 00000 n +0000092929 00000 n +0000092992 00000 n +0000096038 00000 n +0000095069 00000 n +0000093160 00000 n +0000095980 00000 n +0000095235 00000 n +0000095422 00000 n +0000095607 00000 n +0000095794 00000 n +0000099558 00000 n +0000098914 00000 n +0000096136 00000 n +0000099438 00000 n +0000099064 00000 n +0000099251 00000 n +0000099496 00000 n +0001243922 00000 n +0000103257 00000 n +0000102475 00000 n +0000099669 00000 n +0000102597 00000 n +0000102712 00000 n +0000102776 00000 n +0000102833 00000 n +0000102897 00000 n +0000102955 00000 n +0000103017 00000 n +0000103074 00000 n +0000103138 00000 n +0000103195 00000 n +0000106861 00000 n +0000106140 00000 n +0000103342 00000 n +0000106262 00000 n +0000106320 00000 n +0000106378 00000 n +0000106437 00000 n +0000106495 00000 n +0000106559 00000 n +0000106617 00000 n +0000106681 00000 n +0000106739 00000 n +0000106803 00000 n +0000110372 00000 n +0000109706 00000 n +0000106946 00000 n +0000109828 00000 n +0000109886 00000 n +0000109950 00000 n +0000110008 00000 n +0000110072 00000 n +0000110129 00000 n +0000110193 00000 n +0000110251 00000 n +0000112698 00000 n +0000112396 00000 n +0000110457 00000 n +0000112518 00000 n +0000112576 00000 n +0000112640 00000 n +0000113323 00000 n +0000113143 00000 n +0000112783 00000 n +0000113265 00000 n +0000119383 00000 n +0000115083 00000 n +0000113395 00000 n +0000119211 00000 n +0000115409 00000 n +0000115567 00000 n +0000115726 00000 n +0000115884 00000 n +0000116043 00000 n +0000116202 00000 n +0000116361 00000 n +0000116520 00000 n +0000116678 00000 n +0000116837 00000 n +0000116995 00000 n +0000117153 00000 n +0000117311 00000 n +0000117469 00000 n +0000117626 00000 n +0000117784 00000 n +0000117941 00000 n +0000118100 00000 n +0000118259 00000 n +0000118418 00000 n +0000118577 00000 n +0000118736 00000 n +0000118895 00000 n +0000119052 00000 n +0001244040 00000 n +0000120004 00000 n +0000119824 00000 n +0000119468 00000 n +0000119946 00000 n +0000125215 00000 n +0000121416 00000 n +0000120076 00000 n +0000125043 00000 n +0000121718 00000 n +0000121876 00000 n +0000122034 00000 n +0000122192 00000 n +0000122350 00000 n +0000122508 00000 n +0000122665 00000 n +0000122823 00000 n +0000122980 00000 n +0000123138 00000 n +0000123297 00000 n +0000123456 00000 n +0000123614 00000 n +0000123773 00000 n +0000123931 00000 n +0000124090 00000 n +0000124249 00000 n +0000124408 00000 n +0000124566 00000 n +0000124725 00000 n +0000124884 00000 n +0000125847 00000 n +0000125667 00000 n +0000125300 00000 n +0000125789 00000 n +0000135046 00000 n +0000127872 00000 n +0000125919 00000 n +0000134874 00000 n +0000128342 00000 n +0000128495 00000 n +0000128653 00000 n +0000128805 00000 n +0000128963 00000 n +0000129115 00000 n +0000129273 00000 n +0000129426 00000 n +0000129584 00000 n +0000129737 00000 n +0000129895 00000 n +0000130047 00000 n +0000130204 00000 n +0000130357 00000 n +0000130515 00000 n +0000130668 00000 n +0000130825 00000 n +0000130978 00000 n +0000131136 00000 n +0000131289 00000 n +0000131448 00000 n +0000131601 00000 n +0000131760 00000 n +0000131912 00000 n +0000132070 00000 n +0000132223 00000 n +0000132382 00000 n +0000132535 00000 n +0000132693 00000 n +0000132846 00000 n +0000133005 00000 n +0000133158 00000 n +0000133317 00000 n +0000133469 00000 n +0000133627 00000 n +0000133780 00000 n +0000133939 00000 n +0000134092 00000 n +0000134250 00000 n +0000134403 00000 n +0000134562 00000 n +0000134715 00000 n +0000600267 00000 n +0000603572 00000 n +0000605341 00000 n +0000609755 00000 n +0000612526 00000 n +0000617959 00000 n +0000620337 00000 n +0000622248 00000 n +0000627303 00000 n +0000631136 00000 n +0000634090 00000 n +0000646739 00000 n +0000649268 00000 n +0000657305 00000 n +0000659692 00000 n +0000668526 00000 n +0000685358 00000 n +0000690725 00000 n +0000698458 00000 n +0000705056 00000 n +0000135684 00000 n +0000135499 00000 n +0000135131 00000 n +0000135624 00000 n +0000147558 00000 n +0000138967 00000 n +0000135757 00000 n +0000147382 00000 n +0000139555 00000 n +0000139708 00000 n +0000139867 00000 n +0000140021 00000 n +0000140180 00000 n +0000140334 00000 n +0000140493 00000 n +0000140647 00000 n +0000140805 00000 n +0000140959 00000 n +0000141118 00000 n +0000141272 00000 n +0000141431 00000 n +0000141585 00000 n +0000141744 00000 n +0000141897 00000 n +0000142055 00000 n +0000142208 00000 n +0000142367 00000 n +0000142521 00000 n +0000142681 00000 n +0000142835 00000 n +0000142994 00000 n +0000143148 00000 n +0000143308 00000 n +0000143462 00000 n +0000143622 00000 n +0000143776 00000 n +0000143936 00000 n +0000144090 00000 n +0000144250 00000 n +0000144404 00000 n +0000144564 00000 n +0000144718 00000 n +0000144877 00000 n +0000145031 00000 n +0000145191 00000 n +0000145344 00000 n +0000145503 00000 n +0000145655 00000 n +0000145815 00000 n +0000145969 00000 n +0000146128 00000 n +0000146282 00000 n +0000146442 00000 n +0000146595 00000 n +0000146755 00000 n +0000146909 00000 n +0000147069 00000 n +0000147223 00000 n +0001244159 00000 n +0000708581 00000 n +0000711424 00000 n +0000720097 00000 n +0000727912 00000 n +0000735720 00000 n +0000740543 00000 n +0000745409 00000 n +0000749032 00000 n +0000755991 00000 n +0000759595 00000 n +0000766331 00000 n +0000773777 00000 n +0000779361 00000 n +0000782010 00000 n +0000786920 00000 n +0000791074 00000 n +0000796229 00000 n +0000800070 00000 n +0000804088 00000 n +0000805772 00000 n +0000812502 00000 n +0000823065 00000 n +0000832636 00000 n +0000836755 00000 n +0000841644 00000 n +0000152463 00000 n +0000149284 00000 n +0000147644 00000 n +0000152403 00000 n +0000149584 00000 n +0000149738 00000 n +0000149898 00000 n +0000150051 00000 n +0000150211 00000 n +0000150363 00000 n +0000150522 00000 n +0000150676 00000 n +0000150836 00000 n +0000150990 00000 n +0000151150 00000 n +0000151304 00000 n +0000151464 00000 n +0000151618 00000 n +0000151776 00000 n +0000151930 00000 n +0000152090 00000 n +0000152243 00000 n +0000846571 00000 n +0000849014 00000 n +0000859433 00000 n +0000881817 00000 n +0000928983 00000 n +0000933950 00000 n +0000939221 00000 n +0000943650 00000 n +0000958837 00000 n +0000154913 00000 n +0000154492 00000 n +0000152549 00000 n +0000154618 00000 n +0000154853 00000 n +0000160237 00000 n +0000157887 00000 n +0000154999 00000 n +0000159925 00000 n +0000158115 00000 n +0000158303 00000 n +0000158491 00000 n +0000158679 00000 n +0000158867 00000 n +0000159054 00000 n +0000159241 00000 n +0000159428 00000 n +0000159985 00000 n +0000160051 00000 n +0000159581 00000 n +0000159753 00000 n +0000160111 00000 n +0000160177 00000 n +0000179694 00000 n +0000175554 00000 n +0000186461 00000 n +0000175674 00000 n +0000186586 00000 n +0000182836 00000 n +0000164053 00000 n +0000162923 00000 n +0000160349 00000 n +0000163384 00000 n +0000163444 00000 n +0000163510 00000 n +0000163570 00000 n +0000163629 00000 n +0000163689 00000 n +0000163755 00000 n +0000163079 00000 n +0000163815 00000 n +0000163873 00000 n +0000163933 00000 n +0000163993 00000 n +0000163233 00000 n +0000446033 00000 n +0000169637 00000 n +0000166048 00000 n +0000164139 00000 n +0000169220 00000 n +0001175964 00000 n +0001158689 00000 n +0001175783 00000 n +0000169280 00000 n +0000166339 00000 n +0000169340 00000 n +0000166493 00000 n +0000169399 00000 n +0000166647 00000 n +0000166835 00000 n +0000169457 00000 n +0000166989 00000 n +0000167177 00000 n +0000167365 00000 n +0000167518 00000 n +0000167706 00000 n +0000169517 00000 n +0000167860 00000 n +0000168047 00000 n +0000168200 00000 n +0000168386 00000 n +0000169577 00000 n +0000168538 00000 n +0000168726 00000 n +0000168880 00000 n +0000169067 00000 n +0000182711 00000 n +0000182585 00000 n +0000175738 00000 n +0000171876 00000 n +0000169737 00000 n +0000174956 00000 n +0000175016 00000 n +0000172158 00000 n +0000172346 00000 n +0000172500 00000 n +0000172688 00000 n +0000175076 00000 n +0000172842 00000 n +0000175136 00000 n +0000173030 00000 n +0000173218 00000 n +0000173372 00000 n +0000173559 00000 n +0000175195 00000 n +0000175255 00000 n +0000173712 00000 n +0000175315 00000 n +0000173900 00000 n +0000175375 00000 n +0000174087 00000 n +0000175434 00000 n +0000174275 00000 n +0000175494 00000 n +0000175614 00000 n +0000174462 00000 n +0000174614 00000 n +0001158068 00000 n +0001147348 00000 n +0001157887 00000 n +0000174802 00000 n +0001244284 00000 n +0000179820 00000 n +0000179568 00000 n +0000182460 00000 n +0000186712 00000 n +0000188422 00000 n +0000961100 00000 n +0000179945 00000 n +0000177550 00000 n +0000175852 00000 n +0000179448 00000 n +0000179508 00000 n +0000177778 00000 n +0000177931 00000 n +0000178118 00000 n +0000179634 00000 n +0000178272 00000 n +0000179760 00000 n +0000178426 00000 n +0000178580 00000 n +0000178768 00000 n +0000179885 00000 n +0000178922 00000 n +0000179075 00000 n +0000179263 00000 n +0000182900 00000 n +0000181610 00000 n +0000180045 00000 n +0000182400 00000 n +0000181784 00000 n +0000182526 00000 n +0000182651 00000 n +0000181938 00000 n +0000182777 00000 n +0000182092 00000 n +0000182246 00000 n +0001001850 00000 n +0000186838 00000 n +0000184801 00000 n +0000183000 00000 n +0000186341 00000 n +0000186401 00000 n +0000185011 00000 n +0000185165 00000 n +0000185353 00000 n +0000186527 00000 n +0000185541 00000 n +0000185695 00000 n +0000186652 00000 n +0000185849 00000 n +0000186001 00000 n +0000186778 00000 n +0000186188 00000 n +0000188548 00000 n +0000187898 00000 n +0000186938 00000 n +0000188362 00000 n +0000188054 00000 n +0000188488 00000 n +0000188208 00000 n +0000193522 00000 n +0000190467 00000 n +0000188648 00000 n +0000192925 00000 n +0000193102 00000 n +0000193162 00000 n +0000190722 00000 n +0000190876 00000 n +0000191030 00000 n +0000191183 00000 n +0000191337 00000 n +0000191491 00000 n +0000191644 00000 n +0000193222 00000 n +0000193282 00000 n +0000191797 00000 n +0000193342 00000 n +0000191985 00000 n +0000193402 00000 n +0000192173 00000 n +0000192361 00000 n +0000193462 00000 n +0000192549 00000 n +0000192737 00000 n +0000517118 00000 n +0000531692 00000 n +0000543263 00000 n +0000554896 00000 n +0000562942 00000 n +0000590274 00000 n +0000434357 00000 n +0000197412 00000 n +0000195297 00000 n +0000193622 00000 n +0000196811 00000 n +0000196988 00000 n +0000197048 00000 n +0000195498 00000 n +0000195684 00000 n +0000195871 00000 n +0000196059 00000 n +0000196247 00000 n +0000196435 00000 n +0000196623 00000 n +0000197108 00000 n +0000197168 00000 n +0000197227 00000 n +0000197286 00000 n +0000197352 00000 n +0001244409 00000 n +0000200040 00000 n +0000199788 00000 n +0000202437 00000 n +0000199664 00000 n +0000199914 00000 n +0000200166 00000 n +0000199106 00000 n +0000197526 00000 n +0000199604 00000 n +0000199730 00000 n +0000199854 00000 n +0000199262 00000 n +0000199980 00000 n +0000199450 00000 n +0000200106 00000 n +0000202562 00000 n +0000201358 00000 n +0000200279 00000 n +0000202377 00000 n +0000201541 00000 n +0000201729 00000 n +0000201883 00000 n +0000202035 00000 n +0000202502 00000 n +0000202189 00000 n +0000974017 00000 n +0000976826 00000 n +0000205795 00000 n +0000203949 00000 n +0000202675 00000 n +0000205198 00000 n +0000205375 00000 n +0000205435 00000 n +0000204141 00000 n +0000204329 00000 n +0000204516 00000 n +0000205495 00000 n +0000205554 00000 n +0000205612 00000 n +0000204703 00000 n +0000204856 00000 n +0000205670 00000 n +0000205736 00000 n +0000205010 00000 n +0000434237 00000 n +0000210626 00000 n +0000207924 00000 n +0000205909 00000 n +0000210030 00000 n +0000210207 00000 n +0000210267 00000 n +0000208152 00000 n +0000208340 00000 n +0000210327 00000 n +0000208527 00000 n +0000208715 00000 n +0000208903 00000 n +0000209091 00000 n +0000209279 00000 n +0000209467 00000 n +0000210387 00000 n +0000209654 00000 n +0000209842 00000 n +0000210447 00000 n +0000210566 00000 n +0000332435 00000 n +0000217247 00000 n +0000217372 00000 n +0000217498 00000 n +0000221567 00000 n +0000221753 00000 n +0000213467 00000 n +0000212625 00000 n +0000210726 00000 n +0000213283 00000 n +0000212790 00000 n +0000212943 00000 n +0000213407 00000 n +0000213097 00000 n +0000392779 00000 n +0000217624 00000 n +0000215451 00000 n +0000213566 00000 n +0000217187 00000 n +0000215670 00000 n +0000215823 00000 n +0000217313 00000 n +0000215977 00000 n +0000216165 00000 n +0000216319 00000 n +0000217438 00000 n +0000216472 00000 n +0000216659 00000 n +0000217564 00000 n +0000216811 00000 n +0000216999 00000 n +0001244534 00000 n +0000221873 00000 n +0000219935 00000 n +0000217737 00000 n +0000221507 00000 n +0000220145 00000 n +0000220333 00000 n +0000220485 00000 n +0000221633 00000 n +0000220638 00000 n +0000220826 00000 n +0000220980 00000 n +0000221693 00000 n +0000221813 00000 n +0000221133 00000 n +0000221320 00000 n +0000366579 00000 n +0000222615 00000 n +0000222429 00000 n +0000221986 00000 n +0000222555 00000 n +0000228807 00000 n +0000224914 00000 n +0000222701 00000 n +0000228389 00000 n +0000228567 00000 n +0000228627 00000 n +0000228687 00000 n +0000225205 00000 n +0000225392 00000 n +0000225580 00000 n +0000225768 00000 n +0000225956 00000 n +0000226144 00000 n +0000228747 00000 n +0000226331 00000 n +0000226518 00000 n +0000226706 00000 n +0000226893 00000 n +0000227078 00000 n +0000227266 00000 n +0000227453 00000 n +0000227641 00000 n +0000227828 00000 n +0000228016 00000 n +0000228203 00000 n +0000252502 00000 n +0000252376 00000 n +0000239405 00000 n +0000235904 00000 n +0000231345 00000 n +0000228920 00000 n +0000235545 00000 n +0000231672 00000 n +0000231860 00000 n +0000235605 00000 n +0000232048 00000 n +0000232236 00000 n +0000232424 00000 n +0000232612 00000 n +0000232800 00000 n +0000235665 00000 n +0000232987 00000 n +0000233175 00000 n +0000233363 00000 n +0000233551 00000 n +0000233739 00000 n +0000233893 00000 n +0000234081 00000 n +0000234268 00000 n +0000234456 00000 n +0000234644 00000 n +0000234798 00000 n +0000234985 00000 n +0000235173 00000 n +0000235725 00000 n +0000235844 00000 n +0000235359 00000 n +0000252124 00000 n +0000249474 00000 n +0000252250 00000 n +0000266327 00000 n +0000322029 00000 n +0000263140 00000 n +0000239844 00000 n +0000237455 00000 n +0000236017 00000 n +0000239220 00000 n +0000237683 00000 n +0000239345 00000 n +0000237836 00000 n +0000237990 00000 n +0000238143 00000 n +0000239471 00000 n +0000238297 00000 n +0000238451 00000 n +0000239596 00000 n +0000238605 00000 n +0000239721 00000 n +0000238759 00000 n +0000238913 00000 n +0000239066 00000 n +0001034250 00000 n +0001012252 00000 n +0000245192 00000 n +0000241893 00000 n +0000239930 00000 n +0000244572 00000 n +0000244632 00000 n +0000242166 00000 n +0000242354 00000 n +0000242542 00000 n +0000242696 00000 n +0000242850 00000 n +0000244757 00000 n +0000243004 00000 n +0000243158 00000 n +0000243312 00000 n +0000244882 00000 n +0000243466 00000 n +0000243654 00000 n +0000243808 00000 n +0000245007 00000 n +0000243962 00000 n +0000244115 00000 n +0000244268 00000 n +0000244421 00000 n +0000245132 00000 n +0001244659 00000 n +0000978984 00000 n +0000984672 00000 n +0000249538 00000 n +0000247081 00000 n +0000245278 00000 n +0000248915 00000 n +0000247309 00000 n +0000247463 00000 n +0000247617 00000 n +0000249040 00000 n +0000247770 00000 n +0000249165 00000 n +0000247958 00000 n +0000248146 00000 n +0000248300 00000 n +0000249290 00000 n +0000249414 00000 n +0000248454 00000 n +0000248608 00000 n +0000248761 00000 n +0000252566 00000 n +0000251053 00000 n +0000249624 00000 n +0000252004 00000 n +0000252064 00000 n +0000251236 00000 n +0000251389 00000 n +0000252190 00000 n +0000251543 00000 n +0000251696 00000 n +0000252316 00000 n +0000251850 00000 n +0000252442 00000 n +0000257471 00000 n +0000255076 00000 n +0000252666 00000 n +0000257047 00000 n +0000257107 00000 n +0000257167 00000 n +0000257286 00000 n +0000255304 00000 n +0000255458 00000 n +0000255646 00000 n +0000255834 00000 n +0000256022 00000 n +0000256176 00000 n +0000256364 00000 n +0000256552 00000 n +0000256706 00000 n +0000257411 00000 n +0000256859 00000 n +0000276072 00000 n +0000285635 00000 n +0000263264 00000 n +0000260267 00000 n +0000257597 00000 n +0000262956 00000 n +0000260531 00000 n +0000260719 00000 n +0000260906 00000 n +0000261060 00000 n +0000263081 00000 n +0000261214 00000 n +0000261401 00000 n +0000261589 00000 n +0000261743 00000 n +0000261897 00000 n +0000263204 00000 n +0000262051 00000 n +0000262205 00000 n +0000262393 00000 n +0000262581 00000 n +0000262769 00000 n +0000266453 00000 n +0000265051 00000 n +0000263390 00000 n +0000266267 00000 n +0000265243 00000 n +0000265397 00000 n +0000265550 00000 n +0000266393 00000 n +0000265703 00000 n +0000265891 00000 n +0000266079 00000 n +0000272037 00000 n +0000268528 00000 n +0000266566 00000 n +0000271618 00000 n +0000271678 00000 n +0000271797 00000 n +0000271857 00000 n +0000268801 00000 n +0000268989 00000 n +0000269177 00000 n +0000269365 00000 n +0000269552 00000 n +0000269740 00000 n +0000269928 00000 n +0000270116 00000 n +0000270303 00000 n +0000270490 00000 n +0000270678 00000 n +0000271917 00000 n +0000270866 00000 n +0000271977 00000 n +0000271054 00000 n +0000271242 00000 n +0000271430 00000 n +0001244784 00000 n +0000276192 00000 n +0000280515 00000 n +0000280390 00000 n +0000282714 00000 n +0000282589 00000 n +0000276443 00000 n +0000278150 00000 n +0000278275 00000 n +0000280264 00000 n +0000276507 00000 n +0000274118 00000 n +0000272137 00000 n +0000275952 00000 n +0000276012 00000 n +0000276132 00000 n +0000274346 00000 n +0000274534 00000 n +0000274688 00000 n +0000274842 00000 n +0000274996 00000 n +0000275150 00000 n +0000276258 00000 n +0000276383 00000 n +0000275304 00000 n +0000275492 00000 n +0000275646 00000 n +0000275798 00000 n +0000278400 00000 n +0000277567 00000 n +0000276620 00000 n +0000278030 00000 n +0000278090 00000 n +0000277723 00000 n +0000278216 00000 n +0000277876 00000 n +0000278340 00000 n +0000280641 00000 n +0000279740 00000 n +0000278499 00000 n +0000280204 00000 n +0000279896 00000 n +0000280330 00000 n +0000280050 00000 n +0000280455 00000 n +0000280581 00000 n +0000282839 00000 n +0000282228 00000 n +0000280754 00000 n +0000282529 00000 n +0000282375 00000 n +0000282655 00000 n +0000282779 00000 n +0000285755 00000 n +0000284299 00000 n +0000282952 00000 n +0000285515 00000 n +0000285575 00000 n +0000285695 00000 n +0000284491 00000 n +0000284679 00000 n +0000284867 00000 n +0000285054 00000 n +0000285207 00000 n +0000285361 00000 n +0000288876 00000 n +0000287148 00000 n +0000285855 00000 n +0000288398 00000 n +0000288576 00000 n +0000288636 00000 n +0000287340 00000 n +0000287528 00000 n +0000288696 00000 n +0000288756 00000 n +0000288816 00000 n +0000287715 00000 n +0000287903 00000 n +0000288091 00000 n +0000288244 00000 n +0001244909 00000 n +0000371117 00000 n +0000293471 00000 n +0000291184 00000 n +0000288976 00000 n +0000293112 00000 n +0000293172 00000 n +0000293291 00000 n +0000293351 00000 n +0000291421 00000 n +0000291574 00000 n +0000293411 00000 n +0000291727 00000 n +0000291881 00000 n +0000292035 00000 n +0000292189 00000 n +0000292343 00000 n +0000292497 00000 n +0000292651 00000 n +0000292804 00000 n +0000292958 00000 n +0000387932 00000 n +0000440648 00000 n +0000377916 00000 n +0000305355 00000 n +0000296574 00000 n +0000293571 00000 n +0000303557 00000 n +0000303617 00000 n +0000297036 00000 n +0000297190 00000 n +0000297344 00000 n +0000297498 00000 n +0000297650 00000 n +0000297804 00000 n +0000297958 00000 n +0000303677 00000 n +0000303737 00000 n +0000298112 00000 n +0000303797 00000 n +0000298300 00000 n +0000303857 00000 n +0000298488 00000 n +0000303917 00000 n +0000298676 00000 n +0000303977 00000 n +0000298863 00000 n +0000304037 00000 n +0000299051 00000 n +0000304097 00000 n +0000299238 00000 n +0000304157 00000 n +0000299426 00000 n +0000304217 00000 n +0000299613 00000 n +0000304277 00000 n +0000299801 00000 n +0000304337 00000 n +0000299989 00000 n +0000304397 00000 n +0000300177 00000 n +0000304457 00000 n +0000300365 00000 n +0000304517 00000 n +0000300552 00000 n +0000304577 00000 n +0000300740 00000 n +0000304637 00000 n +0000300928 00000 n +0000304697 00000 n +0000301116 00000 n +0000304757 00000 n +0000301304 00000 n +0000304816 00000 n +0000301491 00000 n +0000304876 00000 n +0000301679 00000 n +0000304936 00000 n +0000301866 00000 n +0000304996 00000 n +0000302054 00000 n +0000305056 00000 n +0000302242 00000 n +0000305116 00000 n +0000302430 00000 n +0000302618 00000 n +0000302806 00000 n +0000305176 00000 n +0000302994 00000 n +0000305236 00000 n +0000303182 00000 n +0000305295 00000 n +0000303370 00000 n +0000343805 00000 n +0000322209 00000 n +0000309191 00000 n +0000305455 00000 n +0000319812 00000 n +0000319872 00000 n +0000309815 00000 n +0000319932 00000 n +0000310003 00000 n +0000319992 00000 n +0000310191 00000 n +0000320052 00000 n +0000310379 00000 n +0000320112 00000 n +0000310567 00000 n +0000320172 00000 n +0000310754 00000 n +0000320232 00000 n +0000310941 00000 n +0000320292 00000 n +0000311128 00000 n +0000320352 00000 n +0000311315 00000 n +0000320411 00000 n +0000311503 00000 n +0000320471 00000 n +0000311691 00000 n +0000320531 00000 n +0000311879 00000 n +0000320591 00000 n +0000312067 00000 n +0000320651 00000 n +0000312254 00000 n +0000320711 00000 n +0000312442 00000 n +0000320771 00000 n +0000312630 00000 n +0000320831 00000 n +0000312817 00000 n +0000320891 00000 n +0000313005 00000 n +0000320950 00000 n +0000313193 00000 n +0000321010 00000 n +0000313380 00000 n +0000321069 00000 n +0000313568 00000 n +0000321129 00000 n +0000313756 00000 n +0000321189 00000 n +0000313944 00000 n +0000321249 00000 n +0000314132 00000 n +0000321309 00000 n +0000314320 00000 n +0000321369 00000 n +0000314507 00000 n +0000321429 00000 n +0000314695 00000 n +0000321489 00000 n +0000314883 00000 n +0000315071 00000 n +0000315225 00000 n +0000321549 00000 n +0000315413 00000 n +0000315601 00000 n +0000321609 00000 n +0000315754 00000 n +0000315942 00000 n +0000316095 00000 n +0000321669 00000 n +0000316283 00000 n +0000316471 00000 n +0000316625 00000 n +0000321729 00000 n +0000316813 00000 n +0000321789 00000 n +0000317001 00000 n +0000321849 00000 n +0000321909 00000 n +0000317188 00000 n +0000317375 00000 n +0000321969 00000 n +0000317563 00000 n +0000317750 00000 n +0000317938 00000 n +0000318126 00000 n +0000322089 00000 n +0000322149 00000 n +0000318314 00000 n +0000318502 00000 n +0000318690 00000 n +0000318878 00000 n +0000319066 00000 n +0000319254 00000 n +0000319440 00000 n +0000319626 00000 n +0000348261 00000 n +0000332615 00000 n +0000325139 00000 n +0000322335 00000 n +0000332316 00000 n +0000325610 00000 n +0000325798 00000 n +0000325986 00000 n +0000326174 00000 n +0000326362 00000 n +0000326550 00000 n +0000326738 00000 n +0000326926 00000 n +0000327114 00000 n +0000327302 00000 n +0000327488 00000 n +0000327642 00000 n +0000327830 00000 n +0000328017 00000 n +0000328205 00000 n +0000328359 00000 n +0000328546 00000 n +0000328734 00000 n +0000328920 00000 n +0000329108 00000 n +0000329296 00000 n +0000329484 00000 n +0000329672 00000 n +0000329860 00000 n +0000330048 00000 n +0000330236 00000 n +0000332376 00000 n +0000330424 00000 n +0000330611 00000 n +0000330765 00000 n +0000330953 00000 n +0000331107 00000 n +0000332495 00000 n +0000331295 00000 n +0000331449 00000 n +0000332555 00000 n +0000331637 00000 n +0000331791 00000 n +0000331978 00000 n +0000332130 00000 n +0000361148 00000 n +0000356886 00000 n +0000352679 00000 n +0000348386 00000 n +0000361023 00000 n +0000361274 00000 n +0000352929 00000 n +0000348018 00000 n +0000356760 00000 n +0000366399 00000 n +0000370931 00000 n +0000371243 00000 n +0000343925 00000 n +0000335313 00000 n +0000332728 00000 n +0000343145 00000 n +0000343205 00000 n +0000335811 00000 n +0000335997 00000 n +0000343265 00000 n +0000336183 00000 n +0000336370 00000 n +0000343325 00000 n +0000336557 00000 n +0000336745 00000 n +0000343385 00000 n +0000336933 00000 n +0000337121 00000 n +0000337308 00000 n +0000337496 00000 n +0000337684 00000 n +0000337872 00000 n +0000338059 00000 n +0000338247 00000 n +0000343445 00000 n +0000338435 00000 n +0000338589 00000 n +0000338777 00000 n +0000338965 00000 n +0000339153 00000 n +0000343505 00000 n +0000339341 00000 n +0000339528 00000 n +0000339716 00000 n +0000343565 00000 n +0000339903 00000 n +0000340091 00000 n +0000340279 00000 n +0000340467 00000 n +0000340655 00000 n +0000340807 00000 n +0000340993 00000 n +0000341147 00000 n +0000343625 00000 n +0000341335 00000 n +0000341523 00000 n +0000341711 00000 n +0000341865 00000 n +0000342053 00000 n +0000342207 00000 n +0000343685 00000 n +0000342394 00000 n +0000342582 00000 n +0000343745 00000 n +0000343865 00000 n +0000342770 00000 n +0000342957 00000 n +0000348450 00000 n +0000346188 00000 n +0000344051 00000 n +0000347898 00000 n +0000347958 00000 n +0000348078 00000 n +0000346398 00000 n +0000346586 00000 n +0000346774 00000 n +0000348201 00000 n +0000346961 00000 n +0000347149 00000 n +0000348326 00000 n +0000347337 00000 n +0000347524 00000 n +0000347711 00000 n +0001245034 00000 n +0000352993 00000 n +0000350915 00000 n +0000348563 00000 n +0000352559 00000 n +0000352619 00000 n +0000351125 00000 n +0000351279 00000 n +0000351467 00000 n +0000351655 00000 n +0000351843 00000 n +0000351997 00000 n +0000352185 00000 n +0000352744 00000 n +0000352869 00000 n +0000352372 00000 n +0000357075 00000 n +0000355321 00000 n +0000353119 00000 n +0000356640 00000 n +0000356700 00000 n +0000355513 00000 n +0000355701 00000 n +0000355889 00000 n +0000356826 00000 n +0000356077 00000 n +0000356265 00000 n +0000356952 00000 n +0000356452 00000 n +0000361338 00000 n +0000359260 00000 n +0000357201 00000 n +0000360903 00000 n +0000360963 00000 n +0000359470 00000 n +0000361089 00000 n +0000359657 00000 n +0000359811 00000 n +0000359999 00000 n +0000360187 00000 n +0000360375 00000 n +0000360562 00000 n +0000361214 00000 n +0000360716 00000 n +0000366705 00000 n +0000363663 00000 n +0000361464 00000 n +0000366219 00000 n +0000366279 00000 n +0000363918 00000 n +0000364106 00000 n +0000364294 00000 n +0000366339 00000 n +0000366459 00000 n +0000364482 00000 n +0000364669 00000 n +0000366519 00000 n +0000364856 00000 n +0000365043 00000 n +0000365229 00000 n +0000365383 00000 n +0000365537 00000 n +0000365691 00000 n +0000366645 00000 n +0000365843 00000 n +0000366031 00000 n +0000371369 00000 n +0000368514 00000 n +0000366831 00000 n +0000370871 00000 n +0000370997 00000 n +0000368769 00000 n +0000368922 00000 n +0000369075 00000 n +0000371057 00000 n +0000369229 00000 n +0000369383 00000 n +0000369537 00000 n +0000369691 00000 n +0000369845 00000 n +0000369999 00000 n +0000371183 00000 n +0000370153 00000 n +0000370341 00000 n +0000371309 00000 n +0000370529 00000 n +0000370683 00000 n +0000372116 00000 n +0000371930 00000 n +0000371481 00000 n +0000372056 00000 n +0001245159 00000 n +0000378512 00000 n +0000374607 00000 n +0000372202 00000 n +0000377856 00000 n +0000378035 00000 n +0000378095 00000 n +0000374889 00000 n +0000378155 00000 n +0000375042 00000 n +0000375230 00000 n +0000375418 00000 n +0000375606 00000 n +0000375793 00000 n +0000375980 00000 n +0000376167 00000 n +0000376352 00000 n +0000376540 00000 n +0000376728 00000 n +0000376916 00000 n +0000378215 00000 n +0000378275 00000 n +0000377104 00000 n +0000377292 00000 n +0000378335 00000 n +0000378394 00000 n +0000378453 00000 n +0000377480 00000 n +0000377668 00000 n +0000381661 00000 n +0000381787 00000 n +0000381907 00000 n +0000382027 00000 n +0000380483 00000 n +0000378639 00000 n +0000381601 00000 n +0000381727 00000 n +0000380666 00000 n +0000380853 00000 n +0000381041 00000 n +0000381847 00000 n +0000381228 00000 n +0000381967 00000 n +0000381415 00000 n +0000388949 00000 n +0000384494 00000 n +0000382140 00000 n +0000387872 00000 n +0000388051 00000 n +0000388111 00000 n +0000384785 00000 n +0000384938 00000 n +0000388171 00000 n +0000385091 00000 n +0000388231 00000 n +0000388290 00000 n +0000385245 00000 n +0000388349 00000 n +0000385433 00000 n +0000388409 00000 n +0000385621 00000 n +0000388469 00000 n +0000385809 00000 n +0000388529 00000 n +0000385994 00000 n +0000388589 00000 n +0000386182 00000 n +0000388649 00000 n +0000386370 00000 n +0000388709 00000 n +0000386558 00000 n +0000386746 00000 n +0000388769 00000 n +0000386934 00000 n +0000387122 00000 n +0000388829 00000 n +0000388889 00000 n +0000387310 00000 n +0000387498 00000 n +0000387686 00000 n +0000392659 00000 n +0000392904 00000 n +0000391564 00000 n +0000389062 00000 n +0000392421 00000 n +0000391738 00000 n +0000392481 00000 n +0000392540 00000 n +0000391926 00000 n +0000392080 00000 n +0000392599 00000 n +0000392719 00000 n +0000392268 00000 n +0000392844 00000 n +0000394464 00000 n +0000394590 00000 n +0000393943 00000 n +0000393004 00000 n +0000394404 00000 n +0000394099 00000 n +0000394530 00000 n +0000394252 00000 n +0000400012 00000 n +0000396814 00000 n +0000394676 00000 n +0000399174 00000 n +0000399352 00000 n +0000397060 00000 n +0000397214 00000 n +0000399412 00000 n +0000397368 00000 n +0000397519 00000 n +0000399472 00000 n +0000399532 00000 n +0000397672 00000 n +0000399592 00000 n +0000397860 00000 n +0000399652 00000 n +0000398048 00000 n +0000399712 00000 n +0000398236 00000 n +0000399772 00000 n +0000398424 00000 n +0000399832 00000 n +0000398612 00000 n +0000399892 00000 n +0000398799 00000 n +0000399952 00000 n +0000398987 00000 n +0001245284 00000 n +0000404937 00000 n +0000402275 00000 n +0000400112 00000 n +0000404577 00000 n +0000402512 00000 n +0000402700 00000 n +0000402888 00000 n +0000404637 00000 n +0000403075 00000 n +0000403263 00000 n +0000403451 00000 n +0000404697 00000 n +0000403639 00000 n +0000403827 00000 n +0000404757 00000 n +0000404015 00000 n +0000404817 00000 n +0000404877 00000 n +0000404203 00000 n +0000404391 00000 n +0000434483 00000 n +0000423147 00000 n +0000426061 00000 n +0000423273 00000 n +0000428677 00000 n +0000426187 00000 n +0000433926 00000 n +0000410241 00000 n +0000407307 00000 n +0000405037 00000 n +0000410001 00000 n +0000410061 00000 n +0000407562 00000 n +0000410121 00000 n +0000407749 00000 n +0000407937 00000 n +0000408125 00000 n +0000408313 00000 n +0000408501 00000 n +0000408689 00000 n +0000408877 00000 n +0000409065 00000 n +0000409251 00000 n +0000409438 00000 n +0000410181 00000 n +0000409625 00000 n +0000409813 00000 n +0000418706 00000 n +0000423021 00000 n +0000423399 00000 n +0000434052 00000 n +0000428173 00000 n +0000425809 00000 n +0000425935 00000 n +0000428425 00000 n +0000428047 00000 n +0000428551 00000 n +0000418951 00000 n +0000418826 00000 n +0000414757 00000 n +0000412676 00000 n +0000410341 00000 n +0000414517 00000 n +0000414577 00000 n +0000412895 00000 n +0000413083 00000 n +0000413271 00000 n +0000413458 00000 n +0000413646 00000 n +0000413833 00000 n +0000414637 00000 n +0000414021 00000 n +0000414697 00000 n +0000414209 00000 n +0000414363 00000 n +0000419203 00000 n +0000428299 00000 n +0000425684 00000 n +0000419077 00000 n +0000425558 00000 n +0000437772 00000 n +0000422895 00000 n +0000419267 00000 n +0000416738 00000 n +0000414883 00000 n +0000418347 00000 n +0000416948 00000 n +0000417135 00000 n +0000417289 00000 n +0000417477 00000 n +0000417631 00000 n +0000417817 00000 n +0000418466 00000 n +0000418526 00000 n +0000417971 00000 n +0000418586 00000 n +0000418159 00000 n +0000418646 00000 n +0000418766 00000 n +0000418891 00000 n +0000419017 00000 n +0000419143 00000 n +0000434608 00000 n +0000437586 00000 n +0000423525 00000 n +0000421173 00000 n +0000419367 00000 n +0000422775 00000 n +0000422835 00000 n +0000422961 00000 n +0000423087 00000 n +0000421383 00000 n +0000421536 00000 n +0000423213 00000 n +0000421690 00000 n +0000421841 00000 n +0000422027 00000 n +0000422214 00000 n +0000422402 00000 n +0000423339 00000 n +0000422587 00000 n +0000423465 00000 n +0000426251 00000 n +0000425163 00000 n +0000423611 00000 n +0000425498 00000 n +0000425624 00000 n +0000425750 00000 n +0000425310 00000 n +0000425875 00000 n +0000426001 00000 n +0000426127 00000 n +0001245409 00000 n +0000428741 00000 n +0000427801 00000 n +0000426337 00000 n +0000427927 00000 n +0000427987 00000 n +0000428113 00000 n +0000428239 00000 n +0000428365 00000 n +0000428491 00000 n +0000428617 00000 n +0000434672 00000 n +0000430633 00000 n +0000428827 00000 n +0000433806 00000 n +0000433866 00000 n +0000433992 00000 n +0000434117 00000 n +0000434177 00000 n +0000434297 00000 n +0000430933 00000 n +0000431121 00000 n +0000431275 00000 n +0000431429 00000 n +0000431583 00000 n +0000431737 00000 n +0000431891 00000 n +0000432045 00000 n +0000432199 00000 n +0000434423 00000 n +0000432353 00000 n +0000432540 00000 n +0000432694 00000 n +0000432848 00000 n +0000433002 00000 n +0000433156 00000 n +0000433310 00000 n +0000433464 00000 n +0000434548 00000 n +0000433618 00000 n +0000971573 00000 n +0000998429 00000 n +0001008609 00000 n +0001029236 00000 n +0001021623 00000 n +0000437892 00000 n +0000435994 00000 n +0000434758 00000 n +0000437466 00000 n +0000437526 00000 n +0000436204 00000 n +0000436357 00000 n +0000436511 00000 n +0000436665 00000 n +0000436819 00000 n +0000437652 00000 n +0000436973 00000 n +0000437158 00000 n +0000437312 00000 n +0000437712 00000 n +0000437832 00000 n +0001046140 00000 n +0000441127 00000 n +0000440091 00000 n +0000438005 00000 n +0000440588 00000 n +0000440767 00000 n +0000440827 00000 n +0000440247 00000 n +0000440887 00000 n +0000440400 00000 n +0000440947 00000 n +0000441007 00000 n +0000441067 00000 n +0000446810 00000 n +0000443198 00000 n +0000441227 00000 n +0000445973 00000 n +0000446152 00000 n +0000446212 00000 n +0000443462 00000 n +0000443615 00000 n +0000443766 00000 n +0000446272 00000 n +0000446331 00000 n +0000443917 00000 n +0000446390 00000 n +0000444103 00000 n +0000446450 00000 n +0000444290 00000 n +0000446510 00000 n +0000444477 00000 n +0000446570 00000 n +0000444665 00000 n +0000444851 00000 n +0000445038 00000 n +0000445224 00000 n +0000445412 00000 n +0000446630 00000 n +0000446690 00000 n +0000445598 00000 n +0000446750 00000 n +0000445786 00000 n +0000451561 00000 n +0000448918 00000 n +0000446923 00000 n +0000451143 00000 n +0000451203 00000 n +0000451322 00000 n +0000449164 00000 n +0000451381 00000 n +0000449317 00000 n +0000449470 00000 n +0000451441 00000 n +0000449623 00000 n +0000451501 00000 n +0000449777 00000 n +0000449965 00000 n +0000450119 00000 n +0000450307 00000 n +0000450460 00000 n +0000450647 00000 n +0000450801 00000 n +0000450989 00000 n +0001245534 00000 n +0000462222 00000 n +0000459096 00000 n +0000456241 00000 n +0000456365 00000 n +0000456121 00000 n +0000456491 00000 n +0000453780 00000 n +0000451687 00000 n +0000456001 00000 n +0000456061 00000 n +0000456181 00000 n +0000454026 00000 n +0000454180 00000 n +0000454334 00000 n +0000454486 00000 n +0000456306 00000 n +0000454640 00000 n +0000454791 00000 n +0000454979 00000 n +0000455167 00000 n +0000455320 00000 n +0000456431 00000 n +0000455474 00000 n +0000455627 00000 n +0000455814 00000 n +0000459222 00000 n +0000457854 00000 n +0000456604 00000 n +0000459036 00000 n +0000458046 00000 n +0000459162 00000 n +0000458234 00000 n +0000458388 00000 n +0000458576 00000 n +0000458730 00000 n +0000458882 00000 n +0000462886 00000 n +0000460946 00000 n +0000459335 00000 n +0000462162 00000 n +0000462341 00000 n +0000461138 00000 n +0000461292 00000 n +0000461446 00000 n +0000462401 00000 n +0000462461 00000 n +0000461600 00000 n +0000462521 00000 n +0000461788 00000 n +0000461974 00000 n +0000462580 00000 n +0000462640 00000 n +0000462700 00000 n +0000462760 00000 n +0000462826 00000 n +0000468412 00000 n +0000465547 00000 n +0000462986 00000 n +0000467995 00000 n +0000468173 00000 n +0000465802 00000 n +0000465955 00000 n +0000466142 00000 n +0000466328 00000 n +0000468233 00000 n +0000466516 00000 n +0000468292 00000 n +0000466669 00000 n +0000466823 00000 n +0000468352 00000 n +0000466977 00000 n +0000467163 00000 n +0000467315 00000 n +0000467503 00000 n +0000467657 00000 n +0000467843 00000 n +0000477719 00000 n +0000486199 00000 n +0000486450 00000 n +0000490963 00000 n +0000477839 00000 n +0000471354 00000 n +0000468512 00000 n +0000477359 00000 n +0000471789 00000 n +0000471976 00000 n +0000472129 00000 n +0000472316 00000 n +0000472469 00000 n +0000472657 00000 n +0000472811 00000 n +0000472999 00000 n +0000473153 00000 n +0000473340 00000 n +0000473493 00000 n +0000473681 00000 n +0000473835 00000 n +0000474023 00000 n +0000474176 00000 n +0000474363 00000 n +0000474516 00000 n +0000474704 00000 n +0000474858 00000 n +0000475046 00000 n +0000475200 00000 n +0000475384 00000 n +0000477419 00000 n +0000475533 00000 n +0000475721 00000 n +0000475875 00000 n +0000476029 00000 n +0000477479 00000 n +0000477539 00000 n +0000476183 00000 n +0000476371 00000 n +0000476558 00000 n +0000476712 00000 n +0000477599 00000 n +0000476866 00000 n +0000477053 00000 n +0000477659 00000 n +0000477779 00000 n +0000477206 00000 n +0000494550 00000 n +0000486324 00000 n +0000481628 00000 n +0000490711 00000 n +0000490837 00000 n +0000481880 00000 n +0000481754 00000 n +0000482006 00000 n +0000490585 00000 n +0000494676 00000 n +0000482132 00000 n +0000479734 00000 n +0000477952 00000 n +0000481568 00000 n +0000479962 00000 n +0000480116 00000 n +0000481694 00000 n +0000480270 00000 n +0000480424 00000 n +0000480578 00000 n +0000481820 00000 n +0000480732 00000 n +0000481946 00000 n +0000480886 00000 n +0000481040 00000 n +0000482072 00000 n +0000481228 00000 n +0000481382 00000 n +0001245659 00000 n +0000486575 00000 n +0000484436 00000 n +0000482245 00000 n +0000486139 00000 n +0000484655 00000 n +0000484809 00000 n +0000486265 00000 n +0000484963 00000 n +0000485117 00000 n +0000485304 00000 n +0000485491 00000 n +0000486390 00000 n +0000485644 00000 n +0000485798 00000 n +0000486515 00000 n +0000485985 00000 n +0000491027 00000 n +0000488658 00000 n +0000486688 00000 n +0000490525 00000 n +0000488886 00000 n +0000489040 00000 n +0000490651 00000 n +0000489194 00000 n +0000489348 00000 n +0000490777 00000 n +0000489536 00000 n +0000489690 00000 n +0000490903 00000 n +0000489877 00000 n +0000490030 00000 n +0000490217 00000 n +0000490371 00000 n +0000494802 00000 n +0000493119 00000 n +0000491140 00000 n +0000494430 00000 n +0000494490 00000 n +0000493320 00000 n +0000493474 00000 n +0000494616 00000 n +0000493627 00000 n +0000493780 00000 n +0000493934 00000 n +0000494742 00000 n +0000494088 00000 n +0000494242 00000 n +0000495759 00000 n +0000495573 00000 n +0000494928 00000 n +0000495699 00000 n +0000502863 00000 n +0000498394 00000 n +0000495872 00000 n +0000502265 00000 n +0000502325 00000 n +0000502444 00000 n +0000498712 00000 n +0000498900 00000 n +0000499088 00000 n +0000499276 00000 n +0000499464 00000 n +0000502504 00000 n +0000499652 00000 n +0000499805 00000 n +0000502564 00000 n +0000499958 00000 n +0000502624 00000 n +0000502684 00000 n +0000500112 00000 n +0000502744 00000 n +0000500299 00000 n +0000500487 00000 n +0000502803 00000 n +0000500675 00000 n +0000500863 00000 n +0000501017 00000 n +0000501205 00000 n +0000501393 00000 n +0000501547 00000 n +0000501735 00000 n +0000501923 00000 n +0000502077 00000 n +0000507376 00000 n +0000507556 00000 n +0000507676 00000 n +0000510243 00000 n +0000507802 00000 n +0000505092 00000 n +0000502976 00000 n +0000507256 00000 n +0000507316 00000 n +0000507436 00000 n +0000505329 00000 n +0000505517 00000 n +0000505705 00000 n +0000505893 00000 n +0000507496 00000 n +0000507616 00000 n +0000506046 00000 n +0000506200 00000 n +0000506386 00000 n +0000506574 00000 n +0000507742 00000 n +0000506728 00000 n +0000506882 00000 n +0000507070 00000 n +0001245784 00000 n +0000510368 00000 n +0000509166 00000 n +0000507928 00000 n +0000510183 00000 n +0000509349 00000 n +0000510308 00000 n +0000509503 00000 n +0000509657 00000 n +0000509843 00000 n +0000510031 00000 n +0000517832 00000 n +0000513059 00000 n +0000510481 00000 n +0000517058 00000 n +0000517237 00000 n +0000513377 00000 n +0000513565 00000 n +0000513753 00000 n +0000517297 00000 n +0000513941 00000 n +0000514094 00000 n +0000517356 00000 n +0000517415 00000 n +0000514247 00000 n +0000517474 00000 n +0000514435 00000 n +0000517534 00000 n +0000514622 00000 n +0000517594 00000 n +0000514810 00000 n +0000517654 00000 n +0000517713 00000 n +0000514998 00000 n +0000515186 00000 n +0000515372 00000 n +0000515557 00000 n +0000515744 00000 n +0000515931 00000 n +0000516119 00000 n +0000517772 00000 n +0000516307 00000 n +0000516494 00000 n +0000516682 00000 n +0000516870 00000 n +0000522262 00000 n +0000525329 00000 n +0000522016 00000 n +0000521896 00000 n +0000522142 00000 n +0000522387 00000 n +0000519877 00000 n +0000517945 00000 n +0000521776 00000 n +0000521836 00000 n +0000521956 00000 n +0000520105 00000 n +0000520291 00000 n +0000520445 00000 n +0000522082 00000 n +0000520599 00000 n +0000520786 00000 n +0000520940 00000 n +0000522202 00000 n +0000521094 00000 n +0000521281 00000 n +0000521435 00000 n +0000522328 00000 n +0000521589 00000 n +0000525455 00000 n +0000523959 00000 n +0000522500 00000 n +0000525269 00000 n +0000524160 00000 n +0000524347 00000 n +0000524501 00000 n +0000524655 00000 n +0000525395 00000 n +0000524808 00000 n +0000524962 00000 n +0000525116 00000 n +0000532767 00000 n +0000528057 00000 n +0000525568 00000 n +0000531632 00000 n +0000531811 00000 n +0000531871 00000 n +0000528357 00000 n +0000528510 00000 n +0000531931 00000 n +0000528663 00000 n +0000531989 00000 n +0000532049 00000 n +0000528817 00000 n +0000532109 00000 n +0000529005 00000 n +0000532169 00000 n +0000529192 00000 n +0000532229 00000 n +0000529379 00000 n +0000532289 00000 n +0000529567 00000 n +0000532349 00000 n +0000529755 00000 n +0000532409 00000 n +0000529943 00000 n +0000532469 00000 n +0000530131 00000 n +0000532529 00000 n +0000530319 00000 n +0000532588 00000 n +0000530505 00000 n +0000532648 00000 n +0000530693 00000 n +0000532707 00000 n +0000530880 00000 n +0000531068 00000 n +0000531256 00000 n +0000531444 00000 n +0000535644 00000 n +0000535524 00000 n +0000535770 00000 n +0000535896 00000 n +0000534744 00000 n +0000532880 00000 n +0000535404 00000 n +0000535464 00000 n +0000535584 00000 n +0000535710 00000 n +0000534909 00000 n +0000535063 00000 n +0000535836 00000 n +0000535217 00000 n +0001245909 00000 n +0000544822 00000 n +0000538364 00000 n +0000536009 00000 n +0000543203 00000 n +0000543382 00000 n +0000543442 00000 n +0000538727 00000 n +0000538880 00000 n +0000539032 00000 n +0000539184 00000 n +0000543502 00000 n +0000539337 00000 n +0000543562 00000 n +0000543622 00000 n +0000539491 00000 n +0000543682 00000 n +0000539679 00000 n +0000543742 00000 n +0000539866 00000 n +0000543802 00000 n +0000540053 00000 n +0000543862 00000 n +0000540239 00000 n +0000543922 00000 n +0000540427 00000 n +0000543982 00000 n +0000540614 00000 n +0000544042 00000 n +0000540802 00000 n +0000544102 00000 n +0000540990 00000 n +0000544162 00000 n +0000541178 00000 n +0000544222 00000 n +0000541364 00000 n +0000544282 00000 n +0000541552 00000 n +0000544342 00000 n +0000541740 00000 n +0000544402 00000 n +0000541928 00000 n +0000544462 00000 n +0000542113 00000 n +0000544522 00000 n +0000542301 00000 n +0000544582 00000 n +0000542488 00000 n +0000544642 00000 n +0000542676 00000 n +0000544702 00000 n +0000544762 00000 n +0000542864 00000 n +0000543017 00000 n +0000549572 00000 n +0000546868 00000 n +0000544935 00000 n +0000548902 00000 n +0000548962 00000 n +0000549022 00000 n +0000547096 00000 n +0000549082 00000 n +0000547284 00000 n +0000547470 00000 n +0000547656 00000 n +0000549142 00000 n +0000547844 00000 n +0000548032 00000 n +0000548219 00000 n +0000548406 00000 n +0000549202 00000 n +0000549262 00000 n +0000549322 00000 n +0000548594 00000 n +0000549382 00000 n +0000549448 00000 n +0000548748 00000 n +0000549508 00000 n +0000551883 00000 n +0000552009 00000 n +0000552133 00000 n +0000551136 00000 n +0000549699 00000 n +0000551763 00000 n +0000551823 00000 n +0000551301 00000 n +0000551949 00000 n +0000551455 00000 n +0000552074 00000 n +0000551609 00000 n +0000555493 00000 n +0000553460 00000 n +0000552246 00000 n +0000554836 00000 n +0000555015 00000 n +0000553661 00000 n +0000555075 00000 n +0000553815 00000 n +0000553968 00000 n +0000555135 00000 n +0000554120 00000 n +0000555193 00000 n +0000555253 00000 n +0000554273 00000 n +0000555313 00000 n +0000555373 00000 n +0000554460 00000 n +0000555433 00000 n +0000554648 00000 n +0000564257 00000 n +0000557971 00000 n +0000555593 00000 n +0000562882 00000 n +0000563061 00000 n +0000558334 00000 n +0000558520 00000 n +0000558706 00000 n +0000558894 00000 n +0000559081 00000 n +0000559269 00000 n +0000563121 00000 n +0000559455 00000 n +0000559608 00000 n +0000563181 00000 n +0000559761 00000 n +0000563241 00000 n +0000563301 00000 n +0000559915 00000 n +0000563361 00000 n +0000560103 00000 n +0000563421 00000 n +0000560287 00000 n +0000563481 00000 n +0000560475 00000 n +0000563541 00000 n +0000560663 00000 n +0000563600 00000 n +0000560851 00000 n +0000563660 00000 n +0000561039 00000 n +0000563720 00000 n +0000561227 00000 n +0000563780 00000 n +0000561415 00000 n +0000563840 00000 n +0000561603 00000 n +0000563900 00000 n +0000561791 00000 n +0000563959 00000 n +0000561979 00000 n +0000564019 00000 n +0000562167 00000 n +0000564079 00000 n +0000562355 00000 n +0000564139 00000 n +0000564198 00000 n +0000562543 00000 n +0000562696 00000 n +0000574040 00000 n +0000573915 00000 n +0000583119 00000 n +0000570197 00000 n +0000573789 00000 n +0000570317 00000 n +0000566753 00000 n +0000564357 00000 n +0000569838 00000 n +0000569898 00000 n +0000567026 00000 n +0000567214 00000 n +0000567402 00000 n +0000567589 00000 n +0000567775 00000 n +0000567962 00000 n +0000569958 00000 n +0000568150 00000 n +0000568338 00000 n +0000568525 00000 n +0000570018 00000 n +0000568713 00000 n +0000570078 00000 n +0000568900 00000 n +0000569088 00000 n +0000569276 00000 n +0000569464 00000 n +0000569650 00000 n +0000570137 00000 n +0000570257 00000 n +0001246034 00000 n +0000579305 00000 n +0000582868 00000 n +0000574166 00000 n +0000579431 00000 n +0000582994 00000 n +0000574230 00000 n +0000572098 00000 n +0000570430 00000 n +0000573729 00000 n +0000572317 00000 n +0000572470 00000 n +0000573855 00000 n +0000572624 00000 n +0000572776 00000 n +0000573980 00000 n +0000572929 00000 n +0000573082 00000 n +0000574106 00000 n +0000573236 00000 n +0000573424 00000 n +0000573576 00000 n +0000579495 00000 n +0000577021 00000 n +0000574343 00000 n +0000579185 00000 n +0000579245 00000 n +0000577258 00000 n +0000577446 00000 n +0000577599 00000 n +0000579371 00000 n +0000577753 00000 n +0000577941 00000 n +0000578129 00000 n +0000578316 00000 n +0000578504 00000 n +0000578691 00000 n +0000578878 00000 n +0000579031 00000 n +0000583183 00000 n +0000581241 00000 n +0000579608 00000 n +0000582748 00000 n +0000582808 00000 n +0000581451 00000 n +0000581639 00000 n +0000581792 00000 n +0000582934 00000 n +0000581946 00000 n +0000582099 00000 n +0000583059 00000 n +0000582253 00000 n +0000582441 00000 n +0000582594 00000 n +0000584621 00000 n +0000584038 00000 n +0000583282 00000 n +0000584501 00000 n +0000584561 00000 n +0000584194 00000 n +0000584347 00000 n +0000591352 00000 n +0000586870 00000 n +0000584707 00000 n +0000590214 00000 n +0000590393 00000 n +0000590453 00000 n +0000587161 00000 n +0000587313 00000 n +0000587466 00000 n +0000590513 00000 n +0000587619 00000 n +0000590572 00000 n +0000587773 00000 n +0000590632 00000 n +0000587960 00000 n +0000590692 00000 n +0000588148 00000 n +0000590752 00000 n +0000588336 00000 n +0000590812 00000 n +0000588524 00000 n +0000590872 00000 n +0000588712 00000 n +0000590932 00000 n +0000588900 00000 n +0000590992 00000 n +0000589087 00000 n +0000591052 00000 n +0000589275 00000 n +0000591112 00000 n +0000589463 00000 n +0000591172 00000 n +0000591232 00000 n +0000589651 00000 n +0000591292 00000 n +0000589839 00000 n +0000590027 00000 n +0000592778 00000 n +0000592958 00000 n +0000593078 00000 n +0000592532 00000 n +0000591465 00000 n +0000592658 00000 n +0000592718 00000 n +0000592838 00000 n +0000592898 00000 n +0000593018 00000 n +0001246159 00000 n +0000593729 00000 n +0000593543 00000 n +0000593178 00000 n +0000593669 00000 n +0000601284 00000 n +0000595273 00000 n +0000593802 00000 n +0000600148 00000 n +0000600385 00000 n +0000595636 00000 n +0000595790 00000 n +0000600445 00000 n +0000600505 00000 n +0000595943 00000 n +0000596097 00000 n +0000600565 00000 n +0000596284 00000 n +0000600625 00000 n +0000596471 00000 n +0000596625 00000 n +0000600685 00000 n +0000596812 00000 n +0000596966 00000 n +0000600745 00000 n +0000597152 00000 n +0000597340 00000 n +0000600805 00000 n +0000597527 00000 n +0000600865 00000 n +0000597714 00000 n +0000600925 00000 n +0000597900 00000 n +0000598088 00000 n +0000600984 00000 n +0000598275 00000 n +0000598463 00000 n +0000601044 00000 n +0000598650 00000 n +0000598838 00000 n +0000601104 00000 n +0000599025 00000 n +0000599213 00000 n +0000601164 00000 n +0000599400 00000 n +0000599588 00000 n +0000601224 00000 n +0000599775 00000 n +0000599962 00000 n +0000603990 00000 n +0000602297 00000 n +0000601383 00000 n +0000603512 00000 n +0000603690 00000 n +0000602489 00000 n +0000602643 00000 n +0000603750 00000 n +0000603810 00000 n +0000602797 00000 n +0000602951 00000 n +0000603870 00000 n +0000603138 00000 n +0000603930 00000 n +0000603325 00000 n +0000982202 00000 n +0000605699 00000 n +0000604751 00000 n +0000604076 00000 n +0000605281 00000 n +0000605459 00000 n +0000605519 00000 n +0000605579 00000 n +0000604907 00000 n +0000605639 00000 n +0000605094 00000 n +0000610651 00000 n +0000607083 00000 n +0000605798 00000 n +0000609695 00000 n +0000609873 00000 n +0000609933 00000 n +0000609993 00000 n +0000607338 00000 n +0000610053 00000 n +0000607524 00000 n +0000607678 00000 n +0000610113 00000 n +0000607865 00000 n +0000608019 00000 n +0000610172 00000 n +0000608206 00000 n +0000610232 00000 n +0000608391 00000 n +0000610292 00000 n +0000608576 00000 n +0000610352 00000 n +0000608763 00000 n +0000610412 00000 n +0000608950 00000 n +0000610472 00000 n +0000609137 00000 n +0000610532 00000 n +0000609323 00000 n +0000610591 00000 n +0000609510 00000 n +0000613003 00000 n +0000611545 00000 n +0000610750 00000 n +0000612466 00000 n +0000612644 00000 n +0000612704 00000 n +0000612764 00000 n +0000611719 00000 n +0000612824 00000 n +0000611906 00000 n +0000612884 00000 n +0000612093 00000 n +0000612943 00000 n +0000612280 00000 n +0001246284 00000 n +0000618735 00000 n +0000614566 00000 n +0000613102 00000 n +0000617899 00000 n +0000618077 00000 n +0000614857 00000 n +0000618137 00000 n +0000618196 00000 n +0000615010 00000 n +0000615163 00000 n +0000615316 00000 n +0000618255 00000 n +0000615502 00000 n +0000615690 00000 n +0000618315 00000 n +0000615876 00000 n +0000616064 00000 n +0000618375 00000 n +0000616251 00000 n +0000618435 00000 n +0000616438 00000 n +0000616626 00000 n +0000618495 00000 n +0000616813 00000 n +0000617001 00000 n +0000618555 00000 n +0000617188 00000 n +0000617342 00000 n +0000618615 00000 n +0000617528 00000 n +0000618675 00000 n +0000617713 00000 n +0000620695 00000 n +0000619550 00000 n +0000618860 00000 n +0000620277 00000 n +0000620455 00000 n +0000620515 00000 n +0000620575 00000 n +0000619715 00000 n +0000619903 00000 n +0000620635 00000 n +0000620090 00000 n +0000622546 00000 n +0000621494 00000 n +0000620794 00000 n +0000622188 00000 n +0000622366 00000 n +0000621659 00000 n +0000622426 00000 n +0000622486 00000 n +0000621813 00000 n +0000622001 00000 n +0000628080 00000 n +0000623872 00000 n +0000622632 00000 n +0000627243 00000 n +0000627421 00000 n +0000624163 00000 n +0000624317 00000 n +0000624471 00000 n +0000627481 00000 n +0000627541 00000 n +0000624625 00000 n +0000624813 00000 n +0000627601 00000 n +0000625000 00000 n +0000627661 00000 n +0000625187 00000 n +0000627721 00000 n +0000625374 00000 n +0000627781 00000 n +0000625561 00000 n +0000627840 00000 n +0000625748 00000 n +0000625935 00000 n +0000627900 00000 n +0000626119 00000 n +0000626307 00000 n +0000627960 00000 n +0000626494 00000 n +0000626682 00000 n +0000628020 00000 n +0000626869 00000 n +0000627057 00000 n +0000631434 00000 n +0000629238 00000 n +0000628179 00000 n +0000631076 00000 n +0000631254 00000 n +0000629457 00000 n +0000629611 00000 n +0000631314 00000 n +0000631374 00000 n +0000629765 00000 n +0000629952 00000 n +0000630138 00000 n +0000630326 00000 n +0000630514 00000 n +0000630700 00000 n +0000630888 00000 n +0000634446 00000 n +0000632654 00000 n +0000631533 00000 n +0000634030 00000 n +0000634208 00000 n +0000632855 00000 n +0000633042 00000 n +0000633196 00000 n +0000633350 00000 n +0000633504 00000 n +0000634268 00000 n +0000634327 00000 n +0000633658 00000 n +0000634386 00000 n +0000633843 00000 n +0001246409 00000 n +0000642316 00000 n +0000636745 00000 n +0000634558 00000 n +0000641358 00000 n +0000641536 00000 n +0000637090 00000 n +0000641596 00000 n +0000641656 00000 n +0000637244 00000 n +0000637432 00000 n +0000641716 00000 n +0000637618 00000 n +0000637803 00000 n +0000641776 00000 n +0000637987 00000 n +0000638175 00000 n +0000641836 00000 n +0000638362 00000 n +0000638550 00000 n +0000641896 00000 n +0000638737 00000 n +0000638923 00000 n +0000641956 00000 n +0000639108 00000 n +0000639296 00000 n +0000642016 00000 n +0000639483 00000 n +0000639671 00000 n +0000642076 00000 n +0000639858 00000 n +0000640046 00000 n +0000642136 00000 n +0000640233 00000 n +0000640421 00000 n +0000642196 00000 n +0000640608 00000 n +0000640796 00000 n +0000642256 00000 n +0000640983 00000 n +0000641171 00000 n +0000645321 00000 n +0000643347 00000 n +0000642442 00000 n +0000645021 00000 n +0000645081 00000 n +0000643557 00000 n +0000643745 00000 n +0000645141 00000 n +0000643932 00000 n +0000644120 00000 n +0000645201 00000 n +0000644307 00000 n +0000644495 00000 n +0000645261 00000 n +0000644682 00000 n +0000644835 00000 n +0000647037 00000 n +0000646148 00000 n +0000645421 00000 n +0000646679 00000 n +0000646857 00000 n +0000646917 00000 n +0000646977 00000 n +0000646304 00000 n +0000646492 00000 n +0000649685 00000 n +0000647959 00000 n +0000647149 00000 n +0000649208 00000 n +0000649386 00000 n +0000649446 00000 n +0000649506 00000 n +0000648151 00000 n +0000648305 00000 n +0000649566 00000 n +0000648492 00000 n +0000648646 00000 n +0000649626 00000 n +0000648833 00000 n +0000649021 00000 n +0000658442 00000 n +0000651222 00000 n +0000649797 00000 n +0000657245 00000 n +0000657423 00000 n +0000657483 00000 n +0000657543 00000 n +0000651630 00000 n +0000651818 00000 n +0000657603 00000 n +0000652005 00000 n +0000652193 00000 n +0000657663 00000 n +0000652380 00000 n +0000652568 00000 n +0000657723 00000 n +0000652755 00000 n +0000652942 00000 n +0000657783 00000 n +0000653128 00000 n +0000653316 00000 n +0000657843 00000 n +0000653503 00000 n +0000653691 00000 n +0000657903 00000 n +0000653878 00000 n +0000654066 00000 n +0000657963 00000 n +0000654252 00000 n +0000654440 00000 n +0000658023 00000 n +0000654627 00000 n +0000654815 00000 n +0000658083 00000 n +0000655002 00000 n +0000655190 00000 n +0000658142 00000 n +0000655377 00000 n +0000655563 00000 n +0000658202 00000 n +0000655748 00000 n +0000655936 00000 n +0000658262 00000 n +0000656123 00000 n +0000656311 00000 n +0000658322 00000 n +0000656498 00000 n +0000656685 00000 n +0000658382 00000 n +0000656871 00000 n +0000657059 00000 n +0000659990 00000 n +0000659135 00000 n +0000658528 00000 n +0000659632 00000 n +0000659810 00000 n +0000659870 00000 n +0000659930 00000 n +0000659291 00000 n +0000659445 00000 n +0001246534 00000 n +0000668945 00000 n +0000662093 00000 n +0000660076 00000 n +0000668466 00000 n +0000668645 00000 n +0000668705 00000 n +0000668765 00000 n +0000662519 00000 n +0000662706 00000 n +0000662891 00000 n +0000663077 00000 n +0000663262 00000 n +0000663448 00000 n +0000663633 00000 n +0000663820 00000 n +0000664006 00000 n +0000664191 00000 n +0000664375 00000 n +0000664561 00000 n +0000664745 00000 n +0000664932 00000 n +0000665118 00000 n +0000665304 00000 n +0000665489 00000 n +0000665675 00000 n +0000665860 00000 n +0000668825 00000 n +0000666046 00000 n +0000666233 00000 n +0000666418 00000 n +0000666605 00000 n +0000666791 00000 n +0000666978 00000 n +0000667164 00000 n +0000667351 00000 n +0000667537 00000 n +0000668885 00000 n +0000667723 00000 n +0000667910 00000 n +0000668095 00000 n +0000668281 00000 n +0001145426 00000 n +0001145393 00000 n +0001145360 00000 n +0001145327 00000 n +0001145294 00000 n +0001145261 00000 n +0001145228 00000 n +0001145195 00000 n +0001145162 00000 n +0001145129 00000 n +0000675485 00000 n +0000670548 00000 n +0000669071 00000 n +0000675365 00000 n +0000670902 00000 n +0000671089 00000 n +0000671275 00000 n +0000671462 00000 n +0000671648 00000 n +0000671834 00000 n +0000672019 00000 n +0000672206 00000 n +0000672392 00000 n +0000672579 00000 n +0000672765 00000 n +0000672950 00000 n +0000673133 00000 n +0000673320 00000 n +0000673506 00000 n +0000675425 00000 n +0000673692 00000 n +0000673878 00000 n +0000674062 00000 n +0000674249 00000 n +0000674435 00000 n +0000674621 00000 n +0000674806 00000 n +0000674993 00000 n +0000675179 00000 n +0001145096 00000 n +0001145063 00000 n +0001145030 00000 n +0001144997 00000 n +0001144964 00000 n +0000686796 00000 n +0000677312 00000 n +0000675585 00000 n +0000685298 00000 n +0000685477 00000 n +0000685537 00000 n +0000685597 00000 n +0000677810 00000 n +0000677998 00000 n +0000685657 00000 n +0000678185 00000 n +0000678373 00000 n +0000685717 00000 n +0000678560 00000 n +0000678748 00000 n +0000685777 00000 n +0000678935 00000 n +0000679122 00000 n +0000685837 00000 n +0000679308 00000 n +0000679496 00000 n +0000685897 00000 n +0000679683 00000 n +0000679871 00000 n +0000685957 00000 n +0000680058 00000 n +0000680246 00000 n +0000686017 00000 n +0000680432 00000 n +0000680620 00000 n +0000686077 00000 n +0000680807 00000 n +0000680995 00000 n +0000686137 00000 n +0000681182 00000 n +0000681370 00000 n +0000686196 00000 n +0000681557 00000 n +0000681743 00000 n +0000686256 00000 n +0000681928 00000 n +0000682116 00000 n +0000686316 00000 n +0000682303 00000 n +0000682491 00000 n +0000686376 00000 n +0000682678 00000 n +0000682866 00000 n +0000686436 00000 n +0000683053 00000 n +0000683241 00000 n +0000686496 00000 n +0000683428 00000 n +0000683616 00000 n +0000686556 00000 n +0000683803 00000 n +0000683991 00000 n +0000686616 00000 n +0000684178 00000 n +0000684364 00000 n +0000686676 00000 n +0000684548 00000 n +0000684736 00000 n +0000686736 00000 n +0000684923 00000 n +0000685111 00000 n +0000691264 00000 n +0000688237 00000 n +0000686882 00000 n +0000690665 00000 n +0000690844 00000 n +0000688483 00000 n +0000688637 00000 n +0000690904 00000 n +0000690964 00000 n +0000688791 00000 n +0000688979 00000 n +0000691024 00000 n +0000689165 00000 n +0000689353 00000 n +0000691084 00000 n +0000689540 00000 n +0000689728 00000 n +0000691144 00000 n +0000689915 00000 n +0000690103 00000 n +0000691204 00000 n +0000690290 00000 n +0000690478 00000 n +0000699536 00000 n +0000692765 00000 n +0000691390 00000 n +0000698398 00000 n +0000698577 00000 n +0000698637 00000 n +0000698697 00000 n +0000693155 00000 n +0000693343 00000 n +0000698757 00000 n +0000693530 00000 n +0000693718 00000 n +0000698817 00000 n +0000693905 00000 n +0000694093 00000 n +0000698877 00000 n +0000694280 00000 n +0000694467 00000 n +0000698937 00000 n +0000694653 00000 n +0000694841 00000 n +0000698997 00000 n +0000695028 00000 n +0000695216 00000 n +0000699057 00000 n +0000695403 00000 n +0000695591 00000 n +0000699117 00000 n +0000695777 00000 n +0000695965 00000 n +0000699177 00000 n +0000696152 00000 n +0000696340 00000 n +0000699237 00000 n +0000696527 00000 n +0000696715 00000 n +0000699296 00000 n +0000696902 00000 n +0000697088 00000 n +0000699356 00000 n +0000697273 00000 n +0000697461 00000 n +0000699416 00000 n +0000697648 00000 n +0000697836 00000 n +0000699476 00000 n +0000698023 00000 n +0000698211 00000 n +0000705952 00000 n +0000701003 00000 n +0000699622 00000 n +0000704996 00000 n +0000705175 00000 n +0000701321 00000 n +0000701474 00000 n +0000705235 00000 n +0000705295 00000 n +0000701628 00000 n +0000701816 00000 n +0000705355 00000 n +0000702003 00000 n +0000702190 00000 n +0000705415 00000 n +0000702376 00000 n +0000702564 00000 n +0000705475 00000 n +0000702751 00000 n +0000702939 00000 n +0000705535 00000 n +0000703125 00000 n +0000705594 00000 n +0000703312 00000 n +0000705654 00000 n +0000703497 00000 n +0000703685 00000 n +0000705712 00000 n +0000703872 00000 n +0000704060 00000 n +0000705772 00000 n +0000704247 00000 n +0000705832 00000 n +0000704434 00000 n +0000704622 00000 n +0000705892 00000 n +0000704809 00000 n +0001246659 00000 n +0000706598 00000 n +0000706412 00000 n +0000706038 00000 n +0000706538 00000 n +0000708819 00000 n +0000707588 00000 n +0000706671 00000 n +0000708462 00000 n +0000708700 00000 n +0000707762 00000 n +0000707933 00000 n +0000708760 00000 n +0000708087 00000 n +0000708274 00000 n +0001144931 00000 n +0000711783 00000 n +0000710131 00000 n +0000708931 00000 n +0000711364 00000 n +0000711543 00000 n +0000710323 00000 n +0000710494 00000 n +0000711603 00000 n +0000710648 00000 n +0000711663 00000 n +0000710802 00000 n +0000711723 00000 n +0000710989 00000 n +0000711176 00000 n +0001144898 00000 n +0000721355 00000 n +0000714657 00000 n +0000711895 00000 n +0000720037 00000 n +0000720216 00000 n +0000715038 00000 n +0000715214 00000 n +0000720276 00000 n +0000715367 00000 n +0000715554 00000 n +0000720336 00000 n +0000715742 00000 n +0000720396 00000 n +0000715929 00000 n +0000720456 00000 n +0000716115 00000 n +0000720516 00000 n +0000716299 00000 n +0000720576 00000 n +0000716486 00000 n +0000720636 00000 n +0000716672 00000 n +0000720696 00000 n +0000716859 00000 n +0000720756 00000 n +0000717046 00000 n +0000720816 00000 n +0000717233 00000 n +0000720876 00000 n +0000717420 00000 n +0000720936 00000 n +0000717606 00000 n +0000720996 00000 n +0000717791 00000 n +0000721055 00000 n +0000717978 00000 n +0000721115 00000 n +0000718165 00000 n +0000721175 00000 n +0000718351 00000 n +0000721235 00000 n +0000718538 00000 n +0000718725 00000 n +0000721295 00000 n +0000718913 00000 n +0000719101 00000 n +0000719289 00000 n +0000719477 00000 n +0000719665 00000 n +0000719851 00000 n +0001144865 00000 n +0000723099 00000 n +0000722312 00000 n +0000721494 00000 n +0000723039 00000 n +0000722477 00000 n +0000722664 00000 n +0000722851 00000 n +0000728271 00000 n +0000725502 00000 n +0000723212 00000 n +0000727852 00000 n +0000728031 00000 n +0000725748 00000 n +0000725924 00000 n +0000728091 00000 n +0000726077 00000 n +0000726231 00000 n +0000726385 00000 n +0000726573 00000 n +0000728151 00000 n +0000726727 00000 n +0000728211 00000 n +0000726915 00000 n +0000727103 00000 n +0000727291 00000 n +0000727478 00000 n +0000727665 00000 n +0001246784 00000 n +0001144832 00000 n +0000730839 00000 n +0000729460 00000 n +0000728410 00000 n +0000730779 00000 n +0000729652 00000 n +0000729840 00000 n +0000730028 00000 n +0000730216 00000 n +0000730404 00000 n +0000730592 00000 n +0000736019 00000 n +0000732815 00000 n +0000730952 00000 n +0000735660 00000 n +0000735839 00000 n +0000733079 00000 n +0000733254 00000 n +0000735899 00000 n +0000733408 00000 n +0000733596 00000 n +0000733783 00000 n +0000733971 00000 n +0000734159 00000 n +0000734347 00000 n +0000734534 00000 n +0000735959 00000 n +0000734722 00000 n +0000734910 00000 n +0000735097 00000 n +0000735285 00000 n +0000735473 00000 n +0001144799 00000 n +0000740901 00000 n +0000738397 00000 n +0000736158 00000 n +0000740483 00000 n +0000740662 00000 n +0000738634 00000 n +0000738810 00000 n +0000740722 00000 n +0000738964 00000 n +0000740782 00000 n +0000739118 00000 n +0000739272 00000 n +0000739426 00000 n +0000739611 00000 n +0000739765 00000 n +0000739953 00000 n +0000740841 00000 n +0000740107 00000 n +0000740295 00000 n +0001144766 00000 n +0000742646 00000 n +0000741798 00000 n +0000741027 00000 n +0000742526 00000 n +0000742586 00000 n +0000741963 00000 n +0000742151 00000 n +0000742338 00000 n +0000745708 00000 n +0000744081 00000 n +0000742746 00000 n +0000745349 00000 n +0000745528 00000 n +0000744273 00000 n +0000744444 00000 n +0000745588 00000 n +0000744598 00000 n +0000745648 00000 n +0000744786 00000 n +0000744973 00000 n +0000745161 00000 n +0001144733 00000 n +0000749270 00000 n +0000747313 00000 n +0000745847 00000 n +0000748972 00000 n +0000749151 00000 n +0000747523 00000 n +0000747694 00000 n +0000749211 00000 n +0000747848 00000 n +0000748034 00000 n +0000748222 00000 n +0000748410 00000 n +0000748598 00000 n +0000748786 00000 n +0001246909 00000 n +0001144700 00000 n +0000756290 00000 n +0000751717 00000 n +0000749409 00000 n +0000755931 00000 n +0000756110 00000 n +0000752044 00000 n +0000752216 00000 n +0000756170 00000 n +0000752369 00000 n +0000752557 00000 n +0000752744 00000 n +0000752932 00000 n +0000753120 00000 n +0000753307 00000 n +0000753495 00000 n +0000753682 00000 n +0000753870 00000 n +0000754057 00000 n +0000754245 00000 n +0000754431 00000 n +0000754618 00000 n +0000754806 00000 n +0000756230 00000 n +0000754994 00000 n +0000755182 00000 n +0000755368 00000 n +0000755555 00000 n +0000755743 00000 n +0001144667 00000 n +0000760014 00000 n +0000757745 00000 n +0000756429 00000 n +0000759535 00000 n +0000759714 00000 n +0000757964 00000 n +0000758136 00000 n +0000759774 00000 n +0000758290 00000 n +0000759834 00000 n +0000758444 00000 n +0000758631 00000 n +0000758819 00000 n +0000759894 00000 n +0000759006 00000 n +0000759160 00000 n +0000759954 00000 n +0000759347 00000 n +0001144634 00000 n +0000766630 00000 n +0000762441 00000 n +0000760126 00000 n +0000766271 00000 n +0000766450 00000 n +0000762750 00000 n +0000762926 00000 n +0000766510 00000 n +0000763080 00000 n +0000763268 00000 n +0000763455 00000 n +0000763642 00000 n +0000763830 00000 n +0000764018 00000 n +0000764206 00000 n +0000764394 00000 n +0000764582 00000 n +0000764770 00000 n +0000764958 00000 n +0000765146 00000 n +0000766570 00000 n +0000765334 00000 n +0000765522 00000 n +0000765710 00000 n +0000765897 00000 n +0000766083 00000 n +0001144601 00000 n +0000768668 00000 n +0000767684 00000 n +0000766769 00000 n +0000768608 00000 n +0000767858 00000 n +0000768045 00000 n +0000768232 00000 n +0000768420 00000 n +0000774196 00000 n +0000770943 00000 n +0000768781 00000 n +0000773717 00000 n +0000773896 00000 n +0000771207 00000 n +0000771383 00000 n +0000773956 00000 n +0000771537 00000 n +0000774016 00000 n +0000771690 00000 n +0000771878 00000 n +0000774076 00000 n +0000772064 00000 n +0000772218 00000 n +0000774136 00000 n +0000772405 00000 n +0000772593 00000 n +0000772781 00000 n +0000772969 00000 n +0000773155 00000 n +0000773342 00000 n +0000773530 00000 n +0001144568 00000 n +0000777506 00000 n +0000775734 00000 n +0000774335 00000 n +0000777446 00000 n +0000775944 00000 n +0000776131 00000 n +0000776319 00000 n +0000776507 00000 n +0000776695 00000 n +0000776883 00000 n +0000777071 00000 n +0000777258 00000 n +0001247034 00000 n +0000779600 00000 n +0000778623 00000 n +0000777619 00000 n +0000779301 00000 n +0000779480 00000 n +0000778788 00000 n +0000778959 00000 n +0000779540 00000 n +0000779113 00000 n +0001144535 00000 n +0000782368 00000 n +0000780913 00000 n +0000779725 00000 n +0000781950 00000 n +0000782129 00000 n +0000781096 00000 n +0000781267 00000 n +0000782189 00000 n +0000781421 00000 n +0000782249 00000 n +0000781575 00000 n +0000782309 00000 n +0000781763 00000 n +0001144502 00000 n +0000787218 00000 n +0000784215 00000 n +0000782507 00000 n +0000786860 00000 n +0000787039 00000 n +0000784470 00000 n +0000784642 00000 n +0000787099 00000 n +0000784796 00000 n +0000784983 00000 n +0000785171 00000 n +0000785359 00000 n +0000785547 00000 n +0000785735 00000 n +0000785922 00000 n +0000786110 00000 n +0000786297 00000 n +0000787158 00000 n +0000786485 00000 n +0000786673 00000 n +0001144469 00000 n +0000791313 00000 n +0000788865 00000 n +0000787344 00000 n +0000791014 00000 n +0000791193 00000 n +0000789102 00000 n +0000789273 00000 n +0000791253 00000 n +0000789426 00000 n +0000789614 00000 n +0000789768 00000 n +0000789956 00000 n +0000790144 00000 n +0000790298 00000 n +0000790486 00000 n +0000790674 00000 n +0000790828 00000 n +0001144436 00000 n +0000796587 00000 n +0000793266 00000 n +0000791452 00000 n +0000796169 00000 n +0000796348 00000 n +0000793539 00000 n +0000793710 00000 n +0000796408 00000 n +0000793863 00000 n +0000796467 00000 n +0000794016 00000 n +0000794204 00000 n +0000794391 00000 n +0000796527 00000 n +0000794579 00000 n +0000794767 00000 n +0000794921 00000 n +0000795109 00000 n +0000795297 00000 n +0000795451 00000 n +0000795639 00000 n +0000795827 00000 n +0000795981 00000 n +0001144403 00000 n +0000800369 00000 n +0000798331 00000 n +0000796726 00000 n +0000800010 00000 n +0000800189 00000 n +0000798541 00000 n +0000798712 00000 n +0000798920 00000 n +0000800249 00000 n +0000799074 00000 n +0000799261 00000 n +0000799448 00000 n +0000799636 00000 n +0000800309 00000 n +0000799822 00000 n +0001247159 00000 n +0001144370 00000 n +0000804387 00000 n +0000802153 00000 n +0000800494 00000 n +0000804028 00000 n +0000804207 00000 n +0000802372 00000 n +0000802543 00000 n +0000802753 00000 n +0000804267 00000 n +0000802907 00000 n +0000803094 00000 n +0000803280 00000 n +0000803467 00000 n +0000803655 00000 n +0000804327 00000 n +0000803840 00000 n +0001144337 00000 n +0000805951 00000 n +0000805230 00000 n +0000804512 00000 n +0000805712 00000 n +0000805891 00000 n +0000805386 00000 n +0000805558 00000 n +0001144304 00000 n +0000812799 00000 n +0000808402 00000 n +0000806063 00000 n +0000812442 00000 n +0000812621 00000 n +0000808738 00000 n +0000808910 00000 n +0000812679 00000 n +0000809064 00000 n +0000809218 00000 n +0000812739 00000 n +0000809372 00000 n +0000809560 00000 n +0000809714 00000 n +0000809901 00000 n +0000810054 00000 n +0000810241 00000 n +0000810394 00000 n +0000810581 00000 n +0000810734 00000 n +0000810921 00000 n +0000811074 00000 n +0000811262 00000 n +0000811416 00000 n +0000811604 00000 n +0000811758 00000 n +0000811946 00000 n +0000812100 00000 n +0000812288 00000 n +0001144271 00000 n +0000818487 00000 n +0000814666 00000 n +0000812925 00000 n +0000818367 00000 n +0000814984 00000 n +0000815172 00000 n +0000815325 00000 n +0000815513 00000 n +0000815667 00000 n +0000815855 00000 n +0000816009 00000 n +0000816197 00000 n +0000816351 00000 n +0000816539 00000 n +0000816692 00000 n +0000816880 00000 n +0000817034 00000 n +0000817188 00000 n +0000818427 00000 n +0000817342 00000 n +0000817530 00000 n +0000817717 00000 n +0000817871 00000 n +0000818025 00000 n +0000818213 00000 n +0000823484 00000 n +0000820376 00000 n +0000818600 00000 n +0000823005 00000 n +0000823184 00000 n +0000820640 00000 n +0000820812 00000 n +0000823244 00000 n +0000820966 00000 n +0000823304 00000 n +0000821120 00000 n +0000821308 00000 n +0000823364 00000 n +0000821462 00000 n +0000821650 00000 n +0000821838 00000 n +0000821991 00000 n +0000822178 00000 n +0000823424 00000 n +0000822331 00000 n +0000822518 00000 n +0000822671 00000 n +0000822855 00000 n +0001144238 00000 n +0000829047 00000 n +0000825411 00000 n +0000823610 00000 n +0000828688 00000 n +0000828748 00000 n +0000825702 00000 n +0000825890 00000 n +0000826044 00000 n +0000826231 00000 n +0000828808 00000 n +0000826384 00000 n +0000826572 00000 n +0000826726 00000 n +0000826914 00000 n +0000828867 00000 n +0000827068 00000 n +0000828927 00000 n +0000827256 00000 n +0000827444 00000 n +0000827598 00000 n +0000827785 00000 n +0000828987 00000 n +0000827938 00000 n +0000828126 00000 n +0000828313 00000 n +0000828501 00000 n +0001247284 00000 n +0000832875 00000 n +0000830657 00000 n +0000829147 00000 n +0000832576 00000 n +0000832755 00000 n +0000830885 00000 n +0000831056 00000 n +0000832815 00000 n +0000831210 00000 n +0000831398 00000 n +0000831552 00000 n +0000831740 00000 n +0000831893 00000 n +0000832080 00000 n +0000832234 00000 n +0000832422 00000 n +0001144205 00000 n +0000837054 00000 n +0000834616 00000 n +0000833014 00000 n +0000836695 00000 n +0000836874 00000 n +0000834853 00000 n +0000835024 00000 n +0000836934 00000 n +0000835178 00000 n +0000836994 00000 n +0000835331 00000 n +0000835519 00000 n +0000835673 00000 n +0000835861 00000 n +0000836014 00000 n +0000836200 00000 n +0000836353 00000 n +0000836541 00000 n +0001144172 00000 n +0000842363 00000 n +0000838821 00000 n +0000837193 00000 n +0000841584 00000 n +0000841763 00000 n +0000839085 00000 n +0000839256 00000 n +0000841823 00000 n +0000841883 00000 n +0000839410 00000 n +0000841943 00000 n +0000839597 00000 n +0000842003 00000 n +0000842063 00000 n +0000839784 00000 n +0000842123 00000 n +0000839971 00000 n +0000842183 00000 n +0000840158 00000 n +0000840345 00000 n +0000840533 00000 n +0000842243 00000 n +0000840686 00000 n +0000840873 00000 n +0000842303 00000 n +0000841061 00000 n +0000841213 00000 n +0000841398 00000 n +0001144139 00000 n +0000847170 00000 n +0000843974 00000 n +0000842488 00000 n +0000846511 00000 n +0000846690 00000 n +0000844229 00000 n +0000844400 00000 n +0000846750 00000 n +0000844554 00000 n +0000846810 00000 n +0000846870 00000 n +0000844708 00000 n +0000846930 00000 n +0000844895 00000 n +0000845081 00000 n +0000845268 00000 n +0000846990 00000 n +0000845420 00000 n +0000845607 00000 n +0000847050 00000 n +0000845795 00000 n +0000845949 00000 n +0000846136 00000 n +0000847110 00000 n +0000846324 00000 n +0001144106 00000 n +0000849252 00000 n +0000848278 00000 n +0000847295 00000 n +0000848954 00000 n +0000849133 00000 n +0000848443 00000 n +0000848614 00000 n +0000849193 00000 n +0000848768 00000 n +0001144073 00000 n +0000859732 00000 n +0000852338 00000 n +0000849378 00000 n +0000859373 00000 n +0000859552 00000 n +0000852800 00000 n +0000852975 00000 n +0000859612 00000 n +0000859672 00000 n +0000853129 00000 n +0000853316 00000 n +0000853504 00000 n +0000853692 00000 n +0000853879 00000 n +0000854066 00000 n +0000854254 00000 n +0000854441 00000 n +0000854629 00000 n +0000854817 00000 n +0000855005 00000 n +0000855191 00000 n +0000855379 00000 n +0000855567 00000 n +0000855755 00000 n +0000855943 00000 n +0000856130 00000 n +0000856318 00000 n +0000856506 00000 n +0000856694 00000 n +0000856882 00000 n +0000857070 00000 n +0000857258 00000 n +0000857412 00000 n +0000857600 00000 n +0000857787 00000 n +0000857939 00000 n +0000858127 00000 n +0000858280 00000 n +0000858468 00000 n +0000858656 00000 n +0000858810 00000 n +0000858998 00000 n +0000859186 00000 n +0001247409 00000 n +0001144040 00000 n +0000871562 00000 n +0000862895 00000 n +0000859857 00000 n +0000871382 00000 n +0000871442 00000 n +0000863420 00000 n +0000863608 00000 n +0000863796 00000 n +0000863984 00000 n +0000864172 00000 n +0000864360 00000 n +0000864548 00000 n +0000864736 00000 n +0000864924 00000 n +0000865110 00000 n +0000865298 00000 n +0000865486 00000 n +0000865673 00000 n +0000865860 00000 n +0000866048 00000 n +0000866202 00000 n +0000866390 00000 n +0000866577 00000 n +0000866765 00000 n +0000866919 00000 n +0000867106 00000 n +0000867294 00000 n +0000867480 00000 n +0000867668 00000 n +0000867856 00000 n +0000868042 00000 n +0000868228 00000 n +0000868416 00000 n +0000868604 00000 n +0000868791 00000 n +0000868978 00000 n +0000869165 00000 n +0000871502 00000 n +0000869353 00000 n +0000869541 00000 n +0000869729 00000 n +0000869917 00000 n +0000870104 00000 n +0000870291 00000 n +0000870478 00000 n +0000870632 00000 n +0000870820 00000 n +0000871008 00000 n +0000871196 00000 n +0000876957 00000 n +0000873160 00000 n +0000871675 00000 n +0000876897 00000 n +0000873469 00000 n +0000873657 00000 n +0000873844 00000 n +0000874030 00000 n +0000874218 00000 n +0000874406 00000 n +0000874594 00000 n +0000874782 00000 n +0000874936 00000 n +0000875124 00000 n +0000875278 00000 n +0000875466 00000 n +0000875654 00000 n +0000875842 00000 n +0000875996 00000 n +0000876184 00000 n +0000876338 00000 n +0000876525 00000 n +0000876711 00000 n +0000882116 00000 n +0000879146 00000 n +0000877070 00000 n +0000881757 00000 n +0000881936 00000 n +0000879410 00000 n +0000879586 00000 n +0000881996 00000 n +0000879740 00000 n +0000879894 00000 n +0000880048 00000 n +0000880202 00000 n +0000880356 00000 n +0000880510 00000 n +0000880664 00000 n +0000882056 00000 n +0000880818 00000 n +0000881006 00000 n +0000881193 00000 n +0000881381 00000 n +0000881569 00000 n +0001144007 00000 n +0000889059 00000 n +0000884735 00000 n +0000882242 00000 n +0000888999 00000 n +0000885062 00000 n +0000885250 00000 n +0000885438 00000 n +0000885625 00000 n +0000885813 00000 n +0000886001 00000 n +0000886189 00000 n +0000886377 00000 n +0000886565 00000 n +0000886752 00000 n +0000886939 00000 n +0000887127 00000 n +0000887315 00000 n +0000887503 00000 n +0000887691 00000 n +0000887878 00000 n +0000888066 00000 n +0000888254 00000 n +0000888440 00000 n +0000888625 00000 n +0000888813 00000 n +0000894940 00000 n +0000891399 00000 n +0000889172 00000 n +0000894880 00000 n +0000891690 00000 n +0000891878 00000 n +0000892065 00000 n +0000892253 00000 n +0000892441 00000 n +0000892629 00000 n +0000892815 00000 n +0000893003 00000 n +0000893191 00000 n +0000893379 00000 n +0000893567 00000 n +0000893755 00000 n +0000893943 00000 n +0000894131 00000 n +0000894319 00000 n +0000894507 00000 n +0000894694 00000 n +0000905215 00000 n +0000898128 00000 n +0000895040 00000 n +0000905155 00000 n +0000898581 00000 n +0000898769 00000 n +0000898957 00000 n +0000899145 00000 n +0000899333 00000 n +0000899521 00000 n +0000899709 00000 n +0000899897 00000 n +0000900085 00000 n +0000900273 00000 n +0000900461 00000 n +0000900649 00000 n +0000900837 00000 n +0000901025 00000 n +0000901212 00000 n +0000901399 00000 n +0000901587 00000 n +0000901775 00000 n +0000901963 00000 n +0000902150 00000 n +0000902338 00000 n +0000902526 00000 n +0000902714 00000 n +0000902902 00000 n +0000903090 00000 n +0000903278 00000 n +0000903466 00000 n +0000903654 00000 n +0000903842 00000 n +0000904029 00000 n +0000904216 00000 n +0000904404 00000 n +0000904592 00000 n +0000904780 00000 n +0000904968 00000 n +0001247534 00000 n +0000916718 00000 n +0000908411 00000 n +0000905315 00000 n +0000916539 00000 n +0000908918 00000 n +0000909106 00000 n +0000909294 00000 n +0000909479 00000 n +0000909667 00000 n +0000909855 00000 n +0000910043 00000 n +0000910229 00000 n +0000916599 00000 n +0000910416 00000 n +0000910602 00000 n +0000910789 00000 n +0000910976 00000 n +0000911164 00000 n +0000911352 00000 n +0000916659 00000 n +0000911540 00000 n +0000911728 00000 n +0000911916 00000 n +0000912104 00000 n +0000912292 00000 n +0000912480 00000 n +0000912668 00000 n +0000912856 00000 n +0000913010 00000 n +0000913198 00000 n +0000913385 00000 n +0000913573 00000 n +0000913760 00000 n +0000913914 00000 n +0000914101 00000 n +0000914289 00000 n +0000914475 00000 n +0000914663 00000 n +0000914851 00000 n +0000915039 00000 n +0000915227 00000 n +0000915415 00000 n +0000915603 00000 n +0000915791 00000 n +0000915979 00000 n +0000916165 00000 n +0000916352 00000 n +0000924609 00000 n +0000918814 00000 n +0000916831 00000 n +0000924490 00000 n +0000919213 00000 n +0000919401 00000 n +0000919589 00000 n +0000919777 00000 n +0000924550 00000 n +0000919965 00000 n +0000920152 00000 n +0000920339 00000 n +0000920527 00000 n +0000920715 00000 n +0000920902 00000 n +0000921056 00000 n +0000921244 00000 n +0000921398 00000 n +0000921586 00000 n +0000921774 00000 n +0000921962 00000 n +0000922116 00000 n +0000922304 00000 n +0000922458 00000 n +0000922645 00000 n +0000922799 00000 n +0000922987 00000 n +0000923175 00000 n +0000923363 00000 n +0000923551 00000 n +0000923739 00000 n +0000923927 00000 n +0000924115 00000 n +0000924303 00000 n +0000929222 00000 n +0000926275 00000 n +0000924722 00000 n +0000928923 00000 n +0000929102 00000 n +0000926530 00000 n +0000926705 00000 n +0000929162 00000 n +0000926859 00000 n +0000927047 00000 n +0000927235 00000 n +0000927423 00000 n +0000927611 00000 n +0000927799 00000 n +0000927987 00000 n +0000928173 00000 n +0000928360 00000 n +0000928547 00000 n +0000928735 00000 n +0001143974 00000 n +0000934249 00000 n +0000931241 00000 n +0000929361 00000 n +0000933890 00000 n +0000934069 00000 n +0000931496 00000 n +0000931671 00000 n +0000934129 00000 n +0000931825 00000 n +0000932013 00000 n +0000932201 00000 n +0000932389 00000 n +0000932576 00000 n +0000932763 00000 n +0000932951 00000 n +0000934189 00000 n +0000933139 00000 n +0000933327 00000 n +0000933514 00000 n +0000933702 00000 n +0001143941 00000 n +0000939640 00000 n +0000936382 00000 n +0000934388 00000 n +0000939161 00000 n +0000939340 00000 n +0000936646 00000 n +0000936822 00000 n +0000939400 00000 n +0000936976 00000 n +0000939460 00000 n +0000937129 00000 n +0000937317 00000 n +0000937505 00000 n +0000937692 00000 n +0000937879 00000 n +0000939520 00000 n +0000938067 00000 n +0000938255 00000 n +0000938443 00000 n +0000938631 00000 n +0000939580 00000 n +0000938819 00000 n +0000938973 00000 n +0001143908 00000 n +0000943949 00000 n +0000941922 00000 n +0000939766 00000 n +0000943590 00000 n +0000943769 00000 n +0000942132 00000 n +0000942308 00000 n +0000943829 00000 n +0000942462 00000 n +0000942650 00000 n +0000942838 00000 n +0000943889 00000 n +0000943026 00000 n +0000943214 00000 n +0000943402 00000 n +0001247659 00000 n +0001143875 00000 n +0000949125 00000 n +0000946253 00000 n +0000944075 00000 n +0000948945 00000 n +0000949005 00000 n +0000946508 00000 n +0000946695 00000 n +0000946882 00000 n +0000949065 00000 n +0000947069 00000 n +0000947256 00000 n +0000947444 00000 n +0000947632 00000 n +0000947820 00000 n +0000948008 00000 n +0000948195 00000 n +0000948383 00000 n +0000948570 00000 n +0000948757 00000 n +0000953857 00000 n +0000951258 00000 n +0000949225 00000 n +0000953559 00000 n +0000953619 00000 n +0000951495 00000 n +0000951683 00000 n +0000953679 00000 n +0000951871 00000 n +0000952059 00000 n +0000952247 00000 n +0000952434 00000 n +0000952622 00000 n +0000952810 00000 n +0000953738 00000 n +0000952997 00000 n +0000953798 00000 n +0000953184 00000 n +0000953371 00000 n +0000959076 00000 n +0000956133 00000 n +0000953970 00000 n +0000958777 00000 n +0000958956 00000 n +0000956388 00000 n +0000956560 00000 n +0000959016 00000 n +0000956714 00000 n +0000956901 00000 n +0000957089 00000 n +0000957277 00000 n +0000957464 00000 n +0000957652 00000 n +0000957839 00000 n +0000958027 00000 n +0000958215 00000 n +0000958403 00000 n +0000958591 00000 n +0001143842 00000 n +0000961219 00000 n +0000960855 00000 n +0000959202 00000 n +0000960981 00000 n +0000962850 00000 n +0000962664 00000 n +0000961305 00000 n +0000962790 00000 n +0000964556 00000 n +0000964370 00000 n +0000962936 00000 n +0000964496 00000 n +0001247784 00000 n +0000966194 00000 n +0000966008 00000 n +0000964642 00000 n +0000966134 00000 n +0000967886 00000 n +0000967700 00000 n +0000966280 00000 n +0000967826 00000 n +0000969209 00000 n +0000969023 00000 n +0000967972 00000 n +0000969149 00000 n +0000971692 00000 n +0000971387 00000 n +0000969295 00000 n +0000971513 00000 n +0000972414 00000 n +0000972228 00000 n +0000971778 00000 n +0000972354 00000 n +0000974136 00000 n +0000973831 00000 n +0000972500 00000 n +0000973957 00000 n +0001247909 00000 n +0000975279 00000 n +0000975093 00000 n +0000974222 00000 n +0000975219 00000 n +0000976945 00000 n +0000976640 00000 n +0000975365 00000 n +0000976766 00000 n +0000979103 00000 n +0000978798 00000 n +0000977031 00000 n +0000978924 00000 n +0000980492 00000 n +0000980306 00000 n +0000979189 00000 n +0000980432 00000 n +0000982321 00000 n +0000982016 00000 n +0000980578 00000 n +0000982142 00000 n +0000984791 00000 n +0000984486 00000 n +0000982407 00000 n +0000984612 00000 n +0001248034 00000 n +0000986506 00000 n +0000986320 00000 n +0000984877 00000 n +0000986446 00000 n +0000988451 00000 n +0000988265 00000 n +0000986592 00000 n +0000988391 00000 n +0000990511 00000 n +0000990325 00000 n +0000988537 00000 n +0000990451 00000 n +0000992619 00000 n +0000992433 00000 n +0000990597 00000 n +0000992559 00000 n +0000994371 00000 n +0000994185 00000 n +0000992705 00000 n +0000994311 00000 n +0000995987 00000 n +0000995801 00000 n +0000994457 00000 n +0000995927 00000 n +0001248159 00000 n +0000998548 00000 n +0000998243 00000 n +0000996073 00000 n +0000998369 00000 n +0000999473 00000 n +0000999287 00000 n +0000998634 00000 n +0000999413 00000 n +0001001969 00000 n +0001001664 00000 n +0000999559 00000 n +0001001790 00000 n +0001003303 00000 n +0001003117 00000 n +0001002055 00000 n +0001003243 00000 n +0001004638 00000 n +0001004452 00000 n +0001003389 00000 n +0001004578 00000 n +0001006320 00000 n +0001006134 00000 n +0001004724 00000 n +0001006260 00000 n +0001248284 00000 n +0001008728 00000 n +0001008423 00000 n +0001006406 00000 n +0001008549 00000 n +0001010000 00000 n +0001009814 00000 n +0001008814 00000 n +0001009940 00000 n +0001012371 00000 n +0001012066 00000 n +0001010086 00000 n +0001012192 00000 n +0001013919 00000 n +0001013733 00000 n +0001012457 00000 n +0001013859 00000 n +0001015477 00000 n +0001015291 00000 n +0001014005 00000 n +0001015417 00000 n +0001017054 00000 n +0001016868 00000 n +0001015563 00000 n +0001016994 00000 n +0001248409 00000 n +0001018427 00000 n +0001018241 00000 n +0001017140 00000 n +0001018367 00000 n +0001019413 00000 n +0001019227 00000 n +0001018513 00000 n +0001019353 00000 n +0001021742 00000 n +0001021437 00000 n +0001019499 00000 n +0001021563 00000 n +0001022711 00000 n +0001022525 00000 n +0001021828 00000 n +0001022651 00000 n +0001024986 00000 n +0001024681 00000 n +0001022797 00000 n +0001024807 00000 n +0001024867 00000 n +0001026872 00000 n +0001026686 00000 n +0001025072 00000 n +0001026812 00000 n +0001248534 00000 n +0001029355 00000 n +0001029050 00000 n +0001026958 00000 n +0001029176 00000 n +0001030732 00000 n +0001030546 00000 n +0001029441 00000 n +0001030672 00000 n +0001031924 00000 n +0001031738 00000 n +0001030818 00000 n +0001031864 00000 n +0001034369 00000 n +0001034064 00000 n +0001032010 00000 n +0001034190 00000 n +0001035744 00000 n +0001035558 00000 n +0001034455 00000 n +0001035684 00000 n +0001037470 00000 n +0001037284 00000 n +0001035830 00000 n +0001037410 00000 n +0001248659 00000 n +0001039234 00000 n +0001039048 00000 n +0001037556 00000 n +0001039174 00000 n +0001041143 00000 n +0001040957 00000 n +0001039320 00000 n +0001041083 00000 n +0001042688 00000 n +0001042502 00000 n +0001041229 00000 n +0001042628 00000 n +0001043907 00000 n +0001043721 00000 n +0001042774 00000 n +0001043847 00000 n +0001046259 00000 n +0001045954 00000 n +0001043993 00000 n +0001046080 00000 n +0001047833 00000 n +0001047647 00000 n +0001046345 00000 n +0001047773 00000 n +0001248784 00000 n +0001049827 00000 n +0001049641 00000 n +0001047919 00000 n +0001049767 00000 n +0001051065 00000 n +0001050879 00000 n +0001049913 00000 n +0001051005 00000 n +0001066356 00000 n +0001054834 00000 n +0001051151 00000 n +0001066296 00000 n +0001055593 00000 n +0001055748 00000 n +0001055903 00000 n +0001056058 00000 n +0001056214 00000 n +0001056370 00000 n +0001056526 00000 n +0001056682 00000 n +0001056838 00000 n +0001056994 00000 n +0001057150 00000 n +0001057306 00000 n +0001057462 00000 n +0001057618 00000 n +0001057774 00000 n +0001057929 00000 n +0001058084 00000 n +0001058238 00000 n +0001058393 00000 n +0001058548 00000 n +0001058703 00000 n +0001058858 00000 n +0001059013 00000 n +0001059167 00000 n +0001059323 00000 n +0001059479 00000 n +0001059634 00000 n +0001059789 00000 n +0001059942 00000 n +0001060097 00000 n +0001060250 00000 n +0001060406 00000 n +0001060561 00000 n +0001060717 00000 n +0001060873 00000 n +0001061029 00000 n +0001061185 00000 n +0001061341 00000 n +0001061497 00000 n +0001061652 00000 n +0001061807 00000 n +0001061963 00000 n +0001062119 00000 n +0001062274 00000 n +0001062430 00000 n +0001062585 00000 n +0001062741 00000 n +0001062896 00000 n +0001063051 00000 n +0001063205 00000 n +0001063359 00000 n +0001063514 00000 n +0001063669 00000 n +0001063823 00000 n +0001063978 00000 n +0001064133 00000 n +0001064287 00000 n +0001064440 00000 n +0001064594 00000 n +0001064748 00000 n +0001064902 00000 n +0001065056 00000 n +0001065210 00000 n +0001065365 00000 n +0001065520 00000 n +0001065676 00000 n +0001065832 00000 n +0001065987 00000 n +0001066143 00000 n +0001080323 00000 n +0001069648 00000 n +0001066442 00000 n +0001080263 00000 n +0001070362 00000 n +0001070516 00000 n +0001070670 00000 n +0001070822 00000 n +0001070976 00000 n +0001071130 00000 n +0001071283 00000 n +0001071437 00000 n +0001071591 00000 n +0001071744 00000 n +0001071898 00000 n +0001072053 00000 n +0001072206 00000 n +0001072362 00000 n +0001072517 00000 n +0001072672 00000 n +0001072826 00000 n +0001072981 00000 n +0001073136 00000 n +0001073291 00000 n +0001073446 00000 n +0001073601 00000 n +0001073756 00000 n +0001073910 00000 n +0001074065 00000 n +0001074219 00000 n +0001074374 00000 n +0001074529 00000 n +0001074683 00000 n +0001074838 00000 n +0001074993 00000 n +0001075147 00000 n +0001075302 00000 n +0001075457 00000 n +0001075610 00000 n +0001075765 00000 n +0001075918 00000 n +0001076073 00000 n +0001076228 00000 n +0001076383 00000 n +0001076539 00000 n +0001076695 00000 n +0001076851 00000 n +0001077007 00000 n +0001077163 00000 n +0001077317 00000 n +0001077469 00000 n +0001077623 00000 n +0001077777 00000 n +0001077931 00000 n +0001078086 00000 n +0001078240 00000 n +0001078395 00000 n +0001078550 00000 n +0001078705 00000 n +0001078861 00000 n +0001079017 00000 n +0001079173 00000 n +0001079329 00000 n +0001079485 00000 n +0001079641 00000 n +0001079797 00000 n +0001079953 00000 n +0001080108 00000 n +0001098160 00000 n +0001084698 00000 n +0001080409 00000 n +0001098100 00000 n +0001085565 00000 n +0001085721 00000 n +0001085876 00000 n +0001086031 00000 n +0001086187 00000 n +0001086343 00000 n +0001086498 00000 n +0001086653 00000 n +0001086808 00000 n +0001086963 00000 n +0001087118 00000 n +0001087273 00000 n +0001087428 00000 n +0001087582 00000 n +0001087734 00000 n +0001087887 00000 n +0001088041 00000 n +0001088196 00000 n +0001088351 00000 n +0001088506 00000 n +0001088661 00000 n +0001088816 00000 n +0001088971 00000 n +0001089126 00000 n +0001089279 00000 n +0001089434 00000 n +0001089589 00000 n +0001089744 00000 n +0001089899 00000 n +0001090051 00000 n +0001090206 00000 n +0001090361 00000 n +0001090516 00000 n +0001090671 00000 n +0001090826 00000 n +0001090980 00000 n +0001091135 00000 n +0001091289 00000 n +0001091444 00000 n +0001091599 00000 n +0001091753 00000 n +0001091907 00000 n +0001092060 00000 n +0001092214 00000 n +0001092368 00000 n +0001092523 00000 n +0001092677 00000 n +0001092833 00000 n +0001092989 00000 n +0001093145 00000 n +0001093301 00000 n +0001093457 00000 n +0001093611 00000 n +0001093767 00000 n +0001093923 00000 n +0001094079 00000 n +0001094235 00000 n +0001094390 00000 n +0001094545 00000 n +0001094701 00000 n +0001094857 00000 n +0001095012 00000 n +0001095166 00000 n +0001095321 00000 n +0001095476 00000 n +0001095628 00000 n +0001095783 00000 n +0001095937 00000 n +0001096091 00000 n +0001096245 00000 n +0001096400 00000 n +0001096554 00000 n +0001096708 00000 n +0001096863 00000 n +0001097018 00000 n +0001097172 00000 n +0001097327 00000 n +0001097482 00000 n +0001097636 00000 n +0001097790 00000 n +0001097945 00000 n +0001111329 00000 n +0001101169 00000 n +0001098246 00000 n +0001111269 00000 n +0001101856 00000 n +0001102010 00000 n +0001102166 00000 n +0001102321 00000 n +0001102476 00000 n +0001102628 00000 n +0001102782 00000 n +0001102937 00000 n +0001103090 00000 n +0001103245 00000 n +0001103401 00000 n +0001103556 00000 n +0001103710 00000 n +0001103865 00000 n +0001104020 00000 n +0001104173 00000 n +0001104329 00000 n +0001104484 00000 n +0001104639 00000 n +0001104793 00000 n +0001104946 00000 n +0001105099 00000 n +0001105251 00000 n +0001105404 00000 n +0001105557 00000 n +0001105709 00000 n +0001105862 00000 n +0001106015 00000 n +0001106167 00000 n +0001106320 00000 n +0001106475 00000 n +0001106629 00000 n +0001106783 00000 n +0001106938 00000 n +0001107092 00000 n +0001107247 00000 n +0001107402 00000 n +0001107557 00000 n +0001107712 00000 n +0001107867 00000 n +0001108022 00000 n +0001108177 00000 n +0001108332 00000 n +0001108488 00000 n +0001108643 00000 n +0001108796 00000 n +0001108951 00000 n +0001109106 00000 n +0001109260 00000 n +0001109415 00000 n +0001109570 00000 n +0001109724 00000 n +0001109879 00000 n +0001110034 00000 n +0001110188 00000 n +0001110342 00000 n +0001110497 00000 n +0001110652 00000 n +0001110807 00000 n +0001110962 00000 n +0001111116 00000 n +0001248909 00000 n +0001128122 00000 n +0001115160 00000 n +0001111415 00000 n +0001128062 00000 n +0001116000 00000 n +0001116155 00000 n +0001116310 00000 n +0001116463 00000 n +0001116618 00000 n +0001116774 00000 n +0001116929 00000 n +0001117083 00000 n +0001117238 00000 n +0001117393 00000 n +0001117548 00000 n +0001117702 00000 n +0001117857 00000 n +0001118012 00000 n +0001118166 00000 n +0001118321 00000 n +0001118476 00000 n +0001118630 00000 n +0001118785 00000 n +0001118941 00000 n +0001119095 00000 n +0001119249 00000 n +0001119404 00000 n +0001119559 00000 n +0001119713 00000 n +0001119867 00000 n +0001120022 00000 n +0001120176 00000 n +0001120332 00000 n +0001120487 00000 n +0001120641 00000 n +0001120796 00000 n +0001120951 00000 n +0001121106 00000 n +0001121258 00000 n +0001121413 00000 n +0001121567 00000 n +0001121722 00000 n +0001121877 00000 n +0001122032 00000 n +0001122185 00000 n +0001122340 00000 n +0001122495 00000 n +0001122650 00000 n +0001122805 00000 n +0001122960 00000 n +0001123113 00000 n +0001123268 00000 n +0001123423 00000 n +0001123578 00000 n +0001123732 00000 n +0001123886 00000 n +0001124039 00000 n +0001124194 00000 n +0001124349 00000 n +0001124504 00000 n +0001124659 00000 n +0001124813 00000 n +0001124968 00000 n +0001125123 00000 n +0001125277 00000 n +0001125432 00000 n +0001125586 00000 n +0001125741 00000 n +0001125896 00000 n +0001126051 00000 n +0001126206 00000 n +0001126360 00000 n +0001126514 00000 n +0001126669 00000 n +0001126824 00000 n +0001126979 00000 n +0001127134 00000 n +0001127289 00000 n +0001127444 00000 n +0001127599 00000 n +0001127754 00000 n +0001127909 00000 n +0001143756 00000 n +0001132089 00000 n +0001128208 00000 n +0001143696 00000 n +0001132857 00000 n +0001133011 00000 n +0001133166 00000 n +0001133321 00000 n +0001133474 00000 n +0001133629 00000 n +0001133783 00000 n +0001133937 00000 n +0001134092 00000 n +0001134247 00000 n +0001134402 00000 n +0001134557 00000 n +0001134710 00000 n +0001134865 00000 n +0001135020 00000 n +0001135175 00000 n +0001135329 00000 n +0001135483 00000 n +0001135637 00000 n +0001135792 00000 n +0001135947 00000 n +0001136101 00000 n +0001136256 00000 n +0001136411 00000 n +0001136566 00000 n +0001136719 00000 n +0001136874 00000 n +0001137028 00000 n +0001137183 00000 n +0001137337 00000 n +0001137492 00000 n +0001137647 00000 n +0001137802 00000 n +0001137957 00000 n +0001138110 00000 n +0001138264 00000 n +0001138418 00000 n +0001138573 00000 n +0001138728 00000 n +0001138882 00000 n +0001139036 00000 n +0001139190 00000 n +0001139344 00000 n +0001139498 00000 n +0001139653 00000 n +0001139808 00000 n +0001139964 00000 n +0001140118 00000 n +0001140273 00000 n +0001140427 00000 n +0001140583 00000 n +0001140739 00000 n +0001140894 00000 n +0001141050 00000 n +0001141204 00000 n +0001141360 00000 n +0001141514 00000 n +0001141670 00000 n +0001141825 00000 n +0001141981 00000 n +0001142137 00000 n +0001142293 00000 n +0001142449 00000 n +0001142605 00000 n +0001142761 00000 n +0001142917 00000 n +0001143073 00000 n +0001143229 00000 n +0001143385 00000 n +0001143540 00000 n +0001145459 00000 n +0001158368 00000 n +0001176406 00000 n +0001179043 00000 n +0001179012 00000 n +0001181580 00000 n +0001181334 00000 n +0001200247 00000 n +0001221781 00000 n +0001243077 00000 n +0001249007 00000 n +0001249128 00000 n +0001249254 00000 n +0001249380 00000 n +0001249506 00000 n +0001249632 00000 n +0001249758 00000 n +0001249884 00000 n +0001249973 00000 n +0001250100 00000 n +0001250190 00000 n +0001250264 00000 n +0001261136 00000 n +0001316039 00000 n +0001316080 00000 n +0001316120 00000 n +0001316254 00000 n +trailer +<< +/Size 5675 +/Root 5673 0 R +/Info 5674 0 R +/ID [ ] +>> +startxref +1316518 +%%EOF diff --git a/components/net/uip/lib/memb.c b/components/net/uip/lib/memb.c new file mode 100644 index 0000000000000000000000000000000000000000..777b52f7bcf444a40ba78f9c98a054f29020d93b --- /dev/null +++ b/components/net/uip/lib/memb.c @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: memb.c,v 1.1 2006/06/12 08:21:43 adam Exp $ + */ + +/** + * \addtogroup memb + * @{ + */ + + /** + * \file + * Memory block allocation routines. + * \author Adam Dunkels + */ +#include + +#include "memb.h" + +/*---------------------------------------------------------------------------*/ +void +memb_init(struct memb_blocks *m) +{ + memset(m->count, 0, m->num); + memset(m->mem, 0, m->size * m->num); +} +/*---------------------------------------------------------------------------*/ +void * +memb_alloc(struct memb_blocks *m) +{ + int i; + + for(i = 0; i < m->num; ++i) { + if(m->count[i] == 0) { + /* If this block was unused, we increase the reference count to + indicate that it now is used and return a pointer to the + memory block. */ + ++(m->count[i]); + return (void *)((char *)m->mem + (i * m->size)); + } + } + + /* No free block was found, so we return NULL to indicate failure to + allocate block. */ + return NULL; +} +/*---------------------------------------------------------------------------*/ +char +memb_free(struct memb_blocks *m, void *ptr) +{ + int i; + char *ptr2; + + /* Walk through the list of blocks and try to find the block to + which the pointer "ptr" points to. */ + ptr2 = (char *)m->mem; + for(i = 0; i < m->num; ++i) { + + if(ptr2 == (char *)ptr) { + /* We've found to block to which "ptr" points so we decrease the + reference count and return the new value of it. */ + if(m->count[i] > 0) { + /* Make sure that we don't deallocate free memory. */ + --(m->count[i]); + } + return m->count[i]; + } + ptr2 += m->size; + } + return -1; +} +/*---------------------------------------------------------------------------*/ + +/** @} */ diff --git a/components/net/uip/lib/memb.h b/components/net/uip/lib/memb.h new file mode 100644 index 0000000000000000000000000000000000000000..b725ebe1087c75b456f92ad00c8927ecb3c08cc0 --- /dev/null +++ b/components/net/uip/lib/memb.h @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: memb.h,v 1.1 2006/06/12 08:21:43 adam Exp $ + */ + +/** + * \defgroup memb Memory block management functions + * + * The memory block allocation routines provide a simple yet powerful + * set of functions for managing a set of memory blocks of fixed + * size. A set of memory blocks is statically declared with the + * MEMB() macro. Memory blocks are allocated from the declared + * memory by the memb_alloc() function, and are deallocated with the + * memb_free() function. + * + * \note Because of namespace clashes only one MEMB() can be + * declared per C module, and the name scope of a MEMB() memory + * block is local to each C module. + * + * The following example shows how to declare and use a memory block + * called "cmem" which has 8 chunks of memory with each memory chunk + * being 20 bytes large. + * + * @{ + */ + + +/** + * \file + * Memory block allocation routines. + * \author + * Adam Dunkels + * + */ + +#ifndef __MEMB_H__ +#define __MEMB_H__ + +/* + * Here we define a C preprocessing macro for concatenating to + * strings. We need use two macros in order to allow concatenation of + * two #defined macros. + */ +#define MEMB_CONCAT2(s1, s2) s1##s2 +#define MEMB_CONCAT(s1, s2) MEMB_CONCAT2(s1, s2) + +/** + * Declare a memory block. + * + * This macro is used to staticall declare a block of memory that can + * be used by the block allocation functions. The macro statically + * declares a C array with a size that matches the specified number of + * blocks and their individual sizes. + * + * Example: + \code +MEMB(connections, sizeof(struct connection), 16); + \endcode + * + * \param name The name of the memory block (later used with + * memb_init(), memb_alloc() and memb_free()). + * + * \param size The size of each memory chunk, in bytes. + * + * \param num The total number of memory chunks in the block. + * + */ +#define MEMB(name, structure, num) \ + static char MEMB_CONCAT(name,_memb_count)[num]; \ + static structure MEMB_CONCAT(name,_memb_mem)[num]; \ + static struct memb_blocks name = {sizeof(structure), num, \ + MEMB_CONCAT(name,_memb_count), \ + (void *)MEMB_CONCAT(name,_memb_mem)} + +struct memb_blocks { + unsigned short size; + unsigned short num; + char *count; + void *mem; +}; + +/** + * Initialize a memory block that was declared with MEMB(). + * + * \param m A memory block previosly declared with MEMB(). + */ +void memb_init(struct memb_blocks *m); + +/** + * Allocate a memory block from a block of memory declared with MEMB(). + * + * \param m A memory block previosly declared with MEMB(). + */ +void *memb_alloc(struct memb_blocks *m); + +/** + * Deallocate a memory block from a memory block previously declared + * with MEMB(). + * + * \param m m A memory block previosly declared with MEMB(). + * + * \param ptr A pointer to the memory block that is to be deallocated. + * + * \return The new reference count for the memory block (should be 0 + * if successfully deallocated) or -1 if the pointer "ptr" did not + * point to a legal memory block. + */ +char memb_free(struct memb_blocks *m, void *ptr); + +/** @} */ + +#endif /* __MEMB_H__ */ diff --git a/components/net/uip/rt-thread/clock-arch.c b/components/net/uip/rt-thread/clock-arch.c new file mode 100644 index 0000000000000000000000000000000000000000..0c00d83ff5f6d80f4ee83134196e84a0f2d236c9 --- /dev/null +++ b/components/net/uip/rt-thread/clock-arch.c @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * $Id: clock-arch.c,v 1.2 2006/06/12 08:00:31 adam Exp $ + */ + +/** + * \file + * Implementation of architecture-specific clock functionality + * \author + * Adam Dunkels + */ + +#include "clock-arch.h" +#include "stm32f10x.h" + +/*---------------------------------------------------------------------------*/ +clock_time_t +clock_time(void) +{ + return (rt_tick_get()); +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/rt-thread/clock-arch.h b/components/net/uip/rt-thread/clock-arch.h new file mode 100644 index 0000000000000000000000000000000000000000..0c4649d3aee681b1d619652634e52cb9be12e697 --- /dev/null +++ b/components/net/uip/rt-thread/clock-arch.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * $Id: clock-arch.h,v 1.2 2006/06/12 08:00:31 adam Exp $ + */ + +#ifndef __CLOCK_ARCH_H__ +#define __CLOCK_ARCH_H__ + +typedef int clock_time_t; +#define CLOCK_CONF_SECOND 100 + +#endif /* __CLOCK_ARCH_H__ */ diff --git a/components/net/uip/rt-thread/readme.txt b/components/net/uip/rt-thread/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..d20386dfe24ed3f513a7dcab5ea82d978bf9b6b0 --- /dev/null +++ b/components/net/uip/rt-thread/readme.txt @@ -0,0 +1,12 @@ +/************************************ +*** +*** +**** +******/ + + + +2010-11-21 +以太网中的数据来不及处理就会造成断网问题? +2010-11-21 +发现一个问题:HELLO WORLD中不断连接,断开多次之后之后再也不能连接!! \ No newline at end of file diff --git a/components/net/uip/rt-thread/uIPmain.c b/components/net/uip/rt-thread/uIPmain.c new file mode 100644 index 0000000000000000000000000000000000000000..089747472db033141804fbba3d7e466c1306a87c --- /dev/null +++ b/components/net/uip/rt-thread/uIPmain.c @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2001, Adam Dunkels. + * 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. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Adam Dunkels. + * 4. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: main.c,v 1.16 2006/06/11 21:55:03 adam Exp $ + * + */ +#include "uip.h" +#include "uip_arp.h" +#include "stm32_eth.h" +#include "rtconfig.h" +#include "rtdef.h" +#include "uip_timer.h" +#include "rtthread.h" + + + + + +#define BUF ((struct uip_eth_hdr *)&uip_buf[0]) +// Define Prototypes +void TransmitPacket(void) +{ + int i; + u8_t data[1500]; + // Copy the header portion part + for(i=0; i < (UIP_LLH_LEN + 40); ++i) + { + data[i] = uip_buf[i]; + } + // Copy the data portion part + for(; i < uip_len; ++i) + { + data[i] = uip_appdata[i - UIP_LLH_LEN - 40 ]; + } + ETH_HandleTxPkt(data,uip_len); +} +void uip_tcpip_thread(void *parameter) +{ + int i; + static u8_t cnt; + while(1) + { + rt_thread_delay(CLOCK_SECOND*5); + for (i = 0; i < UIP_CONNS; i++) + { + uip_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if (uip_len > 0) + { + uip_arp_out(); + TransmitPacket(); + } + } +#if UIP_UDP + for (i = 0; i < UIP_UDP_CONNS; i++) + { + uip_udp_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if (uip_len > 0) + { + uip_arp_out(); + TransmitPacket(); + } + } +#endif /* UIP_UDP */ + /* Call the ARP timer function every 10 seconds. */ + if (++cnt > 2) uip_arp_timer(); + } +} + +rt_thread_t sys_thread_new(char *name, void (* thread)(void *arg), void *arg, int stacksize, int prio) +{ + rt_thread_t t; + t = rt_thread_create(name, thread, arg, stacksize, prio, 20); + RT_ASSERT(t != RT_NULL); + rt_thread_startup(t); + return t; +} + + +void uip_sys_init(void) +{ + + uip_init(); //uip init + sys_thread_new("uip",uip_tcpip_thread, RT_NULL, RT_LWIP_TCPTHREAD_STACKSIZE, RT_LWIP_TCPTHREAD_PRIORITY); + hello_world_init(); // +} + +/*---------------------------------------------------------------------------*/ +void uip_log(char *m) +{ + rt_kprintf("uIP log message: %s\n", m); +} diff --git a/components/net/uip/rt-thread/uip-conf.h b/components/net/uip/rt-thread/uip-conf.h new file mode 100644 index 0000000000000000000000000000000000000000..9c2a25044ca667f33673991effe708e41976b1a8 --- /dev/null +++ b/components/net/uip/rt-thread/uip-conf.h @@ -0,0 +1,167 @@ +/** + * \addtogroup uipopt + * @{ + */ + +/** + * \name Project-specific configuration options + * @{ + * + * uIP has a number of configuration options that can be overridden + * for each project. These are kept in a project-specific uip-conf.h + * file and all configuration names have the prefix UIP_CONF. + */ + +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $ + */ + +/** + * \file + * An example uIP configuration file + * \author + * Adam Dunkels + */ + +#ifndef __UIP_CONF_H__ +#define __UIP_CONF_H__ + +#include + +/** + * 8 bit datatype + * + * This typedef defines the 8-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint8_t u8_t; + +/** + * 16 bit datatype + * + * This typedef defines the 16-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint16_t u16_t; + +/** + * Statistics datatype + * + * This typedef defines the dataype used for keeping statistics in + * uIP. + * + * \hideinitializer + */ +typedef unsigned short uip_stats_t; + +/** + * Maximum number of TCP connections. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_CONNECTIONS 20 + +/** + * Maximum number of listening TCP ports. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_LISTENPORTS 40 + +/** + * uIP buffer size. + * + * \hideinitializer + */ +#define UIP_CONF_BUFFER_SIZE 420 + +/** + * CPU byte order. + * + * \hideinitializer + */ +#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN + +/** + * Logging on or off + * + * \hideinitializer + */ +#define UIP_CONF_LOGGING 1 + +/** + * UDP support on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP 0 + +/** + * UDP checksums on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP_CHECKSUMS 1 + +/** + * uIP statistics on or off + * + * \hideinitializer + */ +#define UIP_CONF_STATISTICS 1 + +/* Here we include the header file for the application(s) we use in + our project. */ +/* #include "smtp.h" */ +#include "hello-world.h" +//#include "telnetd.h" +/* #include "webserver.h" */ +/* #include "dhcpc.h" */ +/* #include "resolv.h" */ +/* #include "webclient.h" */ + +#define UIP_ARCH_ADD32 0 + +#define UIP_ETHADDR0 0x00 +#define UIP_ETHADDR1 0x33 +#define UIP_ETHADDR2 0x44 +#define UIP_ETHADDR3 0x55 +#define UIP_ETHADDR4 0x66 +#define UIP_ETHADDR5 0x77 +#include + +#endif /* __UIP_CONF_H__ */ + +/** @} */ +/** @} */ diff --git a/components/net/uip/rt-thread/uip_addr.h b/components/net/uip/rt-thread/uip_addr.h new file mode 100644 index 0000000000000000000000000000000000000000..859477a0e338894ec2c6184cd801f43a3c941771 --- /dev/null +++ b/components/net/uip/rt-thread/uip_addr.h @@ -0,0 +1,8 @@ + +#include "rtdef.h" + + + +struct ip_addr { + rt_uint16_t uip_ip4addr_t[2]; +} ; \ No newline at end of file diff --git a/components/net/uip/rt-thread/uip_arch.c b/components/net/uip/rt-thread/uip_arch.c new file mode 100644 index 0000000000000000000000000000000000000000..d41ee2b4a3286389c18539e6c83aa818d0adc194 --- /dev/null +++ b/components/net/uip/rt-thread/uip_arch.c @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2001, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: uip_arch.c,v 1.2.2.1 2003/10/04 22:54:17 adam Exp $ + * + */ + + +#include "uip.h" +#include "uip_arch.h" + +#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) +#define IP_PROTO_TCP 6 + +/*-----------------------------------------------------------------------------------*/ +void uip_add32(u8_t *op32, u16_t op16) +{ + + uip_acc32[3] = op32[3] + (op16 & 0xff); + uip_acc32[2] = op32[2] + (op16 >> 8); + uip_acc32[1] = op32[1]; + uip_acc32[0] = op32[0]; + + if(uip_acc32[2] < (op16 >> 8)) { + ++uip_acc32[1]; + if(uip_acc32[1] == 0) { + ++uip_acc32[0]; + } + } + + + if(uip_acc32[3] < (op16 & 0xff)) { + ++uip_acc32[2]; + if(uip_acc32[2] == 0) { + ++uip_acc32[1]; + if(uip_acc32[1] == 0) { + ++uip_acc32[0]; + } + } + } +} +/*-----------------------------------------------------------------------------------*/ +u16_t uip_chksum(u16_t *sdata, u16_t len) +{ + u16_t acc; + + for (acc = 0; len > 1; len -= 2) { + u16_t u = ((unsigned char *)sdata)[0] + (((unsigned char *)sdata)[1] << 8); + if ((acc += u) < u) { + /* Overflow, so we add the carry to acc (i.e., increase by + one). */ + ++acc; + } + ++sdata; + } + + /* add up any odd byte */ + if(len == 1) { + acc += htons(((u16_t)(*(u8_t *)sdata)) << 8); + if(acc < htons(((u16_t)(*(u8_t *)sdata)) << 8)) { + ++acc; + } + } + + return acc; +} +/*-----------------------------------------------------------------------------------*/ +u16_t uip_ipchksum(void) +{ + return uip_chksum((u16_t *)&uip_buf[UIP_LLH_LEN], 20); +} +/*-----------------------------------------------------------------------------------*/ +u16_t uip_tcpchksum(void) +{ + u16_t hsum, sum; + + + /* Compute the checksum of the TCP header. */ + hsum = uip_chksum((u16_t *)&uip_buf[20 + UIP_LLH_LEN], 20); + + /* Compute the checksum of the data in the TCP packet and add it to + the TCP header checksum. */ + sum = uip_chksum((u16_t *)uip_appdata, + (u16_t)(((((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - 40))); + + if((sum += hsum) < hsum) { + ++sum; + } + + if((sum += BUF->srcipaddr[0]) < BUF->srcipaddr[0]) { + ++sum; + } + if((sum += BUF->srcipaddr[1]) < BUF->srcipaddr[1]) { + ++sum; + } + if((sum += BUF->destipaddr[0]) < BUF->destipaddr[0]) { + ++sum; + } + if((sum += BUF->destipaddr[1]) < BUF->destipaddr[1]) { + ++sum; + } + + if((sum += (u16_t)htons((u16_t)IP_PROTO_TCP)) < (u16_t)htons((u16_t)IP_PROTO_TCP)) { + ++sum; + } + + hsum = (u16_t)htons((((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - 20); + + if((sum += hsum) < hsum) { + ++sum; + } + + return sum; +} + + diff --git a/components/net/uip/rt-thread/uip_eth.h b/components/net/uip/rt-thread/uip_eth.h new file mode 100644 index 0000000000000000000000000000000000000000..e0a8ba8ba969ef617943a368f3d8236ff8334ab5 --- /dev/null +++ b/components/net/uip/rt-thread/uip_eth.h @@ -0,0 +1,35 @@ +#ifndef __NETIF_ETHERNETIF_H__ +#define __NETIF_ETHERNETIF_H__ + +//#include "lwip/netif.h" +#include + +#define NIOCTL_GADDR 0x01 +#define ETHERNET_MTU 1500 +struct pbuf +{ + rt_uint16_t len; +}; + +struct eth_device +{ + /* inherit from rt_device */ + struct rt_device parent; + + //struct eth_addr *ethaddr; + //struct netif *netif; + struct rt_semaphore tx_ack; + struct rt_semaphore tx_msg; + + /* eth device interface */ + struct pbuf* (*eth_rx)(rt_device_t dev); + rt_err_t (*eth_tx)(rt_device_t dev, struct pbuf* p); +}; + +rt_err_t eth_device_ready(struct eth_device* dev); + +rt_err_t eth_device_init(struct eth_device* dev, const char* name); + +rt_err_t eth_system_device_init(void); + +#endif /* __NETIF_ETHERNETIF_H__ */ diff --git a/components/net/uip/rt-thread/uip_etharp.c b/components/net/uip/rt-thread/uip_etharp.c new file mode 100644 index 0000000000000000000000000000000000000000..a2d15a17a224edd326f3953aa6f306fec9c4987f --- /dev/null +++ b/components/net/uip/rt-thread/uip_etharp.c @@ -0,0 +1,58 @@ +#include "uip_pbuf.h" +#include "uip-conf.h" +#include "rtdef.h" +#include "uip.h" +#include "uip_arp.h" +#include "uip_netif.h" + +extern u16_t uip_len, uip_slen; +void +etharp_ip_input(struct netif *netif, struct pbuf *p) +{ + u8_t *ptr; + int i; + ptr = p->payload; + uip_len = p->len; + for (i=0;ilen;i++) uip_buf[i] = ptr[i]; + uip_arp_ipin(); + uip_input(); + return; +} +void +etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, struct pbuf *p) +{ + u8_t *ptr,*pdata; + //struct pbuf *q; + int i; + ptr = p->payload; + uip_len = p->len; + for (i=0;ilen;i++) uip_buf[i] = ptr[i]; + uip_arp_arpin(); //update arp table uip_arp_arpin + if (uip_len) + { + if (( pdata =(u8_t*)rt_malloc(1500*sizeof(u8_t))) ==RT_NULL) + { + pbuf_free(p); + return; + } + for (i=0; i < (UIP_LLH_LEN + 40); ++i) + { + pdata[i] = uip_buf[i]; + } + for (; i < uip_len; ++i) + { + pdata[i] = uip_appdata[i - UIP_LLH_LEN - 40 ]; + } + //q = p; + p ->payload = pdata; + p->len = uip_len; + netif->linkoutput(netif,p); + rt_free(pdata); + pbuf_free(p); + // pbuf_free(q); + return ; + + // return 0; //ERR_OK + } + pbuf_free(p); +} \ No newline at end of file diff --git a/components/net/uip/rt-thread/uip_etharp.h b/components/net/uip/rt-thread/uip_etharp.h new file mode 100644 index 0000000000000000000000000000000000000000..bf8ff1f72695774a003a1d06c1d2e7b96e554c5c --- /dev/null +++ b/components/net/uip/rt-thread/uip_etharp.h @@ -0,0 +1,15 @@ +#include "uip_pbuf.h" +#include "uip-conf.h" +#include "rtdef.h" + + +struct eth_hdr { + u8_t ip_addrdest[6]; + u8_t ip_addrsrc[6]; + u16_t type; +} ; +#define ETHTYPE_ARP UIP_ETHTYPE_ARP +#define ETHTYPE_IP UIP_ETHTYPE_IP +#define ETHTYPE_VLAN 0x8100 +#define ETHTYPE_PPPOEDISC 0x8863 /* PPP Over Ethernet Discovery Stage */ +#define ETHTYPE_PPPOE 0x8864 /* PPP Over Ethernet Session Stage */ diff --git a/components/net/uip/rt-thread/uip_ethernetif.c b/components/net/uip/rt-thread/uip_ethernetif.c new file mode 100644 index 0000000000000000000000000000000000000000..aaa25150a007c35f9e17361697dcb384297b2dbf --- /dev/null +++ b/components/net/uip/rt-thread/uip_ethernetif.c @@ -0,0 +1,313 @@ +/* + * File : ethernetif.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006 - 2010, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2010-07-07 Bernard fix ethernetif_linkoutput send mail issue. + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include +#include "uip.h" +#include "uip_arp.h" +#include "uip_netif.h" +#include "uip_ethernetif.h" +#include "uip_ipaddr.h" + +#ifndef NULL +#define NULL (void *)0 +#endif /* NULL */ + +#define BUF ((struct uip_eth_hdr *)&uip_buf[0]) +extern u16_t uip_len, uip_slen; + +/* eth rx/tx thread */ +static struct rt_mailbox eth_rx_thread_mb; +static struct rt_thread eth_rx_thread; +#ifndef RT_LWIP_ETHTHREAD_PRIORITY +#define RT_ETHERNETIF_THREAD_PREORITY 0x90 +static char eth_rx_thread_mb_pool[48 * 4]; +static char eth_rx_thread_stack[1024]; +#else +#define RT_ETHERNETIF_THREAD_PREORITY RT_LWIP_ETHTHREAD_PRIORITY +static char eth_rx_thread_mb_pool[RT_LWIP_ETHTHREAD_MBOX_SIZE * 4]; +static char eth_rx_thread_stack[RT_LWIP_ETHTHREAD_STACKSIZE]; +#endif + +struct eth_tx_msg +{ + struct netif *netif; + struct pbuf *buf; +}; +static struct rt_mailbox eth_tx_thread_mb; +static struct rt_thread eth_tx_thread; +#ifndef RT_LWIP_ETHTHREAD_PRIORITY +static char eth_tx_thread_mb_pool[32 * 4]; +static char eth_tx_thread_stack[512]; +#else +static char eth_tx_thread_mb_pool[RT_LWIP_ETHTHREAD_MBOX_SIZE * 4]; +static char eth_tx_thread_stack[RT_LWIP_ETHTHREAD_STACKSIZE]; +#endif + +/* the interface provided to uIP */ +err_t eth_init(struct netif *netif) +{ + return 0; +} +extern err_t ethernetif_linkoutput(struct netif *netif, struct pbuf *p); + +err_t eth_input(struct pbuf *p,struct netif *inp) +{ + + struct eth_hdr *ethhdr; + + if(p != RT_NULL) + { +#ifdef LINK_STATS + //LINK_STATS_INC(link.recv); +#endif LINK_STATS + + ethhdr = p->payload; + + switch(uip_htons(ethhdr->type)) + { + case ETHTYPE_IP: //ETHTYPE_IP + etharp_ip_input(inp, p); + pbuf_header(p, -((rt_int16_t)sizeof(struct eth_hdr))); + if (tcpip_input(p, inp) != ERR_OK) + { + // discard packet + pbuf_free(p); + } + break; + + case ETHTYPE_ARP: + etharp_arp_input(inp, (struct eth_addr *)inp->hwaddr, p); + break; + + default: + pbuf_free(p); + p = RT_NULL; + break; + } + } + return ERR_OK; +} + +err_t ethernetif_output(struct netif *netif, struct pbuf *p, struct ip_addr *ipaddr) +{ + return etharp_output(netif, p, ipaddr); +} + +err_t ethernetif_linkoutput(struct netif *netif, struct pbuf *p) +{ + struct eth_tx_msg msg; + struct eth_device* enetif; + + enetif = (struct eth_device*)netif->state; + + /* send a message to eth tx thread */ + msg.netif = netif; + msg.buf = p; + if (rt_mb_send(ð_tx_thread_mb, (rt_uint32_t) &msg) == RT_EOK) + { + /* waiting for ack */ + rt_sem_take(&(enetif->tx_ack), RT_WAITING_FOREVER); + } + + return ERR_OK; +} +/* ethernetif APIs */ +rt_err_t eth_device_init(struct eth_device* dev, const char* name) +{ + struct netif* netif; + uip_ipaddr_t ipaddr; + netif = (struct netif*) rt_malloc (sizeof(struct netif)); + if (netif == RT_NULL) + { + rt_kprintf("malloc netif failed\n"); + return -RT_ERROR; + } + rt_memset(netif, 0, sizeof(struct netif)); + + /* set netif */ + dev->netif = netif; + /* register to rt-thread device manager */ + rt_device_register(&(dev->parent), name, RT_DEVICE_FLAG_RDWR); + dev->parent.type = RT_Device_Class_NetIf; + rt_sem_init(&(dev->tx_ack), name, 0, RT_IPC_FLAG_FIFO); + + /* set name */ + netif->name[0] = name[0]; + netif->name[1] = name[1]; + + /* set hw address to 6 */ + netif->hwaddr_len = 6; + /* maximum transfer unit */ + netif->mtu = ETHERNET_MTU; + /* broadcast capability */ + netif->flags = NETIF_FLAG_BROADCAST; + +#if LWIP_IGMP + /* igmp support */ + netif->flags |= NETIF_FLAG_IGMP; +#endif + + /* get hardware address */ + rt_device_control(&(dev->parent), NIOCTL_GADDR, netif->hwaddr); + + /* set output */ + netif->output = ethernetif_output; + netif->linkoutput = ethernetif_linkoutput; + + /* add netif to lwip */ + + if (netif_add(netif, IP_ADDR_ANY, IP_ADDR_BROADCAST, IP_ADDR_ANY, dev, + eth_init, eth_input) == RT_NULL) + { + /* failed, unregister device and free netif */ + rt_device_unregister(&(dev->parent)); + rt_free(netif); + return -RT_ERROR; + } + + netif_set_default(netif); + return RT_EOK; +} + +/* ethernet buffer */ +void eth_tx_thread_entry(void* parameter) +{ + struct eth_tx_msg* msg; + + while (1) + { + if (rt_mb_recv(ð_tx_thread_mb, (rt_uint32_t*)&msg, RT_WAITING_FOREVER) == RT_EOK) + { + struct eth_device* enetif; + + RT_ASSERT(msg->netif != RT_NULL); + RT_ASSERT(msg->buf != RT_NULL); + + enetif = (struct eth_device*)msg->netif->state; + if (enetif != RT_NULL) + { + /* call driver's interface */ + if (enetif->eth_tx(&(enetif->parent), msg->buf) != RT_EOK) + { + rt_kprintf("transmit eth packet failed\n"); + } + } + + /* send ack */ + rt_sem_release(&(enetif->tx_ack)); + } + } +} + +/* ethernet buffer */ +void eth_rx_thread_entry(void* parameter) +{ + struct eth_device* device; + + while (1) + { + if (rt_mb_recv(ð_rx_thread_mb, (rt_uint32_t*)&device, RT_WAITING_FOREVER) == RT_EOK) + { + struct pbuf *p; + + /* receive all of buffer */ + while (1) + { + p = device->eth_rx(&(device->parent)); + if (p != RT_NULL) + { + /* notify to upper layer */ + eth_input(p, device->netif); + } + else break; + } + } + } +} + +rt_err_t eth_device_ready(struct eth_device* dev) +{ + /* post message to ethernet thread */ + return rt_mb_send(ð_rx_thread_mb, (rt_uint32_t)dev); +} + +rt_err_t eth_system_device_init() +{ + rt_err_t result = RT_EOK; + + /* init rx thread */ + /* init mailbox and create ethernet thread */ + result = rt_mb_init(ð_rx_thread_mb, "erxmb", + ð_rx_thread_mb_pool[0], sizeof(eth_rx_thread_mb_pool)/4, + RT_IPC_FLAG_FIFO); + RT_ASSERT(result == RT_EOK); + + result = rt_thread_init(ð_rx_thread, "erx", eth_rx_thread_entry, RT_NULL, + ð_rx_thread_stack[0], sizeof(eth_rx_thread_stack), + RT_ETHERNETIF_THREAD_PREORITY, 16); + RT_ASSERT(result == RT_EOK); + + result = rt_thread_startup(ð_rx_thread); + RT_ASSERT(result == RT_EOK); + + /* init tx thread */ + /* init mailbox and create ethernet thread */ + + result = rt_mb_init(ð_tx_thread_mb, "etxmb", + ð_tx_thread_mb_pool[0], sizeof(eth_tx_thread_mb_pool)/4, + RT_IPC_FLAG_FIFO); + RT_ASSERT(result == RT_EOK); + + result = rt_thread_init(ð_tx_thread, "etx", eth_tx_thread_entry, RT_NULL, + ð_tx_thread_stack[0], sizeof(eth_tx_thread_stack), + RT_ETHERNETIF_THREAD_PREORITY, 16); + RT_ASSERT(result == RT_EOK); + + result = rt_thread_startup(ð_tx_thread); + RT_ASSERT(result == RT_EOK); + + return result; +} diff --git a/components/net/uip/rt-thread/uip_ethernetif.h b/components/net/uip/rt-thread/uip_ethernetif.h new file mode 100644 index 0000000000000000000000000000000000000000..612d053008d97633bf0fe17cb1531e5192bf2c8c --- /dev/null +++ b/components/net/uip/rt-thread/uip_ethernetif.h @@ -0,0 +1,31 @@ +#ifndef __NETIF_ETHERNETIF_H__ +#define __NETIF_ETHERNETIF_H__ + +//#include "lwip/netif.h" +#include "uip_netif.h" +#include + +#define NIOCTL_GADDR 0x01 +#define ETHERNET_MTU 1500 + +struct eth_device +{ + /* inherit from rt_device */ + struct rt_device parent; + + struct eth_addr *ethaddr; + struct netif *netif; + struct rt_semaphore tx_ack; + + /* eth device interface */ + struct pbuf* (*eth_rx)(rt_device_t dev); + rt_err_t (*eth_tx)(rt_device_t dev, struct pbuf* p); +}; + +rt_err_t eth_device_ready(struct eth_device* dev); + +rt_err_t eth_device_init(struct eth_device* dev, const char* name); + +rt_err_t eth_system_device_init(void); + +#endif /* __NETIF_ETHERNETIF_H__ */ diff --git a/components/net/uip/rt-thread/uip_ipaddr.h b/components/net/uip/rt-thread/uip_ipaddr.h new file mode 100644 index 0000000000000000000000000000000000000000..8f9e99b34aace14070269fae2bafdee6aa06aacf --- /dev/null +++ b/components/net/uip/rt-thread/uip_ipaddr.h @@ -0,0 +1,20 @@ + +#include "rtdef.h" + + + + + + +/* ethernetif APIs */ +#define IP_ADDR_ANY_VALUE 0x00000000UL +#define IP_ADDR_BROADCAST_VALUE 0xffffffffUL + +//extern const struct ip_addr ip_addr_any; +//extern const struct ip_addr ip_addr_broadcast; + +/** IP_ADDR_ can be used as a fixed IP address + * for the wildcard and the broadcast address + */ +#define IP_ADDR_ANY ((struct ip_addr *)0) +#define IP_ADDR_BROADCAST ((struct ip_addr *)0) \ No newline at end of file diff --git a/components/net/uip/rt-thread/uip_netif.c b/components/net/uip/rt-thread/uip_netif.c new file mode 100644 index 0000000000000000000000000000000000000000..cd70ba31ab1613badfeb02f035ce9eb575471100 --- /dev/null +++ b/components/net/uip/rt-thread/uip_netif.c @@ -0,0 +1,53 @@ +#include "rtdef.h" +#include "uip-conf.h" +#include "uip.h" +#include "uip_netif.h" +#include "uip_arp.h" +#include "rtconfig.h" +#include "uip_pbuf.h" + +void netif_set_default(struct netif *netif) +{ + +} +void netif_set_addr(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw) +{ + uip_ipaddr_t hipaddr; + uip_ipaddr(hipaddr, RT_LWIP_IPADDR0,RT_LWIP_IPADDR1,RT_LWIP_IPADDR2,RT_LWIP_IPADDR3); + uip_sethostaddr(hipaddr); + uip_ipaddr(hipaddr, RT_LWIP_GWADDR0,RT_LWIP_GWADDR1,RT_LWIP_GWADDR2,RT_LWIP_GWADDR3); + uip_setdraddr(hipaddr); + uip_ipaddr(hipaddr, RT_LWIP_MSKADDR0,RT_LWIP_MSKADDR1,RT_LWIP_MSKADDR2,RT_LWIP_MSKADDR3); + uip_setnetmask(hipaddr); + return ; +} + +struct netif * +netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw, + void *state, + err_t (* init)(struct netif *netif), + err_t (* input)(struct pbuf *p, struct netif *netif)) +{ + //if (netif_add(netif, IP_ADDR_ANY, IP_ADDR_BROADCAST, IP_ADDR_ANY, dev, + //eth_init, eth_input) == RT_NULL) + // netif->uip_hostaddr = ipaddr; + //netif->uip_draddr = netmask; + // netif->uip_netmask = gw; + // netif_set_addr(netif,ipaddr,netmask,gw); + + // call user specified initialization function for netif + if (init(netif) != 0) { + return RT_NULL; + } + netif->input = input; + netif->state = state; + netif_set_addr(netif,ipaddr,netmask,gw); + return netif; + +} +err_t etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr) +{ + return 0; +} diff --git a/components/net/uip/rt-thread/uip_netif.h b/components/net/uip/rt-thread/uip_netif.h new file mode 100644 index 0000000000000000000000000000000000000000..5cef2bb7ad5972398e5d7c8ad26809430547838b --- /dev/null +++ b/components/net/uip/rt-thread/uip_netif.h @@ -0,0 +1,269 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_NETIF_H__ +#define __LWIP_NETIF_H__ + +//#include "lwip/opt.h" + +#define ENABLE_LOOPBACK (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF) + +#include "lwip/err.h" + +#include "uip_ipaddr.h" + +//#include "lwip/inet.h" +//#include "lwip/pbuf.h" +#include "uip_pbuf.h" +#include "uip-conf.h" + +#if LWIP_DHCP +struct dhcp; +#endif +#if LWIP_AUTOIP +struct autoip; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Throughout this file, IP addresses are expected to be in + * the same byte order as in IP_PCB. */ + +/** must be the maximum of all used hardware address lengths + across all types of interfaces in use */ +#define NETIF_MAX_HWADDR_LEN 6U + +/** TODO: define the use (where, when, whom) of netif flags */ + +/** whether the network interface is 'up'. this is + * a software flag used to control whether this network + * interface is enabled and processes traffic. + */ +#define NETIF_FLAG_UP 0x01U +/** if set, the netif has broadcast capability */ +#define NETIF_FLAG_BROADCAST 0x02U +/** if set, the netif is one end of a point-to-point connection */ +#define NETIF_FLAG_POINTTOPOINT 0x04U +/** if set, the interface is configured using DHCP */ +#define NETIF_FLAG_DHCP 0x08U +/** if set, the interface has an active link + * (set by the network interface driver) */ +#define NETIF_FLAG_LINK_UP 0x10U +/** if set, the netif is an device using ARP */ +#define NETIF_FLAG_ETHARP 0x20U +/** if set, the netif has IGMP capability */ +#define NETIF_FLAG_IGMP 0x40U + +/** Generic data structure used for all lwIP network interfaces. + * The following fields should be filled in by the initialization + * function for the device driver: hwaddr_len, hwaddr[], mtu, flags */ +struct ip_addr { + rt_uint16_t uip_ip4addr_t[2]; +} ; + +struct netif { + /** pointer to next in linked list */ + struct netif *next; + + /** IP address configuration in network byte order */ + struct ip_addr ip_addr; + struct ip_addr netmask; + struct ip_addr gw; + + /** This function is called by the network device driver + * to pass a packet up the TCP/IP stack. */ + err_t (* input)(struct pbuf *p, struct netif *inp); + /** This function is called by the IP module when it wants + * to send a packet on the interface. This function typically + * first resolves the hardware address, then sends the packet. */ + err_t (* output)(struct netif *netif, struct pbuf *p, + struct ip_addr *ipaddr); + /** This function is called by the ARP module when it wants + * to send a packet on the interface. This function outputs + * the pbuf as-is on the link medium. */ + err_t (* linkoutput)(struct netif *netif, struct pbuf *p); +#if LWIP_NETIF_STATUS_CALLBACK + /** This function is called when the netif state is set to up or down + */ + void (* status_callback)(struct netif *netif); +#endif /* LWIP_NETIF_STATUS_CALLBACK */ +#if LWIP_NETIF_LINK_CALLBACK + /** This function is called when the netif link is set to up or down + */ + void (* link_callback)(struct netif *netif); +#endif /* LWIP_NETIF_LINK_CALLBACK */ + /** This field can be set by the device driver and could point + * to state information for the device. */ + void *state; +#if LWIP_DHCP + /** the DHCP client state information for this netif */ + struct dhcp *dhcp; +#endif /* LWIP_DHCP */ +#if LWIP_AUTOIP + /** the AutoIP client state information for this netif */ + struct autoip *autoip; +#endif +#if LWIP_NETIF_HOSTNAME + /* the hostname for this netif, NULL is a valid value */ + char* hostname; +#endif /* LWIP_NETIF_HOSTNAME */ + /** maximum transfer unit (in bytes) */ + u16_t mtu; + /** number of bytes used in hwaddr */ + u8_t hwaddr_len; + /** link level hardware address of this interface */ + u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; + /** flags (see NETIF_FLAG_ above) */ + u8_t flags; + /** descriptive abbreviation */ + char name[2]; + /** number of this interface */ + u8_t num; +#if LWIP_SNMP + /** link type (from "snmp_ifType" enum from snmp.h) */ + u8_t link_type; + /** (estimate) link speed */ + u32_t link_speed; + /** timestamp at last change made (up/down) */ + u32_t ts; + /** counters */ + u32_t ifinoctets; + u32_t ifinucastpkts; + u32_t ifinnucastpkts; + u32_t ifindiscards; + u32_t ifoutoctets; + u32_t ifoutucastpkts; + u32_t ifoutnucastpkts; + u32_t ifoutdiscards; +#endif /* LWIP_SNMP */ +#if LWIP_IGMP + /* This function could be called to add or delete a entry in the multicast filter table of the ethernet MAC.*/ + err_t (*igmp_mac_filter)( struct netif *netif, struct ip_addr *group, u8_t action); +#endif /* LWIP_IGMP */ +#if LWIP_NETIF_HWADDRHINT + u8_t *addr_hint; +#endif /* LWIP_NETIF_HWADDRHINT */ +#if ENABLE_LOOPBACK + /* List of packets to be queued for ourselves. */ + struct pbuf *loop_first; + struct pbuf *loop_last; +#if LWIP_LOOPBACK_MAX_PBUFS + u16_t loop_cnt_current; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ +#endif /* ENABLE_LOOPBACK */ +}; + +#if LWIP_SNMP +#define NETIF_INIT_SNMP(netif, type, speed) \ + /* use "snmp_ifType" enum from snmp.h for "type", snmp_ifType_ethernet_csmacd by example */ \ + netif->link_type = type; \ + /* your link speed here (units: bits per second) */ \ + netif->link_speed = speed; \ + netif->ts = 0; \ + netif->ifinoctets = 0; \ + netif->ifinucastpkts = 0; \ + netif->ifinnucastpkts = 0; \ + netif->ifindiscards = 0; \ + netif->ifoutoctets = 0; \ + netif->ifoutucastpkts = 0; \ + netif->ifoutnucastpkts = 0; \ + netif->ifoutdiscards = 0 +#else /* LWIP_SNMP */ +#define NETIF_INIT_SNMP(netif, type, speed) +#endif /* LWIP_SNMP */ + + +/** The list of network interfaces. */ +extern struct netif *netif_list; +/** The default network interface. */ +extern struct netif *netif_default; + +#define netif_init() /* Compatibility define, not init needed. */ + +struct netif *netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw, + void *state, + err_t (* init)(struct netif *netif), + err_t (* input)(struct pbuf *p, struct netif *netif)); + +void +netif_set_addr(struct netif *netif,struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw); +void netif_remove(struct netif * netif); + +/* Returns a network interface given its name. The name is of the form + "et0", where the first two letters are the "name" field in the + netif structure, and the digit is in the num field in the same + structure. */ +struct netif *netif_find(char *name); + +void netif_set_default(struct netif *netif); + +void netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr); +void netif_set_netmask(struct netif *netif, struct ip_addr *netmask); +void netif_set_gw(struct netif *netif, struct ip_addr *gw); + +void netif_set_up(struct netif *netif); +void netif_set_down(struct netif *netif); +u8_t netif_is_up(struct netif *netif); + +#if LWIP_NETIF_STATUS_CALLBACK +/* + * Set callback to be called when interface is brought up/down + */ +void netif_set_status_callback(struct netif *netif, void (* status_callback)(struct netif *netif)); +#endif /* LWIP_NETIF_STATUS_CALLBACK */ + +#if LWIP_NETIF_LINK_CALLBACK +void netif_set_link_up(struct netif *netif); +void netif_set_link_down(struct netif *netif); +u8_t netif_is_link_up(struct netif *netif); +/* + * Set callback to be called when link is brought up/down + */ +void netif_set_link_callback(struct netif *netif, void (* link_callback)(struct netif *netif)); +#endif /* LWIP_NETIF_LINK_CALLBACK */ + +#ifdef __cplusplus +} +#endif + +#if ENABLE_LOOPBACK +err_t netif_loop_output(struct netif *netif, struct pbuf *p, struct ip_addr *dest_ip); +void netif_poll(struct netif *netif); +#if !LWIP_NETIF_LOOPBACK_MULTITHREADING +void netif_poll_all(void); +#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ +#endif /* ENABLE_LOOPBACK */ + +#endif /* __LWIP_NETIF_H__ */ diff --git a/components/net/uip/rt-thread/uip_pbuf.c b/components/net/uip/rt-thread/uip_pbuf.c new file mode 100644 index 0000000000000000000000000000000000000000..69ff3b5a6d0d6fc3820a17e1f9ad1433ff3052c4 --- /dev/null +++ b/components/net/uip/rt-thread/uip_pbuf.c @@ -0,0 +1,50 @@ +#include "uip_pbuf.h" +#include "rtdef.h" + +typedef rt_uint32_t mem_ptr_t; +#define LWIP_MEM_ALIGN(addr) ((void *)(((mem_ptr_t)(addr) + RT_ALIGN_SIZE - 1) & ~(mem_ptr_t)(RT_ALIGN_SIZE-1))) +#define LWIP_MEM_ALIGN_SIZE(size) (((size) + RT_ALIGN_SIZE - 1) & ~(RT_ALIGN_SIZE-1)) +#define SIZEOF_STRUCT_PBUF LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) + +u8_t +pbuf_free(struct pbuf *p) +{ + + //struct pbuf *q; + + if (p == RT_NULL) return 0; + rt_free(p); + //rt_free(&p->len); + + return 1; +} + +struct pbuf * +pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type) +{ + struct pbuf *p; + u16_t offset = 0; + offset += 16; + + /* If pbuf is to be allocated in RAM, allocate memory for it. */ + p = (struct pbuf*)rt_malloc(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF + offset) + LWIP_MEM_ALIGN_SIZE(length)); + if (p == RT_NULL) return RT_NULL; + /* Set up internal structure of the pbuf. */ + p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset)); + p->len = length; + return p; +} + +u8_t +pbuf_header(struct pbuf *p, s16_t header_size_increment) // +{ + //extrat link header + uint8_t *ptr; + + ptr = p->payload; + ptr -= header_size_increment; + p->payload = ptr; + p->len += header_size_increment; + + return 0; +} \ No newline at end of file diff --git a/components/net/uip/rt-thread/uip_pbuf.h b/components/net/uip/rt-thread/uip_pbuf.h new file mode 100644 index 0000000000000000000000000000000000000000..284dec87fc1556c0b7c09e074461064a26894aed --- /dev/null +++ b/components/net/uip/rt-thread/uip_pbuf.h @@ -0,0 +1,87 @@ + +#ifndef __UIP_PBUF_H__ +#define __UIP_PBUF_H__ + +//#include "lwip/opt.h" +//#include "lwip/err.h" +#include "uip-conf.h" +#include "uip_etharp.h" + +typedef rt_int16_t s16_t; +typedef rt_int8_t err_t; +#ifdef __cplusplus +extern "C" { +#endif + +#define PBUF_TRANSPORT_HLEN 20 +#define PBUF_IP_HLEN 20 + +typedef enum { + PBUF_TRANSPORT, + PBUF_IP, + PBUF_LINK, + PBUF_RAW +} pbuf_layer; + +typedef enum { + PBUF_RAM, /* pbuf data is stored in RAM */ + PBUF_ROM, /* pbuf data is stored in ROM */ + PBUF_REF, /* pbuf comes from the pbuf pool */ + PBUF_POOL /* pbuf payload refers to RAM */ +} pbuf_type; + + +/** indicates this packet's data should be immediately passed to the application */ +#define PBUF_FLAG_PUSH 0x01U +#ifdef RT_USING_LWIP +struct pbuf { + /** next pbuf in singly linked pbuf chain */ + struct pbuf *next; + + /** pointer to the actual data in the buffer */ + void *payload; + + /** + * total length of this buffer and all next buffers in chain + * belonging to the same packet. + * + * For non-queue packet chains this is the invariant: + * p->tot_len == p->len + (p->next? p->next->tot_len: 0) + */ + u16_t tot_len; + + /** length of this buffer */ + u16_t len; + + /** pbuf_type as u8_t instead of enum to save space */ + u8_t /*pbuf_type*/ type; + + /** misc flags */ + u8_t flags; + + /** + * the reference count always equals the number of pointers + * that refer to this pbuf. This can be pointers from an application, + * the stack itself, or pbuf->next pointers from a chain. + */ + u16_t ref; + +}; +#else /* RT_USING_UIP */ +struct pbuf +{ + /** pointer to the actual data in the buffer */ + void *payload; + rt_uint16_t len; +}; +#endif +/* Initializes the pbuf module. This call is empty for now, but may not be in future. */ + + +struct pbuf *pbuf_alloc(pbuf_layer l, u16_t size, pbuf_type type); + +u8_t pbuf_header(struct pbuf *p, s16_t header_size); + +u8_t pbuf_free(struct pbuf *p); + +#endif /* __UIP_PBUF_H__ */ diff --git a/components/net/uip/rt-thread/uip_tcpip.c b/components/net/uip/rt-thread/uip_tcpip.c new file mode 100644 index 0000000000000000000000000000000000000000..4cedb0586449bbd5c1c1c0d76f7fdcc03358799a --- /dev/null +++ b/components/net/uip/rt-thread/uip_tcpip.c @@ -0,0 +1,41 @@ +#include "uip_pbuf.h" +#include "uip-conf.h" +#include "rtdef.h" +#include "uip.h" +#include "uip_arp.h" +#include "uip_netif.h" + +err_t +tcpip_input(struct pbuf *p, struct netif *inp) +{ + int i; + u8_t *pdata; + if (uip_len) + { + uip_arp_out(); + if (( pdata =(u8_t*)rt_malloc(1500*sizeof(u8_t))) == RT_NULL) + { + pbuf_free(p); + return 1; + } + for (i=0; i < (UIP_LLH_LEN + 40); ++i) // 14+40 =54 + { + pdata[i] = uip_buf[i]; /* get dest an src ipaddr */ + } + // Copy the data portion part + for(; i < uip_len; ++i) + { + pdata[i] = uip_appdata[i - UIP_LLH_LEN - 40 ]; + } + p ->payload = pdata; + p->len = uip_len; + inp->linkoutput(inp,p); + rt_free(pdata); + return 1; + } + else + { + pbuf_free(p); + return 0; + } +} \ No newline at end of file diff --git a/components/net/uip/uip-1.0-changelog.txt b/components/net/uip/uip-1.0-changelog.txt new file mode 100644 index 0000000000000000000000000000000000000000..1e6c61cf80eec207ffe41966e9dff1c3223e4d25 --- /dev/null +++ b/components/net/uip/uip-1.0-changelog.txt @@ -0,0 +1,98 @@ +* A new API: protosockets that are similar to BSD sockets but does not + require any underlying multithreading system. + +* Very rudimentary IPv6 support + +* New application: DHCP client. Web server rewritten with protosockets. + +* Removed uIP zero-copy functionality in order to simplify uIP device + driver coding: outbound packets are now *always* stored in full in + the uip_buf buffer. + +* Checksum computation is now part of uip.c, but it still is possible + to implement them in assembly code by specifying a configuration + option. Checksum code now runs on architectures with 2-byte alignment. + +* Added TCP persistent timer. + +* Made all IP address representations use the new uip_ipaddr_ip + datatype for clarity. + +* Updated window behavior so that sending to a host with a small open + window works better now. + +* UDP API change: uip_udp_new() now takes port numbers in network byte + order like TCP functions. + +* Allow reception of packets when no IP address is configured to make + DHCP work. + +* Moved Ethernet address into main uIP module from ARP module. + +* Made constants explicit #defines and moved them out of the code + (header sizes, TCP options, TCP header length field). + +* If uip_len is less than that reported by the IP header, the packet + is discarded. If uip_len is greater than the length reported by the + IP header, uip_len is adjusted. + +* Moved header size definitions into header file. + +* Added uIP call for polling an application without triggering any + timer events. Removed redundant assignments of uip_len and uip_slen. + +* Removed compiler warning about icmp_input label being defined when + UIP_PINGADDRCONF was not used. + +* Added UIP_APPDATA_SIZE macro that holds the available buffer size + for user data. + +* Added uip_udp_bind() call. + +* Moved checksum code into main uIP module. + +* Switched the TCP, UDP and IP header structures to be structs rather + than typedefs. + +* Prefixed TCP state names with UIP_ to avoid name space + contamination. + +* Changed declarations of uip_appdatap and friends to void * to avoid + explicit typecasts. + +* Bugfixes + + o TCP: Fixed bug with high byte of peer window size. + + o TCP: Fixed bug that in some cases prevented concurrent reception and + transmission of TCP data. + + o TCP: uip_connect() didn't correctly calculate age of TIME_WAIT + connections. + + o TCP: Array index for uip_conns[] array was out of bounds in + comparison. Comparison changed to make index within bounds. + + o TCP: if the remote host crashes and tries to reestablish an old + connection, uIP should respond with an ACK with the correct + sequence and acknowledgment numbers, to which the remote host + should respond with an ACK. uIP did not respond with the correct + ACK. + + o TCP: Fixed check for SYNACK segment: now checks only relevant TCP + control flags and discards flags reserved for future expansion. + + o TCP: Fixed bug where uIP did not inform application that a connection + had been aborted during an active open. + + o TCP: FIN segment was accepted even though application had stopped + incoming data with uip_stop(). + + o TCP: A FINACK segment would not always correctly acknowledge data. + + o UDP: checksums are now calculated after all fields have been + filled in. + + o UDP: network byte order on lastport in uip_udp_new(). + + o IP: memset() bugs in IP fragment reassembly code fixed. diff --git a/components/net/uip/uip/Makefile.include b/components/net/uip/uip/Makefile.include new file mode 100644 index 0000000000000000000000000000000000000000..b4d8a94cf5f68c94e4be278dae4fb1408398e010 --- /dev/null +++ b/components/net/uip/uip/Makefile.include @@ -0,0 +1,47 @@ + + +ifdef APPS + APPDIRS = $(foreach APP, $(APPS), ../apps/$(APP)) + -include $(foreach APP, $(APPS), ../apps/$(APP)/Makefile.$(APP)) + CFLAGS += $(addprefix -I../apps/,$(APPS)) +endif + +ifndef CCDEP + CCDEP = $(CC) +endif +ifndef CCDEPCFLAGS + CCDEPCFLAGS = $(CFLAGS) +endif +ifndef OBJECTDIR + OBJECTDIR = obj +endif + +ifeq (${wildcard $(OBJECTDIR)},) + DUMMY := ${shell mkdir $(OBJECTDIR)} +endif + + +vpath %.c . ../uip ../lib $(APPDIRS) + +$(OBJECTDIR)/%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJECTDIR)/%.d: %.c + @set -e; rm -f $@; \ + $(CCDEP) -MM $(CCDEPCFLAGS) $< > $@.$$$$; \ + sed 's,\($*\)\.o[ :]*,$(OBJECTDIR)/\1.o $@ : ,g' < $@.$$$$ > $@; \ + rm -f $@.$$$$ + +UIP_SOURCES=uip.c uip_arp.c uiplib.c psock.c timer.c uip-neighbor.c + + +ifneq ($(MAKECMDGOALS),clean) +-include $(addprefix $(OBJECTDIR)/,$(UIP_SOURCES:.c=.d) \ + $(APP_SOURCES:.c=.d)) +endif + +uip.a: ${addprefix $(OBJECTDIR)/, $(UIP_SOURCES:.c=.o)} + $(AR) rcf $@ $^ + +apps.a: ${addprefix $(OBJECTDIR)/, $(APP_SOURCES:.c=.o)} + $(AR) rcf $@ $^ diff --git a/components/net/uip/uip/lc-addrlabels.h b/components/net/uip/uip/lc-addrlabels.h new file mode 100644 index 0000000000000000000000000000000000000000..fe1387e5f6125ff5fc3792808c362ba40d79af4a --- /dev/null +++ b/components/net/uip/uip/lc-addrlabels.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2004-2005, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: lc-addrlabels.h,v 1.3 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \addtogroup lc + * @{ + */ + +/** + * \file + * Implementation of local continuations based on the "Labels as + * values" feature of gcc + * \author + * Adam Dunkels + * + * This implementation of local continuations is based on a special + * feature of the GCC C compiler called "labels as values". This + * feature allows assigning pointers with the address of the code + * corresponding to a particular C label. + * + * For more information, see the GCC documentation: + * http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html + * + * Thanks to dividuum for finding the nice local scope label + * implementation. + */ + +#ifndef __LC_ADDRLABELS_H__ +#define __LC_ADDRLABELS_H__ + +/** \hideinitializer */ +typedef void * lc_t; + +#define LC_INIT(s) s = NULL + + +#define LC_RESUME(s) \ + do { \ + if(s != NULL) { \ + goto *s; \ + } \ + } while(0) + +#define LC_SET(s) \ + do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0) + +#define LC_END(s) + +#endif /* __LC_ADDRLABELS_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/lc-switch.h b/components/net/uip/uip/lc-switch.h new file mode 100644 index 0000000000000000000000000000000000000000..f32885fd1e09bb9c5ed7e4125cda2d10fb311e41 --- /dev/null +++ b/components/net/uip/uip/lc-switch.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2004-2005, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: lc-switch.h,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \addtogroup lc + * @{ + */ + +/** + * \file + * Implementation of local continuations based on switch() statment + * \author Adam Dunkels + * + * This implementation of local continuations uses the C switch() + * statement to resume execution of a function somewhere inside the + * function's body. The implementation is based on the fact that + * switch() statements are able to jump directly into the bodies of + * control structures such as if() or while() statmenets. + * + * This implementation borrows heavily from Simon Tatham's coroutines + * implementation in C: + * http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html + */ + +#ifndef __LC_SWITCH_H__ +#define __LC_SWTICH_H__ + +/* WARNING! lc implementation using switch() does not work if an + LC_SET() is done within another switch() statement! */ + +/** \hideinitializer */ +typedef unsigned short lc_t; + +#define LC_INIT(s) s = 0; + +#define LC_RESUME(s) switch(s) { case 0: + +#define LC_SET(s) s = __LINE__; case __LINE__: + +#define LC_END(s) } + +#endif /* __LC_SWITCH_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/lc.h b/components/net/uip/uip/lc.h new file mode 100644 index 0000000000000000000000000000000000000000..a9e9d469837d7b723686c6c2870cc566b0ed17a8 --- /dev/null +++ b/components/net/uip/uip/lc.h @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2004-2005, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: lc.h,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \addtogroup pt + * @{ + */ + +/** + * \defgroup lc Local continuations + * @{ + * + * Local continuations form the basis for implementing protothreads. A + * local continuation can be set in a specific function to + * capture the state of the function. After a local continuation has + * been set can be resumed in order to restore the state of the + * function at the point where the local continuation was set. + * + * + */ + +/** + * \file lc.h + * Local continuations + * \author + * Adam Dunkels + * + */ + +#ifdef DOXYGEN +/** + * Initialize a local continuation. + * + * This operation initializes the local continuation, thereby + * unsetting any previously set continuation state. + * + * \hideinitializer + */ +#define LC_INIT(lc) + +/** + * Set a local continuation. + * + * The set operation saves the state of the function at the point + * where the operation is executed. As far as the set operation is + * concerned, the state of the function does not include the + * call-stack or local (automatic) variables, but only the program + * counter and such CPU registers that needs to be saved. + * + * \hideinitializer + */ +#define LC_SET(lc) + +/** + * Resume a local continuation. + * + * The resume operation resumes a previously set local continuation, thus + * restoring the state in which the function was when the local + * continuation was set. If the local continuation has not been + * previously set, the resume operation does nothing. + * + * \hideinitializer + */ +#define LC_RESUME(lc) + +/** + * Mark the end of local continuation usage. + * + * The end operation signifies that local continuations should not be + * used any more in the function. This operation is not needed for + * most implementations of local continuation, but is required by a + * few implementations. + * + * \hideinitializer + */ +#define LC_END(lc) + +/** + * \var typedef lc_t; + * + * The local continuation type. + * + * \hideinitializer + */ +#endif /* DOXYGEN */ + +#ifndef __LC_H__ +#define __LC_H__ + +#ifdef LC_CONF_INCLUDE +#include LC_CONF_INCLUDE +#else +#include "lc-switch.h" +#endif /* LC_CONF_INCLUDE */ + +#endif /* __LC_H__ */ + +/** @} */ +/** @} */ diff --git a/components/net/uip/uip/psock.c b/components/net/uip/uip/psock.c new file mode 100644 index 0000000000000000000000000000000000000000..9085102d302d4062783ff0a76eeef8cc5e9571bb --- /dev/null +++ b/components/net/uip/uip/psock.c @@ -0,0 +1,338 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: psock.c,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +#include +#include + +#include "uipopt.h" +#include "psock.h" +#include "uip.h" + +#define STATE_NONE 0 +#define STATE_ACKED 1 +#define STATE_READ 2 +#define STATE_BLOCKED_NEWDATA 3 +#define STATE_BLOCKED_CLOSE 4 +#define STATE_BLOCKED_SEND 5 +#define STATE_DATA_SENT 6 + +/* + * Return value of the buffering functions that indicates that a + * buffer was not filled by incoming data. + * + */ +#define BUF_NOT_FULL 0 +#define BUF_NOT_FOUND 0 + +/* + * Return value of the buffering functions that indicates that a + * buffer was completely filled by incoming data. + * + */ +#define BUF_FULL 1 + +/* + * Return value of the buffering functions that indicates that an + * end-marker byte was found. + * + */ +#define BUF_FOUND 2 + +/*---------------------------------------------------------------------------*/ +static void +buf_setup(struct psock_buf *buf, + u8_t *bufptr, u16_t bufsize) +{ + buf->ptr = bufptr; + buf->left = bufsize; +} +/*---------------------------------------------------------------------------*/ +static u8_t +buf_bufdata(struct psock_buf *buf, u16_t len, + u8_t **dataptr, u16_t *datalen) +{ + if(*datalen < buf->left) { + memcpy(buf->ptr, *dataptr, *datalen); + buf->ptr += *datalen; + buf->left -= *datalen; + *dataptr += *datalen; + *datalen = 0; + return BUF_NOT_FULL; + } else if(*datalen == buf->left) { + memcpy(buf->ptr, *dataptr, *datalen); + buf->ptr += *datalen; + buf->left = 0; + *dataptr += *datalen; + *datalen = 0; + return BUF_FULL; + } else { + memcpy(buf->ptr, *dataptr, buf->left); + buf->ptr += buf->left; + *datalen -= buf->left; + *dataptr += buf->left; + buf->left = 0; + return BUF_FULL; + } +} +/*---------------------------------------------------------------------------*/ +static u8_t +buf_bufto(register struct psock_buf *buf, u8_t endmarker, + register u8_t **dataptr, register u16_t *datalen) +{ + u8_t c; + while(buf->left > 0 && *datalen > 0) { + c = *buf->ptr = **dataptr; + ++*dataptr; + ++buf->ptr; + --*datalen; + --buf->left; + + if(c == endmarker) { + return BUF_FOUND; + } + } + + if(*datalen == 0) { + return BUF_NOT_FOUND; + } + + while(*datalen > 0) { + c = **dataptr; + --*datalen; + ++*dataptr; + + if(c == endmarker) { + return BUF_FOUND | BUF_FULL; + } + } + + return BUF_FULL; +} +/*---------------------------------------------------------------------------*/ +static char +send_data(register struct psock *s) +{ + if(s->state != STATE_DATA_SENT || uip_rexmit()) { + if(s->sendlen > uip_mss()) { + uip_send(s->sendptr, uip_mss()); + } else { + uip_send(s->sendptr, s->sendlen); + } + s->state = STATE_DATA_SENT; + return 1; + } + return 0; +} +/*---------------------------------------------------------------------------*/ +static char +data_acked(register struct psock *s) +{ + if(s->state == STATE_DATA_SENT && uip_acked()) { + if(s->sendlen > uip_mss()) { + s->sendlen -= uip_mss(); + s->sendptr += uip_mss(); + } else { + s->sendptr += s->sendlen; + s->sendlen = 0; + } + s->state = STATE_ACKED; + return 1; + } + return 0; +} +/*---------------------------------------------------------------------------*/ +PT_THREAD(psock_send(register struct psock *s, const char *buf, + unsigned int len)) +{ + PT_BEGIN(&s->psockpt); + + /* If there is no data to send, we exit immediately. */ + if(len == 0) { + PT_EXIT(&s->psockpt); + } + + /* Save the length of and a pointer to the data that is to be + sent. */ + s->sendptr = buf; + s->sendlen = len; + + s->state = STATE_NONE; + + /* We loop here until all data is sent. The s->sendlen variable is + updated by the data_sent() function. */ + while(s->sendlen > 0) { + + /* + * The condition for this PT_WAIT_UNTIL is a little tricky: the + * protothread will wait here until all data has been acknowledged + * (data_acked() returns true) and until all data has been sent + * (send_data() returns true). The two functions data_acked() and + * send_data() must be called in succession to ensure that all + * data is sent. Therefore the & operator is used instead of the + * && operator, which would cause only the data_acked() function + * to be called when it returns false. + */ + PT_WAIT_UNTIL(&s->psockpt, data_acked(s) & send_data(s)); + } + + s->state = STATE_NONE; + + PT_END(&s->psockpt); +} +/*---------------------------------------------------------------------------*/ +PT_THREAD(psock_generator_send(register struct psock *s, + unsigned short (*generate)(void *), void *arg)) +{ + PT_BEGIN(&s->psockpt); + + /* Ensure that there is a generator function to call. */ + if(generate == NULL) { + PT_EXIT(&s->psockpt); + } + + /* Call the generator function to generate the data in the + uip_appdata buffer. */ + s->sendlen = generate(arg); + s->sendptr =(const u8_t*) uip_appdata; + + s->state = STATE_NONE; + do { + /* Call the generator function again if we are called to perform a + retransmission. */ + if(uip_rexmit()) { + generate(arg); + } + /* Wait until all data is sent and acknowledged. */ + PT_WAIT_UNTIL(&s->psockpt, data_acked(s) & send_data(s)); + } while(s->sendlen > 0); + + s->state = STATE_NONE; + + PT_END(&s->psockpt); +} +/*---------------------------------------------------------------------------*/ +u16_t +psock_datalen(struct psock *psock) +{ + return psock->bufsize - psock->buf.left; +} +/*---------------------------------------------------------------------------*/ +char +psock_newdata(struct psock *s) +{ + if(s->readlen > 0) { + /* There is data in the uip_appdata buffer that has not yet been + read with the PSOCK_READ functions. */ + return 1; + } else if(s->state == STATE_READ) { + /* All data in uip_appdata buffer already consumed. */ + s->state = STATE_BLOCKED_NEWDATA; + return 0; + } else if(uip_newdata()) { + /* There is new data that has not been consumed. */ + return 1; + } else { + /* There is no new data. */ + return 0; + } +} +/*---------------------------------------------------------------------------*/ +PT_THREAD(psock_readto(register struct psock *psock, unsigned char c)) +{ + PT_BEGIN(&psock->psockpt); + + buf_setup(&psock->buf, psock->bufptr, psock->bufsize); + + /* XXX: Should add buf_checkmarker() before do{} loop, if + incoming data has been handled while waiting for a write. */ + + do { + if(psock->readlen == 0) { + PT_WAIT_UNTIL(&psock->psockpt, psock_newdata(psock)); + psock->state = STATE_READ; + psock->readptr = (u8_t *)uip_appdata; + psock->readlen = uip_datalen(); + } + } while((buf_bufto(&psock->buf, c, + &psock->readptr, + &psock->readlen) & BUF_FOUND) == 0); + + if(psock_datalen(psock) == 0) { + psock->state = STATE_NONE; + PT_RESTART(&psock->psockpt); + } + PT_END(&psock->psockpt); +} +/*---------------------------------------------------------------------------*/ +PT_THREAD(psock_readbuf(register struct psock *psock)) +{ + PT_BEGIN(&psock->psockpt); + + buf_setup(&psock->buf, psock->bufptr, psock->bufsize); + + /* XXX: Should add buf_checkmarker() before do{} loop, if + incoming data has been handled while waiting for a write. */ + + do { + if(psock->readlen == 0) { + PT_WAIT_UNTIL(&psock->psockpt, psock_newdata(psock)); + printf("Waited for newdata\n"); + psock->state = STATE_READ; + psock->readptr = (u8_t *)uip_appdata; + psock->readlen = uip_datalen(); + } + } while(buf_bufdata(&psock->buf, psock->bufsize, + &psock->readptr, + &psock->readlen) != BUF_FULL); + + if(psock_datalen(psock) == 0) { + psock->state = STATE_NONE; + PT_RESTART(&psock->psockpt); + } + PT_END(&psock->psockpt); +} +/*---------------------------------------------------------------------------*/ +void +psock_init(register struct psock *psock, char *buffer, unsigned int buffersize) +{ + psock->state = STATE_NONE; + psock->readlen = 0; + psock->bufptr = buffer; + psock->bufsize = buffersize; + buf_setup(&psock->buf, buffer, buffersize); + PT_INIT(&psock->pt); + PT_INIT(&psock->psockpt); +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/uip/psock.h b/components/net/uip/uip/psock.h new file mode 100644 index 0000000000000000000000000000000000000000..3dffa73586611577729a0f8894a50243cd2eee03 --- /dev/null +++ b/components/net/uip/uip/psock.h @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: psock.h,v 1.3 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \defgroup psock Protosockets library + * @{ + * + * The protosocket library provides an interface to the uIP stack that is + * similar to the traditional BSD socket interface. Unlike programs + * written for the ordinary uIP event-driven interface, programs + * written with the protosocket library are executed in a sequential + * fashion and does not have to be implemented as explicit state + * machines. + * + * Protosockets only work with TCP connections. + * + * The protosocket library uses \ref pt protothreads to provide + * sequential control flow. This makes the protosockets lightweight in + * terms of memory, but also means that protosockets inherits the + * functional limitations of protothreads. Each protosocket lives only + * within a single function. Automatic variables (stack variables) are + * not retained across a protosocket library function call. + * + * \note Because the protosocket library uses protothreads, local + * variables will not always be saved across a call to a protosocket + * library function. It is therefore advised that local variables are + * used with extreme care. + * + * The protosocket library provides functions for sending data without + * having to deal with retransmissions and acknowledgements, as well + * as functions for reading data without having to deal with data + * being split across more than one TCP segment. + * + * Because each protosocket runs as a protothread, the protosocket has to be + * started with a call to PSOCK_BEGIN() at the start of the function + * in which the protosocket is used. Similarly, the protosocket protothread can + * be terminated by a call to PSOCK_EXIT(). + * + */ + +/** + * \file + * Protosocket library header file + * \author + * Adam Dunkels + * + */ + +#ifndef __PSOCK_H__ +#define __PSOCK_H__ + +#include "uipopt.h" +#include "pt.h" + + /* + * The structure that holds the state of a buffer. + * + * This structure holds the state of a uIP buffer. The structure has + * no user-visible elements, but is used through the functions + * provided by the library. + * + */ +struct psock_buf { + u8_t *ptr; + unsigned short left; +}; + +/** + * The representation of a protosocket. + * + * The protosocket structrure is an opaque structure with no user-visible + * elements. + */ +struct psock { + struct pt pt, psockpt; /* Protothreads - one that's using the psock + functions, and one that runs inside the + psock functions. */ + const u8_t *sendptr; /* Pointer to the next data to be sent. */ + u8_t *readptr; /* Pointer to the next data to be read. */ + + char *bufptr; /* Pointer to the buffer used for buffering + incoming data. */ + + u16_t sendlen; /* The number of bytes left to be sent. */ + u16_t readlen; /* The number of bytes left to be read. */ + + struct psock_buf buf; /* The structure holding the state of the + input buffer. */ + unsigned int bufsize; /* The size of the input buffer. */ + + unsigned char state; /* The state of the protosocket. */ +}; + +void psock_init(struct psock *psock, char *buffer, unsigned int buffersize); +/** + * Initialize a protosocket. + * + * This macro initializes a protosocket and must be called before the + * protosocket is used. The initialization also specifies the input buffer + * for the protosocket. + * + * \param psock (struct psock *) A pointer to the protosocket to be + * initialized + * + * \param buffer (char *) A pointer to the input buffer for the + * protosocket. + * + * \param buffersize (unsigned int) The size of the input buffer. + * + * \hideinitializer + */ +#define PSOCK_INIT(psock, buffer, buffersize) \ + psock_init(psock, buffer, buffersize) + +/** + * Start the protosocket protothread in a function. + * + * This macro starts the protothread associated with the protosocket and + * must come before other protosocket calls in the function it is used. + * + * \param psock (struct psock *) A pointer to the protosocket to be + * started. + * + * \hideinitializer + */ +#define PSOCK_BEGIN(psock) PT_BEGIN(&((psock)->pt)) + +PT_THREAD(psock_send(struct psock *psock, const char *buf, unsigned int len)); +/** + * Send data. + * + * This macro sends data over a protosocket. The protosocket protothread blocks + * until all data has been sent and is known to have been received by + * the remote end of the TCP connection. + * + * \param psock (struct psock *) A pointer to the protosocket over which + * data is to be sent. + * + * \param data (char *) A pointer to the data that is to be sent. + * + * \param datalen (unsigned int) The length of the data that is to be + * sent. + * + * \hideinitializer + */ +#define PSOCK_SEND(psock, data, datalen) \ + PT_WAIT_THREAD(&((psock)->pt), psock_send(psock, data, datalen)) + +/** + * \brief Send a null-terminated string. + * \param psock Pointer to the protosocket. + * \param str The string to be sent. + * + * This function sends a null-terminated string over the + * protosocket. + * + * \hideinitializer + */ +#define PSOCK_SEND_STR(psock, str) \ + PT_WAIT_THREAD(&((psock)->pt), psock_send(psock, str, strlen(str))) + +PT_THREAD(psock_generator_send(struct psock *psock, + unsigned short (*f)(void *), void *arg)); + +/** + * \brief Generate data with a function and send it + * \param psock Pointer to the protosocket. + * \param generator Pointer to the generator function + * \param arg Argument to the generator function + * + * This function generates data and sends it over the + * protosocket. This can be used to dynamically generate + * data for a transmission, instead of generating the data + * in a buffer beforehand. This function reduces the need for + * buffer memory. The generator function is implemented by + * the application, and a pointer to the function is given + * as an argument with the call to PSOCK_GENERATOR_SEND(). + * + * The generator function should place the generated data + * directly in the uip_appdata buffer, and return the + * length of the generated data. The generator function is + * called by the protosocket layer when the data first is + * sent, and once for every retransmission that is needed. + * + * \hideinitializer + */ +#define PSOCK_GENERATOR_SEND(psock, generator, arg) \ + PT_WAIT_THREAD(&((psock)->pt), \ + psock_generator_send(psock, generator, arg)) + + +/** + * Close a protosocket. + * + * This macro closes a protosocket and can only be called from within the + * protothread in which the protosocket lives. + * + * \param psock (struct psock *) A pointer to the protosocket that is to + * be closed. + * + * \hideinitializer + */ +#define PSOCK_CLOSE(psock) uip_close() + +PT_THREAD(psock_readbuf(struct psock *psock)); +/** + * Read data until the buffer is full. + * + * This macro will block waiting for data and read the data into the + * input buffer specified with the call to PSOCK_INIT(). Data is read + * until the buffer is full.. + * + * \param psock (struct psock *) A pointer to the protosocket from which + * data should be read. + * + * \hideinitializer + */ +#define PSOCK_READBUF(psock) \ + PT_WAIT_THREAD(&((psock)->pt), psock_readbuf(psock)) + +PT_THREAD(psock_readto(struct psock *psock, unsigned char c)); +/** + * Read data up to a specified character. + * + * This macro will block waiting for data and read the data into the + * input buffer specified with the call to PSOCK_INIT(). Data is only + * read until the specifieed character appears in the data stream. + * + * \param psock (struct psock *) A pointer to the protosocket from which + * data should be read. + * + * \param c (char) The character at which to stop reading. + * + * \hideinitializer + */ +#define PSOCK_READTO(psock, c) \ + PT_WAIT_THREAD(&((psock)->pt), psock_readto(psock, c)) + +/** + * The length of the data that was previously read. + * + * This macro returns the length of the data that was previously read + * using PSOCK_READTO() or PSOCK_READ(). + * + * \param psock (struct psock *) A pointer to the protosocket holding the data. + * + * \hideinitializer + */ +#define PSOCK_DATALEN(psock) psock_datalen(psock) + +u16_t psock_datalen(struct psock *psock); + +/** + * Exit the protosocket's protothread. + * + * This macro terminates the protothread of the protosocket and should + * almost always be used in conjunction with PSOCK_CLOSE(). + * + * \sa PSOCK_CLOSE_EXIT() + * + * \param psock (struct psock *) A pointer to the protosocket. + * + * \hideinitializer + */ +#define PSOCK_EXIT(psock) PT_EXIT(&((psock)->pt)) + +/** + * Close a protosocket and exit the protosocket's protothread. + * + * This macro closes a protosocket and exits the protosocket's protothread. + * + * \param psock (struct psock *) A pointer to the protosocket. + * + * \hideinitializer + */ +#define PSOCK_CLOSE_EXIT(psock) \ + do { \ + PSOCK_CLOSE(psock); \ + PSOCK_EXIT(psock); \ + } while(0) + +/** + * Declare the end of a protosocket's protothread. + * + * This macro is used for declaring that the protosocket's protothread + * ends. It must always be used together with a matching PSOCK_BEGIN() + * macro. + * + * \param psock (struct psock *) A pointer to the protosocket. + * + * \hideinitializer + */ +#define PSOCK_END(psock) PT_END(&((psock)->pt)) + +char psock_newdata(struct psock *s); + +/** + * Check if new data has arrived on a protosocket. + * + * This macro is used in conjunction with the PSOCK_WAIT_UNTIL() + * macro to check if data has arrived on a protosocket. + * + * \param psock (struct psock *) A pointer to the protosocket. + * + * \hideinitializer + */ +#define PSOCK_NEWDATA(psock) psock_newdata(psock) + +/** + * Wait until a condition is true. + * + * This macro blocks the protothread until the specified condition is + * true. The macro PSOCK_NEWDATA() can be used to check if new data + * arrives when the protosocket is waiting. + * + * Typically, this macro is used as follows: + * + \code + PT_THREAD(thread(struct psock *s, struct timer *t)) + { + PSOCK_BEGIN(s); + + PSOCK_WAIT_UNTIL(s, PSOCK_NEWADATA(s) || timer_expired(t)); + + if(PSOCK_NEWDATA(s)) { + PSOCK_READTO(s, '\n'); + } else { + handle_timed_out(s); + } + + PSOCK_END(s); + } + \endcode + * + * \param psock (struct psock *) A pointer to the protosocket. + * \param condition The condition to wait for. + * + * \hideinitializer + */ +#define PSOCK_WAIT_UNTIL(psock, condition) \ + PT_WAIT_UNTIL(&((psock)->pt), (condition)); + +#define PSOCK_WAIT_THREAD(psock, condition) \ + PT_WAIT_THREAD(&((psock)->pt), (condition)) + +#endif /* __PSOCK_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/pt.h b/components/net/uip/uip/pt.h new file mode 100644 index 0000000000000000000000000000000000000000..9f1f64dafa30e5dd924f592ee7d9db1211c8448a --- /dev/null +++ b/components/net/uip/uip/pt.h @@ -0,0 +1,323 @@ +/* + * Copyright (c) 2004-2005, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: pt.h,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \addtogroup pt + * @{ + */ + +/** + * \file + * Protothreads implementation. + * \author + * Adam Dunkels + * + */ + +#ifndef __PT_H__ +#define __PT_H__ + +#include "lc.h" + +struct pt { + lc_t lc; +}; + +#define PT_WAITING 0 +#define PT_EXITED 1 +#define PT_ENDED 2 +#define PT_YIELDED 3 + +/** + * \name Initialization + * @{ + */ + +/** + * Initialize a protothread. + * + * Initializes a protothread. Initialization must be done prior to + * starting to execute the protothread. + * + * \param pt A pointer to the protothread control structure. + * + * \sa PT_SPAWN() + * + * \hideinitializer + */ +#define PT_INIT(pt) LC_INIT((pt)->lc) + +/** @} */ + +/** + * \name Declaration and definition + * @{ + */ + +/** + * Declaration of a protothread. + * + * This macro is used to declare a protothread. All protothreads must + * be declared with this macro. + * + * \param name_args The name and arguments of the C function + * implementing the protothread. + * + * \hideinitializer + */ +#define PT_THREAD(name_args) char name_args + +/** + * Declare the start of a protothread inside the C function + * implementing the protothread. + * + * This macro is used to declare the starting point of a + * protothread. It should be placed at the start of the function in + * which the protothread runs. All C statements above the PT_BEGIN() + * invokation will be executed each time the protothread is scheduled. + * + * \param pt A pointer to the protothread control structure. + * + * \hideinitializer + */ +#define PT_BEGIN(pt) { char PT_YIELD_FLAG = 1; LC_RESUME((pt)->lc) + +/** + * Declare the end of a protothread. + * + * This macro is used for declaring that a protothread ends. It must + * always be used together with a matching PT_BEGIN() macro. + * + * \param pt A pointer to the protothread control structure. + * + * \hideinitializer + */ +#define PT_END(pt) LC_END((pt)->lc); PT_YIELD_FLAG = 0; \ + PT_INIT(pt); return PT_ENDED; } + +/** @} */ + +/** + * \name Blocked wait + * @{ + */ + +/** + * Block and wait until condition is true. + * + * This macro blocks the protothread until the specified condition is + * true. + * + * \param pt A pointer to the protothread control structure. + * \param condition The condition. + * + * \hideinitializer + */ +#define PT_WAIT_UNTIL(pt, condition) \ + do { \ + LC_SET((pt)->lc); \ + if(!(condition)) { \ + return PT_WAITING; \ + } \ + } while(0) + +/** + * Block and wait while condition is true. + * + * This function blocks and waits while condition is true. See + * PT_WAIT_UNTIL(). + * + * \param pt A pointer to the protothread control structure. + * \param cond The condition. + * + * \hideinitializer + */ +#define PT_WAIT_WHILE(pt, cond) PT_WAIT_UNTIL((pt), !(cond)) + +/** @} */ + +/** + * \name Hierarchical protothreads + * @{ + */ + +/** + * Block and wait until a child protothread completes. + * + * This macro schedules a child protothread. The current protothread + * will block until the child protothread completes. + * + * \note The child protothread must be manually initialized with the + * PT_INIT() function before this function is used. + * + * \param pt A pointer to the protothread control structure. + * \param thread The child protothread with arguments + * + * \sa PT_SPAWN() + * + * \hideinitializer + */ +#define PT_WAIT_THREAD(pt, thread) PT_WAIT_WHILE((pt), PT_SCHEDULE(thread)) + +/** + * Spawn a child protothread and wait until it exits. + * + * This macro spawns a child protothread and waits until it exits. The + * macro can only be used within a protothread. + * + * \param pt A pointer to the protothread control structure. + * \param child A pointer to the child protothread's control structure. + * \param thread The child protothread with arguments + * + * \hideinitializer + */ +#define PT_SPAWN(pt, child, thread) \ + do { \ + PT_INIT((child)); \ + PT_WAIT_THREAD((pt), (thread)); \ + } while(0) + +/** @} */ + +/** + * \name Exiting and restarting + * @{ + */ + +/** + * Restart the protothread. + * + * This macro will block and cause the running protothread to restart + * its execution at the place of the PT_BEGIN() call. + * + * \param pt A pointer to the protothread control structure. + * + * \hideinitializer + */ +#define PT_RESTART(pt) \ + do { \ + PT_INIT(pt); \ + return PT_WAITING; \ + } while(0) + +/** + * Exit the protothread. + * + * This macro causes the protothread to exit. If the protothread was + * spawned by another protothread, the parent protothread will become + * unblocked and can continue to run. + * + * \param pt A pointer to the protothread control structure. + * + * \hideinitializer + */ +#define PT_EXIT(pt) \ + do { \ + PT_INIT(pt); \ + return PT_EXITED; \ + } while(0) + +/** @} */ + +/** + * \name Calling a protothread + * @{ + */ + +/** + * Schedule a protothread. + * + * This function shedules a protothread. The return value of the + * function is non-zero if the protothread is running or zero if the + * protothread has exited. + * + * \param f The call to the C function implementing the protothread to + * be scheduled + * + * \hideinitializer + */ +#define PT_SCHEDULE(f) ((f) == PT_WAITING) + +/** @} */ + +/** + * \name Yielding from a protothread + * @{ + */ + +/** + * Yield from the current protothread. + * + * This function will yield the protothread, thereby allowing other + * processing to take place in the system. + * + * \param pt A pointer to the protothread control structure. + * + * \hideinitializer + */ +#define PT_YIELD(pt) \ + do { \ + PT_YIELD_FLAG = 0; \ + LC_SET((pt)->lc); \ + if(PT_YIELD_FLAG == 0) { \ + return PT_YIELDED; \ + } \ + } while(0) + +/** + * \brief Yield from the protothread until a condition occurs. + * \param pt A pointer to the protothread control structure. + * \param cond The condition. + * + * This function will yield the protothread, until the + * specified condition evaluates to true. + * + * + * \hideinitializer + */ +#define PT_YIELD_UNTIL(pt, cond) \ + do { \ + PT_YIELD_FLAG = 0; \ + LC_SET((pt)->lc); \ + if((PT_YIELD_FLAG == 0) || !(cond)) { \ + return PT_YIELDED; \ + } \ + } while(0) + +/** @} */ + +#endif /* __PT_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/uip-fw.c b/components/net/uip/uip/uip-fw.c new file mode 100644 index 0000000000000000000000000000000000000000..01858ea7ddcfecd89ab3f81a4490b479a0c0989a --- /dev/null +++ b/components/net/uip/uip/uip-fw.c @@ -0,0 +1,532 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: uip-fw.c,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ +/** + * \addtogroup uip + * @{ + */ + +/** + * \defgroup uipfw uIP packet forwarding + * @{ + * + */ + +/** + * \file + * uIP packet forwarding. + * \author Adam Dunkels + * + * This file implements a number of simple functions which do packet + * forwarding over multiple network interfaces with uIP. + * + */ + +#include "uip.h" +#include "uip_arch.h" +#include "uip-fw.h" + +#include /* for memcpy() */ + +/* + * The list of registered network interfaces. + */ +static struct uip_fw_netif *netifs = NULL; + +/* + * A pointer to the default network interface. + */ +static struct uip_fw_netif *defaultnetif = NULL; + +struct tcpip_hdr { + /* IP header. */ + u8_t vhl, + tos; + u16_t len, + ipid, + ipoffset; + u8_t ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; + + /* TCP header. */ + u16_t srcport, + destport; + u8_t seqno[4], + ackno[4], + tcpoffset, + flags, + wnd[2]; + u16_t tcpchksum; + u8_t urgp[2]; + u8_t optdata[4]; +}; + +struct icmpip_hdr { + /* IP header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; + /* ICMP (echo) header. */ + u8_t type, icode; + u16_t icmpchksum; + u16_t id, seqno; + u8_t payload[1]; +}; + +/* ICMP ECHO. */ +#define ICMP_ECHO 8 + +/* ICMP TIME-EXCEEDED. */ +#define ICMP_TE 11 + +/* + * Pointer to the TCP/IP headers of the packet in the uip_buf buffer. + */ +#define BUF ((struct tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) + +/* + * Pointer to the ICMP/IP headers of the packet in the uip_buf buffer. + */ +#define ICMPBUF ((struct icmpip_hdr *)&uip_buf[UIP_LLH_LEN]) + +/* + * Certain fields of an IP packet that are used for identifying + * duplicate packets. + */ +struct fwcache_entry { + u16_t timer; + + u16_t srcipaddr[2]; + u16_t destipaddr[2]; + u16_t ipid; + u8_t proto; + u8_t unused; + +#if notdef + u16_t payload[2]; +#endif + +#if UIP_REASSEMBLY > 0 + u16_t len, offset; +#endif +}; + +/* + * The number of packets to remember when looking for duplicates. + */ +#ifdef UIP_CONF_FWCACHE_SIZE +#define FWCACHE_SIZE UIP_CONF_FWCACHE_SIZE +#else +#define FWCACHE_SIZE 2 +#endif + + +/* + * A cache of packet header fields which are used for + * identifying duplicate packets. + */ +static struct fwcache_entry fwcache[FWCACHE_SIZE]; + +/** + * \internal + * The time that a packet cache is active. + */ +#define FW_TIME 20 + +/*------------------------------------------------------------------------------*/ +/** + * Initialize the uIP packet forwarding module. + */ +/*------------------------------------------------------------------------------*/ +void +uip_fw_init(void) +{ + struct uip_fw_netif *t; + defaultnetif = NULL; + while(netifs != NULL) { + t = netifs; + netifs = netifs->next; + t->next = NULL; + } +} +/*------------------------------------------------------------------------------*/ +/** + * \internal + * Check if an IP address is within the network defined by an IP + * address and a netmask. + * + * \param ipaddr The IP address to be checked. + * \param netipaddr The IP address of the network. + * \param netmask The netmask of the network. + * + * \return Non-zero if IP address is in network, zero otherwise. + */ +/*------------------------------------------------------------------------------*/ +static unsigned char +ipaddr_maskcmp(u16_t *ipaddr, u16_t *netipaddr, u16_t *netmask) +{ + return (ipaddr[0] & netmask [0]) == (netipaddr[0] & netmask[0]) && + (ipaddr[1] & netmask[1]) == (netipaddr[1] & netmask[1]); +} +/*------------------------------------------------------------------------------*/ +/** + * \internal + * Send out an ICMP TIME-EXCEEDED message. + * + * This function replaces the packet in the uip_buf buffer with the + * ICMP packet. + */ +/*------------------------------------------------------------------------------*/ +static void +time_exceeded(void) +{ + u16_t tmp16; + + /* We don't send out ICMP errors for ICMP messages. */ + if(ICMPBUF->proto == UIP_PROTO_ICMP) { + uip_len = 0; + return; + } + /* Copy fields from packet header into payload of this ICMP packet. */ + memcpy(&(ICMPBUF->payload[0]), ICMPBUF, 28); + + /* Set the ICMP type and code. */ + ICMPBUF->type = ICMP_TE; + ICMPBUF->icode = 0; + + /* Calculate the ICMP checksum. */ + ICMPBUF->icmpchksum = 0; + ICMPBUF->icmpchksum = ~uip_chksum((u16_t *)&(ICMPBUF->type), 36); + + /* Set the IP destination address to be the source address of the + original packet. */ + tmp16= BUF->destipaddr[0]; + BUF->destipaddr[0] = BUF->srcipaddr[0]; + BUF->srcipaddr[0] = tmp16; + tmp16 = BUF->destipaddr[1]; + BUF->destipaddr[1] = BUF->srcipaddr[1]; + BUF->srcipaddr[1] = tmp16; + + /* Set our IP address as the source address. */ + BUF->srcipaddr[0] = uip_hostaddr[0]; + BUF->srcipaddr[1] = uip_hostaddr[1]; + + /* The size of the ICMP time exceeded packet is 36 + the size of the + IP header (20) = 56. */ + uip_len = 56; + ICMPBUF->len[0] = 0; + ICMPBUF->len[1] = uip_len; + + /* Fill in the other fields in the IP header. */ + ICMPBUF->vhl = 0x45; + ICMPBUF->tos = 0; + ICMPBUF->ipoffset[0] = ICMPBUF->ipoffset[1] = 0; + ICMPBUF->ttl = UIP_TTL; + ICMPBUF->proto = UIP_PROTO_ICMP; + + /* Calculate IP checksum. */ + ICMPBUF->ipchksum = 0; + ICMPBUF->ipchksum = ~(uip_ipchksum()); + + +} +/*------------------------------------------------------------------------------*/ +/** + * \internal + * Register a packet in the forwarding cache so that it won't be + * forwarded again. + */ +/*------------------------------------------------------------------------------*/ +static void +fwcache_register(void) +{ + struct fwcache_entry *fw; + int i, oldest; + + oldest = FW_TIME; + fw = NULL; + + /* Find the oldest entry in the cache. */ + for(i = 0; i < FWCACHE_SIZE; ++i) { + if(fwcache[i].timer == 0) { + fw = &fwcache[i]; + break; + } else if(fwcache[i].timer <= oldest) { + fw = &fwcache[i]; + oldest = fwcache[i].timer; + } + } + + fw->timer = FW_TIME; + fw->ipid = BUF->ipid; + fw->srcipaddr[0] = BUF->srcipaddr[0]; + fw->srcipaddr[1] = BUF->srcipaddr[1]; + fw->destipaddr[0] = BUF->destipaddr[0]; + fw->destipaddr[1] = BUF->destipaddr[1]; + fw->proto = BUF->proto; +#if notdef + fw->payload[0] = BUF->srcport; + fw->payload[1] = BUF->destport; +#endif +#if UIP_REASSEMBLY > 0 + fw->len = BUF->len; + fw->offset = BUF->ipoffset; +#endif +} +/*------------------------------------------------------------------------------*/ +/** + * \internal + * Find a network interface for the IP packet in uip_buf. + */ +/*------------------------------------------------------------------------------*/ +static struct uip_fw_netif * +find_netif(void) +{ + struct uip_fw_netif *netif; + + /* Walk through every network interface to check for a match. */ + for(netif = netifs; netif != NULL; netif = netif->next) { + if(ipaddr_maskcmp(BUF->destipaddr, netif->ipaddr, + netif->netmask)) { + /* If there was a match, we break the loop. */ + return netif; + } + } + + /* If no matching netif was found, we use default netif. */ + return defaultnetif; +} +/*------------------------------------------------------------------------------*/ +/** + * Output an IP packet on the correct network interface. + * + * The IP packet should be present in the uip_buf buffer and its + * length in the global uip_len variable. + * + * \retval UIP_FW_ZEROLEN Indicates that a zero-length packet + * transmission was attempted and that no packet was sent. + * + * \retval UIP_FW_NOROUTE No suitable network interface could be found + * for the outbound packet, and the packet was not sent. + * + * \return The return value from the actual network interface output + * function is passed unmodified as a return value. + */ +/*------------------------------------------------------------------------------*/ +u8_t +uip_fw_output(void) +{ + struct uip_fw_netif *netif; + + if(uip_len == 0) { + return UIP_FW_ZEROLEN; + } + + fwcache_register(); + +#if UIP_BROADCAST + /* Link local broadcasts go out on all interfaces. */ + if(/*BUF->proto == UIP_PROTO_UDP &&*/ + BUF->destipaddr[0] == 0xffff && + BUF->destipaddr[1] == 0xffff) { + if(defaultnetif != NULL) { + defaultnetif->output(); + } + for(netif = netifs; netif != NULL; netif = netif->next) { + netif->output(); + } + return UIP_FW_OK; + } +#endif /* UIP_BROADCAST */ + + netif = find_netif(); + /* printf("uip_fw_output: netif %p ->output %p len %d\n", netif, + netif->output, + uip_len);*/ + + if(netif == NULL) { + return UIP_FW_NOROUTE; + } + /* If we now have found a suitable network interface, we call its + output function to send out the packet. */ + return netif->output(); +} +/*------------------------------------------------------------------------------*/ +/** + * Forward an IP packet in the uip_buf buffer. + * + * + * + * \return UIP_FW_FORWARDED if the packet was forwarded, UIP_FW_LOCAL if + * the packet should be processed locally. + */ +/*------------------------------------------------------------------------------*/ +u8_t +uip_fw_forward(void) +{ + struct fwcache_entry *fw; + + /* First check if the packet is destined for ourselves and return 0 + to indicate that the packet should be processed locally. */ + if(BUF->destipaddr[0] == uip_hostaddr[0] && + BUF->destipaddr[1] == uip_hostaddr[1]) { + return UIP_FW_LOCAL; + } + + /* If we use ping IP address configuration, and our IP address is + not yet configured, we should intercept all ICMP echo packets. */ +#if UIP_PINGADDRCONF + if((uip_hostaddr[0] | uip_hostaddr[1]) == 0 && + BUF->proto == UIP_PROTO_ICMP && + ICMPBUF->type == ICMP_ECHO) { + return UIP_FW_LOCAL; + } +#endif /* UIP_PINGADDRCONF */ + + /* Check if the packet is in the forwarding cache already, and if so + we drop it. */ + + for(fw = fwcache; fw < &fwcache[FWCACHE_SIZE]; ++fw) { + if(fw->timer != 0 && +#if UIP_REASSEMBLY > 0 + fw->len == BUF->len && + fw->offset == BUF->ipoffset && +#endif + fw->ipid == BUF->ipid && + fw->srcipaddr[0] == BUF->srcipaddr[0] && + fw->srcipaddr[1] == BUF->srcipaddr[1] && + fw->destipaddr[0] == BUF->destipaddr[0] && + fw->destipaddr[1] == BUF->destipaddr[1] && +#if notdef + fw->payload[0] == BUF->srcport && + fw->payload[1] == BUF->destport && +#endif + fw->proto == BUF->proto) { + /* Drop packet. */ + return UIP_FW_FORWARDED; + } + } + + /* If the TTL reaches zero we produce an ICMP time exceeded message + in the uip_buf buffer and forward that packet back to the sender + of the packet. */ + if(BUF->ttl <= 1) { + /* No time exceeded for broadcasts and multicasts! */ + if(BUF->destipaddr[0] == 0xffff && BUF->destipaddr[1] == 0xffff) { + return UIP_FW_LOCAL; + } + time_exceeded(); + } + + /* Decrement the TTL (time-to-live) value in the IP header */ + BUF->ttl = BUF->ttl - 1; + + /* Update the IP checksum. */ + if(BUF->ipchksum >= HTONS(0xffff - 0x0100)) { + BUF->ipchksum = BUF->ipchksum + HTONS(0x0100) + 1; + } else { + BUF->ipchksum = BUF->ipchksum + HTONS(0x0100); + } + + if(uip_len > 0) { + uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_TCPIP_HLEN]; + uip_fw_output(); + } + +#if UIP_BROADCAST + if(BUF->destipaddr[0] == 0xffff && BUF->destipaddr[1] == 0xffff) { + return UIP_FW_LOCAL; + } +#endif /* UIP_BROADCAST */ + + /* Return non-zero to indicate that the packet was forwarded and that no + other processing should be made. */ + return UIP_FW_FORWARDED; +} +/*------------------------------------------------------------------------------*/ +/** + * Register a network interface with the forwarding module. + * + * \param netif A pointer to the network interface that is to be + * registered. + */ +/*------------------------------------------------------------------------------*/ +void +uip_fw_register(struct uip_fw_netif *netif) +{ + netif->next = netifs; + netifs = netif; +} +/*------------------------------------------------------------------------------*/ +/** + * Register a default network interface. + * + * All packets that don't go out on any of the other interfaces will + * be routed to the default interface. + * + * \param netif A pointer to the network interface that is to be + * registered. + */ +/*------------------------------------------------------------------------------*/ +void +uip_fw_default(struct uip_fw_netif *netif) +{ + defaultnetif = netif; +} +/*------------------------------------------------------------------------------*/ +/** + * Perform periodic processing. + */ +/*------------------------------------------------------------------------------*/ +void +uip_fw_periodic(void) +{ + struct fwcache_entry *fw; + for(fw = fwcache; fw < &fwcache[FWCACHE_SIZE]; ++fw) { + if(fw->timer > 0) { + --fw->timer; + } + } +} +/*------------------------------------------------------------------------------*/ diff --git a/components/net/uip/uip/uip-fw.h b/components/net/uip/uip/uip-fw.h new file mode 100644 index 0000000000000000000000000000000000000000..9033850918ffeedbd7f765b63d8cb423ae267ab0 --- /dev/null +++ b/components/net/uip/uip/uip-fw.h @@ -0,0 +1,176 @@ +/** + * \addtogroup uipfw + * @{ + */ + +/** + * \file + * uIP packet forwarding header file. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: uip-fw.h,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ +#ifndef __UIP_FW_H__ +#define __UIP_FW_H__ + +#include "uip.h" + +/** + * Representation of a uIP network interface. + */ +struct uip_fw_netif { + struct uip_fw_netif *next; /**< Pointer to the next interface when + linked in a list. */ + u16_t ipaddr[2]; /**< The IP address of this interface. */ + u16_t netmask[2]; /**< The netmask of the interface. */ + u8_t (* output)(void); + /**< A pointer to the function that + sends a packet. */ +}; + +/** + * Intantiating macro for a uIP network interface. + * + * Example: + \code + struct uip_fw_netif slipnetif = + {UIP_FW_NETIF(192,168,76,1, 255,255,255,0, slip_output)}; + \endcode + * \param ip1,ip2,ip3,ip4 The IP address of the network interface. + * + * \param nm1,nm2,nm3,nm4 The netmask of the network interface. + * + * \param outputfunc A pointer to the output function of the network interface. + * + * \hideinitializer + */ +#define UIP_FW_NETIF(ip1,ip2,ip3,ip4, nm1,nm2,nm3,nm4, outputfunc) \ + NULL, \ + {HTONS((ip1 << 8) | ip2), HTONS((ip3 << 8) | ip4)}, \ + {HTONS((nm1 << 8) | nm2), HTONS((nm3 << 8) | nm4)}, \ + outputfunc + +/** + * Set the IP address of a network interface. + * + * \param netif A pointer to the uip_fw_netif structure for the network interface. + * + * \param addr A pointer to an IP address. + * + * \hideinitializer + */ +#define uip_fw_setipaddr(netif, addr) \ + do { (netif)->ipaddr[0] = ((u16_t *)(addr))[0]; \ + (netif)->ipaddr[1] = ((u16_t *)(addr))[1]; } while(0) +/** + * Set the netmask of a network interface. + * + * \param netif A pointer to the uip_fw_netif structure for the network interface. + * + * \param addr A pointer to an IP address representing the netmask. + * + * \hideinitializer + */ +#define uip_fw_setnetmask(netif, addr) \ + do { (netif)->netmask[0] = ((u16_t *)(addr))[0]; \ + (netif)->netmask[1] = ((u16_t *)(addr))[1]; } while(0) + +void uip_fw_init(void); +u8_t uip_fw_forward(void); +u8_t uip_fw_output(void); +void uip_fw_register(struct uip_fw_netif *netif); +void uip_fw_default(struct uip_fw_netif *netif); +void uip_fw_periodic(void); + + +/** + * A non-error message that indicates that a packet should be + * processed locally. + * + * \hideinitializer + */ +#define UIP_FW_LOCAL 0 + +/** + * A non-error message that indicates that something went OK. + * + * \hideinitializer + */ +#define UIP_FW_OK 0 + +/** + * A non-error message that indicates that a packet was forwarded. + * + * \hideinitializer + */ +#define UIP_FW_FORWARDED 1 + +/** + * A non-error message that indicates that a zero-length packet + * transmission was attempted, and that no packet was sent. + * + * \hideinitializer + */ +#define UIP_FW_ZEROLEN 2 + +/** + * An error message that indicates that a packet that was too large + * for the outbound network interface was detected. + * + * \hideinitializer + */ +#define UIP_FW_TOOLARGE 3 + +/** + * An error message that indicates that no suitable interface could be + * found for an outbound packet. + * + * \hideinitializer + */ +#define UIP_FW_NOROUTE 4 + +/** + * An error message that indicates that a packet that should be + * forwarded or output was dropped. + * + * \hideinitializer + */ +#define UIP_FW_DROPPED 5 + + +#endif /* __UIP_FW_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/uip-neighbor.c b/components/net/uip/uip/uip-neighbor.c new file mode 100644 index 0000000000000000000000000000000000000000..739c03e9c18359dc6cae14f63f14de4e3e87ccff --- /dev/null +++ b/components/net/uip/uip/uip-neighbor.c @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * $Id: uip-neighbor.c,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \file + * Database of link-local neighbors, used by IPv6 code and + * to be used by a future ARP code rewrite. + * \author + * Adam Dunkels + */ + +#include "uip-neighbor.h" + +#include + +#define MAX_TIME 128 + +#ifdef UIP_NEIGHBOR_CONF_ENTRIES +#define ENTRIES UIP_NEIGHBOR_CONF_ENTRIES +#else /* UIP_NEIGHBOR_CONF_ENTRIES */ +#define ENTRIES 8 +#endif /* UIP_NEIGHBOR_CONF_ENTRIES */ + +struct neighbor_entry { + uip_ipaddr_t ipaddr; + struct uip_neighbor_addr addr; + u8_t time; +}; +static struct neighbor_entry entries[ENTRIES]; + +/*---------------------------------------------------------------------------*/ +void +uip_neighbor_init(void) +{ + int i; + + for(i = 0; i < ENTRIES; ++i) { + entries[i].time = MAX_TIME; + } +} +/*---------------------------------------------------------------------------*/ +void +uip_neighbor_periodic(void) +{ + int i; + + for(i = 0; i < ENTRIES; ++i) { + if(entries[i].time < MAX_TIME) { + entries[i].time++; + } + } +} +/*---------------------------------------------------------------------------*/ +void +uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr) +{ + int i, oldest; + u8_t oldest_time; + + printf("Adding neighbor with link address %02x:%02x:%02x:%02x:%02x:%02x\n", + addr->addr.addr[0], addr->addr.addr[1], addr->addr.addr[2], addr->addr.addr[3], + addr->addr.addr[4], addr->addr.addr[5]); + + /* Find the first unused entry or the oldest used entry. */ + oldest_time = 0; + oldest = 0; + for(i = 0; i < ENTRIES; ++i) { + if(entries[i].time == MAX_TIME) { + oldest = i; + break; + } + if(uip_ipaddr_cmp(entries[i].ipaddr, addr)) { + oldest = i; + break; + } + if(entries[i].time > oldest_time) { + oldest = i; + oldest_time = entries[i].time; + } + } + + /* Use the oldest or first free entry (either pointed to by the + "oldest" variable). */ + entries[oldest].time = 0; + uip_ipaddr_copy(entries[oldest].ipaddr, ipaddr); + memcpy(&entries[oldest].addr, addr, sizeof(struct uip_neighbor_addr)); +} +/*---------------------------------------------------------------------------*/ +static struct neighbor_entry * +find_entry(uip_ipaddr_t ipaddr) +{ + int i; + + for(i = 0; i < ENTRIES; ++i) { + if(uip_ipaddr_cmp(entries[i].ipaddr, ipaddr)) { + return &entries[i]; + } + } + return NULL; +} +/*---------------------------------------------------------------------------*/ +void +uip_neighbor_update(uip_ipaddr_t ipaddr) +{ + struct neighbor_entry *e; + + e = find_entry(ipaddr); + if(e != NULL) { + e->time = 0; + } +} +/*---------------------------------------------------------------------------*/ +struct uip_neighbor_addr * +uip_neighbor_lookup(uip_ipaddr_t ipaddr) +{ + struct neighbor_entry *e; + + e = find_entry(ipaddr); + if(e != NULL) { + /* printf("Lookup neighbor with link address %02x:%02x:%02x:%02x:%02x:%02x\n", + e->addr.addr.addr[0], e->addr.addr.addr[1], e->addr.addr.addr[2], e->addr.addr.addr[3], + e->addr.addr.addr[4], e->addr.addr.addr[5]);*/ + + return &e->addr; + } + return NULL; +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/uip/uip-neighbor.h b/components/net/uip/uip/uip-neighbor.h new file mode 100644 index 0000000000000000000000000000000000000000..d3b351c277a6f5f123629bd97f2611b51e3d5021 --- /dev/null +++ b/components/net/uip/uip/uip-neighbor.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * $Id: uip-neighbor.h,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \file + * Header file for database of link-local neighbors, used by + * IPv6 code and to be used by future ARP code. + * \author + * Adam Dunkels + */ + +#ifndef __UIP_NEIGHBOR_H__ +#define __UIP_NEIGHBOR_H__ + +#include "uip.h" + +struct uip_neighbor_addr { +#if UIP_NEIGHBOR_CONF_ADDRTYPE + UIP_NEIGHBOR_CONF_ADDRTYPE addr; +#else + struct uip_eth_addr addr; +#endif +}; + +void uip_neighbor_init(void); +void uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr); +void uip_neighbor_update(uip_ipaddr_t ipaddr); +struct uip_neighbor_addr *uip_neighbor_lookup(uip_ipaddr_t ipaddr); +void uip_neighbor_periodic(void); + +#endif /* __UIP-NEIGHBOR_H__ */ diff --git a/components/net/uip/uip/uip-split.c b/components/net/uip/uip/uip-split.c new file mode 100644 index 0000000000000000000000000000000000000000..a910ee621cbd3e1b2a11da352e189b76c32ad7b6 --- /dev/null +++ b/components/net/uip/uip/uip-split.c @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: uip-split.c,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +#include + +#include "uip-split.h" +#include "uip.h" +#include "uip-fw.h" +#include "uip_arch.h" + + + +#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) + +/*-----------------------------------------------------------------------------*/ +void +uip_split_output(void) +{ + u16_t tcplen, len1, len2; + + /* We only try to split maximum sized TCP segments. */ + if(BUF->proto == UIP_PROTO_TCP && + uip_len == UIP_BUFSIZE - UIP_LLH_LEN) { + + tcplen = uip_len - UIP_TCPIP_HLEN; + /* Split the segment in two. If the original packet length was + odd, we make the second packet one byte larger. */ + len1 = len2 = tcplen / 2; + if(len1 + len2 < tcplen) { + ++len2; + } + + /* Create the first packet. This is done by altering the length + field of the IP header and updating the checksums. */ + uip_len = len1 + UIP_TCPIP_HLEN; +#if UIP_CONF_IPV6 + /* For IPv6, the IP length field does not include the IPv6 IP header + length. */ + BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8); + BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff); +#else /* UIP_CONF_IPV6 */ + BUF->len[0] = uip_len >> 8; + BUF->len[1] = uip_len & 0xff; +#endif /* UIP_CONF_IPV6 */ + + /* Recalculate the TCP checksum. */ + BUF->tcpchksum = 0; + BUF->tcpchksum = ~(uip_tcpchksum()); + +#if !UIP_CONF_IPV6 + /* Recalculate the IP checksum. */ + BUF->ipchksum = 0; + BUF->ipchksum = ~(uip_ipchksum()); +#endif /* UIP_CONF_IPV6 */ + + /* Transmit the first packet. */ + /* uip_fw_output();*/ + tcpip_output(); + + /* Now, create the second packet. To do this, it is not enough to + just alter the length field, but we must also update the TCP + sequence number and point the uip_appdata to a new place in + memory. This place is detemined by the length of the first + packet (len1). */ + uip_len = len2 + UIP_TCPIP_HLEN; +#if UIP_CONF_IPV6 + /* For IPv6, the IP length field does not include the IPv6 IP header + length. */ + BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8); + BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff); +#else /* UIP_CONF_IPV6 */ + BUF->len[0] = uip_len >> 8; + BUF->len[1] = uip_len & 0xff; +#endif /* UIP_CONF_IPV6 */ + + /* uip_appdata += len1;*/ + memcpy(uip_appdata, (u8_t *)uip_appdata + len1, len2); + + uip_add32(BUF->seqno, len1); + BUF->seqno[0] = uip_acc32[0]; + BUF->seqno[1] = uip_acc32[1]; + BUF->seqno[2] = uip_acc32[2]; + BUF->seqno[3] = uip_acc32[3]; + + /* Recalculate the TCP checksum. */ + BUF->tcpchksum = 0; + BUF->tcpchksum = ~(uip_tcpchksum()); + +#if !UIP_CONF_IPV6 + /* Recalculate the IP checksum. */ + BUF->ipchksum = 0; + BUF->ipchksum = ~(uip_ipchksum()); +#endif /* UIP_CONF_IPV6 */ + + /* Transmit the second packet. */ + /* uip_fw_output();*/ + tcpip_output(); + } else { + /* uip_fw_output();*/ + tcpip_output(); + } + +} +/*-----------------------------------------------------------------------------*/ diff --git a/components/net/uip/uip/uip-split.h b/components/net/uip/uip/uip-split.h new file mode 100644 index 0000000000000000000000000000000000000000..c2c1789cbc1e837bbe116b0e4dc5d85dfb00d26a --- /dev/null +++ b/components/net/uip/uip/uip-split.h @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: uip-split.h,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ +/** + * \addtogroup uip + * @{ + */ + +/** + * \defgroup uipsplit uIP TCP throughput booster hack + * @{ + * + * The basic uIP TCP implementation only allows each TCP connection to + * have a single TCP segment in flight at any given time. Because of + * the delayed ACK algorithm employed by most TCP receivers, uIP's + * limit on the amount of in-flight TCP segments seriously reduces the + * maximum achievable throughput for sending data from uIP. + * + * The uip-split module is a hack which tries to remedy this + * situation. By splitting maximum sized outgoing TCP segments into + * two, the delayed ACK algorithm is not invoked at TCP + * receivers. This improves the throughput when sending data from uIP + * by orders of magnitude. + * + * The uip-split module uses the uip-fw module (uIP IP packet + * forwarding) for sending packets. Therefore, the uip-fw module must + * be set up with the appropriate network interfaces for this module + * to work. + */ + + +/** + * \file + * Module for splitting outbound TCP segments in two to avoid the + * delayed ACK throughput degradation. + * \author + * Adam Dunkels + * + */ + +#ifndef __UIP_SPLIT_H__ +#define __UIP_SPLIT_H__ + +/** + * Handle outgoing packets. + * + * This function inspects an outgoing packet in the uip_buf buffer and + * sends it out using the uip_fw_output() function. If the packet is a + * full-sized TCP segment it will be split into two segments and + * transmitted separately. This function should be called instead of + * the actual device driver output function, or the uip_fw_output() + * function. + * + * The headers of the outgoing packet is assumed to be in the uip_buf + * buffer and the payload is assumed to be wherever uip_appdata + * points. The length of the outgoing packet is assumed to be in the + * uip_len variable. + * + */ +void uip_split_output(void); + +#endif /* __UIP_SPLIT_H__ */ + +/** @} */ +/** @} */ diff --git a/components/net/uip/uip/uip.c b/components/net/uip/uip/uip.c new file mode 100644 index 0000000000000000000000000000000000000000..d315744e892280c030cffec7796949968b9ae92a --- /dev/null +++ b/components/net/uip/uip/uip.c @@ -0,0 +1,1903 @@ +#ifdef RT_UIP_DBUG_RPINTF +#define DEBUG_PRINTF(...) rt_kprintf(__VA_ARGS__) +#else +#define DEBUG_PRINTF(...) /*printf(__VA_ARGS__)*/ +#endif + + +/** + * \defgroup uip The uIP TCP/IP stack + * @{ + * + * uIP is an implementation of the TCP/IP protocol stack intended for + * small 8-bit and 16-bit microcontrollers. + * + * uIP provides the necessary protocols for Internet communication, + * with a very small code footprint and RAM requirements - the uIP + * code size is on the order of a few kilobytes and RAM usage is on + * the order of a few hundred bytes. + */ + +/** + * \file + * The uIP TCP/IP stack code. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: uip.c,v 1.65 2006/06/11 21:46:39 adam Exp $ + * + */ + +/* + * uIP is a small implementation of the IP, UDP and TCP protocols (as + * well as some basic ICMP stuff). The implementation couples the IP, + * UDP, TCP and the application layers very tightly. To keep the size + * of the compiled code down, this code frequently uses the goto + * statement. While it would be possible to break the uip_process() + * function into many smaller functions, this would increase the code + * size because of the overhead of parameter passing and the fact that + * the optimier would not be as efficient. + * + * The principle is that we have a small buffer, called the uip_buf, + * in which the device driver puts an incoming packet. The TCP/IP + * stack parses the headers in the packet, and calls the + * application. If the remote host has sent data to the application, + * this data is present in the uip_buf and the application read the + * data from there. It is up to the application to put this data into + * a byte stream if needed. The application will not be fed with data + * that is out of sequence. + * + * If the application whishes to send data to the peer, it should put + * its data into the uip_buf. The uip_appdata pointer points to the + * first available byte. The TCP/IP stack will calculate the + * checksums, and fill in the necessary header fields and finally send + * the packet back to the peer. +*/ + +#include "uip.h" +#include "uipopt.h" +#include "uip_arch.h" + +#if UIP_CONF_IPV6 +#include "uip-neighbor.h" +#endif /* UIP_CONF_IPV6 */ + +#include + +/*---------------------------------------------------------------------------*/ +/* Variable definitions. */ + + +/* The IP address of this host. If it is defined to be fixed (by + setting UIP_FIXEDADDR to 1 in uipopt.h), the address is set + here. Otherwise, the address */ +#if UIP_FIXEDADDR > 0 +const uip_ipaddr_t uip_hostaddr = + {HTONS((UIP_IPADDR0 << 8) | UIP_IPADDR1), + HTONS((UIP_IPADDR2 << 8) | UIP_IPADDR3)}; +const uip_ipaddr_t uip_draddr = + {HTONS((UIP_DRIPADDR0 << 8) | UIP_DRIPADDR1), + HTONS((UIP_DRIPADDR2 << 8) | UIP_DRIPADDR3)}; +const uip_ipaddr_t uip_netmask = + {HTONS((UIP_NETMASK0 << 8) | UIP_NETMASK1), + HTONS((UIP_NETMASK2 << 8) | UIP_NETMASK3)}; +#else +uip_ipaddr_t uip_hostaddr, uip_draddr, uip_netmask; +#endif /* UIP_FIXEDADDR */ + +static const uip_ipaddr_t all_ones_addr = +#if UIP_CONF_IPV6 + {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}; +#else /* UIP_CONF_IPV6 */ + {0xffff,0xffff}; +#endif /* UIP_CONF_IPV6 */ +static const uip_ipaddr_t all_zeroes_addr = +#if UIP_CONF_IPV6 + {0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000}; +#else /* UIP_CONF_IPV6 */ + {0x0000,0x0000}; +#endif /* UIP_CONF_IPV6 */ + + +#if UIP_FIXEDETHADDR +const struct uip_eth_addr uip_ethaddr = {{UIP_ETHADDR0, + UIP_ETHADDR1, + UIP_ETHADDR2, + UIP_ETHADDR3, + UIP_ETHADDR4, + UIP_ETHADDR5}}; +#else +struct uip_eth_addr uip_ethaddr = {{0,0x33,0x44,0x55,0x66,0x77}}; +#endif + +#ifndef UIP_CONF_EXTERNAL_BUFFER +u8_t uip_buf[UIP_BUFSIZE + 2]; /* The packet buffer that contains + incoming packets. */ +#endif /* UIP_CONF_EXTERNAL_BUFFER */ + +volatile u8_t *uip_appdata; /* The uip_appdata pointer points to + application data. */ +volatile u8_t *uip_sappdata; /* The uip_appdata pointer points to + the application data which is to + be sent. */ +#if UIP_URGDATA > 0 +void *uip_urgdata; /* The uip_urgdata pointer points to + urgent data (out-of-band data), if + present. */ +u16_t uip_urglen, uip_surglen; +#endif /* UIP_URGDATA > 0 */ + +u16_t uip_len, uip_slen; + /* The uip_len is either 8 or 16 bits, + depending on the maximum packet + size. */ + +u8_t uip_flags; /* The uip_flags variable is used for + communication between the TCP/IP stack + and the application program. */ +struct uip_conn *uip_conn; /* uip_conn always points to the current + connection. */ + +struct uip_conn uip_conns[UIP_CONNS]; + /* The uip_conns array holds all TCP + connections. */ +u16_t uip_listenports[UIP_LISTENPORTS]; + /* The uip_listenports list all currently + listning ports. */ +#if UIP_UDP +struct uip_udp_conn *uip_udp_conn; +struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS]; +#endif /* UIP_UDP */ + +static u16_t ipid; /* Ths ipid variable is an increasing + number that is used for the IP ID + field. */ + +void uip_setipid(u16_t id) { ipid = id; } + +static u8_t iss[4]; /* The iss variable is used for the TCP + initial sequence number. */ + +#if UIP_ACTIVE_OPEN +static u16_t lastport; /* Keeps track of the last port used for + a new connection. */ +#endif /* UIP_ACTIVE_OPEN */ + +/* Temporary variables. */ +u8_t uip_acc32[4]; +static u8_t c, opt; +static u16_t tmp16; + +/* Structures and definitions. */ +#define TCP_FIN 0x01 +#define TCP_SYN 0x02 +#define TCP_RST 0x04 +#define TCP_PSH 0x08 +#define TCP_ACK 0x10 +#define TCP_URG 0x20 +#define TCP_CTL 0x3f + +#define TCP_OPT_END 0 /* End of TCP options list */ +#define TCP_OPT_NOOP 1 /* "No-operation" TCP option */ +#define TCP_OPT_MSS 2 /* Maximum segment size TCP option */ + +#define TCP_OPT_MSS_LEN 4 /* Length of TCP MSS option. */ + +#define ICMP_ECHO_REPLY 0 +#define ICMP_ECHO 8 + +#define ICMP6_ECHO_REPLY 129 +#define ICMP6_ECHO 128 +#define ICMP6_NEIGHBOR_SOLICITATION 135 +#define ICMP6_NEIGHBOR_ADVERTISEMENT 136 + +#define ICMP6_FLAG_S (1 << 6) + +#define ICMP6_OPTION_SOURCE_LINK_ADDRESS 1 +#define ICMP6_OPTION_TARGET_LINK_ADDRESS 2 + + +/* Macros. */ +#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) +#define FBUF ((struct uip_tcpip_hdr *)&uip_reassbuf[0]) +#define ICMPBUF ((struct uip_icmpip_hdr *)&uip_buf[UIP_LLH_LEN]) +#define UDPBUF ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN]) + + +#if UIP_STATISTICS == 1 +struct uip_stats uip_stat; +#define UIP_STAT(s) s +#else +#define UIP_STAT(s) +#endif /* UIP_STATISTICS == 1 */ + +#if UIP_LOGGING == 1 +#include +void uip_log(char *msg); +#define UIP_LOG(m) uip_log(m) +#else +#define UIP_LOG(m) +#endif /* UIP_LOGGING == 1 */ + +#if ! UIP_ARCH_ADD32 +void +uip_add32(u8_t *op32, u16_t op16) +{ + uip_acc32[3] = op32[3] + (op16 & 0xff); + uip_acc32[2] = op32[2] + (op16 >> 8); + uip_acc32[1] = op32[1]; + uip_acc32[0] = op32[0]; + + if(uip_acc32[2] < (op16 >> 8)) { + ++uip_acc32[1]; + if(uip_acc32[1] == 0) { + ++uip_acc32[0]; + } + } + + + if(uip_acc32[3] < (op16 & 0xff)) { + ++uip_acc32[2]; + if(uip_acc32[2] == 0) { + ++uip_acc32[1]; + if(uip_acc32[1] == 0) { + ++uip_acc32[0]; + } + } + } +} + +#endif /* UIP_ARCH_ADD32 */ + +#if ! UIP_ARCH_CHKSUM +/*---------------------------------------------------------------------------*/ +static u16_t +chksum(u16_t sum, const u8_t *data, u16_t len) +{ + u16_t t; + const u8_t *dataptr; + const u8_t *last_byte; + + dataptr = data; + last_byte = data + len - 1; + + while(dataptr < last_byte) { /* At least two more bytes */ + t = (dataptr[0] << 8) + dataptr[1]; + sum += t; + if(sum < t) { + sum++; /* carry */ + } + dataptr += 2; + } + + if(dataptr == last_byte) { + t = (dataptr[0] << 8) + 0; + sum += t; + if(sum < t) { + sum++; /* carry */ + } + } + + /* Return sum in host byte order. */ + return sum; +} +/*---------------------------------------------------------------------------*/ +u16_t +uip_chksum(u16_t *data, u16_t len) +{ + return uip_htons(chksum(0, (u8_t *)data, len)); +} +/*---------------------------------------------------------------------------*/ +#ifndef UIP_ARCH_IPCHKSUM +u16_t +uip_ipchksum(void) +{ + u16_t sum; + + sum = chksum(0, &uip_buf[UIP_LLH_LEN], UIP_IPH_LEN); + DEBUG_PRINTF("uip_ipchksum: sum 0x%04x\n", sum); + return (sum == 0) ? 0xffff : uip_htons(sum); +} +#endif +/*---------------------------------------------------------------------------*/ +static u16_t +upper_layer_chksum(u8_t proto) +{ + u16_t upper_layer_len; + u16_t sum; + +#if UIP_CONF_IPV6 + upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]); +#else /* UIP_CONF_IPV6 */ + upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - UIP_IPH_LEN; +#endif /* UIP_CONF_IPV6 */ + + /* First sum pseudoheader. */ + + /* IP protocol and length fields. This addition cannot carry. */ + sum = upper_layer_len + proto; + /* Sum IP source and destination addresses. */ + sum = chksum(sum, (u8_t *)&BUF->srcipaddr[0], 2 * sizeof(uip_ipaddr_t)); + + /* Sum TCP header and data. */ + sum = chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN], + upper_layer_len); + + return (sum == 0) ? 0xffff : uip_htons(sum); +} +/*---------------------------------------------------------------------------*/ +#if UIP_CONF_IPV6 +u16_t +uip_icmp6chksum(void) +{ + return upper_layer_chksum(UIP_PROTO_ICMP6); + +} +#endif /* UIP_CONF_IPV6 */ +/*---------------------------------------------------------------------------*/ +u16_t +uip_tcpchksum(void) +{ + return upper_layer_chksum(UIP_PROTO_TCP); +} +/*---------------------------------------------------------------------------*/ +#if UIP_UDP_CHECKSUMS +u16_t +uip_udpchksum(void) +{ + //return 0; + return upper_layer_chksum(UIP_PROTO_UDP); +} +#endif /* UIP_UDP_CHECKSUMS */ +#endif /* UIP_ARCH_CHKSUM */ +/*---------------------------------------------------------------------------*/ +void +uip_init(void) +{ + for(c = 0; c < UIP_LISTENPORTS; ++c) { + uip_listenports[c] = 0; + } + for(c = 0; c < UIP_CONNS; ++c) { + uip_conns[c].tcpstateflags = UIP_CLOSED; + } +#if UIP_ACTIVE_OPEN + lastport = 1024; +#endif /* UIP_ACTIVE_OPEN */ + +#if UIP_UDP + for(c = 0; c < UIP_UDP_CONNS; ++c) { + uip_udp_conns[c].lport = 0; + } +#endif /* UIP_UDP */ + + + /* IPv4 initialization. */ +#if UIP_FIXEDADDR == 0 + /* uip_hostaddr[0] = uip_hostaddr[1] = 0;*/ +#endif /* UIP_FIXEDADDR */ + +} +/*---------------------------------------------------------------------------*/ +#if UIP_ACTIVE_OPEN +struct uip_conn * +uip_connect(uip_ipaddr_t *ripaddr, u16_t rport) +{ + register struct uip_conn *conn, *cconn; + + /* Find an unused local port. */ + again: + ++lastport; + + if(lastport >= 32000) { + lastport = 4096; + } + + /* Check if this port is already in use, and if so try to find + another one. */ + for(c = 0; c < UIP_CONNS; ++c) { + conn = &uip_conns[c]; + if(conn->tcpstateflags != UIP_CLOSED && + conn->lport == uip_htons(lastport)) { + goto again; + } + } + + conn = 0; + for(c = 0; c < UIP_CONNS; ++c) { + cconn = &uip_conns[c]; + if(cconn->tcpstateflags == UIP_CLOSED) { + conn = cconn; + break; + } + if(cconn->tcpstateflags == UIP_TIME_WAIT) { + if(conn == 0 || + cconn->timer > conn->timer) { + conn = cconn; + } + } + } + + if(conn == 0) { + return 0; + } + + conn->tcpstateflags = UIP_SYN_SENT; + + conn->snd_nxt[0] = iss[0]; + conn->snd_nxt[1] = iss[1]; + conn->snd_nxt[2] = iss[2]; + conn->snd_nxt[3] = iss[3]; + + conn->initialmss = conn->mss = UIP_TCP_MSS; + + conn->len = 1; /* TCP length of the SYN is one. */ + conn->nrtx = 0; + conn->timer = 1; /* Send the SYN next time around. */ + conn->rto = UIP_RTO; + conn->sa = 0; + conn->sv = 16; /* Initial value of the RTT variance. */ + conn->lport = uip_htons(lastport); + conn->rport = rport; + uip_ipaddr_copy(&conn->ripaddr, ripaddr); + + return conn; +} +#endif /* UIP_ACTIVE_OPEN */ +/*---------------------------------------------------------------------------*/ +#if UIP_UDP +struct uip_udp_conn * +uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport) +{ + register struct uip_udp_conn *conn; + + /* Find an unused local port. */ + again: + ++lastport; + + if(lastport >= 32000) { + lastport = 4096; + } + + for(c = 0; c < UIP_UDP_CONNS; ++c) { + if(uip_udp_conns[c].lport == uip_htons(lastport)) { + goto again; + } + } + + + conn = 0; + for(c = 0; c < UIP_UDP_CONNS; ++c) { + if(uip_udp_conns[c].lport == 0) { + conn = &uip_udp_conns[c]; + break; + } + } + + if(conn == 0) { + return 0; + } + + conn->lport = HTONS(lastport); + conn->rport = rport; + if(ripaddr == NULL) { + memset(conn->ripaddr, 0, sizeof(uip_ipaddr_t)); + } else { + uip_ipaddr_copy(&conn->ripaddr, ripaddr); + } + conn->ttl = UIP_TTL; + + return conn; +} +#endif /* UIP_UDP */ +/*---------------------------------------------------------------------------*/ +void +uip_unlisten(u16_t port) +{ + for(c = 0; c < UIP_LISTENPORTS; ++c) { + if(uip_listenports[c] == port) { + uip_listenports[c] = 0; + return; + } + } +} +/*---------------------------------------------------------------------------*/ +void +uip_listen(u16_t port) +{ + for(c = 0; c < UIP_LISTENPORTS; ++c) { + if(uip_listenports[c] == 0) { + uip_listenports[c] = port; + return; + } + } +} +/*---------------------------------------------------------------------------*/ +/* XXX: IP fragment reassembly: not well-tested. */ + +#if UIP_REASSEMBLY && !UIP_CONF_IPV6 +#define UIP_REASS_BUFSIZE (UIP_BUFSIZE - UIP_LLH_LEN) +static u8_t uip_reassbuf[UIP_REASS_BUFSIZE]; +static u8_t uip_reassbitmap[UIP_REASS_BUFSIZE / (8 * 8)]; +static const u8_t bitmap_bits[8] = {0xff, 0x7f, 0x3f, 0x1f, + 0x0f, 0x07, 0x03, 0x01}; +static u16_t uip_reasslen; +static u8_t uip_reassflags; +#define UIP_REASS_FLAG_LASTFRAG 0x01 +static u8_t uip_reasstmr; + +#define IP_MF 0x20 + +static u8_t +uip_reass(void) +{ + u16_t offset, len; + u16_t i; + + /* If ip_reasstmr is zero, no packet is present in the buffer, so we + write the IP header of the fragment into the reassembly + buffer. The timer is updated with the maximum age. */ + if(uip_reasstmr == 0) { + memcpy(uip_reassbuf, &BUF->vhl, UIP_IPH_LEN); + uip_reasstmr = UIP_REASS_MAXAGE; + uip_reassflags = 0; + /* Clear the bitmap. */ + memset(uip_reassbitmap, 0, sizeof(uip_reassbitmap)); + } + + /* Check if the incoming fragment matches the one currently present + in the reasembly buffer. If so, we proceed with copying the + fragment into the buffer. */ + if(BUF->srcipaddr[0] == FBUF->srcipaddr[0] && + BUF->srcipaddr[1] == FBUF->srcipaddr[1] && + BUF->destipaddr[0] == FBUF->destipaddr[0] && + BUF->destipaddr[1] == FBUF->destipaddr[1] && + BUF->ipid[0] == FBUF->ipid[0] && + BUF->ipid[1] == FBUF->ipid[1]) { + + len = (BUF->len[0] << 8) + BUF->len[1] - (BUF->vhl & 0x0f) * 4; + offset = (((BUF->ipoffset[0] & 0x3f) << 8) + BUF->ipoffset[1]) * 8; + + /* If the offset or the offset + fragment length overflows the + reassembly buffer, we discard the entire packet. */ + if(offset > UIP_REASS_BUFSIZE || + offset + len > UIP_REASS_BUFSIZE) { + uip_reasstmr = 0; + goto nullreturn; + } + + /* Copy the fragment into the reassembly buffer, at the right + offset. */ + memcpy(&uip_reassbuf[UIP_IPH_LEN + offset], + (char *)BUF + (int)((BUF->vhl & 0x0f) * 4), + len); + + /* Update the bitmap. */ + if(offset / (8 * 8) == (offset + len) / (8 * 8)) { + /* If the two endpoints are in the same byte, we only update + that byte. */ + + uip_reassbitmap[offset / (8 * 8)] |= + bitmap_bits[(offset / 8 ) & 7] & + ~bitmap_bits[((offset + len) / 8 ) & 7]; + } else { + /* If the two endpoints are in different bytes, we update the + bytes in the endpoints and fill the stuff inbetween with + 0xff. */ + uip_reassbitmap[offset / (8 * 8)] |= + bitmap_bits[(offset / 8 ) & 7]; + for(i = 1 + offset / (8 * 8); i < (offset + len) / (8 * 8); ++i) { + uip_reassbitmap[i] = 0xff; + } + uip_reassbitmap[(offset + len) / (8 * 8)] |= + ~bitmap_bits[((offset + len) / 8 ) & 7]; + } + + /* If this fragment has the More Fragments flag set to zero, we + know that this is the last fragment, so we can calculate the + size of the entire packet. We also set the + IP_REASS_FLAG_LASTFRAG flag to indicate that we have received + the final fragment. */ + + if((BUF->ipoffset[0] & IP_MF) == 0) { + uip_reassflags |= UIP_REASS_FLAG_LASTFRAG; + uip_reasslen = offset + len; + } + + /* Finally, we check if we have a full packet in the buffer. We do + this by checking if we have the last fragment and if all bits + in the bitmap are set. */ + if(uip_reassflags & UIP_REASS_FLAG_LASTFRAG) { + /* Check all bytes up to and including all but the last byte in + the bitmap. */ + for(i = 0; i < uip_reasslen / (8 * 8) - 1; ++i) { + if(uip_reassbitmap[i] != 0xff) { + goto nullreturn; + } + } + /* Check the last byte in the bitmap. It should contain just the + right amount of bits. */ + if(uip_reassbitmap[uip_reasslen / (8 * 8)] != + (u8_t)~bitmap_bits[uip_reasslen / 8 & 7]) { + goto nullreturn; + } + + /* If we have come this far, we have a full packet in the + buffer, so we allocate a pbuf and copy the packet into it. We + also reset the timer. */ + uip_reasstmr = 0; + memcpy(BUF, FBUF, uip_reasslen); + + /* Pretend to be a "normal" (i.e., not fragmented) IP packet + from now on. */ + BUF->ipoffset[0] = BUF->ipoffset[1] = 0; + BUF->len[0] = uip_reasslen >> 8; + BUF->len[1] = uip_reasslen & 0xff; + BUF->ipchksum = 0; + BUF->ipchksum = ~(uip_ipchksum()); + + return uip_reasslen; + } + } + + nullreturn: + return 0; +} +#endif /* UIP_REASSEMBLY */ +/*---------------------------------------------------------------------------*/ +static void +uip_add_rcv_nxt(u16_t n) +{ + uip_add32(uip_conn->rcv_nxt, n); + uip_conn->rcv_nxt[0] = uip_acc32[0]; + uip_conn->rcv_nxt[1] = uip_acc32[1]; + uip_conn->rcv_nxt[2] = uip_acc32[2]; + uip_conn->rcv_nxt[3] = uip_acc32[3]; +} +/*---------------------------------------------------------------------------*/ +void +uip_process(u8_t flag) +{ + register struct uip_conn *uip_connr = uip_conn; + +#if UIP_UDP + if(flag == UIP_UDP_SEND_CONN) { + goto udp_send; + } +#endif /* UIP_UDP */ + + uip_sappdata = uip_appdata = &uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN]; + + /* Check if we were invoked because of a poll request for a + particular connection. */ + if(flag == UIP_POLL_REQUEST) { //告诉uIP,有一个连接必须不断被轮询 + if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED && + !uip_outstanding(uip_connr)) { + uip_flags = UIP_POLL; + UIP_APPCALL(); + goto appsend; + } + goto drop; + + /* Check if we were invoked because of the perodic timer fireing. */ + } else if(flag == UIP_TIMER) { +#if UIP_REASSEMBLY + if(uip_reasstmr != 0) { + --uip_reasstmr; + } +#endif /* UIP_REASSEMBLY */ + /* Increase the initial sequence number. */ + if(++iss[3] == 0) { + if(++iss[2] == 0) { + if(++iss[1] == 0) { + ++iss[0]; + } + } + } + + /* Reset the length variables. */ + uip_len = 0; + uip_slen = 0; + + /* Check if the connection is in a state in which we simply wait + for the connection to time out. If so, we increase the + connection's timer and remove the connection if it times + out. */ + if(uip_connr->tcpstateflags == UIP_TIME_WAIT || + uip_connr->tcpstateflags == UIP_FIN_WAIT_2) { + ++(uip_connr->timer); + if(uip_connr->timer == UIP_TIME_WAIT_TIMEOUT) { + uip_connr->tcpstateflags = UIP_CLOSED; + } + } else if(uip_connr->tcpstateflags != UIP_CLOSED) {//如果连接没有被关闭,则看有无数据需要发送 + /* If the connection has outstanding data, we increase the + connection's timer and see if it has reached the RTO value + in which case we retransmit. */ + if(uip_outstanding(uip_connr)) {//如果有数据需要发送 + if(uip_connr->timer-- == 0) { + if(uip_connr->nrtx == UIP_MAXRTX || + ((uip_connr->tcpstateflags == UIP_SYN_SENT || + uip_connr->tcpstateflags == UIP_SYN_RCVD) && + uip_connr->nrtx == UIP_MAXSYNRTX)) { + uip_connr->tcpstateflags = UIP_CLOSED; + + /* We call UIP_APPCALL() with uip_flags set to + UIP_TIMEDOUT to inform the application that the + connection has timed out. */ + uip_flags = UIP_TIMEDOUT; + UIP_APPCALL(); + + /* We also send a reset packet to the remote host. */ + BUF->flags = TCP_RST | TCP_ACK; + goto tcp_send_nodata; + } + + /* Exponential backoff. */ + uip_connr->timer = UIP_RTO << (uip_connr->nrtx > 4? + 4: + uip_connr->nrtx); + ++(uip_connr->nrtx); + + /* Ok, so we need to retransmit. We do this differently + depending on which state we are in. In ESTABLISHED, we + call upon the application so that it may prepare the + data for the retransmit. In SYN_RCVD, we resend the + SYNACK that we sent earlier and in LAST_ACK we have to + retransmit our FINACK. */ + UIP_STAT(++uip_stat.tcp.rexmit); + switch(uip_connr->tcpstateflags & UIP_TS_MASK) { + case UIP_SYN_RCVD: + /* In the SYN_RCVD state, we should retransmit our + SYNACK. */ + goto tcp_send_synack; + +#if UIP_ACTIVE_OPEN + case UIP_SYN_SENT: //需要发送同步字 + /* In the SYN_SENT state, we retransmit out SYN. */ + BUF->flags = 0; + goto tcp_send_syn; +#endif /* UIP_ACTIVE_OPEN */ + + case UIP_ESTABLISHED: + /* In the ESTABLISHED state, we call upon the application + to do the actual retransmit after which we jump into + the code for sending out the packet (the apprexmit + label). */ + uip_flags = UIP_REXMIT; + UIP_APPCALL(); + goto apprexmit; + + case UIP_FIN_WAIT_1: + case UIP_CLOSING: + case UIP_LAST_ACK: + /* In all these states we should retransmit a FINACK. */ + goto tcp_send_finack; + + } + } + } else if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED) { //如果建立了连接 + /* If there was no need for a retransmission, we poll the + application for new data. */ + uip_flags = UIP_POLL; //这里设置不断被轮询的标志 + UIP_APPCALL(); + goto appsend; + } + } + goto drop; + } +#if UIP_UDP + if(flag == UIP_UDP_TIMER) { + if(uip_udp_conn->lport != 0) { + uip_conn = NULL; + uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN]; + uip_len = uip_slen = 0; + uip_flags = UIP_POLL; + UIP_UDP_APPCALL(); + goto udp_send; + } else { + goto drop; + } + } +#endif +//如果收到IP包,则从这里开始 + /* This is where the input processing starts. */ + UIP_STAT(++uip_stat.ip.recv); + + /* Start of IP input header processing code. */ + +#if UIP_CONF_IPV6 + /* Check validity of the IP header. */ + if((BUF->vtc & 0xf0) != 0x60) { /* IP version and header length. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.vhlerr); + UIP_LOG("ipv6: invalid version."); + goto drop; + } +#else /* UIP_CONF_IPV6 */ + /* Check validity of the IP header. */ + if(BUF->vhl != 0x45) { /* IP version and header length. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.vhlerr); + UIP_LOG("ip: invalid version or header length."); + goto drop; + } +#endif /* UIP_CONF_IPV6 */ + + /* Check the size of the packet. If the size reported to us in + uip_len is smaller the size reported in the IP header, we assume + that the packet has been corrupted in transit. If the size of + uip_len is larger than the size reported in the IP packet header, + the packet has been padded and we set uip_len to the correct + value.. */ + + if((BUF->len[0] << 8) + BUF->len[1] <= uip_len) { + uip_len = (BUF->len[0] << 8) + BUF->len[1]; +#if UIP_CONF_IPV6 + uip_len += 40; /* The length reported in the IPv6 header is the + length of the payload that follows the + header. However, uIP uses the uip_len variable + for holding the size of the entire packet, + including the IP header. For IPv4 this is not a + problem as the length field in the IPv4 header + contains the length of the entire packet. But + for IPv6 we need to add the size of the IPv6 + header (40 bytes). */ +#endif /* UIP_CONF_IPV6 */ + } else { + UIP_LOG("ip: packet shorter than reported in IP header."); + goto drop; + } + +#if !UIP_CONF_IPV6 + /* Check the fragment flag. */ + if((BUF->ipoffset[0] & 0x3f) != 0 || + BUF->ipoffset[1] != 0) { +#if UIP_REASSEMBLY + uip_len = uip_reass(); + if(uip_len == 0) { + goto drop; + } +#else /* UIP_REASSEMBLY */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.fragerr); + UIP_LOG("ip: fragment dropped."); + goto drop; +#endif /* UIP_REASSEMBLY */ + } +#endif /* UIP_CONF_IPV6 */ + + if(uip_ipaddr_cmp(uip_hostaddr, all_zeroes_addr)) { + /* If we are configured to use ping IP address configuration and + hasn't been assigned an IP address yet, we accept all ICMP + packets. */ +#if UIP_PINGADDRCONF && !UIP_CONF_IPV6 + if(BUF->proto == UIP_PROTO_ICMP) { + UIP_LOG("ip: possible ping config packet received."); + goto icmp_input; + } else { + UIP_LOG("ip: packet dropped since no address assigned."); + goto drop; + } +#endif /* UIP_PINGADDRCONF */ + + } else { + /* If IP broadcast support is configured, we check for a broadcast + UDP packet, which may be destined to us. */ +#if UIP_BROADCAST + DEBUG_PRINTF("UDP IP checksum 0x%04x\n", uip_ipchksum()); + if(BUF->proto == UIP_PROTO_UDP && + uip_ipaddr_cmp(BUF->destipaddr, all_ones_addr) + /*&& + uip_ipchksum() == 0xffff*/) { + goto udp_input; + } +#endif /* UIP_BROADCAST */ + + /* Check if the packet is destined for our IP address. */ +#if !UIP_CONF_IPV6 + if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr)) { + UIP_STAT(++uip_stat.ip.drop); + goto drop; + } +#else /* UIP_CONF_IPV6 */ + /* For IPv6, packet reception is a little trickier as we need to + make sure that we listen to certain multicast addresses (all + hosts multicast address, and the solicited-node multicast + address) as well. However, we will cheat here and accept all + multicast packets that are sent to the ff02::/16 addresses. */ + if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr) && + BUF->destipaddr[0] != HTONS(0xff02)) { + UIP_STAT(++uip_stat.ip.drop); + goto drop; + } +#endif /* UIP_CONF_IPV6 */ + } + +#if !UIP_CONF_IPV6 + if(uip_ipchksum() != 0xffff) { /* Compute and check the IP header + checksum. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.chkerr); + UIP_LOG("ip: bad checksum."); + goto drop; + } +#endif /* UIP_CONF_IPV6 */ + + if(BUF->proto == UIP_PROTO_TCP) { /* Check for TCP packet. If so, + proceed with TCP input + processing. */ + goto tcp_input; + } + +#if UIP_UDP + if(BUF->proto == UIP_PROTO_UDP) { + goto udp_input; + } +#endif /* UIP_UDP */ + +#if !UIP_CONF_IPV6 + /* ICMPv4 processing code follows. */ + if(BUF->proto != UIP_PROTO_ICMP) { /* We only allow ICMP packets from + here. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.protoerr); + UIP_LOG("ip: neither tcp nor icmp."); + goto drop; + } + +#if UIP_PINGADDRCONF + icmp_input: +#endif /* UIP_PINGADDRCONF */ + UIP_STAT(++uip_stat.icmp.recv); + + /* ICMP echo (i.e., ping) processing. This is simple, we only change + the ICMP type from ECHO to ECHO_REPLY and adjust the ICMP + checksum before we return the packet. */ + if(ICMPBUF->type != ICMP_ECHO) { + UIP_STAT(++uip_stat.icmp.drop); + UIP_STAT(++uip_stat.icmp.typeerr); + UIP_LOG("icmp: not icmp echo."); + goto drop; + } + + /* If we are configured to use ping IP address assignment, we use + the destination IP address of this ping packet and assign it to + ourself. */ +#if UIP_PINGADDRCONF + if((uip_hostaddr[0] | uip_hostaddr[1]) == 0) { + uip_hostaddr[0] = BUF->destipaddr[0]; + uip_hostaddr[1] = BUF->destipaddr[1]; + } +#endif /* UIP_PINGADDRCONF */ + + ICMPBUF->type = ICMP_ECHO_REPLY; + + if(ICMPBUF->icmpchksum >= HTONS(0xffff - (ICMP_ECHO << 8))) { + ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8) + 1; + } else { + ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8); + } + + /* Swap IP addresses. */ + uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + + UIP_STAT(++uip_stat.icmp.sent); + goto send; + + /* End of IPv4 input header processing code. */ +#else /* !UIP_CONF_IPV6 */ + + /* This is IPv6 ICMPv6 processing code. */ + DEBUG_PRINTF("icmp6_input: length %d\n", uip_len); + + if(BUF->proto != UIP_PROTO_ICMP6) { /* We only allow ICMPv6 packets from + here. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.protoerr); + UIP_LOG("ip: neither tcp nor icmp6."); + goto drop; + } + + UIP_STAT(++uip_stat.icmp.recv); + + /* If we get a neighbor solicitation for our address we should send + a neighbor advertisement message back. */ + if(ICMPBUF->type == ICMP6_NEIGHBOR_SOLICITATION) { + if(uip_ipaddr_cmp(ICMPBUF->icmp6data, uip_hostaddr)) { + + if(ICMPBUF->options[0] == ICMP6_OPTION_SOURCE_LINK_ADDRESS) { + /* Save the sender's address in our neighbor list. */ + uip_neighbor_add(ICMPBUF->srcipaddr, &(ICMPBUF->options[2])); + } + + /* We should now send a neighbor advertisement back to where the + neighbor solicication came from. */ + ICMPBUF->type = ICMP6_NEIGHBOR_ADVERTISEMENT; + ICMPBUF->flags = ICMP6_FLAG_S; /* Solicited flag. */ + + ICMPBUF->reserved1 = ICMPBUF->reserved2 = ICMPBUF->reserved3 = 0; + + uip_ipaddr_copy(ICMPBUF->destipaddr, ICMPBUF->srcipaddr); + uip_ipaddr_copy(ICMPBUF->srcipaddr, uip_hostaddr); + ICMPBUF->options[0] = ICMP6_OPTION_TARGET_LINK_ADDRESS; + ICMPBUF->options[1] = 1; /* Options length, 1 = 8 bytes. */ + memcpy(&(ICMPBUF->options[2]), &uip_ethaddr, sizeof(uip_ethaddr)); + ICMPBUF->icmpchksum = 0; + ICMPBUF->icmpchksum = ~uip_icmp6chksum(); + goto send; + + } + goto drop; + } else if(ICMPBUF->type == ICMP6_ECHO) { + /* ICMP echo (i.e., ping) processing. This is simple, we only + change the ICMP type from ECHO to ECHO_REPLY and update the + ICMP checksum before we return the packet. */ + + ICMPBUF->type = ICMP6_ECHO_REPLY; + + uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + ICMPBUF->icmpchksum = 0; + ICMPBUF->icmpchksum = ~uip_icmp6chksum(); + + UIP_STAT(++uip_stat.icmp.sent); + goto send; + } else { + DEBUG_PRINTF("Unknown icmp6 message type %d\n", ICMPBUF->type); + UIP_STAT(++uip_stat.icmp.drop); + UIP_STAT(++uip_stat.icmp.typeerr); + UIP_LOG("icmp: unknown ICMP message."); + goto drop; + } + + /* End of IPv6 ICMP processing. */ + +#endif /* !UIP_CONF_IPV6 */ + +#if UIP_UDP + /* UDP input processing. */ + udp_input: + /* UDP processing is really just a hack. We don't do anything to the + UDP/IP headers, but let the UDP application do all the hard + work. If the application sets uip_slen, it has a packet to + send. */ +#if UIP_UDP_CHECKSUMS + uip_len = uip_len - UIP_IPUDPH_LEN; + uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN]; + if(UDPBUF->udpchksum != 0 && uip_udpchksum() != 0xffff) { + UIP_STAT(++uip_stat.udp.drop); + UIP_STAT(++uip_stat.udp.chkerr); + UIP_LOG("udp: bad checksum."); + goto drop; + } +#else /* UIP_UDP_CHECKSUMS */ + uip_len = uip_len - UIP_IPUDPH_LEN; +#endif /* UIP_UDP_CHECKSUMS */ + + /* Demultiplex this UDP packet between the UDP "connections". */ + for(uip_udp_conn = &uip_udp_conns[0]; + uip_udp_conn < &uip_udp_conns[UIP_UDP_CONNS]; + ++uip_udp_conn) { + /* If the local UDP port is non-zero, the connection is considered + to be used. If so, the local port number is checked against the + destination port number in the received packet. If the two port + numbers match, the remote port number is checked if the + connection is bound to a remote port. Finally, if the + connection is bound to a remote IP address, the source IP + address of the packet is checked. */ + if(uip_udp_conn->lport != 0 && + UDPBUF->destport == uip_udp_conn->lport && + (uip_udp_conn->rport == 0 || + UDPBUF->srcport == uip_udp_conn->rport) && + (uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_zeroes_addr) || + uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_ones_addr) || + uip_ipaddr_cmp(BUF->srcipaddr, uip_udp_conn->ripaddr))) { + goto udp_found; + } + } + UIP_LOG("udp: no matching connection found"); + goto drop; + + udp_found: + uip_conn = NULL; + uip_flags = UIP_NEWDATA; + uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN]; + uip_slen = 0; + UIP_UDP_APPCALL(); + udp_send: + if(uip_slen == 0) { + goto drop; + } + uip_len = uip_slen + UIP_IPUDPH_LEN; + +#if UIP_CONF_IPV6 + /* For IPv6, the IP length field does not include the IPv6 IP header + length. */ + BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8); + BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff); +#else /* UIP_CONF_IPV6 */ + BUF->len[0] = (uip_len >> 8); + BUF->len[1] = (uip_len & 0xff); +#endif /* UIP_CONF_IPV6 */ + + BUF->ttl = uip_udp_conn->ttl; + BUF->proto = UIP_PROTO_UDP; + + UDPBUF->udplen = HTONS(uip_slen + UIP_UDPH_LEN); + UDPBUF->udpchksum = 0; + + BUF->srcport = uip_udp_conn->lport; + BUF->destport = uip_udp_conn->rport; + + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + uip_ipaddr_copy(BUF->destipaddr, uip_udp_conn->ripaddr); + + uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPTCPH_LEN]; + +#if UIP_UDP_CHECKSUMS + /* Calculate UDP checksum. */ + UDPBUF->udpchksum = ~(uip_udpchksum()); + if(UDPBUF->udpchksum == 0) { + UDPBUF->udpchksum = 0xffff; + } +#endif /* UIP_UDP_CHECKSUMS */ + + goto ip_send_nolen; +#endif /* UIP_UDP */ + + /* TCP input processing. */ + tcp_input: + UIP_STAT(++uip_stat.tcp.recv); + + /* Start of TCP input header processing code. */ + + if(uip_tcpchksum() != 0xffff) { /* Compute and check the TCP + checksum. */ + UIP_STAT(++uip_stat.tcp.drop); + UIP_STAT(++uip_stat.tcp.chkerr); + UIP_LOG("tcp: bad checksum."); + goto drop; + } + + + /* Demultiplex this segment. */ + /* First check any active connections. */ + for(uip_connr = &uip_conns[0]; uip_connr <= &uip_conns[UIP_CONNS - 1]; + ++uip_connr) { + if(uip_connr->tcpstateflags != UIP_CLOSED && + BUF->destport == uip_connr->lport && + BUF->srcport == uip_connr->rport && + uip_ipaddr_cmp(BUF->srcipaddr, uip_connr->ripaddr)) { + goto found; + } + } + + /* If we didn't find and active connection that expected the packet, + either this packet is an old duplicate, or this is a SYN packet + destined for a connection in LISTEN. If the SYN flag isn't set, + it is an old packet and we send a RST. */ + if((BUF->flags & TCP_CTL) != TCP_SYN) { + goto reset; + } + + tmp16 = BUF->destport; + /* Next, check listening connections. */ + for(c = 0; c < UIP_LISTENPORTS; ++c) { + if(tmp16 == uip_listenports[c]) + goto found_listen; + } + + /* No matching connection found, so we send a RST packet. */ + UIP_STAT(++uip_stat.tcp.synrst); + reset: + + /* We do not send resets in response to resets. */ + if(BUF->flags & TCP_RST) { + goto drop; + } + + UIP_STAT(++uip_stat.tcp.rst); + + BUF->flags = TCP_RST | TCP_ACK; + uip_len = UIP_IPTCPH_LEN; + BUF->tcpoffset = 5 << 4; + + /* Flip the seqno and ackno fields in the TCP header. */ + c = BUF->seqno[3]; + BUF->seqno[3] = BUF->ackno[3]; + BUF->ackno[3] = c; + + c = BUF->seqno[2]; + BUF->seqno[2] = BUF->ackno[2]; + BUF->ackno[2] = c; + + c = BUF->seqno[1]; + BUF->seqno[1] = BUF->ackno[1]; + BUF->ackno[1] = c; + + c = BUF->seqno[0]; + BUF->seqno[0] = BUF->ackno[0]; + BUF->ackno[0] = c; + + /* We also have to increase the sequence number we are + acknowledging. If the least significant byte overflowed, we need + to propagate the carry to the other bytes as well. */ + if(++BUF->ackno[3] == 0) { + if(++BUF->ackno[2] == 0) { + if(++BUF->ackno[1] == 0) { + ++BUF->ackno[0]; + } + } + } + + /* Swap port numbers. */ + tmp16 = BUF->srcport; + BUF->srcport = BUF->destport; + BUF->destport = tmp16; + + /* Swap IP addresses. */ + uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + + /* And send out the RST packet! */ + goto tcp_send_noconn; + + /* This label will be jumped to if we matched the incoming packet + with a connection in LISTEN. In that case, we should create a new + connection and send a SYNACK in return. */ + found_listen: + /* First we check if there are any connections avaliable. Unused + connections are kept in the same table as used connections, but + unused ones have the tcpstate set to CLOSED. Also, connections in + TIME_WAIT are kept track of and we'll use the oldest one if no + CLOSED connections are found. Thanks to Eddie C. Dost for a very + nice algorithm for the TIME_WAIT search. */ + uip_connr = 0; + for(c = 0; c < UIP_CONNS; ++c) { + if(uip_conns[c].tcpstateflags == UIP_CLOSED) { + uip_connr = &uip_conns[c]; + break; + } + if(uip_conns[c].tcpstateflags == UIP_TIME_WAIT) { + if(uip_connr == 0 || + uip_conns[c].timer > uip_connr->timer) { + uip_connr = &uip_conns[c]; + } + } + } + + if(uip_connr == 0) { + /* All connections are used already, we drop packet and hope that + the remote end will retransmit the packet at a time when we + have more spare connections. */ + UIP_STAT(++uip_stat.tcp.syndrop); + UIP_LOG("tcp: found no unused connections."); + goto drop; + } + uip_conn = uip_connr; + + /* Fill in the necessary fields for the new connection. */ + uip_connr->rto = uip_connr->timer = UIP_RTO; + uip_connr->sa = 0; + uip_connr->sv = 4; + uip_connr->nrtx = 0; + uip_connr->lport = BUF->destport; + uip_connr->rport = BUF->srcport; + uip_ipaddr_copy(uip_connr->ripaddr, BUF->srcipaddr); + uip_connr->tcpstateflags = UIP_SYN_RCVD; + + uip_connr->snd_nxt[0] = iss[0]; + uip_connr->snd_nxt[1] = iss[1]; + uip_connr->snd_nxt[2] = iss[2]; + uip_connr->snd_nxt[3] = iss[3]; + uip_connr->len = 1; + + /* rcv_nxt should be the seqno from the incoming packet + 1. */ + uip_connr->rcv_nxt[3] = BUF->seqno[3]; + uip_connr->rcv_nxt[2] = BUF->seqno[2]; + uip_connr->rcv_nxt[1] = BUF->seqno[1]; + uip_connr->rcv_nxt[0] = BUF->seqno[0]; + uip_add_rcv_nxt(1); + + /* Parse the TCP MSS option, if present. */ + if((BUF->tcpoffset & 0xf0) > 0x50) { + for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) { + opt = uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + c]; + if(opt == TCP_OPT_END) { + /* End of options. */ + break; + } else if(opt == TCP_OPT_NOOP) { + ++c; + /* NOP option. */ + } else if(opt == TCP_OPT_MSS && + uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) { + /* An MSS option with the right option length. */ + tmp16 = ((u16_t)uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) | + (u16_t)uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + 3 + c]; + uip_connr->initialmss = uip_connr->mss = + tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16; + + /* And we are done processing options. */ + break; + } else { + /* All other options have a length field, so that we easily + can skip past them. */ + if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) { + /* If the length field is zero, the options are malformed + and we don't process them further. */ + break; + } + c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c]; + } + } + } + + /* Our response will be a SYNACK. */ +#if UIP_ACTIVE_OPEN + tcp_send_synack: + BUF->flags = TCP_ACK; + + tcp_send_syn: + BUF->flags |= TCP_SYN; +#else /* UIP_ACTIVE_OPEN */ + tcp_send_synack: + BUF->flags = TCP_SYN | TCP_ACK; +#endif /* UIP_ACTIVE_OPEN */ + + /* We send out the TCP Maximum Segment Size option with our + SYNACK. */ + BUF->optdata[0] = TCP_OPT_MSS; + BUF->optdata[1] = TCP_OPT_MSS_LEN; + BUF->optdata[2] = (UIP_TCP_MSS) / 256; + BUF->optdata[3] = (UIP_TCP_MSS) & 255; + uip_len = UIP_IPTCPH_LEN + TCP_OPT_MSS_LEN; + BUF->tcpoffset = ((UIP_TCPH_LEN + TCP_OPT_MSS_LEN) / 4) << 4; + goto tcp_send; + + /* This label will be jumped to if we found an active connection. */ + found: + uip_conn = uip_connr; + uip_flags = 0; + /* We do a very naive form of TCP reset processing; we just accept + any RST and kill our connection. We should in fact check if the + sequence number of this reset is wihtin our advertised window + before we accept the reset. */ + if(BUF->flags & TCP_RST) { + uip_connr->tcpstateflags = UIP_CLOSED; + UIP_LOG("tcp: got reset, aborting connection."); + uip_flags = UIP_ABORT; + UIP_APPCALL(); + goto drop; + } + /* Calculated the length of the data, if the application has sent + any data to us. */ + c = (BUF->tcpoffset >> 4) << 2; + /* uip_len will contain the length of the actual TCP data. This is + calculated by subtracing the length of the TCP header (in + c) and the length of the IP header (20 bytes). */ + uip_len = uip_len - c - UIP_IPH_LEN; + + /* First, check if the sequence number of the incoming packet is + what we're expecting next. If not, we send out an ACK with the + correct numbers in. */ + if(!(((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_SYN_SENT) && + ((BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)))) { + if((uip_len > 0 || ((BUF->flags & (TCP_SYN | TCP_FIN)) != 0)) && + (BUF->seqno[0] != uip_connr->rcv_nxt[0] || + BUF->seqno[1] != uip_connr->rcv_nxt[1] || + BUF->seqno[2] != uip_connr->rcv_nxt[2] || + BUF->seqno[3] != uip_connr->rcv_nxt[3])) { + goto tcp_send_ack; + } + } + + /* Next, check if the incoming segment acknowledges any outstanding + data. If so, we update the sequence number, reset the length of + the outstanding data, calculate RTT estimations, and reset the + retransmission timer. */ + if((BUF->flags & TCP_ACK) && uip_outstanding(uip_connr)) { + uip_add32(uip_connr->snd_nxt, uip_connr->len); + + if(BUF->ackno[0] == uip_acc32[0] && + BUF->ackno[1] == uip_acc32[1] && + BUF->ackno[2] == uip_acc32[2] && + BUF->ackno[3] == uip_acc32[3]) { + /* Update sequence number. */ + uip_connr->snd_nxt[0] = uip_acc32[0]; + uip_connr->snd_nxt[1] = uip_acc32[1]; + uip_connr->snd_nxt[2] = uip_acc32[2]; + uip_connr->snd_nxt[3] = uip_acc32[3]; + + + /* Do RTT estimation, unless we have done retransmissions. */ + if(uip_connr->nrtx == 0) { + signed char m; + m = uip_connr->rto - uip_connr->timer; + /* This is taken directly from VJs original code in his paper */ + m = m - (uip_connr->sa >> 3); + uip_connr->sa += m; + if(m < 0) { + m = -m; + } + m = m - (uip_connr->sv >> 2); + uip_connr->sv += m; + uip_connr->rto = (uip_connr->sa >> 3) + uip_connr->sv; + + } + /* Set the acknowledged flag. */ + uip_flags = UIP_ACKDATA; + /* Reset the retransmission timer. */ + uip_connr->timer = uip_connr->rto; + + /* Reset length of outstanding data. */ + uip_connr->len = 0; + } + + } + + /* Do different things depending on in what state the connection is. */ + switch(uip_connr->tcpstateflags & UIP_TS_MASK) { + /* CLOSED and LISTEN are not handled here. CLOSE_WAIT is not + implemented, since we force the application to close when the + peer sends a FIN (hence the application goes directly from + ESTABLISHED to LAST_ACK). */ + case UIP_SYN_RCVD: + /* In SYN_RCVD we have sent out a SYNACK in response to a SYN, and + we are waiting for an ACK that acknowledges the data we sent + out the last time. Therefore, we want to have the UIP_ACKDATA + flag set. If so, we enter the ESTABLISHED state. */ + if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_ESTABLISHED; + uip_flags = UIP_CONNECTED; + uip_connr->len = 0; + if(uip_len > 0) { + uip_flags |= UIP_NEWDATA; + uip_add_rcv_nxt(uip_len); + } + uip_slen = 0; + UIP_APPCALL(); + goto appsend; + } + goto drop; +#if UIP_ACTIVE_OPEN + case UIP_SYN_SENT: + /* In SYN_SENT, we wait for a SYNACK that is sent in response to + our SYN. The rcv_nxt is set to sequence number in the SYNACK + plus one, and we send an ACK. We move into the ESTABLISHED + state. */ + if((uip_flags & UIP_ACKDATA) && + (BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)) { + + /* Parse the TCP MSS option, if present. */ + if((BUF->tcpoffset & 0xf0) > 0x50) { + for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) { + opt = uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + c]; + if(opt == TCP_OPT_END) { + /* End of options. */ + break; + } else if(opt == TCP_OPT_NOOP) { + ++c; + /* NOP option. */ + } else if(opt == TCP_OPT_MSS && + uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) { + /* An MSS option with the right option length. */ + tmp16 = (uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) | + uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 3 + c]; + uip_connr->initialmss = + uip_connr->mss = tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16; + + /* And we are done processing options. */ + break; + } else { + /* All other options have a length field, so that we easily + can skip past them. */ + if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) { + /* If the length field is zero, the options are malformed + and we don't process them further. */ + break; + } + c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c]; + } + } + } + uip_connr->tcpstateflags = UIP_ESTABLISHED; + uip_connr->rcv_nxt[0] = BUF->seqno[0]; + uip_connr->rcv_nxt[1] = BUF->seqno[1]; + uip_connr->rcv_nxt[2] = BUF->seqno[2]; + uip_connr->rcv_nxt[3] = BUF->seqno[3]; + uip_add_rcv_nxt(1); + uip_flags = UIP_CONNECTED | UIP_NEWDATA; + uip_connr->len = 0; + uip_len = 0; + uip_slen = 0; + UIP_APPCALL(); + goto appsend; + } + /* Inform the application that the connection failed */ + uip_flags = UIP_ABORT; + UIP_APPCALL(); + /* The connection is closed after we send the RST */ + uip_conn->tcpstateflags = UIP_CLOSED; + goto reset; +#endif /* UIP_ACTIVE_OPEN */ + + case UIP_ESTABLISHED: + /* In the ESTABLISHED state, we call upon the application to feed + data into the uip_buf. If the UIP_ACKDATA flag is set, the + application should put new data into the buffer, otherwise we are + retransmitting an old segment, and the application should put that + data into the buffer. + + If the incoming packet is a FIN, we should close the connection on + this side as well, and we send out a FIN and enter the LAST_ACK + state. We require that there is no outstanding data; otherwise the + sequence numbers will be screwed up. */ + + if(BUF->flags & TCP_FIN && !(uip_connr->tcpstateflags & UIP_STOPPED)) { + if(uip_outstanding(uip_connr)) { + goto drop; + } + uip_add_rcv_nxt(1 + uip_len); + uip_flags |= UIP_CLOSE; + if(uip_len > 0) { + uip_flags |= UIP_NEWDATA; + } + UIP_APPCALL(); + uip_connr->len = 1; + uip_connr->tcpstateflags = UIP_LAST_ACK; + uip_connr->nrtx = 0; + tcp_send_finack: + BUF->flags = TCP_FIN | TCP_ACK; + goto tcp_send_nodata; + } + + /* Check the URG flag. If this is set, the segment carries urgent + data that we must pass to the application. */ + if((BUF->flags & TCP_URG) != 0) { +#if UIP_URGDATA > 0 + uip_urglen = (BUF->urgp[0] << 8) | BUF->urgp[1]; + if(uip_urglen > uip_len) { + /* There is more urgent data in the next segment to come. */ + uip_urglen = uip_len; + } + uip_add_rcv_nxt(uip_urglen); + uip_len -= uip_urglen; + uip_urgdata = uip_appdata; + uip_appdata += uip_urglen; + } else { + uip_urglen = 0; +#else /* UIP_URGDATA > 0 */ + uip_appdata = ((char *)uip_appdata) + ((BUF->urgp[0] << 8) | BUF->urgp[1]); + uip_len -= (BUF->urgp[0] << 8) | BUF->urgp[1]; +#endif /* UIP_URGDATA > 0 */ + } + + /* If uip_len > 0 we have TCP data in the packet, and we flag this + by setting the UIP_NEWDATA flag and update the sequence number + we acknowledge. If the application has stopped the dataflow + using uip_stop(), we must not accept any data packets from the + remote host. */ + if(uip_len > 0 && !(uip_connr->tcpstateflags & UIP_STOPPED)) { + uip_flags |= UIP_NEWDATA; + uip_add_rcv_nxt(uip_len); + } + + /* Check if the available buffer space advertised by the other end + is smaller than the initial MSS for this connection. If so, we + set the current MSS to the window size to ensure that the + application does not send more data than the other end can + handle. + + If the remote host advertises a zero window, we set the MSS to + the initial MSS so that the application will send an entire MSS + of data. This data will not be acknowledged by the receiver, + and the application will retransmit it. This is called the + "persistent timer" and uses the retransmission mechanim. + */ + tmp16 = ((u16_t)BUF->wnd[0] << 8) + (u16_t)BUF->wnd[1]; + if(tmp16 > uip_connr->initialmss || + tmp16 == 0) { + tmp16 = uip_connr->initialmss; + } + uip_connr->mss = tmp16; + + /* If this packet constitutes an ACK for outstanding data (flagged + by the UIP_ACKDATA flag, we should call the application since it + might want to send more data. If the incoming packet had data + from the peer (as flagged by the UIP_NEWDATA flag), the + application must also be notified. + + When the application is called, the global variable uip_len + contains the length of the incoming data. The application can + access the incoming data through the global pointer + uip_appdata, which usually points UIP_IPTCPH_LEN + UIP_LLH_LEN + bytes into the uip_buf array. + + If the application wishes to send any data, this data should be + put into the uip_appdata and the length of the data should be + put into uip_len. If the application don't have any data to + send, uip_len must be set to 0. */ + if(uip_flags & (UIP_NEWDATA | UIP_ACKDATA)) { + uip_slen = 0; + UIP_APPCALL(); + + appsend: + + if(uip_flags & UIP_ABORT) { + uip_slen = 0; + uip_connr->tcpstateflags = UIP_CLOSED; + BUF->flags = TCP_RST | TCP_ACK; + goto tcp_send_nodata; + } + + if(uip_flags & UIP_CLOSE) { + uip_slen = 0; + uip_connr->len = 1; + uip_connr->tcpstateflags = UIP_FIN_WAIT_1; + uip_connr->nrtx = 0; + BUF->flags = TCP_FIN | TCP_ACK; + goto tcp_send_nodata; + } + + /* If uip_slen > 0, the application has data to be sent. */ + if(uip_slen > 0) { + + /* If the connection has acknowledged data, the contents of + the ->len variable should be discarded. */ + if((uip_flags & UIP_ACKDATA) != 0) { + uip_connr->len = 0; + } + + /* If the ->len variable is non-zero the connection has + already data in transit and cannot send anymore right + now. */ + if(uip_connr->len == 0) { + + /* The application cannot send more than what is allowed by + the mss (the minumum of the MSS and the available + window). */ + if(uip_slen > uip_connr->mss) { + uip_slen = uip_connr->mss; + } + + /* Remember how much data we send out now so that we know + when everything has been acknowledged. */ + uip_connr->len = uip_slen; + } else { + + /* If the application already had unacknowledged data, we + make sure that the application does not send (i.e., + retransmit) out more than it previously sent out. */ + uip_slen = uip_connr->len; + } + } + uip_connr->nrtx = 0; + apprexmit: + uip_appdata = uip_sappdata; + + /* If the application has data to be sent, or if the incoming + packet had new data in it, we must send out a packet. */ + if(uip_slen > 0 && uip_connr->len > 0) { + /* Add the length of the IP and TCP headers. */ + uip_len = uip_connr->len + UIP_TCPIP_HLEN; + /* We always set the ACK flag in response packets. */ + BUF->flags = TCP_ACK | TCP_PSH; + /* Send the packet. */ + goto tcp_send_noopts; + } + /* If there is no data to send, just send out a pure ACK if + there is newdata. */ + if(uip_flags & UIP_NEWDATA) { + uip_len = UIP_TCPIP_HLEN; + BUF->flags = TCP_ACK; + goto tcp_send_noopts; + } + } + goto drop; + case UIP_LAST_ACK: + /* We can close this connection if the peer has acknowledged our + FIN. This is indicated by the UIP_ACKDATA flag. */ + if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_CLOSED; + uip_flags = UIP_CLOSE; + UIP_APPCALL(); + } + break; + + case UIP_FIN_WAIT_1: + /* The application has closed the connection, but the remote host + hasn't closed its end yet. Thus we do nothing but wait for a + FIN from the other side. */ + if(uip_len > 0) { + uip_add_rcv_nxt(uip_len); + } + if(BUF->flags & TCP_FIN) { + if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_TIME_WAIT; + uip_connr->timer = 0; + uip_connr->len = 0; + } else { + uip_connr->tcpstateflags = UIP_CLOSING; + } + uip_add_rcv_nxt(1); + uip_flags = UIP_CLOSE; + UIP_APPCALL(); + goto tcp_send_ack; + } else if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_FIN_WAIT_2; + uip_connr->len = 0; + goto drop; + } + if(uip_len > 0) { + goto tcp_send_ack; + } + goto drop; + + case UIP_FIN_WAIT_2: + if(uip_len > 0) { + uip_add_rcv_nxt(uip_len); + } + if(BUF->flags & TCP_FIN) { + uip_connr->tcpstateflags = UIP_TIME_WAIT; + uip_connr->timer = 0; + uip_add_rcv_nxt(1); + uip_flags = UIP_CLOSE; + UIP_APPCALL(); + goto tcp_send_ack; + } + if(uip_len > 0) { + goto tcp_send_ack; + } + goto drop; + + case UIP_TIME_WAIT: + goto tcp_send_ack; + + case UIP_CLOSING: + if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_TIME_WAIT; + uip_connr->timer = 0; + } + } + goto drop; + + + /* We jump here when we are ready to send the packet, and just want + to set the appropriate TCP sequence numbers in the TCP header. */ + tcp_send_ack: + BUF->flags = TCP_ACK; + tcp_send_nodata: + uip_len = UIP_IPTCPH_LEN; + tcp_send_noopts: + BUF->tcpoffset = (UIP_TCPH_LEN / 4) << 4; + tcp_send: + /* We're done with the input processing. We are now ready to send a + reply. Our job is to fill in all the fields of the TCP and IP + headers before calculating the checksum and finally send the + packet. */ + BUF->ackno[0] = uip_connr->rcv_nxt[0]; + BUF->ackno[1] = uip_connr->rcv_nxt[1]; + BUF->ackno[2] = uip_connr->rcv_nxt[2]; + BUF->ackno[3] = uip_connr->rcv_nxt[3]; + + BUF->seqno[0] = uip_connr->snd_nxt[0]; + BUF->seqno[1] = uip_connr->snd_nxt[1]; + BUF->seqno[2] = uip_connr->snd_nxt[2]; + BUF->seqno[3] = uip_connr->snd_nxt[3]; + + BUF->proto = UIP_PROTO_TCP; + + BUF->srcport = uip_connr->lport; + BUF->destport = uip_connr->rport; + + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + uip_ipaddr_copy(BUF->destipaddr, uip_connr->ripaddr); + + if(uip_connr->tcpstateflags & UIP_STOPPED) { + /* If the connection has issued uip_stop(), we advertise a zero + window so that the remote host will stop sending data. */ + BUF->wnd[0] = BUF->wnd[1] = 0; + } else { + BUF->wnd[0] = ((UIP_RECEIVE_WINDOW) >> 8); + BUF->wnd[1] = ((UIP_RECEIVE_WINDOW) & 0xff); + } + + tcp_send_noconn: + BUF->ttl = UIP_TTL; +#if UIP_CONF_IPV6 + /* For IPv6, the IP length field does not include the IPv6 IP header + length. */ + BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8); + BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff); +#else /* UIP_CONF_IPV6 */ + BUF->len[0] = (uip_len >> 8); + BUF->len[1] = (uip_len & 0xff); +#endif /* UIP_CONF_IPV6 */ + + BUF->urgp[0] = BUF->urgp[1] = 0; + + /* Calculate TCP checksum. */ + BUF->tcpchksum = 0; + BUF->tcpchksum = ~(uip_tcpchksum()); + + ip_send_nolen: + +#if UIP_CONF_IPV6 + BUF->vtc = 0x60; + BUF->tcflow = 0x00; + BUF->flow = 0x00; +#else /* UIP_CONF_IPV6 */ + BUF->vhl = 0x45; + BUF->tos = 0; + BUF->ipoffset[0] = BUF->ipoffset[1] = 0; + ++ipid; + BUF->ipid[0] = ipid >> 8; + BUF->ipid[1] = ipid & 0xff; + /* Calculate IP checksum. */ + BUF->ipchksum = 0; + BUF->ipchksum = ~(uip_ipchksum()); + DEBUG_PRINTF("uip ip_send_nolen: chkecum 0x%04x\n", uip_ipchksum()); +#endif /* UIP_CONF_IPV6 */ + + UIP_STAT(++uip_stat.tcp.sent); + send: + DEBUG_PRINTF("Sending packet with length %d (%d)\n", uip_len, + (BUF->len[0] << 8) | BUF->len[1]); + + UIP_STAT(++uip_stat.ip.sent); + /* Return and let the caller do the actual transmission. */ + uip_flags = 0; + return; + drop: + uip_len = 0; + uip_flags = 0; + return; +} +/*---------------------------------------------------------------------------*/ +u16_t +uip_htons(u16_t val) +{ + return HTONS(val); +} +/*---------------------------------------------------------------------------*/ +void +uip_send(const void *data, int len) +{ + if(len > 0) { + uip_slen = len; + if(data != uip_sappdata) { + memcpy((void*)uip_sappdata, (data), uip_slen); + } + } +} +/** @} */ diff --git a/components/net/uip/uip/uip.h b/components/net/uip/uip/uip.h new file mode 100644 index 0000000000000000000000000000000000000000..6d358f346cf0d06c95f27ef67b2214ea4712c958 --- /dev/null +++ b/components/net/uip/uip/uip.h @@ -0,0 +1,1602 @@ + +/** + * \addtogroup uip + * @{ + */ + +/** + * \file + * Header file for the uIP TCP/IP stack. + * \author Adam Dunkels + * + * The uIP TCP/IP stack header file contains definitions for a number + * of C macros that are used by uIP programs as well as internal uIP + * structures, TCP/IP header structures and function declarations. + * + */ + + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: uip.h,v 1.40 2006/06/08 07:12:07 adam Exp $ + * + */ + +#ifndef __UIP_H__ +#define __UIP_H__ + +#include "uipopt.h" + +/** + * Repressentation of an IP address. + * + */ +typedef u16_t uip_ip4addr_t[2]; +typedef u16_t uip_ip6addr_t[8]; +#if UIP_CONF_IPV6 +typedef uip_ip6addr_t uip_ipaddr_t; +#else /* UIP_CONF_IPV6 */ +typedef uip_ip4addr_t uip_ipaddr_t; +#endif /* UIP_CONF_IPV6 */ + +/*---------------------------------------------------------------------------*/ +/* First, the functions that should be called from the + * system. Initialization, the periodic timer and incoming packets are + * handled by the following three functions. + */ + +/** + * \defgroup uipconffunc uIP configuration functions + * @{ + * + * The uIP configuration functions are used for setting run-time + * parameters in uIP such as IP addresses. + */ + +/** + * Set the IP address of this host. + * + * The IP address is represented as a 4-byte array where the first + * octet of the IP address is put in the first member of the 4-byte + * array. + * + * Example: + \code + + uip_ipaddr_t addr; + + uip_ipaddr(&addr, 192,168,1,2); + uip_sethostaddr(&addr); + + \endcode + * \param addr A pointer to an IP address of type uip_ipaddr_t; + * + * \sa uip_ipaddr() + * + * \hideinitializer + */ +#define uip_sethostaddr(addr) uip_ipaddr_copy(uip_hostaddr, (addr)) + +/** + * Get the IP address of this host. + * + * The IP address is represented as a 4-byte array where the first + * octet of the IP address is put in the first member of the 4-byte + * array. + * + * Example: + \code + uip_ipaddr_t hostaddr; + + uip_gethostaddr(&hostaddr); + \endcode + * \param addr A pointer to a uip_ipaddr_t variable that will be + * filled in with the currently configured IP address. + * + * \hideinitializer + */ +#define uip_gethostaddr(addr) uip_ipaddr_copy((addr), uip_hostaddr) + +/** + * Set the default router's IP address. + * + * \param addr A pointer to a uip_ipaddr_t variable containing the IP + * address of the default router. + * + * \sa uip_ipaddr() + * + * \hideinitializer + */ +#define uip_setdraddr(addr) uip_ipaddr_copy(uip_draddr, (addr)) + +/** + * Set the netmask. + * + * \param addr A pointer to a uip_ipaddr_t variable containing the IP + * address of the netmask. + * + * \sa uip_ipaddr() + * + * \hideinitializer + */ +#define uip_setnetmask(addr) uip_ipaddr_copy(uip_netmask, (addr)) + + +/** + * Get the default router's IP address. + * + * \param addr A pointer to a uip_ipaddr_t variable that will be + * filled in with the IP address of the default router. + * + * \hideinitializer + */ +#define uip_getdraddr(addr) uip_ipaddr_copy((addr), uip_draddr) + +/** + * Get the netmask. + * + * \param addr A pointer to a uip_ipaddr_t variable that will be + * filled in with the value of the netmask. + * + * \hideinitializer + */ +#define uip_getnetmask(addr) uip_ipaddr_copy((addr), uip_netmask) + +/** @} */ + +/** + * \defgroup uipinit uIP initialization functions + * @{ + * + * The uIP initialization functions are used for booting uIP. + */ + +/** + * uIP initialization function. + * + * This function should be called at boot up to initilize the uIP + * TCP/IP stack. + */ +void uip_init(void); + +/** + * uIP initialization function. + * + * This function may be used at boot time to set the initial ip_id. + */ +void uip_setipid(u16_t id); + +/** @} */ + +/** + * \defgroup uipdevfunc uIP device driver functions + * @{ + * + * These functions are used by a network device driver for interacting + * with uIP. + */ + +/** + * Process an incoming packet. + * + * This function should be called when the device driver has received + * a packet from the network. The packet from the device driver must + * be present in the uip_buf buffer, and the length of the packet + * should be placed in the uip_len variable. + * + * When the function returns, there may be an outbound packet placed + * in the uip_buf packet buffer. If so, the uip_len variable is set to + * the length of the packet. If no packet is to be sent out, the + * uip_len variable is set to 0. + * + * The usual way of calling the function is presented by the source + * code below. + \code + uip_len = devicedriver_poll(); + if(uip_len > 0) { + uip_input(); + if(uip_len > 0) { + devicedriver_send(); + } + } + \endcode + * + * \note If you are writing a uIP device driver that needs ARP + * (Address Resolution Protocol), e.g., when running uIP over + * Ethernet, you will need to call the uIP ARP code before calling + * this function: + \code + #define BUF ((struct uip_eth_hdr *)&uip_buf[0]) + uip_len = ethernet_devicedrver_poll(); + if(uip_len > 0) { + if(BUF->type == HTONS(UIP_ETHTYPE_IP)) { + uip_arp_ipin(); + uip_input(); + if(uip_len > 0) { + uip_arp_out(); + ethernet_devicedriver_send(); + } + } else if(BUF->type == HTONS(UIP_ETHTYPE_ARP)) { + uip_arp_arpin(); + if(uip_len > 0) { + ethernet_devicedriver_send(); + } + } + \endcode + * + * \hideinitializer + */ +#define uip_input() uip_process(UIP_DATA) + +/** + * Periodic processing for a connection identified by its number. + * + * This function does the necessary periodic processing (timers, + * polling) for a uIP TCP conneciton, and should be called when the + * periodic uIP timer goes off. It should be called for every + * connection, regardless of whether they are open of closed. + * + * When the function returns, it may have an outbound packet waiting + * for service in the uIP packet buffer, and if so the uip_len + * variable is set to a value larger than zero. The device driver + * should be called to send out the packet. + * + * The ususal way of calling the function is through a for() loop like + * this: + \code + for(i = 0; i < UIP_CONNS; ++i) { + uip_periodic(i); + if(uip_len > 0) { + devicedriver_send(); + } + } + \endcode + * + * \note If you are writing a uIP device driver that needs ARP + * (Address Resolution Protocol), e.g., when running uIP over + * Ethernet, you will need to call the uip_arp_out() function before + * calling the device driver: + \code + for(i = 0; i < UIP_CONNS; ++i) { + uip_periodic(i); + if(uip_len > 0) { + uip_arp_out(); + ethernet_devicedriver_send(); + } + } + \endcode + * + * \param conn The number of the connection which is to be periodically polled. + * + * \hideinitializer + */ +#define uip_periodic(conn) do { uip_conn = &uip_conns[conn]; \ + uip_process(UIP_TIMER); } while (0) + +/** + * + * + */ +#define uip_conn_active(conn) (uip_conns[conn].tcpstateflags != UIP_CLOSED) + +/** + * Perform periodic processing for a connection identified by a pointer + * to its structure. + * + * Same as uip_periodic() but takes a pointer to the actual uip_conn + * struct instead of an integer as its argument. This function can be + * used to force periodic processing of a specific connection. + * + * \param conn A pointer to the uip_conn struct for the connection to + * be processed. + * + * \hideinitializer + */ +#define uip_periodic_conn(conn) do { uip_conn = conn; \ + uip_process(UIP_TIMER); } while (0) + +/** + * Reuqest that a particular connection should be polled. + * + * Similar to uip_periodic_conn() but does not perform any timer + * processing. The application is polled for new data. + * + * \param conn A pointer to the uip_conn struct for the connection to + * be processed. + * + * \hideinitializer + */ +#define uip_poll_conn(conn) do { uip_conn = conn; \ + uip_process(UIP_POLL_REQUEST); } while (0) + + +#if UIP_UDP +/** + * Periodic processing for a UDP connection identified by its number. + * + * This function is essentially the same as uip_periodic(), but for + * UDP connections. It is called in a similar fashion as the + * uip_periodic() function: + \code + for(i = 0; i < UIP_UDP_CONNS; i++) { + uip_udp_periodic(i); + if(uip_len > 0) { + devicedriver_send(); + } + } + \endcode + * + * \note As for the uip_periodic() function, special care has to be + * taken when using uIP together with ARP and Ethernet: + \code + for(i = 0; i < UIP_UDP_CONNS; i++) { + uip_udp_periodic(i); + if(uip_len > 0) { + uip_arp_out(); + ethernet_devicedriver_send(); + } + } + \endcode + * + * \param conn The number of the UDP connection to be processed. + * + * \hideinitializer + */ +#define uip_udp_periodic(conn) do { uip_udp_conn = &uip_udp_conns[conn]; \ + uip_process(UIP_UDP_TIMER); } while (0) + +/** + * Periodic processing for a UDP connection identified by a pointer to + * its structure. + * + * Same as uip_udp_periodic() but takes a pointer to the actual + * uip_conn struct instead of an integer as its argument. This + * function can be used to force periodic processing of a specific + * connection. + * + * \param conn A pointer to the uip_udp_conn struct for the connection + * to be processed. + * + * \hideinitializer + */ +#define uip_udp_periodic_conn(conn) do { uip_udp_conn = conn; \ + uip_process(UIP_UDP_TIMER); } while (0) + + +#endif /* UIP_UDP */ + +/** + * The uIP packet buffer. + * + * The uip_buf array is used to hold incoming and outgoing + * packets. The device driver should place incoming data into this + * buffer. When sending data, the device driver should read the link + * level headers and the TCP/IP headers from this buffer. The size of + * the link level headers is configured by the UIP_LLH_LEN define. + * + * \note The application data need not be placed in this buffer, so + * the device driver must read it from the place pointed to by the + * uip_appdata pointer as illustrated by the following example: + \code + void + devicedriver_send(void) + { + hwsend(&uip_buf[0], UIP_LLH_LEN); + if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) { + hwsend(&uip_buf[UIP_LLH_LEN], uip_len - UIP_LLH_LEN); + } else { + hwsend(&uip_buf[UIP_LLH_LEN], UIP_TCPIP_HLEN); + hwsend(uip_appdata, uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN); + } + } + \endcode + */ +extern u8_t uip_buf[UIP_BUFSIZE+2]; + +/** @} */ + +/*---------------------------------------------------------------------------*/ +/* Functions that are used by the uIP application program. Opening and + * closing connections, sending and receiving data, etc. is all + * handled by the functions below. +*/ +/** + * \defgroup uipappfunc uIP application functions + * @{ + * + * Functions used by an application running of top of uIP. + */ + +/** + * Start listening to the specified port. + * + * \note Since this function expects the port number in network byte + * order, a conversion using HTONS() or uip_htons() is necessary. + * + \code + uip_listen(HTONS(80)); + \endcode + * + * \param port A 16-bit port number in network byte order. + */ +void uip_listen(u16_t port); + +/** + * Stop listening to the specified port. + * + * \note Since this function expects the port number in network byte + * order, a conversion using HTONS() or uip_htons() is necessary. + * + \code + uip_unlisten(HTONS(80)); + \endcode + * + * \param port A 16-bit port number in network byte order. + */ +void uip_unlisten(u16_t port); + +/** + * Connect to a remote host using TCP. + * + * This function is used to start a new connection to the specified + * port on the specied host. It allocates a new connection identifier, + * sets the connection to the SYN_SENT state and sets the + * retransmission timer to 0. This will cause a TCP SYN segment to be + * sent out the next time this connection is periodically processed, + * which usually is done within 0.5 seconds after the call to + * uip_connect(). + * + * \note This function is avaliable only if support for active open + * has been configured by defining UIP_ACTIVE_OPEN to 1 in uipopt.h. + * + * \note Since this function requires the port number to be in network + * byte order, a conversion using HTONS() or uip_htons() is necessary. + * + \code + uip_ipaddr_t ipaddr; + + uip_ipaddr(&ipaddr, 192,168,1,2); + uip_connect(&ipaddr, HTONS(80)); + \endcode + * + * \param ripaddr The IP address of the remote hot. + * + * \param port A 16-bit port number in network byte order. + * + * \return A pointer to the uIP connection identifier for the new connection, + * or NULL if no connection could be allocated. + * + */ +struct uip_conn *uip_connect(uip_ipaddr_t *ripaddr, u16_t port); + + + +/** + * \internal + * + * Check if a connection has outstanding (i.e., unacknowledged) data. + * + * \param conn A pointer to the uip_conn structure for the connection. + * + * \hideinitializer + */ +#define uip_outstanding(conn) ((conn)->len) + +/** + * Send data on the current connection. + * + * This function is used to send out a single segment of TCP + * data. Only applications that have been invoked by uIP for event + * processing can send data. + * + * The amount of data that actually is sent out after a call to this + * funcion is determined by the maximum amount of data TCP allows. uIP + * will automatically crop the data so that only the appropriate + * amount of data is sent. The function uip_mss() can be used to query + * uIP for the amount of data that actually will be sent. + * + * \note This function does not guarantee that the sent data will + * arrive at the destination. If the data is lost in the network, the + * application will be invoked with the uip_rexmit() event being + * set. The application will then have to resend the data using this + * function. + * + * \param data A pointer to the data which is to be sent. + * + * \param len The maximum amount of data bytes to be sent. + * + * \hideinitializer + */ +void uip_send(const void *data, int len); + +/** + * The length of any incoming data that is currently avaliable (if avaliable) + * in the uip_appdata buffer. + * + * The test function uip_data() must first be used to check if there + * is any data available at all. + * + * \hideinitializer + */ +/*void uip_datalen(void);*/ +#define uip_datalen() uip_len + +/** + * The length of any out-of-band data (urgent data) that has arrived + * on the connection. + * + * \note The configuration parameter UIP_URGDATA must be set for this + * function to be enabled. + * + * \hideinitializer + */ +#define uip_urgdatalen() uip_urglen + +/** + * Close the current connection. + * + * This function will close the current connection in a nice way. + * + * \hideinitializer + */ +#define uip_close() (uip_flags = UIP_CLOSE) + +/** + * Abort the current connection. + * + * This function will abort (reset) the current connection, and is + * usually used when an error has occured that prevents using the + * uip_close() function. + * + * \hideinitializer + */ +#define uip_abort() (uip_flags = UIP_ABORT) + +/** + * Tell the sending host to stop sending data. + * + * This function will close our receiver's window so that we stop + * receiving data for the current connection. + * + * \hideinitializer + */ +#define uip_stop() (uip_conn->tcpstateflags |= UIP_STOPPED) + +/** + * Find out if the current connection has been previously stopped with + * uip_stop(). + * + * \hideinitializer + */ +#define uip_stopped(conn) ((conn)->tcpstateflags & UIP_STOPPED) + +/** + * Restart the current connection, if is has previously been stopped + * with uip_stop(). + * + * This function will open the receiver's window again so that we + * start receiving data for the current connection. + * + * \hideinitializer + */ +#define uip_restart() do { uip_flags |= UIP_NEWDATA; \ + uip_conn->tcpstateflags &= ~UIP_STOPPED; \ + } while(0) + + +/* uIP tests that can be made to determine in what state the current + connection is, and what the application function should do. */ + +/** + * Is the current connection a UDP connection? + * + * This function checks whether the current connection is a UDP connection. + * + * \hideinitializer + * + */ +#define uip_udpconnection() (uip_conn == NULL) + +/** + * Is new incoming data available? + * + * Will reduce to non-zero if there is new data for the application + * present at the uip_appdata pointer. The size of the data is + * avaliable through the uip_len variable. + * + * \hideinitializer + */ +#define uip_newdata() (uip_flags & UIP_NEWDATA) + +/** + * Has previously sent data been acknowledged? + * + * Will reduce to non-zero if the previously sent data has been + * acknowledged by the remote host. This means that the application + * can send new data. + * + * \hideinitializer + */ +#define uip_acked() (uip_flags & UIP_ACKDATA) + +/** + * Has the connection just been connected? + * + * Reduces to non-zero if the current connection has been connected to + * a remote host. This will happen both if the connection has been + * actively opened (with uip_connect()) or passively opened (with + * uip_listen()). + * + * \hideinitializer + */ +#define uip_connected() (uip_flags & UIP_CONNECTED) + +/** + * Has the connection been closed by the other end? + * + * Is non-zero if the connection has been closed by the remote + * host. The application may then do the necessary clean-ups. + * + * \hideinitializer + */ +#define uip_closed() (uip_flags & UIP_CLOSE) + +/** + * Has the connection been aborted by the other end? + * + * Non-zero if the current connection has been aborted (reset) by the + * remote host. + * + * \hideinitializer + */ +#define uip_aborted() (uip_flags & UIP_ABORT) + +/** + * Has the connection timed out? + * + * Non-zero if the current connection has been aborted due to too many + * retransmissions. + * + * \hideinitializer + */ +#define uip_timedout() (uip_flags & UIP_TIMEDOUT) + +/** + * Do we need to retransmit previously data? + * + * Reduces to non-zero if the previously sent data has been lost in + * the network, and the application should retransmit it. The + * application should send the exact same data as it did the last + * time, using the uip_send() function. + * + * \hideinitializer + */ +#define uip_rexmit() (uip_flags & UIP_REXMIT) + +/** + * Is the connection being polled by uIP? + * + * Is non-zero if the reason the application is invoked is that the + * current connection has been idle for a while and should be + * polled. + * + * The polling event can be used for sending data without having to + * wait for the remote host to send data. + * + * \hideinitializer + */ +#define uip_poll() (uip_flags & UIP_POLL) + +/** + * Get the initial maxium segment size (MSS) of the current + * connection. + * + * \hideinitializer + */ +#define uip_initialmss() (uip_conn->initialmss) + +/** + * Get the current maxium segment size that can be sent on the current + * connection. + * + * The current maxiumum segment size that can be sent on the + * connection is computed from the receiver's window and the MSS of + * the connection (which also is available by calling + * uip_initialmss()). + * + * \hideinitializer + */ +#define uip_mss() (uip_conn->mss) + +/** + * Set up a new UDP connection. + * + * This function sets up a new UDP connection. The function will + * automatically allocate an unused local port for the new + * connection. However, another port can be chosen by using the + * uip_udp_bind() call, after the uip_udp_new() function has been + * called. + * + * Example: + \code + uip_ipaddr_t addr; + struct uip_udp_conn *c; + + uip_ipaddr(&addr, 192,168,2,1); + c = uip_udp_new(&addr, HTONS(12345)); + if(c != NULL) { + uip_udp_bind(c, HTONS(12344)); + } + \endcode + * \param ripaddr The IP address of the remote host. + * + * \param rport The remote port number in network byte order. + * + * \return The uip_udp_conn structure for the new connection or NULL + * if no connection could be allocated. + */ +struct uip_udp_conn *uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport); + +/** + * Removed a UDP connection. + * + * \param conn A pointer to the uip_udp_conn structure for the connection. + * + * \hideinitializer + */ +#define uip_udp_remove(conn) (conn)->lport = 0 + +/** + * Bind a UDP connection to a local port. + * + * \param conn A pointer to the uip_udp_conn structure for the + * connection. + * + * \param port The local port number, in network byte order. + * + * \hideinitializer + */ +#define uip_udp_bind(conn, port) (conn)->lport = port + +/** + * Send a UDP datagram of length len on the current connection. + * + * This function can only be called in response to a UDP event (poll + * or newdata). The data must be present in the uip_buf buffer, at the + * place pointed to by the uip_appdata pointer. + * + * \param len The length of the data in the uip_buf buffer. + * + * \hideinitializer + */ +#define uip_udp_send(len) uip_send((char *)uip_appdata, len) + +/** @} */ + +/* uIP convenience and converting functions. */ + +/** + * \defgroup uipconvfunc uIP conversion functions + * @{ + * + * These functions can be used for converting between different data + * formats used by uIP. + */ + +/** + * Construct an IP address from four bytes. + * + * This function constructs an IP address of the type that uIP handles + * internally from four bytes. The function is handy for specifying IP + * addresses to use with e.g. the uip_connect() function. + * + * Example: + \code + uip_ipaddr_t ipaddr; + struct uip_conn *c; + + uip_ipaddr(&ipaddr, 192,168,1,2); + c = uip_connect(&ipaddr, HTONS(80)); + \endcode + * + * \param addr A pointer to a uip_ipaddr_t variable that will be + * filled in with the IP address. + * + * \param addr0 The first octet of the IP address. + * \param addr1 The second octet of the IP address. + * \param addr2 The third octet of the IP address. + * \param addr3 The forth octet of the IP address. + * + * \hideinitializer + */ +#define uip_ipaddr(addr, addr0,addr1,addr2,addr3) do { \ + ((u16_t *)(addr))[0] = HTONS(((addr0) << 8) | (addr1)); \ + ((u16_t *)(addr))[1] = HTONS(((addr2) << 8) | (addr3)); \ + } while(0) + +/** + * Construct an IPv6 address from eight 16-bit words. + * + * This function constructs an IPv6 address. + * + * \hideinitializer + */ +#define uip_ip6addr(addr, addr0,addr1,addr2,addr3,addr4,addr5,addr6,addr7) do { \ + ((u16_t *)(addr))[0] = HTONS((addr0)); \ + ((u16_t *)(addr))[1] = HTONS((addr1)); \ + ((u16_t *)(addr))[2] = HTONS((addr2)); \ + ((u16_t *)(addr))[3] = HTONS((addr3)); \ + ((u16_t *)(addr))[4] = HTONS((addr4)); \ + ((u16_t *)(addr))[5] = HTONS((addr5)); \ + ((u16_t *)(addr))[6] = HTONS((addr6)); \ + ((u16_t *)(addr))[7] = HTONS((addr7)); \ + } while(0) + +/** + * Copy an IP address to another IP address. + * + * Copies an IP address from one place to another. + * + * Example: + \code + uip_ipaddr_t ipaddr1, ipaddr2; + + uip_ipaddr(&ipaddr1, 192,16,1,2); + uip_ipaddr_copy(&ipaddr2, &ipaddr1); + \endcode + * + * \param dest The destination for the copy. + * \param src The source from where to copy. + * + * \hideinitializer + */ +#if !UIP_CONF_IPV6 +#define uip_ipaddr_copy(dest, src) do { \ + ((u16_t *)dest)[0] = ((u16_t *)src)[0]; \ + ((u16_t *)dest)[1] = ((u16_t *)src)[1]; \ + } while(0) +#else /* !UIP_CONF_IPV6 */ +#define uip_ipaddr_copy(dest, src) memcpy(dest, src, sizeof(uip_ip6addr_t)) +#endif /* !UIP_CONF_IPV6 */ + +/** + * Compare two IP addresses + * + * Compares two IP addresses. + * + * Example: + \code + uip_ipaddr_t ipaddr1, ipaddr2; + + uip_ipaddr(&ipaddr1, 192,16,1,2); + if(uip_ipaddr_cmp(&ipaddr2, &ipaddr1)) { + printf("They are the same"); + } + \endcode + * + * \param addr1 The first IP address. + * \param addr2 The second IP address. + * + * \hideinitializer + */ +#if !UIP_CONF_IPV6 +#define uip_ipaddr_cmp(addr1, addr2) (((u16_t *)addr1)[0] == ((u16_t *)addr2)[0] && \ + ((u16_t *)addr1)[1] == ((u16_t *)addr2)[1]) +#else /* !UIP_CONF_IPV6 */ +#define uip_ipaddr_cmp(addr1, addr2) (memcmp(addr1, addr2, sizeof(uip_ip6addr_t)) == 0) +#endif /* !UIP_CONF_IPV6 */ + +/** + * Compare two IP addresses with netmasks + * + * Compares two IP addresses with netmasks. The masks are used to mask + * out the bits that are to be compared. + * + * Example: + \code + uip_ipaddr_t ipaddr1, ipaddr2, mask; + + uip_ipaddr(&mask, 255,255,255,0); + uip_ipaddr(&ipaddr1, 192,16,1,2); + uip_ipaddr(&ipaddr2, 192,16,1,3); + if(uip_ipaddr_maskcmp(&ipaddr1, &ipaddr2, &mask)) { + printf("They are the same"); + } + \endcode + * + * \param addr1 The first IP address. + * \param addr2 The second IP address. + * \param mask The netmask. + * + * \hideinitializer + */ +#define uip_ipaddr_maskcmp(addr1, addr2, mask) \ + (((((u16_t *)addr1)[0] & ((u16_t *)mask)[0]) == \ + (((u16_t *)addr2)[0] & ((u16_t *)mask)[0])) && \ + ((((u16_t *)addr1)[1] & ((u16_t *)mask)[1]) == \ + (((u16_t *)addr2)[1] & ((u16_t *)mask)[1]))) + + +/** + * Mask out the network part of an IP address. + * + * Masks out the network part of an IP address, given the address and + * the netmask. + * + * Example: + \code + uip_ipaddr_t ipaddr1, ipaddr2, netmask; + + uip_ipaddr(&ipaddr1, 192,16,1,2); + uip_ipaddr(&netmask, 255,255,255,0); + uip_ipaddr_mask(&ipaddr2, &ipaddr1, &netmask); + \endcode + * + * In the example above, the variable "ipaddr2" will contain the IP + * address 192.168.1.0. + * + * \param dest Where the result is to be placed. + * \param src The IP address. + * \param mask The netmask. + * + * \hideinitializer + */ +#define uip_ipaddr_mask(dest, src, mask) do { \ + ((u16_t *)dest)[0] = ((u16_t *)src)[0] & ((u16_t *)mask)[0]; \ + ((u16_t *)dest)[1] = ((u16_t *)src)[1] & ((u16_t *)mask)[1]; \ + } while(0) + +/** + * Pick the first octet of an IP address. + * + * Picks out the first octet of an IP address. + * + * Example: + \code + uip_ipaddr_t ipaddr; + u8_t octet; + + uip_ipaddr(&ipaddr, 1,2,3,4); + octet = uip_ipaddr1(&ipaddr); + \endcode + * + * In the example above, the variable "octet" will contain the value 1. + * + * \hideinitializer + */ +#define uip_ipaddr1(addr) (uip_htons(((u16_t *)(addr))[0]) >> 8) + +/** + * Pick the second octet of an IP address. + * + * Picks out the second octet of an IP address. + * + * Example: + \code + uip_ipaddr_t ipaddr; + u8_t octet; + + uip_ipaddr(&ipaddr, 1,2,3,4); + octet = uip_ipaddr2(&ipaddr); + \endcode + * + * In the example above, the variable "octet" will contain the value 2. + * + * \hideinitializer + */ +#define uip_ipaddr2(addr) (uip_htons(((u16_t *)(addr))[0]) & 0xff) + +/** + * Pick the third octet of an IP address. + * + * Picks out the third octet of an IP address. + * + * Example: + \code + uip_ipaddr_t ipaddr; + u8_t octet; + + uip_ipaddr(&ipaddr, 1,2,3,4); + octet = uip_ipaddr3(&ipaddr); + \endcode + * + * In the example above, the variable "octet" will contain the value 3. + * + * \hideinitializer + */ +#define uip_ipaddr3(addr) (uip_htons(((u16_t *)(addr))[1]) >> 8) + +/** + * Pick the fourth octet of an IP address. + * + * Picks out the fourth octet of an IP address. + * + * Example: + \code + uip_ipaddr_t ipaddr; + u8_t octet; + + uip_ipaddr(&ipaddr, 1,2,3,4); + octet = uip_ipaddr4(&ipaddr); + \endcode + * + * In the example above, the variable "octet" will contain the value 4. + * + * \hideinitializer + */ +#define uip_ipaddr4(addr) (uip_htons(((u16_t *)(addr))[1]) & 0xff) + +/** + * Convert 16-bit quantity from host byte order to network byte order. + * + * This macro is primarily used for converting constants from host + * byte order to network byte order. For converting variables to + * network byte order, use the uip_htons() function instead. + * + * \hideinitializer + */ +#ifndef HTONS +# if UIP_BYTE_ORDER == UIP_BIG_ENDIAN +# define HTONS(n) (n) +# else /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */ +# define HTONS(n) (u16_t)((((u16_t) (n)) << 8) | (((u16_t) (n)) >> 8)) +# endif /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */ +#else +#error "HTONS already defined!" +#endif /* HTONS */ + +/** + * Convert 16-bit quantity from host byte order to network byte order. + * + * This function is primarily used for converting variables from host + * byte order to network byte order. For converting constants to + * network byte order, use the HTONS() macro instead. + */ + +#ifndef uip_htons +u16_t uip_htons(u16_t val); +#endif /* uip_htons */ +#ifndef ntohs +#define ntohs uip_htons +#endif + +/** @} */ + +/** + * Pointer to the application data in the packet buffer. + * + * This pointer points to the application data when the application is + * called. If the application wishes to send data, the application may + * use this space to write the data into before calling uip_send(). + */ +extern volatile u8_t *uip_appdata; + +#if UIP_URGDATA > 0 +/* u8_t *uip_urgdata: + * + * This pointer points to any urgent data that has been received. Only + * present if compiled with support for urgent data (UIP_URGDATA). + */ +extern void *uip_urgdata; +#endif /* UIP_URGDATA > 0 */ + + +/** + * \defgroup uipdrivervars Variables used in uIP device drivers + * @{ + * + * uIP has a few global variables that are used in device drivers for + * uIP. + */ + +/** + * The length of the packet in the uip_buf buffer. + * + * The global variable uip_len holds the length of the packet in the + * uip_buf buffer. + * + * When the network device driver calls the uIP input function, + * uip_len should be set to the length of the packet in the uip_buf + * buffer. + * + * When sending packets, the device driver should use the contents of + * the uip_len variable to determine the length of the outgoing + * packet. + * + */ +extern u16_t uip_len; + +/** @} */ + +#if UIP_URGDATA > 0 +extern u16_t uip_urglen, uip_surglen; +#endif /* UIP_URGDATA > 0 */ + + +/** + * Representation of a uIP TCP connection. + * + * The uip_conn structure is used for identifying a connection. All + * but one field in the structure are to be considered read-only by an + * application. The only exception is the appstate field whos purpose + * is to let the application store application-specific state (e.g., + * file pointers) for the connection. The type of this field is + * configured in the "uipopt.h" header file. + */ +struct uip_conn { + uip_ipaddr_t ripaddr; /**< The IP address of the remote host. */ + + u16_t lport; /**< The local TCP port, in network byte order. */ + u16_t rport; /**< The local remote TCP port, in network byte + order. */ + + u8_t rcv_nxt[4]; /**< The sequence number that we expect to + receive next. */ + u8_t snd_nxt[4]; /**< The sequence number that was last sent by + us. */ + u16_t len; /**< Length of the data that was previously sent. */ + u16_t mss; /**< Current maximum segment size for the + connection. */ + u16_t initialmss; /**< Initial maximum segment size for the + connection. */ + u8_t sa; /**< Retransmission time-out calculation state + variable. */ + u8_t sv; /**< Retransmission time-out calculation state + variable. */ + u8_t rto; /**< Retransmission time-out. */ + u8_t tcpstateflags; /**< TCP state and flags. */ + u8_t timer; /**< The retransmission timer. */ + u8_t nrtx; /**< The number of retransmissions for the last + segment sent. */ + + /** The application state. */ + uip_tcp_appstate_t appstate; +}; + + +/** + * Pointer to the current TCP connection. + * + * The uip_conn pointer can be used to access the current TCP + * connection. + */ +extern struct uip_conn *uip_conn; +/* The array containing all uIP connections. */ +extern struct uip_conn uip_conns[UIP_CONNS]; +/** + * \addtogroup uiparch + * @{ + */ + +/** + * 4-byte array used for the 32-bit sequence number calculations. + */ +extern u8_t uip_acc32[4]; + +/** @} */ + + +#if UIP_UDP +/** + * Representation of a uIP UDP connection. + */ +struct uip_udp_conn { + uip_ipaddr_t ripaddr; /**< The IP address of the remote peer. */ + u16_t lport; /**< The local port number in network byte order. */ + u16_t rport; /**< The remote port number in network byte order. */ + u8_t ttl; /**< Default time-to-live. */ + + /** The application state. */ + uip_udp_appstate_t appstate; +}; + +/** + * The current UDP connection. + */ +extern struct uip_udp_conn *uip_udp_conn; +extern struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS]; +#endif /* UIP_UDP */ + +/** + * The structure holding the TCP/IP statistics that are gathered if + * UIP_STATISTICS is set to 1. + * + */ +struct uip_stats { + struct { + uip_stats_t drop; /**< Number of dropped packets at the IP + layer. */ + uip_stats_t recv; /**< Number of received packets at the IP + layer. */ + uip_stats_t sent; /**< Number of sent packets at the IP + layer. */ + uip_stats_t vhlerr; /**< Number of packets dropped due to wrong + IP version or header length. */ + uip_stats_t hblenerr; /**< Number of packets dropped due to wrong + IP length, high byte. */ + uip_stats_t lblenerr; /**< Number of packets dropped due to wrong + IP length, low byte. */ + uip_stats_t fragerr; /**< Number of packets dropped since they + were IP fragments. */ + uip_stats_t chkerr; /**< Number of packets dropped due to IP + checksum errors. */ + uip_stats_t protoerr; /**< Number of packets dropped since they + were neither ICMP, UDP nor TCP. */ + } ip; /**< IP statistics. */ + struct { + uip_stats_t drop; /**< Number of dropped ICMP packets. */ + uip_stats_t recv; /**< Number of received ICMP packets. */ + uip_stats_t sent; /**< Number of sent ICMP packets. */ + uip_stats_t typeerr; /**< Number of ICMP packets with a wrong + type. */ + } icmp; /**< ICMP statistics. */ + struct { + uip_stats_t drop; /**< Number of dropped TCP segments. */ + uip_stats_t recv; /**< Number of recived TCP segments. */ + uip_stats_t sent; /**< Number of sent TCP segments. */ + uip_stats_t chkerr; /**< Number of TCP segments with a bad + checksum. */ + uip_stats_t ackerr; /**< Number of TCP segments with a bad ACK + number. */ + uip_stats_t rst; /**< Number of recevied TCP RST (reset) segments. */ + uip_stats_t rexmit; /**< Number of retransmitted TCP segments. */ + uip_stats_t syndrop; /**< Number of dropped SYNs due to too few + connections was avaliable. */ + uip_stats_t synrst; /**< Number of SYNs for closed ports, + triggering a RST. */ + } tcp; /**< TCP statistics. */ +#if UIP_UDP + struct { + uip_stats_t drop; /**< Number of dropped UDP segments. */ + uip_stats_t recv; /**< Number of recived UDP segments. */ + uip_stats_t sent; /**< Number of sent UDP segments. */ + uip_stats_t chkerr; /**< Number of UDP segments with a bad + checksum. */ + } udp; /**< UDP statistics. */ +#endif /* UIP_UDP */ +}; + +/** + * The uIP TCP/IP statistics. + * + * This is the variable in which the uIP TCP/IP statistics are gathered. + */ +extern struct uip_stats uip_stat; + + +/*---------------------------------------------------------------------------*/ +/* All the stuff below this point is internal to uIP and should not be + * used directly by an application or by a device driver. + */ +/*---------------------------------------------------------------------------*/ +/* u8_t uip_flags: + * + * When the application is called, uip_flags will contain the flags + * that are defined in this file. Please read below for more + * infomation. + */ +extern u8_t uip_flags; + +/* The following flags may be set in the global variable uip_flags + before calling the application callback. The UIP_ACKDATA, + UIP_NEWDATA, and UIP_CLOSE flags may both be set at the same time, + whereas the others are mutualy exclusive. Note that these flags + should *NOT* be accessed directly, but only through the uIP + functions/macros. */ + +#define UIP_ACKDATA 1 /* Signifies that the outstanding data was + acked and the application should send + out new data instead of retransmitting + the last data. */ +#define UIP_NEWDATA 2 /* Flags the fact that the peer has sent + us new data. */ +#define UIP_REXMIT 4 /* Tells the application to retransmit the + data that was last sent. */ +#define UIP_POLL 8 /* Used for polling the application, to + check if the application has data that + it wants to send. */ +#define UIP_CLOSE 16 /* The remote host has closed the + connection, thus the connection has + gone away. Or the application signals + that it wants to close the + connection. */ +#define UIP_ABORT 32 /* The remote host has aborted the + connection, thus the connection has + gone away. Or the application signals + that it wants to abort the + connection. */ +#define UIP_CONNECTED 64 /* We have got a connection from a remote + host and have set up a new connection + for it, or an active connection has + been successfully established. */ + +#define UIP_TIMEDOUT 128 /* The connection has been aborted due to + too many retransmissions. */ + +/* uip_process(flag): + * + * The actual uIP function which does all the work. + */ +void uip_process(u8_t flag); + +/* The following flags are passed as an argument to the uip_process() + function. They are used to distinguish between the two cases where + uip_process() is called. It can be called either because we have + incoming data that should be processed, or because the periodic + timer has fired. These values are never used directly, but only in + the macrose defined in this file. */ + +#define UIP_DATA 1 /* Tells uIP that there is incoming + data in the uip_buf buffer. The + length of the data is stored in the + global variable uip_len. */ +#define UIP_TIMER 2 /* Tells uIP that the periodic timer + has fired. */ +#define UIP_POLL_REQUEST 3 /* Tells uIP that a connection should + be polled. */ +#define UIP_UDP_SEND_CONN 4 /* Tells uIP that a UDP datagram + should be constructed in the + uip_buf buffer. */ +#if UIP_UDP +#define UIP_UDP_TIMER 5 +#endif /* UIP_UDP */ + +/* The TCP states used in the uip_conn->tcpstateflags. */ +#define UIP_CLOSED 0 +#define UIP_SYN_RCVD 1 +#define UIP_SYN_SENT 2 +#define UIP_ESTABLISHED 3 +#define UIP_FIN_WAIT_1 4 +#define UIP_FIN_WAIT_2 5 +#define UIP_CLOSING 6 +#define UIP_TIME_WAIT 7 +#define UIP_LAST_ACK 8 +#define UIP_TS_MASK 15 + +#define UIP_STOPPED 16 + +/* The TCP and IP headers. */ +struct uip_tcpip_hdr { +#if UIP_CONF_IPV6 + /* IPv6 header. */ + u8_t vtc, + tcflow; + u16_t flow; + u8_t len[2]; + u8_t proto, ttl; + uip_ip6addr_t srcipaddr, destipaddr; +#else /* UIP_CONF_IPV6 */ + /* IPv4 header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; +#endif /* UIP_CONF_IPV6 */ + + /* TCP header. */ + u16_t srcport, + destport; + u8_t seqno[4], + ackno[4], + tcpoffset, + flags, + wnd[2]; + u16_t tcpchksum; + u8_t urgp[2]; + u8_t optdata[4]; +}; + +/* The ICMP and IP headers. */ +struct uip_icmpip_hdr { +#if UIP_CONF_IPV6 + /* IPv6 header. */ + u8_t vtc, + tcf; + u16_t flow; + u8_t len[2]; + u8_t proto, ttl; + uip_ip6addr_t srcipaddr, destipaddr; +#else /* UIP_CONF_IPV6 */ + /* IPv4 header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; +#endif /* UIP_CONF_IPV6 */ + + /* ICMP (echo) header. */ + u8_t type, icode; + u16_t icmpchksum; +#if !UIP_CONF_IPV6 + u16_t id, seqno; +#else /* !UIP_CONF_IPV6 */ + u8_t flags, reserved1, reserved2, reserved3; + u8_t icmp6data[16]; + u8_t options[1]; +#endif /* !UIP_CONF_IPV6 */ +}; + + +/* The UDP and IP headers. */ +struct uip_udpip_hdr { +#if UIP_CONF_IPV6 + /* IPv6 header. */ + u8_t vtc, + tcf; + u16_t flow; + u8_t len[2]; + u8_t proto, ttl; + uip_ip6addr_t srcipaddr, destipaddr; +#else /* UIP_CONF_IPV6 */ + /* IP header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; +#endif /* UIP_CONF_IPV6 */ + + /* UDP header. */ + u16_t srcport, + destport; + u16_t udplen; + u16_t udpchksum; +}; + + + +/** + * The buffer size available for user data in the \ref uip_buf buffer. + * + * This macro holds the available size for user data in the \ref + * uip_buf buffer. The macro is intended to be used for checking + * bounds of available user data. + * + * Example: + \code + snprintf(uip_appdata, UIP_APPDATA_SIZE, "%u\n", i); + \endcode + * + * \hideinitializer + */ +#define UIP_APPDATA_SIZE (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) + + +#define UIP_PROTO_ICMP 1 +#define UIP_PROTO_TCP 6 +#define UIP_PROTO_UDP 17 +#define UIP_PROTO_ICMP6 58 + +/* Header sizes. */ +#if UIP_CONF_IPV6 +#define UIP_IPH_LEN 40 +#else /* UIP_CONF_IPV6 */ +#define UIP_IPH_LEN 20 /* Size of IP header */ +#endif /* UIP_CONF_IPV6 */ +#define UIP_UDPH_LEN 8 /* Size of UDP header */ +#define UIP_TCPH_LEN 20 /* Size of TCP header */ +#define UIP_IPUDPH_LEN (UIP_UDPH_LEN + UIP_IPH_LEN) /* Size of IP + + UDP + header */ +#define UIP_IPTCPH_LEN (UIP_TCPH_LEN + UIP_IPH_LEN) /* Size of IP + + TCP + header */ +#define UIP_TCPIP_HLEN UIP_IPTCPH_LEN + + +#if UIP_FIXEDADDR +extern const uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr; +#else /* UIP_FIXEDADDR */ +extern uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr; +#endif /* UIP_FIXEDADDR */ + + + +/** + * Representation of a 48-bit Ethernet address. + */ +struct uip_eth_addr { + u8_t addr[6]; +}; + +/** + * Calculate the Internet checksum over a buffer. + * + * The Internet checksum is the one's complement of the one's + * complement sum of all 16-bit words in the buffer. + * + * See RFC1071. + * + * \param buf A pointer to the buffer over which the checksum is to be + * computed. + * + * \param len The length of the buffer over which the checksum is to + * be computed. + * + * \return The Internet checksum of the buffer. + */ +u16_t uip_chksum(u16_t *buf, u16_t len); + +/** + * Calculate the IP header checksum of the packet header in uip_buf. + * + * The IP header checksum is the Internet checksum of the 20 bytes of + * the IP header. + * + * \return The IP header checksum of the IP header in the uip_buf + * buffer. + */ +u16_t uip_ipchksum(void); + +/** + * Calculate the TCP checksum of the packet in uip_buf and uip_appdata. + * + * The TCP checksum is the Internet checksum of data contents of the + * TCP segment, and a pseudo-header as defined in RFC793. + * + * \return The TCP checksum of the TCP segment in uip_buf and pointed + * to by uip_appdata. + */ +u16_t uip_tcpchksum(void); + +/** + * Calculate the UDP checksum of the packet in uip_buf and uip_appdata. + * + * The UDP checksum is the Internet checksum of data contents of the + * UDP segment, and a pseudo-header as defined in RFC768. + * + * \return The UDP checksum of the UDP segment in uip_buf and pointed + * to by uip_appdata. + */ +u16_t uip_udpchksum(void); + + +#endif /* __UIP_H__ */ + + +/** @} */ diff --git a/components/net/uip/uip/uip_arch.h b/components/net/uip/uip/uip_arch.h new file mode 100644 index 0000000000000000000000000000000000000000..71fd84bf3c7b71ec40fa3a5b1f9de2b05f64ea7e --- /dev/null +++ b/components/net/uip/uip/uip_arch.h @@ -0,0 +1,138 @@ +/** + * \addtogroup uip + * {@ + */ + +/** + * \defgroup uiparch Architecture specific uIP functions + * @{ + * + * The functions in the architecture specific module implement the IP + * check sum and 32-bit additions. + * + * The IP checksum calculation is the most computationally expensive + * operation in the TCP/IP stack and it therefore pays off to + * implement this in efficient assembler. The purpose of the uip-arch + * module is to let the checksum functions to be implemented in + * architecture specific assembler. + * + */ + +/** + * \file + * Declarations of architecture specific functions. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2001, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: uip_arch.h,v 1.2 2006/06/07 09:15:19 adam Exp $ + * + */ + +#ifndef __UIP_ARCH_H__ +#define __UIP_ARCH_H__ + +#include "uip.h" + +/** + * Carry out a 32-bit addition. + * + * Because not all architectures for which uIP is intended has native + * 32-bit arithmetic, uIP uses an external C function for doing the + * required 32-bit additions in the TCP protocol processing. This + * function should add the two arguments and place the result in the + * global variable uip_acc32. + * + * \note The 32-bit integer pointed to by the op32 parameter and the + * result in the uip_acc32 variable are in network byte order (big + * endian). + * + * \param op32 A pointer to a 4-byte array representing a 32-bit + * integer in network byte order (big endian). + * + * \param op16 A 16-bit integer in host byte order. + */ +void uip_add32(u8_t *op32, u16_t op16); + +/** + * Calculate the Internet checksum over a buffer. + * + * The Internet checksum is the one's complement of the one's + * complement sum of all 16-bit words in the buffer. + * + * See RFC1071. + * + * \note This function is not called in the current version of uIP, + * but future versions might make use of it. + * + * \param buf A pointer to the buffer over which the checksum is to be + * computed. + * + * \param len The length of the buffer over which the checksum is to + * be computed. + * + * \return The Internet checksum of the buffer. + */ +u16_t uip_chksum(u16_t *buf, u16_t len); + +/** + * Calculate the IP header checksum of the packet header in uip_buf. + * + * The IP header checksum is the Internet checksum of the 20 bytes of + * the IP header. + * + * \return The IP header checksum of the IP header in the uip_buf + * buffer. + */ +u16_t uip_ipchksum(void); + +/** + * Calculate the TCP checksum of the packet in uip_buf and uip_appdata. + * + * The TCP checksum is the Internet checksum of data contents of the + * TCP segment, and a pseudo-header as defined in RFC793. + * + * \note The uip_appdata pointer that points to the packet data may + * point anywhere in memory, so it is not possible to simply calculate + * the Internet checksum of the contents of the uip_buf buffer. + * + * \return The TCP checksum of the TCP segment in uip_buf and pointed + * to by uip_appdata. + */ +u16_t uip_tcpchksum(void); + +u16_t uip_udpchksum(void); + +/** @} */ +/** @} */ + +#endif /* __UIP_ARCH_H__ */ diff --git a/components/net/uip/uip/uip_arp.c b/components/net/uip/uip/uip_arp.c new file mode 100644 index 0000000000000000000000000000000000000000..75ade649214c0c4e784c5ab682aabbe86d5c9d11 --- /dev/null +++ b/components/net/uip/uip/uip_arp.c @@ -0,0 +1,423 @@ +/** + * \addtogroup uip + * @{ + */ + +/** + * \defgroup uiparp uIP Address Resolution Protocol + * @{ + * + * The Address Resolution Protocol ARP is used for mapping between IP + * addresses and link level addresses such as the Ethernet MAC + * addresses. ARP uses broadcast queries to ask for the link level + * address of a known IP address and the host which is configured with + * the IP address for which the query was meant, will respond with its + * link level address. + * + * \note This ARP implementation only supports Ethernet. + */ + +/** + * \file + * Implementation of the ARP Address Resolution Protocol. + * \author Adam Dunkels + * + */ + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: uip_arp.c,v 1.8 2006/06/02 23:36:21 adam Exp $ + * + */ + + +#include "uip_arp.h" + +#include + +struct arp_hdr { + struct uip_eth_hdr ethhdr; + u16_t hwtype; + u16_t protocol; + u8_t hwlen; + u8_t protolen; + u16_t opcode; + struct uip_eth_addr shwaddr; + u16_t sipaddr[2]; + struct uip_eth_addr dhwaddr; + u16_t dipaddr[2]; +}; + +struct ethip_hdr { + struct uip_eth_hdr ethhdr; + /* IP header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; +}; + +#define ARP_REQUEST 1 +#define ARP_REPLY 2 + +#define ARP_HWTYPE_ETH 1 + +struct arp_entry { + u16_t ipaddr[2]; + struct uip_eth_addr ethaddr; + u8_t time; +}; + +static const struct uip_eth_addr broadcast_ethaddr = + {{0xff,0xff,0xff,0xff,0xff,0xff}}; +static const u16_t broadcast_ipaddr[2] = {0xffff,0xffff}; + +static struct arp_entry arp_table[UIP_ARPTAB_SIZE]; +static u16_t ipaddr[2]; +static u8_t i, c; + +static u8_t arptime; +static u8_t tmpage; + +#define BUF ((struct arp_hdr *)&uip_buf[0]) +#define IPBUF ((struct ethip_hdr *)&uip_buf[0]) +/*-----------------------------------------------------------------------------------*/ +/** + * Initialize the ARP module. + * + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_init(void) +{ + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + memset(arp_table[i].ipaddr, 0, 4); + } +} +/*-----------------------------------------------------------------------------------*/ +/** + * Periodic ARP processing function. + * + * This function performs periodic timer processing in the ARP module + * and should be called at regular intervals. The recommended interval + * is 10 seconds between the calls. + * + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_timer(void) +{ + struct arp_entry *tabptr; + + ++arptime; + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + tabptr = &arp_table[i]; + if((tabptr->ipaddr[0] | tabptr->ipaddr[1]) != 0 && + arptime - tabptr->time >= UIP_ARP_MAXAGE) { + memset(tabptr->ipaddr, 0, 4); + } + } + +} +/*-----------------------------------------------------------------------------------*/ +static void +uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr) +{ + register struct arp_entry *tabptr; + /* Walk through the ARP mapping table and try to find an entry to + update. If none is found, the IP -> MAC address mapping is + inserted in the ARP table. */ + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + + tabptr = &arp_table[i]; + /* Only check those entries that are actually in use. */ + if(tabptr->ipaddr[0] != 0 && + tabptr->ipaddr[1] != 0) { + + /* Check if the source IP address of the incoming packet matches + the IP address in this ARP table entry. */ + if(ipaddr[0] == tabptr->ipaddr[0] && + ipaddr[1] == tabptr->ipaddr[1]) { + + /* An old entry found, update this and return. */ + memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6); + tabptr->time = arptime; + + return; + } + } + } + + /* If we get here, no existing ARP table entry was found, so we + create one. */ + + /* First, we try to find an unused entry in the ARP table. */ + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + tabptr = &arp_table[i]; + if(tabptr->ipaddr[0] == 0 && + tabptr->ipaddr[1] == 0) { + break; + } + } + + /* If no unused entry is found, we try to find the oldest entry and + throw it away. */ + if(i == UIP_ARPTAB_SIZE) { + tmpage = 0; + c = 0; + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + tabptr = &arp_table[i]; + if(arptime - tabptr->time > tmpage) { + tmpage = arptime - tabptr->time; + c = i; + } + } + i = c; + tabptr = &arp_table[i]; + } + + /* Now, i is the ARP table entry which we will fill with the new + information. */ + memcpy(tabptr->ipaddr, ipaddr, 4); + memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6); + tabptr->time = arptime; +} +/*-----------------------------------------------------------------------------------*/ +/** + * ARP processing for incoming IP packets + * + * This function should be called by the device driver when an IP + * packet has been received. The function will check if the address is + * in the ARP cache, and if so the ARP cache entry will be + * refreshed. If no ARP cache entry was found, a new one is created. + * + * This function expects an IP packet with a prepended Ethernet header + * in the uip_buf[] buffer, and the length of the packet in the global + * variable uip_len. + */ +/*-----------------------------------------------------------------------------------*/ +#if 0 +void +uip_arp_ipin(void) +{ + uip_len -= sizeof(struct uip_eth_hdr); + + /* Only insert/update an entry if the source IP address of the + incoming IP packet comes from a host on the local network. */ + if((IPBUF->srcipaddr[0] & uip_netmask[0]) != + (uip_hostaddr[0] & uip_netmask[0])) { + return; + } + if((IPBUF->srcipaddr[1] & uip_netmask[1]) != + (uip_hostaddr[1] & uip_netmask[1])) { + return; + } + uip_arp_update(IPBUF->srcipaddr, &(IPBUF->ethhdr.src)); + + return; +} +#endif /* 0 */ +/*-----------------------------------------------------------------------------------*/ +/** + * ARP processing for incoming ARP packets. + * + * This function should be called by the device driver when an ARP + * packet has been received. The function will act differently + * depending on the ARP packet type: if it is a reply for a request + * that we previously sent out, the ARP cache will be filled in with + * the values from the ARP reply. If the incoming ARP packet is an ARP + * request for our IP address, an ARP reply packet is created and put + * into the uip_buf[] buffer. + * + * When the function returns, the value of the global variable uip_len + * indicates whether the device driver should send out a packet or + * not. If uip_len is zero, no packet should be sent. If uip_len is + * non-zero, it contains the length of the outbound packet that is + * present in the uip_buf[] buffer. + * + * This function expects an ARP packet with a prepended Ethernet + * header in the uip_buf[] buffer, and the length of the packet in the + * global variable uip_len. + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_arpin(void) +{ + + if(uip_len < sizeof(struct arp_hdr)) { + uip_len = 0; + return; + } + uip_len = 0; + + switch(BUF->opcode) { + case HTONS(ARP_REQUEST): + /* ARP request. If it asked for our address, we send out a + reply. */ + if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) { + /* First, we register the one who made the request in our ARP + table, since it is likely that we will do more communication + with this host in the future. */ + uip_arp_update(BUF->sipaddr, &BUF->shwaddr); + + /* The reply opcode is 2. */ + BUF->opcode = HTONS(2); + + memcpy(BUF->dhwaddr.addr, BUF->shwaddr.addr, 6); + memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6); + memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6); + memcpy(BUF->ethhdr.dest.addr, BUF->dhwaddr.addr, 6); + + BUF->dipaddr[0] = BUF->sipaddr[0]; + BUF->dipaddr[1] = BUF->sipaddr[1]; + BUF->sipaddr[0] = uip_hostaddr[0]; + BUF->sipaddr[1] = uip_hostaddr[1]; + + BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP); + uip_len = sizeof(struct arp_hdr); + } + break; + case HTONS(ARP_REPLY): + /* ARP reply. We insert or update the ARP table if it was meant + for us. */ + if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) { + uip_arp_update(BUF->sipaddr, &BUF->shwaddr); + } + break; + } + + return; +} +/*-----------------------------------------------------------------------------------*/ +/** + * Prepend Ethernet header to an outbound IP packet and see if we need + * to send out an ARP request. + * + * This function should be called before sending out an IP packet. The + * function checks the destination IP address of the IP packet to see + * what Ethernet MAC address that should be used as a destination MAC + * address on the Ethernet. + * + * If the destination IP address is in the local network (determined + * by logical ANDing of netmask and our IP address), the function + * checks the ARP cache to see if an entry for the destination IP + * address is found. If so, an Ethernet header is prepended and the + * function returns. If no ARP cache entry is found for the + * destination IP address, the packet in the uip_buf[] is replaced by + * an ARP request packet for the IP address. The IP packet is dropped + * and it is assumed that they higher level protocols (e.g., TCP) + * eventually will retransmit the dropped packet. + * + * If the destination IP address is not on the local network, the IP + * address of the default router is used instead. + * + * When the function returns, a packet is present in the uip_buf[] + * buffer, and the length of the packet is in the global variable + * uip_len. + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_out(void) +{ + struct arp_entry *tabptr; + + /* Find the destination IP address in the ARP table and construct + the Ethernet header. If the destination IP addres isn't on the + local network, we use the default router's IP address instead. + + If not ARP table entry is found, we overwrite the original IP + packet with an ARP request for the IP address. */ + + /* First check if destination is a local broadcast. */ + if(uip_ipaddr_cmp(IPBUF->destipaddr, broadcast_ipaddr)) { + memcpy(IPBUF->ethhdr.dest.addr, broadcast_ethaddr.addr, 6); + } else { + /* Check if the destination address is on the local network. */ + if(!uip_ipaddr_maskcmp(IPBUF->destipaddr, uip_hostaddr, uip_netmask)) { + /* Destination address was not on the local network, so we need to + use the default router's IP address instead of the destination + address when determining the MAC address. */ + uip_ipaddr_copy(ipaddr, uip_draddr); + } else { + /* Else, we use the destination IP address. */ + uip_ipaddr_copy(ipaddr, IPBUF->destipaddr); + } + + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + tabptr = &arp_table[i]; + if(uip_ipaddr_cmp(ipaddr, tabptr->ipaddr)) { + break; + } + } + + if(i == UIP_ARPTAB_SIZE) { + /* The destination address was not in our ARP table, so we + overwrite the IP packet with an ARP request. */ + + memset(BUF->ethhdr.dest.addr, 0xff, 6); + memset(BUF->dhwaddr.addr, 0x00, 6); + memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6); + memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6); + + uip_ipaddr_copy(BUF->dipaddr, ipaddr); + uip_ipaddr_copy(BUF->sipaddr, uip_hostaddr); + BUF->opcode = HTONS(ARP_REQUEST); /* ARP request. */ + BUF->hwtype = HTONS(ARP_HWTYPE_ETH); + BUF->protocol = HTONS(UIP_ETHTYPE_IP); + BUF->hwlen = 6; + BUF->protolen = 4; + BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP); + + uip_appdata = &uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN]; + + uip_len = sizeof(struct arp_hdr); + return; + } + + /* Build an ethernet header. */ + memcpy(IPBUF->ethhdr.dest.addr, tabptr->ethaddr.addr, 6); + } + memcpy(IPBUF->ethhdr.src.addr, uip_ethaddr.addr, 6); + + IPBUF->ethhdr.type = HTONS(UIP_ETHTYPE_IP); + + uip_len += sizeof(struct uip_eth_hdr); +} +/*-----------------------------------------------------------------------------------*/ + +/** @} */ +/** @} */ diff --git a/components/net/uip/uip/uip_arp.h b/components/net/uip/uip/uip_arp.h new file mode 100644 index 0000000000000000000000000000000000000000..e32594da2ca40414b79f3d0a309dd3abcece08e8 --- /dev/null +++ b/components/net/uip/uip/uip_arp.h @@ -0,0 +1,144 @@ +/** + * \addtogroup uip + * @{ + */ + +/** + * \addtogroup uiparp + * @{ + */ + +/** + * \file + * Macros and definitions for the ARP module. + * \author Adam Dunkels + */ + + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: uip_arp.h,v 1.5 2006/06/11 21:46:39 adam Exp $ + * + */ + +#ifndef __UIP_ARP_H__ +#define __UIP_ARP_H__ + +#include "uip.h" + + +extern struct uip_eth_addr uip_ethaddr; + +/** + * The Ethernet header. + */ +struct uip_eth_hdr { + struct uip_eth_addr dest; + struct uip_eth_addr src; + u16_t type; +}; + +#define UIP_ETHTYPE_ARP 0x0806 +#define UIP_ETHTYPE_IP 0x0800 +#define UIP_ETHTYPE_IP6 0x86dd + + +/* The uip_arp_init() function must be called before any of the other + ARP functions. */ +void uip_arp_init(void); + +/* The uip_arp_ipin() function should be called whenever an IP packet + arrives from the Ethernet. This function refreshes the ARP table or + inserts a new mapping if none exists. The function assumes that an + IP packet with an Ethernet header is present in the uip_buf buffer + and that the length of the packet is in the uip_len variable. */ +/*void uip_arp_ipin(void);*/ +#define uip_arp_ipin() + +/* The uip_arp_arpin() should be called when an ARP packet is received + by the Ethernet driver. This function also assumes that the + Ethernet frame is present in the uip_buf buffer. When the + uip_arp_arpin() function returns, the contents of the uip_buf + buffer should be sent out on the Ethernet if the uip_len variable + is > 0. */ +void uip_arp_arpin(void); + +/* The uip_arp_out() function should be called when an IP packet + should be sent out on the Ethernet. This function creates an + Ethernet header before the IP header in the uip_buf buffer. The + Ethernet header will have the correct Ethernet MAC destination + address filled in if an ARP table entry for the destination IP + address (or the IP address of the default router) is present. If no + such table entry is found, the IP packet is overwritten with an ARP + request and we rely on TCP to retransmit the packet that was + overwritten. In any case, the uip_len variable holds the length of + the Ethernet frame that should be transmitted. */ +void uip_arp_out(void); + +/* The uip_arp_timer() function should be called every ten seconds. It + is responsible for flushing old entries in the ARP table. */ +void uip_arp_timer(void); + +/** @} */ + +/** + * \addtogroup uipconffunc + * @{ + */ + + +/** + * Specifiy the Ethernet MAC address. + * + * The ARP code needs to know the MAC address of the Ethernet card in + * order to be able to respond to ARP queries and to generate working + * Ethernet headers. + * + * \note This macro only specifies the Ethernet MAC address to the ARP + * code. It cannot be used to change the MAC address of the Ethernet + * card. + * + * \param eaddr A pointer to a struct uip_eth_addr containing the + * Ethernet MAC address of the Ethernet card. + * + * \hideinitializer + */ +#define uip_setethaddr(eaddr) do {uip_ethaddr.addr[0] = eaddr.addr[0]; \ + uip_ethaddr.addr[1] = eaddr.addr[1];\ + uip_ethaddr.addr[2] = eaddr.addr[2];\ + uip_ethaddr.addr[3] = eaddr.addr[3];\ + uip_ethaddr.addr[4] = eaddr.addr[4];\ + uip_ethaddr.addr[5] = eaddr.addr[5];} while(0) + +/** @} */ +/** @} */ + +#endif /* __UIP_ARP_H__ */ diff --git a/components/net/uip/uip/uip_clock.h b/components/net/uip/uip/uip_clock.h new file mode 100644 index 0000000000000000000000000000000000000000..f34d78fd64848390720f3c29ce1a111dd11e9d4f --- /dev/null +++ b/components/net/uip/uip/uip_clock.h @@ -0,0 +1,88 @@ +/** + * \defgroup clock Clock interface + * + * The clock interface is the interface between the \ref timer "timer library" + * and the platform specific clock functionality. The clock + * interface must be implemented for each platform that uses the \ref + * timer "timer library". + * + * The clock interface does only one this: it measures time. The clock + * interface provides a macro, CLOCK_SECOND, which corresponds to one + * second of system time. + * + * \sa \ref timer "Timer library" + * + * @{ + */ + +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: clock.h,v 1.3 2006/06/11 21:46:39 adam Exp $ + */ +#ifndef __CLOCK_H__ +#define __CLOCK_H__ + +#include "clock-arch.h" + +/** + * Initialize the clock library. + * + * This function initializes the clock library and should be called + * from the main() function of the system. + * + */ +void clock_init(void); + +/** + * Get the current clock time. + * + * This function returns the current system clock time. + * + * \return The current clock time, measured in system ticks. + */ +clock_time_t clock_time(void); + +/** + * A second, measured in system clock time. + * + * \hideinitializer + */ +#ifdef CLOCK_CONF_SECOND +#define CLOCK_SECOND CLOCK_CONF_SECOND +#else +#define CLOCK_SECOND (clock_time_t)32 +#endif + +#endif /* __CLOCK_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/uip_timer.c b/components/net/uip/uip/uip_timer.c new file mode 100644 index 0000000000000000000000000000000000000000..a411c14d5a3809136e6ec1a9911227f819a833ec --- /dev/null +++ b/components/net/uip/uip/uip_timer.c @@ -0,0 +1,197 @@ +/** + * \addtogroup timer + * @{ + */ + +/** + * \file + * Timer library implementation. + * \author + * Adam Dunkels + */ + +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: timer.c,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +#include "uip_clock.h" +#include "uip_timer.h" +//#include "rtconfig.h" + +/*---------------------------------------------------------------------------*/ +/** + * Set a timer. + * + * This function is used to set a timer for a time sometime in the + * future. The function timer_expired() will evaluate to true after + * the timer has expired. + * + * \param t A pointer to the timer + * \param interval The interval before the timer expires. + * + */ +void +timer_set(struct timer *t, clock_time_t interval) +{ + t->interval = interval; + t->start = clock_time(); +} +/*---------------------------------------------------------------------------*/ +/** + * Reset the timer with the same interval. + * + * This function resets the timer with the same interval that was + * given to the timer_set() function. The start point of the interval + * is the exact time that the timer last expired. Therefore, this + * function will cause the timer to be stable over time, unlike the + * timer_rester() function. + * + * \param t A pointer to the timer. + * + * \sa timer_restart() + */ +void +timer_reset(struct timer *t) +{ + t->start += t->interval; +} +/*---------------------------------------------------------------------------*/ +/** + * Restart the timer from the current point in time + * + * This function restarts a timer with the same interval that was + * given to the timer_set() function. The timer will start at the + * current time. + * + * \note A periodic timer will drift if this function is used to reset + * it. For preioric timers, use the timer_reset() function instead. + * + * \param t A pointer to the timer. + * + * \sa timer_reset() + */ +void +timer_restart(struct timer *t) +{ + t->start = clock_time(); +} +/*---------------------------------------------------------------------------*/ +/** + * Check if a timer has expired. + * + * This function tests if a timer has expired and returns true or + * false depending on its status. + * + * \param t A pointer to the timer + * + * \return Non-zero if the timer has expired, zero otherwise. + * + */ +#include "rtdef.h" +#include "uip-conf.h" +#include "uip.h" + +/* eth rx/tx thread */ +static struct rt_mailbox uip_mbox; +static struct rt_thread aa; + +static char uip_timeout_mb_pool[4 * 4]; +extern u16_t uip_len, uip_slen; + +void uip_timeout_entry2(void* parameter) +{ + + +} +void uip_timeout_entry(void* parameter)//由于TIMEOUT函数,不参与调度 +{ + // struct timer periodic_timer, arp_timer; + static uint8_t cnt; + int i; + /* post message to ethernet thread */ + + //if ((rt_sem_take(msg,RT_WAITING_NO)) != -RT_ETIMEOUT) + //if (timer_expired(&periodic_timer)) //5s enter once + { + //timer_reset(&periodic_timer); + for (i = 0; i < UIP_CONNS; i++) + { + uip_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if (uip_len > 0) + { + uip_arp_out(); + TransmitPacket(); + } + } +#if UIP_UDP + for (i = 0; i < UIP_UDP_CONNS; i++) // + { + uip_udp_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if (uip_len > 0) + { + uip_arp_out(); + TransmitPacket(); + } + } +#endif /* UIP_UDP */ + + /* Call the ARP timer function every 10 seconds. */ + //if (timer_expired(&arp_timer)) + if (++cnt >= 2) //t + { + //timer_reset(&arp_timer); + uip_arp_timer(); + cnt = 0; + } + } + +} +int +timer_expired(struct timer *t) +{//潜在隐形bug + if ((clock_time() - t->start) >= (clock_time_t)t->interval) + { + //rt_mb_send(mbox,& + } + +} +/*---------------------------------------------------------------------------*/ + +/** @} */ diff --git a/components/net/uip/uip/uip_timer.h b/components/net/uip/uip/uip_timer.h new file mode 100644 index 0000000000000000000000000000000000000000..6d90e563a4f8d7f57493c5de40e60f897c04034f --- /dev/null +++ b/components/net/uip/uip/uip_timer.h @@ -0,0 +1,86 @@ +/** + * \defgroup timer Timer library + * + * The timer library provides functions for setting, resetting and + * restarting timers, and for checking if a timer has expired. An + * application must "manually" check if its timers have expired; this + * is not done automatically. + * + * A timer is declared as a \c struct \c timer and all access to the + * timer is made by a pointer to the declared timer. + * + * \note The timer library uses the \ref clock "Clock library" to + * measure time. Intervals should be specified in the format used by + * the clock library. + * + * @{ + */ + + +/** + * \file + * Timer library header file. + * \author + * Adam Dunkels + */ + +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: timer.h,v 1.3 2006/06/11 21:46:39 adam Exp $ + */ +#ifndef __TIMER_H__ +#define __TIMER_H__ + +#include "uip_clock.h" + +/** + * A timer. + * + * This structure is used for declaring a timer. The timer must be set + * with timer_set() before it can be used. + * + * \hideinitializer + */ +struct timer { + clock_time_t start; + clock_time_t interval; +}; + +void timer_set(struct timer *t, clock_time_t interval); +void timer_reset(struct timer *t); +void timer_restart(struct timer *t); +int timer_expired(struct timer *t); + +#endif /* __TIMER_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/uiplib.c b/components/net/uip/uip/uiplib.c new file mode 100644 index 0000000000000000000000000000000000000000..cb5af2cd26904be3e987c8680fd74d7d35966b8f --- /dev/null +++ b/components/net/uip/uip/uiplib.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2004, Adam Dunkels and the Swedish Institute of + * Computer Science. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack + * + * $Id: uiplib.c,v 1.2 2006/06/12 08:00:31 adam Exp $ + * + */ + + +#include "uip.h" +#include "uiplib.h" + + +/*-----------------------------------------------------------------------------------*/ +unsigned char +uiplib_ipaddrconv(char *addrstr, unsigned char *ipaddr) +{ + unsigned char tmp; + char c; + unsigned char i, j; + + tmp = 0; + + for(i = 0; i < 4; ++i) { + j = 0; + do { + c = *addrstr; + ++j; + if(j > 4) { + return 0; + } + if(c == '.' || c == 0) { + *ipaddr = tmp; + ++ipaddr; + tmp = 0; + } else if(c >= '0' && c <= '9') { + tmp = (tmp * 10) + (c - '0'); + } else { + return 0; + } + ++addrstr; + } while(c != '.' && c != 0); + } + return 1; +} + +/*-----------------------------------------------------------------------------------*/ diff --git a/components/net/uip/uip/uiplib.h b/components/net/uip/uip/uiplib.h new file mode 100644 index 0000000000000000000000000000000000000000..c676849efcf0d14fdfcc75b5d48da8db6b926dc2 --- /dev/null +++ b/components/net/uip/uip/uiplib.h @@ -0,0 +1,71 @@ +/** + * \file + * Various uIP library functions. + * \author + * Adam Dunkels + * + */ + +/* + * Copyright (c) 2002, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack + * + * $Id: uiplib.h,v 1.1 2006/06/07 09:15:19 adam Exp $ + * + */ +#ifndef __UIPLIB_H__ +#define __UIPLIB_H__ + +/** + * \addtogroup uipconvfunc + * @{ + */ + +/** + * Convert a textual representation of an IP address to a numerical representation. + * + * This function takes a textual representation of an IP address in + * the form a.b.c.d and converts it into a 4-byte array that can be + * used by other uIP functions. + * + * \param addrstr A pointer to a string containing the IP address in + * textual form. + * + * \param addr A pointer to a 4-byte array that will be filled in with + * the numerical representation of the address. + * + * \retval 0 If the IP address could not be parsed. + * \retval Non-zero If the IP address was parsed. + */ +unsigned char uiplib_ipaddrconv(char *addrstr, unsigned char *addr); + +/** @} */ + +#endif /* __UIPLIB_H__ */ diff --git a/components/net/uip/uip/uipopt.h b/components/net/uip/uip/uipopt.h new file mode 100644 index 0000000000000000000000000000000000000000..b1ef8e560fb3a6cc590e01ed7e8477b604e292af --- /dev/null +++ b/components/net/uip/uip/uipopt.h @@ -0,0 +1,539 @@ +/** + * \defgroup uipopt Configuration options for uIP + * @{ + * + * uIP is configured using the per-project configuration file + * uipopt.h. This file contains all compile-time options for uIP and + * should be tweaked to match each specific project. The uIP + * distribution contains a documented example "uipopt.h" that can be + * copied and modified for each project. + * + * \note Most of the configuration options in the uipopt.h should not + * be changed, but rather the per-project uip-conf.h file. + */ + +/** + * \file + * Configuration options for uIP. + * \author Adam Dunkels + * + * This file is used for tweaking various configuration options for + * uIP. You should make a copy of this file into one of your project's + * directories instead of editing this example "uipopt.h" file that + * comes with the uIP distribution. + */ + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: uipopt.h,v 1.4 2006/06/12 08:00:31 adam Exp $ + * + */ + +#ifndef __UIPOPT_H__ +#define __UIPOPT_H__ + +#ifndef UIP_LITTLE_ENDIAN +#define UIP_LITTLE_ENDIAN 3412 +#endif /* UIP_LITTLE_ENDIAN */ +#ifndef UIP_BIG_ENDIAN +#define UIP_BIG_ENDIAN 1234 +#endif /* UIP_BIG_ENDIAN */ + +#include "uip-conf.h" + +/*------------------------------------------------------------------------------*/ + +/** + * \name Static configuration options + * @{ + * + * These configuration options can be used for setting the IP address + * settings statically, but only if UIP_FIXEDADDR is set to 1. The + * configuration options for a specific node includes IP address, + * netmask and default router as well as the Ethernet address. The + * netmask, default router and Ethernet address are appliciable only + * if uIP should be run over Ethernet. + * + * All of these should be changed to suit your project. +*/ + +/** + * Determines if uIP should use a fixed IP address or not. + * + * If uIP should use a fixed IP address, the settings are set in the + * uipopt.h file. If not, the macros uip_sethostaddr(), + * uip_setdraddr() and uip_setnetmask() should be used instead. + * + * \hideinitializer + */ +#define UIP_FIXEDADDR 0 + +/** + * Ping IP address asignment. + * + * uIP uses a "ping" packets for setting its own IP address if this + * option is set. If so, uIP will start with an empty IP address and + * the destination IP address of the first incoming "ping" (ICMP echo) + * packet will be used for setting the hosts IP address. + * + * \note This works only if UIP_FIXEDADDR is 0. + * + * \hideinitializer + */ +#ifdef UIP_CONF_PINGADDRCONF +#define UIP_PINGADDRCONF UIP_CONF_PINGADDRCONF +#else /* UIP_CONF_PINGADDRCONF */ +#define UIP_PINGADDRCONF 0 +#endif /* UIP_CONF_PINGADDRCONF */ + + +/** + * Specifies if the uIP ARP module should be compiled with a fixed + * Ethernet MAC address or not. + * + * If this configuration option is 0, the macro uip_setethaddr() can + * be used to specify the Ethernet address at run-time. + * + * \hideinitializer + */ +#define UIP_FIXEDETHADDR 0 + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \name IP configuration options + * @{ + * + */ +/** + * The IP TTL (time to live) of IP packets sent by uIP. + * + * This should normally not be changed. + */ +#define UIP_TTL 64 + +/** + * Turn on support for IP packet reassembly. + * + * uIP supports reassembly of fragmented IP packets. This features + * requires an additonal amount of RAM to hold the reassembly buffer + * and the reassembly code size is approximately 700 bytes. The + * reassembly buffer is of the same size as the uip_buf buffer + * (configured by UIP_BUFSIZE). + * + * \note IP packet reassembly is not heavily tested. + * + * \hideinitializer + */ +#define UIP_REASSEMBLY 0 + +/** + * The maximum time an IP fragment should wait in the reassembly + * buffer before it is dropped. + * + */ +#define UIP_REASS_MAXAGE 40 + +/** @} */ + +/*------------------------------------------------------------------------------*/ +/** + * \name UDP configuration options + * @{ + */ + +/** + * Toggles wether UDP support should be compiled in or not. + * + * \hideinitializer + */ +#ifdef UIP_CONF_UDP +#define UIP_UDP UIP_CONF_UDP +#else /* UIP_CONF_UDP */ +#define UIP_UDP 0 +#endif /* UIP_CONF_UDP */ + +/** + * Toggles if UDP checksums should be used or not. + * + * \note Support for UDP checksums is currently not included in uIP, + * so this option has no function. + * + * \hideinitializer + */ +#ifdef UIP_CONF_UDP_CHECKSUMS +#define UIP_UDP_CHECKSUMS UIP_CONF_UDP_CHECKSUMS +#else +#define UIP_UDP_CHECKSUMS 0 +#endif + +/** + * The maximum amount of concurrent UDP connections. + * + * \hideinitializer + */ +#ifdef UIP_CONF_UDP_CONNS +#define UIP_UDP_CONNS UIP_CONF_UDP_CONNS +#else /* UIP_CONF_UDP_CONNS */ +#define UIP_UDP_CONNS 10 +#endif /* UIP_CONF_UDP_CONNS */ + +/** + * The name of the function that should be called when UDP datagrams arrive. + * + * \hideinitializer + */ + + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \name TCP configuration options + * @{ + */ + +/** + * Determines if support for opening connections from uIP should be + * compiled in. + * + * If the applications that are running on top of uIP for this project + * do not need to open outgoing TCP connections, this configration + * option can be turned off to reduce the code size of uIP. + * + * \hideinitializer + */ +#define UIP_ACTIVE_OPEN 1 + +/** + * The maximum number of simultaneously open TCP connections. + * + * Since the TCP connections are statically allocated, turning this + * configuration knob down results in less RAM used. Each TCP + * connection requires approximatly 30 bytes of memory. + * + * \hideinitializer + */ +#ifndef UIP_CONF_MAX_CONNECTIONS +#define UIP_CONNS 10 +#else /* UIP_CONF_MAX_CONNECTIONS */ +#define UIP_CONNS UIP_CONF_MAX_CONNECTIONS +#endif /* UIP_CONF_MAX_CONNECTIONS */ + + +/** + * The maximum number of simultaneously listening TCP ports. + * + * Each listening TCP port requires 2 bytes of memory. + * + * \hideinitializer + */ +#ifndef UIP_CONF_MAX_LISTENPORTS +#define UIP_LISTENPORTS 20 +#else /* UIP_CONF_MAX_LISTENPORTS */ +#define UIP_LISTENPORTS UIP_CONF_MAX_LISTENPORTS +#endif /* UIP_CONF_MAX_LISTENPORTS */ + +/** + * Determines if support for TCP urgent data notification should be + * compiled in. + * + * Urgent data (out-of-band data) is a rarely used TCP feature that + * very seldom would be required. + * + * \hideinitializer + */ +#define UIP_URGDATA 0 + +/** + * The initial retransmission timeout counted in timer pulses. + * + * This should not be changed. + */ +#define UIP_RTO 3 + +/** + * The maximum number of times a segment should be retransmitted + * before the connection should be aborted. + * + * This should not be changed. + */ +#define UIP_MAXRTX 8 + +/** + * The maximum number of times a SYN segment should be retransmitted + * before a connection request should be deemed to have been + * unsuccessful. + * + * This should not need to be changed. + */ +#define UIP_MAXSYNRTX 5 + +/** + * The TCP maximum segment size. + * + * This is should not be to set to more than + * UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN. + */ +#define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) + +/** + * The size of the advertised receiver's window. + * + * Should be set low (i.e., to the size of the uip_buf buffer) is the + * application is slow to process incoming data, or high (32768 bytes) + * if the application processes data quickly. + * + * \hideinitializer + */ +#ifndef UIP_CONF_RECEIVE_WINDOW +#define UIP_RECEIVE_WINDOW UIP_TCP_MSS +#else +#define UIP_RECEIVE_WINDOW UIP_CONF_RECEIVE_WINDOW +#endif + +/** + * How long a connection should stay in the TIME_WAIT state. + * + * This configiration option has no real implication, and it should be + * left untouched. + */ +#define UIP_TIME_WAIT_TIMEOUT 120 + + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \name ARP configuration options + * @{ + */ + +/** + * The size of the ARP table. + * + * This option should be set to a larger value if this uIP node will + * have many connections from the local network. + * + * \hideinitializer + */ +#ifdef UIP_CONF_ARPTAB_SIZE +#define UIP_ARPTAB_SIZE UIP_CONF_ARPTAB_SIZE +#else +#define UIP_ARPTAB_SIZE 8 +#endif + +/** + * The maxium age of ARP table entries measured in 10ths of seconds. + * + * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD + * default). + */ +#define UIP_ARP_MAXAGE 120 + +/** @} */ + +/*------------------------------------------------------------------------------*/ + +/** + * \name General configuration options + * @{ + */ + +/** + * The size of the uIP packet buffer. + * + * The uIP packet buffer should not be smaller than 60 bytes, and does + * not need to be larger than 1500 bytes. Lower size results in lower + * TCP throughput, larger size results in higher TCP throughput. + * + * \hideinitializer + */ +#ifndef UIP_CONF_BUFFER_SIZE +#define UIP_BUFSIZE 400 +#else /* UIP_CONF_BUFFER_SIZE */ +#define UIP_BUFSIZE UIP_CONF_BUFFER_SIZE +#endif /* UIP_CONF_BUFFER_SIZE */ + + +/** + * Determines if statistics support should be compiled in. + * + * The statistics is useful for debugging and to show the user. + * + * \hideinitializer + */ +#ifndef UIP_CONF_STATISTICS +#define UIP_STATISTICS 0 +#else /* UIP_CONF_STATISTICS */ +#define UIP_STATISTICS UIP_CONF_STATISTICS +#endif /* UIP_CONF_STATISTICS */ + +/** + * Determines if logging of certain events should be compiled in. + * + * This is useful mostly for debugging. The function uip_log() + * must be implemented to suit the architecture of the project, if + * logging is turned on. + * + * \hideinitializer + */ +#ifndef UIP_CONF_LOGGING +#define UIP_LOGGING 0 +#else /* UIP_CONF_LOGGING */ +#define UIP_LOGGING UIP_CONF_LOGGING +#endif /* UIP_CONF_LOGGING */ + +/** + * Broadcast support. + * + * This flag configures IP broadcast support. This is useful only + * together with UDP. + * + * \hideinitializer + * + */ +#ifndef UIP_CONF_BROADCAST +#define UIP_BROADCAST 0 +#else /* UIP_CONF_BROADCAST */ +#define UIP_BROADCAST UIP_CONF_BROADCAST +#endif /* UIP_CONF_BROADCAST */ + +/** + * Print out a uIP log message. + * + * This function must be implemented by the module that uses uIP, and + * is called by uIP whenever a log message is generated. + */ +void uip_log(char *msg); + +/** + * The link level header length. + * + * This is the offset into the uip_buf where the IP header can be + * found. For Ethernet, this should be set to 14. For SLIP, this + * should be set to 0. + * + * \hideinitializer + */ +#ifdef UIP_CONF_LLH_LEN +#define UIP_LLH_LEN UIP_CONF_LLH_LEN +#else /* UIP_CONF_LLH_LEN */ +#define UIP_LLH_LEN 14 +#endif /* UIP_CONF_LLH_LEN */ + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \name CPU architecture configuration + * @{ + * + * The CPU architecture configuration is where the endianess of the + * CPU on which uIP is to be run is specified. Most CPUs today are + * little endian, and the most notable exception are the Motorolas + * which are big endian. The BYTE_ORDER macro should be changed to + * reflect the CPU architecture on which uIP is to be run. + */ + +/** + * The byte order of the CPU architecture on which uIP is to be run. + * + * This option can be either BIG_ENDIAN (Motorola byte order) or + * LITTLE_ENDIAN (Intel byte order). + * + * \hideinitializer + */ +#ifdef UIP_CONF_BYTE_ORDER +#define UIP_BYTE_ORDER UIP_CONF_BYTE_ORDER +#else /* UIP_CONF_BYTE_ORDER */ +#define UIP_BYTE_ORDER UIP_LITTLE_ENDIAN +#endif /* UIP_CONF_BYTE_ORDER */ + +/** @} */ +/*------------------------------------------------------------------------------*/ + +/** + * \name Appication specific configurations + * @{ + * + * An uIP application is implemented using a single application + * function that is called by uIP whenever a TCP/IP event occurs. The + * name of this function must be registered with uIP at compile time + * using the UIP_APPCALL definition. + * + * uIP applications can store the application state within the + * uip_conn structure by specifying the type of the application + * structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t. + * + * The file containing the definitions must be included in the + * uipopt.h file. + * + * The following example illustrates how this can look. + \code + +void httpd_appcall(void); +#define UIP_APPCALL httpd_appcall + +struct httpd_state { + u8_t state; + u16_t count; + char *dataptr; + char *script; +}; +typedef struct httpd_state uip_tcp_appstate_t + \endcode + */ + +/** + * \var #define UIP_APPCALL + * + * The name of the application function that uIP should call in + * response to TCP/IP events. + * + */ + +/** + * \var typedef uip_tcp_appstate_t + * + * The type of the application state that is to be stored in the + * uip_conn structure. This usually is typedef:ed to a struct holding + * application state information. + */ + +/** + * \var typedef uip_udp_appstate_t + * + * The type of the application state that is to be stored in the + * uip_conn structure. This usually is typedef:ed to a struct holding + * application state information. + */ +/** @} */ +/** @} */ + +#endif /* __UIPOPT_H__ */ diff --git a/components/net/uip/unix/Makefile b/components/net/uip/unix/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ed64927b89fef891782dd748388a5cb9ddd8e37e --- /dev/null +++ b/components/net/uip/unix/Makefile @@ -0,0 +1,44 @@ +# Copyright (c) 2001, Adam Dunkels. +# 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. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. +# +# $Id: Makefile,v 1.13 2006/06/11 21:55:03 adam Exp $ +# + +all: uip + +CC = gcc +AR = ar +APPS = webserver +CFLAGS = -Wall -g -I../uip -I. -fpack-struct -Os +-include ../uip/Makefile.include + +uip: $(addprefix $(OBJECTDIR)/, main.o tapdev.o clock-arch.o) apps.a uip.a + +clean: + rm -fr *.o *~ *core uip $(OBJECTDIR) *.a diff --git a/components/net/uip/unix/clock-arch.c b/components/net/uip/unix/clock-arch.c new file mode 100644 index 0000000000000000000000000000000000000000..d140aaf785d9e3bac75f99a40e60fd924c1cb1b3 --- /dev/null +++ b/components/net/uip/unix/clock-arch.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * $Id: clock-arch.c,v 1.2 2006/06/12 08:00:31 adam Exp $ + */ + +/** + * \file + * Implementation of architecture-specific clock functionality + * \author + * Adam Dunkels + */ + +#include "clock-arch.h" +#include + +/*---------------------------------------------------------------------------*/ +clock_time_t +clock_time(void) +{ + struct timeval tv; + struct timezone tz; + + gettimeofday(&tv, &tz); + + return tv.tv_sec * 1000 + tv.tv_usec / 1000; +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/unix/clock-arch.h b/components/net/uip/unix/clock-arch.h new file mode 100644 index 0000000000000000000000000000000000000000..e51eee934f84f066a334d92152317f9a6353cc5a --- /dev/null +++ b/components/net/uip/unix/clock-arch.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * $Id: clock-arch.h,v 1.2 2006/06/12 08:00:31 adam Exp $ + */ + +#ifndef __CLOCK_ARCH_H__ +#define __CLOCK_ARCH_H__ + +typedef int clock_time_t; +#define CLOCK_CONF_SECOND 1000 + +#endif /* __CLOCK_ARCH_H__ */ diff --git a/components/net/uip/unix/main.c b/components/net/uip/unix/main.c new file mode 100644 index 0000000000000000000000000000000000000000..e4130e9dd9d376d6ed7abffaf660c44261c3f87a --- /dev/null +++ b/components/net/uip/unix/main.c @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2001, Adam Dunkels. + * 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. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Adam Dunkels. + * 4. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: main.c,v 1.16 2006/06/11 21:55:03 adam Exp $ + * + */ + + +#include "uip.h" +#include "uip_arp.h" +#include "tapdev.h" + +#include "timer.h" + +#define BUF ((struct uip_eth_hdr *)&uip_buf[0]) + +#ifndef NULL +#define NULL (void *)0 +#endif /* NULL */ + +/*---------------------------------------------------------------------------*/ +int +main(void) +{ + int i; + uip_ipaddr_t ipaddr; + struct timer periodic_timer, arp_timer; + + timer_set(&periodic_timer, CLOCK_SECOND / 2); + timer_set(&arp_timer, CLOCK_SECOND * 10); + + tapdev_init(); + uip_init(); + + uip_ipaddr(ipaddr, 192,168,0,2); + uip_sethostaddr(ipaddr); + uip_ipaddr(ipaddr, 192,168,0,1); + uip_setdraddr(ipaddr); + uip_ipaddr(ipaddr, 255,255,255,0); + uip_setnetmask(ipaddr); + + httpd_init(); + + /* telnetd_init();*/ + + /* hello_world_init();*/ + + /* { + u8_t mac[6] = {1,2,3,4,5,6}; + dhcpc_init(&mac, 6); + }*/ + + /*uip_ipaddr(ipaddr, 127,0,0,1); + smtp_configure("localhost", ipaddr); + SMTP_SEND("adam@sics.se", NULL, "uip-testing@example.com", + "Testing SMTP from uIP", + "Test message sent by uIP\r\n");*/ + + /* + webclient_init(); + resolv_init(); + uip_ipaddr(ipaddr, 195,54,122,204); + resolv_conf(ipaddr); + resolv_query("www.sics.se");*/ + + + + while(1) { + uip_len = tapdev_read(); + if(uip_len > 0) { + if(BUF->type == htons(UIP_ETHTYPE_IP)) { + uip_arp_ipin(); + uip_input(); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + tapdev_send(); + } + } else if(BUF->type == htons(UIP_ETHTYPE_ARP)) { + uip_arp_arpin(); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + tapdev_send(); + } + } + + } else if(timer_expired(&periodic_timer)) { + timer_reset(&periodic_timer); + for(i = 0; i < UIP_CONNS; i++) { + uip_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + tapdev_send(); + } + } + +#if UIP_UDP + for(i = 0; i < UIP_UDP_CONNS; i++) { + uip_udp_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + tapdev_send(); + } + } +#endif /* UIP_UDP */ + + /* Call the ARP timer function every 10 seconds. */ + if(timer_expired(&arp_timer)) { + timer_reset(&arp_timer); + uip_arp_timer(); + } + } + } + return 0; +} +/*---------------------------------------------------------------------------*/ +void +uip_log(char *m) +{ + printf("uIP log message: %s\n", m); +} +void +resolv_found(char *name, u16_t *ipaddr) +{ + u16_t *ipaddr2; + + if(ipaddr == NULL) { + printf("Host '%s' not found.\n", name); + } else { + printf("Found name '%s' = %d.%d.%d.%d\n", name, + htons(ipaddr[0]) >> 8, + htons(ipaddr[0]) & 0xff, + htons(ipaddr[1]) >> 8, + htons(ipaddr[1]) & 0xff); + /* webclient_get("www.sics.se", 80, "/~adam/uip");*/ + } +} +#ifdef __DHCPC_H__ +void +dhcpc_configured(const struct dhcpc_state *s) +{ + uip_sethostaddr(s->ipaddr); + uip_setnetmask(s->netmask); + uip_setdraddr(s->default_router); + resolv_conf(s->dnsaddr); +} +#endif /* __DHCPC_H__ */ +void +smtp_done(unsigned char code) +{ + printf("SMTP done with code %d\n", code); +} +void +webclient_closed(void) +{ + printf("Webclient: connection closed\n"); +} +void +webclient_aborted(void) +{ + printf("Webclient: connection aborted\n"); +} +void +webclient_timedout(void) +{ + printf("Webclient: connection timed out\n"); +} +void +webclient_connected(void) +{ + printf("Webclient: connected, waiting for data...\n"); +} +void +webclient_datahandler(char *data, u16_t len) +{ + printf("Webclient: got %d bytes of data.\n", len); +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/unix/tapdev.c b/components/net/uip/unix/tapdev.c new file mode 100644 index 0000000000000000000000000000000000000000..417b2888032fa1438da83479c294f1f10703ea9d --- /dev/null +++ b/components/net/uip/unix/tapdev.c @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * 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 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. + * + * Author: Adam Dunkels + * + * $Id: tapdev.c,v 1.8 2006/06/07 08:39:58 adam Exp $ + */ + +#define UIP_DRIPADDR0 192 +#define UIP_DRIPADDR1 168 +#define UIP_DRIPADDR2 0 +#define UIP_DRIPADDR3 1 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef linux +#include +#include +#include +#define DEVTAP "/dev/net/tun" +#else /* linux */ +#define DEVTAP "/dev/tap0" +#endif /* linux */ + +#include "uip.h" + +static int drop = 0; +static int fd; + + +/*---------------------------------------------------------------------------*/ +void +tapdev_init(void) +{ + char buf[1024]; + + fd = open(DEVTAP, O_RDWR); + if(fd == -1) { + perror("tapdev: tapdev_init: open"); + exit(1); + } + +#ifdef linux + { + struct ifreq ifr; + memset(&ifr, 0, sizeof(ifr)); + ifr.ifr_flags = IFF_TAP|IFF_NO_PI; + if (ioctl(fd, TUNSETIFF, (void *) &ifr) < 0) { + perror(buf); + exit(1); + } + } +#endif /* Linux */ + + snprintf(buf, sizeof(buf), "ifconfig tap0 inet %d.%d.%d.%d", + UIP_DRIPADDR0, UIP_DRIPADDR1, UIP_DRIPADDR2, UIP_DRIPADDR3); + system(buf); + +} +/*---------------------------------------------------------------------------*/ +unsigned int +tapdev_read(void) +{ + fd_set fdset; + struct timeval tv, now; + int ret; + + tv.tv_sec = 0; + tv.tv_usec = 1000; + + + FD_ZERO(&fdset); + FD_SET(fd, &fdset); + + ret = select(fd + 1, &fdset, NULL, NULL, &tv); + if(ret == 0) { + return 0; + } + ret = read(fd, uip_buf, UIP_BUFSIZE); + if(ret == -1) { + perror("tap_dev: tapdev_read: read"); + } + + /* printf("--- tap_dev: tapdev_read: read %d bytes\n", ret);*/ + /* { + int i; + for(i = 0; i < 20; i++) { + printf("%x ", uip_buf[i]); + } + printf("\n"); + }*/ + /* check_checksum(uip_buf, ret);*/ + return ret; +} +/*---------------------------------------------------------------------------*/ +void +tapdev_send(void) +{ + int ret; + /* printf("tapdev_send: sending %d bytes\n", size);*/ + /* check_checksum(uip_buf, size);*/ + + /* drop++; + if(drop % 8 == 7) { + printf("Dropped a packet!\n"); + return; + }*/ + ret = write(fd, uip_buf, uip_len); + if(ret == -1) { + perror("tap_dev: tapdev_send: writev"); + exit(1); + } +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/unix/tapdev.h b/components/net/uip/unix/tapdev.h new file mode 100644 index 0000000000000000000000000000000000000000..280bc52b725e0e61ddb96b15fe5a05dce422894f --- /dev/null +++ b/components/net/uip/unix/tapdev.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2001, Adam Dunkels. + * 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. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Adam Dunkels. + * 4. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 file is part of the uIP TCP/IP stack. + * + * $Id: tapdev.h,v 1.1 2002/01/10 06:22:56 adam Exp $ + * + */ + +#ifndef __TAPDEV_H__ +#define __TAPDEV_H__ + +void tapdev_init(void); +unsigned int tapdev_read(void); +void tapdev_send(void); + +#endif /* __TAPDEV_H__ */ diff --git a/components/net/uip/unix/uip-conf.h b/components/net/uip/unix/uip-conf.h new file mode 100644 index 0000000000000000000000000000000000000000..2878c85b0d1bb574e0073c149cd54ab6a23c78be --- /dev/null +++ b/components/net/uip/unix/uip-conf.h @@ -0,0 +1,157 @@ +/** + * \addtogroup uipopt + * @{ + */ + +/** + * \name Project-specific configuration options + * @{ + * + * uIP has a number of configuration options that can be overridden + * for each project. These are kept in a project-specific uip-conf.h + * file and all configuration names have the prefix UIP_CONF. + */ + +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * 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 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 file is part of the uIP TCP/IP stack + * + * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $ + */ + +/** + * \file + * An example uIP configuration file + * \author + * Adam Dunkels + */ + +#ifndef __UIP_CONF_H__ +#define __UIP_CONF_H__ + +#include + +/** + * 8 bit datatype + * + * This typedef defines the 8-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint8_t u8_t; + +/** + * 16 bit datatype + * + * This typedef defines the 16-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint16_t u16_t; + +/** + * Statistics datatype + * + * This typedef defines the dataype used for keeping statistics in + * uIP. + * + * \hideinitializer + */ +typedef unsigned short uip_stats_t; + +/** + * Maximum number of TCP connections. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_CONNECTIONS 40 + +/** + * Maximum number of listening TCP ports. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_LISTENPORTS 40 + +/** + * uIP buffer size. + * + * \hideinitializer + */ +#define UIP_CONF_BUFFER_SIZE 420 + +/** + * CPU byte order. + * + * \hideinitializer + */ +#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN + +/** + * Logging on or off + * + * \hideinitializer + */ +#define UIP_CONF_LOGGING 1 + +/** + * UDP support on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP 0 + +/** + * UDP checksums on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP_CHECKSUMS 1 + +/** + * uIP statistics on or off + * + * \hideinitializer + */ +#define UIP_CONF_STATISTICS 1 + +/* Here we include the header file for the application(s) we use in + our project. */ +/*#include "smtp.h"*/ +/*#include "hello-world.h"*/ +/*#include "telnetd.h"*/ +#include "webserver.h" +/*#include "dhcpc.h"*/ +/*#include "resolv.h"*/ +/*#include "webclient.h"*/ + +#endif /* __UIP_CONF_H__ */ + +/** @} */ +/** @} */